APP下载

基于ObjectARX的线划图文件批量处理研究

2014-09-08施苏毅熊俊华

江西科学 2014年4期
关键词:线型批量二次开发

施苏毅,熊俊华

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

基于ObjectARX的线划图文件批量处理研究

施苏毅,熊俊华

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

数字线划图(DLG)是我国基础地理信息数字成果之一,外业测绘的成果一般就是DLG。DLG使用较为广泛的格式为AutoCAD的DWG格式,阐述了DWG格式的线划图文件批量处理。图形文件批量处理就是根据用户的需求对多个图形文件进行相同的操作,这些操作可由计算机自动化完成。ObjectARX是AutoCAD常用的开发工具,研究了基于ObjectARX与C#.NET对AutoCAD进行二次开发,实现线划图文件批量处理的技术,具有较好的现实意义与广泛的应用前景。

线划图;ObjectARX;批量处理; AutoCAD

0 引言

数字线划图(DLG)采用点、线、面形式或地图特定图形符号形式表达地形要素。在AutoCAD中对应着DataBase中的实体要素。每个实体或图元对应一个数据记录,主要用来存储实体的几何数据和几何特性(线型、图层、颜色、字体等)。目前,常用的数字线划图制图、成图软件——CASS软件已具备较完善的功能[1],但不能对图形文件进行批量化处理。因此,对其二次开发十分必要。ObjectABX技术逐渐成为AutoCAD二次开发的主流。

ObjectABX应用程序能直接利用AutoCAD核心数据库和代码,利用AutoCAD的开放结构,可以直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,具有模块性好、独立性强、连接简单、使用方便、内部功能高效实用、代码可重用性强等优点[2]。本文使用ObjectARX以及C#.NET开发的程序可以对多个线划图文件的进行批量处理,并在文中给出了核心代码。

1 ObjectARX编程

1.1ObjectARX简介

AutoCAD提供了丰富的开发工具,如ADS(AutoCAD Development System)、ObjectARX/ObjectDBX,VBA/AutoCAD ActiveX Automation(COM)、AutoLISP/Visual LISP、.NET[3]。ObjectARX是Au-toCAD提供的第一个面向对象的开发工具。它提供了以C++为基础的面向对象的开发环境及应用程序接口,在AutoCAD 2006及以后的版本中,增加了.NET API开发包。方便使用.NET工具进行开发。

用户利用ObjectARX可以访问和修改AutoCAD图形数据库[4],与AutoCAD编辑器进行通信,对CAD功能进行定制[5-6]。

1.2ObjectARX应用程序开发环境

开发ObjectARX应用程序需要ObjectARX提供的SDK(Software Development Kit,软件开发工具包)。SDK工具包主要提供了开发ARX应用程序所需的库文件、头文件、程序设计示例和帮助使用说明。在AutoCAD不同版本运行的ARX应用程序需要不同的ObjectARX开发环境支持和各自的编译链接工具。本文采用AutoCAD 2008和Microsoft Visual Studio 2005作为开发平台进行研制。

2 利用ObjectARX进行AutoCAD二次开发实例

2.1图形批量处理流程

线划图文件批量处理包括修改实体数据以及新增实体数据,其处理流程分别如下图1、图2所示。

2.1.1 打开图形 在获取Database对象之前,首先得打开CAD图形。打开CAD图形有2种方式:一种是前台打开,一种是后台打开。软件研发一般采用的是后台打开图形,使用后台打开可以提高文件的处理效率,同时可以避免用户的误操作。

图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 获取比例尺数据 对于已打开的图形,需要检查其比例尺是否是对应的比例尺。不同比例尺的图形、线型宽度、字体大小等参数不一致。本文只对指定比例尺(如比例尺为1:500)的图形进行批量处理,其他比例尺的图形不作处理。获取比例尺的代码如下

double currentScale=Convert.ToDouble(Cad-

App.GetSystemVariable("Userr1"))。

2.1.3 创建事务

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对象,减少遍历的次数。

2.1.6 实体参数设置及修改 实体参数常用的设置包括:颜色(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编码处理

在对数字线划图处理过程中,每个实体要素属性中都包含有CASS码,在增加新实体时,需要赋予实体对应的CASS码。当选择实体,有时需要对CASS码进行判断。CASS码在Autocad以ResultBuffer类对象进行存储。ResultBuffer数据由一个数据类型描述和一个值组成。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进行研发,其菜单功能如图3所示,多个文件进行批量处理的工具包含批量清理图形(purge命令)、批量修改图层颜色、批量修改实体分层、批量修改线型样式、批量修改文字样式、批量删除空文字、批量修改文字内容、批量修改文字Z坐标、批量修改文字旋转/倾斜角度、批量修改一般高程点的小数位数、批量修改控制点的高程小数位数。

图3 菜单界面

图4 线划图一键更新界面

其中批量清理图形(purge命令)是调用purge函数清除BlockTable、LayerTable、TextStyleTable、LinetypeTable、ViewTable、UcsTable、ViewportTable、RegAppTable、DimStyleTable中的冗余数据。批量修改图层颜色是将图形中的图层设置为指定的颜色,如将居民地(JMD)层颜色设置为(35,24,21),方法为调用setLayerColor函数设置LayerTable中的对象。批量修改实体分层是将指定CASS码的实体放在指定的图层,如将一般房屋(CASS码为141101的实体)放在居民地(JMD)层,方法为修改选中实体的LayerId属性。批量修改线型样式是将图形中的线型实体设置为指定的线型。批量修改文字样式是将图形中文字实体设置为指定的字体。批量删除空文字是将内容为空的文字进行删除,文字内容可用TextString函数进行获取。批量修改文字内容是将文字内容进行批量替换,如将“草”替换成“草坪”。批量修改文字Z坐标是将文字的Z坐标修改为统一的值,一般设为0。批量修改文字旋转/倾斜角度是修改文字的Rotation以及Oblique属性。批量修改一般高程点的小数位数是将图形中的一般高程点注记的小数位数设为统一的值,如设为2位小数则会将2位以上以及不足2位的注记值修改为保留2位小数。批量修改控制点的小数位数是将图形中的控制点注记的小数位数设为一个固定的值,如将三角点高程注记(CASS码为131100-1)统一保留3位小数。

在实际处理过程中,可以根据用户需求一次处理多个事务,如图4中定制“线划图一键更新”操作。该操作包括以下5个事务:批量修改图层颜色、批量修改实体颜色、批量修改实体分层、批量修改线型样式以及批量修改文字样式。

2.3.2 处理结果对比 图5、图6是采用“线划图一键更新”操作,对线划图的图层颜色、实体颜色、实体图层分类、线型、文本样式进行处理的前后对比图,通过对比发现该程序可以批量修改线划图文件,效果令人满意。

图5 原始图形

图6 处理后的图形

3 结论

ObjectARX是AutoCAD采用面向对象语言进行二次开发的有效工具,包含了很多工具集,允许开发者利用AutoCAD的开放体系结构,直接访问AutoCAD图形数据库和图形系统。可以利用C#.NET的强大功能进行研发出符合用户需求的功能。如本文提到的线划图文件批量处理功能,可以对多个线划图文件执行相同的操作,提高工作效率,降低数据生产、制作的成本。

[1]张巨林,陈兆烟,谢刚生.基于ObjectARX的用户地图符号库系统的设计与开发[J].测绘通报,2013(11):109-111.

[2]江书勇.基于ObjectARX的图形自动编程系统的研究与开发[D].成都:四川大学,2003.

[3]刘同成,林愉.基于ObjectARX的AutoCAD二次开发及应用实例[J].自动化技术与应用,2006,25(5):35-37.

[4]肖萌萌,黄美发,孙永厚,等.基于ObjectARX2010的尺寸链公差自动生成及自动查询方法[J].桂林电子科技大学学报,2013,33(5):398-401.

[5]于萧榕,郭昌言,陈刚.结合Objectarx和C#进行AutoCAD二次开发框架的研究[J].科学技术与工程,2010(20):5085-5091.

[6]黄健荣,郭昌言,于萧榕.基于ObjectARX的离心标牌刻度线绘制的应用[J].计算机与数字工程,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-),男,云南昆明人,工程硕士,主要研究方向:地理信息系统。

10.13990/j.issn1001-3679.2014.04.013

P209

A

1001-3679(2014)04-0482-05

猜你喜欢

线型批量二次开发
批量提交在配置分发中的应用
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
高等级公路几何线型优化设计分析与评价
西门子Easy Screen对倒棱机床界面二次开发
核安全1级设备线型支承分析方法研究
在数控车床上批量钻铰孔类工件的实践
基于AUTOIT3和VBA的POWERPOINT操作题自动批量批改
一种非均匀线型的互连线能量分布模型
考虑价差和再制造率的制造/再制造混合系统生产批量研究