以下为动态显示直线长度的代码,如何改成多段线也能显示动态长度呢?因为有2个组码10,想来想去不知道怎么修改,特求助各位大神。 - (defun c:hddx( / cood d1 d2 data1 data3 data4 en1 en3 en4 gr loop pt1 ptb)
- ;动态显示线段的总长度。 by fl202 2018.1.31
- (setvar "cmdecho" 0)
- (setq d1 0 pt1 (getpoint "\n 动态显示线段的总长度,请确定起点:"))
- (entmake (list '(0 . "line") (cons 62 2) (cons 10 pt1) (cons 11 (polar pt1 0 100) ) ) )
- (setq en1 (entlast) data1 (entget en1) )
- (entmake (list '(0 . "TEXT") (cons 1 (strcat "总长度=" (rtos d1 2 3))) (cons 10 (polar pt1 (* pi 0.5) 10) ) (cons 40 4 )(cons 41 0.75 ) (cons 62 3)))
- (setq en3 (entlast) data3 (entget en3) )
- (entmake (list '(0 . "TEXT") (cons 1 (strcat "d1=" (rtos d1 2 3))) (cons 10 pt1) (cons 11 pt1) (cons 40 4 ) (cons 41 0.75 )(cons 62 3) (cons 71 0) (cons 72 1) (cons 73 2)))
- (setq en4 (entlast) data4 (entget en4) )
- (setq loop T)
- (while loop
- (setq gr (grread T 8))
- (setq cood (car gr) ptb (cadr gr))
- (cond
- ((= cood 3) ;;; 鼠标左键
- (progn
- ;(entmake (list '(0 . "TEXT") (cons 1 ftxt1) (cons 10 ptb) (cons 40 h) (cons 62 211) (cons 7 "info") ))
- (setq pt1 ptb)
- (entmake (list '(0 . "line") (cons 62 2) (cons 10 pt1) (cons 11 (polar pt1 0 100) ) ) )
- (setq en1 (entlast) data1 (entget en1) d1 (+ d1 d2) )
- (setq data3 (subst (cons 1 (strcat "总长度=" (rtos d1 2 3)) ) (assoc 1 data3) data3))
- (entmod data3)
- (entmake (list '(0 . "TEXT") (cons 1 (strcat "d1=" (rtos d1 2 3))) (cons 10 pt1) (cons 11 pt1) (cons 40 4 )(cons 41 0.75 ) (cons 62 3) (cons 71 0) (cons 72 1) (cons 73 2) ))
- (setq en4 (entlast) data4 (entget en4) )
- ;(setq loop nil)
- ));;; 鼠标左键
- ((= cood 11) (setq loop nil)(entdel en1)(entdel en4) );;; 鼠标右键,右键设置为回车时
- ((= cood 25) (setq loop nil)(entdel en1)(entdel en4) );;; 鼠标右键,右键设置为屏幕菜单时
- ((equal gr '(2 32)) (setq loop nil)(entdel en1)(entdel en4)) ;;; 空格键
-
- ( (= cood 5) ;;; 鼠标移动
- (progn
- ;(setq data1 (subst (cons 10 pt1) (assoc 10 data1) data1))
- (setq pt2 (cdr (assoc 10 data1)) data1 (subst (cons 11 ptb) (assoc 11 data1) data1))
- (entmod data1)
- ;(setq d2 (distance pt1 ptb) midp (list (/ (+ (car pt2) (car ptb) ) 2.0) (/ (+ (cadr pt2) (cadr ptb) ) 2.0) ) ag1 (+ (angle pt2 ptb) (* pi 0.5)) )
- (setq d2 (distance pt1 ptb) ag1 (+ (angle pt2 ptb) 0) )
- (cond
- ((< (* pi 0.5) (angle pt2 ptb) pi)(setq ag2 (+ (angle pt2 ptb) pi)) )
- ((< (* pi 1) (angle pt2 ptb) (* pi 1.5))(setq ag2 (- (angle pt2 ptb) pi)) )
- (t (setq ag2 (angle pt2 ptb) ) )
- )
- (setq pt3 (polar pt2 ag1 (/ d2 2.0)) pt3 (polar pt3 (+ ag2 (* pi 0.5)) 4) )
- (setq data4 (subst (cons 10 pt3 ) (assoc 10 data4) data4) )
- (setq data4 (subst (cons 11 pt3 ) (assoc 11 data4) data4) )
- (setq data4 (subst (cons 50 ag2 ) (assoc 50 data4) data4) )
- (setq data4 (subst (cons 1 (strcat "d1=" (rtos d2 2 3)) ) (assoc 1 data4) data4))
- (entmod data4) ;当前段长度
-
- ))
- );cond
-
- );while
- (princ "\n绘制结束。")
- (princ)
- )
|