• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于.NET編程增強(qiáng)Excel與CAD的數(shù)據(jù)交流功能
      ——以水利工程設(shè)計(jì)應(yīng)用為例

      2015-01-04 01:47:33
      關(guān)鍵詞:橫斷面二次開(kāi)發(fā)控制點(diǎn)

      馬 宇

      (遼寧省大伙房水庫(kù)輸水工程建設(shè)局,遼寧沈陽(yáng)110166)

      基于.NET編程增強(qiáng)Excel與CAD的數(shù)據(jù)交流功能
      ——以水利工程設(shè)計(jì)應(yīng)用為例

      馬 宇

      (遼寧省大伙房水庫(kù)輸水工程建設(shè)局,遼寧沈陽(yáng)110166)

      為解決水利工程設(shè)計(jì)中Excel與CAD的數(shù)據(jù)交流問(wèn)題,采用基于C#.NET編程的方式來(lái)增強(qiáng)CAD對(duì)Excel文件中數(shù)據(jù)的讀取和編輯。

      數(shù)據(jù)交流;Excel;CAD;水利工程設(shè)計(jì)

      1 引言

      Excel和CAD是在水利工程設(shè)計(jì)中廣泛應(yīng)用的商業(yè)軟件,Excel方便保存、編輯表格數(shù)據(jù),CAD有效輔助設(shè)計(jì)繪制工程圖。在設(shè)計(jì)中,工程師們往往需要把大量的Excel數(shù)據(jù)轉(zhuǎn)換成直觀的CAD中的點(diǎn)、線等圖元,在這些圖元的基礎(chǔ)上進(jìn)行工程設(shè)計(jì);同時(shí)也需要把CAD中的一些圖元屬性提取出來(lái)保存到Excel文件中,以便于計(jì)算工程量和確定控制坐標(biāo)等。如何解決好Excel與CAD之間的數(shù)據(jù)交流是提高水利工程設(shè)計(jì)效率和質(zhì)量的重要環(huán)節(jié)。

      Excel和CAD均屬于通用軟件,雖然CAD中個(gè)別功能提供了對(duì)Excel文件的簡(jiǎn)單支持,但由于水利工程上邊界條件復(fù)雜,隨機(jī)性強(qiáng)、設(shè)計(jì)面廣[1],CAD的自帶功能無(wú)法滿足水利工程設(shè)計(jì)中大量數(shù)據(jù)交流便捷、準(zhǔn)確的要求,設(shè)計(jì)人員的數(shù)據(jù)交流操作繁瑣而重復(fù)。

      Excel和CAD軟件均提供了優(yōu)良的二次開(kāi)發(fā)接口,隨著編程技術(shù)的發(fā)展和軟件版本的升級(jí),對(duì)這兩種軟件進(jìn)行二次開(kāi)發(fā)的門(mén)檻也逐漸降低,基于微軟公司提供的.NET平臺(tái)對(duì)Excel和CAD進(jìn)行二次開(kāi)發(fā)就是一種較為便捷的方法。

      2 實(shí)現(xiàn)數(shù)據(jù)交流的思路

      借助Excel和CAD提供的二次開(kāi)發(fā)接口,編寫(xiě)一個(gè)程序,作為橋梁搭接Excel和CAD程序,程序本身應(yīng)具有打開(kāi)、讀取、修改、保存Excel文件和CAD文件的功能,并應(yīng)具備實(shí)時(shí)顯示設(shè)計(jì)成果和簡(jiǎn)潔的操作界面等特點(diǎn)。

      Excel二次開(kāi)發(fā)主要有三種方式:VBA的內(nèi)部開(kāi)發(fā)、COM插件開(kāi)發(fā)和自動(dòng)化服務(wù)開(kāi)發(fā)[2]。CAD提供了五種主要的開(kāi)發(fā)工具,分別是:使用C++的Object-ARX,VB/VBA的ActiveX開(kāi)發(fā),ADS,AutoLisp/VisualLisp以及.NET開(kāi)發(fā)[3]。綜合分析兩個(gè)軟件的二次開(kāi)發(fā)方式,本文選用基于.NET開(kāi)發(fā)CAD并添加Excel的COM插件的方式來(lái)搭建溝通兩個(gè)軟件的橋梁,這種方法相比其他方式組合更容易搭建編譯平臺(tái),可以較為完整地調(diào)用CAD和Excel提供的二次開(kāi)發(fā)接口功能,方便制作窗口界面和實(shí)時(shí)檢驗(yàn)計(jì)算成果。

      .NET開(kāi)發(fā)是基于微軟.NET平臺(tái)直接進(jìn)行CAD二次開(kāi)發(fā)的一種新技術(shù),能夠完全支持.NET開(kāi)發(fā)的CAD版本需高于2006。.NET可以引用CAD提供的對(duì)象庫(kù),進(jìn)而建立自己的動(dòng)態(tài)鏈接庫(kù)程序(*.dll文件),在CAD中加載編譯后的動(dòng)態(tài)鏈接庫(kù)程序,就可以達(dá)到編程操作CAD的功能。通過(guò).NET控制Excel文件的前提是添加Excel的COM組件的引用[4]。COM組件中提供了Excel相關(guān)的類(lèi)和接口,通過(guò)COM組件可以編程創(chuàng)建、顯示、編輯、讀取、保存Excle文件。

      創(chuàng)建一個(gè)CAD可以加載調(diào)用的動(dòng)態(tài)鏈接庫(kù)程序,程序同時(shí)引用ExcelCOM組件。在CAD環(huán)境下啟動(dòng)動(dòng)態(tài)鏈接庫(kù)程序,讀取Excel文檔內(nèi)容,保存到程序的數(shù)據(jù)變量中,然后調(diào)用CAD中的繪圖類(lèi),根據(jù)讀取的數(shù)據(jù)繪圖;或者在CAD中借助提取圖形對(duì)象函數(shù),提取CAD圖紙中的點(diǎn)、線等圖元的基本屬性,通過(guò)程序分析計(jì)算形成需要的數(shù)據(jù)成果,寫(xiě)入到Excel文件中。.NET平臺(tái)上,可以實(shí)現(xiàn)Excel與CAD數(shù)據(jù)的雙向流通,編程思路見(jiàn)圖1。

      圖1 編程溝通Excel和CAD數(shù)據(jù)流程圖

      3 編程實(shí)現(xiàn)操作Excel與CAD

      3.1 編程語(yǔ)言及編譯環(huán)境

      .NET平臺(tái)又稱(chēng).NETFramework,目前最新的是4.5版本。是由微軟開(kāi)發(fā)的一個(gè)致力于敏捷軟件開(kāi)發(fā)、快速應(yīng)用開(kāi)發(fā)、平臺(tái)無(wú)關(guān)性、跨語(yǔ)言編程和網(wǎng)絡(luò)透明化的軟件開(kāi)發(fā)平臺(tái)[5]。.NET包含四種核心語(yǔ)言:VB、VC++、C#和J#[6],本文選用C#進(jìn)行編程,C#是微軟為.NETFramework量身訂做的程序語(yǔ)言[7],具有使用簡(jiǎn)易和功能強(qiáng)大的特點(diǎn)。目前開(kāi)發(fā).NET平臺(tái)程序,最高效的編譯調(diào)試平臺(tái)莫過(guò)于微軟公司推出的VisualStudio(簡(jiǎn)稱(chēng)VS)集成開(kāi)發(fā)環(huán)境。本文采用VS2010版本進(jìn)行編譯環(huán)境搭建??紤]使用習(xí)慣和程序的兼容性,CAD采用2007版本,Excel采用2003版本。

      首先,在VS中新建一個(gè)項(xiàng)目,模板采用C#下的“類(lèi)庫(kù)”,.NET平臺(tái)選擇2.0版本(不同版本CAD對(duì)應(yīng)不同版本.NET,通過(guò)較低版本.NET編譯的程序一般可以在較高版本CAD中運(yùn)行)。在“解決方案”中添加引用“acdbmgd.dll”和“acmgd. dll”,并設(shè)置“復(fù)制本地”為“False”。

      然后,引用Excel的COM插件,不同版本Excel對(duì)應(yīng)的COM插件版本有所不同,2003版本的Excel的COM插件名稱(chēng)為“MicrosoftExcel11.0ObjectLibrary”。

      最后,設(shè)置程序的“調(diào)試”屬性,啟動(dòng)外部程序路徑設(shè)為本機(jī)CAD2007的“acad.exe”程序路徑。至此,程序的編譯平臺(tái)就搭建完成。

      3.2 編程操作Excel文檔

      編程可以實(shí)現(xiàn)Excel的大部分功能,具體調(diào)用的類(lèi)和函數(shù)也非常多,具體可以參考微軟公司提供的COM插件的幫助手冊(cè)。較為基礎(chǔ)和常用的Excel操作為打開(kāi)文檔,讀取、修改單元格內(nèi)容,保存文檔。為了更好應(yīng)對(duì)復(fù)雜的Excel表格格式,本文采用逐單元格讀取/賦值的方式操作Excel文檔。例如打開(kāi)一個(gè)路徑保存在filename變量的*.xls文件,讀取A1單元格內(nèi)容保存在變量ReadCell中,并修改B1單元格內(nèi)容為“Level”,編程主要代碼為:

      (首先添加using Excel=Microsoft.office.Interop.Excel;)

      Excel.Applicationapp=newExcel. Application( );∥新建Excel進(jìn)程

      Excel.WorkbookClassw=(Excel. WorkbookClass)app.Workbooks.open(filename,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type. Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type. Missing,Type.Missing,Type.Missing);∥打開(kāi)文件

      Excel.Worksheetsheet=(Excel. Worksheet)w.Sheets;∥選擇Excel文件sheet

      string ReadCell=((Excel.Range)sheet.Cells[1,1]).Text.ToString( );∥讀取A1單元格中的數(shù)據(jù)

      sheet.Cell[1,2]=”Level”;∥修改B1單元格內(nèi)容為L(zhǎng)evel

      w.Close(null,null,null);∥關(guān)閉文件

      app.Quit( );∥退出Excel進(jìn)程,非常重要,不然Excel的進(jìn)程將一直在電腦后臺(tái)運(yùn)行

      3.3 編程操作CAD

      通過(guò).NET平臺(tái)操作CAD可以實(shí)現(xiàn)CAD的絕大部分功能,可調(diào)用的類(lèi)和函數(shù)非常多,具體可參考Autodesk公司提供的CAD二次開(kāi)發(fā)幫助手冊(cè)。較為基礎(chǔ)和常用的CAD操作有繪制圖元和提取圖元的屬性。例如,根據(jù)數(shù)據(jù)繪制一條多段線和提取某點(diǎn)的坐標(biāo),以下是編程的主要內(nèi)容。

      首先添加using Autodesk.AutoCAD.ApplicationServices;

      using Autodesk.AutoCAD.Runtime;

      using Autodesk.AutoCAD.EditorInput;

      在新建的類(lèi)中添加以下代碼:

      [CommandMethod("SLCAD")] ∥啟動(dòng)程序命令

      publicvoidRunApp( )

      {∥繪制多段線

      intn=pts.Count;∥獲取保存多段線坐標(biāo)的數(shù)組pts的點(diǎn)數(shù)

      Polylineent=newPolyline( );∥新建一個(gè)多段線對(duì)象

      for(inti=0;i<n;i++)∥設(shè)置多段線各節(jié)點(diǎn)坐標(biāo)

      ent.AddVertexAt(i,pts[i],0,0,0);objectIdentId=Append Entity(ent);對(duì)象添加到CAD文件列表中∥提取點(diǎn)坐標(biāo)

      Editoreditor=Autodesk.AutoCAD. Application Services.Application.Document Manager.MdiActive Document.Editor;∥新建一個(gè)編輯對(duì)象

      Prompt Pointoptionsoptions=new Prompt Pointoptions(" 請(qǐng)?jiān)趫D紙上選取點(diǎn)");

      options.AllowNone=true;∥提取坐標(biāo)

      Point3dcenPt=editor.GetPoint(options).Value;∥把點(diǎn)坐標(biāo)保存到cenPt變量中}

      3.4 加載調(diào)用程序

      通過(guò)VS編譯后生成動(dòng)態(tài)鏈接庫(kù)程序。在打開(kāi)的CAD中輸入命令“netload”后彈出對(duì)話框,在對(duì)話框中找到生成的動(dòng)態(tài)鏈接庫(kù)程序路徑,加載程序。然后輸入啟動(dòng)程序的命令,例如上面一個(gè)例子中,需要輸入“SLCAD”命令啟動(dòng)程序功能。

      4 編程實(shí)例

      實(shí)際編程中,可以借助.NET平臺(tái)創(chuàng)建窗口,給Excel文件的開(kāi)啟和關(guān)閉設(shè)置相應(yīng)的按鈕或提示。如果頻繁調(diào)用CAD中的主要函數(shù),每次編寫(xiě)代碼較為繁瑣,可以自定義類(lèi)和函數(shù),把常用的功能模塊化。例如繪制多段線的功能,可以模塊化為函數(shù):

      publicstaticobjectIdAddPline(Point2dCollectionpts,doublewidth)

      ∥函數(shù)的參數(shù)為保存多段線點(diǎn)的數(shù)組和擬畫(huà)多段線的線寬

      {try{intn=pts.Count;Polyline ent=newPolyline( );

      for(inti=0;i<n;i++)

      ent.AddVertexAt(i,pts[i],0,width,width);

      objectIdentId=AppendEntity(ent);

      returnentId;∥返回多段線對(duì)象}

      catch∥程序異常處理

      {objectIdnullId=objectId.Null;returnnullId;}}

      4.1 讀取Excel中橫斷面數(shù)據(jù),在CAD中繪制橫斷面圖

      在水利工程設(shè)計(jì)中,經(jīng)常要在橫斷面圖上進(jìn)行工程布置和計(jì)算工程量等,實(shí)測(cè)橫斷面數(shù)據(jù)通常以Excel文件保存,斷面數(shù)目多,且格式類(lèi)似。如果逐一手繪橫斷面,不僅工作量極大,而且準(zhǔn)確性差。本文通過(guò).NET編程實(shí)現(xiàn)讀取Excel中橫斷面數(shù)據(jù),在CAD中繪制橫斷面圖的功能,即通過(guò)程序讀取如圖2中的Excel數(shù)據(jù),調(diào)整程序參數(shù),在CAD中繪制如圖4的橫斷面圖。

      4.2 在CAD圖中拾取控制點(diǎn),并把控制點(diǎn)坐標(biāo)保存到Excel文件中

      水利工程設(shè)計(jì)中,為了方便工程放樣,需要提供CAD設(shè)計(jì)圖紙中控制點(diǎn)的坐標(biāo)。坐標(biāo)文件通常采用Excel格式保存。對(duì)于控制點(diǎn)較多的圖紙而言,如果采用手動(dòng)的方式逐一獲取控制點(diǎn)坐標(biāo)屬性,輸入到Excel文件里,效率非常低,而且容易出錯(cuò)。本文采用.NET編程的方法,實(shí)現(xiàn)在CAD圖中拾取控制點(diǎn),并把控制點(diǎn)坐標(biāo)保存到Excel文件中,即通過(guò)程序提取如圖5中的CAD圖紙中的控制點(diǎn)屬性,篩選整理控制點(diǎn)坐標(biāo),將坐標(biāo)保存到如圖7的Excel文件中。

      圖2 Excel中橫斷面數(shù)據(jù)格式

      圖3 程序界面截圖

      圖4 程序在CAD中繪圖成果圖

      圖5 CAD文件中控制點(diǎn)位置

      圖6 程序界面截圖

      圖7 提取坐標(biāo)輸入到Excel中成果

      5 結(jié)語(yǔ)

      基于.NET平臺(tái),憑借Excel和CAD提供的二次開(kāi)發(fā)接口,可以較方便地實(shí)現(xiàn)Excel與CAD之間的數(shù)據(jù)交流功能,簡(jiǎn)化水利設(shè)計(jì)過(guò)程中的操作步驟,提高繪圖、計(jì)算的速度和精度。由于篇幅限制,本文只簡(jiǎn)單介紹了Excel和CAD二次開(kāi)發(fā)的最基本功能,在實(shí)際生產(chǎn)工作中,結(jié)合Excel和CAD的二次開(kāi)發(fā)運(yùn)用,有著更大的靈活性和擴(kuò)展空間。

      [1]梁國(guó)偉等.CAD二次開(kāi)發(fā)在水利水電工程制圖中的應(yīng)用[J].水科學(xué)與工程技術(shù),2006(02):50-51.

      [2]郭來(lái)軍.淺談EXCEL二次開(kāi)發(fā)的三種方式[J].遼寧科技學(xué)院學(xué)報(bào),2007(04):23+29.

      [3]王永輝,胡青泥與李紅彩.AutoCAD二次開(kāi)發(fā)方法的研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2007(03):94-96+100.

      [4]斯琴巴圖,楊利潤(rùn).C#winform中嵌入Excel實(shí)現(xiàn)復(fù)雜表格的顯示和控制[J].軟件導(dǎo)刊,2013(04):26-27.

      [5]KarliWatson,ChristianNagel,BeginningVisualC#2010[M],WileyPublishing,2010.

      [6]黃箐,馬德山,項(xiàng)鏈.基于.NET實(shí)現(xiàn)多語(yǔ)言互操作性[J].西北民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2007(02):38-44.

      [7]蔡守允,楊大明,朱其俊.模型試驗(yàn)流速測(cè)量?jī)x器的分析研究[J].水資源與水工程學(xué)報(bào),2007(03).

      TP316

      :B

      :1672-2469(2015)07-0056-04

      10.3969/j.issn.1672-2469.2015.07.021

      馬 宇(1981年—),男,工程師。

      猜你喜歡
      橫斷面二次開(kāi)發(fā)控制點(diǎn)
      城市道路橫斷面設(shè)計(jì)研究
      淺談基于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
      西門(mén)子Easy Screen對(duì)倒棱機(jī)床界面二次開(kāi)發(fā)
      NFFD控制點(diǎn)分布對(duì)氣動(dòng)外形優(yōu)化的影響
      基于風(fēng)險(xiǎn)管理下的項(xiàng)目建設(shè)內(nèi)部控制點(diǎn)思考
      廣州市健康體檢人群種植修復(fù)情況的橫斷面研究
      相似材料模型中控制點(diǎn)像點(diǎn)坐標(biāo)定位研究
      2014年某院醫(yī)院感染橫斷面調(diào)查
      中醫(yī)院醫(yī)院感染橫斷面調(diào)查分析
      台北县| 永泰县| 定陶县| 五莲县| 尉氏县| 江北区| 宜君县| 南昌市| 启东市| 贵溪市| 大竹县| 石屏县| 兴仁县| 乳源| 北宁市| 兴安县| 武川县| 弋阳县| 志丹县| 鄄城县| 巴彦淖尔市| 沁阳市| 靖江市| 双城市| 丰都县| 和田县| 陆丰市| 阿瓦提县| 丰县| 曲水县| 阳新县| 瑞丽市| 宜宾县| 高要市| 临桂县| 赤城县| 中阳县| 凌源市| 芜湖市| 灵丘县| 湘西|