View Full Version : Change layer of all leaders
Mr Cory
2007-03-20, 12:36 PM
Hay People!
Im trying to write a lisp that changes all the leaders in a drawing to a specific layer. I dont want to have to select a leader to get it to work, it would be simple if that wasnt the case lol
I know what i have got doesnt work but i thought id better have a go and see how close i was lol
(defun c:leaderlayer (/ ObjectType)
(setq ObjectType (cdr (assoc 0 (entget (ssname SelectObject 0)))))
(cond (= "leader" ObjectType)
(command "_.chprop" "la" "L1-Annotate-Dims" "")
)
)(princ)
But i get this error message: bad argument type: lselsetp nil
ccowgill
2007-03-20, 01:41 PM
my question would be, what is the point of the condition, you only have one statement, I would suggest using if
Lions60
2007-03-20, 02:40 PM
Give this code a try. I think it may be what you are needing.
(defun c:LeaderLayer (/ objects layer clayer cmdecho)
(setq cmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
;; getting current layer setting
(setq clayer (getvar "CLayer"))
;; selecting all leaders
(setq objects (ssget "X" '((0 . "Leader"))))
;; checking to see if there is currently a leader layer if not this will make one
(if (tblsearch "layer" "L1-Annotate-Dims")
(command "-layer" "s" "L1-Annotate-Dims" "")
(command "-layer" "m" "L1-Annotate-Dims" "c" "red" "L1-Annotate-Dims" "")
);;end of if
;; Changing the leaders to the layer "Leader"
(setq layer (command "chprop" objects "" "LA" "L1-Annotate-Dims" ""))
;; Changing the layer back to the original layer
(setq clayer (command "Clayer" clayer))
(setvar "cmdecho" cmdecho)
);; end of defun
Avatart
2007-03-20, 03:38 PM
Lions, dude, you beat me to the drop!
Here is my version of the code:
(defun c:leaderlayer (/ objectlist entity)
(if (/= nil (setq objectlist (ssget "X" (list (cons 0 "LEADER")))))
(while (/= nil objectlist)
(setq entity (entget (ssname objectlist 0)))
(setq entity (subst (cons 8 "L1-Annotate-Dims") (assoc 8 entity) entity))
(entmod entity)
(ssdel (ssname objectlist 0) objectlist)
(if (= 0 (sslength objectlist)) (setq objectlist nil))
)
)
)
Teach me for going to lunch.
kennet.sjoberg
2007-03-20, 09:52 PM
. . .and here is one more way
(defun c:leaderlayer ( / ) ; Move ModelSpace leaders to layer L1-Annotate-Dims
(vl-load-com)
(if (tblsearch "LAYER" "L1-Annotate-Dims" )
(vlax-for Objects_in (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object )))
(if (= (vla-get-ObjectName Objects_in ) "AcDbLeader" ) (vla-put-Layer Objects_in "L1-Annotate-Dims" ) ( ) )
)
(princ "Layer L1-Annotate-Dims do not exist, " )
)
(princ)
)
: ) Happy Computing !
kennet
Mr Cory
2007-03-20, 10:21 PM
Awesume guys! Im suprised at how many different ways you can do things like that. Cheers!
Avatart
2007-03-21, 11:07 AM
. . .and here is one more way
(defun c:leaderlayer ( / ) ; Move ModelSpace leaders to layer L1-Annotate-Dims
(vl-load-com)
(if (tblsearch "LAYER" "L1-Annotate-Dims" )
(vlax-for Objects_in (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object )))
(if (= (vla-get-ObjectName Objects_in ) "AcDbLeader" ) (vla-put-Layer Objects_in "L1-Annotate-Dims" ) ( ) )
)
(princ "Layer L1-Annotate-Dims do not exist, " )
)
(princ)
)
: ) Happy Computing !
kennetNice one Kennet, you beat me by one line! ;)
kennet.sjoberg
2007-03-21, 12:25 PM
Nice one Kennet, you beat me by one line! ;)
one line ? .. . .mmm not really, if the (vl-load-com) already is loaded you do not need it . . . and I also check if the layer exist . .
so the only line I need is the vlax-for statement 8) one line ? Yes.
: ) Happy Computing !
kennet
Avatart
2007-03-21, 12:54 PM
one line ? .. . .mmm not really, if the (vl-load-com) already is loaded you do not need it . . . and I also check if the layer exist . .
so the only line I need is the vlax-for statement 8) one line ? Yes.
: ) Happy Computing !
kennetOK, you win, hands down! :)
vBulletin® v3.6.7, Copyright ©2000-2009, Jelsoft Enterprises Ltd.