找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1598|回复: 5

[教学] 【API-拓扑(二)】关于填充实体处理的完全解决方案函数集

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-5-15 18:06:22 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 newer 于 2018-5-15 19:18 编辑

同ACAD的HATCH实体不同,经过API处理的HATCH,边界LOOP具有完备的“拓扑”关系。


一、合并(MERGE)


(xdrx_hatch_merge <ss ... ent>)

hatch-merge.png

二、拆离(DETACH)

  1、指定点位置,拆出一个带独立拓扑关系的HATCH
     (xdrx_hatch_detach ent pnt)
     (xdrx_getpropertyvalue ent "detach" pnt)

hatch-detach1.png

  2、拆离所有带独立拓扑关系的HATCH
     (xdrx_hatch_detach ent t)

     (xdrx_getpropertyvalue ent "detach" t)

hatch-detach2.png

三、提取一个带独立拓扑关系的HATCH

      (xdrx_getpropertyvalue ent "extractloopat" pnt)

提取填充LOOP.gif

  1. (defun c:tt ()
  2.   (if (and (setq e (car (xdrx_entsel "\n拾取填充<退出>:" '((0 . "hatch")))))
  3.            (setq pnt (getpoint "\n点取要提取的LOOP<退出>:"))
  4.            (setq ss (xdrx_getpropertyvalue e "extractloopat" pnt))
  5.            (xdrx_entity_setcolor ss (xdrx_math_rand 0 40))
  6.       )
  7.     (xd::drag:simplemove ss "\n插入点:" 5 t)
  8.   )
  9.   (princ)
  10. )



四、填充-》REGION (带拓扑关系)

      (xdrx_hatch->region <ss ...ent ...>)


hatch-region.png

五、填充-》MPOLYGON(带拓扑关系)

      (xdrx_hatch->mpolygon <ss ...ent ...>)


hatch-mpolygon.png

六、填充-》边界LOOP几何实体表

      (xdrx_getpropertyvalue ent "getloops")


下面代码演示获取边界几何实体表,然后生成多段线并移动。

hatch-boundary.gif
  1. (defun c:tt ()
  2.   (if (and (setq e (car (xdrx_entsel "\n拾取填充<退出>:" '((0 . "hatch")))))
  3.            (setq ents (xdrx_getpropertyvalue e "getloops"))
  4.       )
  5.     (progn (setq ss (xdge::entity:make ents))
  6.            (xdrx_entity_setcolor ss 7)
  7.            (xd::drag:simplemove ss "\n插入点:" 5 t)
  8.            (xdge::free ents)
  9.     )
  10.   )
  11.   (princ)
  12. )



七、填充-》Root Loops (获取拓扑关系的 根LOOP)

      (xdrx_getpropertyvalue ent "rootloops" [t])


给T参数,直接生成GE几何实体,否则返回LOOP索引号(整数)

下面代码演示获取ROOT边界几何实体表,然后生成多段线并移动。


hatch-rootloop.gif

  1. (defun c:tt ()
  2.   (if (and (setq e (car (xdrx_entsel "\n拾取填充<退出>:" '((0 . "hatch")))))
  3.            (setq ents (xdrx_getpropertyvalue e "rootloops" t))
  4.       )
  5.     (progn (setq ss (xdge::entity:make ents))
  6.            (xdrx_entity_setcolor ss 7)
  7.            (xd::drag:simplemove ss "\n插入点:" 5 t)
  8.            (xdge::free ents)
  9.     )
  10.   )
  11.   (princ)
  12. )



八、填充-》Child Loops (获取拓扑关系的 某个根LOOP下的所有子LOOP)

      (xdrx_getpropertyvalue ent "childloops" <ent or pnt or inx整数索引 or t>)


给T参数,获得所有的子LOOP。
返回LOOP 索引号表

   下面代码演示获取ROOT下所有子LOOP边界几何实体表,然后生成多段线并移动。


hatch-childroots.gif

  1. (defun c:tt ()
  2.   (if (and (setq e (car (xdrx_entsel "\n拾取填充<退出>:" '((0 . "hatch")))))
  3.            (setq pnt (getpoint "\n某个ROOT下拾取点<退出>:"))
  4.            (setq ents (xdrx_getpropertyvalue e "childloops" pnt))
  5.       )
  6.     (progn (setq ss nil)
  7.            (mapcar '(lambda (x)
  8.                       (setq e1 (xdrx_getpropertyvalue e "getloopat" x))
  9.                       (setq e2 (xdge::entity:make e1))
  10.                       (xdge::free e1)
  11.                       (setq ss (cons e2 ss))
  12.                     )
  13.                    ents
  14.            )
  15.            (xdrx_entity_setcolor ss 7)
  16.            (xd::drag:simplemove ss "\n插入点:" 5 t)
  17.     )
  18.   )
  19.   (princ)
  20. )



九、填充-》Parent Loops (获取拓扑关系的 某子LOOP的父LOOP)

      (xdrx_getpropertyvalue ent "parent" <ent or pnt or inx整数索引>)


   下面代码演示获取子ROOT的父LOOP边界几何实体表,然后生成多段线并移动。


hatch-parent.gif

  1. (defun c:tt ()
  2.   (if (and (setq e (car (xdrx_entsel "\n拾取填充<退出>:" '((0 . "hatch")))))
  3.            (setq pnt (getpoint "\n某子ROOT下拾取点<退出>:"))
  4.            (setq inx (xdrx_getpropertyvalue e "parentloop" pnt))
  5.       )
  6.     (progn (setq e1 (xdrx_getpropertyvalue e "getloopat" inx))
  7.            (setq e2 (xdge::entity:make e1))
  8.            (xdge::free e1)
  9.            (xdrx_entity_setcolor e2 7)
  10.            (xd::drag:simplemove e2 "\n插入点:" 5 t)
  11.     )
  12.   )
  13.   (princ)
  14. )



十、填充-》获取指定索引的边界LOOP几何实体

          (xdrx_getpropertyvalue ent  "getloopat" <inx>)

十一、填充-》给点,获取点最近的LOOP索引

          (xdrx_getpropertyvalue ent  "LoopIndexAt" <pnt>)

          (xdrx_getpropertyvalue ent  "ClosestLoopTo" <pnt>)


十二、填充-》获取LOOP数量

          (xdrx_getpropertyvalue ent "NumLoops")


十三、填充-》获取指定实体、点附近或指定索引的拓扑关系的ROOT LOOP

          (xdrx_getpropertyvalue ent "RootLoop" <ent or pnt or inx> [t])

给T参数返回几何实体,否则返回索引号

十四、填充实体边界拓扑关系查询

        (xdrx_get_topology ent)

返回边界LOOP的拓扑结构表,如:

命令: (xdrx_get_topology (car (entsel)))
选择对象: ((0 (1) (2 (3))) (4 (5 (6))) (7 (8)) (9 (10) (11 (12))))
十五、填充面积(可以计算无填充面积属性面积为0的填充的面积)

      (xdrx_get_area ent)
        (xdrx_getpropertyvalue ent "area")

通用实体属性关于HATCH的查询函数 xdrx_getpropertyvalue 命令: (xdrx_getpropertyvalue (car (entsel)))
选择对象:
Class AcDbHatch:

    ├─Area
    ├─AssocObjIds
    ├─Detach
    ├─DetachLoopAt (Point)
    ├─ExtractLoopAt (Point)
    ├─Length
    ├─ShadeTintValue
    ├─GradientShift
    ├─GradientAngle
    ├─GradientName
    ├─GradientType
    ├─HatchLines
    ├─HatchObjectType
    ├─IsGradient
    ├─IsHatch
    ├─IsSolidFill
    ├─Elevation
    ├─HatchStyle
    ├─Normal
    ├─NumPatternDefinitions
    ├─PatternAngle
    ├─PatternScale
    ├─PatternSpace
    ├─PatternName
    ├─PatternDouble
    ├─PatternType
    ├─NumHatchLines
    ├─LoopIndexAt
    ├─loopTypeAt    ├─LineGenerationEnabled(2007+)
    ├─OriginPoint(2007+)


Loops Class:
    ├─ClosestLoopTo
    ├─GetLoops
    ├─GetLoopAt
    ├─NumLoops
    ├─RootLoop
    ├─RootLoops
    ├─ParentLoop
    ├─ChildLoops

通用实体属性关于HATCH的编辑函数 xdrx_setpropertyvalue

命令: (xdrx_setpropertyvalue (car (entsel)))

选择对象:
Class AcDbHatch:

  ├─ShadeTintValue(Real)
  ├─GradientShift(Real)
  ├─GradientAngle(Real)
  ├─GradientName(STR)
  ├─GradientType
  ├─HatchObjectType(0 or 1)
  ├─Gradient(0 or 1 and STR)
  ├─Elevation(Real or Int)
  ├─HatchStyle(0 or 1 or 2)
  ├─Normal(Vector)
  ├─PatternAngle(Real)
  ├─PatternScale(Real)
  ├─PatternSpace(Real)
  ├─PatternName(0 or 1 or 2 and STR)
  ├─PatternDouble(T or Nil)
  ├─PatternType(0 or 1 or 2)
  ├─appendLoop (looptype (ent1,ent2...pickset))
  ├─removeLoopAt (loopinx)
  ├─LineGenerationEnabled(T or Nil)(2007+)
  ├─OriginPoint(Point)(2007+)




评分

参与人数 1D豆 +5 收起 理由
sh_h + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 1304个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 568个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 776个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 333个

财富等级: 日进斗金

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-20 13:25 , Processed in 0.415529 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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