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/
3D模型文件读写.Net SDK的更多相关文章
- Python的open函数文件读写线程不安全,logging模型文件读写线程安全!
工作中遇到的问题:如何在多线程的程序中同时记录日志? 最初图省事,使用了最原始的open函数来写日志,因为开始使用的写文件模式的是追加('a'),发现并没有线程不安全的现象,各个线程的的日志信息都写入 ...
- Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- ThreeJS 3d模型简介
本文主要是对Threejs中加载模型的支持种类进行简单的知识科普. 3ds (.3ds) 3ds是3ds max通用储存文件格式.使用的范围更宽,可被更多的软件识别使用. amf (.amf) AMF ...
- obj2opengl:转换OBJ 3D模型到iPhone OpenGL ES兼容的数组中
原文如下:obj2opengl: convert obj 3D models to arrays compatible with iPhone OpenGL ES obj2opengl在GitHub中 ...
- QT QML 3D模型查看器
原文链接:http://amin-ahmadi.com/2018/01/28/viewing-3d-models-using-qt/ 本文使用QT Quick中的Scene3D QML类型来查看3D模 ...
- OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11627508.html 前言: 因为接下来的项目需求是要读取多个3D模型,并且移动拼接,那么我 ...
- c# winform用sharpGL(OpenGl)解析读取3D模型obj
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11783026.html 自己写了个简单的类读取解析obj模型,使用导入类,然后new个对象,在 ...
- vue.js+THREE.js演示服务端3D模型流程总结
three.js官网 ·场景搭建 使用npm或者其他获取安装three,就像npm i three,之后在需要演示模型的vue组件内import * as THREE from 'three',此时我 ...
- 3d模型一般怎么导入到到Threejs中使用
这是我之前做的一个demo,导入的3d模型文件是obj格式的,需要使用OBJLoader和MTLLoader, mtl文件用于描述多边形可视面貌的材质如果你可以导出obj.mtl文件的话,那么就可以使 ...
随机推荐
- MODBUS-RTU学习
一 RTU比ASCII传输密度高.参数格式:起始位+8BITS数据位+校验位+停止位. 1.1校验默认为偶校验,建议为无校验,测试要多1个停止位(即停止位为2位) 1.2发送顺序为从左到右LSB-&g ...
- js 事件函数中的参数带换行符或换行标签都不能起作用的解决方法
把问题参数值赋给标签的属性data-value,通过属性值获取参数值.
- StringIO 模块用于在内存缓冲区中读写数据
模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分函数都与对文件的操作方法类似. 例: #coding=gbk import StringIO s=StringIO ...
- python异常类型
python2: BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- Stop ...
- 自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试(转)
关于 Redis ,下面来自百度百科: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...
- 批量修改java文件的包名
需求:我复制进批量的java文件,但是包名需要用现在创建的包名 导入进来时,由于包名不一致会报错 解决办法,点击包名鼠标右键>Refactor>Rename 结果如下ok:
- CentOS 的网络配置
1, ifcfg-ethX, 设置对应网口的IP等信息, 比如第一个网口, 那么vim /etc/sysconfig/network-scripts/ifcfg-eth0,配置例子: DEVICE=& ...
- Apahce映射网络路径
要点有两个: 1. 要使用全路径,不要使用映射的网络驱动器.2. 路径之间用斜杠/,不要用反斜杠\. Alias /weili.mobile "//vmware-host/Shared Fo ...
- VS2013配置WTL90_4140_Final
网上关于WTL的文章,尤其是中文的文章不多,根据收集的资料整理出了VS2013安装WTL的方法. 1.下载.文件很小的,地址:http://sourceforge.net/projects/wtl/f ...
- Android——主流分辨率
VGA:480*640 QVGA:240*320 HVGA:320*480 WVGA:480*800 FWVGA:480*854 IntelHaxm.exe 模拟器加速器