Jump to content

Interpolate height with showing distance and height on cursor


cadplayer

Recommended Posts

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 by cadplayer
Link to comment
Share on other sites

(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")

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Thank but it´s not what I mean to catch height from text-entity.

Have you run code or only read :unsure:

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...