<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于WPF的交互式繪圖系統(tǒng)的開(kāi)發(fā)

          基于WPF的交互式繪圖系統(tǒng)的開(kāi)發(fā)

          作者: 時(shí)間:2011-07-20 來(lái)源:網(wǎng)絡(luò) 收藏

          Canvas 是頂級(jí)布局控件,Canvas面板類似傳統(tǒng)的圖形環(huán)境,利用坐標(biāo)位置指定對(duì)象的擺放地點(diǎn)。Canvas的左上角為原點(diǎn),X坐標(biāo)向右,Y坐標(biāo)向下。而一般的圖形的坐標(biāo)原點(diǎn)設(shè)定在區(qū)的左下角,X坐標(biāo)水平向右,Y坐標(biāo)豎直向上,因此可利用的Transform類,通過(guò)設(shè)定Canvas的RenderTransform來(lái)實(shí)現(xiàn)[3]。為了使圖元大小根據(jù)窗口的大小進(jìn)行縮放,可以將Canvas放在Viewbox內(nèi)。以下是實(shí)現(xiàn)坐標(biāo)變換的XAML片段:
          Viewbox>
            Canvas RenderTransformOrigin=0.5,0.5>
          Canvas.RenderTransform>
            TransformGroup >
            ScaleTransform ScaleY=-1 />
          /TransformGroup>
            /Canvas.RenderTransform>
            /Canvas>
            /Viewbox>
            圖形元素的編輯與修改功能主要依靠計(jì)算機(jī)圖形學(xué)的基本原理以及Windows表現(xiàn)層基礎(chǔ)類庫(kù)()來(lái)實(shí)現(xiàn)。的System.Printing命名空間下的PrintDialog類主要用來(lái)實(shí)現(xiàn)打印單頁(yè)或多頁(yè)文件的功能,PrintDialog類顯示一個(gè)打印對(duì)話框,與用戶交互操作來(lái)完成打印功能。
          2.2.3 曲線曲面造型功能
           曲線曲面造型[4]是計(jì)算機(jī)輔助幾何設(shè)計(jì)(CAGD)的核心,也是計(jì)算機(jī)圖形學(xué)的一項(xiàng)重要內(nèi)容。三次B樣條曲線是曲線學(xué)中一個(gè)重要部分,它不但保留了Bezier曲線的優(yōu)點(diǎn),而且克服了其不具備局部性質(zhì)的缺點(diǎn),能更好地表示與設(shè)計(jì)自由型曲線曲面,通過(guò)幾個(gè)控制點(diǎn)的移動(dòng)能形成不同的曲線。提供了繪制B樣條曲線與閉合B樣條曲線的功能。繪制圖形如圖5所示。

          動(dòng)態(tài)生成B樣條曲線的實(shí)現(xiàn)步驟如下:
            (1)設(shè)定一個(gè)點(diǎn)集合ListPoint> mousepts保存鼠標(biāo)左鍵所按下的序列點(diǎn);
            (2)在鼠標(biāo)移動(dòng)過(guò)程中把鼠標(biāo)的當(dāng)前位置作為B樣條曲線的臨時(shí)終點(diǎn),加入點(diǎn)集合mousepts;
            (3)由點(diǎn)集合mousepts中的這些序列點(diǎn)反求B樣條曲線的控制頂點(diǎn)[5];
            (4)利用求出的B樣條曲線的控制頂點(diǎn)得到B樣條曲線上的序列離散點(diǎn);
          (5)將序列離散點(diǎn)依次加入多段線Polyline的Points集合,從而生成B樣條曲線。
          3 圖形數(shù)據(jù)文件的存儲(chǔ)與讀取
          圖形數(shù)據(jù)文件的輸出包含JPG和DXF兩種格式。由于AutoCAD在全世界應(yīng)用非常廣泛,它的數(shù)據(jù)文件格式DXF已經(jīng)成為事實(shí)上的一種標(biāo)準(zhǔn),因此系統(tǒng)提供了自定義的圖形數(shù)據(jù)文件格式與DXF格式相互轉(zhuǎn)換的功能。DXF 文件本質(zhì)上由代碼及關(guān)聯(lián)值對(duì)組成。代碼(通常稱為組碼)表明其后的值的類型。使用這些組碼和值對(duì),可以將 DXF 文件組織到由記錄組成的區(qū)域中,這些記錄由組碼和數(shù)據(jù)項(xiàng)目組成。在 DXF 文件中,每個(gè)組碼和值都各占一行。DXF文件完整的結(jié)構(gòu)[6]如圖6所示。

          程序中設(shè)計(jì)了兩個(gè)基類ReadDXF和WriteDXF來(lái)分別讀取和寫入DXF文件。ReadDXF讀取 DXF 文件,并且從給定段的給定對(duì)象中提取特定代碼和值。與讀取 DXF 文件相比,寫入DXF文件更困難一些,因?yàn)楸仨毐3謭D形的一致性,這樣 AutoCAD 才能找到可接受的文件。AutoCAD 允許省略 DXF 文件中的很多項(xiàng)目,仍然能夠獲得可用的圖形,但文件結(jié)尾處必須存在 EOF 項(xiàng)目。為了簡(jiǎn)便,WriteDXF省略了整個(gè)HEADER段、TABLES 段和BLOCKS 段,只包含 ENTITIES 段。
          隨著計(jì)算機(jī)系統(tǒng)、圖形輸入、圖形輸出設(shè)備的發(fā)展,計(jì)算機(jī)圖形軟件系統(tǒng)也有了很大的發(fā)展[7]。本文詳細(xì)介紹了WPF的系統(tǒng)的功能與設(shè)計(jì),并探討了系統(tǒng)實(shí)現(xiàn)過(guò)程中的若干關(guān)鍵技術(shù)。該系統(tǒng)實(shí)現(xiàn)了其他圖形軟件具有的基本操作,并提供了自定義的圖形數(shù)據(jù)文件格式與DXF格式相互轉(zhuǎn)換的功能,操作方便,靈活,具有可擴(kuò)展性,經(jīng)過(guò)改進(jìn)還可以成為適用于其它行業(yè)的通用的圖形工具軟件。
          參考文獻(xiàn)
          [1] MACDONALD M. Pro WPF in C# 2008:Windows Presentation Foundation with .NET 3.5[M]. New York: Apress,2008.
          [2] NATHAN A. WPF揭秘[M]. 瞿杰,譯. 北京:人民郵電出版社,2008:109-111.
          [3] PETZOLD C. Windows Presentation Foundation程序設(shè)計(jì)指南[M].蔡學(xué)鏞,譯. 北京:電子工業(yè)出版社, 2008:844-845.
          [4] 朱永強(qiáng),魯聰達(dá). 自由曲線曲面造型技術(shù)的綜述[J].中國(guó)制造業(yè)信息化,2003,32(5):110-113.
          [5] 孫家廣,楊長(zhǎng)貴.計(jì)算機(jī)圖形學(xué)[M]. 北京:清華大學(xué)出版社, 1995.
          [6] 譚超,張群會(huì).AutoCAD 的DXF格式文件讀寫方法研究[J].計(jì)算機(jī)與網(wǎng)絡(luò),2009,35(21):46-49.
          [7] 曾慶云. 計(jì)算機(jī)技術(shù)的發(fā)展趨勢(shì)[J]. 機(jī)械研究與應(yīng)用,1996(4):37-38.

          矢量控制相關(guān)文章:矢量控制原理

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();