AVEVA Marine图纸文件(SDB)的解析
1. 写在前言前
前段时间一直在写Tribon方面的开发。实际上本人是AM(AVEVA Marine)的用户。上次遇到AVEVA的王工程师,在互相交流之后,他想能不能给写一篇介绍AM图纸文件分析的文章。我想随着AM的用户增多,船业对AM感兴趣的朋友也会多起来,就把这块的分析结果以文章的形式记录下来,可以更好的分享给有兴趣的朋友一起交流,这也是一件很愉快的事情。并且,我手上的项目遇到详图大量修改,并无终版定下来。所以,间隙有些时间就写这篇文章。下面从AM的图纸存储方式,分析SDB文件的结构,自己编写的解析库说明。这三个方面进行简单的说明。
2. 前言
AM是AVEVA PDMS和Tribon软件的结合,Tribon作为船人都知道是船厂生产设计的必备工具,也是做的最成功的船舶设计系统,Tribon在船人心目中的地位是难以取代的。在2000年左右开始在国内兴起的时候,多少人拿这个废寝忘食,在电脑上三维船造出来,再把万吨巨轮造出来,其中的过程确实很有享受。PDMS在其他领域尤其是电力,石油的管道建模方面很专长,这方面船人接触的就少些了。后来就是AVEVA把Tribon收购了,就有了AVEVA Marine(简称AM),Tribon也就停止了更新。
大概从2005年开始到现在,AM经历了很多大大小小的不同版本。但是,Tribon船体建模方面的方式还是保留。其中,就有出图方面的沿袭。在出图时的剖图,标准,甚至Vitesse的KCS_Drafting库都是在AM支持的。所以,Tribon用户尤其是船体专业,是很容易转用AM用户。
使用上AM与Tribon相通,但是,在数据存储和工程配置方面出现了很大的不同。其中包括图纸的存储的改变。这篇文件将详细讲解AM的图纸存储。
3. AM的图纸存储
AM的图纸系统由两部分组成,索引库和文件库。其中索引库是存储在AM数据库(数据库叫DABACON)里面,索引的作用是指向文件库的位置。文件库是存储图纸的文件,以.SDB文件结尾。这样的好处是索引好图纸分开,有效降低了图纸数据库的存储压力。如果朋友是Tribon的系统管理员,Tribon的图纸库经常满,需要新建不少子工程。而AM在这方面就可以把所有图纸放在一个数据库里面。而且,图纸可以做到回滚几次(Rollback)。
图纸文件存储在项目文档中,以(工程名)drg的文件夹命名。也可以通过图纸索引库中的DOFIL属性,读取图纸文件的指向。
4. SDB文件解析
图纸文件以SDB文件类型存储,文档内存储了图面上面的几何信息,文字信息,视图信息等。正是这些信息组成了一张完整的设计图纸。在说明SDB文件的结构之前,看一下Drawing Explorer里面的图纸结构。
整个文档以树(Tree)型数据结构的方式存储。抽象一下图纸结构应该如下图:
一个图形的分级结构是分成3个子图层级。这些层级存在于所有图形中,而所有几何图形总是位于子图的第3层级(元件Component)。子图结构可以被用户自由地创建和重新布置。也就是说一个子图就是一个单元,按照对象化程序设计,就是一个对象。
4.1 View节点
树形结构的图纸层次清晰,很方便程序的编写。View节点即视图第1层,在该节点包含了视图名称,视图所包含子视图的指针等信息。
4.2 SubView节点
SubView节点即视图第2层,在该节点包含了子视图名称,子视图所包含元素的指针等信息。
4.3 Component节点
Component即元件,是图纸底层的节点。这个节点主要包含线型和文字。
4.3.1 线型
线型Contour按照多断线Polyline的方式存储。里面包括控制点数量,起始点,其他控制点等信息。
4.3.2 文字
文字是图面表达信息的主要元素。在该节点中包含了字体,文字位置,高度,文字内容等。这里需要说明的是AM12.0和AM12.1中的文字结构还有一些区别。
5. 解析库的使用
为了更好的把设计的图纸显示在更多的平台,尤其是缺少AM软件的地方。出于学习的目的,编写了SDB图纸文件的解析库(目前针对AM12.1的套料图),即TAMDWGSDB121库。
5.1 CViewView类
用于记录第1层View的类,属性和方法如下:
lst_contours 视图中包含的线型列表
lst_text 视图中包含的文字列表
ViewName 视图层得名称
List<_SDB_CONTOUR_>GetContourBySubviewName(string svName) 通过子视图的名称获得子视图的线型列表
5.2 CViewSubview类
子视图的类,结构形式与CViewView类类似
5.3 CViewComponet类
元件类,这个类中包含了图纸中包含的线型和文字。
5.4 CViewPatch类
记录了CViewView类的集合
5.5 SDBLOAD类
此类中的List<CViewPatch> loadSDBFile(stringfilename)函数解析一个图纸文件(SDB文件),并返回所包含的CViewView类。
5.6 SDBClass类
包含了线型和文字的集合类
5.7 其他
TAMDWGSDB121库还提供了输出成图片的函数,以方便用户使用。当然,也可以输出成其它格式,或者显示在其它的平台。
5.8 实例
下面就是一个套料图的图形转换结果。
6 小结
AM采用索引图纸的方式存储图纸,图纸文件采用成熟的Tree数据结构。这种成熟的程序设计思路使得程序运行更加的灵活。通过上面的解析和程序的实践,基本掌握了AM中图纸SDB文件的解析方式。其中还要注意的是图纸中还有Symbol符号,这个Symbol符号需要单独的解析,不在这篇文章中并未进行说明。
————————————————
本文来自:CSDN博主「TriWeb_ton」