明细栏作为工程图的重要组成部分,它用于反映各零部件之间相互关系及其代号(标准件号)、名称、数量、材料等属性信息。为此,如何在三维模型参数化驱动之后生成正确、符合要求的明细栏,是获得高质量工程图的必要前提,也是保证整个三维参数化设计系统可靠性的重要基础川。在SolidWorks2005中提供了2种建立明细栏的方式:一种是基于Exccl表的形式;另一种是完全基于SolidWorks自行开发的、比Excel表功能更强大更方便的明细栏形式。尽管第二种添加方法明显优于前者,但是要能够在参数驱动之后的工程图中自动添加合适的明细栏,不参与任何的人工辅助,必须通过程序控制。基于参数化模型驱动的工程图明细栏自动生成与调整技术是以SolidWorks对于明细栏的后一种添加方法为基础,采用VB语言以及SolidWorks API函数进行工程图明细栏的自动生成与调整,主要包括明细栏模板调用、行数计算、序号调整、高度及列宽的控制以及明细栏内容的填充与修改。
1总体设计思想
三维参数化设计的思想是采用约束来表达产品模型的形状特征,并用一组参数来控制设计结果,从而通过变换一组参数值方便地创建了一系列形状类似的零件,并通过强度和刚度验算合格,自动生成产品的三维模型和工程图。从图1可以看出,明细栏的自动生成与调整是整个三维参数化设计过程的重要组成部分。
在本文所测试的对象产品中,采用先根据企业的需求建立明细栏模板,再通过程序进行添加的方法来实现工程图中明细栏的添加。由于它是在新的装配体零部件更名完成后进行这一系列的操作,因此就不会出现明细栏无法识别的情况;同时在模型参数化驱动完成后,通过相关程序统计部件中的零件数目,并存储在专门的文件或程序控件中,这样在通过程序初步添加明细栏以后写人相应零部件的数量、名称、材料、质量等属性,最后就可以在最终工程图中完成符合企业要求的明细栏的添加过程。
2实现方法与技术
针对三维参数化设计中工程图明细栏的特殊要求,SolidWorks自身提供了BomFeatureBOMTableTableAnnotation等API函数便于技术人员利用二次开发技术控制明细栏的生成与调用。所以,程序控制明细栏生成与调整的过程就是调用SolidWorks相关API函数的过程,具体调用的函数类型及使用方法描述如下。
BOMTable对象是SolidWorks API提供的指向明细栏的对象,它是View对象的卜一级对象,通过ModelDoc2对象的下一级对象SelectionMgr对象的GetSelectedObject5方法获得指向需要建立明细栏的视图的View对象,同时通过View对象InsertBomTable2方法就可以实现程序建立明细栏,在明细栏建立之后通过View对象的GetBomTable方法可以获得指向明细栏的指针,得到指向BOMTable对象的指针后,就可以操作明细栏的属性。在建立明细栏获得指向BOMTable对象指针后,通过BOMTable对象的BomFeature方法可以获得指向BomFeature对象的指针,通过BomFeature对象的ConfigurationTableTypeKeep-MissingItemsSequenceStartNumber等属性和方法就可以对明细栏的模版、类型、是否保持丢失项目以及起始序号等属性进行获取和设置,明细栏出现空白行的情况可以通过BomFeature对象的GetTableAnnotations方法获取指向TableAnnotation对象的指针,通过TableAnnotation对象的DeleteRow方法就可以删除空白的行,通过TableAnnotation的Text属性可以实现零件数量的更新。TabIeAnnotation对象是控制整个BOM最关键的对象,通过该对象的属性和方法的控制可以基木实现对BOM属性的完全设置。
3具体实现步骤
3.1零部件模型的建模要求
在工程图中生成明细栏时,每个零件的相关属性都是要能与材料明细栏所对应的列进行自动链接的,目的是能够通过链接自动在明细栏对应位置写入相关属性。为此,必须在零部件建模时设置其相关属性,图2为某零件的自定义属性,其中与明细栏相关的属性包括重量(Weight)、材料(Materi-al)、序号(No)、代号(DrawingNo )、名称(PartNo)等。
3. 2读取零件数量及相关属性
明细栏自动生成与调整模块是整个二维参数化CAD系统的一部分,要反映的是参数化设计完成之后各个零件和标准件的个数及相关属性。实际上,在输人一组参数并进行驱动(特别是参数变化范围较大)之后,装配体中的零件种类和个数往往会发生变化。为此,只有在驱动完成之后再进行零件个数的读取才能保证最后生成的明细栏内容的正确性。具体读取方式主要采用了选择和遍历技术,逐个遍历装配体模型中零件树的种类与个数并进行统计后写人文件,格式采用:"零件序号/数量"的方式。需要注意的是,装配完成之后应该把装配模型中零件树的顺序按照明细栏的最后要求进行重新排列,目的是能够保证写入文件时记录的数据是按照明细栏的顺序排列的,减少排列出错的可能性。
数据读取的流程如图3所示:
3.3初步生成明细栏
初步生成明细栏是比较重要的一步,通过调用API函数InsertBomTable2,插人预先设置好的明细栏模板,并根据读取零件个数时所保存的文件的行数及其零件序号的最大值判断将要生成的明细栏的行数。接下来,写人记录的"零件序号/数量"的信息,并通过零件序号信息访问对应的零件,读取零件建模时输入的自定义属性值,并以填人或更新TableAnn的Text属性值的方式依次写入到相应的位置。
3. 4调整序号空缺
在装配体中,考虑到某些标准件没有进行装配,装配零件树中也没有相应的零件,在进行读取时就不可能读取这些未装配的零件信息,所以在明细栏相应的位置进行添加空缺行的操作,以便于后续工作中可以进行人工添加,具体方法是对生成的明细栏序号进行连续性判断,只要有空缺的,就插入一个空行,并写人相应的序号值。
相关程序如下:
说明:循环判断是否存在序号不连贯的现象,如果存在,判断某处需要插人几个空行,通过TableAnn的InsertRow函数插人到明细栏中,并在序号一栏写人空缺的序号值。
3.5修改部分零部件名称
参数化驱动完成之后,生成的新的装配体中所有的零部件已经通过零件更名的方式获得了新的名称,但是在2.1所述的零件自定义属性中设置的名称(PartNo)却没有随之发生改变。为了保证明细栏的零件名称属性能够与新生成的系列零件一致,必须进行更名的操作。
核心代码为:
4结束语
基于SolidWorks的工程图明细栏自动生成与调整技术在三维参数化系统中的应用,使整个系统实现了明细栏的自动添加与调整,布局合理、序号连贯、信息详实准确。该技术解决了人工输人明细栏工作量大且烦琐,软件本身的明细栏功能不能够很好地符合国家标准和企业需要等问题,提升了整个三维参数化系统的自动化水平,加快了作图速度。该技术也可供使用其他二维CAD软件的技术人员作为参考。