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文件的话,那么就可以使 ...
随机推荐
- queue 与 vector
优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序 每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储. 例如:我们常用的操作就 ...
- JAVA 流式布局管理器
//流式布局管理器 import java.awt.*; import javax.swing.*; public class Jiemian2 extends JFrame{ //定义组件 JBut ...
- df和du显示的磁盘空间使用情况不一致的原因及处理
在Linux下查看磁盘空间使用情况,最常使用的就是du和df了.然而两者还是有很大区别的,有时候其输出结果甚至非常悬殊. 1. 如何记忆这两个命令 du-Disk Usage df-Disk Free ...
- 处理日期时间NSDate
获取当前日期时间的代码如下: NSDate *dateToDay = [NSDate date]; NSDateFormatter *df = [[NSDateFormatter alloc] ini ...
- 配置nginx下别名alias支持PHP fastcgi解析
1)参看如下连篇文章:Nginx设置alias实现虚拟目录 alias与root的用法区别http://down.chinaz.com/server/201111/1382_1.htmNginx下al ...
- 查看linux的版本
1. uname -a ~$ uname -a Linux lubuntu-Vostro-A840 3.19.0-73-generic #81-Ubuntu SMP Tue Oct 18 16:02: ...
- 20145305解佳玲 《Java程序设计》第1周学习总结
教材学习内容总结 第一章 Java平台概论 1.先了解了JAVA的历史 2.Java三大平台:Java SE.Java EE与Java ME 3.Java SE的四个组成部分:JVM.JRE.JDK与 ...
- [SQL] 如何在SQL Server2005数据库中检查一个表是否存在,如存在就删除表记录,如不存在就建表.
. 检索 dbo.sysobjects表, select count(*) from dbo.sysobjects where xtype='U' and Name = '你的表名' . 根据返回的结 ...
- Mingyang.net:为什么不将Bean定义在Action参数中?
Spring MVC提供了一种方便的Bean填充方式: @Controller public class CmsChannelController extends AbstractController ...
- 使用spark访问elasticsearch的数据
使用spark访问elasticsearch的数据,前提是spark能访问hive,hive能访问es http://blog.csdn.net/ggz631047367/article/detail ...