Dag allemaal,
Twee weken terug heb ik een vraag gesteld in het 'algemene' forum, daar kreeg ik echter geen goed antwoord. Wellicht is het antwoord in LISP wel mogelijk.
Wat ik wil is dat ik een knop kan aanmaken voor VPfreeze. Zo ver ik weet is dit nu alleen mogelijk via LayerPropertiesManager > filter aanmaken > VPfreeze (zie bijlage).
Dit filter haalt alle bevroren lagen per viewport eruit. Dit filter werkt dus alleen op een layout.
Achterliggende gedachte is dat ik alle lagen die in een viewport bevroren staan, uit kan zetten; zodat ik in model hetzelfde beeld heb als op layout. Ik gebruik dit vaak voor bv oude/nieuwe situatie.
Gr JMD
Beste JMD,
Bedoel je zoiets:
(defun c:VpTest(/ ~Cmd ~CurLay NotOke ename elist xd_list app_list
app_sub_list xd_code xd_data i Lay)
;LayLst is nog globaal
(setq ~Cmd (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq LayLst '()
NotOke T
)
(setvar "TILEMODE" 0)
(command "PSPACE")
(princ
"\nSelecteer een zwevend kijkvenster(floating viewport).\n"
)
(while NotOke
(setq ename (car (entsel)))
(setq elist (entget ename (list "*")))
(if (= (cdr (assoc 0 elist)) "VIEWPORT")
(setq NotOke nil)
(progn
(setq elist (entget (cdr (assoc 330 elist))))
(if (= (cdr (assoc 0 elist)) "VIEWPORT")
(progn (setq elist (entget (cdr (assoc -1 elist)) (list "*")))
(setq NotOke nil)
)
)
)
)
)
(if (not (setq xd_list (assoc -3 elist)))
(progn
(princ "\nGeen Xdata.")
)
(setq xd_list (cdr xd_list))
)
(while xd_list
(setq app_list (car xd_list))
(setq app_list (cdr app_list))
(while app_list
(setq app_sub_list (car app_list))
(setq xd_code (car app_sub_list))
(setq xd_data (cdr app_sub_list))
(cond
((= 1003 xd_code)
(setq LayLst (append LayLst (list xd_data)))
)
)
(setq app_list (cdr app_list))
(setq xd_list (cdr xd_list))
)
(if (= (length LayLst) 0)
(princ "\nGeen Viewport Freeze van lagen.")
(progn (princ "\nLagenlijst:\n")
(princ LayLst)
)
)
(setq i 0
~CurLay (getvar "CLAYER")
)
(repeat (length LayLst)
(setq Lay (nth i LayLst))
(if (= Lay ~CurLay)
(command "_-LAYER" "OFF" Lay "Y" "")
(command "_-LAYER" "OFF" Lay "")
)
(setq i (1+ i))
)
)
(setvar "CMDECHO" ~Cmd)
(princ)
)
(defun c:TEST()
(c:VpTest)
)
(princ "\nVpTest.lsp loaded, run with VpTest")
Bovenstaand moet natuurlijk nog uitvoerig getest worden, en verfraaid worden.
Met vriendelijke groet, HofCAD CSI.
Beste Hofcad,
volgens mij heb jij begrepen wat JMD wil. :vreegoe:
Ik denk dat ik deze routine ook wel ga gebruiken.
Ik merkte dat het echter fout gaat wanneer de current layer toevallig bevroren is in de geselecteerde viewport. Bij het uitzetten van deze laag wil autocad natuurlijk nog even een bevestiging. Misschien is hier iets voor in te bouwen?
Reimer.
Beste Reimer,
Bovenstaand programma is veranderd.
Met vriendelijke groet, HofCAD CSI.
Dag HofCAD,
We zijn er bijna...
Echter wanneer ik een polygonal viewport heb, werkt het niet.
Is dit op te lossen in de LISP??
Verder werkt het prefect!!!
Gr JMD
Beste JMD,
Ik heb het bovenstaande programma gewijzigd, kun je het nog
eens testen.
Met vriendelijke groet, HofCAD CSI.
Dag HofCAD,
geweldig.....
Gr JMD