马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 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的根可以遍历到每个元素。也就可以方便的求出点,线,面的拓扑关系,点线面的交点、交线,点或直线是否在线、面上等等查询。
白色的是面域,红色是取得的三个边界曲线(圆)
上图,得到3DSOLID的每条边,红色。
代码如下:三层循环遍历结构
 - ;面(FACE)-> 路径(LOOP) ->边(EDGE)三层遍历,获得REGION边界曲线
- (defun c:tt ()
- (if (and (setq e (car (entsel))) (setq br (xdbr::constructor e)))
- (progn (setq tr (xdbr::constructor "brepfacetraverser" br))
- (setq xents nil)
- ;;FACE遍历
- (while (not (xdbr::traverser:done tr))
- (setq face (xdbr::getpropertyvalue tr "face"))
- (setq faceloop (xdbr::constructor "facelooptraverser" face))
- (xdrx_object_release face)
- (setq fents nil)
- ;FACE下LOOP遍历
- (while (not (xdbr::traverser:done faceloop));;遍历器没到结束,循环
- (setq loop (xdbr::getpropertyvalue faceloop "loop"))
- (setq loopedge (xdbr::constructor "loopedgetraverser" loop))
- (xdrx_object_release loop)
- (setq ents nil)
- ;LOOP下Edge遍历
- (while (not (xdbr::traverser:done loopedge))
- (setq edge (xdbr::getpropertyvalue loopedge "edge"))
- (setq ents (cons edge ents));;边AcBrEdge保存到全局表中,以后操作。
- (xdbr::traverser:next loopedge);;遍历器指针指向下一条边
- )
- (xdrx_object_release loopedge)
- (setq fents (cons ents fents))
- (xdbr::traverser:next faceloop);;遍历器指向下一条LOOP
- )
- (xdrx_object_release faceloop)
- (setq xents (cons fents xents))
- (xdbr::traverser:next tr);;遍历器指向下一个面FACE
- )
- ;;AcBrEdge -> AcGe Curve
- (setq ges (mapcar '(lambda (x) (xdbr::getpropertyvalue x "curve"))
- (xd::list:flat xents)
- )
- )
- (setq ss (xdge::entity:make ges)) ;;创建数据库曲线
- (xdrx_object_release tr br ges xents);;释放中间的ACBR对象
- (xdrx_entity_setproperty ss "color" 1);;设置颜色红色
- (xdrx_entity_redraw ss 1);;夹点亮显选择集
- )
- )
- (princ)
- )
|