找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2609|回复: 4

[教学] 【AcBr库应用(一)】获取REGION,BOX的边界曲线

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-5-1 01:13:48 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 newer 于 2018-5-1 01:33 编辑



XDRX API从 2018.0508开始提供ObjectARX AcBr API 库的LISP封装。


什么是“ACBR API” ?


AcBr API 是ARX处理拓扑对象的应用程序开发接口,用来处理AcDbRegion, AcDb3DSolid,AcDbBody等三维几何实体的拓扑关系。
除去ARX,其他的开发接口VLISP等没有提供封装的接口。


通过这个API,可以很方便的查询几何模型实体的“体、面、环、边、点”的数据和拓扑关系。
AcBrEntity 是这个接口的基类,本身不能实例化,它下面派生了 AcBrBrep,AcBrFace,AcBrLoop,AcBrEdge,AcBrVertex及AcBrShell等子类。并通过拓扑遍历器AcBrTraverser类,从 体、面、环、边、点的顺序来遍历整个模型实体。


下面我们介绍通过ACBR API来遍历一个面域实体,来得到每个边界曲线。


如图,是一个用SUBTRACT,UNION组合的面域实体,从ACBR的角度出发,它由“两个FACE”,“三个LOOP”,和“三个EDGE”组成。
ACBR的实体模型的拓扑层次结构是: 体(BODY) --->面(FACE)--->路径(LOOP)--->边(Edge)--->顶点(Vertex)


比如一个正方体BOX,由6个面,每个面由一个LOOP,每个LOOP由四条边,每个边由两个顶点组成。
通过遍历器,从BOX的根可以遍历到每个元素。也就可以方便的求出点,线,面的拓扑关系,点线面的交点、交线,点或直线是否在线、面上等等查询。


搜狗截图20180501011407.gif

白色的是面域,红色是取得的三个边界曲线(圆)

搜狗截图20180501013450.gif
上图,得到3DSOLID的每条边,红色。

代码如下:三层循环遍历结构


  1. ;面(FACE)-> 路径(LOOP) ->边(EDGE)三层遍历,获得REGION边界曲线

  2. (defun c:tt ()
  3.   (if (and (setq e (car (entsel))) (setq br (xdbr::constructor e)))
  4.     (progn (setq tr (xdbr::constructor "brepfacetraverser" br))
  5.            (setq xents nil)
  6.            ;;FACE遍历
  7.            (while (not (xdbr::traverser:done tr))
  8.              (setq face (xdbr::getpropertyvalue tr "face"))
  9.              (setq faceloop (xdbr::constructor "facelooptraverser" face))
  10.              (xdrx_object_release face)
  11.              (setq fents nil)
  12.              ;FACE下LOOP遍历
  13.              (while (not (xdbr::traverser:done faceloop));;遍历器没到结束,循环
  14.                (setq loop (xdbr::getpropertyvalue faceloop "loop"))
  15.                (setq loopedge (xdbr::constructor "loopedgetraverser" loop))
  16.                (xdrx_object_release loop)
  17.                (setq ents nil)
  18.                ;LOOP下Edge遍历
  19.                (while (not (xdbr::traverser:done loopedge))
  20.                  (setq edge (xdbr::getpropertyvalue loopedge "edge"))
  21.                  (setq ents (cons edge ents));;边AcBrEdge保存到全局表中,以后操作。
  22.                  (xdbr::traverser:next loopedge);;遍历器指针指向下一条边
  23.                )
  24.                (xdrx_object_release loopedge)
  25.                (setq fents (cons ents fents))
  26.                (xdbr::traverser:next faceloop);;遍历器指向下一条LOOP
  27.              )
  28.              (xdrx_object_release faceloop)
  29.              (setq xents (cons fents xents))
  30.              (xdbr::traverser:next tr);;遍历器指向下一个面FACE
  31.            )
  32.            ;;AcBrEdge -> AcGe Curve
  33.            (setq ges (mapcar '(lambda (x) (xdbr::getpropertyvalue x "curve"))
  34.                              (xd::list:flat xents)
  35.                      )
  36.            )
  37.            (setq ss (xdge::entity:make ges)) ;;创建数据库曲线
  38.            (xdrx_object_release tr br ges xents);;释放中间的ACBR对象
  39.            (xdrx_entity_setproperty ss "color" 1);;设置颜色红色
  40.            (xdrx_entity_redraw ss 1);;夹点亮显选择集
  41.     )
  42.   )
  43.   (princ)
  44. )



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

已领礼包: 333个

财富等级: 日进斗金

发表于 2018-5-1 22:03:58 | 显示全部楼层
arx该怎么学习呀,现有的教程都太老了,流程、vs等等好多都变了的感觉
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8613个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2020-4-4 20:15:57 | 显示全部楼层
当3D有圆角,会出现错误,跑偏了。
可不可以不 创建数据库曲线  直接读取其数据  曲线类型 端点圆心等 或线的颜色?
11.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 18:12 , Processed in 0.422324 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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