明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2168|回复: 5

[原创]曲线圆滑拟合2条样条曲线

[复制链接]
发表于 2008-3-11 08:20:00 | 显示全部楼层 |阅读模式

程序如下(vl-load-com)
(defun c:tc (/ IsCurve ent1 ent2 pt1 pt2 p11 p12 p21 p22 start end obj1 obj2
                                                                                 osmode
                                                                )                                                                                                                                                 ; Check an entity is a curve or not
                (defun IsCurve (ename / name)
                                (if ename
                                                (progn
                                (setq name (cdr (assoc 0 (entget ename))))
                                (cond
                                                ((= name "LWPOLYLINE")
                                                                T
                                                )
                                                ((= name "pOLYLINE")
                                                                T
                                                )
                                                ((= name "CIRCLE")
                                                                T
                                                )
                                                ((= name "ARC")
                                                                T
                                                )
                                                ((= name "LINE")
                                                                T
                                                )
                                                ((= name "ELLIPSE")
                                                                T
                                                )
                                                ((= name "SPLINE")
                                                                T
                                                )
                                                (T
                                                                NIL
                                                )
                                )
                                                )
                                                NIL
                                )
                )

                ;; Main Program
                (setvar "cmdecho" 0)
                (vl-cmdf "_.undo" "g")
                (setq osmode (getvar "osmode"))
                (setvar "osmode" 0)
                (setq ent1 (entsel "选择第一条曲线:"))
                (if (IsCurve (car ent1))
                                (progn
                                                (if (IsCurve (car (setq ent2 (entsel "\n选择第二条曲线:"))))
                                (progn
                                                (setq pt1 (cadr ent1)
                                                                obj1 (vlax-ename->vla-object (car ent1))
                                                                pt2 (cadr ent2)
                                                                obj2 (vlax-ename->vla-object (car ent2))
                                                )
                                                (setq start (vlax-curve-getstartpoint obj1)
                                                                end (vlax-curve-getendpoint obj1)
                                                )
                                                (if (< (distance start pt1) (distance end pt1))
                                                                (setq p11 start
                                                                                p12 (vlax-curve-getfirstderiv obj1
                                                                                                                                                                                                (vlax-curve-getstartparam obj1)
                                                                                                                )
                                                                                p12 (mapcar
                                                                                                '+
                                                                                                p11
                                                                                                p12
                                                                                                                )
                                                                )
                                                                (setq p11 end
                                                                                p12 (vlax-curve-getfirstderiv obj1
                                                                                                                                                                                                (vlax-curve-getendparam obj1)
                                                                                                                )
                                                                                p12 (mapcar
                                                                                                '-
                                                                                                p11
                                                                                                p12
                                                                                                                )
                                                                )
                                                )
                                                (setq start (vlax-curve-getstartpoint obj2)
                                                                end (vlax-curve-getendpoint obj2)
                                                )
                                                (if (< (distance start pt2) (distance end pt2))
                                                                (setq p21 start
                                                                                p22 (vlax-curve-getfirstderiv obj2
                                                                                                                                                                                                (vlax-curve-getstartparam obj2)
                                                                                                                )
                                                                                p22 (mapcar
                                                                                                '+
                                                                                                p21
                                                                                                p22
                                                                                                                )
                                                                )
                                                                (setq p21 end
                                                                                p22 (vlax-curve-getfirstderiv obj2
                                                                                                                                                                                                (vlax-curve-getendparam obj2)
                                                                                                                )
                                                                                p22 (mapcar
                                                                                                '-
                                                                                                p21
                                                                                                p22
                                                                                                                )
                                                                )
                                                )
                                                (vl-cmdf "_.spline" p11 p21 "" p12 p22)
                                )
                                                )
                                )
                )
                (setvar "osmode" osmode)
                (vl-cmdf "_.undo" "e")
)

本帖子中包含更多资源

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

x
发表于 2011-8-3 14:46:40 | 显示全部楼层
请问如何使用
发表于 2011-8-3 15:54:02 | 显示全部楼层
很好用谢谢提供
发表于 2011-8-3 16:24:40 | 显示全部楼层
感谢楼主分享程序!
发表于 2025-8-16 08:58:59 | 显示全部楼层
cad自带blend功能 结果一模一样
回复 支持 反对

使用道具 举报

发表于 2025-8-18 08:44:05 | 显示全部楼层
很好用谢谢提供
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 07:53 , Processed in 0.187865 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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