本帖最后由 zhanglan_0 于 2009-3-16 12:39 编辑
我有。
源码:
http://zml84.blog.sohu.com/104360732.html
通用动态grread研究.lsp
--------------------------------------------------------------------------------
;;;========================================================
;;; 练习
;;;功能:通用grread研究
(vl-load-com)
;;=================================================
;; 通用grread定义
(defun ZML-GRREAD (LST / test tmp mode val tmp2)
(setq TEST t)
(while TEST
(setq TMP (grread 2)
MODE (car TMP)
val (cadr tmp)
)
(cond ((= mode 2)
(if (and (setq TMP2 (assoc mode LST))
(setq tmp2 (cdr tmp2))
(setq tmp2 (assoc val tmp2))
)
(eval (cons 'progn (cdr TMP2)))
()
)
)
((setq TMP2 (assoc MODE LST))
(eval (cons 'progn (cdr TMP2)))
)
(t (princ tmp))
)
)
)
;;;========================================================
;;;测试
(defun c:tt (/ lst)
(setq LST (list
'(2
(13 (princ "回车"))
(32 (princ "空格"))
(49 (alert "按下了数字键 1 "))
)
'(5 (princ "\n移动啦"))
'(3 (princ "\n>>>>") (princ "左键"))
'(11 (setq test nil))
'(25 (setq test nil))
)
)
(ZML-GRREAD lst)
)
;;;========================================================
;;;练习 点到线的最近距离
(vl-load-com)
(defun C:TT1 (/ SS lst PT PT0)
(if (and
(setq SS (entsel "\n点取线: "))
(princ "\n")
)
(progn
(setq LST
(list '(5
(setq pt val)
;;计算最近点
(setq
PT0
(vlax-curve-getclosestpointto (car SS) pt)
)
(princ
(strcat
"\r距离: "
(vl-princ-to-string (distance pt PT0))
)
)
;;
(redraw)
(grdraw PT PT0 1)
)
;;左击
'
(3
(setq pt val)
;;计算最近点
(setq
PT0
(vlax-curve-getclosestpointto (car SS) PT)
)
;;绘制直线
(entmake
(list
(cons 0 "LINE")
(cons 62 2)
(cons 10 PT)
(cons 11 PT0)
)
)
)
'(25
(redraw)
(setq TEST NIL)
)
'(11
(redraw)
(setq TEST NIL)
)
)
)
(ZML-GRREAD lst)
)
)
(princ)
)
;;;========================================================
;;;功 能:三点绘制矩形(grread动态显示)
(defun C:TT2 (/ fun-pt PT1 PT2 PT33 pt22 PT44 lst)
;;功能计算 pt22 pt44
(defun fun-pt (pt1 pt2 pt33 / ang pt_tmp h pt22 pt44)
(setq ANG (angle PT1 PT2)
ANG (+ ANG (* 0.5 pi))
PT_tmp (polar PT33 ANG 100)
PT22 (inters PT1 PT2 PT33 PT_tmp NIL)
)
(setq H (distance PT33 PT22)
ANG (angle PT33 pt22)
PT44 (polar PT1 (+ ANG pi) H)
)
;;返回
(list pt22 pt44)
)
(while (setq PT1 (getpoint "\n第一点:"))
(if (setq PT2 (getpoint PT1 " >> 第二点:"))
(progn
(princ " >>> 第三点:")
(setq lst (list
'(3
(setq pt33 val)
(setq
tmp
(fun-pt pt1 pt2 pt33)
pt22
(car tmp)
pt44
(cadr tmp)
)
(command "_.pline" "non"
PT1 "non" PT22 "non"
PT33 "non" PT44 "c"
)
(command "_.regen")
(setq TEST NIL)
)
'(5
(setq pt33 val)
(setq
tmp
(fun-pt pt1 pt2 pt33)
pt22
(car tmp)
pt44
(cadr tmp)
)
(redraw)
(grdraw PT1 PT22 1)
(grdraw PT22 PT33 1)
(grdraw PT33 PT44 1)
(grdraw PT44 PT1 1)
)
)
)
(ZML-GRREAD lst)
)
)
)
(princ)
)