明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 331|回复: 8

非常好用的镜像还差一点功能,请大神教我

[复制链接]
发表于 2018-8-16 23:05 | 显示全部楼层 |阅读模式
本帖最后由 tranney 于 2018-8-17 08:28 编辑

本镜像功能非常好用,但是还缺先选择物体可以执行,请大神修改一下
不好意思,发错版块了,请版主删除,谢谢

(defun c:ww (/ ss en p1 p2 loop code test)

(princ "修改工具   我的镜像 左键、空格,X键 保留,右键删除  \n")
        (setq ss (ssget))

        (initget 1 "X")
        (setq p1 (getpoint "\n指定镜像线的第一点或[选镜像线(X)]:"))
        (cond ( (= p1 "X")
                        (setq test t)
(setq ent1 (entsel "\n请选择中心直线:")
         e1   (car ent1)
         ss1  (entget e1))
      (setq p1 (Cdr (Assoc 10 ss1))
            p2 (Cdr (Assoc 11 ss1)))
(command "mirror" ss ""p1 p2 "N")(princ)

                        (princ "\n我的镜像 左键、空格,X键 保留,右键删除!" )
                        (setq loop T)
                        (while loop
                                (setq code (grread T 8))
                                (cond
                                        ((= (car code) 25)     (command "erase" ss "") (setq loop nil));右键
                                        ((= (cadr code) 32)    (setq loop nil));空格
                                        ((= (car code) 3)    (setq loop nil));左键
                    ((or (= (cadr code) 88)(= (cadr code) 120)) (setq loop nil))  ;88为大写X120为小写x
                                );cond
                        );while
                )
                (t
                        (setq p2 (getpoint p1 "\n指定镜像线的第二点:"))
                        (command "mirror" ss "" p1 p2 "N")
                        (princ "\n我的镜像 左键、空格,X键 保留,右键删除!" )
                        (setq loop T)
                        (while loop
                                (setq code (grread T 8))
                                (cond
                                        ((= (car code) 25)     (command "erase" ss "") (setq loop nil));右键
                                        ((= (cadr code) 32)    (setq loop nil));空格
                                        ((= (car code) 3)    (setq loop nil));左键
                    ((or (= (cadr code) 88)(= (cadr code) 120)) (setq loop nil));88为大写X120为小写x
                                );cond
                        );while
                )
        );cond

        (princ)
);end



发表于 2018-8-17 08:29 | 显示全部楼层
你的代码已经达到你的功能了
 楼主| 发表于 2018-8-17 08:43 | 显示全部楼层
ssyfeng 发表于 2018-8-17 08:29
你的代码已经达到你的功能了

唯一有点不足,就是不能先选择物体后执行命令
发表于 2018-8-17 09:01 | 显示全部楼层
;(sslength ss)
(setq ss (ssget "i"));用这个来获取已经选择的选择集
(if (not ss)
        (setq ss (ssget))
)
 楼主| 发表于 2018-8-17 10:30 | 显示全部楼层
479274135 发表于 2018-8-17 09:01
;(sslength ss)
(setq ss (ssget "i"));用这个来获取已经选择的选择集
(if (not ss)

经过试用插进去不能用啊,大神,能否帮我实现功能呢?
发表于 2018-8-17 10:45 | 显示全部楼层
(defun c:ww (/ ss en p1 p2 loop code test)
       
        (princ "修改工具   我的镜像 左键、空格,X键 保留,右键删除  \n")
        (setq ss (ssget "i"));用这个来获取已经选择的选择集
        (if (not ss)
                (setq ss (ssget))
        )
        (initget 1 "X")
        (setq p1 (getpoint "\n指定镜像线的第一点或[选镜像线(X)]:"))
        (cond ( (= p1 "X")
                                        (setq test t)
                                        (setq ent1 (entsel "\n请选择中心直线:")
                                                e1   (car ent1)
                                                ss1  (entget e1))
                                        (setq p1 (Cdr (Assoc 10 ss1))
            p2 (Cdr (Assoc 11 ss1)))
                                        (command "mirror" ss ""p1 p2 "N")(princ)
                                       
                                        (princ "\n我的镜像 左键、空格,X键 保留,右键删除!" )
                                        (setq loop T)
                                        (while loop
                                                (setq code (grread T 8))
                                                (cond
                                                        ((= (car code) 25)     (command "erase" ss "") (setq loop nil));右键
                                                        ((= (cadr code) 32)    (setq loop nil));空格
                                                        ((= (car code) 3)    (setq loop nil));左键
                                                        ((or (= (cadr code) 88)(= (cadr code) 120)) (setq loop nil))  ;88为大写X120为小写x
                                                );cond
                                        );while
                                )
                (t
                        (setq p2 (getpoint p1 "\n指定镜像线的第二点:"))
                        (command "mirror" ss "" p1 p2 "N")
                        (princ "\n我的镜像 左键、空格,X键 保留,右键删除!" )
                        (setq loop T)
                        (while loop
                                (setq code (grread T 8))
                                (cond
                                        ((= (car code) 25)     (command "erase" ss "") (setq loop nil));右键
                                        ((= (cadr code) 32)    (setq loop nil));空格
                                        ((= (car code) 3)    (setq loop nil));左键
                                        ((or (= (cadr code) 88)(= (cadr code) 120)) (setq loop nil));88为大写X120为小写x
                                );cond
                        );while
                )
        );cond
       
        (princ)
);end
发表于 2018-8-17 11:22 | 显示全部楼层
可以先选择后执行的,与你的设置有关。
 楼主| 发表于 2018-8-17 22:32 | 显示全部楼层
哦,我知道为什么了,加了个前处理函数,和出错后就不能用了,谢谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2018-12-19 05:46 , Processed in 0.495317 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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