C# 做 Pro/ENGINEER二次开发
2011-07-11 17:43
417 查看
本段解说怎样去使用 C# 去包装到Pro/ENGINEER的连接。
标题
简单异步模式
启动和停止Pro/ENGINEER
连接到一个Pro/ENGINEER的进程
完整异步模式
C# 程序疑难解答
简单异步模式
一个简单异步模式程序不实现Pro/ENGINEER来的要求句柄的途径。因此,C#不能安插当在Pro/ENGINEER里发生事件而被通知的侦听。相应的,Pro/ENGINEER不能调用当你增加时必须提供的方法,例如,Pro/ENGINEER的菜单按钮。
由于这个限制,一个简单异步模式程序可以用来自动化Pro/ENGINEER里的进程。程序可能既启动或连接到一个存在的Pro/ENGINEER会话,也可能在交互或无图形,无交互模式访问Pro/ENGINEER。
当Pro/ENGINEER运行在图形情况下,它仍然有隔交互进程对用户可用。当你设计个简单异步模式下的C#程序,头脑中有下列观念:
Pro/ENGINEER进程和程序同时执行操作。
没有一个程序的侦听方法可以被Pro/ENGINEER调用。
启动和停止 Pro/ENGINEER
当使用C#程序,下列方法用来启动和停止Pro/ENGINEER。
方法介绍:
CcpfcAsyncConnection.Start()
IpfcAsyncConnection.End()
一个C#程序可以通过CcpfcAsyncConnection.Start()方法去产生并连接到一个Pro/ENGINEER进程。一旦方法返回异步连接对象,C#程序可以使用相应的API去调用Pro/ENGINEER进程。在交互模式,当它运行时,你还可以在你的计算机上访问Pro/ENGINEER会话。
当Pro/ENGINEER终止时,这个程序不会终止。当程序只是临时需要进行Pro/ENGINEER操作的时候很有用,因此在会话中,必须启动和停止Pro/ENGINEER一次以上。
在任何时候,只有一个Pro/ENGINEER会话可以被启动或连接。如果C#程序产生出第二个会话,对第一个会话的连接将丢失。
为终止任何程序连接的Pro/ENGINEER进程,调用IpfcAsyncConnection.End()方法。
建立个非交互会话
你可以产生个既无交互又无图形的Pro/ENGINEER会话。在异步模式,在调用CcpfcAsyncConnection.Start()的Pro/ENGINEER启动/连接字符串中包含下列字符串:
-g:no_graphics —— 关闭图形显示;
-i:rpc_input —— 导致Pro/ENGINEER仅从你的异步程序期望输入。ote注意:
这些参数都需要,但是顺序不重要
调用一个无交互,无图形会话的语法如下:
IpfcAsyncConnection aC;
CcpfcAsyncConnection ccAC = new CcpfcAsyncConnection();
aC = ccAC.Start("<pro> -g:no_graphics -i:rpc_input",<text_dir>);
这里 <pro> 是启动 Pro/ENGINEER的命令,<text_dir>是工作目录。
Visual C# 2008 例子代码
这个例子演示C#。方法异步启动Pro/ENGINEER,然后加载一个会话并在Pro/ENGINEER里打开一个模型。
using pfcls;
public class pfcAsynchronousModeExamples
{
public void runProE(string exePath, string workDir)
/*
第一个参数 : Pro/ENGINEER 执行命令的路径
行选项:-i 和 -g 标识使 Pro/ENGINEER 运行在无图形,无交互模式
第二个参数:菜单和消息文件的字符串路径
*/
{
IpfcAsyncConnection asyncConnection = null;
CCpfcAsyncConnection cAC = null;
IpfcBaseSession session;
try
{
cAC = new CCpfcAsyncConnection();
asyncConnection = cAC.Start(exePath + " -g:no_graphics -i:rpc_input", ".");
session = asyncConnection.Session as IpfcBaseSession;
// 设置工作目录
session.ChangeDirectory(workDir);
// C#进程调用和其它将进行的其它进程
IpfcModelDescriptor descModel ;
IpfcModel model;
// 载入工作目录下的 "prt0001.prt" 文件
descModel = (new CCpfcModelDescriptor()).Create((int)EpfcModelType.EpfcMDL_PART, "prt0001.prt", null);
model = session.RetrieveModel(descModel);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
// 当完成,结束 Pro/ENGINEER 会话
finally
{
if (asyncConnection != null)
if (asyncConnection.IsRunning())
asyncConnection.End();
}
}
}
连接到Pro/ENGINEER进程
Methods Introduced:
方法介绍:
CcpfcAsyncConnection.Connect()
CcpfcAsyncConnection.ConnectWS()
CcpfcAsyncConnection.GetActiveConnection()
IpfcAsyncConnection.Disconnect()
一个简单异步模式程序也可以连接到本地机器上已经运行的Pro/ENGINEER进程。CcpfcAsyncConnection.Connect()方法执行这个连接。如果多个Pro/ENGINEER会话运行,CcpfcAsyncConnection.Connect()失败。
如果几个版本Pro/ENGINEER在相同机器运行,试着通过指定用户和显示参数连接。然而,如果几个版本Pro/ENGINEER运行在相同用户和显示参数,可能不能连接。
CcpfcAsyncConnection.connectWS()把Pro/ENGINEER同Pro/INTRALINK3.x 连接起来。
CCpfcAsyncConnection.GetActiveConnection返回当前到Pro/ENGINEER会话的连接。
为了从Pro/ENGINEER进程解除连接,调用IpfcAsyncConnection.Disconnect()方法。
通过Connection Id连接
方法介绍:
IpfcAsyncConnection.GetConnectionId()
IpfcConnectionId.ExternalRep
CCpfcConnectionId.Create()
CCpfcAsyncConnection.ConnectById()
每个Pro/ENGINEER进程管理一个通讯目的的唯一标识。 这个Id可以用来重新连接到个Pro/ENGINEER进程。
IpfcAsyncConnection.GetConnectionId()方法返回一个包含连接Id的数据结构。
如果连接Id必须传递给其它程序,IpfcConnectionId.ExternalRep提供了连接Id的字符串外部表示。
CCpfcConnectionId.Create()方法输入一个字符串表示后创建一个ConnectionId 数据对象。CCpfcAsyncConnection.ConnectById()方法通过指定连接Id连接到Pro/ENGINEER。
注意:
每个Pro/ENGINEER进程的连接Id是唯一,一旦Pro/ENGINEER退出就不维护了。
Pro/ENGINEER 进程的状态
方法介绍:
IpfcAsyncConnection.IsRunning()
为发现一个Pro/ENGINEER进程是否运行,使用方法pfcAsyncConnectionAsyncConnection.IsRunning。
得到会话对象
方法介绍:
IpfcAsyncConnection.Session
IpfcAsyncConnection.Session方法返回表示Pro/ENGINEER会话的会话对象。使用这个对象去访问Pro/ENGINEER会话的内容。更多信息见〈会话对象〉段。
标题
简单异步模式
启动和停止Pro/ENGINEER
连接到一个Pro/ENGINEER的进程
完整异步模式
C# 程序疑难解答
简单异步模式
一个简单异步模式程序不实现Pro/ENGINEER来的要求句柄的途径。因此,C#不能安插当在Pro/ENGINEER里发生事件而被通知的侦听。相应的,Pro/ENGINEER不能调用当你增加时必须提供的方法,例如,Pro/ENGINEER的菜单按钮。
由于这个限制,一个简单异步模式程序可以用来自动化Pro/ENGINEER里的进程。程序可能既启动或连接到一个存在的Pro/ENGINEER会话,也可能在交互或无图形,无交互模式访问Pro/ENGINEER。
当Pro/ENGINEER运行在图形情况下,它仍然有隔交互进程对用户可用。当你设计个简单异步模式下的C#程序,头脑中有下列观念:
Pro/ENGINEER进程和程序同时执行操作。
没有一个程序的侦听方法可以被Pro/ENGINEER调用。
启动和停止 Pro/ENGINEER
当使用C#程序,下列方法用来启动和停止Pro/ENGINEER。
方法介绍:
CcpfcAsyncConnection.Start()
IpfcAsyncConnection.End()
一个C#程序可以通过CcpfcAsyncConnection.Start()方法去产生并连接到一个Pro/ENGINEER进程。一旦方法返回异步连接对象,C#程序可以使用相应的API去调用Pro/ENGINEER进程。在交互模式,当它运行时,你还可以在你的计算机上访问Pro/ENGINEER会话。
当Pro/ENGINEER终止时,这个程序不会终止。当程序只是临时需要进行Pro/ENGINEER操作的时候很有用,因此在会话中,必须启动和停止Pro/ENGINEER一次以上。
在任何时候,只有一个Pro/ENGINEER会话可以被启动或连接。如果C#程序产生出第二个会话,对第一个会话的连接将丢失。
为终止任何程序连接的Pro/ENGINEER进程,调用IpfcAsyncConnection.End()方法。
建立个非交互会话
你可以产生个既无交互又无图形的Pro/ENGINEER会话。在异步模式,在调用CcpfcAsyncConnection.Start()的Pro/ENGINEER启动/连接字符串中包含下列字符串:
-g:no_graphics —— 关闭图形显示;
-i:rpc_input —— 导致Pro/ENGINEER仅从你的异步程序期望输入。ote注意:
这些参数都需要,但是顺序不重要
调用一个无交互,无图形会话的语法如下:
IpfcAsyncConnection aC;
CcpfcAsyncConnection ccAC = new CcpfcAsyncConnection();
aC = ccAC.Start("<pro> -g:no_graphics -i:rpc_input",<text_dir>);
这里 <pro> 是启动 Pro/ENGINEER的命令,<text_dir>是工作目录。
Visual C# 2008 例子代码
这个例子演示C#。方法异步启动Pro/ENGINEER,然后加载一个会话并在Pro/ENGINEER里打开一个模型。
using pfcls;
public class pfcAsynchronousModeExamples
{
public void runProE(string exePath, string workDir)
/*
第一个参数 : Pro/ENGINEER 执行命令的路径
行选项:-i 和 -g 标识使 Pro/ENGINEER 运行在无图形,无交互模式
第二个参数:菜单和消息文件的字符串路径
*/
{
IpfcAsyncConnection asyncConnection = null;
CCpfcAsyncConnection cAC = null;
IpfcBaseSession session;
try
{
cAC = new CCpfcAsyncConnection();
asyncConnection = cAC.Start(exePath + " -g:no_graphics -i:rpc_input", ".");
session = asyncConnection.Session as IpfcBaseSession;
// 设置工作目录
session.ChangeDirectory(workDir);
// C#进程调用和其它将进行的其它进程
IpfcModelDescriptor descModel ;
IpfcModel model;
// 载入工作目录下的 "prt0001.prt" 文件
descModel = (new CCpfcModelDescriptor()).Create((int)EpfcModelType.EpfcMDL_PART, "prt0001.prt", null);
model = session.RetrieveModel(descModel);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
// 当完成,结束 Pro/ENGINEER 会话
finally
{
if (asyncConnection != null)
if (asyncConnection.IsRunning())
asyncConnection.End();
}
}
}
连接到Pro/ENGINEER进程
Methods Introduced:
方法介绍:
CcpfcAsyncConnection.Connect()
CcpfcAsyncConnection.ConnectWS()
CcpfcAsyncConnection.GetActiveConnection()
IpfcAsyncConnection.Disconnect()
一个简单异步模式程序也可以连接到本地机器上已经运行的Pro/ENGINEER进程。CcpfcAsyncConnection.Connect()方法执行这个连接。如果多个Pro/ENGINEER会话运行,CcpfcAsyncConnection.Connect()失败。
如果几个版本Pro/ENGINEER在相同机器运行,试着通过指定用户和显示参数连接。然而,如果几个版本Pro/ENGINEER运行在相同用户和显示参数,可能不能连接。
CcpfcAsyncConnection.connectWS()把Pro/ENGINEER同Pro/INTRALINK3.x 连接起来。
CCpfcAsyncConnection.GetActiveConnection返回当前到Pro/ENGINEER会话的连接。
为了从Pro/ENGINEER进程解除连接,调用IpfcAsyncConnection.Disconnect()方法。
通过Connection Id连接
方法介绍:
IpfcAsyncConnection.GetConnectionId()
IpfcConnectionId.ExternalRep
CCpfcConnectionId.Create()
CCpfcAsyncConnection.ConnectById()
每个Pro/ENGINEER进程管理一个通讯目的的唯一标识。 这个Id可以用来重新连接到个Pro/ENGINEER进程。
IpfcAsyncConnection.GetConnectionId()方法返回一个包含连接Id的数据结构。
如果连接Id必须传递给其它程序,IpfcConnectionId.ExternalRep提供了连接Id的字符串外部表示。
CCpfcConnectionId.Create()方法输入一个字符串表示后创建一个ConnectionId 数据对象。CCpfcAsyncConnection.ConnectById()方法通过指定连接Id连接到Pro/ENGINEER。
注意:
每个Pro/ENGINEER进程的连接Id是唯一,一旦Pro/ENGINEER退出就不维护了。
Pro/ENGINEER 进程的状态
方法介绍:
IpfcAsyncConnection.IsRunning()
为发现一个Pro/ENGINEER进程是否运行,使用方法pfcAsyncConnectionAsyncConnection.IsRunning。
得到会话对象
方法介绍:
IpfcAsyncConnection.Session
IpfcAsyncConnection.Session方法返回表示Pro/ENGINEER会话的会话对象。使用这个对象去访问Pro/ENGINEER会话的内容。更多信息见〈会话对象〉段。
相关文章推荐
- C# 做 Pro/ENGINEER二次开发
- Pro Engineer Pro/Toolkit dll工程二次开发设置(Pro Engineer 3.0+Visual Studio 2005(C++))
- Pro Engineer 二次开发工程图表格绘制
- 用C#做 UG NX 二次开发 / NX Secondary Dev. with C#
- C#进行MapX二次开发之地图搜索
- C#进行MapX二次开发之图层操作
- 第8章 C# .NET 开源可进行二次开发的即时通讯组件提供全部源码下载
- 如何快速学好terraexplorer pro二次开发
- C# 对Outlook2010进行二次开发的图文教程
- (c#)AutoCAD二次开发,运行时,出现“对象的当前状态使该操作无效”
- 新建了一个小组 专注于用C#在Arc Engine上进行二次开发
- C#/AutoCAD 2018/ObjectArx/二次开发添加圆对象的的例子(五)
- 利用C#进行AutoCAD的二次开发(转)
- C#基于google earth的二次开发
- 第8章 C# .NET 开源可进行二次开发的即时通讯组件提供全部源码下载
- C#进行MapX二次开发之图层操作
- TerraExplorer_proC#开发阶段性小结
- 逐浪CMS2 x3.8新功能:定时执行C#代码让二次开发虎虎添翼
- AutoCAD二次开发(.net教程)C#版——学习笔记(二)
- 关于C#对AutoCad2007二次开发插件工作总结