Пекшев aka Modis пишет:Не совсем допонял смысл
Может вам поможет то, что каждый лист можно сохранять в пространство модели (правда в отдельный файл)?
Нет, это не совсем то.
Написал следующую функцию, но не очень нравится её скорость работы.
Так вот, повторюсь: хотелось бы, чтобы функция выполнялась методом ActiveX... может будет шустрее).
;Программа перемещает пространство модели в выбранных видовых экранах
;
(defun ErrorVP (msg) ;функция отлова ошибок
(command)
(setvar "CMDECHO" echo)
(setq *error* ExError)
(princ)
)
(defun c:VP-Move-Sp (/ ExError echo activeVp selSet ssLen indexCount delta dst pt2 entItem idVp obj)
(vl-load-com)
(vla-StartUndoMark (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
(setq ExError *error*
*error* ErrorVP
echo (getvar "CMDECHO")
activeVp (getvar "CVPORT")
) ;setq
(setvar "CMDECHO" 0)
(if
(= (getvar "TILEMODE") 1)
(alert "Команда не доступна в пространстве модели. Перейдите в пространство листа.")
(progn
(if (/= 1 activeVp)
(alert "Команда не доступна в плавающем видовом экране. Перейдите в пространство листа.")
(progn
(setq selSet (ssget '((0 . "VIEWPORT")))
ssLen (sslength selSet)
indexCount (1- ssLen)
) ;setq
(initget "X Y")
(setq delta (getkword "\nУкажите ось смещения [X/Y] <Y>: "))
(initget 1)
(setq dst (/ (getreal "\nУкажите величину смещения видового экрана (в единицах модели): ") -1))
(if
(= delta "Y")
(setq pt2 (list '0.0 dst '0.0))
(setq pt2 (list dst '0.0 '0.0))
) ;if
(repeat ssLen
(setq entItem (ssname selSet indexCount)
idVp (cdr (assoc 69 (entget entItem)))
indexCount (1- indexCount)
obj (vlax-ename->vla-object entItem)
) ;setq
(if
(= (vlax-get-property obj 'DisplayLocked)
:vlax-true)
(vlax-put-property obj 'DisplayLocked :vlax-false)
) ;if
(command "_MSPACE" "_cvport" idVp
"_-Pan" "0.0,0.0,0.0" pt2 "_PSPACE"
) ;command
(vlax-put-property obj 'DisplayLocked :vlax-true)
) ;repeat
) ;progn
) ;if
) ;progn
) ;if
(vlax-release-object obj)
(setvar "CMDECHO" echo)
(vla-EndUndoMark (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
(princ)
)