need lisp write text

need lisp write text

chan230984
Advocate Advocate
1,125 Views
5 Replies
Message 1 of 6

need lisp write text

chan230984
Advocate
Advocate

Hi all I need to help write Lisp

I have a text in drawing 0+000, 0+025, 0+050 ….. 0+125

1.  I want to select object all of the text.

2. click text to replace = km 0+000 - km 0+125

thanks.. sorry I am not good an English

 

 

Untitled.png

0 Likes
Accepted solutions (1)
1,126 Views
5 Replies
Replies (5)
Message 2 of 6

ВeekeeCZ
Consultant
Consultant
Accepted solution

I assume that desired result is range from min to max.

 

(defun c:ChainageRange (/ dmz ss en vs)

  (setq dmz (getvar 'dimzin))
  (setvar 'dimzin 0)
  
  (if (and (setq ss (ssget '((0 . "*TEXT") (1 . "*#+#*"))))
	   (setq en (car (entsel "\nTarget text: ")))
	   (setq en (entget en))
	   (setq vs (mapcar '(lambda (y) (vl-string-translate "." "+" (rtos y 2 3)))
			    (vl-sort (mapcar '(lambda (x) (atof (vl-string-translate "+" "." (cdr (assoc 1 (entget x))))))
					     (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
				     '<)))
	   )
    (entmod (subst (cons 1 (strcat "KM " (car vs) " - KM " (last vs)))
		   (assoc 1 en)
		   en)))
  (setvar 'dimzin dmz)
  (princ)
  )

 

Edit: Sorry, code updated. 

Message 3 of 6

chan230984
Advocate
Advocate

@ВeekeeCZ 

hi 

command: ; error: too few arguments

0 Likes
Message 4 of 6

Moshe-A
Mentor
Mentor

@chan230984  hi,

 

try this version

 

moshe

 

 

(defun c:TConcat (/ zero_prefix ; local function
		    pick0 ename0 elist0 ss elist1 text lst concat)

 (defun zero_prefix (x)
  (cond
   ((< x 10)
    (strcat "00" (itoa x))
   )
   ((< x 100)
    (strcat "0" (itoa x))
   )
   ( t
    (itoa x)
   )
  ); cond
 ); zero_prefix


 (setvar "cmdecho" 0) 
 (command "._undo" "_begin") 

 (if (and
       (setq pick0 (entsel "\nPick text to be replaced: "))
       (setq ename0 (car pick0))
       (setq elist0 (entget ename0))
       (eq (cdr (assoc '0 elist0)) "TEXT")
       (not (redraw ename0 3))
       (setq ss (ssget '((0 . "text"))))
     )
  (progn
   (ssdel ename0 ss)
   
   (foreach ename1 (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (setq elist1 (entget ename1))
    (setq text (cdr (assoc '1 elist1)))

    (if (and
	  (eq (substr text 1 2) "0+")
	  (numberp (read (substr text 3)))
	)
     (setq lst (cons (atoi (substr text 3)) lst))
    )
   ); foreach

   (setq concat (apply
     		  'strcat
                    (mapcar
       		      '(lambda (n)
                        (strcat " - KM 0+" (zero_prefix n))
	               )  
                     (vl-sort lst '<)
                    )
                )
   ); setq

   (entmod (subst (cons '1 (substr concat 4)) (assoc '1 elist0) elist0))
  ); progn
 ); if
 
 (command "._undo" "_end")
 (setvar "cmdecho" 1)
  
 (princ)
); c:TConcat

Message 5 of 6

chan230984
Advocate
Advocate

@Moshe-A 

hi

Command: TCONCAT
Pick text to be replaced:  

something wrong

0 Likes
Message 6 of 6

3wood
Advisor
Advisor

It looks you can use standard FIND command to replace "0+" with "KM 0+", no  need any lisp.

0 Likes