首页 > 学院 > 开发设计 > 正文

3D模型文件读写.NetSDK

2019-11-14 16:20:00
字体:
来源:转载
供稿:网友

 

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/

 

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表