tranney 发表于 2018-8-16 23:05:29

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

本帖最后由 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



479274135 发表于 2018-8-17 10:45:02

(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

tranney 发表于 2018-8-17 10:30:38

479274135 发表于 2018-8-17 09:01
;(sslength ss)
(setq ss (ssget "i"));用这个来获取已经选择的选择集
(if (not ss)


经过试用插进去不能用啊,大神,能否帮我实现功能呢?

ssyfeng 发表于 2018-8-17 08:29:39

你的代码已经达到你的功能了

tranney 发表于 2018-8-17 08:43:35

ssyfeng 发表于 2018-8-17 08:29
你的代码已经达到你的功能了

唯一有点不足,就是不能先选择物体后执行命令

479274135 发表于 2018-8-17 09:01:27

;(sslength ss)
(setq ss (ssget "i"));用这个来获取已经选择的选择集
(if (not ss)
        (setq ss (ssget))
)

自贡黄明儒 发表于 2018-8-17 11:22:06

可以先选择后执行的,与你的设置有关。

tranney 发表于 2018-8-17 22:32:38

哦,我知道为什么了,加了个前处理函数,和出错后就不能用了,谢谢各位

oistre 发表于 2018-8-20 00:18:58

顶一个,,,,,,,

学知识的小白 发表于 2019-6-13 01:30:05

学习了各位大神
页: [1] 2
查看完整版本: 非常好用的镜像还差一点功能,请大神教我