AnyCAD .Net/C++ SDK支持多种3D/2D文件格式,比如BREP、STEP、IGES、STL、DXF、3DS、OBJ、FBX、SKP、IFC、DAE……等,根据使用场景提供不同的API。
1. 几何数据I/O支持BREP、IGES、STEP、STL格式,其中BREP支持读取和保存字符串流。
1.1. 读取文件支持读取BREP、IGES、STEP和STL,结果保存在TopoShape中。
STEP文件读取示例:
TopoShape shape = GlobalInstance.BrepTools.LoadFile(“d:\\anycad.stp”);
注意:
l 如果需要查找TopoShape包含哪些体、面、边、顶点等信息,使GlobalInstance.TopoExplor的方法。
l 使用这种方式读取STL比较慢,如果不对模型进行几何操作,不建议使用。
1.2. 保存文件支持保存为BREP、IGES、STEP和STL。
TopoShapeGroup group = new TopoShapeGroup();
group.Add(shape);
GlobalInstance.BrepTools.SaveFile(group, "d:\\anycad.brep");
2. 文件流仅在内存中进行操作,不占用I/O。 支持BREP格式。
// Save to buffer
TopoShape sphere = GlobalInstance.BrepTools.MakeSphere(Vector3.ZERO, 100);
byte[] buffer = GlobalInstance.BrepTools.SaveBuffer(sphere);
// Load from buffer
TopoShape newSphere = GlobalInstance.BrepTools.LoadBuffer(buffer);
3. 读取STEP/IGES的颜色如果要读取STEP和IGES文件中的颜色信息,不能使用上面的API无法。需要结合使用TopoShapeReaderContext和AnyCAD.Exchange模块中的IgesReader和StePReader。
代码参考StpViewer项目: https://github.com/anycad/StpViewer
首先,从TopoShapeReaderContext继承子类,如CADBrowser,重载其虚函数用于接收读取到的几何对象和颜色。
public override void OnSetFaceColor(ColorValue clr)用于保存当前物体的颜色。
然后,调用把TopoShapeReaderContext对象做为Read的参数传入。
CADBrower browser = new CADBrower(this.treeViewStp, this.renderView);
AnyCAD.Exchange.IgesReader reader = new AnyCAD.Exchange.IgesReader();
reader.Read(dlg.FileName, browser);
注意:使用同样的方法也可以读取DXF文件
4. 读取STL/3DS/OBJ等这类模型只能用于展示,不能进行TopoShape层次的几何操作;可以用MatrixBuilder对SceneNode进行矩阵变换。
代码示例:
OpenFileDialog openDlg = new OpenFileDialog();
openDlg.Filter = "STL (*.stl)|*.stl|3ds (*.3ds)|*.3ds|obj (*.obj)|*.obj";
if (openDlg.ShowDialog() == DialogResult.OK)
{
SceneReader reader = new SceneReader();
GroupSceneNode node = reader.LoadFile(openDlg.FileName);
if (node != null)
{
node.SetName(openDlg.SafeFileName);
renderView.ShowSceneNode(node);
renderView.RequestDraw();
}
}
可以看到SceneReader.LoadFile返回的是GroupSceneNode,而GlobalInstance.BrepTools.LoadFile返回的是TopoShape。
5. 参考资料l StpViewer: https://github.com/anycad/StpViewer
l dxfViewer:https://github.com/anycad/dxfViewer
l SDK下载:http://www.anycad.net/sdk/