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

編程實現海洋石油工程項目電伴熱材料提取

2020-07-27 02:16:22豐興盛楊富廣黃太安王可民蔣小華史其麒
山東化工 2020年13期
關鍵詞:圖紙程序文本

豐興盛,楊富廣,黃太安,王可民,蔣小華,史其麒

(海洋石油工程股份有限公司建造事業部,山東 青島 266520)

建造事業部海洋石油工程項目電伴熱帶布置圖包含圖紙編號、材料規格數量、回路編號、管線編號、功率、坐標等信息,這些信息靠人工去逐條統計、分析、匯總,勞動強度大、需要時間多、錯誤率高。通過編程,可實現一鍵提取多張圖紙的數據,并對數據進行分類匯總,提高效率和準確性。

本文中采用CSharp編程需要實現以下幾點:

(1)從AutoCAD電伴熱帶布置圖中提取每張圖紙的頁碼、圖紙號、版次、電伴熱材料、回路編號、管線號、功率、坐標等信息;

(2)數據經整理,輸入到所需EXCEL模板中;

(3)對同類材料進行匯總,輸入到EXCEL表格文件中。

1 編程語言的選擇

AutoCAD和Microsoft Office Excel都為C Sharp提供了方便使用的COM組件,本案例編程采用C Sharp語言。

AutoCAD為C Sharp提供的COM組件為Autodesk.AutoCAD.Interop.dll和Autodesk.AutoCAD.Interop.Common.dll;Microsoft Office Excel所提供的COM組件為Microsoft.Office.Interop.Excel.dll。

本案例所論述程序的編程語言為C Sharp,編程工具為Visual Studio 2019;AutoCAD版本為AutoCAD_Architecture_2017,Microsoft Office Excel版本為Microsoft Office 2013。EXCLE能實現不同版本兼容;AutoCAD版本不兼容,如使用其它版本的AutoCAD,需要引用對應AutoCAD版本的COM組件。

2 程序流程

手動統計電伴熱材料時,先將電伴熱布置圖中的材料信息、管線編號、回路編號等信息錄入到EXCEL表格中,再對材料進行匯總,本案例程序同樣遵循這這種業務流程。程序的基本流程參照圖1。

圖1 程序流程

3 讀取圖紙信息

3.1 引用接口文件

在程序中添加引用,選擇AutoCAD應用程序中的Autodesk.AutoCAD.Interop.dll和Autodesk.AutoCAD.Interop.Common.dll文件,引用后出現如圖2兩項。

圖2 程序引用

在程序引用命名空間部分,添加:

using Autodesk.AutoCAD.Interop;

using Autodesk.AutoCAD.Interop.Common;

這樣C Sharp所開發的程序就和AutoCAD之間建立了通訊聯系,可以調用AutoCAD的命令,完成電伴熱帶布置圖信息的讀取。

3.2 打開指定的電伴熱圖

打開指定的AutoCAD電伴熱帶布置圖需要用到以下語句:

AcadApplication AcadApp= (AcadApplication)System.Runtime.

InteropServices.Marshal.GetActiveObject("AutoCAD.Application");

AcadDocument AcadDoc= AcadApp.Documents.Open(fileName, null, null);

其中fileName為電伴熱帶布置圖文件全名(包含文件路徑)。

3.3 讀取信息

通過分析,電伴熱帶布置圖數據提取所需的信息分布在圖3的四個區域。

圖3 圖紙區域劃分

區域1為圖紙信息,包含所需的電伴熱回路編號、對應管線號;

區域2包含電伴熱功率信息;

區域3為圖紙材料表,包含材料的規格、數量、描述等信息;

區域4為圖框信息,包含圖紙編號、版次信息。

通過對圖紙區域的劃分,就可以通過坐標點創建選擇集,分別讀取不同區域的信息。首先,創建全圖的文本選擇集,檢索關鍵字,再通過關鍵字找到圖框,獲得圖框的起點坐標。電伴熱帶布置圖使用統一的圖紙模板,圖框大小及信息的相對位置是一致的,各區域的相對坐標可以通過圖框的起點坐標和距離獲得。

創建選擇集使用AcadSelectionSetAdd方法,在命名空間Autodesk.AutoCAD.Interop中。使用Add方法,創建選擇集后,選擇集是空的,里面沒有任何元素。要選擇區域內文本(包括單行文本和多行文本),需要使用選擇集過濾器,用Select方法來為選擇集添加元素。Select的常見用法為:Select(AcSelect Mode, object Point1, object Point2, object FilterType, object FilterData)。其中,Mode為選擇方法,包括框選、窗選等;Point1、Point2為選擇范圍的起點和終點;FilterType為一個Int16類型的一維數組,標識過濾器的類型(DXF組碼);FilterData為object類型的一維數組,指定要過濾的值。FilterType和FilterData的數組元素數量相同,二者成對出現,組成過濾器列表。常見的過濾器DXF 組碼如表1所示。

表1 DXF 組碼表

通過以上介紹,已經清楚了選擇集的創建,選擇集過濾器的使用,那么創建一個選擇集來選取整個圖面的文本文字,可以用以下代碼:

AcadSelectionSet mySelectionSet = AcadDoc.SelectionSets.Add("SelectKeyWord");

Int16[] FilterType = new Int16[7];

object[] FilterData = new object[7];

FilterType[0] = -4; FilterData[0] = "

FilterType[1] = -4; FilterData[1] = "

FilterType[2] = 0; FilterData[2] = "TEXT";

FilterType[3] = 0; FilterData[3] = "MTEXT";

FilterType[4] = -4; FilterData[4] = "OR>";

FilterType[5] = 8; FilterData[5] = "標準圖框";

FilterType[6] = -4; FilterData[6] = "AND>";

double[] point01 = new double[3];

double[] point02 = new double[3];

point01[0] = double.MinValue;

point01[1] = double.MinValue;

point01[2] = 0;

point02[0] = double.MaxValue;

point02[1] = double.MaxValue;

point02[2] = 0;

mySelectionSet.Select(AcSelect.acSelectionSetCrossing, point01, point02, FilterType, FilterData);

通過選擇集選擇了全圖面的單行文本和多行文本,接下來需要遍歷選擇集中的對象,通過比較對象的文本內容(TextString屬性),找出關鍵字對象,獲得它的插入點(單行文本或多行文本的InsertionPoint屬性)。

double[] ptKeyWord;

for (int i = 0; i < mySelectionSet.Count; i++)

{

AcadText st = mySelectionSet.Item(i) as AcadText;

if (st != null)

{

if (st.TextString.IndexOf(keyWord) > -1)

{

ptKeyWord = st.InsertionPoint;

break;

}

}

else

{

AcadMText mt = mySelectionSet.Item(i) as AcadMText;

if (mt.TextString.IndexOf(keyWord) > -1)

{

ptKeyWord = mt.InsertionPoint;

break;

}

}

}

需要注意的是,在選擇集使用完成后,要及時刪除選擇集,電伴熱圖紙一次需要處理多張,如果沒有及時刪除選擇集,下次將無法創建,會導致程序崩潰。也可以使用安全創建選擇集的方法,在創建選擇集之前,先遍歷現有選擇集,如果有名稱相同的,則刪除。

獲得了關鍵字的插入點,下一步就可以通過插入點,選取一定范圍,來查找圖框對象,本案例中的圖框對象為“LINE”,在設計選擇集過濾器時將“TEXT”和“MTEXT”替換成“LINE”即可。符合要求的“LINE”對象起點(StartPoint屬性)或終點(EndPoint屬性)就是圖框的基準點。接下來就是根據基準點劃分區域,每個區域重復創建選擇集、遍歷選擇集,不斷讀取文本對象。

4 數據處理及材料匯總

數據的處理是將數據整理成需要的數據結構。在本案例中,是將圖紙信息整理成跟EXCEL模板對應的數組,方便后期將數據錄入EXCEL文件。

材料匯總需要計算所有圖紙中相同規格材料的數量。可以使用字典,字典的關鍵字為材料的規格,字典的值為數量。在循環讀取材料時,判斷字典的關鍵字是否存在,如果存在,字典的值增加,如果不存在,則添加關鍵字和值。

5 數據寫入

5.1 引用接口文件

在程序中添加引用,選擇Microsoft Office Excel應用程序中的Microsoft.Office.Interop.Excel.dll文件,引用后出現以下項(圖5)。

圖4 程序引用

在程序引用命名空間部分,添加:

using Microsoft.Office.Interop.Excel;

5.2 數據錄入

通過COM組件,將數據寫入EXCEL,通常有兩種方法,一種是通過循環行和列,將數據寫入對應的單元格,另一種是直接將數組寫入對應的單元格數組中。循環寫入,在數據量大的時候,速度較慢;使用數組寫入的方法速度快,在數據量大的時候,尤為突出,而且代碼更簡潔。本案例采用第二種方法。代碼如下所示,其中arr為存儲電伴熱材料的一個二維數組:

string path = System.Windows.Forms.Application.StartupPath;

string fullName = path + @"/Data/Module.xlsx";

Application exlApp = new Application();

exlApp.ScreenUpdating = false;

exlApp.Visible = false;

Workbook wb = exlApp.Workbooks.Open(fullName);

Worksheet ws = (Worksheet)wb.Sheets["內容"];

ws.Activate();

ws.Cells[3, 1].Resize[arr.GetLength(0), arr.GetLength(1)] = arr;

exlApp.ScreenUpdating = true;

exlApp.Visible = true;

6 結語

通過程序開發,實現了海洋石油工程項目電伴熱帶布置圖數據的自動提取,并將電伴熱材料清單和材料匯總導入到EXCEL中,不必再費時費力逐條統計、匯總、錄入電伴熱材料數據,保證了數據的準確性和輸出文件格式的一致性,極大提高了效率,以建造事業部的曹妃甸CEPI組塊為例,電伴熱帶布置圖約有600張,人工統計電伴熱材料大約需要150~160個人工時,使用本案例中的程序幾分鐘就能完成。同時,在確保伴熱帶布置圖標準化的情況下,建造事業部的國內項目均可以使用,具有良好的通用性和較為廣闊的前景。

猜你喜歡
圖紙程序文本
淺談汽車線束產品圖紙管理
看圖紙
當代工人(2019年20期)2019-12-13 08:26:11
在808DA上文本顯示的改善
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
文本之中·文本之外·文本之上——童話故事《坐井觀天》的教學隱喻
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
如何快速走進文本
語文知識(2014年1期)2014-02-28 21:59:13
主站蜘蛛池模板: 久久先锋资源| 亚洲日本一本dvd高清| 国产香蕉在线视频| 一级黄色网站在线免费看| 青青草原国产免费av观看| 国产美女主播一级成人毛片| 永久在线精品免费视频观看| 中文字幕无码av专区久久| 丝袜高跟美脚国产1区| 色香蕉影院| 免费xxxxx在线观看网站| 蜜臀AV在线播放| 青青草国产在线视频| 色综合天天娱乐综合网| 亚洲精品视频在线观看视频| 中文字幕av无码不卡免费 | 中文字幕亚洲第一| 亚洲精品无码久久毛片波多野吉| 国产丝袜第一页| 九九九久久国产精品| 天堂成人在线视频| 国产精品香蕉| 在线免费看片a| 99久久成人国产精品免费| 亚洲男人天堂2020| 少妇露出福利视频| AV无码一区二区三区四区| 伊人成人在线| 欧美视频在线观看第一页| 国产美女在线观看| 婷婷亚洲天堂| 亚洲另类国产欧美一区二区| 久久中文电影| 再看日本中文字幕在线观看| 午夜小视频在线| 色欲色欲久久综合网| 国产成人乱无码视频| 国产精品无码久久久久久| 久久亚洲日本不卡一区二区| 午夜一区二区三区| 99免费在线观看视频| 亚洲天堂久久久| 午夜国产精品视频| 丁香婷婷激情网| 激情午夜婷婷| 无码专区国产精品一区| 毛片免费视频| 91丨九色丨首页在线播放| 97久久免费视频| a色毛片免费视频| 女同久久精品国产99国| 亚洲欧美日韩久久精品| 新SSS无码手机在线观看| 97视频免费在线观看| www.国产福利| 亚洲成a∧人片在线观看无码| 亚洲欧美另类中文字幕| 午夜三级在线| 久热精品免费| 日本国产精品一区久久久| 久久久久人妻一区精品| 国产丰满大乳无码免费播放 | 国产在线一区二区视频| 超级碰免费视频91| 国产精品99一区不卡| 最新精品久久精品| 亚洲精品欧美日本中文字幕| 黄色网站在线观看无码| 久久综合成人| 成人午夜免费观看| 欧美69视频在线| 日韩无码精品人妻| 欧美日本在线播放| 日韩国产综合精选| 她的性爱视频| 亚洲伊人天堂| 666精品国产精品亚洲| 精品撒尿视频一区二区三区| 91亚洲精品国产自在现线| 午夜日本永久乱码免费播放片| 中文字幕无码av专区久久| 曰韩人妻一区二区三区|