亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        宗地圖批量打印軟件的設(shè)計(jì)與實(shí)現(xiàn)

        2013-09-28 07:42:24袁錫豪
        地理空間信息 2013年4期
        關(guān)鍵詞:二次開(kāi)發(fā)按鈕程序

        袁錫豪

        (1.廣東省國(guó)土資源測(cè)繪院,廣東 廣州 510500)

        宗地圖是以宗地為單位編制的地籍圖,主要表示本宗地的地籍要素以及與相鄰宗地的關(guān)系。宗地圖是土地登記發(fā)證資料的組成部分,是土地證書(shū)和宗地檔案的附圖。城鎮(zhèn)地籍調(diào)查是指為了滿足土地登記的需要,利用大比例尺(通常是1∶500)的地形圖對(duì)城鎮(zhèn)及其附近區(qū)域的土地進(jìn)行地籍調(diào)查,獲取和表述每一宗地的權(quán)屬、位置、形狀、數(shù)量、用途等基本情況的一系列工作總稱[1,2]。農(nóng)村宅基地發(fā)證是指為了滿足土地登記的需要,利用中、大比例尺的地形圖或正射影像圖對(duì)農(nóng)村宅基地的位置、權(quán)屬、界線、形狀、數(shù)量和用途等基本情況而進(jìn)行土地調(diào)查等一系列測(cè)繪工作的總稱。不論城鎮(zhèn)地籍調(diào)查還是農(nóng)村宅基地發(fā)證,都需要對(duì)權(quán)屬確定、界址清楚的每一宗土地制作宗地圖并用紙質(zhì)媒介打印出來(lái),以供存檔、發(fā)證使用,因此宗地圖數(shù)量巨大,且可能需要多批量打印。一般來(lái)說(shuō),各宗地圖的比例尺是不一致的,所以打印的比例尺也不一致。盡管AutoCAD的部分版本有批量打印圖形的功能,但只局限于同比例尺的圖形批量打印,而無(wú)法實(shí)現(xiàn)不同比例尺的CASS圖形批量打印。因此,從提高生產(chǎn)效率的角度出發(fā),開(kāi)發(fā)能夠批量打印不同比例尺圖形的軟件已成為必要。

        1 程序界面設(shè)計(jì)及運(yùn)行流程圖

        AutoCAD從2005版開(kāi)始支持.NET API對(duì)其二次開(kāi)發(fā),隨著其版本的提高,AutoCAD.NET API的開(kāi)發(fā)功能已日益完善。.NET API提供了一系列托管的外包類,在MVS平臺(tái)上選擇具有AutoCAD.NET API的程序語(yǔ)言VB.net或C#可易于開(kāi)發(fā)出滿足用戶需求的應(yīng)用程序。AutoCAD.NET API 使用戶可通過(guò)編程利用程序集或庫(kù)顯示的 AutoCAD 和圖形文件的對(duì)象來(lái)操縱它們[3,4],通過(guò)顯示的對(duì)象,它們可被許多不同的編程語(yǔ)言和環(huán)境訪問(wèn)。由于南方CASS軟件制作的宗地圖的圖形和界址點(diǎn)坐標(biāo)表是分開(kāi)的,需要分開(kāi)正反兩面打印,故在軟件設(shè)計(jì)時(shí)分打印圖形和打印表格2步進(jìn)行。根據(jù)實(shí)際工作中的功能需求,程序界面設(shè)計(jì)如圖1所示。

        圖1 程序設(shè)計(jì)界面

        由于VB.net與AutoCAD運(yùn)行在不同的內(nèi)存空間,所以在進(jìn)行二次開(kāi)發(fā)時(shí)首先將其與AutoCAD進(jìn)行鏈接,即引用AutoCAD的對(duì)象、屬性和方法的庫(kù)文件。鏈接的具體方法是:運(yùn)行VB.net,創(chuàng)建一個(gè)VB.net項(xiàng)目,打開(kāi)項(xiàng)目菜單,選擇添加引用;然后選擇COM,復(fù)選2個(gè)COM對(duì)象:AutoCAD2009 type library和AutoCAD/ObjectDBX Common 17.0 Type Library;再編輯VB.net代碼,獲取或創(chuàng)建AutoCAD對(duì)象[5]。在利用.NET API開(kāi)發(fā)AutoCAD時(shí),還需要添加引用acdbmgd.Dll和acmgd.dll 2個(gè)托管程序集類庫(kù),并導(dǎo)入以Autodesk.AutoCAD開(kāi)頭的命名空間Runtime、ApplicationServices、PlottingServices、EditorInput、DatabaseServices、Geometry、Interop.Common等。程序的整體設(shè)計(jì)思路如圖2所示。

        在圖2中,選擇打印機(jī)并設(shè)置紙張規(guī)格在程序設(shè)計(jì)時(shí)需要添加PrintDocument、PrintDialog、PageSetupDialog 3個(gè)控件;選擇宗地圖是利用界面中的“添加文件”按鈕實(shí)現(xiàn)的,這需要利用OpenFileDialog來(lái)顯示一個(gè)對(duì)話框,提示用戶選擇打開(kāi)文件,同時(shí)對(duì)該控件的Filter屬性進(jìn)行了設(shè)置,以便默認(rèn)的情況下選擇的是AutoCAD支持的DWG文件;對(duì)選擇了不需要打印的文件也可以用“刪除文件”按鈕將其刪除;程序是從一個(gè)外部的可執(zhí)行文件使用COM來(lái)控制AutoCAD的外部進(jìn)程,并在進(jìn)程中載入.NET組件。通過(guò)AutoCAD2009遍歷打開(kāi)圖形文件列表中的每一幅宗地圖,所以在點(diǎn)擊窗體中的“打印圖形”或“打印表格”按鈕時(shí),程序會(huì)先檢測(cè)AutoCAD2009是否已經(jīng)啟動(dòng),否則會(huì)創(chuàng)建AutoCAD2009應(yīng)用程序?qū)ο?。AutoCAD每打開(kāi)一幅宗地圖,程序都會(huì)利用.NET API提供的方法讀取AutoCAD系統(tǒng)變量USERR1的值并計(jì)算出圖形的打印比例尺。

        圖2 程序運(yùn)行流程圖

        2 程序?qū)崿F(xiàn)及其功能分析

        南方公司基于AutoCAD二次開(kāi)發(fā)的CASS數(shù)字化測(cè)繪成圖軟件在生成宗地圖時(shí),將圖形的比例尺分母記錄于系統(tǒng)變量USERR1中,并且各宗地圖的圖面也有注記。利用程序批量打印時(shí)各宗地圖的比例尺分母可以從系統(tǒng)變量USERR1中提取,文獻(xiàn)[6]介紹了獲取AutoCAD系統(tǒng)變量的方法。

        利用VB.net 2005作為編程語(yǔ)言和開(kāi)發(fā)工具來(lái)設(shè)計(jì)應(yīng)用程序以完成界面設(shè)計(jì)的各項(xiàng)功能,首先設(shè)計(jì)一個(gè)窗體,在窗體中設(shè)置選擇打印機(jī)和紙張規(guī)格的控件,并設(shè)置了“添加文件”、“刪除文件”、“打印圖形”、“打印表格”和“退出”等5個(gè)命令功能按鈕,再對(duì)各個(gè)功能按鈕設(shè)計(jì)了相應(yīng)的應(yīng)用程序代碼以操縱AutoCAD的運(yùn)行,使AutoCAD自動(dòng)逐幅打開(kāi)選擇的圖形,修改圖形的打印參數(shù)(如打印比例、打印偏移、圖形方向等),并在打印機(jī)準(zhǔn)備就緒時(shí)傳送給打印機(jī)以實(shí)現(xiàn)自動(dòng)批量打印的目的。

        1)選擇打印機(jī)。點(diǎn)擊“選擇打印機(jī)”組合框容器的“名稱”下拉列表框可選擇系統(tǒng)安裝的打印機(jī),點(diǎn)擊“屬性”可選擇紙張規(guī)格[7]。

        Me.TopMost = True'//設(shè)置主窗體始終顯示在最上層窗體之上

        '//增加系統(tǒng)安裝的打印機(jī)到上述文本框中

        Dim strDefaultPrinter As String = prtdoc.PrinterSettings.PrinterName

        For Each strPrinter As String In PrinterSettings.InstalledPrinters

        cbxPrint.Items.Add(strPrinter)

        If strPrinter = strDefaultPrinter Then

        cbxPrint.SelectedIndex = cbxPrint.Items.IndexOf(strPrinter)

        End If

        Next strPrinter

        2)添加文件,選擇需要打印的宗地圖文件,并添加到左邊的列表框中。

        lstFile.Items.Add(OpenFileDlg.FileNames(i) '//將選中的文件添加列表框中

        3)刪除文件。當(dāng)選擇了多余的宗地圖文件時(shí),選中列表框的文件項(xiàng)目,點(diǎn)擊“刪除文件”按鈕可以移開(kāi)。

        lstFile.Items.RemoveAt((lstFile.SelectedIndex))

        4)操縱AutoCAD程序?qū)ο?。要操縱AutoCAD自動(dòng)運(yùn)行,必須先引用AutoCAD的類型庫(kù),然后使用CreateObject和GetObject函數(shù)與AutoCAD建立連接。

        '//獲得正在運(yùn)行的AutoCAD2009應(yīng)用程序?qū)ο?/p>

        acadApp = GetObject("AutoCAD.Application.17.2")

        '創(chuàng)建一個(gè)新的AutoCAD2009應(yīng)用程序?qū)ο?/p>

        acadApp = CreateObject("AutoCAD.Application.17.2")

        5)打印圖形或界址點(diǎn)坐標(biāo)表。在VB.net2005環(huán)境下利用.NET API對(duì)AutoCAD的“PlotDrawing”和“PlotTable”2個(gè)命令進(jìn)行二次開(kāi)發(fā),并導(dǎo)入到系統(tǒng)注冊(cè)表中,以便能在AutoCAD環(huán)境下直接調(diào)用。在程序主窗體中,通過(guò)“打印圖形”和“打印表格”2個(gè)按鈕分別打印宗地圖和界址點(diǎn)坐標(biāo)表。程序代碼分述如下:

        '//取得當(dāng)前文檔和數(shù)據(jù)庫(kù)對(duì)象

        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

        Dim acCurDb As Database = acDoc.Database

        acadApp.Documents.Open(lstFile.Items(i)) '打開(kāi)指定的圖形

        '//獲取AutoCAD系統(tǒng)變量USERR1的值并計(jì)算出圖形的打印比例尺

        Dim deScale as single=Application.GetSystemVariable("USERR1")/1000

        在.net中,有關(guān)數(shù)據(jù)庫(kù)的操作都是通過(guò)“事務(wù)處理”進(jìn)行的。

        '//獲得當(dāng)前文檔和數(shù)據(jù)庫(kù)

        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

        Dim acCurDb As Database = acDoc.Database

        '//開(kāi)始一個(gè)事務(wù)

        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

        '//確定打印范圍

        Dim MaxPoint(1), MinPoint(1) As Double

        MinPoint(0) = pt.X - 86 * deScale : MinPoint(1) = pt.Y -20 * deScale

        MaxPoint(0)=pt.X+90 * deScale : MaxPoint(1)= pt.Y+ 188 * deScale

        Dim MaxPt As New Point2d(MaxPoint(0), MaxPoint(1))

        Dim MinPt As New Point2d(MinPoint(0), MinPoint(1))

        Dim WinArea As New Extents2d(MinPt, MaxPt)

        acPlSetVdr.SetPlotWindowArea(acPlSet, WinArea)

        '//設(shè)置打印類型

        acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices._ PlotType.Window)

        '// 檢查打印機(jī)是否準(zhǔn)備就緒

        If PlotFactory.ProcessPlotState = Autodesk.AutoCAD.PlottingServices.ProcessPlotState.NotPlotting Then

        Using acPlEng As PlotEngine = PlotFactory.CreatePublishEngine()

        '//用一個(gè)進(jìn)程對(duì)話框跟蹤打印進(jìn)程

        Dim acPlProgDlg As PlotProgressDialog = New PlotProgressDialog(False, 1, True)

        End Using'//結(jié)束事務(wù)處理,并釋放Using控制的所有資源

        '//調(diào)用二次開(kāi)發(fā)的plotDrawing打印宗地圖

        acadDoc.SendCommand("_plotDrawing" &vbCr)

        acadDoc.Close(False) '不保存并關(guān)閉圖形

        除上述功能外,程序還在窗體底部設(shè)計(jì)了標(biāo)簽和進(jìn)度條,以顯示當(dāng)前正在輸出打印的圖形文件名和打印進(jìn)度,供作業(yè)人員了解當(dāng)前的打印情況。

        3 結(jié) 語(yǔ)

        本文從權(quán)屬調(diào)查工作的實(shí)際需求出發(fā),運(yùn)用VB.net2005作為編程語(yǔ)言和開(kāi)發(fā)工具,編寫了基于南方CASS軟件制作的宗地圖批量打印程序,并成功應(yīng)用于生產(chǎn)實(shí)踐中。該程序界面友好,運(yùn)行穩(wěn)定,稍加修改也可用于批量打印其他圖形??紤]到南方CASS軟件制作的宗地圖都是圖形和坐標(biāo)表格分開(kāi)的,打印時(shí)需要正、反兩面分開(kāi)打印,故此程序中未設(shè)置打印份數(shù)。經(jīng)過(guò)清遠(yuǎn)市陽(yáng)山縣、清城區(qū)各中心鎮(zhèn)地籍調(diào)查及惠州市博羅縣、龍門縣農(nóng)村宅基地發(fā)證等多個(gè)測(cè)區(qū)的應(yīng)用驗(yàn)證,出圖效率得到數(shù)十倍提高,在實(shí)際工作中對(duì)減少工作量具有實(shí)用意義。

        [1]粵國(guó)土(地籍)字[1999]61號(hào).廣東省城鎮(zhèn)地籍調(diào)查測(cè)量實(shí)施細(xì)則[S].

        [2]TD/T 1001—2012.地籍調(diào)查規(guī)程[S].

        [3]曾洪飛,張帆,盧擇臨.AutoCAD VBA & VB.net開(kāi)發(fā)基礎(chǔ)與實(shí)例教程[M].北京:中國(guó)電力出版社,2008

        [4]陳立新,趙紅梅.基于VB.NET的AutoCAD二次開(kāi)發(fā)[J].現(xiàn)代機(jī)械, 2006(6):13-15

        [5]王哲,吳戰(zhàn)國(guó).基于VB.NET2005在AutoCAD中操縱擬合曲線的研究[J].機(jī)械工程師, 2009(6):21-23

        [6]美國(guó)Autodesk公司.AutoCAD.NET 開(kāi)發(fā)人員手冊(cè)中文版[EB/OL].http://download.csdn.net/ detail/l510319004/4519684,2010

        [7]曹祖圣,蔡文龍,林義證.Visual Basic2005完全開(kāi)發(fā)指南[M].北京:科學(xué)出版社, 2007

        猜你喜歡
        二次開(kāi)發(fā)按鈕程序
        哪個(gè)是門鈴真正的按鈕
        當(dāng)你面前有個(gè)按鈕
        淺談基于Revit平臺(tái)的二次開(kāi)發(fā)
        甘肅科技(2020年20期)2020-04-13 00:30:02
        淺談Mastercam后處理器的二次開(kāi)發(fā)
        模具制造(2019年3期)2019-06-06 02:11:02
        試論我國(guó)未決羈押程序的立法完善
        西門子Easy Screen對(duì)倒棱機(jī)床界面二次開(kāi)發(fā)
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        內(nèi)心不能碰的按鈕
        亚洲福利二区三区四区| 久久亚洲sm情趣捆绑调教| 亚洲AV激情一区二区二三区 | 亚洲一道一本快点视频| 少妇高潮久久蜜柚av| 欧美日韩亚洲中文字幕二区| 中日av乱码一区二区三区乱码| 欧美精品久久久久久三级| 国产精品毛片毛片av一区二区| 色欲色香天天天综合vvv| 中文人妻无码一区二区三区在线| 久久久99精品成人片中文字幕 | 国产一区曰韩二区欧美三区| 亚洲区1区3区4区中文字幕码| 亚洲蜜臀av一区二区三区| 亚洲裸男gv网站| 久久99国产精品尤物| 亚洲麻豆av一区二区| 在线观看亚洲第一黄片| 国产美女在线精品免费观看| 午夜亚洲国产理论片亚洲2020| 青青草视频在线观看视频免费| 午夜精品久久久久久久久| 国内老熟妇对白xxxxhd| 99综合精品久久| 国产精品久久久黄色片| 成人免费直播| 国内久久婷婷激情五月天| 日韩亚洲午夜精品一区二区三区| 国产一区二区视频免费在| 午夜精品一区二区三区的区别| 亚洲AV无码专区国产H小说| 美女被强吻并脱下胸罩内裤视频 | 午夜亚洲AV成人无码国产| 亚洲av成人波多野一区二区| 成在线人免费视频播放| 国产精品一区二区黑丝| 18女下面流水不遮图| 国产精品高潮av有码久久| 亚洲成人av大片在线观看| 国产农村熟妇videos|