KO你 发表于 2025-6-25 05:51:47

样条曲线合并

样条线合并,只能从左到右顺序选择来合并,否则会出现闭合错乱。请路过的大师优化为框选直接合并
快捷键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))

guosheyang 发表于 2025-6-26 16:03:53

自己编的代码并不一定比用join命令的速度快

qazxswk 发表于 2025-6-26 15:54:11

高版本CAD,用一个J命令就能解决了。

xyp1964 发表于 2025-7-22 08:56:43

本帖最后由 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)
)

429014673 发表于 2025-6-25 08:01:25

原始命令J可解决

下文没句号。 发表于 2025-6-25 09:49:32

坐等高手出手

xyp1964 发表于 2025-6-25 12:30:15

spline线还能连接?

KO你 发表于 2025-6-25 15:35:48

xyp1964 发表于 2025-6-25 12:30
spline线还能连接?

收集所有样条线的端点以及它们的拟合点,然后删除原始的样条线,创建新的样条线

KO你 发表于 2025-6-26 01:57:31

本帖最后由 KO你 于 2025-6-26 01:59 编辑

KO你 发表于 2025-6-25 15:35
收集所有样条线的端点以及它们的拟合点,然后删除原始的样条线,创建新的样条线
演示看动图示意。。。

KO你 发表于 2025-7-7 16:32:17

guosheyang 发表于 2025-6-26 16:03
自己编的代码并不一定比用join命令的速度快

这个命令我是知道的,什么线都可以合并,但合并出来的线拟合点和控制点很乱,后期不能编辑,这个命令要看情况用,我一般不用

阿猪蛋 发表于 2025-7-14 08:52:32

原始命令J可解决
页: [1] 2 3
查看完整版本: 样条曲线合并