多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > HT For Web 拓撲圖背景設置

HT For Web 拓撲圖背景設置

來源:程序員人生   發布時間:2015-03-19 08:49:31 閱讀次數:4577次

<a target=_blank href="http://www.hightopo.com/"><a target=_blank href="http://www.hightopo.com/" style="font-family: SimSun; line-height: 14pt; font-size: 12px; background-color: rgb(255, 255, 255);"><span style="font-size: 9.75pt; background: rgb(245, 245, 245);" lang="en-US">HT For Web</span></a></a><span lang="en-US" style="font-family: SimSun; line-height: 14pt; font-size: 9.75pt; background: rgb(245, 245, 245);"><a target=_blank href="http://www.hightopo.com/"> </a>的HTML5拓撲圖組件</span><a target=_blank href="http://www.hightopo.com/"><a target=_blank href="http://www.hightopo.com/" style="font-family: SimSun; line-height: 14pt; font-size: 12px; background-color: rgb(255, 255, 255);"><span style="font-size:9.75pt;background:whitesmoke" lang="en-US">graphView</span></a></a><span lang="zh-CN" style="font-family: SimSun; line-height: 14pt; font-size: 9.75pt; background: rgb(245, 245, 245);">背景設置有多種途徑可選擇:</span>

  1. divBackground:通過css設置graphView對應的div背景
  2. Painter:通過graphView.addBottomPainter(function(g, rect){…})來繪制背景
  3. Layer:通過設置graphView.setLayer(['…', '…', '…', …])來將graphView拆分為多個圖層,并為各個圖層命名,再讓不同種類的node通過node.setLayer('…')node設置到graphView對應圖層中

接下來我為大家逐一介紹graphView背景設置方法:

  1. divBackground



     這兩張圖片展現的是設置graphView對應div的background屬性來設置拓撲圖背景,左側的圖片展現的是頁面初始效果,右側展現的是拓撲圖通過縮小和拖拽圖元位置后的效果,從效果上可以看出,拓撲圖的背景的位置和大小并沒有產生改變,不過圖元如何縮放和移動,都保持原來的模樣。

    以下是具體的代碼實現,代碼很簡單,通過gv.getView()來獲得graphView拓撲圖組件對應的div,再向div中設置background屬性。

 

function initGV1(gv){ var dm = gv.dm(), node = new ht.Node(), view = gv.getView(), viewStyle =view.style; node.setImage('res/mac-air.png'); node.setName('13-inch MacBookAir'); node.setPosition(260, 70); dm.add(node); viewStyle.backgroundImage = 'url(res/background.jpg)'; viewStyle.backgroundPosition ='center'; viewStyle.backgroundRepeat ='no-repeat'; }

  1. Painter



     這兩張圖片展現的是通過graphView.addBottomPainter(function(g,rect){...})方法繪制拓撲圖組件背景,通過graphView.addTopPainter(function(f,rect){...})方法來繪制拓撲圖組件的水印效果,左側的圖片展現的是頁面初始效果,右側展現的是拓撲圖通過縮小和拖拽圖元位置后的效果,從效果上可以看出,拓撲圖的背景和水印的位置和大小均產生了改變,都跟隨拓撲圖的縮放和移動而改變。

    仔細的讀者會發現兩張圖片的水印時間是不1樣的,這個水印獲得的是系統當前時間,因此每秒會刷新1次,所以兩張圖片的時間會不1樣,這說明了graphView拓撲圖組件是支持背景和水印刷新的。

    具體的代碼實現也不是很復雜,addBottomPainter和addTopPainter方法的參數都是1個函數實現,函數參數也都為兩個,g和rect,其中g為canvas對應的畫筆,rect為臟區域大小,通過畫筆g可以想拓撲圖上話任意想描繪的圖形,包括圖片、漸變色、多邊形等等。在代碼中addBottomPainter畫的就是灰白相間的背景圖片,addTopPainter繪制的是系統當前時間,最后通過定時器setInterval設置1秒刷新1次graphView拓撲圖組件。

 

function initGV2(gv){ var dm = gv.dm(), node = new ht.Node(); node = new ht.Node(); node.setName('13-inch MacBookAir'); node.setImage('res/mac-air.png'); node.setPosition(260, 70); node.setRotation(Math.PI/2); dm.add(node); gv.addBottomPainter(function(g, rect){ for(var i=0; i<20;i++){ for(var j=0; j<10;j++){ if((i + j)%2 ===0){ g.fillStyle ='lightgray'; }else{ g.fillStyle ='white'; } g.beginPath(); g.rect(i*50, j*50, 50,50); g.fill(); } } g.strokeStyle = 'red'; g.lineWidth = 1; g.beginPath(); g.rect(rect.x, rect.y,rect.width, rect.height); }); gv.addTopPainter(function(g, rect){ g.save(); g.beginPath(); var text = newDate().toLocaleString(); g.font = '40px Arial'; g.strokeStyle = 'red'; g.textAlign = 'left'; g.textBaseline ='top'; g.lineWidth = 5; g.fillStyle ='yellow'; g.strokeText(text, 100,100); g.fillText(text, 100,100); g.fill(); g.restore(); }); setInterval(function(){ gv.redraw(); }, 1000); }

 

  1. Layer



     這兩張圖片展現的是通過graphView.setLayer(['…', '…','…', …])方法將拓撲圖組件分割成'bgLayer', 'edgeLayer', 'nodeLayer'3層,左側的圖片展現的是頁面初始效果,右側展現的是拓撲圖通過縮小和拖拽圖元位置后的效果,從效果上可以看出,拓撲圖的背景和圖元的位置和大小均產生了改變,都跟隨拓撲圖的縮放和移動而改變。

     具體的代碼實現也不是很復雜,通過graphView.setLayer(['…','…', '…', …])方法將拓撲圖組件分割成'bgLayer', 'edgeLayer','nodeLayer'3層,并且圖層根據數組順序自下而上,創建1個寄存背景圖片的bgNode,并設置其屬性為不可選中,設置其graphView圖層為'bgLayer',再通太重載ht.Default.handleImageLoaded方法,在圖片加載完成后設置bgNode的position,最后設置1堆的node節點在nodeLayer圖層上,1堆的edge連線在edgeLayer圖層上。

function initGV3(gv){ gv.setLayers(['bgLayer', 'edgeLayer','nodeLayer']); var center = createNode(), dm = gv.dm(), sm = dm.sm(), bgNode = new ht.Node(); center.setPosition(100, 100); dm.add(center); bgNode.s({ '2d.selectable': false }); bgNode.setImage('bgImage'); bgNode.setLayer('bgLayer'); ht.Default.handleImageLoaded = function(name, image){ var width =image.width, height =image.height, gvH =gv.getHeight(), gvW =gv.getWidth(); if(name == 'bgImage'){ bgNode.setPosition(gvW / 2,gvH / 2); } }; dm.add(bgNode); var count = 30, firstNode, lastNode; for (var i = 0; i < count; i++) { var node =createNode(); if(!lastNode){ firstNode = node; }else{ node.setHost(lastNode); } lastNode = node; node.setPosition( 500 + 150 * Math.cos(Math.PI* 2 / count * i), 100 + 70 * Math.sin(Math.PI *2 / count * i) ); dm.add(node); var edge = new ht.Edge(center,node); edge.s({ 'edge.type':'custom', 'edge.color':'lightgray', 'edge.width': 1 }); edge.setLayer('edgeLayer'); edge.addStyleIcon("toArrow", { position: 19, keepOrien: true, width: 30, height: 15, names: ['toArrow'] }); dm.add(edge); } firstNode.setHost(lastNode); }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 波多野一区二区三区在线 | 成人自拍视频网 | 毛片的网站 | 亚洲欧美日韩图片 | 精品一成人岛国片在线观看 | freesexvideos性大全性亚洲 | 日本在线一区二区 | 国产婷婷一区二区在线观看 | 欧美成人免费一区在线播放 | 亚洲第一毛片 | 琪琪午夜伦埋大全影院 | 亚洲第99页 | 午夜视频观看 | 国产码欧美日韩高清综合一区 | 巨大乳bbwsex欧美高清 | 韩国午夜理伦三级2020豆豌 | xart欧美一区在线播放 | 尤物在线视频观看 | 亚洲第一免费网站 | free gay xxxxvideo 欧美| 在线观看噜噜噜私人影院 | 无遮挡很爽很污很黄很色的网站 | 日本三级日本三级日本三级极 | 欧美一级特黄毛片视频 | 国产五区 | 操操久久 | 伊人丁香婷婷综合一区二区 | 国产午夜精品久久久久小说 | 爱啪网亚洲第一福利网站 | 亚洲视频网站在线观看 | 国产第一页福利 | 麻豆精品不卡国产免费看 | 久久伊人网站 | 午夜一区二区三区 | 亚洲高清视频在线播放 | 欧美激情在线精品一区二区 | 国产免费一级高清淫日本片 | 图片区另类小说 | 欧美24videossex性| 国产中文字幕在线免费观看 | 欧美一区二区三区在线观看 |