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/

时间: 2024-10-29 16:21:27

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

3D模型文件——OBJ 文件格式

OBJ文件是一种标准的3D模型文件格式,以纯文本的形式存储了模型的顶点.法线和纹理坐标和材质使用信息,因此可以使用记事本打开直接阅读. 在OBJ文件中,每一行为一条信息,每行的格式如下:前缀  参数1 参数2 参数3 ... 常用前缀 #表示注释的前缀 v 表示本行指定一个坐标.后跟着3个文本表示的float,分别表示该定点的X.Y.Z坐标值(参数之间使用空格分开) vt 表示本行指定一个纹理坐标.后跟着2个文本表示的float.分别表示此纹理坐标的U.V值(参数之间使用空格分开) vn 表示本

opengl | openmesh 读取显示3d模型文件

操作 鼠标控制物体旋转移动,滚轮缩放 F1,F2,F3 可以更换显示文件 (file1:cow.obj file2:cactus.ply file3 : Armadillo.off) F4 更换显示模式 (wire,flat,flatlines) 截图 使用命令行显示当前状态 准备 openmesh的下载配置 下载最新的安装包 安装openmesh 配置vs 工具->选项->项目和解决方案->VC++目录 配置 包含文件和库文件,分别是openmesh\include和openmesh\

3D模型文件 OBJ格式模型详细介绍

obj格式有4种数据,分别以一下字母开头: v顶点 vt纹理坐标 vn顶点法向量 f 面 一.顶点 v 0.232323 0.8978, 0.34312 格式:v x y z意义:每个顶点的坐标 二.纹理坐标 vt 0.032 0.005 0 格式:vt u v w 意义:绘制模型的三角面片时,每个顶点取像素点时对应的纹理图片上的坐标.纹理图片的坐标指的是,纹理图片如果被放在屏幕上显示时,以屏幕左下角为原点的坐标.注意:w一般用于形容三维纹理,大部分是用不到的,基本都为0. 三.顶点法向量 vn

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

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11783026.html 自己写了个简单的类读取解析obj模型,使用导入类,然后new个对象,在读取obj模型,然后调用显示列表显示就可以了.至于其他什么旋转移动的你们自己加起来应该很容易的,因为我有看过c#下别人写的obj模型解析的代码项目,加了很多东西,我都找不到自己要用的代码在哪里,而我只需要读取解析obj模型这块代码而已,气的我自己写了个类自己解析,所以我怕我代码写多了, 你们反而看起

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

这是我之前做的一个demo,导入的3d模型文件是obj格式的,需要使用OBJLoader和MTLLoader, mtl文件用于描述多边形可视面貌的材质如果你可以导出obj.mtl文件的话,那么就可以使用下面的代码把3d模型添加到three.js构建的场景里了 function loadBuild() { var loader = new THREE.OBJLoader(); var mtlLoader = new THREE.MTLLoader(); mtlLoader.setPath( "ci

将.stl文件转化为.dae并动态加载到SceneKit显示(ios中显示3d模型)

ios8之后苹果推出了一个3D模型渲染框架.SceneKit.但是国内针对这方面的教程并不是很多.前两天搞了一下也是一头雾水,终于把最基础的内容搞明白了之后,写下这篇随笔作为cnblogs的开篇,希望能一直写下去. SceneKit现在可以支持有限的几种模型,截止到我写这篇文章为止似乎只有.dae和.abc后一种模型我没有使用过.这篇文章只针对.dae模型写. 首先如果是希望加载一个已有的,不需要程序在运行的时候动态添加的dae模型.那么我们可以直接新建一个game类型的工程.在选项中选择Sce

ZFXEngine开发笔记之3D模型格式支持(1)

作者:i_dovelemon 来源:CSDN 日期:2014 / 9 / 17 主题:3D Format, Milk 3D Shape, Chunk Based System, Skeleton Animation (文中以红色中字标示的文字,是整个文章的注意项,请读者留心) 引言 在3D游戏领域,艺术家们通过3D建模软件建立自己的艺术品模型和绚丽的3D场景.当我们想要在自己的游戏中使用这些模型的时候,我们就需要将这种模型变成能够被我们的引擎所识别的文件格式.每一个建模软件都有自己的文件格式,不

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

iOS11 AR场景中关于3D模型的触碰检测

最新 iOS11中的AR特别火爆,自己也到网上找了几个Demo把玩了下,核心代码无非以下: //AR视图:展示3D界面 @property(nonatomic,strong)ARSCNView *arSCNView; 添加模型方法一: // Create a new scene SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/ship.scn"]; // Set the scene to the view self.arSC