天天看點

3D模型檔案讀寫.Net SDK

AnyCAD .Net/C++ SDK支援多種3D/2D檔案格式,比如BREP、STEP、IGES、STL、DXF、3DS、OBJ、FBX、SKP、IFC、DAE……等,根據使用場景提供不同的API。

AnyCAD .Net/C++ SDK支援多種3D/2D檔案格式,比如BREP、STEP、IGES、STL、DXF、3DS、OBJ、FBX、SKP、IFC、DAE……等,根據使用場景提供不同的API。

3D模型檔案讀寫.Net SDK

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/​​