Есть идея написать на Пайтоне аналог скрипта
AL для создания листов с видовыми экранами из рамок/блоков в пространстве модели. Предложенный там скрипт не вполне корректно работает с используемым мной динамическим блоком для рамки, а переделывать LISP пока желания не возникает
Так вот, своим Python скриптом, получаю координату базовой точки рамки-блока (правый нижний угол)
x,
y в пространстве модели, ширину
width, высоту
height, поворот
orientation. Далее удаляю существующие листы кроме пространства модели и пустого листа по умолчанию "Лист1".
Затем создаю лист c именем
pagename и пытаюсь создать видовой экран в нем (за основу
взял этот код):
newPage = aDoc.Layouts.Add(pagename)
aDoc.ActiveLayout = newPage
# Установить активным пространство листа
aDoc.ActiveSpace = 0 #acPaperSpace
center = win32com.client.VARIANT(VT_ARRAY | VT_R8, (x-width/2, y+height/2, 0))
# Видовой экран
newVport = aDoc.PaperSpace.AddPViewport(center, width, height)
# направление взгляда на viewport
newVport.Direction = win32com.client.VARIANT(VT_ARRAY | VT_R8, (1,1,1))
# Отобразить viewport
newVport.Display(True)
# Переключение в пространство модели
aDoc.MSpace = True
# Установить viewport текущим
aDoc.ActivePViewport = newVport
# попытка сделать ZoomExtents
win32com.client.Dispatch("AutoCAD.Application").ZoomExtents()
# Деактивация пространства модели
aDoc.MSpace = False
В результате все вылетает на строчке "aDoc.ActivePViewport = newVport"
0, 'AutoCAD', 'Нет активного видового экрана в пространстве модели. Переключение в пространство листа'
По факту получается пустой лист минимального размера, и где-то полноразмерная рамка видового экрана далеко сбоку (примерно как на расстоянии от начала координат).
Понимаю, в моем коде может быть много ошибок, укажите хотя бы на несколько из них.