ktbjx Posted October 5, 2020 Posted October 5, 2020 this routine is for polylines, is it possible to use this and this time get TEXT position Z? instead on polyline elevations? (defun c:LineElevation ( / c_doc c_lyrs ss clyr cnt pl_obj p_lst elev lyr_txt prms npoints) (setq c_doc (vla-get-activedocument (vlax-get-acad-object)) c_lyrs (vla-get-layers c_doc) clyr (getvar 'clayer) );end_setq (prompt "\nSelect Polylines : ") (setq ss (ssget '((0 . "*POLYLINE"))))s (cond (ss (repeat (setq cnt (sslength ss)) (setq pl_obj (vlax-ename->vla-object (ssname ss (setq cnt (1- cnt))))) (cond ( (vlax-property-available-p pl_obj 'elevation) (setq elev (vlax-get pl_obj 'elevation))) (t (setq p_lst (LD:sammlung_n (vlax-get pl_obj 'coordinates) 3) elev (caddr (car p_lst)) );end_setq ) );end_cond (cond ( (< elev 650.0) (setq lyr_txt "NO_ELEV")) ( (= (rem (fix elev) 0.1) 0.1) (setq lyr_txt (strcat (itoa (0.1+(fix elev)))))) (t (setq lyr_txt (strcat (itoa (fix elev))))) );end_cond (if (not (tblsearch "layer" lyr_txt)) (vla-add c_lyrs lyr_txt)) (vlax-put-property pl_obj 'layer lyr_txt) );end_repeat ) );end_cond (setvar 'clayer clyr) (princ) );end_defun (defun LD:sammlung_n (o_lst grp / tmp n_lst) (setq n_lst nil) (cond ( (and o_lst (= (rem (length o_lst) grp) 0)) (while o_lst (repeat grp (setq tmp (cons (car o_lst) tmp) o_lst (cdr o_lst))) (setq n_lst (cons (reverse tmp) n_lst) tmp nil) );end_while ) );end_cond (if n_lst (reverse n_lst)) );end_defun Quote
BIGAL Posted October 5, 2020 Posted October 5, 2020 The vl 'coordinates does just that but is slightly different depending on the type of pline, A LWpolyline will return x y and elev as a property, a 3dpoly will return x y z no elev. Splines something else again. If I understand correct, as you use *polyline you could get 2d or 3d polys. So if you want co-ords of points make a new list for the 2d polys of the coordinates + elev. 3dpolys will be x y z. Quote
ktbjx Posted September 7, 2023 Author Posted September 7, 2023 BUMP my post up... I needed this text position Z again. Im sorry Is there a way to get the position Z of a TEXT (not MTEXT) create a new layer and name it as position Z value and move the text to that layer. Quote
Isaac26a Posted September 7, 2023 Posted September 7, 2023 Hopefully this suits your needs (defun c:txtelev (/e el en l) (setvar "osmode" 0) (princ "\nSelect the text to obtain the elevation") (while (not (setq sset (ssget ":S:E" '((0 . "TEXT"))))) (princ "\nSelect the text to obtain the elevation") ) (vl-cmdf "_.layer" "_m" "position Z value" "_c" "5" "position Z value" "_l" "Continuous" "position Z value" "_s" "position Z value" "") (setq e (ssname sset 0) en (entget e) el (cadddr (assoc 10 en)) l (assoc 8 en) ) (princ (strcat "\nThe elevation is: " (rtos el 2 2))) (entmod (subst (cons 8 "position Z value") l en)) (princ) ) Quote
exceed Posted September 7, 2023 Posted September 7, 2023 (edited) (vl-load-com) (defun c:TextElevation (/ c_doc c_lyrs ss clyr cnt t_obj elev lyr_txt prms npoints) (setq c_doc (vla-get-activedocument (vlax-get-acad-object)) c_lyrs (vla-get-layers c_doc) clyr (getvar 'clayer) ) ;end_setq (prompt "\nSelect Texts : ") (setq ss (ssget '((0 . "TEXT")))) (cond (ss (repeat (setq cnt (sslength ss)) (setq t_obj (vlax-ename->vla-object (ssname ss (setq cnt (1- cnt))))) (setq elev (caddr (vlax-safearray->list (vlax-variant-value (vlax-get-property t_obj 'InsertionPoint)) ) ) ) (cond ((< elev 650.0) (setq lyr_txt "NO_ELEV")) ((= (rem (fix elev) 0.1) 0.1) (setq lyr_txt (strcat (itoa (0.1+ (fix elev))))) ) (t (setq lyr_txt (strcat (itoa (fix elev))))) ) ;end_cond (if (not (tblsearch "layer" lyr_txt)) (vla-add c_lyrs lyr_txt)) (vlax-put-property t_obj 'layer lyr_txt) ) ;end_repeat ) ) ;end_cond (setvar 'clayer clyr) (princ) );end_defun you want this? Edited September 7, 2023 by exceed 1 Quote
ktbjx Posted September 7, 2023 Author Posted September 7, 2023 23 minutes ago, exceed said: (defun c:TextElevation (/ c_doc c_lyrs ss clyr cnt t_obj elev lyr_txt prms npoints) (setq c_doc (vla-get-activedocument (vlax-get-acad-object)) c_lyrs (vla-get-layers c_doc) clyr (getvar 'clayer) ) ;end_setq (prompt "\nSelect Texts : ") (setq ss (ssget '((0 . "TEXT")))) (cond (ss (repeat (setq cnt (sslength ss)) (setq t_obj (vlax-ename->vla-object (ssname ss (setq cnt (1- cnt))))) (setq elev (caddr (vlax-safearray->list (vlax-variant-value (vlax-get-property t_obj 'InsertionPoint)) ) ) ) (cond ((< elev 650.0) (setq lyr_txt "NO_ELEV")) ((= (rem (fix elev) 0.1) 0.1) (setq lyr_txt (strcat (itoa (0.1+ (fix elev))))) ) (t (setq lyr_txt (strcat (itoa (fix elev))))) ) ;end_cond (if (not (tblsearch "layer" lyr_txt)) (vla-add c_lyrs lyr_txt)) (vlax-put-property t_obj 'layer lyr_txt) ) ;end_repeat ) ) ;end_cond (setvar 'clayer clyr) (princ) );end_defun you want this? thank you so much for this sir! just what I needed Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.