找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 670|回复: 3

[曲线] (XD::Curve:FirstLayer)获取封闭曲线内嵌套第一层的所有封闭曲线

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-2 21:26:59 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Curve:FirstLayer
调用格式: (XD::Curve:FirstLayer e lyrmode)
参数说明: e ------------ 封闭的曲线(DB实体、几何实体)(CIRCLE,ELLIPSE,*POLYLINE,SPLINE)
lyrmode-----内部选取是否随e图层,
T,随e, NIL-任意层
返回值: nil or 实体表
函数简介: 获取封闭曲线内嵌套第一层的所有封闭曲线
函数来源: 原创
函数作者: newer
适用版本: XDRX API 
最后更新时间: 2016-07-02
备注: -
演示图片: -

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

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

×
本帖最后由 newer 于 2016-7-2 23:36 编辑

  1. (defun XD::Curve:FirstLayer (e lyrmode / el entl entl1 entl2 lyerfilter
  2.                                lyrfilter ss tf tol x y
  3.                             )
  4.   (defun _fuzzclose (el)
  5.     (xdrx_document_setprec 1 1)
  6.     (mapcar
  7.       '(lambda (x)
  8.          (if (wcmatch (car (xdrx_object_classname x)) "*POLYLINE")
  9.            (xdrx_polyline_fuzzclose x)
  10.          )
  11.        )
  12.       el
  13.     )
  14.   )
  15.   (defun _getss (e lyr / pts ss lyrfilter)
  16.     (if (or
  17.           (xdge::iskindof e "kCurve3d")
  18.           (xdge::iskindof e "kCurve2d")
  19.         )
  20.       (setq pts (xdge::getpropertyvalue e "getsamplepoints" tol))
  21.       (progn
  22.         (setq pts (xdrx_getsamplept e tol))
  23.         (if lyr
  24.           (setq lyrfilter (list '(0 . "*polyline,circle,ellipse,spline")
  25.                                 (cons 8 (car (xdrx_getpropertyvalue e
  26.                                                                     "layer"
  27.                                              )
  28.                                         )
  29.                                 )
  30.                           )
  31.           )
  32.           (setq lyrfilter (list '(0 . "*polyline,circle,ellipse,spline")))
  33.         )
  34.       )
  35.     )
  36.     (if (and
  37.           pts
  38.           (setq ss (ssget "wp" pts lyrfilter))
  39.         )
  40.       (progn
  41.         (setq ret (xdrx_pickset->ents ss))
  42.         (_fuzzclose ret)
  43.         (vl-remove nil (mapcar
  44.                          '(lambda (x)
  45.                             (if (xdrx_curve_isclosed x)
  46.                               x
  47.                               nil
  48.                             )
  49.                           )
  50.                          ret
  51.                        )
  52.         )
  53.       )
  54.     )
  55.   )
  56.   (setq tol (car (xdrx_document_getprec)))
  57.   (xdrx_sysvar_push '("osmode" 0))
  58.   (if (setq entl (_getss e lyrmode))
  59.     (progn
  60.       (setq entl (XD::Entity:ListByProperty entl "area")
  61.             entl (mapcar
  62.                    'cadr
  63.                    (vl-sort entl '(lambda (x y)
  64.                                     (> (car x) (car y))
  65.                                   )
  66.                    )
  67.                  )
  68.       )
  69.       (setq entl1 nil)
  70.       (while (setq x (car entl))
  71.         (if (setq entl2 (_getss x lyrmode))
  72.           (mapcar
  73.             '(lambda (y)
  74.                (setq entl (vl-remove y entl))
  75.              )
  76.             entl2
  77.           )
  78.         )
  79.         (setq entl1 (cons x entl1))
  80.         (setq entl (cdr entl))
  81.       )
  82.     )
  83.   )
  84.   (xdrx_sysvar_pop)
  85.   entl1
  86. )


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

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-7-2 23:29:00 | 显示全部楼层
没有测试,粗看两个问题

1 模拟点选择,实体需在视口可见范围内
2 WP 选择受 捕捉 影响

点评

去看下套内面积那个应用,判断是否在屏幕内,在这个函数外面做。否则程序会不可控。  详情 回复 发表于 2016-7-2 23:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-7-2 23:33:03 | 显示全部楼层
csharp 发表于 2016-7-2 23:29
没有测试,粗看两个问题

1 模拟点选择,实体需在视口可见范围内

去看下套内面积那个应用,判断是否在屏幕内,在这个函数外面做。否则程序会不可控。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 00:55 , Processed in 0.358095 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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