Code Red > AutoLISP (Vanilla / Visual)

FIND AND REPLACE TEXT WITH BLOCK Credit Tharwat

(1/2) > >>

Lonnie:
I found this lisp routine that works almost perfect now. Problem is it I can get it to work only in paperspace and I need it to work in modelspace.


--- Code: ---(defun c:Test (/ sel int ent att spc)
 ;; Tharwat - Date: 19.Jun.2017 ;;
 (if
   (and
     (or (tblsearch "BLOCK" "fixturebubble")
         (alert "Attributed Block <fixturebubble> is not found in drawing <!>")
     )
     (princ "\nSelect Mtexts to be replaced with Attributed Block <fixturebubble> :")
     (setq sel (ssget "_:L" '((0 . "MTEXT"))))
   )
    (progn
      (defun unformatmtext (string / text str)
        ;; ASMI - sub-function ;;
        ;; Get string from Formatted Mtext string ;;
        (setq text "")
        (while (/= string "")
          (cond ((wcmatch (strcase (setq str (substr string 1 2)))
                          "\\[\\{}`~]"
                 )
                 (setq string (substr string 3)
                       text   (strcat text str)
                 )
                )
                ((wcmatch (substr string 1 1) "[{}]")
                 (setq string (substr string 2))
                )
                ((and (wcmatch (strcase (substr string 1 2)) "\\P")
                      (/= (substr string 3 1) " ")
                 )
                 (setq string (substr string 3)
                       text   (strcat text " ")
                 )
                )
                ((wcmatch (strcase (substr string 1 2)) "\\[LOP]")
                 (setq string (substr string 3))
                )
                ((wcmatch (strcase (substr string 1 2)) "\\[ACFHQTW]")
                 (setq string (substr string
                                      (+ 2 (vl-string-search ";" string))
                              )
                 )
                )
                ((wcmatch (strcase (substr string 1 2)) "\\S")
                 (setq str    (substr string 3 (- (vl-string-search ";" string) 2))
                       text   (strcat text (vl-string-translate "#^\\" " " str))
                       string (substr string (+ 4 (strlen str)))
                 )
                 (print str)
                )
                (t
                 (setq text   (strcat text (substr string 1 1))
                       string (substr string 2)
                 )
                )
          )
        )
        text
      )
      (setq spc
             (vlax-get (vla-get-activelayout
                         (vla-get-activedocument (vlax-get-acad-object))
                       )
                       'block
             )
      )
      (repeat (setq int (sslength sel))
        (setq ent (ssname sel (setq int (1- int))))
        (and (setq att (vla-insertblock
                         spc
                         (vlax-3d-point (cdr (assoc 10 (entget ent))))
                         "fixturebubble"
                         96
                         96
                         96
                         0.
                       )
             )
             (vl-some
               '(lambda (x)
                  (if (eq (strcase (vla-get-tagstring x)) "S")
                    (progn (vla-put-textstring
                             x
                             (unformatmtext (cdr (assoc 1 (entget ent))))
                           )
                           t
                    )
                  )
                )
               (vlax-invoke att 'getattributes)
             )
             (entdel ent)
        )
      )
    )
 )
 (princ)
)(vl-load-com)


--- End code ---

After that's done I need to add two other things to the lisp.

1. When choosing the text I want to keep it's rotation instead of the 0 rotation it's defaulted to.
2. I need choose few other objects to just erase before I go to the next piece of text.

Lonnie:
Fixed and working

kdub_nz:
@Lonnie,

I'm sure someone ( in the future ) would appreciate your postong the modified code with any explanatory notes you want to add.

Regards,

JohnK:
You can also give this a try to see if it helps (I modified a previously written "TXTFIND" routine).
https://www.theswamp.org/index.php?topic=4591.msg605179#msg605179

Lonnie:
Sorry. I did not have the time to devote to an answer and if I wait some helpful person could have burned up their time so I answered really fast.

Navigation

[0] Message Index

[#] Next page

Go to full version