Jump to content

Recommended Posts

Posted

have a look at this code snippet should help

 

(foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 0 )) 'getattributes)
       (if (= oldtag1 (strcase ([color="red"]vla-get-tagstring[/color] att)))

  • 6 months later...
Posted

I get the same thing.

 

Have you managed to get the Lisp to copy/paste the Block Description on the Multileader?

 

This is what happens when using the Lisp:

 

Command: TEST

Select block:

Specify leader landing location: _.mleader

Specify leader arrowhead location or [leader Landing first/Content first/Options] : _non

Specify leader landing location: _non

Specify landing distance : *Description of Block appears in command line*

Specify landing distance :

 

And then it disappears - Opens an empty Text box for me to write a Text on the MLeader..

 

The BNameLabel seems to work though

  • 9 months later...
Posted
On 6/12/2013 at 12:15 AM, alanjt said:

 

 

 

 


(defun c:BNameLabel (/ ent entl obj)
 (cond ((not (setq ent (car (entsel "\nSelect block: ")))))
       ((not (eq (cdr (assoc 0 (entget ent))) "INSERT")) (princ "\nInvalid object!"))
       ((setq pt (getpoint "\nSpecify first point: "))
        (setq entl (entlast))
        (vl-cmdf "_.mleader" "_non" pt "\\")
        (while (eq (logand 1 (getvar 'CMDACTIVE)) 1) (vl-cmdf ""))
        (if (not (equal entl (setq entl (entlast))))
          (vla-put-textstring
            (vlax-ename->vla-object entl)
            (vlax-get-property
              (setq obj (vlax-ename->vla-object ent))
              (if (vlax-property-available-p obj 'EffectiveName)
                'EffectiveName
                'Name
              )
            )
          )
        )
       )
 )
 (princ)
)
(vl-load-com)
(princ)
 

 

 

This is great, but someone can do the same as this, but to get the layer name?

Many Thanks

  • 2 weeks later...
Posted
On 5/6/2019 at 3:57 AM, m1r said:

 

This is great, but someone can do the same as this, but to get the layer name?

Many Thanks

 

Replace:

            (vlax-get-property
              (setq obj (vlax-ename->vla-object ent))
              (if (vlax-property-available-p obj 'EffectiveName)
                'EffectiveName
                'Name
              )
            )

 

with:

(cdr (assoc 8 (entget ent)))

 

  • 7 months later...
Posted

Hi...I've been trying to use the lisp codes in this conversation to automatically label a block with its name, description or, better yet, its defined attribute. So far, I've only been able to get a multileader with a text field that prompts me to enter the tag number manually. I'm wanting it to read the blocks information and automatically output this in the text field. What am I doing wrong?

 

  • 1 year later...
Posted

Can somebody modify this code so that it reads a certain attribute in the block? And if possible, the text height of the multileader to be chosen by the user? I tried modify this myself but with no luck even though so much material can be found, I get all sorts of errors which I have no idea how to fix them. 😒 Thank you

  • 6 months later...
Posted
On 3/29/2011 at 11:11 AM, alanjt said:

I was wondering if this can be updated/changed, so the TEXT on the multileade becomes a FIELD which points to the block name, so every time I change block's name definition it will be automatically updated on the multileader.  Thanks in advance!

 

Quote


(defun c:BNameLabel (/ obj lastentity ent)
 (vl-load-com)
 (if (setq obj (car (entsel "\nSelect block: ")))
   (if (eq (cdr (assoc 0 (entget obj))) "INSERT")
     (progn (setq lastentity (entlast))
            (vl-cmdf "_.mleader"
                     "_non"
                     (trans (vlax-get (setq obj (vlax-ename->vla-object obj)) 'InsertionPoint) 0 1)
                     PAUSE
            )
            (while (eq 1 (logand 1 (getvar 'CMDACTIVE))) (vl-cmdf ""))
            (if (not (equal lastentity (setq ent (entlast))))
              (vla-put-textstring
                (vlax-ename->vla-object ent)
                (vlax-get-property
                  obj
                  (if (vlax-property-available-p obj 'EffectiveName)
                    'EffectiveName
                    'Name
                  )
                )
              )
            )
     )
     (princ "\nInvalid object!")
   )
 )
 (princ)
)
 

 

 

Posted

There is an issue with this request that in a field a object ID is used. So if you change the block you will need to update the block ID in the field text, its possibly easier to erase and recreate. Modify the code previously posted.

  • 2 years later...
Posted

Hello, I've been trying to modify this Lisp routine, to create Fields that shows the Visibility State of the Dynamic Block, in uppercase if possible.

 

I know what to put in the Field command to get what i want, but i cant figure out how to code that into the Lisp routine.

image.thumb.png.b76c337fe848baae6469f0e51ed4216b.png


I've been googling for the past week to find a solution, but my skills in AutoLisp is limited.

 

Is there anyway to do it? 

 

 

; modified lsp found on : [url]http://www.cadtutor.net/forum/showthread.php?39301-Block-into-multileader-text/page2&highlight=leader[/url]
(defun c:BLabel (/ blk entl pt visname)
 (cond ((not (setq blk (car (entsel "\nSelect block: ")))))
       ((not (eq (cdr (assoc 0 (entget blk))) "INSERT")) (princ "\nInvalid object!"))
       ((setq pt (getpoint "\nSpecify first point: "))
        (setq entl (entlast) blk (vlax-ename->vla-object blk))
        (vl-cmdf "_.mleader" "_non" pt "\\")
        (while (eq (logand 1 (getvar 'CMDACTIVE)) 1) (vl-cmdf ""))
        (if (and (not (equal entl (setq entl (entlast)))) (setq entl (vlax-ename->vla-object entl)))
   (if (setq visname (GetBVis blk))
     (vla-put-textstring  entl visname)
     (vla-put-textstring  entl
       (vlax-get-property  blk
  (if (vlax-property-available-p blk 'EffectiveName) 'EffectiveName 'Name))))))
 )
 (princ)
)

; just some ccp (cut copy paste) from my RlxBlk.lsp
; (GetBVis (vlax-ename->vla-object (car (entsel))))
; get current visibility name block object
(defun GetBVis ( %blk / blk dic bvp bvn)
 (if (and (vl-every '(lambda (p)(vlax-property-available-p %blk p)) '(isdynamicblock hasextensiondictionary effectivename))
   (setq blk (vla-item (vla-get-blocks (vla-get-document %blk)) (vla-get-effectivename %blk)))
   (setq dic (dictsearch (vlax-vla-object->ename (vla-getextensiondictionary blk)) "ACAD_ENHANCEDBLOCK"))
   (setq bvp (findaso "BLOCKVISIBILITYPARAMETER" (massoc 360 dic)))
   (setq bvn (cdr (assoc 301 bvp))))
   (vl-some '(lambda (p) (if (= (vla-get-PropertyName p) bvn) (vlax-get p 'Value)))
     (vlax-invoke %blk 'getDynamicBlockProperties))))
(defun massoc ($i $l / a l)(while (setq a (assoc $i $l))(setq l (cons (cdr a) l) $l (cdr (member a $l))) l))
(defun FindAso ($v %l) (vl-some (function (lambda(x) (if (= $v (cdr (assoc 0 (setq e (entget x))))) e nil))) %l))

 

Posted

Yes is simple answer. Look at the bottom line the output of the field statement, you have to duplicate this, you can copy it and paste to notepad then convert to a lisp strcat, you need to select the object to get the OBJECTID the number you see. 22735........ BUT it is different for every dwg or object so can use this.

 

(setq objid (rtos (vla-get-Objectid obj) 2 0))

 

Posted

Thanks for the quick answer.

I've tried to use that, and its still getting the Visibility name from the Dynamic Block, but it still dosnt make it a field.

Got any pointers on how to make it a field? Im having trouble finding the answer on google :)

 

 

; modified lsp found on : [url]http://www.cadtutor.net/forum/showthread.php?39301-Block-into-multileader-text/page2&highlight=leader[/url]
(defun c:BLabel (/ blk entl pt visname)
(vl-load-com)
 (cond ((not (setq blk (car (entsel "\nSelect block: ")))))
       ((not (eq (cdr (assoc 0 (entget blk))) "INSERT")) (princ "\nInvalid object!"))
       ((setq pt (getpoint "\nSpecify first point: "))
        (setq entl (entlast) blk (vlax-ename->vla-object blk))
        (vl-cmdf "_.mleader" "_non" pt "\\")
        (while (eq (logand 1 (getvar 'CMDACTIVE)) 1) (vl-cmdf ""))
        (if (and (not (equal entl (setq entl (entlast)))) (setq entl (vlax-ename->vla-object entl)))
   (if (setq visname (GetBVis blk))
     (vla-put-textstring  entl visname)
     (vla-put-textstring  entl
       (vlax-get-property  blk
  (if (vlax-property-available-p blk 'EffectiveName) 'EffectiveName 'Name))))))
 )
 (princ)
)

; Block name extracted from field:
;
;

(defun GetBVis ( blk objid fieldtext)

(setq fieldText 
       (strcat "%<\AcObjProp Object)(%<\_ObjId "
(setq objid 
       (rtos (vla-get-Objectid blk) 2 0) ">%).isdynamicblock hasextensiondictionary effectivename>%"))
      (command "_.FIELD" "_Object" fieldText "_Type" "Object" "_Object" enitiyId "_Field")
  )
(princ)  
)

 

Posted

The strcat your trying to do is incorrect. Have another look at your image, for correct syntax, not sure about Parameter(13).

 

Have a look at Lee-mac.com  Area.lsp for an example.

 

 

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