给大家共享个不一样的曲线交点打断代码
本帖最后由 guosheyang 于 2021-10-6 10:21 编辑我们通常的曲线交点打断程序是breakall插件,该插件代码量太长了,而且还有bug,有时候对矩形不能打断完全; 本自定义命令利用cad自身的三维命令来实现打断相交曲线,而且速度也不慢,虽然也有缺陷,但多数情况下均可用,现作为一种不同的方法分享给大家。
;自定义命令 ygs_brk_int_cur
;命令功能:将相交线在交点处打断
;适用曲线范围:样条线 多段线 直线 圆 椭圆 圆弧 平面三维多段线等均可
;注意事项:①框选要素时选框应将所有要打断的曲线都框住(不要用窗交)
; ②曲线不能自相交
;本函数应用缺陷:打断后会导致多段线在所有节点处被额外打断
; 圆、椭圆都会在其起点处被额外打断
(defun c:ygs_brk_int_cur(/ ss BLYZ GS I PT SJD SJD_PT SS2 UN_SURF X)
(setq blyz(getvar 'cmdecho))
(setvar "cmdecho" 0)
(princ"\n请框选线,注意:选框要大于线的范围")
(setq ss(ssget))
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setq gs(sslength ss) i 0)
(repeat gs
(command "extrude" "MO" "SU" (ssname ss i)"" 2 )
(vla-delete (vlax-ename->vla-object(ssname ss i)))
(setq i(1+ i))
)
(command "union" (ssget "A"'((0 . "EXTRUDEDSURFACE"))) "" )
(setq un_surf(entlast)
sjd_pt(cdr(last(ssnamex ss)))
sjd nil
)
(mapcar'(lambda(x)(setq sjd(cons (car(cdr x))sjd)))sjd_pt)
(entmakex (append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(62 . 0)
(cons 90 (length sjd))
(cons 70 1)
)
(mapcar '(lambda (pt) (cons 10 pt)) sjd)
)
)
(command "convtosurface" (setq jx(entlast)) ""
"_intersect" (entlast) un_surf ""
)
(vla-delete (vlax-ename->vla-object jx))
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" blyz)
)
如果代码应用中有啥问题 请提出来 谢谢! 谢谢楼主分享 具体怎么使用,能做成一个lsp插件吗 本帖最后由 guosheyang 于 2021-10-6 10:36 编辑
对往事说 发表于 2021-10-6 01:21
具体怎么使用,能做成一个lsp插件吗
将该文件拖入cad绘图区域,然后命令行输入命令名 YGS_BRK_INT_CUR即可
不能运行函数被取消 本帖最后由 guosheyang 于 2021-12-24 10:48 编辑
attach://117439.fas潇湘飞雨 发表于 2021-12-23 11:08
不能运行函数被取消
低版本没测试 建议12以上的版本
guosheyang 发表于 2021-12-24 10:12
低版本没测试 建议12以上的版本
明白~感谢~~~~~~~~~~~~~ 感谢大佬分享~~~
页:
[1]