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

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

Lisp. выставление видовых экранов в лейаутах по точкам указанным в модели

Ответ
Поиск в этой теме
Непрочитано 23.03.2012, 19:44 #1
Lisp. выставление видовых экранов в лейаутах по точкам указанным в модели
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

здравствуйте,форумчане.накатал лиспик небольшой для выставление видовых экранов в лейаутах по точкам указанным в модели(по левому верхнему углу)
Код:
[Выделить все]
 
(defun c:Zod122 ( / spisok_layots 1_list flag pt1 pt2 pt_z vp_1 ss2 vp_obj_1 pt3)
(princ "\nвыставляет видовые экраны ")
(vla-put-ActiveSpace (vla-get-activedocument(vlax-get-acad-object)) 1)
(setq spisok_layots(cdr(ttc-layouts-list)) 1_list(car(loc:dwgru-get-user-dcl "Укажите лист" spisok_layots nil)))
(while (/= (car spisok_layots) 1_list)(setq spisok_layots (cdr spisok_layots)))
(while 	(null flag)
	(if 	(setq pt_z (getpoint (strcat "\n Укажите точку для листа " (car spisok_layots))))
			(if (setq ss2(ssget "_X" (list '(0 . "VIEWPORT")(cons 410 (car spisok_layots)))))
				(progn
					(vla-put-ActiveLayout (vla-get-activedocument(vlax-get-acad-object))(vla-item 
						(vla-get-layouts(vla-get-activedocument (vlax-get-acad-object))) (car spisok_layots)))
					(setq vp_1 (ssname ss2 0) vp_obj_1 (vlax-ename->vla-object vp_1))
					(vla-GetBoundingBox vp_obj_1 'pt1 'pt2)
					(setq pt1 (vlax-safearray->list pt1) pt2 (vlax-safearray->list pt2) pt3 (trans(list (car pt1)(cadr pt2) 0) 3 2))
					(vla-put-MSpace (vla-get-activedocument(vlax-get-acad-object))1)
					(vl-cmdf "_.pan" pt_z pt3)
					(vla-put-MSpace (vla-get-activedocument(vlax-get-acad-object))0)
					(vla-put-ActiveSpace (vla-get-activedocument(vlax-get-acad-object)) 1)
					(if (cdr spisok_layots)(setq spisok_layots(cdr spisok_layots))(setq flag T))
				)
			)
		(setq flag T)
	)
)
(princ)
)
в связи с этим вопрос можно ли строку (vl-cmdf "_.pan" pt_z pt3) заменить чем нибудь, что не было обращения через командную строку? сам копался в свойствах VIEWPORT ,нашел 12 пару которая отвечает за центр изображения в модели.но через entmode VIEWPORT нельзя изменить (
и еще вопрос что бы корректно было преобразование координат (trans pt 3 2) необходимо что бы лейаут был активен.можно ли сделать это преобразование находясь в пространстве модели и не переключаться в пространство лейаута?

Вложения
Тип файла: lsp for_zod122.lsp (3.2 Кб, 76 просмотров)

Просмотров: 2055
 
Непрочитано 26.03.2012, 18:50
1 | #2
Psyakrev


 
Регистрация: 17.06.2010
Сообщений: 438


Используйте vla-zoomcenter - те же яйца, вид в профиль. Ничего другого не нашел
Код:
[Выделить все]
 (defun create-viewport (p1 p2 / p1x p1y p2x p2y vp_h vp_w vp)
    (rir-start)
    (setq p1x (car p1) p1y (cadr p1) p2x (car p2) p2y (cadr p2)
      vp_h (abs (- p1y p2y)) vp_w (abs (- p1x p2x))
      vp (vla-AddPViewport *acad-paper (vlax-3d-point (list (/ vp_w 2) (/ vp_h 2))) vp_w vp_h))
    (vla-display vp :vlax-true)
    (vla-put-mspace *acad-doc :vlax-true)
    (vla-put-activepviewport *acad-doc vp)
    (vla-zoomcenter *acad-app (vlax-3d-point (list (/ (+ p1x p2x) 2) (/ (+ p1y p2y) 2))) 1.)
    (vla-put-mspace *acad-doc :vlax-false)
    (vla-put-standardscale vp acVpCustomScale)
    (vla-put-CustomScale vp 1.0)
    (vla-put-Layer vp "Defpoints")
    )
Отсутствие очевидного решения такой казалось бы простой задачи наводит на печальные аналогии с ректальной тонзиллэктомией - но в условиях суровой российской реальности традиционные пути иногда бывают закрыты. Если я ошибаюсь - надеюсь мэтры деликатно меня поправят.

Последний раз редактировалось Psyakrev, 26.03.2012 в 19:13.
Psyakrev вне форума  
 
Непрочитано 23.10.2014, 14:56
#3
Andrey_13

Инженер-проектировщик РЗА, ПА, ВК
 
Регистрация: 06.02.2014
Екатеринбург
Сообщений: 32


Что такое "(rir-start)" в коде?
Andrey_13 вне форума  
 
Непрочитано 23.10.2014, 17:00
1 | #4
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Это пользовательская функция, описание которой автор забыл добавить. Я думаю, там должно быть нечто вроде этого:
Код:
[Выделить все]
 
(defun rir-start ()
    (vl-load-com)
	(setq *acad-app (vlax-get-acad-object) 
		  *acad-doc (vla-get-ActiveDocument *acad-app)
		  *acad-model (vla-get-ModelSpace *acad-doc)
		  *acad-paper (vla-get-PaperSpace *acad-doc)
	)
)
Может, чего еще, но для данного кода должно хватить.

Последний раз редактировалось skkkk, 23.10.2014 в 19:36.
skkkk вне форума  
 
Непрочитано 23.10.2014, 19:27
#5
Andrey_13

Инженер-проектировщик РЗА, ПА, ВК
 
Регистрация: 06.02.2014
Екатеринбург
Сообщений: 32


Цитата:
Сообщение от skkkk Посмотреть сообщение
Может, чего еще, но для данного кода должно хватить.
Тогда и (vl-load-com) включить.
Andrey_13 вне форума  
 
Непрочитано 23.10.2014, 19:35
#6
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


дадада
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. выставление видовых экранов в лейаутах по точкам указанным в модели



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Компоновка видовых экранов на лист. YRat Готовые программы 57 06.06.2018 12:28
Проекции видовых экранов листов в модели (= отображение viewport на layout в model) I.Van AutoCAD 6 02.08.2012 15:31
лисп для обрисовки границ видовых экранов листа в модели Composter LISP 10 03.10.2011 19:10
Перенос чертежей в модели с сохранением изображения на видовых экранах Y-jin AutoCAD 4 22.04.2011 12:34
Содержимое видовых экранов (в ПЛ) плавает при кручении колеса мыши JokerrSergh AutoCAD 29 29.12.2008 13:16