本发明公开了基于图元组合模型的矢量化符号动态标绘方法,属于数字处理的技术领域。
背景技术:
目前对于动态矢量化符号的实现有两种方法:①在已有的软件基础上利用其二次开发语言及自身的图形编辑功能来实现,如Mapinfo公司的MapBasic语言和Arclnf08.01的ArcMap模块中的交互符号设计系统StyleManage;②针对具体软件提供的功能来设计、绘制符号,如Maplnfo公司的MapX组件。虽然以上方法各有特点,但是使用较复杂,需要开发人员花费大量时间熟悉软件使用方法,并且这类画图软件所绘制的矢量符号对其平台依赖性很强,需要对已经绘制好的矢量符号进行小的修改,比如:角度的变化、宽度的变化等,都相当于重新再绘制一个新的符号。同时,由于各软件的差异,构建出的动态符号缺乏通用性,无法跨平台移植。矢量标绘文件与矢量标绘加载代码不能有效分离,两者之间耦合性高。不利于再修改等后期操作,增加了开发人员的工作量。
技术实现要素:
本发明的发明目的是针对上述背景技术的不足,提供了基于图元组合模型的矢量化符号动态标绘方法,将XML文件和math标签结合起来用以得到对应于基本图元模型的动态矢量标识,实现了符号的动态标绘,解决了XML文档与结构耦合度高,后期难以对矢量符号扩展,跨平台移植难的技术问题。
本发明为实现上述发明目的采用如下技术方案:
基于图元组合模型的矢量化符号动态标绘方法,包括如下步骤:
A、建立基本图元模型库;
B、描述符号XML文件,所述符号生成XML文件包括:描述符号应用场景的根节点以及分别描述主控制点集、从属控制点集的子节点,所述描述主控制点集的子节点从属于根节点,描述从属控制点集的子节点从属于描述主控制点集的子节点,其中,
根节点包含但不限于图元集信息,图元集包含用于组合生成符号的各基本图元,
描述主控制点集的子节点包含但不限于:主控制点位置信息以及描述用于计算主控制点位置信息运算的math标签,主控制点集为决定各图元形状的点的集合,
描述从属控制点集的子节点包含但不限于:从属控制点位置信息以及描述用于计算从属控制点位置信息运算的math标签,从属控制点集为配合各主控点确定图元形状的点的集合;
C、解析符号XML文件获取对应于基本图元模型库的矢量标识,提取各矢量标识的主控制点位置信息、从属控制点位置信息;
D、依据基本图元模型库,根据步骤C解析得到的矢量标识以及提取的主控制点位置信息、从属控制点位置信息标绘图元,组合各图元生成符号。
进一步的,所述基于图元组合模型的矢量化符号动态标绘方法中,步骤B描述的符号XML文件中,根节点还包含扩展集,扩展集包含用于组合生成符号的组合图元。
进一步的,所述基于图元组合模型的矢量化符号动态标绘方法中,根节点、描述主控制点集的子节点、描述从属控制点集的子节点都包含描述自身与其它节点相互关系的索引信息。
作为所述基于图元组合模型的矢量化符号动态标绘方法的再进一步优化方案,步骤C中所述从属控制点位置信息根据从属控制点和主控制点的位置关系提取。
进一步的,所述基于图元组合模型的矢量化符号动态标绘方法,步骤A中建立的基本图元模型库包括:线图元、圆图元、圆弧图元、矩形图元、曲线图元、多边形图元。
本发明采用上述技术方案,具有以下有益效果:
(1)本发明提供了一种标绘动态符号的方法,用XML来绘制矢量符号实现了描绘文件和绘制平台的分离,通过解析符号XML文件得到对应于基本图元模型的矢量标识,再结合math标签实现了矢量标识的动态调整,进而实现了符号的动态标绘,提高了绘图精度,节省了大量学习专业绘制矢量图标软件的时间,为后期的矢量符号扩展、扩平台移植提供了极大的方便。
(2)本发明还提供了三维扩展空间,为未来实现立体化、空间化呈现矢量符号提供了可能,可拓展至地质勘探、建筑等领域。
附图说明
图1为动态矢量符号的图元组合模型。
图2为动态标绘矢量化符号的示意图。
图3为需绘制的钳击箭头符号。
图4为标识出图3所示符号主控制点、从属控制点的矢量符号。
图5为解析XML文件后表达的矢量标识。
图6为调整控制点后得到的矢量标识。
具体实施方式
下面结合附图对发明的技术方案进行详细说明。本发明旨在解决XML文档与结构耦合度高的问题,提出一种动态矢量符号标绘方法,使得标绘出的符号在后期能够得以扩展并跨平台移植。XML本身只是使用元素和属性来描述而不提供用来显示数据的方法,这使得矢量标绘文件与矢量标绘加载代码有效分离,math标签定义的数学运算和XML文件提取的信息相结合可以得到对应于基本图元模型的矢量标识,这大大简化了矢量符号的标绘过程,减轻了开发人员的工作量。
为了解决动态矢量化符号标绘中存在的诸多问题,本说明提供了一种新的针对动态矢量符号的标绘方法,并运用开源的TinyXML的解析XML解析库对文件进行解析,使用简单,容易上手。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。该方法充分利用可扩展标绘语言XML强大的自我描述能力、开放性、平台无关性和灵活性特点,建立一种通用的动态矢量符号标绘的方法,本矢量标绘规范基于Utf-8字符集,并参考了W3C制定的XML标准和Math标准。
动态矢量符号的图元组合模型如图1所示,通过解析矢量化符号描述文件,读取主控制点,进而计算出从属控制点,然后从图元模板库获得基础图元并进行组合,最后生成对应动态矢量符号。
该矢量标绘文件以XML格式进行存储,其文件包含一个根节点,即场景根节点,根节点下面有4个子节点,分别是主控制点集、从属点集、图元集和扩展。
(1)详细的结构框架如下所示:
<场景根节点>
<主控点集>...</主控点集>
<从属点集>...</从属点集>
<图元集>...</图元集>
<扩展></扩展>
</场景根节点>
(2)文件标签的详细描述
●主控点集
标签名称:CtrlPoints
父节点:Scene
子节点:CtrlPoint
属性:无
●主控制点
标签名称:CtrlPoint
父节点:CtrlPoints
子节点:无
属性:x轴相对坐标,y轴相对坐标,z轴相对坐标
值:控制点集
●从属点集
标签名称:DependentPoints
父节点:Scene
子节点:DependentPoint
属性:无
值:无
●从属点
标签名称:DependentPoint
父节点:DependentPoints
子节点:CtrlPointIndexs,DependentPointCoord
属性:无
值:主控点索引信息、从属点坐标信息
●主控点索引集
标签名称:CtrlPointIndexs
父节点:DependentPoint
子节点:CtrlPointIndex
属性:无
值:主控点索引信息集合
●主控点索引
标签名称:CtrlPointIndex
父节点:CtrlPointIndexs
子节点:无
属性:索引信息,包含一个相关主控点的索引值
值:无
●从属点位置
标签名称:DependentPointCoord
父节点:DependentPoint
子节点:math
属性:无
值:生成点位置的相关数学逻辑,按x、y、z的顺序存放
●图元集
标签名称:Primitives
父节点:Scene
子节点:Primitive
属性:无
值:组成标绘的图元集合
●图元
标签名称:Primitive
父节点:Primitives
子节点:PointIndex、Interpolation、PrimitiveType
属性:name,type,isfilled
值:组成标绘的单个图元
●点集
标签名称:PointIndex
父节点:Primitive
子节点:CtrlPointIndex,DependentPointIndex
属性:
值:无
●插值参数
标签名称:Interpolation
父节点:Primitive
子节点:无
属性:无
值:插值参数值
●图元样式
标签名称:PrimitiveType
父节点:Primitive
子节点:无
属性:无
值:图元样式序号
●扩展
标签名称:Extension
父节点:Primitive
子节点:AddedCtrlPoint
属性:无
值:新增点集
●新增点集合
标签名称:Extension
父节点:Scene
子节点:AddedCtrlPoint
属性:无
值:新增点集合
●新增点
标签名称:AddedCtrlPoint
父节点:Extension
子节点:math
属性:新增点初始坐标
值:新增点坐标的数学逻辑
(3)math标签详细说明
●加法
标签名称:mplus
子节点:包含多个数学逻辑标签,各标签代表加数
●乘法
标签名称:mmult
子节点:包含多个数学逻辑标签,各标签代表乘数
●除法
标签名称:mfrac
子节点:包含两个子节点,分别代表被除数和除数
●乘方
标签名称:mpow
子节点:包含一个子节点,代表底数
参数:包含一个参数,代表指数
●常量
标签名称:mn
值:一个双精度浮点数
●变量
标签名称:mi
值:一个在前文引用过的索引值
为了方便动态矢量符号的绘制,定义如表1的基本图元,表1所示基本图元组成本发明涉及的基本图元模型库。
表1基本图元定义表
通过对以上XML文件标签和math标签的详细描述,根据框架结构对标识进行标准格式存储。步骤如下:
1、建立坐标轴,确定主控制点、并由主控制点确定从属控制点表达式;
2、根据结构框架及标签表达矢量符号;
(3)从属点相关注意事项
从属点是根据两个控制点求得的。由CtrlPointIndexs可以求得从属点所依附的两个控制点。按CtrlPointIndexs所表示的控制点下标的顺序,我们将这两个控制点依次表示为(x1,y1)和(x2,y2)。不同从属点所依赖的控制点有可能不一样,但数目都是2,所以我们就用(x1,y1)和(x2,y2)表示两个控制点。从属点的位置和其所依附的控制点有关,计算从属点的核心问题即是获取从属点与控制点之间的关系公式。
以上信息为对动态符号的节点等的定义描述,完成文件描述以后,对文件进行解析及表达,如图2所示。
基本图元模型库中有对点、线、矩形、圆、弧线、曲线六种基本图元的定义,并且完成对矢量符号的描述文件。
基本图元模型库中的基本图元构成图元模板库,图元模板库中存储的是定义好的一些基本图元类型,包括名称及其属性,属性又包括:标记、表达条件、说明。
图形库借助于QT强大的绘图功能完成对基本图元所定义的点、线、矩形、圆、弧线、曲线的绘制。当完成对图元模型文件的解析之后,从图元模板库中调用基本图元并在图形表达库绘制并动态组合,最终根据坐标表达出矢量符号。
三.附图说明
如图3所示的要求绘制的矢量符号,要求该图两个顶角均为30°。
如图4所示建立好坐标轴,由上文所定义的基本图元对所给符号进行拆分可知,矢量符号顶部的两个三角顶角由折线构成,其余部分由4条曲线构成。根据每个图元所需的基本点数来确定每条曲线上的基本点数。由于该矢量符号具有对称性,所以只需确定x轴右侧的坐标点,经过调整相应对称点的x坐标即可表达另一侧的坐标点。
首先,根据需要赋予主控制点A0至A8合适的坐标,如:主控制点A0:(0.0,0.0,0.0),主控制点A1:(2.0,0.0,0.0)。
其次,主控制点坐标确定以后,由顶角30°以及轴对称可得从属控制点的坐标如下:
从属控制点B0依附于主控制点A1、主控制点A2,主控制点A1、主控制点A2坐标参数表达为(x1,y1,z1)、(x2,y2,z2),因此,从属控制点B0的表达式为:(tan15°×(y1-y2)+x2,-tan15°×(x1-x2)+y2,0)。
同理,从属控制点B1的表达式为(-tan15°×(y1-y2)+x2,tan15°×(x1-x2)+y2,0)。
再次,根据定义的math标签以及表达式表达各个从属控制点的坐标。只举例从属控制点0的表达。
从属控制点0
最后,以点集、基本图元等表达矢量符号的各个部分,进行拼接。本文只举图4中右上顶角绘制的例子。
<Primitive name="图元0"type="Line"isfilled="0">//图元索引值为0,类型为线段,非填充
按折线的索引点顺序连接各点即可。
图5是经过解析平台解析xml文件后所对应的矢量标识,图6是经过对控制点的调整获得的调整后的矢量标识。用户可根据自己的需要调整各控制点来获得自己所需的动态矢量标识。
综上所述,本发明具有以下有益效果:
(1)本发明提供了一种标绘动态符号的方法,用XML来绘制矢量符号实现了描绘文件和绘制平台的分离,通过解析符号XML文件得到对应于基本图元模型的矢量标识,再结合math标签实现了矢量标识的动态调整,进而实现了符号的动态标绘,提高了绘图精度,节省了大量学习专业绘制矢量图标软件的时间,为后期的矢量符号扩展、扩平台移植提供了极大的方便。
(2)本发明还提供了三维扩展空间,为未来实现立体化、空间化呈现矢量符号提供了可能,可拓展至地质勘探、建筑等领域。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案实质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器,或者网络设备等)执行本发明的实施例或实施例的某些部分所述的方法。