基于svg標(biāo)準(zhǔn)可自定義圖符的電力系統(tǒng)圖形顯示方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種基于SVG標(biāo)準(zhǔn)可自定義圖符的電力系統(tǒng)圖形顯示方法。
【背景技術(shù)】
[0002] SVG(Scalable Vector Graphics)是由W3C組織發(fā)布的一種基于XML語言的二維圖 形描述語言,用來描述二維矢量及矢量/柵格圖形,具有強大的動態(tài)交互特性,采用文本傳 輸,尺寸小速度快,有很多開源的SVG圖形編輯器可查看和編輯,很多瀏覽器支持查看,SVG 內(nèi)的文字可以為搜索引擎所用,寫在點陣圖像中的文字則不行。
[0003] 作為網(wǎng)絡(luò)矢量圖形文件的工業(yè)標(biāo)準(zhǔn),SVG為電力系統(tǒng)的圖形顯示提供了新的技術(shù) 手段,其開放性、平臺無關(guān)及網(wǎng)絡(luò)發(fā)布等特性,完全滿足電力系統(tǒng)一次接線圖的繪制要求。
[0004] 國調(diào)中心正逐步制定SVG格式的文件描述標(biāo)準(zhǔn),以方便各級系統(tǒng)間的互操作,當(dāng)前 各廠家的監(jiān)控系統(tǒng)圖形平臺都開始轉(zhuǎn)向支持SVG格式的監(jiān)控畫面,但是鑒于電力圖形的復(fù) 雜性,各廠家的技術(shù)實力,實現(xiàn)的產(chǎn)品功能參差不齊,很多產(chǎn)品通過定制編程只實現(xiàn)了常用 電力圖符,而對于復(fù)雜的圖符或特定需要的圖符,就需要重新編寫源代碼,進(jìn)行反復(fù)的修改 調(diào)試。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的是提供一種基于SVG標(biāo)準(zhǔn)可自定義圖符的電力系統(tǒng)圖形顯示方法, 用以解決復(fù)雜電力圖形設(shè)計較為復(fù)雜的問題。
[0006] 為實現(xiàn)上述目的,本發(fā)明的方案包括:
[0007] 基于SVG標(biāo)準(zhǔn)可自定義圖符的電力系統(tǒng)圖形顯示方法,通過SVG圖元顯示電力系統(tǒng) 圖像,SVG圖元包括如下屬性:SVG文件頭;def s,用于存放圖符symbol定義;圖符,用于描述 電力系統(tǒng)對象圖像顯示方式;圖元變換,包括平移、縮放和旋轉(zhuǎn);層數(shù),用于反映圖元加入到 場景的先后順序,后加載的圖元遮擋先加載的圖元;組數(shù),用于圖元分組。
[0008] 圖元具有id屬性;圖元的id屬性和電力系統(tǒng)CIM對象關(guān)聯(lián),用于獲取CIM對象的各 種屬性和值,以對圖元進(jìn)行識別和操作。
[0009] (ΠΜ量測與圖元關(guān)聯(lián)類型分為三類,分別是枚舉類、Text類和數(shù)值類;枚舉類:配置 CIM量測及取值、字符串列表,不同的狀態(tài)量對應(yīng)不同形狀或顏色的開關(guān)圖元,表現(xiàn)在 xl ink: href串指向形狀不同的開關(guān)圖符,或者顏色class配置;Text類:配置CIM量測及量測 擴展類型,直接將值轉(zhuǎn)換成字符串替代svg文本對應(yīng)內(nèi)容,擴展標(biāo)志用于獲取量測的質(zhì)量標(biāo) 志時使用;數(shù)值類:配置(ΠΜ量測及量測擴展類型,系數(shù)及偏移,將計算后的值轉(zhuǎn)換成字符串 替代svg文本對應(yīng)內(nèi)容,擴展標(biāo)志用于獲取量測的質(zhì)量標(biāo)志、統(tǒng)計值、歷史數(shù)據(jù)使用,系數(shù)及 偏移用于將數(shù)值轉(zhuǎn)換成圖形變換需要的幾何尺寸、角度,例如風(fēng)速對應(yīng)的風(fēng)機旋轉(zhuǎn)角度,功 率的棒圖高度。
[0010] 本發(fā)明的方法可靈活繪制電力圖符,包括通用的圖符和因工程需要定制的圖符, 也可將其它系統(tǒng)的圖符迀移進(jìn)本方法的圖符庫,甚至可通過網(wǎng)上下載的免費svg繪制工具 繪制圖符加入到本方法的圖符庫。
[0011]該方法采用靈活的量測關(guān)聯(lián)技術(shù),將圖元屬性與量測關(guān)聯(lián)。圖元可以有多個屬性, 因此,單個圖元可關(guān)聯(lián)一個量測,也可關(guān)聯(lián)多個量測,可支持枚舉型、文本型、數(shù)值型中任意 一種或多種類型數(shù)據(jù)關(guān)聯(lián),可多層級關(guān)聯(lián),從而實現(xiàn)復(fù)雜的組合圖元。
[0012]將QT SVG源代碼解析功能進(jìn)行擴充,以滿足動態(tài)SVg文本的解析需要,不需要為每 個特定的圖符編寫具體的實現(xiàn)代碼和調(diào)試。
[0013]采用QT SVG解析軟件作為基礎(chǔ)SVG解析工具,增加了解析的通用性和完備性,避免 了針對特定圖符編程的局限,減少了自主開發(fā)的工作量和成本,提高了開發(fā)效率,縮短了開 發(fā)周期。
【附圖說明】
[0014] 圖1是繪制工具主畫面;
[0015]圖2是量測關(guān)聯(lián)對話框;
[0016]圖3是屬性選擇對話框;
[0017]圖4是閥組圖元效果圖;
[0018]圖5是風(fēng)機圖元效果圖;
[0019] 圖6是SVG格式頁面顯示流程圖;
[0020] 圖7是運行狀態(tài)直流場圖。
【具體實施方式】
[0021] 下面結(jié)合附圖對本發(fā)明做進(jìn)一步詳細(xì)的說明。
[0022] 本發(fā)明方法的主要工作有:定義圖符繪制的規(guī)則;對通用開源軟件Qt svg庫的功 能擴展;量測數(shù)據(jù)與圖元SVg文本的分類關(guān)聯(lián),動態(tài)SVg文本生成和解析。下面進(jìn)行具體說 明。
[0023] SVG圖元定義的規(guī)則:
[0024] I. svg 文件頭
[0025] 創(chuàng)建包含svg文件頭的空文件(一般通用的svg編輯器均可創(chuàng)建),文件頭主要包括 參數(shù):
[0026] Xml version;
[0027 ] 字符編碼:使用utf-8編碼;
[0028] DOCTYPE: svg 及版本;
[0029] Svg開始的根元素,包含場景的寬、高及名字空間等信息;
[0030] 2.defs
[0031 ]圖符 symbol 定義放在 svg文件的 defs 中:<defs>."〈/defs>
[0032] 3.圖符
[0033]圖元符號(簡稱圖符)描述電力系統(tǒng)對象圖形顯示方式。
[0034] 分類:圖符可以按照現(xiàn)有標(biāo)準(zhǔn)進(jìn)行繪制,稱為標(biāo)準(zhǔn)圖符,也可以根據(jù)實際需要繪 制,稱為定制圖符;
[0035] 圖符的繪制內(nèi)容放在symbol中,圖符必須有id屬性:〈symbol id = 〃xxx〃>…〈/ symbol〉;
[0036] 所有具有id屬性的圖元均是svg根元素的子元素;子元素以下的子元素沒有id;
[0037] 圖符定義type屬性:type = "dynamic〃/^static〃,默認(rèn)static時,可不標(biāo)示,對于 dynamic圖元,在具體增加圖元時需要完整復(fù)制圖符symbol中的內(nèi)容,并用g替代symbol;本 方法的用意在于可獲取圖元的svg文本,方便數(shù)據(jù)關(guān)聯(lián),修改圖元屬性;
[0038] 4.圖元變換(平移、縮放、旋轉(zhuǎn)):
[0039] 采用transform = "matrix (......) 〃屬性4直方法,對每一個選中圖元設(shè)置該屬性;
[0040] 變換屬性獲取方法:記錄圖元第一次加載到場景時的變換矩陣msO,獲取最終的變 換矩陣mt,利用公式mt=ms0*T,則msO ' *mt=ms0 ' *ms0*T = T,計算出T,將變換屬性寫入svg 文件;
[0041] 5.分層:
[0042] 反映圖元加入到場景的先后順序,后加載的圖元遮擋先加載的圖元;
[0043]層數(shù)原則上可以不加限制,為方便操作,定為0 -10層,0層為背景層;
[0044] 層屬性命名:golay = "n",n為層數(shù),沒有層屬性時,默認(rèn)為層數(shù)5;
[0045] 升降層:組圖元內(nèi)各個圖元層屬性同時升一層或降一層;
[0046] 組圖元層數(shù)為其內(nèi)子圖元的最大層;移動時,組圖元作為單個圖元處理,由更高層 的圖元遮擋,介于組內(nèi)最大和最小層級圖元間的圖元不能分別遮擋組內(nèi)圖元;
[0047] 6.分組
[0048] 組屬性命名:gogrp = "GoGrpXXX",XXX為設(shè)置組屬性時選中的第一個圖元的id
[0049 ]組圖元移動:搜索子圖元,修改每個子圖元的變換屬性;
[0050]組圖元刪除:刪除組圖元內(nèi)每個子圖元。
[00511 QT SVG源碼庫功能擴展方法
[0052] QT SVG模塊實現(xiàn)了基本的SVG文本的嵌套解析、文件的加載顯示和保持功能,電力 系統(tǒng)接線圖的繪制復(fù)雜,需要對其進(jìn)行功能擴展,由于QT是開源的軟件,可方便進(jìn)行修改擴 充。主要擴充的功能有:
[0053] 1)支持symbo 1圖符(QT SVG源代碼稱為節(jié)點,一個節(jié)點可由多個子節(jié)點構(gòu)成。下稱 節(jié)點);
[0054] 2)獲取子節(jié)點列表;
[0055] 3)由節(jié)點id獲取和設(shè)置節(jié)點的屬性,屬性包括shape及style、text和動畫屬性;
[0056] 4)由節(jié)點id獲取和設(shè)置節(jié)點svg文本;
[0057] 5)動態(tài)解析svg文本內(nèi)容(包含全部圖元的完整文件,或者是獨立的一個或幾個圖 元);
[0058] 6)獲取所有節(jié)點的id列表
[0059] 7)修改節(jié)點id
[0060] 8)新建、刪除、替換節(jié)點。
[0061 ]功能擴充采用的方法:
[0062]下載QT SVG源碼,源碼采用了模塊化面向?qū)ο笤O(shè)計,采用C++編碼,在C/C++編