明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 543|回复: 3

[提问] 非常好用的块镜像功能,请大神修改下

[复制链接]
发表于 2020-9-9 14:51 | 显示全部楼层 |阅读模式
2明经币
本帖最后由 magicheno 于 2020-9-9 14:53 编辑

请大神修改下,如果是绕块基点左右或上下镜像,该怎么改呢
原贴地址:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=113811&highlight=%BF%E9%2B%BE%B5%CF%F1
(defun c:cemi  (/ sc a b);;;;各自中心镜像---
  (while (ssget)
    (vlax-for        obj
                (vla-get-ActiveSelectionSet
                  (vla-get-ActiveDocument (vlax-get-acad-object)))
        (if (not (VL-CATCH-ALL-ERROR-P
                   (VL-CATCH-ALL-APPLY
                     'vla-GetBoundingBox
                     (list obj 'a 'b))))
          (progn
            (setq bp(mapcar '*  '(0.5 0.5 0.5)(apply 'mapcar (cons '+ (mapcar 'vlax-safearray->list(list a b))))))
            (setq ep(list (car bp) (1+ (cadr bp)) (caddr bp)))
            (vla-transformby obj (vlax-tmatrix (mirror2dmat bp ep)))
            )
          )
        )
    )
  (princ)
  )

(defun mirror2dmat(sp ep / i a0 a1 a2 a3 t1 sp a b)
  (setq i '((-1 0 0) (0 -1 0)(0 0 1)))
  (setq a0(mapcar '- ep sp))
  (setq a1(distance a0 (list 0 0 0)))
  (setq a2(/ 1 a1))
  (setq a3(mapcar '(lambda(y)(* y a2)) a0)
        t1(mapcar '(lambda(x)(mapcar '(lambda(y)(* x y)) a3)) a3)
        t1(mapcar '(lambda(x)(mapcar '(lambda(y)(* 2 y)) x))t1)
        t1(mapcar '(lambda(x y)(mapcar '+ x y)) t1 i))
  (setq sp(mapcar '- sp (mapcar '(lambda(x)(apply '+ (mapcar '* x sp))) t1)))
  (setq a (car t1)
        b (cadr t1))
  (list
    (list (car a)(cadr a)(caddr a) (car sp))
    (list (car b)(cadr b)(caddr b) (cadr sp))
    '(0 0 1 0)
    '(0 0 0 1))
)

说明一下:这个是绕中心左右镜像的,如果要绕中心上下镜像则把
(setq ep(list (car bp) (1+ (cadr bp)) (caddr bp)))
改为
(setq ep(list (1+ (car bp))  (cadr bp) (caddr bp)))

最佳答案

查看完整内容

(setq bp(mapcar '* '(0.5 0.5 0.5)(apply 'mapcar (cons '+ (mapcar 'vlax-safearray->list(list a b)))))) 改为: (setq bp (cdr (assoc 10 (entget (vlax-vla-object->ename obj)))))
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-9-9 14:51 | 显示全部楼层
(setq bp(mapcar '*  '(0.5 0.5 0.5)(apply 'mapcar (cons '+ (mapcar 'vlax-safearray->list(list a b))))))
改为: (setq bp  (cdr (assoc 10 (entget (vlax-vla-object->ename obj)))))
回复

使用道具 举报

 楼主| 发表于 2020-9-9 17:11 | 显示全部楼层
本帖最后由 magicheno 于 2020-9-9 17:12 编辑
start4444 发表于 2020-9-9 14:51
(setq bp(mapcar '*  '(0.5 0.5 0.5)(apply 'mapcar (cons '+ (mapcar 'vlax-safearray->list(list a b)))) ...

感谢大侠哈对了大侠,这个可以改成框选么多个么
原贴地址
http://bbs.mjtd.com/thread-181625-1-1.html
(defun c:tt5 (/ entname w)
(setvar "PEDITACCEPT" 1)
(setq entname (car (entsel "\n请选择对象:")) w (cdr (assoc 40 (entget entname))))         
(command "EXPLODE" entname "" "pedit" "m" "p" "" "w" w "")
(setvar "PEDITACCEPT" 0)
(princ)
)

点评

这个完全没啥难度,自己学习了解一下,不然永远都不会  发表于 2020-9-9 17:24
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-23 12:56 , Processed in 0.165384 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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