TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: ELOQUINTET on August 26, 2008, 09:53:54 AM
-
In one of our templates we have about 12 layout tabs with a single viewport on each. Each viewport on the different layouts has specific layers frozen within it. I need to generate a report that will show me what layers are frozen in each viewport/layout tab. Right now I only have a single viewport per layout but I may have more later and would like to run the same type check but I'll keep it simple for starters. Anyone have something like this?
-
This might do what you need:
(defun c:test (/ a b c el ll ss)
(if (setq ss (ssget "x" '((0 . "VIEWPORT"))))
(foreach e (mapcar 'cadr (ssnamex ss))
;;CABS pspace vport filter
(setq a (cdr (assoc 330 (entget e)))
b (cdr (assoc 340 (entget a)))
c (cdr (assoc 331 (entget b)))
)
(if (and (not (equal c e))
(setq el (entget e))
(member 331 (mapcar 'car el))
)
(foreach i el
(if (and (= (car i) 331)
(setq ll (entget (cdr i)))
(= (cdr (assoc 0 ll)) "LAYER")
)
(princ (strcat "\nLayer "
(cdr (assoc 2 ll))
" controlled in vport on layout "
(cdr (assoc 410 el))
)
)
)
)
)
)
)
(princ)
)
-
Hi
With at ?
@+
-
Nice one Ron.
Here is a variation of your routine.
;; By ronjonp modified by CAB
;; Reports all the frozen layers in each VP by layouts
(defun c:VPFrzReport (/ a b c el ll ss dxfvpcode ln lastln id lastid)
;; Not sure of the exact version when this changed
(if (> (rtos(atof(getvar "ACADVER"))2 2) "15.00")
(SETQ dxfvpcode 331) ; for ACAD >2000
(SETQ dxfvpcode 341)
)
(if (setq ss (ssget "x" '((0 . "VIEWPORT"))))
(foreach e (mapcar 'cadr (ssnamex ss))
;;CABS pspace vport filter
(setq a (cdr (assoc 330 (entget e)))
b (cdr (assoc 340 (entget a)))
c (cdr (assoc dxfvpcode (entget b)))
ln (cdr (assoc 410 (entget e)))
id (cdr (assoc 69 (entget e)))
)
(if (or (null lastln ) (/= ln lastln))
(progn
(setq lastln ln)
(princ (strcat "\nLayout " ln " ----------"))
)
)
(if (or (null lastid ) (/= id lastid))
(progn
(setq lastid id)
(princ (strcat "\n VP ID# " (itoa id) " ......."))
)
)
(if (and (not (equal c e))
(setq el (entget e))
(or (member dxfvpcode (mapcar 'car el))
(prompt "\n No Frozen Layers"))
)
(foreach i el
(if (and (= (car i) dxfvpcode)
(setq ll (entget (cdr i)))
(= (cdr (assoc 0 ll)) "LAYER")
)
(princ (strcat "\n Layer "
(cdr (assoc 2 ll))
" controlled in vport on layout "
(cdr (assoc 410 el))
)
)
)
)
)
)
)
(princ)
)
<edit: updated code>
-
Nice CAB...I like the output much better.
So you're still gonna help Dan after he dissed your beer? :roll:
:-)
-
Thanks for the reminder, I should pull the code. :evil:
-
woah hey wow, i can feel the love in the room. I will test out and let you know. Thanks for all the responses.
-
uh where does it save the report. i was thinking it would put it in the directory that the drawing was in but it doesn't appear there. what am i missing?
-
Look at your command line Dan.
-
I looked at it but not sure what to make of it.
I am looking for a list of the layer names and am not seeing that?
Layout 01-NOTE ----------
VP ID# 1 .......
Layout 02-KEY ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 03-EXST ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 04-DEMO-C ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 05-DEMO-F ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 06-NEW ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 07-FIXT ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 08-DECO ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 09-ELEC ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 10-CLNG ----------
VP ID# 2 .......
VP ID# 1 .......
Layout 11-ELEV-1 ----------
VP ID# 2 .......
VP ID# 1 .......
Layout SYMBOLS ----------
VP ID# 0 .......
-
That means there are no viewport layer overrides.
-
Just updated the code to print the message if no layers are frozen.
PS only reports on FROZEN in VP layers
-
I'm not sure we understand eachother so I'm attaching the file I'm running this on. When you click in the viewport on layout 2-11 and look in the layers dialog you will see that different layers are frozen per layout. These layer names are what I want to be reported.
-
does it have something to do with the layer that the viewport is on being frozen?
-
does it have something to do with the layer that the viewport is on being frozen?
Your drawing works fine here:
C:VPFRZREPORT
Layout 01-NOTE ----------
VP ID# 1 .......
Layout 02-KEY ----------
VP ID# 2 .......
Layer z-viewport controlled in vport on layout 02-KEY
Layer i-new-wall-patt controlled in vport on layout 02-KEY
Layer i-exst-sqft-chrg controlled in vport on layout 02-KEY
Layer i-exst-sqft-new controlled in vport on layout 02-KEY
Layer i-exst-sqft-reno controlled in vport on layout 02-KEY
Layer i-exst-sqft-exst controlled in vport on layout 02-KEY
Layer i-exst-sqft-incr controlled in vport on layout 02-KEY
Layer i-elec_symb controlled in vport on layout 02-KEY
Layer i-new-wall controlled in vport on layout 02-KEY
VP ID# 1 .......
Layout 03-EXST ----------
VP ID# 0 .......
Layer z-viewport controlled in vport on layout 03-EXST
Layout 04-DEMO-C ----------
Layer z-viewport controlled in vport on layout 04-DEMO-C
Layer i-new-wall-patt controlled in vport on layout 04-DEMO-C
Layer i-key-patt controlled in vport on layout 04-DEMO-C
Layer i-exst-sqft-chrg controlled in vport on layout 04-DEMO-C
Layer i-exst-sqft-new controlled in vport on layout 04-DEMO-C
Layer i-exst-sqft-reno controlled in vport on layout 04-DEMO-C
Layer i-exst-sqft-exst controlled in vport on layout 04-DEMO-C
Layer i-exst-sqft-incr controlled in vport on layout 04-DEMO-C
Layer i-elec_symb controlled in vport on layout 04-DEMO-C
Layer i-new-wall controlled in vport on layout 04-DEMO-C
Layout 05-DEMO-F ----------
Layer z-viewport controlled in vport on layout 05-DEMO-F
Layer i-new-wall-patt controlled in vport on layout 05-DEMO-F
Layer i-key-patt controlled in vport on layout 05-DEMO-F
Layer i-exst-sqft-chrg controlled in vport on layout 05-DEMO-F
Layer i-exst-sqft-new controlled in vport on layout 05-DEMO-F
Layer i-exst-sqft-reno controlled in vport on layout 05-DEMO-F
Layer i-exst-sqft-exst controlled in vport on layout 05-DEMO-F
Layer i-exst-sqft-incr controlled in vport on layout 05-DEMO-F
Layer i-elec_symb controlled in vport on layout 05-DEMO-F
Layer i-new-wall controlled in vport on layout 05-DEMO-F
Layout 06-NEW ----------
Layer z-viewport controlled in vport on layout 06-NEW
Layer i-key-patt controlled in vport on layout 06-NEW
Layer i-exst-sqft-chrg controlled in vport on layout 06-NEW
Layer i-exst-sqft-new controlled in vport on layout 06-NEW
Layer i-exst-sqft-reno controlled in vport on layout 06-NEW
Layer i-exst-sqft-exst controlled in vport on layout 06-NEW
Layer i-exst-sqft-incr controlled in vport on layout 06-NEW
Layer i-elec_symb controlled in vport on layout 06-NEW
Layout 07-FIXT ----------
Layer z-viewport controlled in vport on layout 07-FIXT
Layer i-new-wall-patt controlled in vport on layout 07-FIXT
Layer i-key-patt controlled in vport on layout 07-FIXT
Layer i-exst-sqft-chrg controlled in vport on layout 07-FIXT
Layer i-exst-sqft-new controlled in vport on layout 07-FIXT
Layer i-exst-sqft-reno controlled in vport on layout 07-FIXT
Layer i-exst-sqft-exst controlled in vport on layout 07-FIXT
Layer i-exst-sqft-incr controlled in vport on layout 07-FIXT
Layer i-elec_symb controlled in vport on layout 07-FIXT
Layout 08-DECO ----------
Layer z-viewport controlled in vport on layout 08-DECO
Layer i-new-wall-patt controlled in vport on layout 08-DECO
Layer i-key-patt controlled in vport on layout 08-DECO
Layer i-exst-sqft-chrg controlled in vport on layout 08-DECO
Layer i-exst-sqft-new controlled in vport on layout 08-DECO
Layer i-exst-sqft-reno controlled in vport on layout 08-DECO
Layer i-exst-sqft-exst controlled in vport on layout 08-DECO
Layer i-exst-sqft-incr controlled in vport on layout 08-DECO
Layer i-elec_symb controlled in vport on layout 08-DECO
Layout 09-ELEC ----------
Layer z-viewport controlled in vport on layout 09-ELEC
Layer i-key-patt controlled in vport on layout 09-ELEC
Layer i-exst-sqft-chrg controlled in vport on layout 09-ELEC
Layer i-exst-sqft-new controlled in vport on layout 09-ELEC
Layer i-exst-sqft-reno controlled in vport on layout 09-ELEC
Layer i-exst-sqft-exst controlled in vport on layout 09-ELEC
Layer i-exst-sqft-incr controlled in vport on layout 09-ELEC
Layout 10-CLNG ----------
Layer z-viewport controlled in vport on layout 10-CLNG
Layer i-new-wall-patt controlled in vport on layout 10-CLNG
Layer i-key-patt controlled in vport on layout 10-CLNG
Layer i-exst-sqft-chrg controlled in vport on layout 10-CLNG
Layer i-exst-sqft-new controlled in vport on layout 10-CLNG
Layer i-exst-sqft-reno controlled in vport on layout 10-CLNG
Layer i-exst-sqft-exst controlled in vport on layout 10-CLNG
Layer i-exst-sqft-incr controlled in vport on layout 10-CLNG
Layer i-elec_symb controlled in vport on layout 10-CLNG
Layout 11-ELEV-1 ----------
Layer z-viewport controlled in vport on layout 11-ELEV-1
Layout SYMBOLS ----------
-
hmmm I'll have to try it at work today as I was upgraded from 2002 to 2007 yesterday, finally. I'll give it a shot once I get all of my custom stuff going and report back.
-
There is a problem with the VP ID# in ACAD2000 & later versions. I know it's just a reference number but until a layout is activated for the first time the ID# is not valid.
Not sure if this is still a problem with 2007+
I will look at the routine again today to see if I can refine it.
-
This one seems to work with 2002+. I took out the VP# and just checked for enames that were layers rather than code 331.
;; By ronjonp modified by CAB
;; Reports all the frozen layers in each VP by layouts
(defun c:VPFrzReport (/ a b c lastln ll ln ss lastvp flg)
(if (setq ss (ssget "x" '((0 . "VIEWPORT"))))
(foreach e (mapcar 'cadr (ssnamex ss))
;;CABS pspace vport filter
(setq a (cdr (assoc 330 (entget e)))
b (cdr (assoc 340 (entget a)))
c (cdr (assoc 331 (entget b)))
ln (cdr (assoc 410 (entget e)))
flg nil
)
(if (or (null lastln) (/= ln lastln))
(progn
(setq lastln ln)
(princ (strcat "\n" ln))
)
)
(if (not (equal c e))
(foreach i (entget e)
(if (and (= (type (setq ll (cdr i))) 'ENAME)
(setq ll (entget ll))
(= (cdr (assoc 0 ll)) "LAYER")
)
(progn
(setq flg t)
(princ (strcat "\n '"
(cdr (assoc 2 ll))
"' controlled in vport"
)
)
)
)
)
)
(if (and (or (null lastvp) (/= e lastvp)) flg)
(progn
(setq lastvp e)
(princ (strcat "\n ----------"))
)
)
)
)
(princ)
)
(c:VPFrzReport)
Output:
C:VPFRZREPORT
Layout1
'Layer1' controlled in vport
'Layer2' controlled in vport
'Layer3' controlled in vport
'Layer4' controlled in vport
----------
'Layer1' controlled in vport
'Layer2' controlled in vport
'Layer3' controlled in vport
'Layer4' controlled in vport
----------
'Layer1' controlled in vport
'Layer2' controlled in vport
'Layer3' controlled in vport
'Layer4' controlled in vport
----------
'Layer1' controlled in vport
'Layer2' controlled in vport
'Layer3' controlled in vport
'Layer4' controlled in vport
----------
Layout2
'Layer2' controlled in vport
'Layer3' controlled in vport
----------
-
Thanks Ron, One more revision.
;; By ronjonp modified by CAB
;; Reports all the frozen layers in each VP by layouts
;; CAB added file output
(defun c:VPFrzReport (/ a b c lastln ll ln ss lastvp flg fname fn path+file)
(if (setq ss (ssget "x" '((0 . "VIEWPORT"))))
(if (and (setq path+file (vla-get-fullname (vla-get-ActiveDocument (vlax-get-acad-object))))
(setq path+file (strcat (vl-filename-directory path+file) "\\"
(vl-filename-base path+file) "-VPF.txt"))
(setq fn (open path+file "w")) ; overwrite file
)
(progn
(foreach e (mapcar 'cadr (ssnamex ss))
;;CABS pspace vport filter
(setq a (cdr (assoc 330 (entget e)))
b (cdr (assoc 340 (entget a)))
c (cdr (assoc 331 (entget b)))
ln (cdr (assoc 410 (entget e)))
flg nil
)
(if (or (null lastln) (/= ln lastln))
(progn
(setq lastln ln)
(princ (strcat "\n" ln) fn)
)
)
(if (not (equal c e))
(foreach i (entget e)
(if (and (= (type (setq ll (cdr i))) 'ENAME)
(setq ll (entget ll))
(= (cdr (assoc 0 ll)) "LAYER")
)
(progn
(setq flg t)
(princ (strcat "\n '"
(cdr (assoc 2 ll))
"' controlled in vport"
) fn
)
)
)
)
)
(if (and (or (null lastvp) (/= e lastvp)) flg)
(progn
(setq lastvp e)
(princ (strcat "\n ----------") fn)
)
)
)
(close fn)
)
)
)
(princ)
)
(c:VPFrzReport)
-
i appreciate all the work but did you see my message that i just upgraded to 2007. i haven't had a chance to test anything as i'm trying to fix my basic setup first but will get back to this next week. thanks