Hey @ВeekeeCZ BeekeeCZ,
I was wondering if you could help me out once more with this.
This has been working great for me and a few others in my office for selecting the info we need.
The only issue or complaint I am getting is when the user misclicks the ent and returns nil error.
Is there a way to add a while loop to this to loop back for the selection if ent1 returns nil or misclicked?
(if (and (setq ent1 (car (entsel "\nPick first elevation value: ")))
(setq y1 (cdr (assoc 0 (entget ent1))))
)
(cond ((= y1 "INSERT")
(setq pt1 (trans (reverse (cdr (reverse (cdr (assoc 10 (entget ent1)))))) 0 1)
hgt1 (atof (cdr (assoc 1 (entget (entnext ent1))))))) ;; alt. (atof (getpropertyvalue e "ELEV"))
((= y1 "TEXT")
(setvar "OSMODE" 32)
(if (setq pt1 (getpoint "\nFirst grade point: "))
(setq pt1 (reverse (Cdr (reverse pt1)))
hgt1 (atof (cdr (assoc 1 (entget ent1)))))))
((= y1 "MTEXT")
(setvar "OSMODE" 32)
(if (setq pt1 (getpoint "\nFirst grade point: "))
(setq pt1 (reverse (cdr (reverse pt1)))
hgt1 (atof (getpropertyvalue ent1 "Text")))))
)
);end if
I havent done this sort of thing before.
From reading around, I thought that I could simply just change the code at the beginning where it selects sets the ent1 like I have below.
(if (while (not (and (setq ent1 (car (entsel "\nPick first elevation value: ")))
(setq y1 (cdr (assoc 0 (entget ent1))))
)
)
(progn
(alert "\nMissed Grade value. Select again.")
(prompt "\nMissed Grade value. Select again.")
)
)
This doesnt seem to fully work properly though. It does loop if the text object is not selected, but it doesnt seem to want to create the tmpln between the 2 points.
Any ideas?
Here is the full code below. I changed it to be a regular function for testing. I usually have it as a Sub Function because I use this code for selecting on multiple Lisps.
(defun c:getelevs (/ y1 y2 exv)
(vl-load-com)
; (defun *error* ( msg )
; (if tmpln (entdel tmpln))
; (if os (setvar 'osmode os))
; (if cl (setvar 'clayer cl))
; (vla-EndUndoMark adoc)
; (if (not (wcmatch (strcase msg T) "*break*,*cancel*,*exit*"))
; (princ (strcat "Error: " msg))
; )
; )
(if (while (not (and (setq ent1 (car (entsel "\nPick first elevation value: ")))
(setq y1 (cdr (assoc 0 (entget ent1))))
)
)
(progn
(alert "\nMissed Grade value. Select again.")
(prompt "\nMissed Grade value. Select again.")
)
)
(cond ((= y1 "INSERT")
(setq pt1 (trans (reverse (cdr (reverse (cdr (assoc 10 (entget ent1)))))) 0 1)
hgt1 (atof (cdr (assoc 1 (entget (entnext ent1))))))) ;; alt. (atof (getpropertyvalue e "ELEV"))
((= y1 "TEXT")
(setvar "OSMODE" 32)
(if (setq pt1 (getpoint "\nFirst grade point: "))
(setq pt1 (reverse (Cdr (reverse pt1)))
hgt1 (atof (cdr (assoc 1 (entget ent1)))))))
((= y1 "MTEXT")
(setvar "OSMODE" 32)
(if (setq pt1 (getpoint "\nFirst grade point: "))
(setq pt1 (reverse (cdr (reverse pt1)))
hgt1 (atof (getpropertyvalue ent1 "Text")))))
)
);end if
(append pt1 (list hgt1))
;Get Second value and point
(if (while (not (and (setq ent2 (car (entsel "\nPick second elevation value: ")))
(setq y2 (cdr (assoc 0 (entget ent2))))
)
)
(progn
(alert "\nMissed Grade value. Select again.")
(prompt "\nMissed Grade value. Select again.")
)
)
(cond ((= y2 "INSERT")
(setq pt2 (trans (reverse (cdr (reverse (cdr (assoc 10 (entget ent2)))))) 0 1)
hgt2 (atof (cdr (assoc 1 (entget (entnext ent2))))))) ;; alt. (atof (getpropertyvalue e "ELEV"))
((= y2 "TEXT")
(if (setq pt2 (getpoint "\nSecond grade point: "))
(setq pt2 (reverse (Cdr (reverse pt2)))
hgt2 (atof (cdr (assoc 1 (entget ent2)))))))
((= y2 "MTEXT")
(if (setq pt2 (getpoint "\nSecond grade point: "))
(setq pt2 (reverse (cdr (reverse pt2)))
hgt2 (atof (getpropertyvalue ent2 "Text")))))
))
(append pt2 (list hgt2))
(setq exv (trans (list 0 0 1) 1 0 T)
tmpln (entmakex (list
'(0 . "LINE")
(cons 8 lay1)
(cons 10 (trans pt1 1 0))
(cons 11 (trans pt2 1 0))
(cons 210 exv)
);list
);entmakex
);setq
);end getelevs