Required a Macro For select by text alignment y

Required a Macro For select by text alignment y

sdhara.hit
Advocate Advocate
346 Views
4 Replies
Message 1 of 5

Required a Macro For select by text alignment y

sdhara.hit
Advocate
Advocate

Supposed I have many text with same y alignment. Now I want a macro like I will select 1 text, and it will select all text which have same y alignment .

0 Likes
Accepted solutions (1)
347 Views
4 Replies
Replies (4)
Message 2 of 5

Brock_Olly
Collaborator
Collaborator

Try this LISP:

You can adjust the value '0.0001' on line 26 to increase the sensitivity. (set it to 5 and it will select any text within 5 Y-units of selection)

(if (equal y2 x-coord 0.0001)

 

(defun c:SelectByYAlignment ()
  (setq ent (car (entsel "\nSelect a text object: ")))
  (if (and ent (or (eq (cdr (assoc 0 (entget ent))) "TEXT")
                    (eq (cdr (assoc 0 (entget ent))) "MTEXT")))
    (progn
      ;; Extract coordinate of selected text
      (setq entData (entget ent))
      (setq y-coord (car (cdr (assoc 10 entData))))
      (if (null y-coord) 
          (setq y-coord (car (cdr (assoc 11 entData)))))
      
      ;; Select all text objects in the drawing
      (setq ss (ssget "X" '((0 . "TEXT,MTEXT"))))
      (setq selSet (ssadd))
      
      (if ss
        (progn
          (setq i 0)
          (repeat (sslength ss)
            (setq ent2 (ssname ss i))
            (setq entData2 (entget ent2))
            (setq y2 (car (cdr (assoc 10 entData2))))
            (if (null y2)
                (setq y2 (car (cdr (assoc 11 entData2)))))
            ;; Compare only X-coordinates, ignore Y
            (if (equal y2 y-coord 0.0001)
              (ssadd ent2 selSet))
            (setq i (1+ i))))
        (princ "\nNo matching text found."))
      
      ;; Highlight selected objects
      (if (> (sslength selSet) 0)
        (sssetfirst nil selSet)
        (princ "\nNo text objects found with the same Y-coordinate."))
    )
    (princ "\nSelected object is not a TEXT or MTEXT."))
  (princ))

 

0 Likes
Message 3 of 5

sdhara.hit
Advocate
Advocate

@Brock_Olly , Thanks , But its select the text which have same x valu. I required Same y value.  I have attached result after after applying your LSP. Can you please provides which select same y value ? 

sdharahit_0-1742814190799.png

 

0 Likes
Message 4 of 5

Brock_Olly
Collaborator
Collaborator
Accepted solution

Here's a swapped version:
I was confused and swapped Y and Vertical around my bad.

(defun c:SelectByYAlignment ()
  (setq ent (car (entsel "\nSelect a text object: ")))
  (if (and ent (or (eq (cdr (assoc 0 (entget ent))) "TEXT")
                    (eq (cdr (assoc 0 (entget ent))) "MTEXT")))
    (progn
      (setq entData (entget ent))
      (setq y-coord (cadr (cdr (assoc 10 entData))))
      (if (null y-coord) 
          (setq y-coord (cadr (cdr (assoc 11 entData)))))
      (setq ss (ssget "X" '((0 . "TEXT,MTEXT"))))
      (setq i 0 selSet (ssadd))
      (if ss
        (repeat (sslength ss)
          (setq ent2 (ssname ss i))
          (setq entData2 (entget ent2))
          (setq y2 (cadr (cdr (assoc 10 entData2))))
          (if (null y2)
              (setq y2 (cadr (cdr (assoc 11 entData2)))))
          (if (equal y2 y-coord 0.0001)  ;; Ensure Y comparison with tolerance
            (ssadd ent2 selSet))
          (setq i (1+ i)))
        (princ "\nNo matching text found."))
      (if (> (sslength selSet) 0)
        (sssetfirst nil selSet)
        (princ "\nNo text objects found with the same Y-coordinate."))
    )
    (princ "\nSelected object is not a TEXT or MTEXT."))
  (princ))

 

0 Likes
Message 5 of 5

sdhara.hit
Advocate
Advocate

Thanks a lot. This is exact which I want. Love You.