999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2015-01-04 01:47:33
關(guān)鍵詞:二次開(kāi)發(fā)程序

馬 宇

(遼寧省大伙房水庫(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)的類和接口,通過(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中的繪圖類,根據(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)又稱.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)稱VS)集成開(kāi)發(fā)環(huán)境。本文采用VS2010版本進(jìn)行編譯環(huán)境搭建。考慮使用習(xí)慣和程序的兼容性,CAD采用2007版本,Excel采用2003版本。

首先,在VS中新建一個(gè)項(xiàng)目,模板采用C#下的“類庫(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插件名稱為“MicrosoftExcel11.0ObjectLibrary”。

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

3.2 編程操作Excel文檔

編程可以實(shí)現(xiàn)Excel的大部分功能,具體調(diào)用的類和函數(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)用的類和函數(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;

在新建的類中添加以下代碼:

[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ě)代碼較為繁瑣,可以自定義類和函數(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ù)目多,且格式類似。如果逐一手繪橫斷面,不僅工作量極大,而且準(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ā)程序
淺談基于Revit平臺(tái)的二次開(kāi)發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
西門(mén)子Operate高級(jí)編程的旋轉(zhuǎn)坐標(biāo)系二次開(kāi)發(fā)
淺談Mastercam后處理器的二次開(kāi)發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
試論我國(guó)未決羈押程序的立法完善
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
Micaps3.2 版本二次開(kāi)發(fā)入門(mén)淺析
西藏科技(2015年12期)2015-09-26 12:13:51
ANSYS Workbench二次開(kāi)發(fā)在汽車(chē)穩(wěn)定桿CAE分析中的應(yīng)用
主站蜘蛛池模板: 国产精品无码在线看| 99无码熟妇丰满人妻啪啪| 久久伊伊香蕉综合精品| 97国产成人无码精品久久久| 欧美日本激情| 国产区免费精品视频| 区国产精品搜索视频| 成人福利在线视频| 亚洲天堂日韩在线| 喷潮白浆直流在线播放| 成人午夜久久| 欧美成人免费午夜全| 日韩福利在线视频| 久久精品中文字幕免费| 亚欧成人无码AV在线播放| 日本一本在线视频| 无码免费视频| 亚洲无码一区在线观看| 啪啪免费视频一区二区| 免费国产无遮挡又黄又爽| 国产区福利小视频在线观看尤物| 国产精品爽爽va在线无码观看 | 亚洲欧美人成人让影院| 色综合色国产热无码一| 久久精品国产一区二区小说| 亚洲综合第一区| 久久成人免费| 亚洲美女视频一区| 亚洲成a人在线播放www| 日韩天堂在线观看| 婷婷综合在线观看丁香| 露脸国产精品自产在线播| 精品少妇三级亚洲| 国产欧美精品午夜在线播放| 午夜精品一区二区蜜桃| hezyo加勒比一区二区三区| 国产成人免费高清AⅤ| 熟妇无码人妻| 色综合a怡红院怡红院首页| 综合色在线| 国产人成午夜免费看| 欧美成人精品在线| 国产拍在线| 色综合久久88色综合天天提莫| 国产亚洲精品yxsp| 久久精品日日躁夜夜躁欧美| 黄色污网站在线观看| 亚洲人成影视在线观看| 久久黄色免费电影| 波多野结衣久久精品| 亚洲第一成网站| 美女内射视频WWW网站午夜| 国产第二十一页| 国产精品美女自慰喷水| 国产精品视频第一专区| 国产免费网址| 欧美一级高清片久久99| 日本不卡在线播放| AV天堂资源福利在线观看| 国产成人免费视频精品一区二区| 国模视频一区二区| V一区无码内射国产| 国产午夜精品一区二区三| 一本大道香蕉久中文在线播放| 自拍偷拍欧美日韩| a欧美在线| 亚洲午夜福利精品无码| 久久成人国产精品免费软件| 性色生活片在线观看| 国产成人综合亚洲欧美在| 谁有在线观看日韩亚洲最新视频| 亚洲欧洲日韩综合| 一本一道波多野结衣av黑人在线| 国产99视频免费精品是看6| 亚洲av无码片一区二区三区| 四虎亚洲国产成人久久精品| 香蕉在线视频网站| 久久夜色精品国产嚕嚕亚洲av| 性网站在线观看| 国产高清无码第一十页在线观看| 亚洲天堂区| 免费jjzz在在线播放国产|