shcvip 发表于 2019-5-9 15:28:57

entmake 镜像程序如何写?

用entmake   写镜像程序,如何写啊?
谢谢各位!

飞雪神光 发表于 2023-6-2 00:53:25

本帖最后由 飞雪神光 于 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))

飞雪神光 发表于 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 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-2-3 00:07:54

我也需要。。。。。

飞雪神光 发表于 2023-5-8 11:32:59

尘缘一生 发表于 2023-2-3 00:07
我也需要。。。。。

获取图元数据 计算与镜像中心两点之间的关系得到镜像点 用新数据和entmake重画图形

shcvip 发表于 2023-6-1 23:21:14

飞雪神光 发表于 2023-5-8 11:32
获取图元数据 计算与镜像中心两点之间的关系得到镜像点 用新数据和entmake重画图形

可否示范写一个模版啊

飞雪神光 发表于 2023-6-2 00:56:14

shcvip 发表于 2023-6-1 23:21
可否示范写一个模版啊

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=187768&page=1#pid946782
这个是 entmake的思路

shcvip 发表于 2023-6-3 22:15:52

飞雪神光 发表于 2023-6-2 00:56
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=187768&page=1#pid946782
这个是 entmake的思路

谢谢!:handshake

sandyvs 发表于 2023-6-4 10:23:05

飞雪神光 发表于 2023-6-2 00:53
这个是矩阵的方法

请问下,怎么控制不删除原对象呢?

飞雪神光 发表于 2023-6-5 00:17:48

本帖最后由 飞雪神光 于 2023-6-5 00:21 编辑

sandyvs 发表于 2023-6-4 10:23
请问下,怎么控制不删除原对象呢?
原地复制一个(BF-Mat-ReflectByMatrix (vla-Copy(vlax-ename->vla-object(car(entsel)))) (getpoint)(getpoint))

sandyvs 发表于 2023-6-5 09:00:37

飞雪神光 发表于 2023-6-5 00:17
原地复制一个

对哦,哈哈
页: [1] 2
查看完整版本: entmake 镜像程序如何写?