本文档主要是针对于自定义实体(基于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中。
如有什么不对,请大家指正。