sandyvs 发表于 2023-6-5 11:44:21

飞雪神光 发表于 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-6-5 13:23:31

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)

sandyvs 发表于 2023-6-5 14:50:36

飞雪神光 发表于 2023-6-5 13:23
应该是代码其余部分有问题吧

完整在这,后面就还有一个移动操作。更换了您的函数。http://bbs.mjtd.com/forum.php?mod=viewthread&tid=187946&page=1&extra=#pid949114
好像是(sssetfirst nil ss1)这句的原因,我还不知道它是什么作用,没看懂。。
高版本可以用,但在2010上还是有问题

小师傅 发表于 2024-4-16 15:06:38

飞雪神光 发表于 2023-6-5 13:23
应该是代码其余部分有问题吧

怎样判断一个图元是否镜像
页: 1 [2]
查看完整版本: entmake 镜像程序如何写?