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. lable标签透明

    方法1: pictureBox1.Controls.Add(lable1);    //或 this.label1.Parent=pictureBox1;   lable1.BackColor=Col ...

  2. Jmeter+jenkins接口性能测试平台实践整理(一)

    最近两周在研究jmeter+Jenkin的性能测试平台测试dubbo接口,分别尝试使用maven,ant和Shell进行构建,jmeter相关设置略. 一.Jmeter+jenkins+Shell+t ...

  3. oracle查看所有表的数据量

    源地址:http://blog.csdn.net/zhanggnol/article/details/6683697 select t.table_name,t.num_rows from user_ ...

  4. DedeTag Engine Create File False提示的种种原因及解决方法

    DedeTag Engine Create File False提示的种种原因及解决方法 第一种情况:站点.文件夹权限不足造成无法建立文件 这种情况的出现,一方面可能是Apache设置的读写权限较严格 ...

  5. [ActionScript 3.0] as3.0加载as2.0的swf时获取as2.0的实际舞台尺寸

    var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler) ...

  6. (medium)LeetCode 221.Maximal Square

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  7. Nginx作为简单代理服务器(Windows环境)

    Nginx一个频繁的应用是作为代理服务器,由Nginx代理服务器接受客户请求,并将客户请求发送到应用服务器处理,接受应用服务器的响应,然后将响应发送给客户. 现在要做的一个应用场景就是当客户请求图片资 ...

  8. (转)Log4net 配置类库

    原文地址:http://blog.csdn.net/pfe_nova/article/details/20072137 1.单文件日志 对于单文件的日志,封装代码如下: public enum Log ...

  9. android NDk环境编译总结

    首先,这篇文章的撰写是基于很多前人的优秀的帖子,感谢他们的分享让我能够学习这么多的知识.谢谢 Android NDK开发环境的搭建 前言: Android 上,应用程序的开发,大部分基于 Java 语 ...

  10. android 操作sqlite的一点小技巧

    1.android 在sqlite插入数据时,是非常耗时的操作,原因是sqlite缺省会为每个插入操作开启一个事务,当数量变多的时候,自然时间就变得很慢,这时候可以考虑在插入等操作时先开启一个事务,再 ...