pick only similar text

pick only similar text

nilambaridal28
Contributor Contributor
744 Views
3 Replies
Message 1 of 4

pick only similar text

nilambaridal28
Contributor
Contributor

I have one drawing on which some texts are present in two parts. I want to pick the only texts which are similar in both parts & place that similar texts where I will click. So I want the code like below:

1. First it will ask me to select the text from 1st part, then user will select text one by one. (I dont know whether to use (Setq selectionset (ssget)) & how to use?)
2.Then it will ask to select the text from 2nd part, user will select the text.(Another selectionset)
3. After that, it ask to give point where user want to place that text. Then user will give the point & all similar text will come one after one in downwards.

Please help me to write the code for this.

0 Likes
745 Views
3 Replies
Replies (3)
Message 2 of 4

Moshe-A
Mentor
Mentor

@nilambaridal28 hi,

 

i do not really understand what you mean? maybe next time you will provide us with some sample dwg

however here is my wild guess Smiley LOL

 

enjoy

moshe

 

 

(defun c:AlignParts (/ select_text ; local function
		        ent0 ent1 p0 p1 ss elist0 elist1 elist2 val0 val1 val2 hgt2 p00 p11)

  (defun select_text (msg / ent)
   (if (and
	 (setq ent (car (entsel msg)))
         (eq (cdr (assoc '0 (entget ent))) "TEXT")
       )
    ent
   )
 ); select_text


 (setvar "cmdecho" 0)
 (command "._undo" "_begin")
 (setvar "cmdecho" 1)
  
 (setvar "blipmode" 1)
  
 (if (and
       (setq ent0 (select_text "\nPick first part: "))
       (setq elist0 (entget ent0))
       (not (command ".move" "si" ent0 (cdr (assoc '10 elist0)) pause))
       (setq p0 (getvar "lastpoint"))
       (setq ent1 (select_text "\nPick second part: "))
       (setq elist1 (entget ent1))
       (not (command ".move" "si" ent1 (cdr (assoc '10 elist1)) pause))
       (setq p1 (getvar "lastpoint"))
       (setq ss (ssget '((0 . "text"))))
     )
  (progn
   (setq val0 (cdr (assoc '1 elist0)))
   (setq val1 (cdr (assoc '1 elist1)))
   
   (ssdel ent0 ss)
   (ssdel ent1 ss)

   (setvar "cmdecho" 0)
   
   (setq i0 0 i1 0)
   (foreach ename (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) 
    (setq elist2 (entget ename))
    (setq val2 (cdr (assoc  '1 elist2)))
    (setq hgt2 (* (cdr (assoc '40 elist2)) 1.5))

    (cond
     ((eq (strcase val2) (strcase val0))
      (setq p00 (polar p0 (* pi 1.5) (* (setq i0 (1+ i0)) hgt2)))
      (command ".move" "si" ename (cdr (assoc '10 elist2)) p00)
     )
     ((eq (strcase val2) (strcase val1))
      (setq p11 (polar p1 (* pi 1.5) (* (setq i1 (1+ i1)) hgt2)))
      (command ".move" "si" ename (cdr (assoc '10 elist2)) p11)
     )
    ); cond
   ); foreach
  ); progn
 ); if


 (setvar "blipmode" 0)

 (command "._redraw")
 (command "._undo" "_end")
 (setvar "cmdecho" 1)
  
 (princ)
)
0 Likes
Message 3 of 4

nilambaridal28
Contributor
Contributor

Thank you! But my requirement is different. 

Please refer attached file for more clarification.

0 Likes
Message 4 of 4

dbhunia
Advisor
Advisor

Try this......

 

(defun c:it (/ sset1 sset2 Th lst1 lst2 res Z1T Z2T IP_Ts)
(vl-load-com)
(setvar 'cmdecho 0)
(defun mlist (sset / N IP_Text lst ent IP_Th)
   (repeat (setq N (sslength sset))
	(setq IP_Text (cdr (assoc 1 (setq ent (entget (ssname sset (setq N (- N 1)))))))
	      IP_Ts (cdr (assoc 7 ent))
	      IP_Th (cdr (assoc 40 ent))
	)
	(if (< Th IP_Th)(setq Th IP_Th))
	(setq lst (cons IP_Text lst))
   )
)
(defun complst (l1 l2)
  (if l1
    (if	(member (car l1) l2)
        (cons (car l1) (complst (cdr l1) l2))
        (complst (cdr l1) l2)
    )
  )
)
(defun Un (lst)
    (if lst (cons (car lst) (Un (vl-remove (car lst) (cdr lst)))))
)
(defun WT (lst PT St Th / N cl)
(setq cl (getvar 'clayer))
(setvar 'clayer "TROL_10");Comment this line if you do not want to print all TEXT in the layer "TROL_10"...
(setq N (length lst))
(command "text" "S" St "J" "MR" PT Th "" (nth (setq N (- N 1)) lst))
(while (> N 0) (command "text" "" (nth (setq N (- N 1)) lst)))
(setvar 'clayer cl)
)
(princ "\nSelect all text from zone 1.......")
(Setq sset1 (ssget '((0 . "TEXT"))))
(princ "\nSelect all text from zone 2.......")
(Setq sset2 (ssget '((0 . "TEXT"))))
(setq Th 0.0)
(setq lst1 (mlist sset1))
(setq lst2 (mlist sset2))
(setq res (complst lst1 lst2))
(setq Z1T (reverse (vl-sort (Un res) '<)))
(setq Z2T (reverse (vl-sort (Un res) '>)))
(WT Z1T (getpoint "\nPick point to Insetr Text(s) for Zone-1...") IP_Ts Th)
(WT Z2T (getpoint "\nPick point to Insetr Text(s) for Zone-2...") IP_Ts Th)
(setvar 'cmdecho 1)
(princ)
)

 


Debashis Bhunia
Co-Founder of Geometrifying Trigonometry(C)
________________________________________________
Walking is the First step of Running, Technique comes Next....
0 Likes