找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 794|回复: 3

[每日一码] 填充实体边界(LOOP)的拓扑关系的确定(二)

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2017-3-7 20:11:59 | 显示全部楼层 |阅读模式

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

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

×


填充环拓扑(内求外).gif


下面代码求指定点附近的LOOP的父亲(PARENTLOOP)和当前的祖宗(ROOTLOOP)

上面演示的图片,上下是一个单独的填充,有两个外部环(ROOT),我们的代码
1、拾取点
2、该点附近的LOOP品红色显示,父亲黄色显示,直系的祖宗(ROOT)红色显示(该图片祖宗有两个分支)

  1. (defun c:tt ()
  2.   (if (and (setq e (xdrx_entsel "\n拾取填充<退出>:" '((0 . "HATCH"))))
  3.            (xdrx_pickset_redraw e)
  4.            (setq p (getpoint "\n在填充环附近点一点<退出>:"))
  5.       )
  6.     (progn
  7.       (xdrx_begin)
  8.       (setq mp (xdrx_hatch->mpolygon e)
  9.             mp (entlast)
  10.       )
  11.       (if (and (setq closestLoop
  12.                       (xdrx_getpropertyvalue mp "ClosestLoopTo" p)
  13.                )
  14.                (setq parentloop
  15.                       (xdrx_getpropertyvalue
  16.                         mp
  17.                         "parentloop"
  18.                         closestloop
  19.                       )
  20.                )
  21.                (setq roots
  22.                       (xdrx_getpropertyvalue
  23.                         mp
  24.                         "rootloops"
  25.                         closestloop
  26.                       )
  27.                )
  28.           )
  29.         (progn
  30.           (setq        loopdata (xdrx_getpropertyvalue
  31.                            mp
  32.                            "MPolygonLoopAt"
  33.                            closestloop
  34.                          )
  35.           )
  36.           (xdrx_polyline_make loopdata)
  37.           (xdrx_setpropertyvalue
  38.             (entlast)
  39.             "constantwidth"
  40.             20.0
  41.             "color"
  42.             6
  43.           )
  44.           (setq        parentdata
  45.                  (xdrx_getpropertyvalue
  46.                    mp
  47.                    "MPolygonLoopAt"
  48.                    parentloop
  49.                  )
  50.           )
  51.           (xdrx_polyline_make parentdata)
  52.           (xdrx_setpropertyvalue
  53.             (entlast)
  54.             "constantwidth"
  55.             20.0
  56.             "color"
  57.             2
  58.           )
  59.           (if (> (length roots) 1)
  60.             (progn
  61.               (vl-some
  62.                 '(lambda (x)
  63.                    (setq
  64.                      child (xdrx_getpropertyvalue mp "childloops" x)
  65.                    )
  66.                    (if (member closestloop child)
  67.                      (setq rootloop x)
  68.                    )
  69.                  )
  70.                 roots
  71.               )
  72.             )
  73.             (setq rootloop (car roots))
  74.           )
  75.           (setq        rootdata
  76.                  (xdrx_getpropertyvalue
  77.                    mp
  78.                    "MPolygonLoopAt"
  79.                    rootloop
  80.                  )
  81.           )
  82.           (xdrx_polyline_make rootdata)
  83.           (xdrx_setpropertyvalue
  84.             (entlast)
  85.             "constantwidth"
  86.             20.0
  87.             "color"
  88.             1
  89.           )
  90.         )
  91.       )
  92.       (xdrx_entity_delete mp)
  93.       (xdrx_pickset_redraw e t)
  94.       (xdrx_end)
  95.     )
  96.   )
  97.   (princ)
  98. )


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

已领礼包: 5348个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:31 , Processed in 0.202926 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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