zoukankan      html  css  js  c++  java
  • 3D模型文件读写.Net SDK

    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/

     

     

  • 相关阅读:
    提高关键词排名的28个优化技巧
    Web存储机制—sessionStorage,localStorage使用方法
    19个JavaScript简化编码小技巧
    禁止浏览器滚动条滚动,但滚动条可以显示
    H5项目常见问题及注意事项
    利用cookie实现“只弹出一次窗口”的JS代码
    关于JSON.parse在ie6,ie7下未定义的issue
    你真的会使用XMLHttpRequest吗?
    页面内容不足以铺满屏幕高度时,footer居底显示
    CSS box-shadow 属性
  • 原文地址:https://www.cnblogs.com/anycad/p/read-open-step-iges-3ds-obj-fbx-ifc-dae-stl-3d.html
Copyright © 2011-2022 走看看