cadplayer Posted June 28, 2012 Share Posted June 28, 2012 (edited) Hi profs! Here is something that I wrote with help of YAD and his grread-function. I´m not realy understand what happens there, than I move cursor on screen and it shows distance from first text. Maybe here is somebody some can help me. I would like show also height on cursor. Take a look. Type in > zid Edited June 28, 2012 by cadplayer Quote Link to comment Share on other sites More sharing options...
MSasu Posted June 28, 2012 Share Posted June 28, 2012 Cadplayer, before someone will take a look to your code, please edit your post and add code tags. Thank you. Quote Link to comment Share on other sites More sharing options...
cadplayer Posted June 28, 2012 Author Share Posted June 28, 2012 (defun foo (fpt / del_ss add_solid add_text dis_ss pt olderr loop) ;;info YAD's 'INFO.LSP' ;;by GSLS(SS) 2011-3-20 (defun myerr (msg) (del_ss ss) (setq *error* olderr) (if msg (princ msg) ) ;;; (*error* nil) (redraw) ) (defun del_ss (ss / n) (setq n -1) (repeat (sslength ss) (entdel (ssname ss (setq n (1+ n)))) ) ) (defun add_solid (p1 p2 p3 p4) (entmakex (list (cons 0 "SOLID") (cons 100 "AcDbEntity") (cons 62 1) (cons 100 "AcDbTrace") (cons 10 p1) (cons 11 p2) (cons 12 p3) (cons 13 p4) (cons 210 (trans (getvar "viewdir") 1 0)) ) ) ) (defun add_text (pt h txt) (entmakex (list (cons 0 "TEXT") (cons 100 "AcDbEntity") (cons 62 2) (cons 100 "AcDbText") (cons 10 pt) (cons 40 h) (cons 1 txt) (cons 50 0.0) (cons 72 0) (cons 73 0) (cons 210 (trans (getvar "viewdir") 1 0)) ) ) ) (defun dis_ss (fpt pt / dis str h high width ang) (setq dis (distance fpt pt) str (rtos dis 2 3) ss (ssadd) h (/ (getvar "viewsize") 60) high (* 1.7 h) width (* 1. h (strlen str)) ang (angle (trans (getvar "viewctr") 1 2) (trans pt 1 2)) pt (trans (mapcar '+ pt (getvar "target")) 1 2) ang (cond ((>= (/ pi 2) ang 0) (list (list (- (car pt) width) (- (cadr pt) high) (caddr pt)) (list (- (car pt) width) (cadr pt) (caddr pt)) ) ) ((>= pi ang (/ pi 2)) (list (list (+ (car pt) width) (- (cadr pt) high) (caddr pt)) pt ) ) ((>= (+ pi (/ pi 2)) ang pi) (list (list (+ (car pt) width) (+ (cadr pt) high) (caddr pt)) (list (car pt) (+ (cadr pt) high) (caddr pt)) ) ) ((>= (* 2 pi) ang (+ pi (/ pi 2))) (list (list (- (car pt) width) (+ (cadr pt) high) (caddr pt)) (list (- (car pt) width) (+ (cadr pt) high) (caddr pt)) ) ) ) ) (ssadd (add_solid pt (list (caar ang) (cadr pt) (caddr pt)) (list (car pt) (cadar ang) (caddr pt)) (car ang) ) ss ) (setq pt (cadr ang) pt (list (+ (car pt) (* 0.5 h)) (cadr pt) (caddr pt)) ) (ssadd (add_text (setq pt (list (car pt) (- (cadr pt) (* 1.6 h)) (caddr pt))) h str ) ss ) ) (setq olderr *error* *error* myerr ss (ssadd) loop T pt fpt ) (setvar "cmdecho" 0) ;;; (setvar "osmode" 0) (setvar "fillmode" 1) (while loop (setq gr (grread T ) (cond ((or (= (car gr) 12) (= (car gr) 5)) (if (equal (cadr gr) pt) nil (progn (del_ss ss) (setq pt (cadr gr)) (redraw) (grdraw fpt pt 7 1) (dis_ss fpt pt) ) ) ) ((= (car gr) 3) (del_ss ss) (setq pt (cadr gr)) (dis_ss fpt pt) (setq loop nil) ) (T (setq loop nil)) ) ) (myerr nil) pt ) (defun c:zid () (while (not (and (setq obj (car (entsel "\nSelect text within height !"))) ) ) (princ "\nNothing choice") ) (setq obj (entget obj) p1 (cdr (assoc 10 obj)) ha (atof (cdr (assoc 1 obj))) pro (getreal "\nType in percent to next point ! ") ) (while (if (setq p2 (foo p1)) (setq pc (mapcar (function (lambda(a b)(/ (+ a b) 2))) p1 p2) di (distance p1 p2) he (rtos (+ (/ (* di pro) 100) ha) 2 2) ) ) (entmake (list (cons 0 "TEXT") (cons 1 he) (cons 8 (getvar "clayer")) (cons 10 p2) (cons 40 (getvar "textsize")) (cons 50 0) (cons 7 "standard") ) ) (entmake (list (cons 0 "DIMENSION") (cons 100 "AcDbEntity") (cons 67 0) (cons 410 "Model") (cons 8 (getvar "clayer")) (cons 100 "AcDbDimension") (cons 10 (trans (list (car p2)(cadr p2) 0.0) 1 0)) (cons 11 (trans (list (car pc)(cadr pc) 0.0) 1 0)) (cons 12 (list 0. 0. 0.)) (cons 6 "Continuous") (cons 62 2) (cons 70 33) (cons 1 (strcat (rtos pro 2 1) "%")) (cons 71 5) (cons 72 1) (cons 41 1.0) ;;; (cons 42 di) (cons 52 0) (cons 53 0) (cons 54 0) (cons 3 "standard") (cons 100 "AcDbAlignedDimension") (cons 13 (trans (list (car p1)(cadr p1) 0.0) 1 0)) (cons 14 (trans (list (car p2)(cadr p2) 0.0) 1 0)) (cons 15 (list 0. 0. 0.)) (cons 16 (list 0. 0. 0.)) ) ) ) (princ) ;;; (setvar "osmode" 2085) ) (princ "\nRun with > zid < to interpolate hight") Quote Link to comment Share on other sites More sharing options...
MSasu Posted June 28, 2012 Share Posted June 28, 2012 Although I really don’t understand what you are trying to achieve with this routine, are you talking about current height of the selected label? ... high (* [b][color=magenta]3.8[/color][/b] h) width (* [b][color=magenta]1.8[/color][/b] h (strlen str)) ... (ssadd (add_text (setq pt (list (car pt) (- (cadr pt) (* 1.6 h)) (caddr pt))) h str ) ss ) [color=magenta](ssadd (add_text[/color] [color=magenta] (setq pt (list (car pt) (- (cadr pt) (* [b]1.4[/b] h)) (caddr pt)))[/color] [color=magenta] h[/color] [color=magenta] (strcat "Height = " (rtos (cdr (assoc 40 obj)) 2 2))[/color] [color=magenta] )[/color] [color=magenta] ss[/color] [color=magenta])[/color] ... Just play with values in bold to optimize dynamic label. Also take care that above changes exploit the fact that the variable (obj) storing the selected text entity isn’t localized. Quote Link to comment Share on other sites More sharing options...
cadplayer Posted June 28, 2012 Author Share Posted June 28, 2012 Thank but it´s not what I mean to catch height from text-entity. Have you run code or only read You can see that a select text have a result ex. 12.35 and than calculate code a new text within result ex. 12.44. regards Dirk Quote Link to comment Share on other sites More sharing options...
MSasu Posted June 28, 2012 Share Posted June 28, 2012 Sorry, I will not investigate your code deeper. Just check the marked parts, understand my changes and try to adjust them to suit your needs. Quote Link to comment Share on other sites More sharing options...
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.