使用Jt2Go控件显示3D模型

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 8

使用 Jt2Go 控件显 示 3D 模型

Begtostudy(白途思)
(上海交通大学·徐汇校区)
1、 意义
目前我们显示 3D 模型的方式有很多,工业上比较常用的是 Autodesk 的一个开放标准
文件,Web 上常用的是 VRML 文件的 3D 模型等等,当然,还有一些专业的工具但是很多
是收费的。
首先要说为什么我们要使用这种开发的 3D 模型。原因很简单,因为专业的 3D 模型都只
适用于专业软件,不能开放式的交流。比如 UG 的 prt 文件、Pore 的 prt 文件,换了其他软件
是打不开看不了的。去年参加 PTC 的 PROE 大会的时候,看到 PTC 的 ProductsView 感觉甚
是方便:不需要安装 ProE 就可以看 prt 文件,当时对 UG 的 prt 文件只能 UG 打开来看甚是
嗤之以鼻。然而今年参加 Siemens 的 UG 大会的时候,跟很多用户交流才发现, UG 这样做
是有道理的——为了知识版权问题。如果 prt 文件共享,在交流后别人很容易就使用。所以
Siemens 提出使用 JT 作为交流的载体而不是 prt 文件,以保证知识版权。
VRML 是最为通用的 3D 模型文件之一,而且显示最为方便(asp 就支持嵌入到 html)。
然而这种模型从目前的显示插件来看效果比较差,显示一般的 3D 模型还行,显示工业上
有感不足。
而 JT 作为一种开放的工业模型文件,有其优势。至于什么是 JT 文件和 JTOpen 标准,
大家可以去 google 吧。这个毕竟是技术文章不是学术论文,我就不想长篇大论了。
JT 文件可以从多种软件中导出(如 UG),使用 Jt2Go(这个大家可以去 google)可以
显示 jt 文件。早在一年前,我就试图使用 Jt2Go 在开发中用于显示 3D 模型。但是一直没有成
功,最近我才弄明白原因所在,so long time。还是要感谢各位网友的帮助,给了我信心。

2、 导出 JT 文件
前文所述,JT 文件是为了交流中保护知识版权,是作为交流的载体。那么现在使用 UG NX
将 prt 文件导出为 JT 文件(图 1)。
图 1
导出的文件主要是两部分(图 2),主 jt 文件和模型 jt 文件。模型 jt 文件在子目录下。

图 2
这些 JT 文件双击使用 JT2Go 打开(图 3)。当然,也可以把这些文件拖拽到 word 等 office
文档里作为对象显示(可以进行旋转等操作,这都是 Jt2Go 的功劳)。
图 3

3、 在开发中显示 JT 模型
C# Windows Form 程序
1、 在 VS 的 ToolBox 工具栏里点击 choose Items
在 COM 组件里选择(图 4)

图 4
之后可以看到 VisJT2GoOCX 控件(图 5)。拖拽到 Form 界面上即可。
图 5
Form 界面简单的设计如图 6。
Path 按钮选择文件路径,textbox 显示文件路径名,Show 使控件显示 JT 模型。Close 留在后
面专门说。
图 6
对应的程序如图 7。如果图看不清,可以看最后的表 1.
程序说明一下:
控件显示 JT 文件就是用方法 Open。
我特别强到的是窗口 Closed 的时候一定要让控件停止(方法 StopAutomation),否则控件
将不能正常工作,原因是 Jt2Go 是单进程的。
查了一下进程,原来是 VisView.exe 服务没有停止(图 8)。如果你的控件不能正常工作,
可以在进程管理器中关掉这个进程,就正常了。
当然是控件不显示也是使用方法 StopAutomation。
图 7

图 8
好了,编译运行一下。
点击 Path 按钮选择 jt 文件。Show 按钮显示 JT 模型。Close 关闭显示。
图 9

图 10
表 1
using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btShow_Click(object sender, EventArgs e)


{
this.axVisJT2GoOCX1.Open(this.tbFileName.Text);
}

private void btClose_Click(object sender, EventArgs e)


{
this.axVisJT2GoOCX1.StopAutomation();
}

private void Form1_Load(object sender, EventArgs e)


{
this.FormClosed += (oo, ee) => { this.axVisJT2GoOCX1.StopAutomation(); };
}

private void btPath_Click(object sender, EventArgs e)


{
var dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
this.tbFileName.Text = dlg.FileName;
}
}
}

You might also like