QTouch SVG組態WEB的使用說明

1. QTouch安裝與使用

1.1 QTouch下載

QTouch軟件的下載可以通過官網地址下載http://sitcsys.com

下載路徑:下載與演示 -> QTouch組態軟件 -> QTouch通用版(2.2.5)

1.2 QTouch安裝

軟件下載完成後,運行安裝程序包,完成軟件的安裝。安裝過程較簡單,具體安裝步驟不再此贅述。

1.3 QTouch繪製系統

軟件安裝完成之後,雙擊桌面快捷方式打開軟件,即可進入QTouch組態軟件。組態軟件界面依次分為:菜單欄、工具欄、工程菜單欄(左樹形)、信息視圖、狀態欄。在工程菜單欄中可以找到"畫面",此項即為繪製系統。

由於QTouch項目是以工程為單位進行管理,在進入繪製系統前,需要先創建工程。依次選擇執行如下操作:

QTouch SVG組態WEB的使用說明


單擊工具欄"新建"按鈕,在彈出的"運行系統"對話框中配置:"工程路徑",配置完成之後 ,單擊"確定"按鈕即可。


以上步驟執行完成後,單擊"工程菜單欄"中的"畫面"按鈕,在隨後出現的"信息視圖"窗口中,右建彈出快捷菜單,如下圖所示:


QTouch SVG組態WEB的使用說明

QTouch SVG組態WEB的使用說明


選擇"新建",則會在"信息視圖"中新添加一個

QTouch SVG組態WEB的使用說明

,此即為新增加的頁面。選中新增加的頁面,並雙擊圖標,即可進入繪製系統界面。繪製系統界面如下圖所示:

QTouch SVG組態WEB的使用說明

1. 繪製畫面

0. 基本控件

QTouch繪製系統提供了基本圖元、基本控件、擴展控件和用戶控件四類。目前在SVG轉換中,只提供了基本圖元。使用基本圖元可以滿足80%監控系統的需求。其中基本控件包括:矩形、直線、箭頭、橢圓、圓角矩形、折線、多邊形、文字和組合動畫。如下圖所示:

QTouch SVG組態WEB的使用說明

0. 屬性配置

QTouch繪製系統內的所有圖元都提供了相對應的屬性設置,包括:背景、大小、鼠標動作、線形、字體、位置、快捷鍵等。在繪製系統中添加圖元后,使用"選擇工具"選中圖元,就可以看到屬性編輯器,如下圖所示:

QTouch SVG組態WEB的使用說明

0. 圖元與數據關聯

選中圖元,在"屬性編輯"器中,單擊"實時關聯"按鈕,在彈出的"關聯設置"中配置所需關聯的數據點即可。注:QTocuh繪製系統已經開放變量關聯數據接口,用戶可根據自己數據採集系統中的數據點標識進行數據關聯。在經過QTouch轉為SVG時,會在圖元附屬信息中包含該圖標數據點標識字段,為WEB端加載和刷新圖元關聯數據提供對應關係。

QTouch SVG組態WEB的使用說明


1. WEB系統加載SVG

0. SVG加載與刷新

現下所有的瀏覽器基本都支持SVG圖元的加載,在WEB系統中前端可直接使用Frame控件加載SVG。SVG加載完成後,用戶的WEB系統可根據自己的業務邏輯按條件控制SVG顯示與隱藏,放大與縮小。

SVG圖元數據刷新的方式有多種,為達到實時數據刷新的目的,可以使用websocket、mqtt等多種通信方式,具體通信過程由用戶系統自行商定。QTouch提供基於Mqtt的完整通信解決方案。

加載SVG代碼片段如下,用戶也可以訪問開源中國,搜索QTouch開源組態軟件獲取完整的Demo代碼,地址:http://120.27.140.246

function getsvg(mqtt_value) {

if (!!window.ActiveXObject || "ActiveXObject" in window)

{

var arr = JSON.parse(mqtt_value);

var linedata = arr.lines[0].data;

var stationid = arr.istation;

}else{

var arr = $.parseJSON(mqtt_value);//將json數據轉換為數據

var linedata = arr['lines'][0]['data'];

var stationid = arr['istation'];

}


if(sid == stationid)

{

//更改svg數據

svg1 = document.getElementById("realView").getSVGDocument();

svg1.documentElement.style.cursor="pointer";


//刷值

var texts = svg1.getElementsByTagName('text');

$.each(texts,function(i,item) {

if(item.childNodes.length > 0)

{

if (!!window.ActiveXObject || "ActiveXObject" in window)

{

var objectid = item.childNodes[3].childNodes[3].attributes['ObjectID'].value;

//獲取圖元上的ObjectID

$.each(linedata,function(l,ltem) {

if(ltem['index'] == objectid && objectid >=0)

{

item.childNodes[1].textContent = ltem['value']//當收到的index等於ObjectID的時候給其賦值

}

});

}else

{

var objectid = item.children[1].children[1].attributes['ObjectID'].value;

$.each(linedata,function(l,ltem) {

if(ltem['index'] == objectid && objectid >=0)

{

item.children[0].textContent = ltem['value']

}

});

}

}

});


}

0. 放大縮小控制

為更加豐富SVG在WEB系統中的體驗效果,QTouch在轉為SVG時已將放大、縮小等操作內置其中,代碼片斷如下。完整的代碼請訪問開源中國,搜索"QTouch開源組態軟件"。

var SVGDocument = null;

var SVGRoot = null;

var TrueCoords = null;

var GrabPoint = null;

var BackDrop = null;

var DragTarget = null;

var width = 800;

var height = 400;

var gridLength = 20;

var scale = 1;

var svgPanel = null;

function Init(evt){

SVGDocument = evt.target.ownerDocument;

SVGRoot = SVGDocument.documentElement;

TrueCoords = SVGRoot.createSVGPoint();

GrabPoint = SVGRoot.createSVGPoint();

BackDrop = SVGDocument.getElementById("BackDrop");

svgPanel = SVGDocument.getElementById("testdrag");

if(document.addEventListener){

document.addEventListener('DOMMouseScroll',scrollZoom,false);

}

window.onmousewheel=document.onmousewheel=scrollZoom;

document.documentElement.style.overflowY = 'hidden'; //???????

}


function scrollZoom(e){

e=e || window.event;


if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){

e.wheelDelta>0 || e.detail >0?zoom(0.9,e):zoom(1.1,e);

}else{

e.wheelDelta>0 || e.detail >0?zoom(1.1,e):zoom(0.9,e);

}

}


function zoom(num,e){

scale *= num;

var sb = getMousePos(e);

var sbx = sb.x;

var sby = sb.y;

svgPanel.setAttribute("transform-origin","0 0");

svgPanel.setAttribute("transform","scale("+scale+"),translate(-"+sbx+",-"+sby+")");

}


function Grab(evt){

var targetElement = svgPanel;

if (BackDrop != targetElement){

DragTarget = targetElement;

DragTarget.parentNode.appendChild(DragTarget);

DragTarget.setAttributeNS(null, "pointer-events", "none");

var transMatrix = DragTarget.getCTM();

GrabPoint.x = TrueCoords.x - Number(transMatrix.e);

GrabPoint.y = TrueCoords.y - Number(transMatrix.f);

}

};


function getMousePos(event) {

var e = event || window.event;

return {'x':e.clientX,'y':e.clientY}

}


function Drag(evt){

GetTrueCoords(evt);

if (DragTarget){

var newX = TrueCoords.x - GrabPoint.x;

var newY = TrueCoords.y - GrabPoint.y;

DragTarget.setAttributeNS(null, "transform", "translate(" + newX + "," + newY + "),scale("+scale+")");

}

};


function Drop(evt){

if (DragTarget){

var targetElement = svgPanel;

DragTarget.setAttributeNS(null, "pointer-events", "all");

if ("Folder" == targetElement.parentNode.id){

targetElement.parentNode.appendChild( DragTarget );

}

else{}

DragTarget = null;

}

};


function GetTrueCoords(evt){

var newScale = SVGRoot.currentScale;

var translation = SVGRoot.currentTranslate;

TrueCoords.x = (evt.clientX - translation.x)/newScale;

TrueCoords.y = (evt.clientY - translation.y)/newScale;

};


分享到:


相關文章: