624777395 发表于 2024-9-23 10:40:28

圆角倒直角

求大神帮忙写一下这个功能的代码,画圆角延伸线,圆角保留不变,最好是多段线的情况也可以用

统一网名 发表于 2024-9-24 16:46:59

moranyuyan 发表于 2024-9-24 07:02
经测试,不起作用。


[*](defun c:tt6 (/ a b dx ename jd n pt ss ss1 zx1 zx2)
[*](vl-load-com)
[*](setq dx (entsel "\n请选择圆角:")
[*]    pt (cadr dx)
[*]    ename (car dx)
[*])
[*](setq n (fix (vlax-curve-getparamatpoint ename(vlax-curve-getclosestpointto ename pt))))
[*](setq a (vlax-curve-getpointatparamename n))
[*](setq b (vlax-curve-getpointatparamename (1+ n)))
[*](command "_.copy" ename "" "0,0" "@")
[*](command "explode" (entlast))
[*](setq ss1 (ssget "p"))
[*](setq ss (ssget "c" a b '((0 . "LINe"))))
[*](setq zx1 (ssname ss 0))
[*](setq zx2 (ssname ss 1))
[*](setq jd(vlax-invoke (vlax-ename->vla-object zx2) 'IntersectWith (vlax-ename->vla-object zx1) acExtendBoth))
[*](command "line" a jd b "")
[*](command "ERASE" ss1 "")
[*](princ)
[*])

统一网名 发表于 2024-9-23 14:58:28

本帖最后由 统一网名 于 2024-9-23 15:05 编辑


[*](defun c:tt6 (/ a b ename jd ss zx1 zx2)
[*](vl-load-com)
[*](setq ename (car (entsel "\n选择对象:")))
[*](setq a (vlax-curve-getstartpoint ename))
[*](setqb (vlax-curve-getendpoint ename))
[*](setq ss (ssget "c" a b '((0 . "LINe"))))
[*](setq zx1 (ssname ss 0))
[*](setq zx2 (ssname ss 1))
[*](setq jd(vlax-invoke (vlax-ename->vla-object zx2) 'IntersectWith (vlax-ename->vla-object zx1) acExtendBoth))
[*];(command "_extend" "" (list zx1 jd) "");延长原来直线到交点
[*];(command "_extend" "" (list zx2 jd) "");延长原来直线到交点
[*](command "line" a jd "")
[*] (command "line" b jd "")
[*](princ)
[*])




统一网名 发表于 2024-9-25 16:02:44

xzd716 发表于 2024-9-24 21:19
在Autocad2021版上试用,12#程序对多段线有效,对普通线无效;最前面程序对对普通线有效,对多段线无效。能 ...

加一个对象类型判断,类型是 "ARC"就用第一个,类型是 "LWPOLYLINE" 就用后一个

Andyhon 发表于 2024-9-23 10:56:29

全选所有外侧圆弧
或点选个别圆弧
比选线不是更省事?

自贡黄明儒 发表于 2024-9-23 11:18:10

本帖最后由 自贡黄明儒 于 2024-9-23 13:18 编辑

我也偶尔这样画,都是手工完成,觉得没必要用程序。如果经常这样干,有程序倒是比较方便

624777395 发表于 2024-9-23 16:46:46

自贡黄明儒 发表于 2024-9-23 11:18
我也偶尔这样画,都是手工完成,觉得没必要用程序。如果经常这样干,有程序倒是比较方便

大佬,这个怎么实现的?

624777395 发表于 2024-9-23 16:48:44

本帖最后由 624777395 于 2024-9-23 17:09 编辑

统一网名 发表于 2024-9-23 14:58(defun c:tt6 (/ a b ename jd ss zx1 zx2)(vl-load-com)(setq ename (car (entsel "\n ...
大佬,这个只对普通线有用,如果圆弧和相邻的线是连接在一起的多段线就识别不了

统一网名 发表于 2024-9-23 19:21:53

624777395 发表于 2024-9-23 16:48
大佬,这个只对普通线有用,如果圆弧和相邻的线是连接在一起的多段线就识别不了

(setq ss (ssget "c" a b '((0 . "LINe,LWPOLYLINE")))) 改一行代码

moranyuyan 发表于 2024-9-24 07:02:41

统一网名 发表于 2024-9-23 19:21
(setq ss (ssget "c" a b '((0 . "LINe,LWPOLYLINE")))) 改一行代码

经测试,不起作用。

统一网名 发表于 2024-9-24 07:42:33

本帖最后由 统一网名 于 2024-9-24 07:43 编辑

moranyuyan 发表于 2024-9-24 07:02
经测试,不起作用。
有没有啥提示?我测试是没问题的,我的是cad 2020.

lzspain 发表于 2024-9-24 09:23:03

统一网名 发表于 2024-9-24 07:42
有没有啥提示?我测试是没问题的,我的是cad 2020.

他的意思是圆弧和两边的线是一条完整的多段线,你理解的是三条线是断开的,直线段是直线或多段线,所以修改的那一行代码不起作用。
页: [1] 2
查看完整版本: 圆角倒直角