1、 PowerMILL二次开发教程 V1.1 广州市德慷软件有限公司 Guangzhou dekang Software Co.,Ltd I 版权 本手册著作权属于广州市德慷软件有限公司(Guangzhou Dekang Software Co.,Ltd)所 有,在未经本公司许可的情况下,任何单位或个人不得以任何方式对本手册的部分或全部内 容擅自进行增删,改编,节录,翻译,翻印,改写。 2008-2011 广州市德慷软件有限公司版权所有,保留所有权利 声明 为求准确,本手册已经过验证和复审。本手册包含的指导和描述对出版时的版本是准确 的。但是对以后的系统及手册可以变动,恕不另行通知。 II 前
2、言 本PowerMILL 二次开发教程为 PowerMILL 二次开发教程,为方便 说明,本手册,即PowerMILL二次开发教程简称为教程 。 如何使用教程 本教程主要讲解了对 PowerMILL的二次开发,无论你是 PowerMILL 系统的老用户还是新朋友,都可以在教程中找到有用的信息。您可以按 顺序阅读每一章节,或利用目录快速获得您所需要的信息。 下表可以帮助你使用本教程 : 如果您是 请阅读 未使用过 PowerMILL 的用户 建议按顺序阅读每一章节 使用老版本系统的用户 建议先浏览目录,查找自己感兴趣的章节 约定 在使用本系统前,请您尽量熟悉 windows 系统的操作,掌握必备
3、的操作知识。 通用格式约定 格式 意义 宋体 正文 下划线 输入信息 斜体 提示信息 图形界面格式约定 格式 意义 “” 窗口名称 普通菜单项或树状结构菜单项 【】 窗口中的按钮窗体中的选项 连续选择菜单及其子菜单或树状结构 III 键盘操作约定 格式 意义键1 键盘上的键名 键1+键2 在键盘上同时按下两个键 鼠标操作约定 格式 意义 单击 按下鼠标左键点击某一对象 双击 连续两次鼠标左键打开某一对象 右击 选中某一对象按下鼠标右键 拖放 按住鼠标左键不放移动鼠标到指定位置,放开鼠标键 告别标志 格式 意义 提示: 提醒某些操作可能会导致一些严重的后果,请用户谨慎使用 注意 提供一些应用关键
4、的描述 举例: 列举实例以便用户加深理解 前提: 进行某一操作之前,必须先完成的操作 定义: 定义内容中出现术语 意见反馈 感谢您使用我们的产品及用户手册。或是对本手册中有疑问,或者对 PowerMILL 二次开发操作有自己的见解和方法,欢迎你通过电话(020) 38888630,传真 020-38888635,电子邮件 反馈给我们,我们 期待您给予我们好的建议和意见。 I 目 录 1 二次开发的要求 . 2 1.1 .NET Fram ework . 2 1.2 安装 PowerSolutionDOTNetOLE 2 1.3 帮助 . 2 2 开始使用 PowerSolutionDOTNe
5、tOLE 3 2.1 添加 PowerSolutionDOTNetOLE 引用 . 3 2.2 修复错误的引用 . 4 2.3 更新 PowerSolutionDOTNetOLE 控件 . 5 2.4 使用 PowerSolutionDOTNetOLE 类 . 5 3 clsPowerMILLOLE 类的使用 7 3.1 简介 . 7 3.2 PowerMILL 示例 1 . 8 3.2.1 设计用户界面 . 8 3.2.2 连接 PowerMILLConnect 方法 9 3.2.3 执行命令Execte 方法 . 10 3.2.4 执行命令并返回信息ExecuteEx 方法 . 10 3.
6、2.5 获取激活体素的名称GetActiveEntityName 方法 11 3.2.6 返回元素的属性GetEntitySize方法 12 3.2.7 获取 PowerMILL 资源管理器中存在的元素列表GetEntitylist 方法 14 3.2.8 刀具路径变换 . 14 3.2.9 连接刀具路径 . 15 3.2.10 完整代码 . 16 3.2.11 进一步增强 . 19 3.3 PowerMILL 示例 2 . 20 3.3.1 设置用户界面 . 20 3.3.2 将 PowerMILL 作为”引擎”使用 . 21 3.3.3 控制 PowerMILL 的窗体属性SetWindo
7、wState 21 3.3.4 设置项目 . 23 3.3.5 项目处理 . 24 3.3.6 进一步增强 . 28 4 使用 Ini 文件和注册表 29 4.1 INI 文件 29 4.1.1 读 INI 文件 . 29 4.1.2 写 INI 文件 . 30 4.2 注册表 . 30 4.2.1 读注册表 . 31 4.2.2 写注册表 . 31 5 封装应用程序 . 33 5.1 添加安装项目 . 33 5.2 自定义安装 . 35 5.3 生成安装包 . 37 2 1 二次开发的要求 1.1 .NET Framework 因二次开发使用 PowerSolutionDOTNetOLE 作
8、为开发控件,所经他对开发的环境有一定的要求。 PowerSolutionDOTNetOLE 可用于任何的.Net 语言中,目前支持所有版本的 VB.NET 和 Visaual Studio .NET,我们可以使用所有的 VB.NET 或者 Visual Studio.NET开发环境中对 PowerMILL 进行二次开 发。 但是需要注意的一点是,该控件只是支持.NET Framework v1.1 用以上的版本。 提示: 建议使用开了环境为 Visual Studio 2005, 安装了 Visual Studio 2005后, 系统会配置上.NET 2.0, 满足开发要求。 本教程中的开发环
9、境是 Visual Studio 2005。 1.2 安装 PowerSolutionDOTNetOLE 最新版的 PowerSolutionDOTNetOLE 安装文件在 Delcam 网的主页上。所以您可以从网站中获取最新的 版本。 下载最新版本地址 http:/ 单击链接并下载控件 解压下载文件到临时的目录 双击Setup.exe 根据提示完成安装 1.3 帮助 帮助文件的开启路径: 【开始】【程序】【Delcam】【PowerSolutionDOTNetOLE】 3 2 开始使用 PowerSolutionDOTNetOLE 2.1 添加 PowerSolutionDOTNetOLE
10、引用 首先是创建一个新 VB.NET 项目(详细查看 VB.NET手册关于创建新项目的一部分)。 在开发环境内,你可以看到如图所示的解决 方案资源管理器。如果该管理器没有显示,你可 以使用菜单显示:【视图】【解决方案资源管 理器】 右键“引用”节点,选择“添加引用” 这个窗体是用于添加链 接控件。 单击“浏览”选项卡 将“查找范围”定位于 PowerSolutionDOTNetO LE安装的路径(例如: 缺省路径是 C:Program FilesDelcam PLCPowerSolutionDOT NetOLE API Classes) 选择 PowerSolutionDOTNet OLE.d
11、ll, 并单击打开。 单击【确定】 4 如果你展开了“引用”节点,你可以在引用当中看到 PowerSolutionDOTNetOLE 新的引用会被创建。在“解决安装资源管理器”中选择 PowerSolutionDOTNetOLE引用,你就会看到属 性窗体(如果没有显示,使用功能键 F4 查看) 确保复制到本地的属性值是True,该设置的缺 省值是True,但是必须注意的是该设置不能够 更改为False。 如果设置为True,项目就会把 DLL 文件复制到 项目的保存路径, 表示这个版本的 DLL 控件会在 你的应用程序建立时安装到目标路径。 这个会防 止出现一些控件错误,例如缺少 DLL 控件
12、等错 误。 2.2 修复错误的引用 项目引用控件的注册信息保存在项目中,如果这个引用出现了错误,你就不能够完成你的项目和测试 您的项目,如下图所示为丢失了 PowerSolutionDOTNetOLE 的引用。 这种错误可能出现在控件已经被删除的情 况。 错误的引用会在“解决方案管理器”中 标 识 出来。如图所示。 5 修复这一个错误, 在你的项目的引用中右键 PowerSolutionDOTNetOLE 节点,并选择“移除” 接着操作的步骤就是 2.1 章节的添加 PowerSolutionDOTNetOLE引用。 2.3 更新 PowerSolutionDOTNetOLE 控件 因为你的应
13、用程序已经把控件复制到当前目录中,而 PowerSolutionDOTNetOLE 控件的版本是在你建 立 VB.NET 项目时使用的版本。安装并更新控件的版本对你的应用程序的应用没有不适应的错误。使用旧 版本的控件 DLL,应用程序也能够正常的运行。如果你希望能够使用新版本的 DLL控件中的新功能函数, 你需要做的是,打开你的 VB.Net 程序并正常的运行程序,该引用会自动的更新到新的控件,并把新的控 件复制到当前的目录中。 2.4 使用 PowerSolutionDOTNetOLE 类 PowerSolutionDOTNetOLE类允许你通过代码连接到每一个 Delcam 的产品。此外,
14、这一个类是共享的, 这表示你可以使用 OLE连接到 PowerMILL,项目下的所有的表格、类、模块等都可以使用同一个 OLE 的连 接。 使用控件中的所有类,你可以每次引用全部的“命名空间”,例如: 从你的应用程序的设计视图框中的主窗体中, 双击标题栏。 VB.NET 会自动进入 Form_Load 事件代码中。 如果你输入: PowerSolutionDOTNetOLE 然后再按下.键,VB.NET会出现命令提示,如下图所示: 6 示例中的连接 PowerMILL 和执行宏命令,你会使用: 这些代码会比较长,并且比较难明白意思。所以你可能使用“快捷键”通过使用IMPORTS 语句指定类。
15、在窗体、类或者模块代码的第一行,你可以设置“快捷键”,例如: 你可以使用这些定义好的“快捷键”来访问类。 例如: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load PowerSolutionDOTNetOLE.clsPowerMILLOLE.Connect() PowerSolutionDOTNetOLE.clsPowerMILLOLE.Execute(“CREATE TOOL ; BALLNOSED“) End Sub Imports P
16、MILL = PowerSolutionDOTNetOLE.clsPowerMILLOLE Imports PSHAPE = PowerSolutionDOTNetOLE.clsPowerSHAPEOLE Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load PMILL.Connect() PMILL.Execute(“CREATE TOOL ; BALLNOSED“) End Sub 7 3 clsPowerMILLOLE类的使用 3.1 简
17、介 使用 clsPowerMILLOLE 类,可以直接的将你的应用程序和 PowerMILL 相连。 下面的表格将把 clsPowerMILLOLE 类的函数功能显示出来。 clsPowerMILLOLE类元素 名称 描述 更多信息 GUIDisplayed 用于显示/隐藏 PowerMILL 的菜单,工具栏等 示例 2 IsConnected 用于检查 OLE 连接是否已经和 PowerMILL 连接 Visible 设置 PowerMILL 应用窗体是否可见 示例 2 CloseOLEConnections 取消PowerMILL的OLE 连接 Connect 创建 PowerMILL 的
18、 OLE 连接 示例 1 ConnectToNew 不管 PowerMILL 是否已经运行,创建一个新的 PowerMILL OLE接口 示例 2 DialogsOff 关闭弹出信息提示对话框 示例 1 DialogsOn 打开弹出信息提示对话框 示例 1 DoesGroupExistInInfoList 用于检查当前项目中的体素参数列表是否存在一组设置 示例 2 Execute 执行一句或多句命令 示例 1 ExecuteEx 执行一个宏命令并返回值到命令框中 示例 1 GetActiveEntityName 返回激活类型中的激活体素名称 示例 1 GetEntityList 返回指定的类型
19、的体素的信息列表 示例 1 GetEntityParameterInfo 使用 DoesGroupExistInInfoList 和 ParseParameterInfoForSetting 函数,计算出指定的体素的变 量,返回变量值到指定的数组中 示例 2 GetEntitySize 返回指定体素的最小/最大值(除了刀具、组合、残留模 型、用户坐标系和 NC 程序) 示例 1 GetLastCreatedEntityName 返回指定的体素的名称 ParseParameterInfoForSetting 通过使用 GetEntityParameterInfo在指定的组和设置值中, 搜 索需要
20、的值,返回正确的值 示例 2 SetWindowState 设置 PowerMILL 窗体是最小化或者最大化 示例 2 StartAndConnectToPowerMILL 如果 PowerMILL 已经运行,则进行连接;如果没有运行, 则会自动打开一个新 PowerMILL 节点,并进行连接 Version 返回当前连接 PowerMILL 的版本号 8 3.2 PowerMILL 示例 1 PowerMILL 示例 1 会带领你引领你通过创建一个窗体,并计算刀路,移动刀路到毛坯或者模型的顶部, 然后多次复制到毛坯或者模型的底部,或者指定的位置。 已经完成的项目存在于ExamplesPowe
21、rMILL_Tutorial_1a目录下。该示例所涉及的方法有: Connect,Execte,ExecuteEx,DialogsOff,DialogsOn,GetEntityList,GetActiveEntityName,和 GetEntitysize. 3.2.1 设计用户界面 这一节包括建立用户界面,从开始 PowerMILL 连接,和开始新的 VB.NET应用程序,添加 PowerSolutionDOTNetOLE控件的引用。 在窗体的界面设计中,如下图所示设置界面,更改界面中各控件的属性 9 通过在“解决方案资源管理器”中选择,Form1 节点右键, 从弹出菜单中选择“查看代码”,
22、进行代码的查看。 使用 IMPORTS 语句进行clsPowerMILL的快捷键设置。 3.2.2 连接 PowerMILLConnect方法 Connect 方法是用于建立应用程序的 OLE 连接。 该方法可以用于 clsPowerMILL,clsPowerSHAPE和clsCopyCAD三个类。 这一个连接必须在其它操作之前。 Connect 可以返回 True 各False,这就取决于 OLE和应用程序是否成功连接。 双击界面中的【应用】按钮,将时行按键事件代码,以下代码是用于检查OLE连接是否成 功连接 Imports PowerSolutionDOTNetOLE.clsPowerMI
23、LLOLE Imports PMILL = PowerSolutionDOTNetOLE.clsPowerMILLOLE Public Class Form1 Inherits System.Windows.Forms.Form End Class Private Sub cmdApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdApply.Click 建立OLE连接并进行检查 If PMILL.Connect = False Then 提醒用户 MsgBox(“确保PowerMI
24、LL正在运行.“) 退出子程序 Return End If End Sub 10 注:每一次程序中的【应用】按键被单击,Connect 方法都会被使用,这不会造成运行出错, 如果 OLE 连接已经存在,调用 Connect 方法会自动简单地重复利用这个连接 注意: 最终完成的 cmdApply_Click 事件代码请查看已经建立的完整的示例 3.2.3 执行命令Execte 方法 该方法用于应用程序执行 PowerMILL 宏命令,该方法适用于 clsPowerMILL,clsPowerSHAPE 和 clsCopyCAD类。 你可以使用这个方法来执行单个宏命令,例如: 你也可能将多个宏命名合
25、成一个组,使用多个命令于一行当中。如下面的命令执行效果与上面一致 3.2.4 执行命令并返回信息ExecuteEx 方法 该方法用于执行单个宏命令,并返回执行的信息打印到命令框当中。 例如: 需要注意的是该命令只执行单行命令,有一些返回值缺省的会以对话框的形式显示。 为了解决这一个问题,你必须在打印值之前,先把对话框信息提示关闭,这样强行将返回值打印在命 令框中。 关闭对话框信息提示的命令是:DialogsOff 方法。例如: PMILL.Execute(“EDIT BLOCKTYPE LIMITS“) PMILL.Execute(“EDIT BLOCK RESETLIMIT 0“) PMIL
26、L.Execute(“EDIT BLOCK RESET“) PMILL.Execute(“EDIT BLOCKTYPE LIMITS“,“EDIT BLOCK RESETLIMIT 0“,“EDIT BLOCK RESET“) Dim Toolpaths As String Toolpaths = PMILL.ExecuteEx(“PRINT ENTITY TOOLPATH“) 11 注意:在你使用 DialogsOff 方法之后,对应的你应该使用 DialogsOn 方法,把对话框信息提示打开。 因为这在 PowerMILL 手工操作时,必须出现一些提示性的窗体。 3.2.5 获取激活体素的
27、名称GetActiveEntityName方法 该方法用于查找指定的激活体素的名称,并返回一个选定的体互名称。你可以使用同样的方法,用于 全部的体素。 添加以下的代码到 cmdApply click 事件当中 在你輸入”PMILL.GetActiveEntityName(”后, 你可以看到一个可选项的列表, 你可以指定一种体素。 例如: 我们稍后会遇到同样的体素列表会出现于其他的方法。 如果 PowerMILL 没有指定的激活元素或者是不存在这些元素,那么则返回空值。你可以使用这个方法 对激活的元素进行名称的存储,并且检查元素是否激活。添加以下的代码: Dim ToolpathSize As
28、String PMILL.DialogsOff() ToolpathSize = PMILL.ExecuteEx(“SIZE TOOLPATH Orig Toolpath“) PMILL.DialogsOn() Dim ActiveToolpath As String = PMILL.GetActiveEntityName(enumPowerMILLEntityType.pmToolpath) 12 使用 F5 功能键随时的测试你的应用程序。 3.2.6 返回元素的属性GetEntitySize方法 这个方法用于返回刀具路径,边界,参考线,毛坯,特征或者模型的最小/最大值。 对于所有的 Pow
29、erMILL 元素,你可以使用同类的方法,类似于 GetActiveEntityName方法,你可以指 定需要访问的元素。 像 PowerMILL 元素一样,你可以指定访问元素的名称(对于毛坯或者模型可以使用空的字符串),并 且定义 6 个变量用于保存元素大小的属性值。 例如: GetEntitySize 方法会返回 True 或者False,这取决于需要判断的元素的大小是否存在。你可以使用 这一特征来判断毛坯或者模型是否存在,如下你所看到的。 在我们的应用程序中,你第一步需要做的时找到激活刀具路径的最小/最大 Z 值,用这两个值进行判 断我们需要移动到开始点时的距离,在 Apply butt
30、ons click 事件中添加以下代码: 接下来, 如果用户在毛坯的顶部或者底部选择了刀具路径的开始或者结束, 我们需要保存毛坯的大小。 就像用户选择了存在的模型一样。添加以下的代码到 Apply buttonclick 事件当中: Dim Xmin, Xmax, Ymin, Ymax, Zmin, Zmax As Double PMILL.GetEntitySize(enumPowerMILLEntityType.pmPattern, “1“, Xmin, Xmax, Ymin, Ymax, Zmin,Zmax) 定义保存刀具路径的最小和最大Z值的变量 Dim TP_Xmin, TP_Xma
31、x, TP_Ymin, TP_Ymax, TP_Zmin, TP_Zmax As Double 获取存在的刀具路径 如果激活的刀具路径没有计算(例如,只是没批处理) 我们可以侦察这一项内容 因为GetEntitySize函数会返回False If PMILL.GetEntitySize(enumPowerMILLEntityType.pmToolpath, ActiveToolpath, _ TP_Xmin, TP_Xmax, TP_Ymin, TP_Ymax, TP_Zmin, TP_Zmax) = False Then MsgBox(“激活的刀具路径没有计算。“) Return End I
32、f 13 定义保存刀具路径开始或者结束的创建的坐标系变量 Dim StartZ, EndZ As Double 如果刀具路径的开始或者结束使用了毛坯,我们还需要获取它的大小. If optStartBlock.Checked = True Or optEndBlock.Checked = True Then 保存毛坯大小的变量 Dim Blk_XMin, Blk_XMax, Blk_YMin, Blk_YMax, Blk_ZMin, Blk_ZMax As Double 获取毛坯大小,同时检查毛坯是否已经定义,注意我们你元素名称一样使用了空字符串 If PMILL.GetEntitySize(
33、enumPowerMILLEntityType.pmBlock, “, _ Blk_XMin, Blk_XMax, Blk_YMin, Blk_YMax, Blk_ZMin, Blk_ZMax) = False Then 提醒用户当前没有定义毛坯 MsgBox(“当前没有定义毛坯。“) Return End If 保存我们需要的值 If optStartBlock.Checked = True Then StartZ = Blk_ZMax End If If optEndBlock.Checked = True Then EndZ = Blk_ZMin End If End If 如果刀具路径
34、的开始或者结束了模型,我们还需要获取它的大小. If optStartModel.Checked = True Or optEndModel.Checked = True Then 保存模型大小的变量 Dim Mdl_XMin, Mdl_XMax, Mdl_YMin, Mdl_YMax, Mdl_ZMin, Mdl_ZMax As Double 获取模型大小,并同时检查当时有没有模型 If PMILL.GetEntitySize(enumPowerMILLEntityType.pmModel, “, _ Mdl_XMin, Mdl_XMax, Mdl_YMin, Mdl_YMax, Mdl_Z
35、Min, Mdl_ZMax) = False Then 提醒用户没有定义模型 MsgBox(“项目中没有模型。“) Return End If 保存我们需要的值 If optStartModel.Checked = True Then StartZ = Mdl_ZMax End If If optEndModel.Checked = True Then EndZ = Mdl_ZMin End If End If 如果用户指定的从顶部的距离计算到底部的距离 If optEndDistance.Checked = True Then EndZ = StartZ - CDbl(txtDistance
36、.Text) End If 14 注意,上面的代码中,我们使用了CDbl()这一个VB.NET 函数,进行文本框的值转变了Double 变量类 型 我们知道当前刀具路径的位置,在那个地方刀具路径应该开始,在那个地方结束。 现在,我们正准备添加以下的命令中,用于产生新的刀具路径。以下的操作步骤: 保存项目中的当前刀具路径列表。 把刀具路径从当前位置移动到需要的开始点。 使用步距的值,做出多个刀具路径的备份,直到复制的刀路达到底部的点。 提取新项目中的刀具路径列表,并判断是否需要进行变换刀路。 将所有的刀具路径连接到一齐。 3.2.7 获取 PowerMILL 资源管理器中存在的元素列表 GetE
37、ntitylist 方法 该方法用于返回指定的 PowerMILL 元素的列表。 该方法使用于全部的 PowerMILL 元素,你必须定义 3 个变量进行保存元素的值,分别是元素的数量, 元素的名称;激活元素的索引。 例如: 在我们进行激活的刀具路径变换之前,我们现在可以使用当前项目中的刀具路径名称。 添加以下代码到 cmdApply_clicl 事件当中。 3.2.8 刀具路径变换 现在我们可以添加了一些必须宏命令,进行刀具路径的变换。 首先:我们需要把激活的刀具路径变换到开始的位置,添加以下的代码: Dim Num As Integer, Names() As String, Active
38、 As Integer PMILL.GetEntityList(enumPowerMILLEntityType.pmToolpath, Num, Names, Active) MsgBox(“激活的刀具路径是“ & Names(Active) & “) Dim Orig_Num As Integer, Orig_Names() As String, Orig_Active As Integer PMILL.GetEntityList(enumPowerMILLEntityType.pmToolpath, Orig_Num, Orig_Names, Orig_Active) 首先,我们将刀具路径
39、移动到开始点位置 Dim StartZMove As Double = StartZ - TP_Zmin PMILL.Execute(“EDIT TOOLPATH TRANSFORM POINTX 0“) PMILL.Execute(“EDIT TOOLPATH TRANSFORM POINTY 0“) PMILL.Execute(“EDIT TOOLPATH TRANSFORM POINTZ “ & StartZMove.ToString(“0.#“) PMILL.Execute(“EDIT TOOLPATH TRANSFORM DELETE N“) PMILL.Execute(“PROCE
40、SS TPXFORM“) 15 注意以上的代码中使用到”startAmove.toStirng”,这是必须要把字符串转换数字,从而作为其中的 宏命令中的一部分。这个格式的转换是“实数”,并且是取 3 位有效位。 我们现在添加 Z 方向的刀具路径变换代码,在事件中添加以下的代码: 注意到以上的代码中,我们使用了数学函数 Math.Abs,用于返回一个数值的绝对值。”Math”函数 是.NET Framework 中的一部分,可以用于定义数学函数,例如 Math.Sin,Math,Sqrt,Math.Cos 等等。 3.2.9 连接刀具路径 在最近的工作,我们需要做的就是将变换后的刀具路径附加到最
41、终完成的刀具路径中。首先我们需要 判断那些刀具路径是最新变换创建出来的,并且与旧的刀具路径区分开来。 添加以下的代码到 cmdApply_Click 事件中 以步距值进行刀具路径Z向的变换 Dim Stepdown As Double = CDbl(txtStepdown.Text) Stepdown = Math.Abs(Stepdown) 循环变换,直到到达Z向底部 Dim CurZ As Double = StartZ - Stepdown Do While CurZ EndZ PMILL.Execute(“EDIT TOOLPATH TRANSFORM POINTZ “ & -Step
42、down.ToString(“0.#“) PMILL.Execute(“PROCESS TPXFORM“) CurZ -= Stepdown Loop 获取新的元素列表 Dim New_Num As Integer, New_Names() As String, New_Active As Integer PMILL.GetEntityList(enumPowerMILLEntityType.pmToolpath, New_Num, New_Names, New_Active) 使用变量来存储新创建的刀具路径列表 Dim NewToolpaths(-1) As String For i As
43、Integer = 0 To New_Num - 1 标识刀具路径是否已经存在 Dim Fnd As Boolean = False For t As Integer = 0 To Orig_Num - 1 检查名称是否已经存在原来的旧列表中 If Orig_Names(t) = New_Names(i) Then Fnd = True Exit For End If Next If Fnd = False Then如果名称没有找到,则表明是新创建的刀具路径,我们把它的名称保存下来 ReDim Preserve NewToolpaths(NewToolpaths.Length) NewTool
44、paths(NewToolpaths.Length - 1) = New_Names(i) End If Next 16 现在我们已经把新创建的刀具路径给存储在数组当中,我们从第一个创建的刀具路径,并把余下的刀 具路径附加到该刀具路径当中,在附加完成后,把余下的刀具路径删除。 添加以下的代码,并完成应用程序。 3.2.10 完整代码 完整的用户代码如下所示: 将新的刀具路径附加到一起 数组中的第一个元素,第一个刀具路径是我们需要添加附加的目标路径 For i As Integer = 1 To NewToolpaths.Length - 1 PMILL.Execute(“EDIT TOOLPA
45、TH “ & NewToolpaths(0) & “ APPEND “ & NewToolpaths(i) & “) PMILL.Execute(“DELETE TOOLPATH “ & NewToolpaths(i) & “) Next Imports PowerSolutionDOTNetOLE.clsPowerMILLOLE Imports PMILL = PowerSolutionDOTNetOLE.clsPowerMILLOLE Public Class Form1 Inherits System.Windows.Forms.Form Private Sub cmdApply_Cli
46、ck(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdApply.Click 建立连接并进行检查 If PMILL.Connect = False Then MsgBox(“确保PowerMILL正在运行!“) 退出子程序 Return End If Dim ActiveToolpath As String = PMILL.GetActiveEntityName(enumPowerMILLEntityType.pmToolpath) 检查刀具路径是否激活 If ActiveToolpath = “ T
47、hen 如果不存在激活的刀具路径,则提醒用户并退出子程序 MsgBox(“确保存在激活的刀具路径。“) Return End If 定义保存刀具路径的最小和最大Z值的变量 Dim TP_Xmin, TP_Xmax, TP_Ymin, TP_Ymax, TP_Zmin, TP_Zmax As Double 获取存在的刀具路径 如果激活的刀具路径没有计算(例如,只是没批处理) 我们可以侦察这一项内容 因为GetEntitySize函数会返回False If PMILL.GetEntitySize(enumPowerMILLEntityType.pmToolpath, ActiveToolpath,
48、 _ TP_Xmin, TP_Xmax, TP_Ymin, TP_Ymax, TP_Zmin, TP_Zmax) = False Then 17 MsgBox(“激活的刀具路径没有计算。“) Return End If 定义保存刀具路径开始或者结束的创建的坐标系变量 Dim StartZ, EndZ As Double 如果刀具路径的开始或者结束使用了毛坯,我们还需要获取它的大小. If optStartBlock.Checked = True Or optEndBlock.Checked = True Then 保存毛坯大小的变量 Dim Blk_XMin, Blk_XMax, Blk_YM
49、in, Blk_YMax, Blk_ZMin, Blk_ZMax As Double 获取毛坯大小,同时检查毛坯是否已经定义 注意我们你元素名称一样使用了空字符串 If PMILL.GetEntitySize(enumPowerMILLEntityType.pmBlock, “, _ Blk_XMin, Blk_XMax, Blk_YMin, Blk_YMax, Blk_ZMin, Blk_ZMax) = False Then 提醒用户当前没有定义毛坯 MsgBox(“当前没有定义毛坯。“) Return End If 保存我们需要的值 If optStartBlock.Checked = True Then StartZ = Blk_ZMax End I