Jump to content

Recommended Posts

Posted

I am currently stuggling with AutoCAD electrical tryinmg to get the automatic wire numbering to do what I want it to do. I have now given up and decided I can do what I want (for now) with a LISP. can somebody knock something together for me just to show my boss?

 

All I need is for my two new attributes to get populated with the concatenation of some existing attributes. Simple :)

 

Attribute F-Term01=Tag1 & "-" & Term01

Attribute F-Term02=Tag1 & "-" & Term02

 

For now a simple "Select block" will do but there is a chance this will grow when I get to do a bit more learning.

 

Many thanks but no beer if somebody could do this for me. :)

Posted

Dave,

 

I'm sure this could be done quickly when I get a minute later - but I'm not sure I understand your notation there...

 

Am I correct in saying:

 

Attribute Tag = F-Term01

 

Value needs to be: -Term01

 

Correct?

Posted

sorry, I was typing while trying to shut down this evening :)

 

No hurry, I won't be able to look until tomorrow but...

 

I need the value of attribute named "TAG1" and a dash and the value of the attribute named "TERM01" to be put in attribute named "F-Term01"

Posted

:unsure:

 

(defun c:TEst (/ o)
 (if (setq o (car (entsel "\nSelect block: ")))
   (if (eq (vla-get-objectname (setq o (vlax-ename->vla-object o)))
           "AcDbBlockReference"
       )
     (if (eq (vla-get-hasattributes o) :vlax-true)
       (foreach a (vlax-invoke o 'GetAttributes)
         ((lambda (s)
;;;         (vla-put-textstring a (strcat s "=" (substr s 3)))
            (cond
              ((eq (strcase s) "TAG1") (vla-put-textstring a "-"))
              ((eq (strcase s) "TERM01")
               (vla-put-textstring a "F-Term01")
              )
            )
          )
           (vla-get-tagstring a)
         )
       )
       (princ "\nBlock has no attributes!")
     )
     (princ "\nObject must be a block!")
   )
 )
 (princ)
)

Posted

Thanks Alan. I was wondering which of you two would be the first. :)

 

I'll give it a try when I get to work tomorrow.

 

oh, by the way - did you spot that the original request was for 2 attributes. F-Term01 & F-Term02. I'm sure I can work out how to add it but would you mind doing it for me, pplleeaassee.

Posted

No problem. I had a few free minutes while waiting on lunch to arrive.

Posted

Give this a shot Dave:

 

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:Dave [b][color=RED]([/color][/b] [b][color=BLUE]/[/color][/b] ent atts tag1 [b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
 [i][color=#990099];; Lee Mac  ~  18.05.10[/color][/i]

 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent
     [b][color=RED]([/color][/b]SelectifFoo
       [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]"INSERT"[/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=#009900]0[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] x[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]=[/color][/b] [b][color=#009900]1[/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=#009900]66[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] x[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=#a52a2a]"\nSelect Block to Update: "[/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] atts
       [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] attrib [b][color=RED])[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TagString[/color][/b] attrib[b][color=RED])[/color][/b]
               [b][color=RED])[/color][/b]
               attrib
             [b][color=RED])[/color][/b]
           [b][color=RED])[/color][/b]
         [b][color=RED])[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] ent[b][color=RED])[/color][/b] [b][color=DARKRED]'[/color][/b]GetAttributes
         [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]setq[/color][/b] tag1 [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#a52a2a]"TAG1"[/color][/b] atts[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] tag1 [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] tag1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] stag dtag [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]setq[/color][/b] x [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] stag atts[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] y [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] dtag atts[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]vla-put-TextString[/color][/b] y                  
                 [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] tag1 [b][color=#a52a2a]"-"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] x[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=DARKRED]'[/color][/b][b][color=RED]([/color][/b]  [b][color=#a52a2a]"TERM01"[/color][/b]   [b][color=#a52a2a]"TERM02"[/color][/b][b][color=RED])[/color][/b]
         [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#a52a2a]"F-TERM01"[/color][/b] [b][color=#a52a2a]"F-TERM02"[/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=RED])[/color][/b]             
[b][color=RED])[/color][/b]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] SelectifFoo [b][color=RED]([/color][/b] foo str [b][color=BLUE]/[/color][/b] sel ent [b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] sel [b][color=RED]([/color][/b][b][color=BLUE]entsel[/color][/b] str[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     
     [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b]
       [b][color=RED]([/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]vl-consp[/color][/b] sel[b][color=RED])[/color][/b]

         [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b]foo [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] sel[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=#a52a2a]"\n** Invalid Object Selected **"[/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]
 ent
[b][color=RED])[/color][/b]

Posted

Thanks Guys,

 

I tried Lee's first and once I had remembered to change my block (forgot to save last night) it did what I needed.

 

Alan, yours replaced Tag1 with a dash and replaced the attribute Term01 with the string F-Term01 but kept the attribute F-Term01 unchanged (empty). Could easilly have been my description though. Lee has written a couple of routines for me before so has been exposed to my mutterings before :)

 

Just a couple of questions though.

 

Can the routine be changed to only populate F-TermXX if TermXX has a value? So both F-Term attributes get populated if TermXX has a value, only one gets populated if only one term has a value and neither gets populated if no TermXX value is given. The nature of AcadE ensures Tag1 always has a value.

 

And finally......

 

We extract this value to a text file which we use to print heat shrink wire markers. Is it easy (not asking for it to be done) to extract all the text on layer "ferrules" or all the attributes named "F-*" to a text file? What would be easier, by layer or by tag name?

Posted

I'm glad it works for you Dave :)

 

With regards to your other request - by layer would be easier, as there is no direct filtering method for attributes when using an ssget filter, so one would have to look through each block in turn - not saying it can't be done, but extracting text by layer is easier.

 

I'll modify the code when I get a minute after my lecture :)

Posted

Thanks Lee.

 

ByLayer suits me too if I go the VB.Net route in the future :)

 

I have shown my boss what I propose and he is happy with that approach. That is several days not required to bash AcadE into submission. I can now go on holiday at the end of next week with a clear consience :wink:.

 

Have a good lecture.

Posted

Give this a shot Dave (changed to SelectionSet selection too):

 

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:Dave [b][color=RED]([/color][/b] [b][color=BLUE]/[/color][/b] ss [b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
 [i][color=#990099];; Lee Mac  ~  18.05.10[/color][/i]

 [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=#a52a2a]"_:L"[/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=#a52a2a]"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=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] i [b][color=BLUE]/[/color][/b] ent atts tag1 [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent [b][color=RED]([/color][/b][b][color=BLUE]ssname[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] i[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]setq[/color][/b] atts [b][color=BLUE]nil[/color][/b] atts
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] attrib [b][color=RED])[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b]
                   [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b]
                     [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TagString[/color][/b] attrib[b][color=RED])[/color][/b]
                   [b][color=RED])[/color][/b]
                   attrib
                 [b][color=RED])[/color][/b]
               [b][color=RED])[/color][/b]
             [b][color=RED])[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] ent[b][color=RED])[/color][/b] [b][color=DARKRED]'[/color][/b]GetAttributes
             [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]setq[/color][/b] tag1 [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#a52a2a]"TAG1"[/color][/b] atts[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] tag1 [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] tag1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] stag dtag [b][color=BLUE]/[/color][/b] x y s [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]setq[/color][/b] x [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] stag atts[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] y [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] dtag atts[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
                          [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]""[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] s [b][color=RED]([/color][/b][b][color=BLUE]vla-get-TextString[/color][/b] x[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]vla-put-TextString[/color][/b] y [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] tag1 [b][color=#a52a2a]"-"[/color][/b] [color=Black]s[/color][b][/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=DARKRED]'[/color][/b][b][color=RED]([/color][/b]  [b][color=#a52a2a]"TERM01"[/color][/b]   [b][color=#a52a2a]"TERM02"[/color][/b][b][color=RED])[/color][/b]
             [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#a52a2a]"F-TERM01"[/color][/b] [b][color=#a52a2a]"F-TERM02"[/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=#009900]-1[/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

Excellent Lee - just what I need (for now).

 

Despite my earlier message, if you are ever in Horsham I'm sure we can find a drink at the Royal Oak. :)

Posted

 

Alan, yours replaced Tag1 with a dash and replaced the attribute Term01 with the string F-Term01 but kept the attribute F-Term01 unchanged (empty). Could easilly have been my description though. Lee has written a couple of routines for me before so has been exposed to my mutterings before :)

 

Sorry about that, I guess I didn't fully understand the request. Glad Lee got you squared away.:)

  • 1 month later...
Posted

When I requested this it was just a test and Lee's routine was good enough to prove a point. HOWEVER, I am pushing electrical a bit further and I now find my idea of adding attributes to the supplied blocks has some limitations. On multipole devices electrical modifies certain tags and totally screws up my solution, some of the time.

 

What I am now considering doing is making my F-TermXX attributes a block of their own (lets call it "FerruleText") with the same base point as the circuit symbol. Before I give this too much thought do you think it is possible (a yes/no/maybe is sufficient right now) to select a symbol from the circuit diagram and have certain attribute values added to FerruleText that shares the same insert point?

 

I don't need a routing at the moment as there may be other reasons for not doing this but I would welcome your comments.

Posted

I haven't used Electrical before Dave, but I hold the opinion that most things are possible :)

Posted
I haven't used Electrical before Dave, but I hold the opinion that most things are possible :)
that comment shows you haven't used electrical :D

 

It has a lot of reactors built in so you get one part right, add something somewhere else and the whole lots updates itself! Especially annoying when you realise you didn't mean to drop that component THERE.

 

btw, pm might be sent sometime today.

Posted
that comment shows you haven't used electrical :D

 

:lol::lol:

 

It has a lot of reactors built in so you get one part right, add something somewhere else and the whole lots updates itself! Especially annoying when you realise you didn't mean to drop that component THERE.

 

I can imagine how annoying that might get.. and there's no way to disable that functionality?

 

btw, pm might be sent sometime today.

 

No worries mate :)

Posted
I can imagine how annoying that might get.. and there's no way to disable that functionality?

yes, its called vanilla AutoCAD.

 

A lot of what electrical does is very impresssive and if your solution is close to an MCC its brilliant. Our solution isn't that close so keeps tripping me up. Couple that with the fact that I am the only one using it atm and I'm a mechanical engineer and you can imagine my frustrations!

Posted
yes, its called vanilla AutoCAD.

 

lol I saw that coming... :D

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