马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
这个函数也许会有用,主要是想介绍XDRX_API的XDRX_DRAG_JIG函数的强大,只要能想到的,都可以用LISP,JIG出来。
大家可以看看JIG的LISP回调函数FiveStarCallBack的写法,回调函数里面就是你画五角星的过程,和编辑10个顶点的过程。剩下的就交给JIG去处理了。
- ;|
- 五角星拖动实现函数
- 参数:
- info ---- 提示字符串
- cen ---- 圆心
- keyWord --- 关键字字符串
- Cursor --- 光标样式
- 0 - kCrosshair
- 1 - kCrosshair
- 2 - kRubberBand
- 3 - kNoSpecialCursor
- 4 - kEntitySelect
- 5 - kParallelogram
- 6 - kInvisible
- 其他值- kPkfirstOrGrips
- |;
- (defun XD::Drag:FiveStar (info cen keyWord cursor / an dynpt e mat mat0 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 pts ret x)
- (defun FiveStarCallBack (dynPt / pts)
- (setq p0 dynPt
- p2 (xdrx_point_transform p0 mat)
- p4 (xdrx_point_transform p2 mat)
- p6 (xdrx_point_transform p4 mat)
- p8 (xdrx_point_transform p6 mat)
- p1 (inters p0 p4 p2 p8 nil)
- p3 (inters p0 p4 p2 p6 nil)
- p5 (inters p2 p6 p4 p8 nil)
- p7 (inters p0 p6 p4 p8 nil)
- p9 (inters p2 p8 p0 p6 nil)
- )
- (if (not e)
- (setq e (xdrx_polyline_make t p0 p1 p2 p3 p4 p5 p6 p7 p8 p9))
- (mapcar
- '(lambda (x)
- (apply
- 'xdrx_polyline_setPointAt
- (cons e x)
- )
- )
- (list (list 0 p0) (list 1 p1) (list 2 p2) (list 3 p3) (list 4 p4) (list 5 p5) (list 6 p6) (list 7 p7)
- (list 8 p8) (list 9 p9)
- )
- )
- )
- e
- )
- (setq cen (trans cen 1 0)
- an (/ 360 5.0)
- an (XD::Geom:D2R an)
- mat0 (xdrx_matrix_identity 3)
- mat (xdrx_matrix_setRotation mat0 an '(0 0 1) cen)
- )
- (setvar "lastPoint" cen)
- (initget 1)
- (setq ret (xdrx_drag_jig "FiveStarCallBack" info keyWord (+ 1 2 4 8 16 128 512 65536) Cursor cen))
- (cond
- ((= ret -4)
- (entdel e)
- )
- (t
- (if (= (type ret) 'STR)
- (progn
- (entdel e)
- )
- )
- )
- )
- (gc)
- ret
- )
测试命令:
- (defun c:test-drag-fivestar()
- (if (setq cen (getpoint "\n圆心:"))
- (XD::Drag:FiveStar "\n拾取点" cen "" 2)
- )
- (princ)
- )
|