entmake 镜像程序如何写?
用entmake 写镜像程序,如何写啊?谢谢各位!
本帖最后由 飞雪神光 于 2023-6-2 00:54 编辑
shcvip 发表于 2023-6-1 23:21
可否示范写一个模版啊这个是矩阵的方法
(defun BF-Mat-ApplyMatrixTransformation (target matrix vector)
(cond
((eq 'VLA-OBJECT (type target))
(vla-TransformBy target
(vlax-tMatrix
(append (mapcar (function (lambda (x v) (append x (list v)))) matrix vector)
'((0. 0. 0. 1.))
)
)
)
)
((listp target)
(mapcar
(function
(lambda (point) (mapcar '+ (BF-Mat-MxV matrix point) vector))
)
target
)
)
)
)
(defun BF-Mat-MxV (m v)
(mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m)
)
(defun BF-Mat-ReflectByMatrix (target p1 p2 / m)
(
(lambda ( a / m )
(BF-Mat-ApplyMatrixTransformation target
(setq m
(list
(list (cos a) (sin a)0.)
(list (sin a) (- (cos a)) 0.)
(list 0. 0. 1.)
)
)
(mapcar '- p1 (BF-Mat-MxV m p1))
)
)
(* 2. (angle p1 p2))
)
)
(BF-Mat-ReflectByMatrix (vlax-ename->vla-object(car(entsel))) (getpoint)(getpoint))
sandyvs 发表于 2023-6-5 11:44
再请教下,镜像后的对象怎么选择?
(setq ss1 (ssadd))
(repeat (sslength ss)
应该是代码其余部分有问题吧(defun lm-get-Centroid (ty / obj pt x y)
(setq obj (vlax-ename->vla-object ty))
(vla-getboundingbox obj 'p1 'p2)
(mapcar 'set'(x1 y1) (vlax-safearray->list p1 ))
(mapcar 'set'(x2 y2) (vlax-safearray->list p2 ))
(setq pt(list (/(+ x1 x2)2.0) (/(+ y1 y2)2.0)))
pt
)
(setq
ss1 (ssadd)
ss(ssget)
pt1(getpoint)
pt2(getpoint)
i 0
)
(repeat (sslength ss)
(setq ent (ssname ss i)) ; 获取选择集中的第一个对象
(setq pt0(lm-get-Centroid ent))
(setq vlaObj (vlax-ename->vla-object ent)) ; 将实体名称转换为 VLA 对象
(setq vlaObjCopy(vla-Mirror vlaObj (vlax-3D-point pt1) (vlax-3D-point pt2)) ); 镜像对象
(ssadd (vlax-vla-object->ename vlaObjcopy) ss1)
(setq i (1+ i))
)
(sssetfirst nil ss1) 飞雪神光 发表于 2023-6-5 00:17
原地复制一个
再请教下,镜像后的对象怎么选择?
(setq ss1 (ssadd))
(repeat (sslength ss)
(setq ent (ssname ss 0)) ; 获取选择集中的第一个对象
(setq pt0(xyp-9Pt ent 5))
(setq vlaObj (vlax-ename->vla-object ent)) ; 将实体名称转换为 VLA 对象
(setq y (* -2 (- (cadr pt0) (cadr pt1))))
(setq moveDist (/ y (s_tan ang)))
(setq pt3 (mapcar '+ pt1 pt2))
(setq pt3 (mapcar '/ pt3 '(2 2 2))) ; 计算镜像线中点
(setq vlaObjCopy(vla-Mirror vlaObj (vlax-3D-point pt1) (vlax-3D-point pt2)) ); 镜像对象
(ssadd (vlax-vla-object->ename vlaObjcopy) ss1)
这么加选择集为啥把镜像前的也给加进去了呢? 我也需要。。。。。 尘缘一生 发表于 2023-2-3 00:07
我也需要。。。。。
获取图元数据 计算与镜像中心两点之间的关系得到镜像点 用新数据和entmake重画图形 飞雪神光 发表于 2023-5-8 11:32
获取图元数据 计算与镜像中心两点之间的关系得到镜像点 用新数据和entmake重画图形
可否示范写一个模版啊 shcvip 发表于 2023-6-1 23:21
可否示范写一个模版啊
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=187768&page=1#pid946782
这个是 entmake的思路 飞雪神光 发表于 2023-6-2 00:56
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=187768&page=1#pid946782
这个是 entmake的思路
谢谢!:handshake 飞雪神光 发表于 2023-6-2 00:53
这个是矩阵的方法
请问下,怎么控制不删除原对象呢? 本帖最后由 飞雪神光 于 2023-6-5 00:21 编辑
sandyvs 发表于 2023-6-4 10:23
请问下,怎么控制不删除原对象呢?
原地复制一个(BF-Mat-ReflectByMatrix (vla-Copy(vlax-ename->vla-object(car(entsel)))) (getpoint)(getpoint)) 飞雪神光 发表于 2023-6-5 00:17
原地复制一个
对哦,哈哈
页:
[1]
2