世人皆醉 发表于 2022-9-2 11:40:20

关于用LISP修剪命令框选删除不全的问题

(defun c:yfl1(/ d1 d2 d3 d4 d5 d6 d7 d8e1 e2 e3 e4 pt0 pt1 pt2 pt3 p1);圆法兰
   (command "._undo" "_begin")
(setvar "cmdecho" 0) ;关闭普通命令提示信息
(setvar "osmode" 0);关闭对象捕捉状态

(setq d1(getreal "\n 法兰内径<151>:"));风管外径和法兰内径
(if (not d1) (setq d1 151))
(setq d2(getreal "\n 中心距<191>:"))
(if (not d2) (setq d2 191))
(setq d6(getreal "\n 法兰宽度<40>:"))
(if (not d6) (setq d6 40))
(setq d3 (+ d1 (* 2 d6)))
(setq d4(getreal "\n 开孔直径<10>:"))
(if (not d4) (setq d4 10))
(setq d5(getint "\n 开孔数量<8>:"))
(if (not d5) (setq d5 8))
(SETQ D8(/ (/ 360 D5) 2));分线角度
(setq d7(/ d3 2))
(SETQ pt0(getpoint "\n 插入点:"))
;上面为所需变量
(command "circle" pt0 "d" d1)
(setq e4(entlast))
(command "circle" pt0 "d" d2)
(setq e1(entlast))
(command "circle" pt0 "d" d3);绘制三个圆
(setq p1(list (car pt0) (+ (cadr pt0) d7)))   
(setq pt1(list (car pt0) (+ (cadr pt0) (/ d2 2))))
(command "circle" pt1 "d" d4)
(setq e2(entlast))
(command "_.ARRAY" e2 "" "P" pt0 d5"" "")
(command "erase" e1 "")
(command "line" pt0 p1 "")
(setq e3(entlast))
(command "rotate" e3 "" pt0 d8)
(setq pt2(list (+ (car pt0) 10) (+ (cadr pt0) 10)));TR点1
(setq pt3(list (- (car pt0) 10) (- (cadr pt0) 10)));TR点2
(if
    (> d1 251)
(progn
(if
    (<= d1 501)
(progn
(command "rotate" e3 "" pt0 "c" 120)
(command "rotate" e3 "" pt0 "c" 240)
)
(progn
(command "rotate" e3 "" pt0 "c" 90)
(command "rotate" e3 "" pt0 "c" 180)
(command "rotate" e3 "" pt0 "c" 270)
(command "rotate" e3 "" pt0 "c" 360)))
(command "trim" e4 "" "c" pt2 pt3 "")
)
(command "erase" e3 "" ))



   

    (setvar "osmode" 16383);打开对象捕捉状态
(princ) ;静默退出
(command "._undo" "_end")
)大家帮我看看,使用修剪命令不能完全删除框选范围内的点,是咋回事呢


mituzhe 发表于 2022-9-2 11:40:21

本帖最后由 mituzhe 于 2022-9-3 17:38 编辑

换个思路,不要用修剪命令,直接画好再旋转
(defun c:yfl1(/ ang d1 d2 d3 d4 e1 e4 e5 n pt0 pt1 pt2 pt3 r3 width);圆法兰
(command "._undo" "_begin")
(setvar "cmdecho" 0) ;关闭普通命令提示信息
(setvar "osmode" 0);关闭对象捕捉状态

(setq d1(getreal "\n 法兰内径<151>:"));风管外径和法兰内径
(if (not d1) (setq d1 151.))
(setq d2(getreal "\n 中心距<191>:"));圆孔中心距(直径)
(if (not d2) (setq d2 191.))
(setq width (getreal "\n 法兰宽度<40>:"))
(if (not width) (setq width 40.))
(setq d3 (+ d1 (* 2 width)));法兰外径
(setq d4(getreal "\n 开孔直径<10>:"))
(if (not d4) (setq d4 10))
(setq n(getint "\n 开孔数量<8>:"))
(if (not n) (setq n 8))
(SETQ ang (/ (/ 360. n) 2.));分线角度
(SETQ pt0 (getpoint "\n 插入点:"))
;上面为所需变量
(command "circle" pt0 "d" d1);画内径
(setq e1 (entlast))
(command "circle" pt0 "d" d3);画外径

(setq pt1 (mapcar '+ pt0 (list 0 (/ d1 2.) 0)));从圆心寻找内径一点
(setq pt2 (mapcar '+ pt0 (list 0 (/ d2 2.) 0)));从圆心寻找开孔圆一点
(setq pt3 (mapcar '+ pt0 (list 0 (/ d3 2.) 0)));从圆心寻找外径一点

(command "circle" pt2 "d" d4);画圆孔
(setq e4(entlast))
(command "_.ARRAY" e4 "" "P" pt0 n"" "");阵列布置圆孔
(command "line" pt1 pt3 "")
(setq e5(entlast))
(command "rotate" e5 "" pt0 ang)

(if (> d1 251)
    (progn
      (if (<= d1 501)
      (progn
          (command "rotate" e5 "" pt0 "c" 120)
          (command "rotate" e5 "" pt0 "c" 240)
      )
      (progn
          (command "rotate" e5 "" pt0 "c" 90)
          (command "rotate" e5 "" pt0 "c" 180)
          (command "rotate" e5 "" pt0 "c" 270)
      )
      )
    )
    (command "erase" e5 "" )
)
(setvar "osmode" 16383);打开对象捕捉状态
(princ) ;静默退出
(command "._undo" "_end")
)

xyp1964 发表于 2022-9-2 13:38:21

(defun c:tt ()
"圆法兰"
(setvar "osmode" 0)
(setq d1 (Ureal 7 "" "法兰内径" d1)) ;151
(setq d2 (Ureal 7 "" "中心距" d2)) ;191
(setq d6 (Ureal 7 "" "法兰宽度" d6)) ;40
(setq d4 (Ureal 7 "" "孔直径" d4)) ;10
(setq d5 (Uint 1 "" "开孔数量" d5)) ;8
(setq d3 (+ d1 (* 2 d6)))
(setq d8 (/ 360 d5 2.)) ;分线角度
(setq d7 (/ d3 2.))
(setq pt0 (getpoint "\n插入点: "))
(command "circle" pt0 "d" d1)
(setq e4 (entlast))
(command "circle" pt0 "d" d2)
(setq e1 (entlast))
(command "circle" pt0 "d" d3) ;绘制三个圆
(setq        p1(polar pt0 (* pi 0.5) d7)
        pt1 (polar pt0 (* pi 0.5) (/ d2 2.))
)
(command "circle" pt1 "d" d4)
(setq e2 (entlast))
(command "_.ARRAY" e2 "" "P" pt0 d5 "" "")
(command "erase" e1 "")
(command "line" (polar pt0 (* pi 0.5) (/ d1 2.)) p1 "")
(setq e3 (entlast))
(command "rotate" e3 "" pt0 d8)
(if (> d1 251)
    (if        (<= d1 501)
      (progn
        (command "rotate" e3 "" pt0 "c" 120)
        (command "rotate" e3 "" pt0 "c" 240)
      )
      (progn
        (command "rotate" e3 "" pt0 "c" 90)
        (command "rotate" e3 "" pt0 "c" 180)
        (command "rotate" e3 "" pt0 "c" 270)
        (command "rotate" e3 "" pt0 "c" 360)
      )
    )
    (command "erase" e3 "")
)
(princ)
)

世人皆醉 发表于 2022-9-2 14:23:45

xyp1964 发表于 2022-9-2 13:38


大佬你这是啥命令,没有UREAL这个函数啊,而且我只想知道我修剪那部分错误出现在哪里,不是重新编写一个程序啊,而且你这个程序运行失败

mituzhe 发表于 2022-9-2 17:10:55



我这里看运行没有问题啊

mituzhe 发表于 2022-9-2 17:11:56

世人皆醉 发表于 2022-9-2 14:23
大佬你这是啥命令,没有UREAL这个函数啊,而且我只想知道我修剪那部分错误出现在哪里,不是重新编写一个 ...

你得用院长的库(XCAD)才能运行

世人皆醉 发表于 2022-9-3 14:09:49

mituzhe 发表于 2022-9-2 17:11
你得用院长的库(XCAD)才能运行

你把内径放到350,中心390,再看看

世人皆醉 发表于 2022-9-3 14:11:10

mituzhe 发表于 2022-9-2 17:11
你得用院长的库(XCAD)才能运行

XCAD是啥啊,不太了解唉

mituzhe 发表于 2022-9-3 15:04:37

本帖最后由 mituzhe 于 2022-9-3 17:07 编辑

世人皆醉 发表于 2022-9-3 14:11
XCAD是啥啊,不太了解唉
就是楼上回复你的大佬的工具箱,看他签名。其实他已经回答了你的问题。只是用了他自己的库,你不安装他的库运行不了

mituzhe 发表于 2022-9-3 17:17:54


页: [1]
查看完整版本: 关于用LISP修剪命令框选删除不全的问题