Legend Generator
Created using Version 5.1.0.3
Still a bit rough around the edges with my programming, but thought I would share this anyway.
Error checking is fairly minimal, so use at your own risk.
Let me know what you think, and any improvements needed.
I have included a sample drawing with our standard layers and blocks - rename sample.txt to sample.dwg
Cheers
Scott ;D
Edit: Updated lisp file - now ignores XREF layers
Edit: Sample DWG now attached
Nice work.
I've added .dwg to the allowed file formats, so you can remove the txt and upload the dwg if you like..
I will add the drawing in the morning
Thanks for the complement... I know I still have a lot to learn, but am pleased with this result.
Cheers
Scott
good work.
I was take one look on your code, so i will give you few tips
important for your future programing.
(while I'm waiting someone and must kill some time :))
1. in defun you are not using arguments (arguments / variables)
Never setq vars to nil on start defun (no need):
(defun c:legend ()
(setq bb nil ; clear vars
cc nil
block_text nil
tSize 1
legend_exit nil
noncont_layer_list
nil
lylst nil
)
...
! put your localSymbols (variables) in defun args. after /backslash (declare them only for running function):
(defun myfunction (expectedarg1 expectedarg2 ... / myvar1 myvar2 ...):
in your case:
(defun c:legend (/ bb cc block_test legend_exit noncont_layer_list lylst tSize)
(setq tSize 1)
...
in that case this is what is happening
- on start function all that vars are nil
(if some of the varnames already used & have some values (globally), don't worry
they are only temporary suppressed, and they are reassigned after function ends)
- on end function all variables are recycled or restored to previous state
2. About arguments in defun
Predict expected data (arguments) when making defun.
example of function that expect 2 arguments named x & y:
(defun plus (x y / res)
(setq res (+ x y))
)
to call that function you MUST pass 2 expected values
(note that return value of (defun function .....) expression is always
value of the LAST evaluated EXPRESSION in that function)
(setq result ; remember result returned by you function
(plus 2 4); call function with 2 & 4 as arguments
)
;; more ways to call function same function:
(setq result
(plus (+ 2 65) (- 35 45))
)
(setq
a 15 b 16
result (plus a b)
)
;; .... practicly every LISPABLE way
For example this is one of myf - get enames from sset.
(DEFUN $F|SS|SSET>ELIST| (@sset / elist)
(IF @sset
(SETQ elist (VL-REMOVE-IF 'LISTP (MAPCAR 'CADR (SSNAMEX @sset))))
)
elist ; (you can put variable on end to return list enames (last exp in function is return value of function))
)
;; but in this case u can do only this :
(DEFUN $F|SS|SSET>ELIST| (@sset)
(VL-REMOVE-IF 'LISTP (MAPCAR 'CADR (SSNAMEX @sset)))
)
;; iex. call like this
(setq alselents
($F|SS|SSET>ELIST| (ssget))
)
Thanks for the heads up.
I must admit that I have been guitly of not declaring variable local since I first started coding ;D
I think it was because as I was learning I was looking at all the vars to see what they were returning and I just never got around to declaring them ::)
I know it is good practice, but in the long run I have never noticed any impact on my programs.
Mind you all my programs are relatively simple.
Cheers
Scott