| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Автоматическое определение границ печати

Lisp. Автоматическое определение границ печати

Ответ
Поиск в этой теме
Непрочитано 05.08.2016, 13:40 #1
Lisp. Автоматическое определение границ печати
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

Добрый день. Решил написать лисп, чтобы он определял границы примитивов и по ним выставлял SetWindowToPlot . Не могу понять что не так
Код:
[Выделить все]
 (defun Zd132 (  / x1 x2 y1 y2 pt1 pt2 pt3 pt4 objItem )
(princ "\n Вычисляет левый и правый углы примитивов и выставляет окно печати по ним ")
(setq x1	(car(getvar "EXTMax"))	x2	(car(getvar "EXTMin"))	y1	(cadr(getvar "EXTMax"))	y2	(cadr(getvar "EXTMin")))
(vlax-for objItem  (vla-get-ActiveSelectionSet(vla-get-ActiveDocument (vlax-get-acad-object)))
	(vla-GetBoundingBox objItem  'pt1 'pt2)
	(if	(< (car (vlax-safearray->list pt1)) x1) 	(setq x1 (car (vlax-safearray->list pt1))))
	(if	(< (cadr (vlax-safearray->list pt1)) y1) 	(setq y1 (cadr (vlax-safearray->list pt1))))
	(if	(> (car (vlax-safearray->list pt2)) x2) 	(setq x2 (car (vlax-safearray->list pt2))))
	(if	(> (cadr (vlax-safearray->list pt2)) y2) 	(setq y2 (cadr (vlax-safearray->list pt2))))
)
(setq 	pt3 	(vlax-safearray-fill(vlax-make-safearray vlax-vbDouble '(0 . 1))(list x1 y1 )) 
		pt4 	(vlax-safearray-fill(vlax-make-safearray vlax-vbDouble '(0 . 1))(list x2 y2 )))
(vla-SetWindowToPlot(vla-get-ActiveLayout(vla-get-activedocument(vlax-get-acad-object))) pt3 pt4)
(princ)
)
(defun C:Zd132()(Zd132))
Просмотров: 1450
 
Автор темы   Непрочитано 23.08.2016, 09:38
#2
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


переделал, вроде работает
Код:
[Выделить все]
 (defun Zd132 (  / x1 x2 y1 y2 pt1 pt2 pt3 pt4 objItem sel01)
(princ "\n Вычисляет левый и правый углы примитивов и выставляет окно печати по ним ")
(vla-clear(setq sel01 (vla-get-ActiveSelectionSet(vla-get-ActiveDocument (vlax-get-acad-object)))))
(pl:obj-filter-select-all sel01 (list(cons 410 (getvar "CTAB")) '(-4 . "<NOT") '(0 . "VIEWPORT")'(-4 . "NOT>")))
(setq x1	(car(getvar "EXTMax"))	x2	(car(getvar "EXTMin"))	y1	(cadr(getvar "EXTMax"))	y2	(cadr(getvar "EXTMin")))
(vlax-for objItem  sel01
	(vla-GetBoundingBox objItem  'pt1 'pt2)
	(if	(< (car (vlax-safearray->list pt1)) x1) 	(setq x1 (car (vlax-safearray->list pt1))))
	(if	(< (cadr (vlax-safearray->list pt1)) y1) 	(setq y1 (cadr (vlax-safearray->list pt1))))
	(if	(> (car (vlax-safearray->list pt2)) x2) 	(setq x2 (car (vlax-safearray->list pt2))))
	(if	(> (cadr (vlax-safearray->list pt2)) y2) 	(setq y2 (cadr (vlax-safearray->list pt2))))
)
(setq 	pt3 	(vlax-safearray-fill(vlax-make-safearray vlax-vbDouble '(0 . 1))(list x1 y1 )) 
		pt4 	(vlax-safearray-fill(vlax-make-safearray vlax-vbDouble '(0 . 1))(list x2 y2 )))
(vla-SetWindowToPlot(vla-get-ActiveLayout(vla-get-activedocument(vlax-get-acad-object))) pt3 pt4)
(vla-Regen (vla-get-activedocument(vlax-get-acad-object)) 1)
(princ)
)
(defun C:Zd132()(Zd132))
но вот получается если у мульти текста стоит ширина текста ,которая выходит за край листа, то граница будет определятся по этой мнимой границе. Есть ли кокой нибуть другой более точный сопсоб определять границы примитивов , чтобы по ним выставить окно для печати?
Composter вне форума  
 
Непрочитано 23.08.2016, 14:12
#3
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Я бы исключил Mтексты и прочие текстовые объекты из анализируемого набора, т.к. обычно границы печати определяются рамками чертежей, которые нарисованы блоками или какими-нибудь линейными примитивами. С библиотекой функций pl: незнаком, но в данном случае наверно надо добавить '(0 . "MTEXT") '(0 . "TEXT") в список '("<NOT") '(0 . "VIEWPORT")'(-4 . "NOT>").

Последний раз редактировалось kp+, 23.08.2016 в 14:21.
kp+ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Автоматическое определение границ печати

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определение границ области (AutoCAD & lisp) a-karlson LISP 23 27.11.2016 14:06
Определение размеров печати для файлов форматов .DWG и .PLT Tjcorn Прочее. Программное обеспечение 7 13.11.2012 15:08
LISP. Как запустить LISP программу при создании чертежа по шаблону? (Автоматическое заполнение основной надписи) Do$ LISP 25 22.06.2011 15:39