导入模型

一般情况下,我们自己搭建模型的功力还不够,大多都是在3Dmax中做好模型,导出成模型文件,然后再导入Eyeshot视图中。导入的代码包括:

OpenFileDialog openFileDialog1 = new OpenFileDialog();
string theFilter = "Points|*.asc|" + "Stereolithography|*.stl|" + "WaveFront OBJ|*.obj";
theFilter += "|IGES|*.igs; *.iges|" + "STEP|*.stp; *.step";
openFileDialog1.Filter = theFilter;
openFileDialog1.Multiselect = false;
openFileDialog1.AddExtension = true;
openFileDialog1.CheckFileExists = true;
openFileDialog1.CheckPathExists = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
viewportLayout1.Entities.Clear();
ReadFileAsynch rfa = null;
switch (openFileDialog1.FilterIndex)
{
case :
rfa = new ReadASC(openFileDialog1.FileName);
break;
case :
rfa = new ReadSTL(openFileDialog1.FileName);
break;
case :
rfa = new ReadOBJ(openFileDialog1.FileName);
break;
case :
rfa = new ReadIGES(openFileDialog1.FileName);
break;
case :
rfa = new ReadSTEP(openFileDialog1.FileName);
break;
}
viewportLayout1.StartWork(rfa);
}

这里还没有完,因为导入模型这个过程是异步导入,所以还有另外一个函数:

         private void viewportLayout1_WorkCompleted(object sender, WorkCompletedEventArgs e)
{
if (e.WorkUnit is ReadFileAsynch)//导入文件
{
ReadFileAsynch rfa = (ReadFileAsynch)e.WorkUnit;
Entity[] entList = rfa.Entities;
entityListClone = (Entity[])entList.Clone();
rfa.AddToScene(viewportLayout1); viewportLayout1.SetView(viewType.Top);
viewportLayout1.ZoomFit();
}
}

这段代码表示如果执行的work是导入文件,那么将导入的模型呈现在视图中,并且设置视图角度以及模型的相对大小。

如果该模型包含mtl材料文件和图片格式的纹理文件,那么导入就需要用到另外一种方式,这里仍然拿OBJ格式的模型为例子:

用函数ReadOBJ(Stream objStream, Stream materialStream, Dictionary<string, Stream> texturesStream, meshEdgeStyleType edgeStyle)

FileStream fs1 = new FileStream(@"..\..\Models\demo.obj", FileMode.Open); //obj
FileStream fs2 = new FileStream(@"..\..\Models\demo.mtl", FileMode.Open); //mtl
FileStream fs3 = new FileStream(@"..\..\Models\demo.jpg", FileMode.Open); //texture
Dictionary<string, Stream> texturesDic = new Dictionary<string, Stream>();
texturesDic.Add("demo.jpg", fs3);
ReadOBJ ro = new ReadOBJ(fs1, fs2, texturesDic, meshEdgeStyleType.Sharp);
viewportLayout1.StartWork(ro);

viewportLayout1_WorkCompleted函数中的部分不用改变。

导出模型

导出模型的文件只有一个,比如导入模型时有一个.mtl文件和一个.obj文件,导出模型后就只有.obj文件了。

导出模型的代码如下:

                SaveFileDialog sfd = new SaveFileDialog();
string theFilter = "OBJ|*.OBJ";
theFilter += "|IGES|*.igs; *.iges|" + "STEP|*.stp; *.step";
sfd.Filter = theFilter;
string savePath = fileName;
if (sfd.ShowDialog() == DialogResult.OK)
{
if (!string.IsNullOrEmpty(sfd.FileName))
{
savePath = sfd.FileName;
}
string extention = savePath.Substring(savePath.LastIndexOf('.') + ).ToLower();
switch (extention)
{
case "obj":
viewportLayout1.WriteOBJ(savePath, false);
break;
case "igs":
viewportLayout1.WriteIGES(savePath, false);
break;
case "iges":
viewportLayout1.WriteIGES(savePath, false);
break;
case "stp":
viewportLayout1.WriteSTEP(savePath, false);
break;
case "step":
viewportLayout1.WriteSTEP(savePath, false);
break;
}
}

导出主要的函数为WriteOBJ(),WriteIGES()之类的一系列函数。当然导出的模型也可以继续导入。

Eyeshot Ultimate 学习笔记(2)的更多相关文章

  1. Eyeshot Ultimate 学习笔记(1)

    在Winform项目中用到3D技术,这是在做项目一段时间以来第一次,还是指定的3D控件Eyeshot Ultimate,这个控件名称用度娘搜索,竟然毫无结果,不知道是没有人用过还是觉得该控件过于简单, ...

  2. Eyeshot Ultimate 学习笔记(4)

    动画 Eyeshot的官方Demo中有一个功能是近期项目需要用到的,就是动画效果.其中主要运用到BlockReference类,该类下的两个方法MoveTo(Dictionary<string, ...

  3. Eyeshot Ultimate 学习笔记(3)

    实体角度和位置的控制 有时候导入的模型方向或者角度不太适合,就需要调节一下,这里我发现的一种方法是用到Transformation类,其实有很多类的运用都非常灵活,如果不是有官方示例,恐怕是很难发现的 ...

  4. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  5. VSTO 学习笔记(十三)谈谈VSTO项目的部署

    原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中, ...

  6. VSTO学习笔记(十五)Office 2013 初体验

    原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...

  7. VSTO 学习笔记(十)Office 2010 Ribbon开发

    原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...

  8. VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

    原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...

  9. VSTO学习笔记(八)向 Word 2010 中写入表结构

    原文:VSTO学习笔记(八)向 Word 2010 中写入表结构 前几天公司在做CMMI 3级认证,需要提交一系列的Word文档,其中有一种文档要求添加公司几个系统的数据库中的表结构.我临时接到了这项 ...

随机推荐

  1. Eclipse + Pydev 配置Python开发环境

    之前有人问 Eclipse + Pydev 的环境配置问题,在此记录一下. 前提条件:需要安装 Eclipse .jdk.Python.这三个软件都可以在官网上下载. 假设上述软件已经安装好了,下面是 ...

  2. 【转】使用VisualSVN Server搭建SVN服务器

    http://blog.csdn.net/han_yankun2009/article/details/7856992 使用 VisualSVN Server来实现主要的 SVN功能则要比使用原始的  ...

  3. IOS-Archiver文件归档(2)

    Archiver是持久化数据的一种方式,他跟 Plist的差别在于他能持久化自己定义对象.但他没Plist那么方便. Archiver默认能持久化的数据有NSNumber,NSArray,NSDict ...

  4. Java多线程---------同步与死锁:synchronized;等待与唤醒:wait、notify、notifyAll;生命周期

    1.问题的引出 class MyThread implements Runnable{ private int ticket = 5 ; // 假设一共有5张票 public void run(){ ...

  5. java验证码(采用struts2实现)转

    第一步:编写验证码的Action package com; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...

  6. netty Architectural Overview --reference

    reference from:http://docs.jboss.org/netty/3.1/guide/html/architecture.html 2.1. Rich Buffer Data St ...

  7. iOS开发经验总结(上)

    在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPhone Size 手机型号 屏幕尺寸 iPhone 4 4s 320 * 480 iPhone 5 5s ...

  8. Verilog Tips and Interview Questions

    Verilog Interiew Quetions Collection :  What is the difference between $display and $monitor and $wr ...

  9. jQuery Validate验证框架使用

    jQuery Validate使用前的准备,需要下载相应js包括:1.jquery.validate.min.js.2.additional-methods.min.js. 当然必不可少的js jQu ...

  10. angularjs + springmvc 上传和下载

    jsp: <form ng-submit="uploadFile()" class="form-horizontal" enctype="mul ...