MiGo Posted May 14, 2009 Posted May 14, 2009 Is there a selection set that allows you to select all blocks that have attributes? (setq ss (ssget "c" (getvar "extmax") (getvar "extmin") '((0 . "insert")))) I can select all blocks in general, but I would like to really only select ones with attributes. Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 Or, another approach: (defun GetBlkWithAtt (/ ss) (vl-load-com) (if (setq ss (ssget "_X" '((0 . "INSERT")))) (vl-remove-if-not '(lambda (x) (eq :vlax-true (vla-get-HasAttributes x))) (mapcar 'vlax-ename->vla-object (mapcar 'cadr (ssnamex ss)))))) Will return a list of blocks with Attributes (VL form) Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 I believe it makes it language compatible, I may be wrong. Quote
The Buzzard Posted May 14, 2009 Posted May 14, 2009 I had thought that applied to commands, But I am not sure where it fits here. It does not give any error anyway. Quote
Freerefill Posted May 14, 2009 Posted May 14, 2009 While you're at it... I usually write it like: (ssget "X" (list (cons 0 "LINE"))) Yet I've seen a lot of people write it as: (ssget "X" '((cons 0 "LINE"))) Is it just personal preference, or is there any sort of pro/con list? I can see that it would reduce the number of characters making for "neater" code, but is that it? Are there any vitally practical reasons? Quote
MiGo Posted May 14, 2009 Author Posted May 14, 2009 Thanks Lee. Seems to work great. Although I like to select a crossing of the current space using the extmin and extmax to only get a selectionset for the current space. If you use X then it selects the entire drawing. Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 Just add (cons 410 (getvar "CTAB")) to the filter list to only select current space objects. Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 While you're at it... I usually write it like: (ssget "X" (list (cons 0 "LINE"))) Yet I've seen a lot of people write it as: (ssget "X" '((cons 0 "LINE"))) Is it just personal preference, or is there any sort of pro/con list? I can see that it would reduce the number of characters making for "neater" code, but is that it? Are there any vitally practical reasons? Both will work, the apostrophe just indicates not to evaluate the terms imediately after it. Quote
MiGo Posted May 14, 2009 Author Posted May 14, 2009 Just add (cons 410 (getvar "CTAB")) to the filter list to only select current space objects. Will this work if I am working in a layout tab but through a viewport in mspace? Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 Will this work if I am working in a layout tab but through a viewport in mspace? Hmmm... not sure, give it a go and let us know Quote
StevJ Posted May 14, 2009 Posted May 14, 2009 This is timely. I'm trying to improve a LISP routine here at work, and none too successfully, I'm afraid. It was written a long time ago. I just need to make one adjustment. With a selection set of all attributed blocks, how would you then select from the set all blocks that have a value of R for the tag SHAPE? Here's the routine I'm trying to wedge that into. I tried to comment the program to help me learn, but even with reference material and many helpful autolisp web sites, I didn't get far, as you can see. (defun DXF (code elist) ; (cdr (assoc code elist)) ; ) ; (defun C:BOXQA ( / frst tbdata elist edata llist) ; Name the function and initialize variables (setq data "") ; Set data equal to "". Why? the variable isn't used anywhere that I can see. (setq count 0) ; Set Count = zero (setq ss1 (ssget "X" '((0 . "INSERT")(66 . 1)))) ; Go Get every "INSERT" and put it in SS1 (if ss1 ; See if SS1 has anything in it (progn ; If SS1 is not empty, run the program, else exit (setq emax (sslength ss1)) ; Set EMAX equal to the number of INSERTS (?) in SS1 (while (< count emax) ; while Count is less than EMAX (setq en (ssname ss1 count)) ; Set EN equal to the Entity Name of whatever is in SS1 for the current Count. (setq count (+ count 1)) ; Increment the Count (Count = Count +1) (setq ed (entget en)) ; Set ED equal to something. ; From here down I cannot follow the program. (setq blknm (dxf 2 ed)) ; unknown (while (/= "SEQEND" (dxf 0 ed)) ; unknown (setq en (entnext en)) ; unknown (setq ed (entget en)) ; unknown (setq tag (dxf 2 ed)) ; unknown (setq val (dxf 1 ed)) ; unknown (if (/= "SEQEND" (dxf 0 ed)) ; unknown (progn ; unknown (if (= "BOXSIZE" TAG) ; If BOXSIZE is a TAG(?) ; If a TAG name BOXSIZE exists(?) ; If BOXSIZE value is not empty(?) ;BOXSIZE is the TAG for a value that gives the upper left and lower right points. (progn ; unknown (setq ttval (read val)) ; unknown (setq ul (list (car ttval) (cadr ttval))) ; unknown (setq lass (cdr ttval)) ; unknown (setq lr (list (caddr ttval) (caddr lass))) ; unknown (setq p2 (list (car ul) (cadr lr) )) ; unknown (setq p4 (list (car lr) (cadr ul) )) ; unknown (grdraw ul p2 1 4) ; unknown (grdraw p2 lr 1 4) ; unknown (grdraw ul p4 1 4) ; unknown (grdraw p4 lr 1 4) ; unknown ) ; progn 3 ) ; endif 3 ) ; progn 2 ) ; endif 2 ) ; while 2 ) ; while 1 ) ; progn 1 ) ; endif 1 (prompt "\n Done") ; Display "Done" in command line (princ) ) ; end Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 What do you want this routine to do? It seems at the moment it looks for attributed blocks, looks for a tag named "BOXSIZE" and uses the grdraw function to draw temporary vectors on the screen using the points from "BOXSIZE" Quote
CAB Posted May 14, 2009 Posted May 14, 2009 I had thought that applied to commands, But I am not sure where it fits here.It does not give any error anyway. You need to look at the Big Picture. A string that specifies the object selection method. Valid selection methods are:C Crossing selection. CP Cpolygon selection (all objects crossing and inside of the specified polygon). F Fence selection. I Implied selection (objects selected while PICKFIRST is in effect). L Last visible object added to the database. P Last selection set created. W Window selection. WP WPolygon (all objects within the specified polygon). X Entire database. If you specify the X selection method and do not provide a filter-list, ssget selects all entities in the database, including entities on layers that are off, frozen, and out of the visible screen. As you can see the language does come into play with other options. What would the character look like if it were Chinese. Quote
StevJ Posted May 14, 2009 Posted May 14, 2009 That's exactly what it does, Lee, but it draws those temporary vectors for every attributed block, instead of just the ones I need. Is there a way to draw those vectors only for those that have a SHAPE of R. Here's an attribute list, if it'll help illustrate. Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 Give this a shot: (untested): [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:boxqa [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] ss attLst Box ul lr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X "[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"INSERT"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]66[/color][/b] . [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]ssnamex[/color][/b] ss[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] attLst [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] att [b][color=RED]([/color][/b][b][color=BLUE]vlax-safearray->list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-variant-value[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-getAttributes[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] attLst [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TagString[/color][/b] att[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] att[b][color=RED])[/color][/b] attLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#ff00ff]"SHAPE"[/color][/b] attLst[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"R"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#ff00ff]"SHAPE"[/color][/b] attLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Box [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#ff00ff]"BOXSIZE"[/color][/b] attLst[b][color=RED])[/color][/b] Box [b][color=RED]([/color][/b][b][color=BLUE]read[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] Box[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ul [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] Box[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] Box[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lr [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] Box[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadddr[/color][/b] Box[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]grvecs[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=#009900]1[/color][/b] lr [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] lr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] ul[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b] ul [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] lr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] ul[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b] lr [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] ul[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] lr[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b] ul [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] ul[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] lr[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<!> No Attributed Blocks Found <!>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Quote
StevJ Posted May 14, 2009 Posted May 14, 2009 Wow, Lee. That's impressive. Much cleaner, too. Dropped the LSP file into my current drawing to test it. Loaded fine, but when I ran it I got... Command: _BOXQA ; error: bad ssget mode string After comparing with the original, removed the space after the X in (ssget "_X ", on the chance that was it, but then I got... Command: _BOXQA ; error: too many arguments So it's obvious I don't know what I'm doing. I put the space back, and returned to... Command: _BOXQA ; error: bad ssget mode string Steve Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 Wow, Lee. That's impressive. Much cleaner, too.Dropped the LSP file into my current drawing to test it. Loaded fine, but when I ran it I got... Command: _BOXQA ; error: bad ssget mode string After comparing with the original, removed the space after the X in (ssget "_X ", on the chance that was it, but then I got... Command: _BOXQA ; error: too many arguments So it's obvious I don't know what I'm doing. I put the space back, and returned to... Command: _BOXQA ; error: bad ssget mode string Steve Sorry mate, I only typed it quickly, so its probably littered with typo's... will have a look Quote
Lee Mac Posted May 14, 2009 Posted May 14, 2009 Give this a go: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:boxqa [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] ss attLst Box ul lr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"INSERT"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009900]66[/color][/b] . [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]ssnamex[/color][/b] ss[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] attLst [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] att [b][color=RED]([/color][/b][b][color=BLUE]vlax-safearray->list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-variant-value[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-getAttributes[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] attLst [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TagString[/color][/b] att[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] att[b][color=RED])[/color][/b][b][color=RED])[/color][/b] attLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#ff00ff]"SHAPE"[/color][/b] attLst[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"R"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#ff00ff]"SHAPE"[/color][/b] attLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Box [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#ff00ff]"BOXSIZE"[/color][/b] attLst[b][color=RED])[/color][/b] Box [b][color=RED]([/color][/b][b][color=BLUE]read[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] Box[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ul [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] Box[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] Box[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lr [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] Box[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadddr[/color][/b] Box[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]grvecs[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=#009900]1[/color][/b] lr [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] lr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] ul[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b] ul [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] lr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] ul[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b] lr [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] ul[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] lr[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b] ul [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] ul[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] lr[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<!> No Attributed Blocks Found <!>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.