样条曲线合并
样条线合并,只能从左到右顺序选择来合并,否则会出现闭合错乱。请路过的大师优化为框选直接合并快捷键js样条曲线合并
(defun c:js (/ *error* doc acadApp ss splines n index spline points modelSpace paperSpace curSpace newSpline)
(vl-load-com)
(defun *error* (msg)
(if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,*EXIT*"))
(princ (strcat "\n错误: " msg)))
(princ))
(setq acadApp (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadApp))
(princ "\n点选要合并的样条线: ")
(setq ss (ssget '((0 . "SPLINE"))))
(if ss
(progn
(setq curSpace (vla-get-ActiveSpace doc))
(setq splines
(vl-remove-if
'listp
(mapcar 'vlax-ename->vla-object
(vl-remove-if-not
'(lambda (x) (eq (type x) 'ENAME))
(mapcar 'cadr (ssnamex ss))))))
(setq points '())
(foreach spl splines
(setq pts (vlax-get-property spl 'FitPoints))
(setq points (append points (vlax-safearray->list (vlax-variant-value pts)))))
(if (= curSpace acModelSpace)
(setq targetSpace (vla-get-ModelSpace doc))
(setq targetSpace (vla-get-PaperSpace doc)))
(setq newSpline (vla-AddSpline targetSpace
(vlax-make-variant (vlax-safearray-fill
(vlax-make-safearray vlax-vbDouble (cons 0 (1- (length points))))points))
(vlax-3d-point '(0 0 0))
(vlax-3d-point '(0 0 0))))
(vla-put-Layer newSpline (vla-get-Layer (car splines)))
(foreach spl splines (vla-Delete spl))
(princ (strcat "\n成功合并 " (itoa (sslength ss)) " 条样条线")))
(princ "\n未选择样条线!"))
(princ))
自己编的代码并不一定比用join命令的速度快 高版本CAD,用一个J命令就能解决了。 本帖最后由 xyp1964 于 2025-7-22 09:05 编辑
KO你 发表于 2025-6-26 01:57
演示看动图示意。。。
用楼主的代码理论上都会变形
(defun c:tt ()
"样条曲线合并"
(if (setq ss (ssget '((0 . "SPLINE"))))
(command "pedit" "m" ss "" 20 "j" 0. "");转换指定精度20改大变形会更小
)
(princ)
)
原始命令J可解决 坐等高手出手 spline线还能连接? xyp1964 发表于 2025-6-25 12:30
spline线还能连接?
收集所有样条线的端点以及它们的拟合点,然后删除原始的样条线,创建新的样条线 本帖最后由 KO你 于 2025-6-26 01:59 编辑
KO你 发表于 2025-6-25 15:35
收集所有样条线的端点以及它们的拟合点,然后删除原始的样条线,创建新的样条线
演示看动图示意。。。 guosheyang 发表于 2025-6-26 16:03
自己编的代码并不一定比用join命令的速度快
这个命令我是知道的,什么线都可以合并,但合并出来的线拟合点和控制点很乱,后期不能编辑,这个命令要看情况用,我一般不用 原始命令J可解决