【原创】Amodeler实体与ACAD实体之间进行转换

本文档主要是针对于自定义实体(基于Amodeler::Body)与Objectarx中的AcDb3dSolid实体之间的转换。

1.       从Amodeler::Body到AcDb3dSolid的转换

a)         传统的方式:由于Amodeler::Body中,你可以迭代得到它的基本几何元素(面、线、点、表面等),你可以根据这些数据,对应生成AcDb3dSolid应该要包括的基本几何元素,从而实体转换。

b)         中间文本方式:我们都知道Amodeler和ACAD都是基本ACIS几何内核的,而ACIS几何内核都可以用SAT文件来描述,所以,我们可以把Amodeler或ACAD中的几何模型导出成SAT文件,然后再导入,实现两种实体之间的转换;经学习,发现ACAD公司对Amodeler的导出接口重新进行了包装,竟然还可以导出由ACAD公司描述的颜色属性,但遗憾的是ACAD公司对Amodeler的导入接口没有实现。

Example:

                   AModeler::Body body = AModeler::Body::box(AModeler::Point3d(0,0,0),AModeler::Vector3d(100,100,100));

                   ACHAR bodyFileName[] = _T("cd.txt");

                   body.saveToSat(bodyFileName,true);

                  AcDbVoidPtrArray createArray;

                  es = AcDbBody::acisIn(bodyFileName,createArray);

                void* pVoid = createArray.at(0);

                AcDbEntity* pEntity = static_cast<AcDbEntity*>(pVoid);

                if( pEntity->isKindOf(AcDb3dSolid::desc()))

                {

                          AcDb3dSolid* pBox = static_cast<AcDb3dSolid*>(pEntity);

                          if( append(pBox))

                          {

                                   pBox->close();

                          }

                          else

                          {

                                   delete pBox;

                          }

}

2.       从AcDb3dSolid到Amodeler::Body的转换

a)         传统的方式:参考utils\brep\samples\brepsamp中的例子,把AcDb3dSolid中的基本几何元素读出来,然后根据数据生成Amodeler库中对应的基本几何元素,压进创建的Body中。

 

 

如有什么不对,请大家指正。

posted @ 2013-04-14 13:07  编号一百零二  阅读(900)  评论(0编辑  收藏  举报