ILoveMadoka Posted May 27, 2009 Posted May 27, 2009 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! Quote
Lee Mac Posted May 27, 2009 Posted May 27, 2009 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] Quote
ILoveMadoka Posted May 28, 2009 Author Posted May 28, 2009 Definitely a lisp diety! Would you mind commenting on your code for my further instruction? thanks Quote
Lee Mac Posted May 28, 2009 Posted May 28, 2009 Hopefully this will help you [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] Quote
ILoveMadoka Posted May 28, 2009 Author Posted May 28, 2009 When I grow up I want to code just like you!! (^_^) Thanks so much!! Quote
Lee Mac Posted May 28, 2009 Posted May 28, 2009 Not a problem If you still have questions, just shout 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.