AVEVA Marine结构零件名标注二次开发设计

2023-02-22 06:43冯建明
船舶标准化工程师 2023年1期
关键词:二次开发插件命名

冯建明,赵 锐

(上海中远船务工程有限公司,上海 200231)

0 引言

在船舶结构生产设计中,零件名标注是非常重要的一环。由于船舶分段零件众多,零件名标注工作具有繁琐、重复性强、工作量大等特点,往往会占用生产设计工程师大量的时间和精力[1]。由于每个人的出图习惯不同,单凭手工操作难以保持图面样式统一,质量也很难得到保证。若能采用程序实现自动化,则可以在一定程度上降低出错率,改善图纸的出图质量。

目前,使用比较广泛的船舶生产设计软件主要包括TRIBON M3和AVEVA Marine(AM),AM作为TRIBON M3的升级版本,具有更加强大的功能和友好的界面。然而,目前AM软件的二次开发功能仍需完善。以零件号标注功能为例,虽然程序自带相关功能,但标注的信息样式较简单,操作较不便,返工率较高。因此,进行AVEVA Marine结构零件名标注二次开发设计十分必要。

本文基于船舶主流设计软件 AVEVA Marine(AM),使用 C#语言针对零件名的标注进行二次开发设计,以期降低出错率,改善出图质量。

1 程序开发思路

为方便用户进行自定义开发,AM 提供了Vitesse、PML、.Net等二次开发接口和工具,并内置了丰富的类库[2-3]。本文采用.Net二次开发接口,基于C#语言编程,编译环境为Visual Studio 2017。

1.1 AM 零件名的命名规则

零件名标注要有一套统一的命名规则,这是后期程序读取零件名信息的前提。在AM程序中,控制零件命名的环境变量有 2个,分别为TB_PARTNAME_CTRL和TB_PARTNAME_LEVEL,TB_PARTNAME_CTRL定义不同的命名组,AM至少需要FULL和SHORT这2个命名组,以便对应零件的长名和短名。TB_PARTNAME_LEVEL定义同一零件在不同场合中命名组的应用情况。本文二次开发使用FULL命名组,其名字一般由3部分组成,如BLOCK-PANEL-PART,其中,BLOCK代表分段名,PANEL代表组立名或板架名,PART代表零件名。

1.2 程序基本功能

根据生产设计的出图模式,零件名的标注样式见图 1。零件名标注样式包括引出点、引出线和零件名摆放位置线。零件名摆放位置线只有水平和垂直2种方位,以位置线为界共有2部分信息:1)零件名,用户在使用过程中可根据需要选择是否包括分段名信息;2)零件的大小、材质、规格等特征信息。

图1 零件名标注样式

不同类型的零件需要标注的特征信息不同:

1)型材和立柱需要标注规格和材质。

2)肘板要标注大小、厚度、材质、折边尺寸。

3)板材、补板和垫板要标注厚度和材质。

4)面板要标注规格、材质和安装形式。

1.3 程序使用

程序的使用方法越简单越好,导出剖视图后,点击命令,提示用户选择要标注的零件,然后点击摆放位置和摆放方向即可完成一个零件的标注。为提高标注效率,在一个零件标注完成后会继续进入到下一个零件的标注工作中,直到用户选择中止命令才结束流程。

2 主程序编写

2.1 模型选取

模型选取步骤引导用户点击零件模型,并判断用户点击的位置是否为有效模型。若是,则继续进行下一步骤;若不是,则提示用户重新点击,直到用户点击到有效模型或退出按钮为止。模型选取步骤需要用到 Aveva.Marine.Geometry命名空间下的MarModel功能,包括 Name、PartId、PartType、ReflCode等属性。其中,Name表示板架名称,PartId表示零件的内部代号,PartType表示零件类型,RefCode表示镜像信息。若某板架左右对称,则板架创建侧的RefCode为0,镜像侧为1。

2.2 抽取信息

抽取信息步骤需要进一步提取零件名标注所需的有用信息并进行加工,得到图纸需要呈现出的数据。该步骤需要使用 Aveva.Marine.DataExtraction命名空间下的MarDex功能,在创建相应实例后,就可将MarModel模型的属性值作为输入条件进行数据抽取。MarDex功能的抽取流程如下:

1)构建抽取命令语句,如 HULL.PAN(‘B01-GR0B’).BRA(1001).PART_ID.SHO为提取板架名为B01-GR0B,PartId为1001的肘板零件的命令语句。

2)运用Extract函数进行抽取。若Extract的返回值为 0,则表示抽取成功;若返回其他数值,则表示抽取失败。

3)运用NextResult函数获得抽取到的数据类型。

4)根据NextResult函数的返回值,调用具体函数,获得抽取值,并赋值给相关的参数。

NextResult函数的返回值及需要调用的函数情况见表1。

表1 NextResult函数返回值及调用函数

本步骤主要抽取的属性有零件名、板厚、规格和材质,对应的抽取关键字为PART_ID、THI、DESI和QUA。提取完数据后,零件名属性作为第一行信息,其他属性为第二行信息,2行信息通过“/n”连接符组合为一个字符串并输出,以便后续步骤使用。

2.3 图面标注

本步骤主要用于输出标注信息及辅助线,以模型选取步骤中的点为起始点,引导用户依次点击 1个摆放点和1个方向点即可完成零件名的标注。可通过比较方向点与摆放点在x和y两个方向上坐标值差值的绝对值来判断零件摆放方向。若x坐标差值的绝对值较大,则表示零件为水平摆放。文字分隔线的长度由上、下两行文字的长度确定。若不想显示分段名,仅需将首个“-”标注信息隐去即可。本步骤主要用到Aveva.Marine.Drafting命名空间下的MarDrafting功能和Aveva.Marine.Geometry命名空间下的MarContourPlanar功能。MarDrafting功能用于输出线段和文字等信息,MarContourPlanar功能用于构建辅助线段。

2.4 程序流程图

AVEVA Marine结构零件名标注二次开发设计程序流程图见图2。

图2 程序流程图

3 程序框架及加载

要将二次开发程序应用到AM中,需要设计1个可视化框架,并经过编译及程序配置等步骤。

3.1 通用程序框架

通用程序框架是AM提供给程序员使用编程软件开发各种插件的扩展框架,可理解为编程软件程序和 AM 之间的连接纽带。其基本功能由Aveva.AppliationFramework.dll和Aveva.Appliation Framework.Presentation.dll组件提供。

3.2 命令类

用户在使用插件时,通常点击菜单栏或工具条上的按钮,在弹出的插件窗口中进行后续操作。命令类是指继承 Aveva.ApplicationFramework.Presentation命名空间的Command基类。命令类需要定义1个窗口成员以便为基类的Key属性赋值,AM可通过赋值大小追踪相应命令类。此外,命令类还需要具有实现基类的Execute()方法,每点一下命令插件按钮,就会执行一次Execute()方法,并显示窗口成员。

3.3 插件窗口类

插件窗口类为插件的工作界面,用户的最终操作要在插件窗口类中完成。插件窗口类是通过添加C#用户控件来创建的。

3.4 IAddin接口

IAddin是Aveva.AppliationFramework命名空间下的一个虚接口,在编写插件时需要类继承文件来实现此接口。在AM程序加载和启动插件时,会启动该插件IAddin接口的实现类,创建该类的实例并调用其运行入口。

3.5 模块文件

在二次开发程序编译通过后,项目的 DEBUG文件夹下会自动生成1个dll后缀名的动态链接库文件,这是二次开发的执行程序文件。要在AM的启动时加载该程序,将插件加载文件与二次开发执行程序关联。配置文件的文件名格式为<模块名>Addins.xml,其内容如下所示:

每个之间的字符串均代表1个二次开发程序,其通常保持在默认的路径下。若插件没有保存在默认路径下,则要在文件名前给出完整的存放路径。

3.6 自定义菜单

在二次开发程序加载后,还需要设置自定义菜单才能将程序中的命令展示出来。右击工具栏的任意位置,选择Customize会弹出自定义菜单窗口。在窗口的中间栏新建一个按钮,并将按钮的Command属性值指向二次开发程序命令类的 Key值,最后将新建的按钮添加到左边栏的 Command Bars或者Menubar中。在设置全部完成后,可点击按钮执行相关的命令。

4 结论

本文基于船舶主流设计软件 AVEVA Marine(AM),使用 C#语言针对零件名的标注进行二次开发设计。研究表明:二次开发程序简单方便,标注内容清晰明了,弥补了原程序的不足。本文的开发方法具备通用性,可为后续其他功能的开发提供一定借鉴。

猜你喜欢
二次开发插件命名
命名——助力有机化学的学习
浅谈基于Revit平台的二次开发
自编插件完善App Inventor与乐高机器人通信
浅谈Mastercam后处理器的二次开发
有一种男人以“暖”命名
为一条河命名——在白河源
西门子Easy Screen对倒棱机床界面二次开发
基于jQUerY的自定义插件开发
MapWindowGIS插件机制及应用
基于Revit MEP的插件制作探讨