Jump to content

Recommended Posts

Posted

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.

  • Replies 26
  • Created
  • Last Reply

Top Posters In This Topic

  • Lee Mac

    13

  • StevJ

    7

  • MiGo

    3

  • The Buzzard

    2

Popular Days

Top Posters In This Topic

Posted Images

Posted

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)

Posted

Lee,

 

Why the underline before the X. "_X"

Posted

I believe it makes it language compatible, I may be wrong. :P

Posted

I had thought that applied to commands, But I am not sure where it fits here.

It does not give any error anyway.

Posted

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?

Posted

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.

Posted

Just add

 

(cons 410 (getvar "CTAB"))

 

to the filter list to only select current space objects.

Posted
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.

Posted
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?

Posted
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 :)

Posted

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

Posted

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"

Posted
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.

Posted

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.

TEST.JPG

Posted

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]

Posted

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

Posted
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 :)

Posted

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]

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...