• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Visual LISP, AutoLISP and General Customization

    Reply
    Valued Contributor
    bodhran
    Posts: 69
    Registered: ‎10-14-2010
    Accepted Solution

    script to explode mtext

    397 Views, 6 Replies
    05-18-2011 02:49 PM

     

    Hi guys,

     

    I'm trying to explode mtext in a number of our dwgs, here's whaat i've come up with.

     

    EXPLODE
    (ssget "X" '((0 . "MTEXT")))

    it works fine if i run it at the command prompt but not if i run it via script?

     

    What am i not getting??

     

    Regards,

     

    B

    Please use plain text.
    *Pro
    scot-65
    Posts: 1,928
    Registered: ‎12-11-2003

    Re: script to explode mtext

    05-18-2011 03:24 PM in reply to: bodhran

    A few of the LISP expressions are not allowed while inside a command.

    Try restructuring:

    (setq s (ssget...

    (command "EXPLODE" s "")

    (setq s nil)

     

    [untested]

     

    ???

    Please use plain text.
    Valued Contributor
    bodhran
    Posts: 69
    Registered: ‎10-14-2010

    Re: script to explode mtext

    05-18-2011 03:46 PM in reply to: scot-65

    Hi scot-65,

     

    well i've tried:

    (setq mt (ssget "X" '((0 . "MTEXT")))
    (command "EXPLODE" mt "")
    (setq mt nil)

    but it doeesn't work, i'm a novice at the ssget thing so it maybe something i'm just not getting right

     

    B

    Please use plain text.
    Valued Mentor
    Posts: 299
    Registered: ‎11-26-2007

    Re: script to explode mtext

    05-18-2011 04:29 PM in reply to: bodhran

    For some reason the explode command doesn't accept the entire selection set.  I tried your code and with the exception of a missing close parenthesis it seemed like it should have worked.  I fixed that but it only exploded 1 of the mtext objects in the sslist.  This code adds them to an entitylist and then explodes each one...

     

    (setq mt (ssget "X" '((0 . "MTEXT"))))
    (setq ctr 0)
    (while (setq cent (ssname mt ctr))
     (Setq objlist (append (list cent) objlist))
     (setq ctr (1+ ctr))
    );while
    (foreach mtextobj objlist
      (command ".explode" mtextobj)
    );foreach
    (setq mt nil
          ctr nil
          objlist nil)


    bodhran wrote:
    (setq mt (ssget "X" '((0 . "MTEXT"))) <-- Missing ) here.

    BTW.. you can see that your code works if you run this line (setq mt (ssget "x" '((0 . "MTEXT")))) and then run (sslength mt)  That should return the count of objects in your mt selection set.

     

    BTW #2.. If you also do (setq mt (ssget "x" '((0 . "MTEXT")))) and then (command "move" mt "")  see what happens...

    ---sig---------------------------------------
    '(83 104 110 101 117 112 104 64 71 109 97 105 108 46 99 111 109)
    Please use plain text.
    Valued Contributor
    bodhran
    Posts: 69
    Registered: ‎10-14-2010

    Re: script to explode mtext

    05-18-2011 04:32 PM in reply to: Shneuph

     

    **** parenthesis!!

     

    Thanks that's exxcellent!! work a treat!!

     

    B

    Please use plain text.
    *Expert Elite*
    Kent1Cooper
    Posts: 4,073
    Registered: ‎09-13-2004

    Re: script to explode mtext

    05-19-2011 04:21 AM in reply to: Shneuph

    Shneuph wrote:

    For some reason the explode command doesn't accept the entire selection set.  ...it only exploded 1 of the mtext objects in the sslist.  ....


    This has come up several times before -- search the discussion group for Explode and the mysterious QAFLAGS System Variable.

    Kent Cooper
    Please use plain text.
    New Member
    peszel
    Posts: 1
    Registered: ‎05-26-2011

    Re: script to explode mtext

    05-26-2011 03:11 AM in reply to: bodhran

    Try this:

     

    (defun C:MTXEX ( / ss )
      (setvar "QAFLAGS" 1)
      (setq ss (ssget "x" (list (cons 0 "MTEXT"))))
        (if ss
          (command "._EXPLODE" ss "")
        )
      (setvar "QAFLAGS" 0)
    )

    (princ "\n** Type MTXEX to invoke **")
    (princ)

     

    peszel

    Please use plain text.