How to avoid to repeat a value in command!?

How to avoid to repeat a value in command!?

giscivil92
Advocate Advocate
331 Views
2 Replies
Message 1 of 3

How to avoid to repeat a value in command!?

giscivil92
Advocate
Advocate

Hello Everyone

I have a lisp how can i avoid repeating a command several times actually I'd like to after loading the lisp i want to use a value and after selecting I don't want an initial value for the second , or third times,.... again!

Thanks

 

(defun c:hor_dim_circles ( / *error* adoc sset->enameList ss pts max_y off i p1 p2 p3)
(defun *error* ( msg )
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(princ)
)
(if (and adoc) (vla-endundomark adoc))
(setvar 'cmdecho 1)
(princ)
)
(defun sset->enameList (ss / i ret)
(if ss
(repeat (setq i (sslength ss))
(setq ret (cons (ssname ss (setq i (1- i))) ret))
)
)
)
(princ "\nSelect circle objects to make dimensions >")
(setq ss (ssget '((0 . "circle"))))
(setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-endundomark adoc)
(vla-startundomark adoc)
(cond 
((and ss)
(setq pts (mapcar '(lambda(x)(vlax-get x 'center)) (mapcar 'vlax-ename->vla-object (sset->enameList ss))))
(setq pts (vl-sort pts '(lambda (a b) (< (car a)(car b)))))
(setq max_y (apply 'max (mapcar 'cadr pts)))
(setq off (getreal "\nVertical offset >"))
(setq i -1)
(setvar 'cmdecho 0)
(while (< (setq i (1+ i)) (1- (length pts)))
(setq p1 (nth i pts) p2 (nth (1+ i) pts) p3 (list (car p2) (+ off max_y)))
(command "_.DIMHORIZONTAL" "_non" p1 "_non" p2 "_non" p3)
)
(setq p1 (car pts) p2 (last pts) p3 (list (car p2) (+ off off max_y)))
(command "_.DIMHORIZONTAL" "_non" p1 "_non" p2 "_non" p3)
(setvar 'cmdecho 1)
)
)
(vla-endundomark adoc)
(princ)
)
0 Likes
Accepted solutions (2)
332 Views
2 Replies
Replies (2)
Message 2 of 3

paullimapa
Mentor
Mentor
Accepted solution

modified to:

Hor_Dim_Circles: Draw Dimension

Hor_Dim_Circles_Off: Draw Dimension & Enter Offset

(defun c:hor_dim_circles ( / *error* adoc sset->enameList ss pts max_y i p1 p2 p3)
(defun *error* ( msg )
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(princ)
)
(if (and adoc) (vla-endundomark adoc))
(setvar 'cmdecho 1)
(princ)
)
(defun sset->enameList (ss / i ret)
(if ss
(repeat (setq i (sslength ss))
(setq ret (cons (ssname ss (setq i (1- i))) ret))
)
)
)
(princ "\nSelect circle objects to make dimensions >")
(setq ss (ssget '((0 . "circle"))))
(setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-endundomark adoc)
(vla-startundomark adoc)
(cond 
((and ss)
(setq pts (mapcar '(lambda(x)(vlax-get x 'center)) (mapcar 'vlax-ename->vla-object (sset->enameList ss))))
(setq pts (vl-sort pts '(lambda (a b) (< (car a)(car b)))))
(setq max_y (apply 'max (mapcar 'cadr pts)))
(if(not *off*)
 (setq *off* (getdist "\nVertical offset >"))
)
(princ(strcat"\nVertical Offset is: " (rtos *off* 2 4)))
(setq i -1)
(setvar 'cmdecho 0)
(while (< (setq i (1+ i)) (1- (length pts)))
(setq p1 (nth i pts) p2 (nth (1+ i) pts) p3 (list (car p2) (+ *off* max_y)))
(command "_.DIMHORIZONTAL" "_non" p1 "_non" p2 "_non" p3)
)
(setq p1 (car pts) p2 (last pts) p3 (list (car p2) (+ *off* *off* max_y)))
(command "_.DIMHORIZONTAL" "_non" p1 "_non" p2 "_non" p3)
(setvar 'cmdecho 1)
)
)
(vla-endundomark adoc)
(princ)
)
(defun c:hor_dim_circles_off ()(setq *off* nil) (c:hor_dim_circles))
(princ"\n[Hor_Dim_Circles]: Draw Dimension \n[Hor_Dim_Circles_Off]: Draw Dimension & Enter Offset")(princ)

 


Paul Li
IT Specialist
@The Office
Apps & Publications | Video Demos
0 Likes
Message 3 of 3

komondormrex
Mentor
Mentor
Accepted solution

hey there,

another one. just hit <space> to skip getting real.

(defun c:hor_dim_circles ( / *error* adoc sset->enameList ss pts max_y off i p1 p2 p3)
(defun *error* ( msg )
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(princ)
)
  (setq init_off (if (null init_off) 10.0 init_off))
(if (and adoc) (vla-endundomark adoc))
(setvar 'cmdecho 1)
(princ)
)
(defun sset->enameList (ss / i ret)
(if ss
(repeat (setq i (sslength ss))
(setq ret (cons (ssname ss (setq i (1- i))) ret))
)
)
)
(princ "\nSelect circle objects to make dimensions >")
(setq ss (ssget '((0 . "circle"))))
(setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-endundomark adoc)
(vla-startundomark adoc)
(cond 
((and ss)
(setq pts (mapcar '(lambda(x)(vlax-get x 'center)) (mapcar 'vlax-ename->vla-object (sset->enameList ss))))
(setq pts (vl-sort pts '(lambda (a b) (< (car a)(car b)))))
(setq max_y (apply 'max (mapcar 'cadr pts)))
(setq off (getreal (strcat "\nVertical offset <" (rtos init_off) ">: ")))
 (if (null off) (setq off init_off)) 
(setq i -1)
(setvar 'cmdecho 0)
(while (< (setq i (1+ i)) (1- (length pts)))
(setq p1 (nth i pts) p2 (nth (1+ i) pts) p3 (list (car p2) (+ off max_y)))
(command "_.DIMHORIZONTAL" "_non" p1 "_non" p2 "_non" p3)
)
(setq p1 (car pts) p2 (last pts) p3 (list (car p2) (+ off off max_y)))
(command "_.DIMHORIZONTAL" "_non" p1 "_non" p2 "_non" p3)
(setvar 'cmdecho 1)
)
)
(vla-endundomark adoc)
  (setq init_off off)
(princ)
)

 

0 Likes