找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3659|回复: 18

[曲线] (XD::Curve:SelfIntersBreak)曲线自交点断开

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-27 18:17:24 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Curve:SelfIntersBreak
调用格式: (XD::Curve:SelfIntersBreak el)
参数说明: el -- 实体或实体表或选择集
返回值: T
函数简介: 对自相交 Pline Spline 在自相交点处断开
函数来源: 原创
函数作者: st788796
适用版本: XDRX API 
最后更新时间: 2014-09-27
备注: 第二版
演示图片:

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

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

×
本帖最后由 st788796 于 2014-9-28 07:24 编辑

  1. (defun XD::Curve:SelfIntersBreak (e / el gcc gel mods tf)
  2.   (cond
  3.     ((eq (type e) 'ENAME)
  4.      (setq el (list e))
  5.     )
  6.     ((eq (type e) 'PICKSET)
  7.      (setq el (xdrx_pickset->ents e))
  8.     )
  9.     ((eq (type e) 'LIST)
  10.      (setq el e)
  11.     )
  12.     (t (setq el nil))
  13.   )
  14.   (if el
  15.     (progn
  16.       (setq mods (mapcar
  17.                    '(lambda (x / typ)
  18.                       (setq typ (xdrx_getpropertyvalue x "IsA"))
  19.                       (cond
  20.                         ((= typ "AcDbSpline")
  21.                          (list typ '(0.0 0.0 1.0))
  22.                         )
  23.                         ((= typ "AcDbPolyline")
  24.                          (list typ (xdrx_getpropertyvalue x "normal"))
  25.                         )
  26.                         (t nil)
  27.                       )
  28.                     )
  29.                    el
  30.                  )
  31.       )
  32.       (if (setq el (vl-remove nil el))
  33.         (progn
  34.           (setq        gcc (xdge::constructor "kCurveCurveInt3d")
  35.                 gel (xdge::constructor el)
  36.           )
  37.           (mapcar
  38.             '(lambda (x ent mod / i n lst pams)
  39.                (if
  40.                  (and (xdge::setpropertyvalue gcc "set" x x (cadr mod))
  41.                       (> (setq n (xdge::getpropertyvalue
  42.                                    gcc
  43.                                    "numIntPoints"
  44.                                  )
  45.                          )
  46.                          0
  47.                       )
  48.                  )
  49.                   (progn
  50.                     (setq i -1)
  51.                     (repeat n
  52.                       (setq lst        (cons (xdge::getpropertyvalue
  53.                                         gcc
  54.                                         "getIntParams"
  55.                                         (setq i (1+ i))
  56.                                       )
  57.                                       lst
  58.                                 )
  59.                       )
  60.                     )
  61.                     (if        (= (car mod) "AcDbSpline")
  62.                       (setq pams (vl-sort (apply 'append lst) '<))
  63.                       (setq pams
  64.                              (vl-sort
  65.                                (apply
  66.                                  'append
  67.                                  (mapcar
  68.                                    '(lambda (a)
  69.                                       (list (apply '+
  70.                                                    (xdge::getpropertyvalue
  71.                                                      x
  72.                                                      "globalToLocalParam"
  73.                                                      (car a)
  74.                                                    )
  75.                                             )
  76.                                             (apply '+
  77.                                                    (xdge::getpropertyvalue
  78.                                                      x
  79.                                                      "globalToLocalParam"
  80.                                                      (cadr a)
  81.                                                    )
  82.                                             )
  83.                                       )
  84.                                     )
  85.                                    lst
  86.                                  )
  87.                                )
  88.                                '<
  89.                              )
  90.                       )
  91.                     )
  92.                     (apply 'xdrx_curve_getsplitcurves (cons ent pams))
  93.                   )
  94.                )
  95.              )
  96.             gel
  97.             el
  98.             mods
  99.           )
  100.           (xdge::free)
  101.         )
  102.       )
  103.     )
  104.   )
  105.   t
  106. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-9-27 18:20:20 | 显示全部楼层
本帖最后由 st788796 于 2014-9-28 07:15 编辑

测试
  1. (defun c:tt (/ ss)
  2.   (if (setq ss (ssget '((0 . "lwpolyline,spline"))))
  3.     (XD::Curve:SelfIntersBreak ss)
  4.   )
  5.   (princ)
  6. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2014-9-28 07:58:18 | 显示全部楼层
赞!要是有一个非XD-API版本更好。

点评

AutoCAD 自从引入 Lisp 概念以来有过多少变化?期间 AutoCAD 经历了多少升级! 开间 AutoLisp 地位如何,在有新的免费 API 时使用既可以省出时间专注于专业,也可以秀一秀未尝不是好事,反正也不是专业编程,靠这  详情 回复 发表于 2014-9-28 14:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-9-28 08:54:22 | 显示全部楼层
dwg001 发表于 2014-9-28 07:58
赞!要是有一个非XD-API版本更好。

Ge库 和 DB 的 GetSplitCurves 具有先天优势,指望 Autodesk 提供标准方法不知要码多少代码,费多少脑细胞
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-28 14:10:49 | 显示全部楼层
dwg001 发表于 2014-9-28 07:58
赞!要是有一个非XD-API版本更好。

AutoCAD 自从引入 Lisp 概念以来有过多少变化?期间 AutoCAD 经历了多少升级!

可见 AutoLisp 地位如何,在有新的免费 API 时使用既可以省出时间专注于专业,也可以秀一秀未尝不是好事,反正也不是专业编程,靠这个挣钱,方便省时为首选
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-23 18:17:38 | 显示全部楼层
BaiduShurufa_2014-11-23_18-15-28.png

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-11-23 18:37:02 | 显示全部楼层
newer 发表于 2014-11-23 18:17
封闭的SPLINE,起点出也给断了,是不是应该排除?

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-23 22:57:17 | 显示全部楼层
st788796 发表于 2014-11-23 18:37
这个是 Ge 问题,没办法,只能 Join 一次,Db 的 getSplitCurves 好像就没问题

最后不是通过:

(apply 'xdrx_curve_getsplitcurves (cons ent pams))


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-11-23 23:38:46 | 显示全部楼层
newer 发表于 2014-11-23 22:57
最后不是通过:

(apply 'xdrx_curve_getsplitcurves (cons ent pams))

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-23 23:42:49 | 显示全部楼层
st788796 发表于 2014-11-23 23:38
不对吧,我这测试没有断开起点!

刚用一楼的代码测试下,确实起点断开了,2015版本下。你的代码和一楼的一样吗?还是有修改?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-11-23 23:45:10 | 显示全部楼层
newer 发表于 2014-11-23 23:42
刚用一楼的代码测试下,确实起点断开了,2015版本下。你的代码和一楼的一样吗?还是有修改?

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-11-23 23:54:01 | 显示全部楼层
newer 发表于 2014-11-23 23:42
刚用一楼的代码测试下,确实起点断开了,2015版本下。你的代码和一楼的一样吗?还是有修改?

还是没有断开,不过 1109 号的 xdge::constructor 在对实体表构造时如果只有一个实体的表,构造出来不是 Ge 实体表,需要 List 一次
20141123235138.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 50个

财富等级: 招财进宝

发表于 2017-12-30 16:11:13 | 显示全部楼层
这怎么运行的?两个都保存为.lsp,拖进CAD,输入tt?那前面那个是什么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2018-2-5 10:11:46 | 显示全部楼层
这怎么运行的?两个都保存为.lsp,拖进CAD,输入tt?那前面那个是什么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 08:17 , Processed in 0.244622 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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