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/

3D模型文件读写.Net SDK的更多相关文章

  1. Python的open函数文件读写线程不安全,logging模型文件读写线程安全!

    工作中遇到的问题:如何在多线程的程序中同时记录日志? 最初图省事,使用了最原始的open函数来写日志,因为开始使用的写文件模式的是追加('a'),发现并没有线程不安全的现象,各个线程的的日志信息都写入 ...

  2. Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  3. ThreeJS 3d模型简介

    本文主要是对Threejs中加载模型的支持种类进行简单的知识科普. 3ds (.3ds) 3ds是3ds max通用储存文件格式.使用的范围更宽,可被更多的软件识别使用. amf (.amf) AMF ...

  4. obj2opengl:转换OBJ 3D模型到iPhone OpenGL ES兼容的数组中

    原文如下:obj2opengl: convert obj 3D models to arrays compatible with iPhone OpenGL ES obj2opengl在GitHub中 ...

  5. QT QML 3D模型查看器

    原文链接:http://amin-ahmadi.com/2018/01/28/viewing-3d-models-using-qt/ 本文使用QT Quick中的Scene3D QML类型来查看3D模 ...

  6. OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11627508.html 前言: 因为接下来的项目需求是要读取多个3D模型,并且移动拼接,那么我 ...

  7. c# winform用sharpGL(OpenGl)解析读取3D模型obj

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11783026.html 自己写了个简单的类读取解析obj模型,使用导入类,然后new个对象,在 ...

  8. vue.js+THREE.js演示服务端3D模型流程总结

    three.js官网 ·场景搭建 使用npm或者其他获取安装three,就像npm i three,之后在需要演示模型的vue组件内import * as THREE from 'three',此时我 ...

  9. 3d模型一般怎么导入到到Threejs中使用

    这是我之前做的一个demo,导入的3d模型文件是obj格式的,需要使用OBJLoader和MTLLoader, mtl文件用于描述多边形可视面貌的材质如果你可以导出obj.mtl文件的话,那么就可以使 ...

随机推荐

  1. 何时要打开stm32的AFIO时钟

    STM32的管脚配置一般有2个:Default和rinmap,如果使用default就不需要打开AFIO,否则使用后者就需要打开3个时钟:GPIO时钟.外设功能时钟和AFIO时钟. 一般在涉及外中断配 ...

  2. Linux设置服务自启动(转载)

    From:http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统 ...

  3. sublime 安装常用插件

    1.先要安装Package Control ,ctr+` 打开控制台,复制安装脚本,脚本在https://packagecontrol.io/installation#st3获取. 2.安装插件,ct ...

  4. 获取当前访问的url

    1.获取完全url,包含参数: request.getRequestURL(); 2.获取部分: request,getRequestURI 不包含参数,协议名称 获取访问的参数: request.g ...

  5. [Java] 通过文件流拷贝文件

    package test.stream; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  6. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  7. 如何判断VS.NET设计时?

    方法一: if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv") //...Then ...

  8. POJ 2182【树状数组】

    题意: 每头牛有编号,他们乱序排成一排,每头牛只知道前边比自己序号小的有几位. 思路: 递推,最后一只牛的编号是确定的,然后不断进行区间更新,直到找到某个空位前方恰好有n个空位. 这题跟某道排队的题思 ...

  9. (转)C# MD5

    本文原地址:http://blog.csdn.net/zhoufoxcn/article/details/1497099 作者:周公 代码如下: using System; using System. ...

  10. js对象1--杂志

    1.对象数组 var arr = [ ]       //直接量创建 var arr = array()   //通过函数创建 2. 变量与对象 var a = 12;    //变量,不属于谁(默认 ...