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文件的话,那么就可以使 ...
随机推荐
- Apache Thrift学习之二(基础及原理)
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部署,并且 ...
- wpf mvvm使用问题集锦
问题一.usercontrol1控件使用了mvvm数据绑定,usercontrol2也使用了mvvm数据绑定,则 以下是伪代码 <usercontrol2 datacontent="{ ...
- Java中的GC操作及相关概念
一.GC Roots Tracing的基本思路:通过一系列名为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所经过的路径称为引用链(Reference Chai ...
- C++学习8 构造函数的参数初始化表
构造函数是一种特殊的成员函数,在创建对象时自动执行,主要用来进行初始化工作,例如对 private 属性的成员变量赋值. 对成员变量的初始化,除了在构造函数的函数体中一一赋值,还可以采用参数初始化表. ...
- oracle查询锁和杀锁
查询锁: SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machine, ...
- [Flex] PopUpButton系列 —— 判断下拉列表是否选中
<?xml version="1.0" encoding="utf-8"?> <!--Flex中如何利用dataDescriptor属性和is ...
- SQL行转列汇总
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...
- select into from 和 insert into select 的用法和区别
select into from 和 insert into select都是用来复制表,两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建.insert ...
- iOS7 下去掉状态栏(全屏)
具体步骤如下: 1.在项目的-Info.plist文件中,添加Row: Key:View controller-based status bar appearance Value:NO 2.选择项目在 ...
- (整理)RPC
今天研究了一下Webservice,然后就查到RPC,看到CSDN上有两篇很好的文章,就学习一下,并记录在此以便后续研究 http://blog.csdn.net/mindfloating/artic ...