hoodpinrh 发表于 2022-12-4 15:17:02

自己用的mirror

本帖最后由 hoodpinrh 于 2022-12-4 15:26 编辑

(princ "\n選取物件:" )
(setq mi_ss(ssget))
(setq en(entsel "\n選取左右鏡射的水平線or垂直鏡射的垂直線:"))
(setq pts(cadr en))
(setq mpt(osnap pts "_mid"))


(command "_.MIRROR" mi_ss "" mpt "@0,10" "_N")


(command "_.MIRROR" mi_ss "" mpt "@10,0" "_N")


最後兩個command我正在想要加入判斷式進去,有人有比較好的方法判斷嗎?
我從事的工作是雷射板金展開,鏡射這指令基本都是不用不行。
想把鏡射指令用的更簡單就好
























kucha007 发表于 2022-12-4 23:42:30

本帖最后由 kucha007 于 2022-12-4 23:52 编辑

水平OR垂直镜像,加了循环可以一直选对象(defun c:TT (/ ss pt1 pt2)
    (while
      (defun *error* ( msg );定义出错函数
      (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
          (progn
            (princ (strcat "\n错误: " msg))
            (command "redraw")
            (princ)
          )
      )
      )
      (if (ssget "i")
          (setq ss (ssget))
          (progn
            (princ "\n→请选择需镜像的对象:")
            (setq ss (ssget))
          )
      )
      (if ss
      (progn
          (if (not tymir)(setq tymir 1)) ;1垂直,-1统一
          (setq pt1 "S")
          (while (= pt1 "S");取值
            (initget "S s")
            (if (= "S" (setq pt1 (getpoint (strcat "\n→请选择("(if (= tymir 1) "垂直" "水平")")轴上的点"":[切换S]"))))
                  (setq tymir (* -1 tymir)) ;1/-1
            )
          )
          (if pt1
            (progn
                (if (= tymir 1)
                  (setq pt2 (list (+ (car pt1) 0) (+ (cadr pt1) 10000)))
                  (setq pt2 (list (+ (car pt1) 10000) (+ (cadr pt1) 0)))
                )
                (command "_.MIRROR" ss "" pt1 pt2 "N")
            )
          )
      )
      )
      (command "redraw")
      (princ)
    )
)

kucha007 发表于 2022-12-4 20:40:20

本帖最后由 kucha007 于 2022-12-4 20:41 编辑

练习了一下,写了个快速镜像。可以预选对象,对称轴取的是经过所选对称轴起点和终点的直线(选圆弧或者多段线也是)。
不过我没太理解, 你是只要在水平或者垂直方向上镜像吗?




(defun c:TT (/ obj pt1 pt2)
    (vl-load-com)
    (if (ssget "i")
      (setq ss (ssget))
      (progn
            (princ "\n→请选择需镜像的对象:")
            (setq ss (ssget))
      )
    )
    (setq obj (vlax-ename->vla-object (car (entsel "\n→请选择对称轴:"))))
    (setq pt1 (vlax-curve-getStartPoint obj)
          pt2 (vlax-curve-getEndPoint obj)
    )
    (command "_.MIRROR" ss "" (trans pt1 0 1) (trans pt2 0 1) "N")
    (princ)
)


hoodpinrh 发表于 2022-12-5 08:07:41

kucha007 发表于 2022-12-4 23:42
水平OR垂直镜像,加了循环可以一直选对象

我要好好的消化一下你的程序,
有很多像我不知道的 if 後面不是都是三個符號都是 < 、= 、> 嗎?
原來還可以像你這樣用,我又進化了一大步。
我還有一大堆內亂七八糟的想法跟程序內,要不加好友丟給你玩玩吧。

ZYX2129 发表于 2022-12-4 16:26:44

谢谢大佬的分享!!!!

hoodpinrh 发表于 2022-12-4 21:39:51

是的   我要的只是線的部分,80%基本都碰到水平垂直的直線比較多。   有斜度的話我目前沒想到要怎麼做。但我會參考李麥克先生的做法的

hoodpinrh 发表于 2022-12-4 22:07:39

kucha007 发表于 2022-12-4 20:40
练习了一下,写了个快速镜像。可以预选对象,对称轴取的是经过所选对称轴起点和终点的直线(选圆弧或者多段 ...

(setq obj (vlax-ename->vla-object (car (entsel "\n→请选择对称轴:"))))
原來還可以這樣組合,我一直沒發現到。
感謝你

kucha007 发表于 2022-12-4 22:36:12

本帖最后由 kucha007 于 2022-12-4 23:06 编辑

hoodpinrh 发表于 2022-12-4 22:07
(setq obj (vlax-ename->vla-object (car (entsel "\n→请选择对称轴:"))))
原來還可以這樣組合,我一 ...
现在就是需要选线作为对称轴,线是水平就是水平镜像咯,线是斜的也就斜着镜像了

hoodpinrh 发表于 2022-12-4 23:54:32

kucha007 发表于 2022-12-4 23:42
水平OR垂直镜像,加了循环可以一直选对象

太專業了真的
我剛也在想要怎麼做循環說

kucha007 发表于 2022-12-4 23:57:43

hoodpinrh 发表于 2022-12-4 23:54
太專業了真的
我剛也在想要怎麼做循環說

当练习写的,互相学习。镜像类型是我作为全局变量了,可能会方便一些

hoodpinrh 发表于 2022-12-5 00:06:35

kucha007 发表于 2022-12-4 23:57
当练习写的,互相学习。镜像类型是我作为全局变量了,可能会方便一些

簡單方便就好
時間可以省下很多了
這樣我又可以有多的時間想東想西了
页: [1] 2
查看完整版本: 自己用的mirror