не корректно задаются координаты в autocad. python
Цель моего скрипта выбрать область печати двумя точками, границы области печати в данном примере задаются прямоугольником. Проблема с методом, который задает рамку печати: SetWindowToPlot(p1, p2). Возможно что метод ожидает передачу параметров с другим типом данных?
# https://www.youtube.com/watch?v=LyIoOUIa_bI Печать с выбором рамки
# http://entercad.ru/acadauto.en/ex_setwindowtoplot.htm пример VBA кода
# http://vbamodel.narod.ru/AutoCAD/idx_object_model.htm объектная модель
from pyautocad import Autocad, APoint
acad = Autocad(create_if_not_exists=True, visible=True)
active_layout = acad.doc.ActiveLayout
acad.doc.SetVariable('BACKGROUNDPLOT', 0)
active_layout.ConfigName = "DWG To Pdf.pc3" # Имя принтера\плоттера
active_layout.CenterPlot = True # Центрировать
active_layout.CanonicalMediaName = 'ISO_full_bleed_A3_(297.00_x_420.00_MM)' # формат листа
active_layout.PlotRotation = 1 # Ориентация чертежа
active_layout.PlotType = 4 # Область печати - режим рамка
# Координаты прямоугольника
# {1: (2333.969263007631, 1135.5093675713745), левая верхняя
# 2: (6226.121726961541, 1135.5093675713745), правая верхняя
# 3: (6226.121726961541, 51.31734362927659), правая нижняя
# 4: (2333.969263007631, 51.31734362927659)} левая нижняя
p1 = APoint(2333.969263007631, 1135.5093675713745) # точка 1
p2 = APoint(6226.121726961541, 51.31734362927659) # точка 3
print(p1, p2)
acad.model.AddLine(p1, p2) # Рисуем диагональ прямоугольника, чтобы проверить правильность координат
# p1[:2] делаем срез, чтобы убрать координату Z
active_layout.SetWindowToPlot(p1[:2],p2[:2]) # <------ НЕ КОРРЕКТНО СРАБАТЫВАЕТ
print(active_layout.GetWindowToPlot(p1[:2],p2[:2])) # Ничего не возвращает
#acad.doc.Plot.PlotToFile("C:/TEST/test.pdf")
def get_polygons():
"""Поиск полигонов в чертеже"""
polygons = {}
for polygon in acad.iter_objects():
if polygon.ObjectName == 'AcDbPolyline'\
and polygon.Closed == True:
coords = polygon.Coordinates
coords = dict(zip(range(1, int(len(coords) / 2) + 1),
zip(coords[::2], coords[1::2])))
polygons[polygon.Handle] = {
'coord':coords,
'area': polygon.Area,
'length':polygon.Length,
'layer':polygon.Layer}
return polygons
polygons = get_polygons()
for hand, info in polygons.items():
points= info['coord']
print(points)
Если задать метод, с точками по координатам SetWindowToPlot(APoint(1, 1)[:2], APoint(1000, 1000)[:2]) то становится видно, что происходит смещение.. Так же пробовал через client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y))...та же проблема смещения координат
