明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1287|回复: 13

[提问] entmake 镜像程序如何写?

[复制链接]
发表于 2019-5-9 15:28 | 显示全部楼层 |阅读模式
用entmake   写镜像程序,如何写啊?
谢谢各位!
发表于 2023-6-2 00:53 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-6-2 00:54 编辑
shcvip 发表于 2023-6-1 23:21
可否示范写一个模版啊
这个是矩阵的方法
  1. (defun BF-Mat-ApplyMatrixTransformation (target matrix vector)
  2.   (cond
  3.     ((eq 'VLA-OBJECT (type target))
  4.       (vla-TransformBy target
  5.         (vlax-tMatrix
  6.           (append (mapcar (function (lambda (x v) (append x (list v)))) matrix vector)
  7.                                                 '((0. 0. 0. 1.))
  8.           )
  9.         )
  10.       )
  11.     )
  12.     ((listp target)
  13.       (mapcar
  14.         (function
  15.           (lambda (point) (mapcar '+ (BF-Mat-MxV matrix point) vector))
  16.         )
  17.         target
  18.       )
  19.     )        
  20.   )
  21. )
  22. (defun BF-Mat-MxV (m v)
  23.   (mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m)
  24. )
  25. (defun BF-Mat-ReflectByMatrix (target p1 p2 / m)
  26.   (
  27.     (lambda ( a / m )
  28.       (BF-Mat-ApplyMatrixTransformation target
  29.         (setq m
  30.           (list
  31.             (list (cos a)    (sin a)  0.)
  32.             (list (sin a) (- (cos a)) 0.)
  33.             (list    0.         0.    1.)
  34.           )
  35.         )
  36.         (mapcar '- p1 (BF-Mat-MxV m p1))
  37.       )
  38.     )
  39.     (* 2. (angle p1 p2))
  40.   )
  41. )
  42. (BF-Mat-ReflectByMatrix (vlax-ename->vla-object(car(entsel))) (getpoint)  (getpoint))

发表于 2023-6-5 13:23 | 显示全部楼层
sandyvs 发表于 2023-6-5 11:44
再请教下,镜像后的对象怎么选择?
(setq ss1 (ssadd))
  (repeat (sslength ss)

应该是代码其余部分有问题吧
  1. (defun lm-get-Centroid (ty / obj pt x y)
  2.         (setq obj (vlax-ename->vla-object ty))
  3.         (vla-getboundingbox obj 'p1 'p2)
  4.         (mapcar 'set'(x1 y1) (vlax-safearray->list p1 ))
  5.         (mapcar 'set'(x2 y2) (vlax-safearray->list p2 ))
  6.         (setq pt(list (/(+ x1 x2)2.0) (/(+ y1 y2)2.0)))
  7.         pt
  8. )
  9. (setq
  10.         ss1 (ssadd)
  11.         ss(ssget)
  12.         pt1(getpoint)
  13.         pt2(getpoint)
  14.         i 0
  15. )
  16. (repeat (sslength ss)
  17.         (setq ent (ssname ss i)) ; 获取选择集中的第一个对象
  18.         (setq pt0(lm-get-Centroid ent))
  19.         (setq vlaObj (vlax-ename->vla-object ent)) ; 将实体名称转换为 VLA 对象
  20.         (setq vlaObjCopy(vla-Mirror vlaObj (vlax-3D-point pt1) (vlax-3D-point pt2)) ); 镜像对象
  21.         (ssadd (vlax-vla-object->ename vlaObjcopy) ss1)
  22.         (setq i (1+ i))
  23. )
  24. (sssetfirst nil ss1)
发表于 2023-6-5 11:44 | 显示全部楼层

再请教下,镜像后的对象怎么选择?
(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-5-8 11:32 | 显示全部楼层
尘缘一生 发表于 2023-2-3 00:07
我也需要。。。。。

获取图元数据 计算与镜像中心两点之间的关系得到镜像点 用新数据和entmake重画图形
 楼主| 发表于 2023-6-1 23:21 | 显示全部楼层
飞雪神光 发表于 2023-5-8 11:32
获取图元数据 计算与镜像中心两点之间的关系得到镜像点 用新数据和entmake重画图形

可否示范写一个模版啊
发表于 2023-6-2 00:56 | 显示全部楼层
shcvip 发表于 2023-6-1 23:21
可否示范写一个模版啊

http://bbs.mjtd.com/forum.php?mo ... mp;page=1#pid946782
这个是 entmake的思路
 楼主| 发表于 2023-6-3 22:15 | 显示全部楼层
飞雪神光 发表于 2023-6-2 00:56
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=187768&page=1#pid946782
这个是 entmake的思路

谢谢!
发表于 2023-6-4 10:23 | 显示全部楼层
飞雪神光 发表于 2023-6-2 00:53
这个是矩阵的方法

请问下,怎么控制不删除原对象呢?
发表于 2023-6-5 00:17 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-6-5 00:21 编辑
sandyvs 发表于 2023-6-4 10:23
请问下,怎么控制不删除原对象呢?

原地复制一个
  1. (BF-Mat-ReflectByMatrix (vla-Copy(vlax-ename->vla-object(car(entsel)))) (getpoint)  (getpoint))
发表于 2023-6-5 09:00 | 显示全部楼层

对哦,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-1 21:40 , Processed in 0.681400 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表