导入模型

一般情况下,我们自己搭建模型的功力还不够,大多都是在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. S2SH商用后台权限系统第三讲

    个位博友: 您好!今天我们做下登录页面,已经如何登录系统.我们的登录页面很简单,用户名.密码.验证码.下面首先描述下验证码的概念,验证码是为了防止机器人恶意登录.我们这里的验证码采用4位数字,当然你也 ...

  2. 使用HttpClient进行http post/get方法的调用,以及使用dom4j解析xml

    import java.io.IOException; import java.util.List; import javax.servlet.ServletInputStream; import j ...

  3. Highcharts简介

    最近要做一个油田油压或温度数据的监控软件,数据会秒级写到数据库中,界面上需要动态展示数据跟随时间变化. 在网上找了很多js插件,希望能够即时高效的展示数据,最终确定了使用Highcharts插件. H ...

  4. 跟我一起学extjs5(05--主界面上增加顶部和底部区域)

    跟我一起学extjs5(05--主界面上增加顶部和底部区域)         这一节为主界面加一个顶部区域和底部区域. 一个管理系统的界面能够粗分为顶部标题部分.中间数据展示和处理的部分.底部备注和状 ...

  5. hi3531的h264压缩中改动波特率

    typedef struct hiVENC_ATTR_H264_CBR_S { HI_U32 u32Gop; HI_U32 u32StatTime; HI_U32 u32ViFrmRate; HI_F ...

  6. RHCA442学习笔记-Unit11内存回收

       Unit 12 Memory Reclamation 内存回收            学习目标:                    A. 了解和调整内存回收                  ...

  7. INSERT DELAYED 句法

    INSERT 语句的 DELAYED 选项是一个 MySQL 特有的选项,如果你的客户端不能等待 INSERT 的完成,这将会是很有用的.This is a common problem when y ...

  8. c语言学习

    #include <stdio.h>void sum_diff(int *n1,int *n2,int *sum,int *diff){ *sum=*n1+*n2; *diff=(*n1& ...

  9. 客户端脚本语言javascript

    2015.11.27  客户端脚本语言javascript. (叫这个名字的原因.想要攀高枝,希望变得和他一样通用.关于名字之间的关系类似于雷锋和雷峰塔,巴基斯坦和卡巴斯基,苏格拉底跟格拉苏蒂的关系一 ...

  10. 爬虫神器XPath,程序员带你免费获取周星驰等明星热门电影

    本教程由"做全栈攻城狮"原创首发,本人大学生一枚平时还需要上课,但尽量每日更新文章教程.一方面把我所习得的知识分享出来,希望能对初学者有所帮助.另一方面总结自己所学,以备以后查看. ...