国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ObjectARX的線劃圖文件批量處理研究

2014-09-08 00:48:55施蘇毅熊俊華
江西科學 2014年4期
關鍵詞:線型批量二次開發(fā)

施蘇毅,熊俊華

(昆明理工大學,650093,昆明)

基于ObjectARX的線劃圖文件批量處理研究

施蘇毅,熊俊華

(昆明理工大學,650093,昆明)

數(shù)字線劃圖(DLG)是我國基礎地理信息數(shù)字成果之一,外業(yè)測繪的成果一般就是DLG。DLG使用較為廣泛的格式為AutoCAD的DWG格式,闡述了DWG格式的線劃圖文件批量處理。圖形文件批量處理就是根據(jù)用戶的需求對多個圖形文件進行相同的操作,這些操作可由計算機自動化完成。ObjectARX是AutoCAD常用的開發(fā)工具,研究了基于ObjectARX與C#.NET對AutoCAD進行二次開發(fā),實現(xiàn)線劃圖文件批量處理的技術,具有較好的現(xiàn)實意義與廣泛的應用前景。

線劃圖;ObjectARX;批量處理; AutoCAD

0 引言

數(shù)字線劃圖(DLG)采用點、線、面形式或地圖特定圖形符號形式表達地形要素。在AutoCAD中對應著DataBase中的實體要素。每個實體或圖元對應一個數(shù)據(jù)記錄,主要用來存儲實體的幾何數(shù)據(jù)和幾何特性(線型、圖層、顏色、字體等)。目前,常用的數(shù)字線劃圖制圖、成圖軟件——CASS軟件已具備較完善的功能[1],但不能對圖形文件進行批量化處理。因此,對其二次開發(fā)十分必要。ObjectABX技術逐漸成為AutoCAD二次開發(fā)的主流。

ObjectABX應用程序能直接利用AutoCAD核心數(shù)據(jù)庫和代碼,利用AutoCAD的開放結構,可以直接訪問AutoCAD數(shù)據(jù)庫結構、圖形系統(tǒng)以及CAD幾何造型核心,具有模塊性好、獨立性強、連接簡單、使用方便、內(nèi)部功能高效實用、代碼可重用性強等優(yōu)點[2]。本文使用ObjectARX以及C#.NET開發(fā)的程序可以對多個線劃圖文件的進行批量處理,并在文中給出了核心代碼。

1 ObjectARX編程

1.1ObjectARX簡介

AutoCAD提供了豐富的開發(fā)工具,如ADS(AutoCAD Development System)、ObjectARX/ObjectDBX,VBA/AutoCAD ActiveX Automation(COM)、AutoLISP/Visual LISP、.NET[3]。ObjectARX是Au-toCAD提供的第一個面向對象的開發(fā)工具。它提供了以C++為基礎的面向對象的開發(fā)環(huán)境及應用程序接口,在AutoCAD 2006及以后的版本中,增加了.NET API開發(fā)包。方便使用.NET工具進行開發(fā)。

用戶利用ObjectARX可以訪問和修改AutoCAD圖形數(shù)據(jù)庫[4],與AutoCAD編輯器進行通信,對CAD功能進行定制[5-6]。

1.2ObjectARX應用程序開發(fā)環(huán)境

開發(fā)ObjectARX應用程序需要ObjectARX提供的SDK(Software Development Kit,軟件開發(fā)工具包)。SDK工具包主要提供了開發(fā)ARX應用程序所需的庫文件、頭文件、程序設計示例和幫助使用說明。在AutoCAD不同版本運行的ARX應用程序需要不同的ObjectARX開發(fā)環(huán)境支持和各自的編譯鏈接工具。本文采用AutoCAD 2008和Microsoft Visual Studio 2005作為開發(fā)平臺進行研制。

2 利用ObjectARX進行AutoCAD二次開發(fā)實例

2.1圖形批量處理流程

線劃圖文件批量處理包括修改實體數(shù)據(jù)以及新增實體數(shù)據(jù),其處理流程分別如下圖1、圖2所示。

2.1.1 打開圖形 在獲取Database對象之前,首先得打開CAD圖形。打開CAD圖形有2種方式:一種是前臺打開,一種是后臺打開。軟件研發(fā)一般采用的是后臺打開圖形,使用后臺打開可以提高文件的處理效率,同時可以避免用戶的誤操作。

圖1 批量修改實體

圖2 批量增加實體

1)前臺打開圖形。

DocumentCollection acDocMgr=Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;

doc=acDocMgr.Open(strFileName,false);//其中strFileName表示要處理的文件名。

Database db=doc.Database;

2)后臺打開圖形。

Database db=new Database(false,true))

db.ReadDwgFile(strFileName,FileShare.ReadW-

rite,true,null)。

2.1.2 獲取比例尺數(shù)據(jù) 對于已打開的圖形,需要檢查其比例尺是否是對應的比例尺。不同比例尺的圖形、線型寬度、字體大小等參數(shù)不一致。本文只對指定比例尺(如比例尺為1:500)的圖形進行批量處理,其他比例尺的圖形不作處理。獲取比例尺的代碼如下

double currentScale=Convert.ToDouble(Cad-

App.GetSystemVariable("Userr1"))。

2.1.3 創(chuàng)建事務

Transaction trans=db.TransactionManager.StartTransaction()。

2.1.4 選擇對象

1)選擇圖形實體。

BlockTableRecord p_BlockTableRecord=(Bloc-kTableRecord)trans.GetObject(db.CurrentSpaceId,OpenMode.ForWrite);

foreach (ObjectId objId in p_BlockTableRecord)

{Entity ent=(Entity)trans.GetObject(objId,OpenMode.ForWrite)}。

2)選擇圖層。

LayerTable layerTbl=(LayerTable)trans.GetObject(db.LayerTableId,OpenMode.ForWrite);

foreach (ObjectId layerId in layerTbl)

{LayerTableRecord p_LayerTableRecord=(LayerTableRecord)trans.GetObject(layerId,OpenMode.ForWrite)}。

2.1.5 判斷對象 AutoCAD中的實體(Entity)對象比較豐富,常用的有文本對象、線對象等。文本對象包括單行文本(DBText)、多行文本(MText)。線對象包括直線(Line)、多段線(Polylines)、二維多線段(polyline2d)、圓(Circle)、圓弧(Arc)、橢圓(Ellipse)等。另外還有擦除對象(Wipeout)、填充(Hatch)等。

在遍歷文本/線對象時,可以先排除Wipeout、Hatch對象,減少遍歷的次數(shù)。

2.1.6 實體參數(shù)設置及修改 實體參數(shù)常用的設置包括:顏色(Color)、顏色索引(ColorIndex)、層(LayerId)、線型(LinetypeId)、線型比例(LinetypeScale)、線寬(ConstantWidth)、字體(TextStyle)、多行文本的字高(TextHeight)、單行文本的字高(Height)、單行文本的傾斜度(Oblique)等。

2.1.7 添加實體 以添加文本對象為例,添加其他實體可以參考以下代碼。

BlockTableRecord p_BlockTableRecord=(Blo-

ckTableRecord)trans.GetObject(db.CurrentSpacel-

d,OpenMode.ForWrite);

BlkTblRec.AppendEntity(text);

trans.AddNewlyCreatedDBObject(text, true)。

2.1.8 結束操作 在文件處理結束后需要保存文件的修改,然后關閉打開的圖形,同時刪除后綴為bak的同名文件。

2.2CASS編碼處理

在對數(shù)字線劃圖處理過程中,每個實體要素屬性中都包含有CASS碼,在增加新實體時,需要賦予實體對應的CASS碼。當選擇實體,有時需要對CASS碼進行判斷。CASS碼在Autocad以ResultBuffer類對象進行存儲。ResultBuffer數(shù)據(jù)由一個數(shù)據(jù)類型描述和一個值組成。CASS碼的類型描述為“SOUTH”。

1)獲取CASS碼。

ResultBuffer resBuf=ent.GetXDataForApplication("SOUTH");

TypedValue entXData=resBuf.AsArray()[1];

cassText=entXData.Value.ToString();//即為CASS編碼。

2)新增/修改CASS碼。

以新增CASS碼為140009的居民地說明注記為例,代碼如下:

ResultBuffer resBuf=new ResultBuffer();

resBuf.Add(new TypedValue(1001,"SOUTH"));

resBuf.Add(new TypedValue(1000,"140009"));

text.XData=resBuf。

2.3成果展示

2.3.1 批量處理工具 本文采用ObjectARX和C#.NET對AutoCAD2008進行研發(fā),其菜單功能如圖3所示,多個文件進行批量處理的工具包含批量清理圖形(purge命令)、批量修改圖層顏色、批量修改實體分層、批量修改線型樣式、批量修改文字樣式、批量刪除空文字、批量修改文字內(nèi)容、批量修改文字Z坐標、批量修改文字旋轉/傾斜角度、批量修改一般高程點的小數(shù)位數(shù)、批量修改控制點的高程小數(shù)位數(shù)。

圖3 菜單界面

圖4 線劃圖一鍵更新界面

其中批量清理圖形(purge命令)是調(diào)用purge函數(shù)清除BlockTable、LayerTable、TextStyleTable、LinetypeTable、ViewTable、UcsTable、ViewportTable、RegAppTable、DimStyleTable中的冗余數(shù)據(jù)。批量修改圖層顏色是將圖形中的圖層設置為指定的顏色,如將居民地(JMD)層顏色設置為(35,24,21),方法為調(diào)用setLayerColor函數(shù)設置LayerTable中的對象。批量修改實體分層是將指定CASS碼的實體放在指定的圖層,如將一般房屋(CASS碼為141101的實體)放在居民地(JMD)層,方法為修改選中實體的LayerId屬性。批量修改線型樣式是將圖形中的線型實體設置為指定的線型。批量修改文字樣式是將圖形中文字實體設置為指定的字體。批量刪除空文字是將內(nèi)容為空的文字進行刪除,文字內(nèi)容可用TextString函數(shù)進行獲取。批量修改文字內(nèi)容是將文字內(nèi)容進行批量替換,如將“草”替換成“草坪”。批量修改文字Z坐標是將文字的Z坐標修改為統(tǒng)一的值,一般設為0。批量修改文字旋轉/傾斜角度是修改文字的Rotation以及Oblique屬性。批量修改一般高程點的小數(shù)位數(shù)是將圖形中的一般高程點注記的小數(shù)位數(shù)設為統(tǒng)一的值,如設為2位小數(shù)則會將2位以上以及不足2位的注記值修改為保留2位小數(shù)。批量修改控制點的小數(shù)位數(shù)是將圖形中的控制點注記的小數(shù)位數(shù)設為一個固定的值,如將三角點高程注記(CASS碼為131100-1)統(tǒng)一保留3位小數(shù)。

在實際處理過程中,可以根據(jù)用戶需求一次處理多個事務,如圖4中定制“線劃圖一鍵更新”操作。該操作包括以下5個事務:批量修改圖層顏色、批量修改實體顏色、批量修改實體分層、批量修改線型樣式以及批量修改文字樣式。

2.3.2 處理結果對比 圖5、圖6是采用“線劃圖一鍵更新”操作,對線劃圖的圖層顏色、實體顏色、實體圖層分類、線型、文本樣式進行處理的前后對比圖,通過對比發(fā)現(xiàn)該程序可以批量修改線劃圖文件,效果令人滿意。

圖5 原始圖形

圖6 處理后的圖形

3 結論

ObjectARX是AutoCAD采用面向對象語言進行二次開發(fā)的有效工具,包含了很多工具集,允許開發(fā)者利用AutoCAD的開放體系結構,直接訪問AutoCAD圖形數(shù)據(jù)庫和圖形系統(tǒng)。可以利用C#.NET的強大功能進行研發(fā)出符合用戶需求的功能。如本文提到的線劃圖文件批量處理功能,可以對多個線劃圖文件執(zhí)行相同的操作,提高工作效率,降低數(shù)據(jù)生產(chǎn)、制作的成本。

[1]張巨林,陳兆煙,謝剛生.基于ObjectARX的用戶地圖符號庫系統(tǒng)的設計與開發(fā)[J].測繪通報,2013(11):109-111.

[2]江書勇.基于ObjectARX的圖形自動編程系統(tǒng)的研究與開發(fā)[D].成都:四川大學,2003.

[3]劉同成,林愉.基于ObjectARX的AutoCAD二次開發(fā)及應用實例[J].自動化技術與應用,2006,25(5):35-37.

[4]肖萌萌,黃美發(fā),孫永厚,等.基于ObjectARX2010的尺寸鏈公差自動生成及自動查詢方法[J].桂林電子科技大學學報,2013,33(5):398-401.

[5]于蕭榕,郭昌言,陳剛.結合Objectarx和C#進行AutoCAD二次開發(fā)框架的研究[J].科學技術與工程,2010(20):5085-5091.

[6]黃健榮,郭昌言,于蕭榕.基于ObjectARX的離心標牌刻度線繪制的應用[J].計算機與數(shù)字工程,2013(8):1343-1346.

StudyonBatchProcessingforDigitalLineGraphFilesBasedonObjectARX

SHI Suyi,XIONG Junhua

(Kunming University of Science and Technology,650093,Kunming,PRC)

Digital line graph (DLG) is one of the digital products of fundamental geographical information in China,in general,surveying and mapping achievement is digital line graph.The more widely used format of DLG is DWG format in AutoCAD.This paper described batch processing for line topographic map files on the DWG format.Batch processing for graphics files refers to same operation on a plurality of graphics files on the user′s behalf,which can be done automatically by computer.The common development tool of AutoCAD is ObjectARX.The secondary development of AutoCAD based on ObjectARX and C#.NET has been investigated in this paper.The technology of batch processing for line topographic map files has been realized.It has practical significance and extensive application prospects.

digital line graph;ObjectArx;batch processing;AutoCAD

2014-05-29;

2014-07-11

施蘇毅(1981-),男,云南昆明人,工程碩士,主要研究方向:地理信息系統(tǒng)。

10.13990/j.issn1001-3679.2014.04.013

P209

A

1001-3679(2014)04-0482-05

猜你喜歡
線型批量二次開發(fā)
批量提交在配置分發(fā)中的應用
科學家(2021年24期)2021-04-25 12:55:27
淺談基于Revit平臺的二次開發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
淺談Mastercam后處理器的二次開發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
高等級公路幾何線型優(yōu)化設計分析與評價
江西建材(2018年4期)2018-04-10 12:37:28
西門子Easy Screen對倒棱機床界面二次開發(fā)
核安全1級設備線型支承分析方法研究
淺議高校網(wǎng)銀批量代發(fā)
基于AUTOIT3和VBA的POWERPOINT操作題自動批量批改
一種非均勻線型的互連線能量分布模型
計算物理(2014年1期)2014-03-11 17:00:58
考慮價差和再制造率的制造/再制造混合系統(tǒng)生產(chǎn)批量研究
杂多县| 商南县| 庆安县| 通化市| 密云县| 天祝| 随州市| 凤山市| 汤阴县| 图木舒克市| 太保市| 镇平县| 安塞县| 长治县| 茌平县| 剑阁县| 开江县| 西昌市| 肃宁县| 哈密市| 额尔古纳市| 视频| 彝良县| 清流县| 沁水县| 堆龙德庆县| 石棉县| 尚义县| 德昌县| 山阴县| 类乌齐县| 滁州市| 长顺县| 介休市| 温州市| 南江县| 精河县| 阿克陶县| 沙雅县| 九寨沟县| 自治县|