Jump to content

Recommended Posts

Posted

This is actually a followup to another post but it's different enough

I didn't want to stick inside the thread.

 

http://www.cadtutor.net/forum/showthread.php?t=36371

 

My objective is this:

Select a bunch of text and have the routine explode all the MTEXT

entities inside the SS (this is working - see code below)...

BUT I want to end up with a selection set with all of the originally

selected TEXT entities and the new TEXT entities that were created

from the exploded MTEXT entities.

(i don't want everything in the drawing, I want to pick..)

 

I have a feeling I need to use SSADD but I don't know how

to incorporate that into my code.

 

Here's what I have so far..

 

(defun c:XM4 ( )

(setvar "qaflags" 1) ;Thanks to the member who shared this!!

(setq t (ssget))

(setq mtss (ssget "P" '((0 . "MTEXT"))))

(if mtss

(progn

(command "explode" mtss "")

)

)

(princ))

 

Thanks so much!

I've learned so much from you guys!

Posted

Give this a shot:

 

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:xm4 [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] ss mss [color=black]lstent[/color][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"QAFLAGS"[/color][/b] [b][color=#009900]1[/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] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/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]"TEXT,MTEXT"[/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]setq[/color][/b] mss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_P"[/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]"MTEXT"[/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]progn[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lstent [b][color=RED]([/color][/b][b][color=BLUE]entlast[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#ff00ff]"_.explode"[/color][/b] mss [b][color=#ff00ff]""[/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]x[b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]ssadd[/color][/b] x ss[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b]ExEnts [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] lstent lstent [b][color=RED]([/color][/b][b][color=BLUE]entlast[/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]sssetfirst[/color][/b] [b][color=BLUE]nil[/color][/b] ss[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<!> Nothing Selected <!>"[/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] ExEnts [b][color=RED]([/color][/b]ent [b][color=BLUE]/[/color][/b] ent[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]reverse[/color][/b]
   [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][b][color=BLUE]entnext[/color][/b] ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] ent [b][color=RED]([/color][/b]ExEnts ent[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]

 

Posted

Definitely a lisp diety!

 

Would you mind commenting on your code

for my further instruction?

 

thanks

Posted

Appreciate the help so much too!!

Posted

Hopefully this will help you :D

 

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:xm4 [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] ss mss lstent[b][color=RED])[/color][/b]
 [i][color=#990099]; Define Function and Localise Variables[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]setvar[/color][/b] [b][color=#ff00ff]"QAFLAGS"[/color][/b] [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b]
 [i][color=#990099]; Set QAFLAGS to 1 so that our Selection Set can be exploded[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b]  [i][color=#990099]; If the following is true...[/color][/i]
   
   [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [i][color=#990099]; All statements must return T[/color][/i]

     [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=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"TEXT,MTEXT"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [i][color=#990099]; Get user to select Objects, filter for TEXT & MTEXT[/color][/i]

     [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] mss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_P"[/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]"MTEXT"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [i][color=#990099]; Filter the previous set for just MTEXT[/color][/i]

   [b][color=RED])[/color][/b] [i][color=#990099]; end and[/color][/i]

   [i][color=#990099];| As a side note, both selection sets must[/i]
      [i]exist, allowing for the case in which the
      user only selects DTEXT, hence making mss nil.
   |[/i][/color][i][color=#990099];    [/color][/i]
   
   [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]  [i][color=#990099]; Wrap the following Statements:[/color][/i]

     [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lstent [b][color=RED]([/color][/b][b][color=BLUE]entlast[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [i][color=#990099]; Collect the last entity created[/color][/i]
     [i][color=#990099]; i.e. the last entity in the database[/color][/i]
     
     [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#ff00ff]"_.explode"[/color][/b] mss [b][color=#ff00ff]""[/color][/b][b][color=RED])[/color][/b]
     [i][color=#990099]; Explode the Selection Set[/color][/i]
     
     [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
       [i][color=#990099]; Apply the following function to every member of the list[/color][/i]
       
       [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]x[b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]ssadd[/color][/b] x ss[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [i][color=#990099]; Add each member of the following list to the selection set.[/color][/i]
       
       [b][color=RED]([/color][/b]ExEnts [i][color=#990099]; Call our sub-function using the argument:[/color][/i]
         
         [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] lstent [i][color=#990099]; If an entity is in the database (before Explosion)[/color][/i]
           lstent [i][color=#990099]; Use it[/color][/i]
           [b][color=RED]([/color][/b][b][color=BLUE]entlast[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Else use the last entity created.[/color][/i]
           
           [b][color=RED])[/color][/b] [i][color=#990099]; end if[/color][/i]
         
         [b][color=RED])[/color][/b] [i][color=#990099]; end ExEnts[/color][/i]
       
       [b][color=RED])[/color][/b] [i][color=#990099]; end mapcar[/color][/i]
     
     [b][color=RED]([/color][/b][b][color=BLUE]sssetfirst[/color][/b] [b][color=BLUE]nil[/color][/b] ss[b][color=RED])[/color][/b]
     [i][color=#990099]; Select the Selection Set[/color][/i]
     
     [b][color=RED])[/color][/b] [i][color=#990099]; End the "progn" wrap[/color][/i]
   
   [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n<!> Nothing Selected <!>"[/color][/b][b][color=RED])[/color][/b]
   [i][color=#990099]; Else no MTEXT or Nothing was Selected[/color][/i]

   [b][color=RED])[/color][/b] [i][color=#990099]; End if[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Exit Cleanly[/color][/i]

 [b][color=RED])[/color][/b] [i][color=#990099]; End Function[/color][/i]

[i][color=#990099]; -----------------------------------[/color][/i]

[i][color=#990099];Sub-Funtion:[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] ExEnts [b][color=RED]([/color][/b]ent [b][color=BLUE]/[/color][/b] ent[b][color=RED])[/color][/b]
 
 [b][color=RED]([/color][/b][b][color=BLUE]reverse[/color][/b] [i][color=#990099]; Reverse the Following Result[/color][/i]
   
   [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [i][color=#990099]; If the following[/color][/i]

     [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent [b][color=RED]([/color][/b][b][color=BLUE]entnext[/color][/b] ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [i][color=#990099]; If there is another entity in the database..[/color][/i]
     
       [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] ent [b][color=RED]([/color][/b]ExEnts ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
     [i][color=#990099]; Add it to the list, and repeat the process[/color][/i]

     [b][color=RED])[/color][/b] [i][color=#990099]; end if[/color][/i]
   
   [b][color=RED])[/color][/b] [i][color=#990099]; end reverse[/color][/i]
 
 [b][color=RED])[/color][/b] [i][color=#990099]; end ExEnts[/color][/i]

Posted

When I grow up I want to code just like you!! (^_^)

 

Thanks so much!!

Posted

Not a problem :D

 

If you still have questions, just shout :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...