找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 26011|回复: 177

[曲线] 绘制2条曲线的中心线

 火.. [复制链接]

已领礼包: 586个

财富等级: 财运亨通

发表于 2019-3-19 10:42:40 | 显示全部楼层 |阅读模式
  • 插件名称 : 绘制2条曲线的中心线
  • 作  者 : odelywp
  • 运行环境 :不限 
  • 发布时间 :2019-03-19
  • 命令名称 :tt
  • 插件介绍 :2条不规则曲线的近似中心线
  • 备  注 : (点击图片可以放大)
    更好的工具请前往下列链接
    在两条曲线间插入等距线
    http://bbs.xdcad.net/forum.php?mod=viewthread&tid=723316&fromuid=783614
    (出处: 晓东CAD家园-论坛)
(点击图片可以放大)

晓东温馨提示 1、运行环境为 晓东工具箱XDRX API 的插件,请下载最新版本的 晓东工具箱XDRX API开发环境 一键安装
2、在ACAD中如何加载插件,请看 论坛插件使用方法
3、如果您有要求需要定制插件,请到 编程申请 论坛发帖求助

插件详细内容

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 王鹏_pBZlo 于 2019-9-14 17:26 编辑

回复看源码(defun c:tt( / ent1 ent2 num p1list p2list p3list i cp p1 cv1 cv2 stp endp)        (setq ent1 (car (entsel "\n选择第1对象:")))
        (setq ent2 (car (entsel"\n选择第2对象:")))
        (setq cv1 ent1 cv2 ent2)
        (setq num (getint "\n控制点数量(越多效果越好:"))
        (if (ssget "x" (list (cons 0 "POINT"))) (command "erase" (ssget "x" (list (cons 0 "POINT"))) ""))
        (command "divide" ent1 num)
        (setq ent1 (ssget "x" (list (cons 0 "POINT"))))
        (setq p1list nil i 0)
        (while (setq cp (ssname ent1 i))
                (setq p1list (append p1list (list (cdr (assoc 10 (entget cp))))))
                (setq i (1+ i))
        )
        (setq stp (vlax-curve-getStartPoint cv1) endp (vlax-curve-getEndPoint cv1))
        (if (> (distance stp (nth 0 p1list)) (distance endp (nth 0 p1list)))
        (setq p1list (append (list endp) p1list (list stp)))
        (setq p1list (append (list stp) p1list (list endp)))
        )
        (command "erase" ent1 "")
        (command "divide" ent2 num)
        (setq ent2 (ssget "x" (list (cons 0 "POINT"))))
        (setq p2list nil i 0)
        (while (setq cp (ssname ent2 i))
                (setq p2list (append p2list (list (cdr (assoc 10 (entget cp))))))
                (setq i (1+ i))
        )
        (setq stp (vlax-curve-getStartPoint cv2) endp (vlax-curve-getEndPoint cv2))
        (if (> (distance stp (nth 0 p2list)) (distance endp (nth 0 p2list)))
        (setq p2list (append (list endp) p2list (list stp)))
        (setq p2list (append (list stp) p2list (list endp)))
        )
        (command "erase" ent2 "")
        (if (> (distance (nth 0 p1list) (nth 0 p2list)) (distance (nth 0 p1list) (nth (- num 2) p2list)))
            (setq p2list (reverse p2list))
        )        
        (setq i 0 p3list nil)
        (while (and (setq cp (nth i p1list)) (setq cp1 (nth i p2list)))
                (setq p3 (list (* (+ (car cp) (car cp1)) 0.5) (* (+ (cadr cp) (cadr cp1)) 0.5)))
                (setq p3list (append p3list (list p3)) i (1+ i))
        )(command "undo" "be")
        (setq temposm (getvar "osmode"))
        (setvar "osmode" 0)
        (setq i 2 p1 (nth 0 p3list) cp (nth 1 p3list))
        (command "pline" (trans p1 0 1) (trans cp 0 1) "")
        (setq ent1 (entlast) p1 cp)
        (while (setq cp (nth i p3list))
               (command "line" (trans p1 0 1) (trans cp 0 1) "")
                (command "pedit" ent1 "J" (entlast) "" "")
                (setq p1 cp i (1+ i))
        )
        (setvar "osmode" temposm)(command "undo" "e")
        (princ)
)
;;部分修改,可画出按百分比分配距离的线(百分百可正可负)
(defun c:tt1( / ent1 ent2 num p1list p2list p3list i cp p1 bfb cv1 cv2 stp endp)
        (setq ent1 (car (entsel "\n[选择第1线条]:")))
        (setq ent2 (car (entsel"\n[选择第2线条]:")))
        (setq cv1 ent1 cv2 ent2)
        (setq num (getint "\n[控制点数量(越多效果越好)]:"))
        (setq bfb (/ (getreal "\n[与第一条线条距离占2线距离的百分比]:") 100))
        (if (ssget "x" (list (cons 0 "POINT"))) (command "erase" (ssget "x" (list (cons 0 "POINT"))) ""))
        (command "divide" ent1 num)
        (setq ent1 (ssget "x" (list (cons 0 "POINT"))))
        (setq p1list nil i 0)
        (while (setq cp (ssname ent1 i))
                (setq p1list (append p1list (list (cdr (assoc 10 (entget cp))))))
                (setq i (1+ i))
        )
        (setq stp (vlax-curve-getStartPoint cv1) endp (vlax-curve-getEndPoint cv1))
        (if (> (distance stp (nth 0 p1list)) (distance endp (nth 0 p1list)))
        (setq p1list (append (list endp) p1list (list stp)))
        (setq p1list (append (list stp) p1list (list endp)))
        )
        (command "erase" ent1 "")
        (command "divide" ent2 num)
        (setq ent2 (ssget "x" (list (cons 0 "POINT"))))
        (setq p2list nil i 0)
        (while (setq cp (ssname ent2 i))
                (setq p2list (append p2list (list (cdr (assoc 10 (entget cp))))))
                (setq i (1+ i))
        )
        (setq stp (vlax-curve-getStartPoint cv1) endp (vlax-curve-getEndPoint cv1))
        (if (> (distance stp (nth 0 p1list)) (distance endp (nth 0 p1list)))
        (setq p1list (append (list endp) p1list (list stp)))
        (setq p1list (append (list stp) p1list (list endp)))
        )
        (command "erase" ent2 "")
        (if (> (distance (nth 0 p1list) (nth 0 p2list)) (distance (nth 0 p1list) (nth (- num 2) p2list)))
            (setq p2list (reverse p2list))
        )        
        (setq i 0 p3list nil)
        (while (and (setq cp (nth i p1list)) (setq cp1 (nth i p2list)))
                (setq p3 (list (+ (car cp) (* (- (car cp1) (car cp)) bfb)) (+ (cadr cp) (* (- (cadr cp1) (cadr cp)) bfb))))
                (setq p3list (append p3list (list p3)) i (1+ i))
        )
        (setq temposm (getvar "osmode"))
        (setvar "osmode" 0)
        (setq i 2 p1 (nth 0 p3list) cp (nth 1 p3list))
        (command "pline" (trans p1 0 1) (trans cp 0 1) "")
        (setq ent1 (entlast) p1 cp)
        (while (setq cp (nth i p3list))
                (command "line" (trans p1 0 1) (trans cp 0 1) "")
                (command "pedit" ent1 "J" (entlast) "" "")
                (setq p1 cp i (1+ i))
        )(command "undo" "be")
        (setvar "osmode" temposm)(command "undo" "e")
        (princ)
)


zxx.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 586个

财富等级: 财运亨通

 楼主| 发表于 2019-3-19 14:21:31 来自手机 | 显示全部楼层
lrd1861 发表于 2019-3-19 14:13
这结果不对啊

增加分割点的密度
来自: 微社区
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2019-3-19 11:09:43 | 显示全部楼层
有意思,谢谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 172个

财富等级: 日进斗金

发表于 2019-3-19 11:31:40 | 显示全部楼层
来学习一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2019-3-19 12:26:23 | 显示全部楼层
谢谢楼主分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

发表于 2019-3-19 12:31:59 | 显示全部楼层
本帖最后由 君是我的泪 于 2019-3-19 12:33 编辑

学习一下, fresh mind,样条曲线吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 586个

财富等级: 财运亨通

 楼主| 发表于 2019-3-19 12:42:06 来自手机 | 显示全部楼层
生成的是多义线,原线条可以是多义线,样条线
来自: 微社区
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 55个

财富等级: 招财进宝

发表于 2019-3-19 13:02:08 | 显示全部楼层
要是源码就好了呀

点评

就是源码啊  发表于 2019-3-19 13:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 55个

财富等级: 招财进宝

发表于 2019-3-19 13:23:05 | 显示全部楼层
可以独立使用的源码,还挺有意思,我个人觉得也分距离可以用垂线切割求上下交点的中点连线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2019-3-19 13:26:55 | 显示全部楼层
有点意思---曲线的,----地线等高线加密可用?   谢谢分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2124个

财富等级: 金玉满堂

发表于 2019-3-19 14:05:47 | 显示全部楼层
不错不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 2124个

财富等级: 金玉满堂

发表于 2019-3-19 14:13:22 | 显示全部楼层
本帖最后由 lrd1861 于 2019-3-19 14:44 编辑

......................................
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 6434个

财富等级: 富甲天下

发表于 2019-3-19 14:14:38 | 显示全部楼层
也来学习一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2124个

财富等级: 金玉满堂

发表于 2019-3-19 14:46:45 | 显示全部楼层

谢谢,知道了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9060个

财富等级: 富甲天下

发表于 2019-3-19 21:25:22 | 显示全部楼层
谢谢楼主分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-27 11:28 , Processed in 0.559180 second(s), 66 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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