本發(fā)明公開了基于圖元組合模型的矢量化符號動態(tài)標繪方法,屬于數(shù)字處理的技術(shù)領(lǐng)域。
背景技術(shù):
目前對于動態(tài)矢量化符號的實現(xiàn)有兩種方法:①在已有的軟件基礎(chǔ)上利用其二次開發(fā)語言及自身的圖形編輯功能來實現(xiàn),如Mapinfo公司的MapBasic語言和Arclnf08.01的ArcMap模塊中的交互符號設(shè)計系統(tǒng)StyleManage;②針對具體軟件提供的功能來設(shè)計、繪制符號,如Maplnfo公司的MapX組件。雖然以上方法各有特點,但是使用較復雜,需要開發(fā)人員花費大量時間熟悉軟件使用方法,并且這類畫圖軟件所繪制的矢量符號對其平臺依賴性很強,需要對已經(jīng)繪制好的矢量符號進行小的修改,比如:角度的變化、寬度的變化等,都相當于重新再繪制一個新的符號。同時,由于各軟件的差異,構(gòu)建出的動態(tài)符號缺乏通用性,無法跨平臺移植。矢量標繪文件與矢量標繪加載代碼不能有效分離,兩者之間耦合性高。不利于再修改等后期操作,增加了開發(fā)人員的工作量。
技術(shù)實現(xiàn)要素:
本發(fā)明的發(fā)明目的是針對上述背景技術(shù)的不足,提供了基于圖元組合模型的矢量化符號動態(tài)標繪方法,將XML文件和math標簽結(jié)合起來用以得到對應于基本圖元模型的動態(tài)矢量標識,實現(xiàn)了符號的動態(tài)標繪,解決了XML文檔與結(jié)構(gòu)耦合度高,后期難以對矢量符號擴展,跨平臺移植難的技術(shù)問題。
本發(fā)明為實現(xiàn)上述發(fā)明目的采用如下技術(shù)方案:
基于圖元組合模型的矢量化符號動態(tài)標繪方法,包括如下步驟:
A、建立基本圖元模型庫;
B、描述符號XML文件,所述符號生成XML文件包括:描述符號應用場景的根節(jié)點以及分別描述主控制點集、從屬控制點集的子節(jié)點,所述描述主控制點集的子節(jié)點從屬于根節(jié)點,描述從屬控制點集的子節(jié)點從屬于描述主控制點集的子節(jié)點,其中,
根節(jié)點包含但不限于圖元集信息,圖元集包含用于組合生成符號的各基本圖元,
描述主控制點集的子節(jié)點包含但不限于:主控制點位置信息以及描述用于計算主控制點位置信息運算的math標簽,主控制點集為決定各圖元形狀的點的集合,
描述從屬控制點集的子節(jié)點包含但不限于:從屬控制點位置信息以及描述用于計算從屬控制點位置信息運算的math標簽,從屬控制點集為配合各主控點確定圖元形狀的點的集合;
C、解析符號XML文件獲取對應于基本圖元模型庫的矢量標識,提取各矢量標識的主控制點位置信息、從屬控制點位置信息;
D、依據(jù)基本圖元模型庫,根據(jù)步驟C解析得到的矢量標識以及提取的主控制點位置信息、從屬控制點位置信息標繪圖元,組合各圖元生成符號。
進一步的,所述基于圖元組合模型的矢量化符號動態(tài)標繪方法中,步驟B描述的符號XML文件中,根節(jié)點還包含擴展集,擴展集包含用于組合生成符號的組合圖元。
進一步的,所述基于圖元組合模型的矢量化符號動態(tài)標繪方法中,根節(jié)點、描述主控制點集的子節(jié)點、描述從屬控制點集的子節(jié)點都包含描述自身與其它節(jié)點相互關(guān)系的索引信息。
作為所述基于圖元組合模型的矢量化符號動態(tài)標繪方法的再進一步優(yōu)化方案,步驟C中所述從屬控制點位置信息根據(jù)從屬控制點和主控制點的位置關(guān)系提取。
進一步的,所述基于圖元組合模型的矢量化符號動態(tài)標繪方法,步驟A中建立的基本圖元模型庫包括:線圖元、圓圖元、圓弧圖元、矩形圖元、曲線圖元、多邊形圖元。
本發(fā)明采用上述技術(shù)方案,具有以下有益效果:
(1)本發(fā)明提供了一種標繪動態(tài)符號的方法,用XML來繪制矢量符號實現(xiàn)了描繪文件和繪制平臺的分離,通過解析符號XML文件得到對應于基本圖元模型的矢量標識,再結(jié)合math標簽實現(xiàn)了矢量標識的動態(tài)調(diào)整,進而實現(xiàn)了符號的動態(tài)標繪,提高了繪圖精度,節(jié)省了大量學習專業(yè)繪制矢量圖標軟件的時間,為后期的矢量符號擴展、擴平臺移植提供了極大的方便。
(2)本發(fā)明還提供了三維擴展空間,為未來實現(xiàn)立體化、空間化呈現(xiàn)矢量符號提供了可能,可拓展至地質(zhì)勘探、建筑等領(lǐng)域。
附圖說明
圖1為動態(tài)矢量符號的圖元組合模型。
圖2為動態(tài)標繪矢量化符號的示意圖。
圖3為需繪制的鉗擊箭頭符號。
圖4為標識出圖3所示符號主控制點、從屬控制點的矢量符號。
圖5為解析XML文件后表達的矢量標識。
圖6為調(diào)整控制點后得到的矢量標識。
具體實施方式
下面結(jié)合附圖對發(fā)明的技術(shù)方案進行詳細說明。本發(fā)明旨在解決XML文檔與結(jié)構(gòu)耦合度高的問題,提出一種動態(tài)矢量符號標繪方法,使得標繪出的符號在后期能夠得以擴展并跨平臺移植。XML本身只是使用元素和屬性來描述而不提供用來顯示數(shù)據(jù)的方法,這使得矢量標繪文件與矢量標繪加載代碼有效分離,math標簽定義的數(shù)學運算和XML文件提取的信息相結(jié)合可以得到對應于基本圖元模型的矢量標識,這大大簡化了矢量符號的標繪過程,減輕了開發(fā)人員的工作量。
為了解決動態(tài)矢量化符號標繪中存在的諸多問題,本說明提供了一種新的針對動態(tài)矢量符號的標繪方法,并運用開源的TinyXML的解析XML解析庫對文件進行解析,使用簡單,容易上手。這個解析庫的模型通過解析XML文件,然后在內(nèi)存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。該方法充分利用可擴展標繪語言XML強大的自我描述能力、開放性、平臺無關(guān)性和靈活性特點,建立一種通用的動態(tài)矢量符號標繪的方法,本矢量標繪規(guī)范基于Utf-8字符集,并參考了W3C制定的XML標準和Math標準。
動態(tài)矢量符號的圖元組合模型如圖1所示,通過解析矢量化符號描述文件,讀取主控制點,進而計算出從屬控制點,然后從圖元模板庫獲得基礎(chǔ)圖元并進行組合,最后生成對應動態(tài)矢量符號。
該矢量標繪文件以XML格式進行存儲,其文件包含一個根節(jié)點,即場景根節(jié)點,根節(jié)點下面有4個子節(jié)點,分別是主控制點集、從屬點集、圖元集和擴展。
(1)詳細的結(jié)構(gòu)框架如下所示:
<場景根節(jié)點>
<主控點集>...</主控點集>
<從屬點集>...</從屬點集>
<圖元集>...</圖元集>
<擴展></擴展>
</場景根節(jié)點>
(2)文件標簽的詳細描述
●主控點集
標簽名稱:CtrlPoints
父節(jié)點:Scene
子節(jié)點:CtrlPoint
屬性:無
●主控制點
標簽名稱:CtrlPoint
父節(jié)點:CtrlPoints
子節(jié)點:無
屬性:x軸相對坐標,y軸相對坐標,z軸相對坐標
值:控制點集
●從屬點集
標簽名稱:DependentPoints
父節(jié)點:Scene
子節(jié)點:DependentPoint
屬性:無
值:無
●從屬點
標簽名稱:DependentPoint
父節(jié)點:DependentPoints
子節(jié)點:CtrlPointIndexs,DependentPointCoord
屬性:無
值:主控點索引信息、從屬點坐標信息
●主控點索引集
標簽名稱:CtrlPointIndexs
父節(jié)點:DependentPoint
子節(jié)點:CtrlPointIndex
屬性:無
值:主控點索引信息集合
●主控點索引
標簽名稱:CtrlPointIndex
父節(jié)點:CtrlPointIndexs
子節(jié)點:無
屬性:索引信息,包含一個相關(guān)主控點的索引值
值:無
●從屬點位置
標簽名稱:DependentPointCoord
父節(jié)點:DependentPoint
子節(jié)點:math
屬性:無
值:生成點位置的相關(guān)數(shù)學邏輯,按x、y、z的順序存放
●圖元集
標簽名稱:Primitives
父節(jié)點:Scene
子節(jié)點:Primitive
屬性:無
值:組成標繪的圖元集合
●圖元
標簽名稱:Primitive
父節(jié)點:Primitives
子節(jié)點:PointIndex、Interpolation、PrimitiveType
屬性:name,type,isfilled
值:組成標繪的單個圖元
●點集
標簽名稱:PointIndex
父節(jié)點:Primitive
子節(jié)點:CtrlPointIndex,DependentPointIndex
屬性:
值:無
●插值參數(shù)
標簽名稱:Interpolation
父節(jié)點:Primitive
子節(jié)點:無
屬性:無
值:插值參數(shù)值
●圖元樣式
標簽名稱:PrimitiveType
父節(jié)點:Primitive
子節(jié)點:無
屬性:無
值:圖元樣式序號
●擴展
標簽名稱:Extension
父節(jié)點:Primitive
子節(jié)點:AddedCtrlPoint
屬性:無
值:新增點集
●新增點集合
標簽名稱:Extension
父節(jié)點:Scene
子節(jié)點:AddedCtrlPoint
屬性:無
值:新增點集合
●新增點
標簽名稱:AddedCtrlPoint
父節(jié)點:Extension
子節(jié)點:math
屬性:新增點初始坐標
值:新增點坐標的數(shù)學邏輯
(3)math標簽詳細說明
●加法
標簽名稱:mplus
子節(jié)點:包含多個數(shù)學邏輯標簽,各標簽代表加數(shù)
●乘法
標簽名稱:mmult
子節(jié)點:包含多個數(shù)學邏輯標簽,各標簽代表乘數(shù)
●除法
標簽名稱:mfrac
子節(jié)點:包含兩個子節(jié)點,分別代表被除數(shù)和除數(shù)
●乘方
標簽名稱:mpow
子節(jié)點:包含一個子節(jié)點,代表底數(shù)
參數(shù):包含一個參數(shù),代表指數(shù)
●常量
標簽名稱:mn
值:一個雙精度浮點數(shù)
●變量
標簽名稱:mi
值:一個在前文引用過的索引值
為了方便動態(tài)矢量符號的繪制,定義如表1的基本圖元,表1所示基本圖元組成本發(fā)明涉及的基本圖元模型庫。
表1基本圖元定義表
通過對以上XML文件標簽和math標簽的詳細描述,根據(jù)框架結(jié)構(gòu)對標識進行標準格式存儲。步驟如下:
1、建立坐標軸,確定主控制點、并由主控制點確定從屬控制點表達式;
2、根據(jù)結(jié)構(gòu)框架及標簽表達矢量符號;
(3)從屬點相關(guān)注意事項
從屬點是根據(jù)兩個控制點求得的。由CtrlPointIndexs可以求得從屬點所依附的兩個控制點。按CtrlPointIndexs所表示的控制點下標的順序,我們將這兩個控制點依次表示為(x1,y1)和(x2,y2)。不同從屬點所依賴的控制點有可能不一樣,但數(shù)目都是2,所以我們就用(x1,y1)和(x2,y2)表示兩個控制點。從屬點的位置和其所依附的控制點有關(guān),計算從屬點的核心問題即是獲取從屬點與控制點之間的關(guān)系公式。
以上信息為對動態(tài)符號的節(jié)點等的定義描述,完成文件描述以后,對文件進行解析及表達,如圖2所示。
基本圖元模型庫中有對點、線、矩形、圓、弧線、曲線六種基本圖元的定義,并且完成對矢量符號的描述文件。
基本圖元模型庫中的基本圖元構(gòu)成圖元模板庫,圖元模板庫中存儲的是定義好的一些基本圖元類型,包括名稱及其屬性,屬性又包括:標記、表達條件、說明。
圖形庫借助于QT強大的繪圖功能完成對基本圖元所定義的點、線、矩形、圓、弧線、曲線的繪制。當完成對圖元模型文件的解析之后,從圖元模板庫中調(diào)用基本圖元并在圖形表達庫繪制并動態(tài)組合,最終根據(jù)坐標表達出矢量符號。
三.附圖說明
如圖3所示的要求繪制的矢量符號,要求該圖兩個頂角均為30°。
如圖4所示建立好坐標軸,由上文所定義的基本圖元對所給符號進行拆分可知,矢量符號頂部的兩個三角頂角由折線構(gòu)成,其余部分由4條曲線構(gòu)成。根據(jù)每個圖元所需的基本點數(shù)來確定每條曲線上的基本點數(shù)。由于該矢量符號具有對稱性,所以只需確定x軸右側(cè)的坐標點,經(jīng)過調(diào)整相應對稱點的x坐標即可表達另一側(cè)的坐標點。
首先,根據(jù)需要賦予主控制點A0至A8合適的坐標,如:主控制點A0:(0.0,0.0,0.0),主控制點A1:(2.0,0.0,0.0)。
其次,主控制點坐標確定以后,由頂角30°以及軸對稱可得從屬控制點的坐標如下:
從屬控制點B0依附于主控制點A1、主控制點A2,主控制點A1、主控制點A2坐標參數(shù)表達為(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)。
再次,根據(jù)定義的math標簽以及表達式表達各個從屬控制點的坐標。只舉例從屬控制點0的表達。
從屬控制點0
最后,以點集、基本圖元等表達矢量符號的各個部分,進行拼接。本文只舉圖4中右上頂角繪制的例子。
<Primitive name="圖元0"type="Line"isfilled="0">//圖元索引值為0,類型為線段,非填充
按折線的索引點順序連接各點即可。
圖5是經(jīng)過解析平臺解析xml文件后所對應的矢量標識,圖6是經(jīng)過對控制點的調(diào)整獲得的調(diào)整后的矢量標識。用戶可根據(jù)自己的需要調(diào)整各控制點來獲得自己所需的動態(tài)矢量標識。
綜上所述,本發(fā)明具有以下有益效果:
(1)本發(fā)明提供了一種標繪動態(tài)符號的方法,用XML來繪制矢量符號實現(xiàn)了描繪文件和繪制平臺的分離,通過解析符號XML文件得到對應于基本圖元模型的矢量標識,再結(jié)合math標簽實現(xiàn)了矢量標識的動態(tài)調(diào)整,進而實現(xiàn)了符號的動態(tài)標繪,提高了繪圖精度,節(jié)省了大量學習專業(yè)繪制矢量圖標軟件的時間,為后期的矢量符號擴展、擴平臺移植提供了極大的方便。
(2)本發(fā)明還提供了三維擴展空間,為未來實現(xiàn)立體化、空間化呈現(xiàn)矢量符號提供了可能,可拓展至地質(zhì)勘探、建筑等領(lǐng)域。
通過以上的實施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案實質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機、服務器,或者網(wǎng)絡設(shè)備等)執(zhí)行本發(fā)明的實施例或?qū)嵤├哪承┎糠炙龅姆椒ā?/p>