马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
短短的代码,实现了 复杂的功能。
通用拖动函数见: http://bbs.xdcad.net/thread-704335-1-1.html
 - (defun c:tt()
- (defun _callback22(pt) ;;拖动中的回调处理函数
- (mapcar 'set '(p-1 p-2) (XD::Pnts:OrthoProject (list p1 p2) pt (mapcar '+ pt v1)))
- (setq ints (xdrx_curve_getinters (list p-1 p-2) e 3) ;;**裁剪向量和多边形的所有交点
- ints (mapcar 'cadr (xdrx_points_sortoncurve (list p1 p2) ints))
- ints (xd::list:dotPair ints) ;;交点集排序后,两两组合
- intsdim (XD::Pnts:OrthoProject (list p-1) (car box1)(last box1)) ;;尺寸线的基线位置
- )
- (mapcar '(lambda(x)(xdrx_grdraw 2 0 (car x)(cadr x))) ints) ;;绘制裁剪后的**向量
- (xdrx_setpropertyvalue edim "xLINE2Point" (car intsdim)) ;;拖动生成尺寸标注
- )
- (if (setq e (xdrx_entsel "\n拾取封闭的多边形<退出>:" '((0 . "LWPOLYLINE")(-4 . "&=")(70 . 1))))
- (progn
- (setq inx (XD::Polyline:OnSegAt (car e) (cadr e))
- e (car e)
- p1 (xdrx_getpropertyvalue e "PointAt" inx)
- p1 (XD::Pnts:Setz p1 0.0)
- p2 (xdrx_getpropertyvalue e "PointAt" (1+ inx))
- p2 (XD::Pnts:Setz p2 0.0)
- pt1 (xdrx_midp p1 p2)
- v1 (xdrx_vector_normalize (mapcar '- p2 p1))
- v2 (xdrx_vector_perpvector v1)
- box (xdrx_entity_box e v1)
- box1 (xdrx_points_offset (/ (distance (car box)(cadr box)) 10.0) (xd::pnts:close box))
- box2 (xdrx_points_offset (/ (distance (car box)(cadr box)) 3.0) box1)
- pdim-1 (inters p1 p2 (car box1)(last box1) nil)
- )
- (setq edim (xdrx_dimension_makerotate pdim-1 pdim-1 (car box2) (+ (angle p1 p2) (/ pi 2.0))))
- (if (setq pt2 (XD::DRAG:GMOVE pt1 "\n边线的位置<退出>:" -1 v2 nil "_callback22")) ;;动态拖动
- (progn
- (xdrx_grdraw 1 1 pt1 pt1)
- )
- )
- )
- )
- (princ)
- )
|