写的函数很好,很简洁,看来API上下的功夫很多,有问题多发帖交流。
xd::drag:simplemove 现在支持关键字回调,你用它可以写 点监视器版的 “自由移动”和“自由拷贝”了,下面是示例代码,自由移动实现了旋转、改基点、转90度功能,你试试,把未完成的的部分写好,这样你就会对矩阵应用的理解很有帮助。镜像功能写好,你就会对文字的镜像处理有很大的理解和提高。试试看,随时发帖交流。
你可能需要再去重新下载下 通用LISP函数库
 - (defun c:tt ()
- (defun _keyword (kw)
- (defun _rcallback (dynpt)
- (if (not lastang)
- (setq lastang (angle p1 dynpt))
- )
- (setq an (- (setq an1 (angle p1 dynpt)) lastang)
- mat (xdrx-matrix-setrotation an '(0 0 1) p1)
- )
- (xdrx-entity-transform ss mat)
- (setq mat1 (xdrx-matrix-product mat mat1))
- (setq lastang an1)
- )
- (setq p1 (xd::drag:getbasepoint))
- (cond
- ((= kw "T")
- (if (setq pt (getpoint "\n新的基点<退出>:"))
- (progn (xd::drag:setbasepoint pt))
- )
- )
- ((= kw "A")
- (setq mat (xdrx-matrix-setrotation (/ pi 2.0) '(0 0 1) p1))
- (xdrx-entity-transform ss mat)
- )
- ((= kw "R")
- (setq p1 (xd::drag:getbasepoint)
- mat1 (xdrx-matrix-identity 3)
- )
- (xdrx-pointmonitor "_rcallback")
- (if (not (setq p2 (getpoint p1 "\n旋转轴第二点<退出>:")))
- (progn (xdrx-entity-transform ss (xdrx-matrix-inverse mat1))
- )
- )
- (xdrx-pointmonitor)
- )
- ((= kw "M")
- (xdrx-prompt "\n*镜像*功能待完成.")
- )
- ((= kw "S")
- (xdrx-prompt "\n*左右翻*功能待完成.")
- )
- ((= kw "D")
- (xdrx-prompt "\n*上下翻*功能待完成.")
- )
- ((= kw "L")
- (xdrx-prompt "\n*缩放*功能待完成.")
- )
- ((= kw "F")
- (xdrx-prompt "\n*对齐*功能待完成.")
- )
- )
- )
- (setq lastang nil)
- (and
- (setq ss (xdrx-ssget "\n选择要处理的对象<退出>:"))
- (xd::doc:setkeyword "R T A M S D L F")
- (xd::drag:callbacksetkeyword "_keyword")
- (xd::drag:simplemove
- ss
- "\n〖移动〗插入点或{改基点[T]/改转角[R]/转90度[A]/镜像[M]/左右翻[S]/上下翻[D]/缩放[L]/对齐[F]/}<退出>:"
- 6
- t
- )
- )
- (princ)
- )
|