- UID
- 3825
- 积分
- 2760
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-4-14
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
以前工具箱的“自由拷贝”“自由移动”
实体法线,文字等出现问题(反了)现在还是用xdapi解决之.
[php]
;|
模拟ACAD的MIRROR命令,但要比执行命令MIRROR效率高
完全模拟了ACAD的MIRROR命令,包括文字等
|;
(defun c:test( / e m0 m1 p1 p2 ss v x yorno)
(if (and
(progn
(prompt "\n选取一个要镜像的实体<退出>:")
(setq ss (ssget))
)
(xdrx_pickset_redraw ss 3)
(xdrx_entsel "\n选取镜像线<退出>" '((0 . "line")))
)
(progn
(setq yorno (xdrx_yesorno "\n是否删除原实体" 0))
(setq p1 (xdrx_getentdxf 10)
p2 (xdrx_getentdxf 11)
)
(xdrx_setsstodb ss 0)
(while (setq e (xdrx_getentdata 0))
(setq m0 (xdrx_matrix_identity 3) ;|单位矩阵|;
m1 (xdrx_matrix_setmirror m0 '(0 0 0)) ;法线反转矩阵,wcs到这里可以了.
m1 (xdrx_matrix_product m1(xdrx_matrix_wcs2ucs)) ;
m1 (xdrx_matrix_product (xdrx_matrix_ucs2wcs) m1) ;|ucs下的反转矩阵,
和上面一句(wcs2ucs.m1.ucs2wcs)把法线反转矩阵,转成ucs下.|;
m2 (xdrx_matrix_setmirror m0 (list p1 p2)) ;|镜像矩阵|;
k (princ m2)
mr (xdrx_matrix_product m1 m2) ;|矩阵左乘,先镜像后转法线矩阵|;
)
(if (= yorno 1)
(xdrx_entity_transform e mr) ;相当下面两句
;(xdrx_entity_transform e m2) ;镜像矩阵变换
;(xdrx_entity_transform e m1) ;转法线.物体到了新位置后,再把法线转回到原来的.
(progn
(xdrx_entity_transformedcopy e m0) ;镜像矩阵变换拷贝
(xdrx_entity_transform(entlast)mr) ;对变换拷贝到的新实体变法线.
;| 可以直接把法线改了,行吗:
那不行,因为实体的定义点没一起改过来.
矩阵变换实体时,同时对定义点和法线起作用.|;
)
)
)
(xdrx_pickset_redraw ss t)
)
)
(princ)
)[/php]
欢迎大家一起讨论矩阵的问题.
[swf w=800 h=600]http://www.xdcad.net/bbstech/lisp/api_mirror.swf[/swf] |
|