Jump to content

Connect the same text


AUTOCAD IS MY LIFE

Recommended Posts

Maybe explain it in a better detail, with some images or even a dwg file. Because right now, it's too abstract.

  • Like 1
Link to comment
Share on other sites

when i check the cad drawing, I want to connect texts with the same content by polyline. It wil help me check faster. 
Is there any lisp that can help with that?

image.png

Link to comment
Share on other sites

A couple of problems may occur is cc0501 only twice in the dwg ? If it is multiple times wrong text may join.

 

Yes can get a bounding box of the 2 text and draw a pline between them, that is the easy part maybe.

 

Before any code answer question one and supply a sample dwg with more than 1 pair of text.

  • Like 1
Link to comment
Share on other sites


I want to find the decripsion and cable no of equip.no ( The equip.no is listed). If similar texts are connected, finding the information of eqip.no  will be faster than if based on that polyline.

CHECK_LISP..dwg

Link to comment
Share on other sites

Posted (edited)

EACH CODE WILL ONLY APPEAR ONCE IN THE BLOCK DIAGRAMS IF IT APPEARS MULTIPLE TIMES THEN WHEN THE SAME TEXTS ARE CONNECTED I WILL QUICKLY SPOT WHAT IS WRONG

Edited by AUTOCAD IS MY LIFE
Link to comment
Share on other sites

Al revisar el archivo adjunto que compartió, noto que solo contiene una tabla con una descripción del equipo. Sin embargo, he observado que el equipo número 2 y el número 6 son idénticos.

Si tu objetivo es identificar textos que sean exactamente iguales, puedes utilizar la siguiente rutina. En la primera selección se te pedirá que elijas el texto a identificar, o simplemente presionar enter para ingresarlo manualmente, mientras que en la segunda selección deberás seleccionar en una ventana los posibles textos duplicados.

Al final, los textos idénticamente duplicados permanecerán seleccionados.

En mi opinión esta estrategia es más práctica que unir los textos con una línea o polilínea.
 

;Select similar identical text    v 1.0
;Romero... March 2024


(defun C:SST ( / s1 obj lst s2 str)
  (princ "\nSelect the text string or enter to indicate manually :")
  (if
    (or
      (if
        (setq s1 (cadr (ssgetfirst)))
        (setq str (if
                   (= 1 (sslength s1))
                   (cdr (assoc 1 (entget (ssname s1 0))))
                   (car (sssetfirst nil nil))
                   )
              )
        )
      (if
        (setq s1 (car (entsel)))
        (setq str (cdr (assoc 1 (entget s1))))
        )
      (/= (setq str (getstring t "\nEnter the text to select: ")) "")
      (setq str "*")
      )
    (progn
      (princ "\nSelect the other text objects...")
      (sssetfirst nil nil)
      (setq flst (list '(0 . "*TEXT") (cons 1 str)))
      (if
        (setq s2 (ssget (list '(0 . "*TEXT") (cons 1 str))))
        (princ (strcat (itoa (sslength s2)) " objects"))
        )
      (cadr (sssetfirst nil s2))
      )
    )
  (if (zerop (getvar 'cmdactive)) (princ) (cadr (sssetfirst nil s2)))
  )

 

Edited by Romero
  • Like 2
Link to comment
Share on other sites

In the reality project has 1 equipment table and many table with the decripsion. If there was a line connecting the same contents text, it would be easier to find the descriptions of this equipment. Your lisp works very well at finding similar texts, but it would be even better if there was a straight line between the two texts. Can you help me develop Lisp? 

Link to comment
Share on other sites

I wrote a Lisp for you, but when I ran it on the drawing you uploaded, I got a lot of lines -mostly unwanted, I suppose.

Anyway, here is the Lisp:

(defun c:pp( / ss ss2)
  (setq ss (ssget "X" '((0 . "TEXT"))))
  (repeat (setq i (sslength ss))
    (setq en1 (ssname ss (setq i (1- i)))
	  el1 (entget en1)
	  a1 (assoc 1 el1)
	  a10 (assoc 10 el1)
	  ss2 (ssget "X" (list '(0 . "TEXT") a1)))
    (repeat (setq j (sslength ss2))
      (setq  a11 (cons 11 (cdr (assoc 10 (entget (ssname ss2 (setq j (1- j))))))))
      (entmake (list '(0 . "LINE") a10 a11))
      )
    )
  )

 

For the moment it draws two superposed lines for each pair of texts, but that can be changed with a few more lines of code...

Link to comment
Share on other sites

My suggestion that works with your example.
To use it in other situations you will have to modify the arguments constituting the filters (ssget "_W" and "_X") for it to work.

(defun c:FOO ( / ss_o ss_t n dxf_ent lst_o)
  (setq ss_o (ssget "_W" '(2027.9092 -426.6579) '(2327.9092 373.3421) '((0 . "TEXT") (8 . "TEXT") (62 . 2) (40 . 30.0) (7 . "GHS"))))
  (cond
    (ss_o
      (setq ss_t (ssget "_X" '((0 . "TEXT") (8 . "0") (62 . 7) (6 . "ByBlock") (40 . 3.4) (7 . "Single"))))
      (cond
        (ss_t
          (repeat (setq n (sslength ss_o))
            (setq
              dxf_ent (entget (ssname ss_o (setq n (1- n))))
              lst_o (cons (cons (cdr (assoc 1 dxf_ent)) (list (cdr (assoc 10 dxf_ent)))) lst_o)
            )
          )
          (repeat (setq n (sslength ss_t))
            (setq dxf_ent (entget (ssname ss_t (setq n (1- n)))))
            (cond
              ((member (cdr (assoc 1 dxf_ent)) (mapcar 'car lst_o))
                (entmake
                  (list
                    (cons 0 "LINE")
                    (cons 10 (cdr (assoc 10 dxf_ent)))
                    (cons 11 (cadr (assoc (cdr (assoc 1 dxf_ent)) lst_o)))
                  )
                )
              )
            )
          )
        )
      )
    )
  )
  (prin1)
)

 

  • Like 1
Link to comment
Share on other sites

I spent some more time with your drawing, here is the Lisp slightly adjusted. Now it searches only for texts that are at least 4 characters long. Also all the lines are placed on a new layer so you can delete them at once after the job is done.

(defun c:pp( / ss ss2)
  (setq ss (ssget "X" '((0 . "TEXT"))))
  (setq a8 '(8 . "ConnectLines"))
  (repeat (setq i (sslength ss))
    (setq en1 (ssname ss (setq i (1- i)))
	  el1 (entget en1)
	  a1 (assoc 1 el1))
     (cond
       ((> (strlen (cdr a1)) 3)
	(setq a10 (assoc 10 el1)
	      ss2 (ssget "X" (list '(0 . "TEXT") a1)))
	(repeat (setq j (sslength ss2))
	  (setq  a11 (cons 11 (cdr (assoc 10 (entget (ssname ss2 (setq j (1- j))))))))
	  (cond ((/= a10 a11) (entmake (list '(0 . "LINE") a10 a11 a8))))
	  )
	)
       )
    )
  )

 

  • Like 1
Link to comment
Share on other sites

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