Как программно удалить AcDbViewport?

Автор Тема: Как программно удалить AcDbViewport?  (Прочитано 10746 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Что-то не могу понять почему не удаляется объект AcDbViewport из пространства листа.

Код - vb.net [Выбрать]
  1.             n = acDoc.ActiveLayout.Block.Count - 1
  2.             For i = 0 To n
  3.                 Set obj = acDoc.ActiveLayout.Block.Item(i)
  4.                 Select Case obj.ObjectName
  5.                     Case "AcDbViewport"
  6.                         obj.Delete
  7.                 End Select
  8.             Next i

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как программно удалить AcDbViewport?
« Ответ #1 : 24-08-2015, 15:34:19 »
Что-то не могу понять почему не удаляется объект AcDbViewport из пространства листа.
Если мне не изменяет память, то последний (или единственный) Viewport не удаляется.
Заодно посмотри в документации по поводу метода Delete и использования вместо For i = ... цикла For Each
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Как программно удалить AcDbViewport?
« Ответ #2 : 24-08-2015, 16:07:43 »
Приеду домой, напишу как я его удалил )))

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как программно удалить AcDbViewport?
« Ответ #3 : 24-08-2015, 16:10:51 »
А заодно уточни пользуешься ли ты когда нибудь поиском? ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Как программно удалить AcDbViewport?
« Ответ #4 : 24-08-2015, 19:16:10 »
Александр, спасибо за ссылки!

Первым что попало на глаза:

Код - Visual Basic [Выбрать]
  1. Public Sub KillViewport()
  2.     For Each objVP In ThisDrawing.PaperSpace
  3.     Select Case objVP.ObjectName
  4.         Case "AcDbViewport"
  5.             objVP.Delete
  6.     End Select
  7.     Next
  8. End Sub

Немного модифицировал пример...

Прекрасный вариант, но у меня другой ))) Не менее интересный )))

Кстати, там же нашел другой способ переключения вкладок листов... Команда "CTAB" - нужно ее проверить

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Как программно удалить AcDbViewport?
« Ответ #5 : 24-08-2015, 19:27:51 »
О, это чудо ))) Спасибо Александру за ссылки!

Код - Visual Basic [Выбрать]
  1. Application.Preferences.Display.LayoutCreateViewport = False

Сколько бы листов не создавал - видовые экраны не создаются )))) То, что надо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как программно удалить AcDbViewport?
« Ответ #6 : 24-08-2015, 19:28:51 »
Спасибо Александру за ссылки!
Это не мне, а Гуглу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Пашин Евгений 03-09-2015, 10:38:24

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Как программно удалить AcDbViewport?
« Ответ #7 : 24-08-2015, 19:33:31 »
Мой вариант ответа на данный вопрос!

Код - Visual Basic [Выбрать]
  1.             For i = 0 To acDoc.ActiveLayout.Block.Count - 1
  2.                 obj = acDoc.ActiveLayout.Block.Item(i)
  3.                 Select Case obj.ObjectName
  4.                     Case "AcDbViewport"
  5.                         HandleName = obj.Handle
  6.                         acDoc.SendCommand("_delete" & vbCr)   ' acDoc.SendCommand("_erase" & vbCr)
  7.                        acDoc.SendCommand("(handent """ & HandleName & """)" & vbCr)
  8.                         acDoc.SendCommand(vbCr)
  9.                 End Select
  10.             Next i

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как программно удалить AcDbViewport?
« Ответ #8 : 24-08-2015, 19:40:53 »
Мой вариант ответа на данный вопрос!
1) Использовать командные методы нужно только тогда, когда других методов нет.
2) Этот код будет работать только в англоязычной локализации AutoCAD. В других вместо "DELETE" должно быть "_DELETE", а еще правильнее "_ERASE"
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Как программно удалить AcDbViewport?
« Ответ #9 : 24-08-2015, 19:49:36 »
Да, Вы правы, отформатирую правильно...

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Как программно удалить AcDbViewport?
« Ответ #10 : 25-08-2015, 17:02:34 »
Советую также не забывать про полупризрачную возможность переопределения команд. Так что я бы вместо "_delete" или "_erase" использовал запись с точкой: "_.delete" или "_.erase" соответственно.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Как программно удалить AcDbViewport?
« Ответ #11 : 25-08-2015, 20:31:48 »
Советую также не забывать про полупризрачную возможность переопределения команд.

А что это такое - полупризрачное переопределение команд?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как программно удалить AcDbViewport?
« Ответ #12 : 25-08-2015, 21:10:58 »
А что это такое - полупризрачное переопределение команд?
Это Алексей Кулик пошутил. Почитай про команды _UNDEFINE (НЕТКОМ) и _REDEFINE (ДАКОМ)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Как программно удалить AcDbViewport?
« Ответ #13 : 25-08-2015, 23:14:13 »
Я про то, что теоретически команды могут быть переопределены. Сейчас уже это достаточно редко встречается, но тем не менее забывать про подобную возможность не следует.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!