Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: Пашин Евгений от 24-08-2015, 12:38:31

Название: Как программно удалить AcDbViewport?
Отправлено: Пашин Евгений от 24-08-2015, 12:38:31
Что-то не могу понять почему не удаляется объект 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
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Александр Ривилис от 24-08-2015, 15:34:19
Что-то не могу понять почему не удаляется объект AcDbViewport из пространства листа.
Если мне не изменяет память, то последний (или единственный) Viewport не удаляется.
Заодно посмотри в документации по поводу метода Delete и использования вместо For i = ... цикла For Each
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Пашин Евгений от 24-08-2015, 16:07:43
Приеду домой, напишу как я его удалил )))
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Александр Ривилис от 24-08-2015, 16:10:51
А заодно уточни пользуешься ли ты когда нибудь поиском (https://www.google.com/search?q=delete+viewport+vba&ie=utf-8&oe=utf-8#q=delete+viewport+vba+site:forums.autodesk.com)? ;)
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Windcastle от 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" - нужно ее проверить
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Windcastle от 24-08-2015, 19:27:51
О, это чудо ))) Спасибо Александру за ссылки!

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

Сколько бы листов не создавал - видовые экраны не создаются )))) То, что надо!
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Александр Ривилис от 24-08-2015, 19:28:51
Спасибо Александру за ссылки!
Это не мне, а Гуглу.
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Windcastle от 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
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Александр Ривилис от 24-08-2015, 19:40:53
Мой вариант ответа на данный вопрос!
1) Использовать командные методы нужно только тогда, когда других методов нет.
2) Этот код будет работать только в англоязычной локализации AutoCAD. В других вместо "DELETE" должно быть "_DELETE", а еще правильнее "_ERASE"
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Windcastle от 24-08-2015, 19:49:36
Да, Вы правы, отформатирую правильно...
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Алексей Кулик от 25-08-2015, 17:02:34
Советую также не забывать про полупризрачную возможность переопределения команд. Так что я бы вместо "_delete" или "_erase" использовал запись с точкой: "_.delete" или "_.erase" соответственно.
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Windcastle от 25-08-2015, 20:31:48
Советую также не забывать про полупризрачную возможность переопределения команд.

А что это такое - полупризрачное переопределение команд?
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Александр Ривилис от 25-08-2015, 21:10:58
А что это такое - полупризрачное переопределение команд?
Это Алексей Кулик пошутил. Почитай про команды _UNDEFINE (НЕТКОМ) и _REDEFINE (ДАКОМ)
Название: Re: Как программно удалить AcDbViewport?
Отправлено: Алексей Кулик от 25-08-2015, 23:14:13
Я про то, что теоретически команды могут быть переопределены. Сейчас уже это достаточно редко встречается, но тем не менее забывать про подобную возможность не следует.