明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2674|回复: 21

[提问] 样条曲线合并

[复制链接]
发表于 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))

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-6-26 16:03:53 | 显示全部楼层
自己编的代码并不一定比用join命令的速度快
回复 支持 1 反对 0

使用道具 举报

发表于 2025-6-26 15:54:11 | 显示全部楼层
高版本CAD,用一个J命令就能解决了。
回复 支持 1 反对 0

使用道具 举报

发表于 2025-7-22 08:56:43 | 显示全部楼层
本帖最后由 xyp1964 于 2025-7-22 09:05 编辑
KO你 发表于 2025-6-26 01:57
演示看动图示意。。。

用楼主的代码理论上都会变形



  1. (defun c:tt ()
  2.   "样条曲线合并"
  3.   (if (setq ss (ssget '((0 . "SPLINE"))))
  4.     (command "pedit" "m" ss "" 20 "j" 0. "");转换指定精度20改大变形会更小
  5.   )
  6.   (princ)
  7. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2025-6-25 08:01:25 | 显示全部楼层
原始命令J可解决
回复 支持 反对

使用道具 举报

发表于 2025-6-25 09:49:32 | 显示全部楼层
坐等高手出手
回复 支持 反对

使用道具 举报

发表于 2025-6-25 12:30:15 | 显示全部楼层
spline线还能连接?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-25 15:35:48 | 显示全部楼层
xyp1964 发表于 2025-6-25 12:30
spline线还能连接?

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

点评

来个动图看看  发表于 2025-6-26 00:20
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-26 01:57:31 | 显示全部楼层
本帖最后由 KO你 于 2025-6-26 01:59 编辑
KO你 发表于 2025-6-25 15:35
收集所有样条线的端点以及它们的拟合点,然后删除原始的样条线,创建新的样条线

演示看动图示意。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-7 16:32:17 | 显示全部楼层
guosheyang 发表于 2025-6-26 16:03
自己编的代码并不一定比用join命令的速度快

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

使用道具 举报

发表于 2025-7-14 08:52:32 | 显示全部楼层
原始命令J可解决
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2026-1-12 04:07 , Processed in 0.192580 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表