AutoCAD二次开发在高速公路勘察中的应用分析
2020-08-03朱佳
朱佳
摘 要 从高速公路勘察地调工作的最终成果文件出发,提出工作程序优化设想,介绍了采用C#对AutoCAD进行二次开发的基本流程,同时结合地调成果文件的格式,编制出工作辅助小插件,大大减少人为输入,提升了工作效率。
关键词 地质调查;AutoCAD;二次开发;高速公路勘察
引言
地质调查是高速公路勘察过程中必不可少的一环,在地调工作中,往往会测得大量的岩层、裂隙产状数据,这些数据在现场是记录在野外记录簿中或是地质平面图中,但最终都要在CAD图中予以描述。通常这些数据量都比较大,如逐个上图,耗时耗力,效率不高且易出错,本文通过对AutoCAD软件进行二次开发,大大优化这一输入过程,提升工作效率。
1基于C#的二次开发方法
从AutoCAD2004开始,.NET开发CAD的大门即被开启,对其进行二次开发用到的主要工具有ObjectARX、VBA和Lisp,这些工具各有优缺点,.NET结合了VC++的强大功能与VBA简单易用的特点[1],可以较快地开发出强大的AutoCAD程序,本文基于C#.NET语言进行二次开发[2]。
2编程环境构建
Visual Studio是目前最流行的Windows平台应用程序的集成开发环境,C#便整合在其中。
VS与CAD的版本众多,使用两者进行二次开发选择也比较多。本文采用VS2012+AutoCAD2014 +Win7进行CAD二次开发。
3CAD二次开发方法
3.1 基本操作流程
首先,使用VS建立类库项目文件,项目类型为Visual C#语言,为了调用CAD中的对象、方法,并向模型空间中绘制图形,需要对CAD自带的程序集accoremgd、acdbmgd、acmgd进行引用,并设置“复制本地”为否。
3.2 导入相关命名空间
在程序集引用完毕之后,还需导入相关命名空间,这样做的好处是对某个对象进行调用时不必在对象名称前添加一系列的限定符,如图1所示。
图1 导入命名空间
Autodesk.AutoCAD.ApplicationServices命名空間中的类用来定义和注册新的CAD命令,命令的使用方法完全同CAD自身的命令,这是内库文件用于CAD中的常用方法,无须建立专门的数据窗口。
Autodesk.AutoCAD.DatabaseServices命名空间中的类表示组成CAD图形数据库的元素。
Autodesk.AutoCAD.EditorInput命名空间提供了与用戸交互有关的类,这也是获取绘图数据的主要途径之一。
4程序实现
根据岩层、裂隙的产状标注格式,及上述二次开发方法,程序有要代码实现如下:
PromptPointOptions optPoint = new PromptPointOptions(“\n请输入插入点<0,0>”); //通过交戸获取插入点
optPoint.AllowNone = true;
PromptPointResult resPoint = ed.GetPoint(optPoint);
if (resPoint.Status == PromptStatus.Cancel)
return;
Point3d InsertPnt; //定义插入点
if (resPoint.Status == PromptStatus.None) //使用默认数据
InsertPnt = new Point3d(0, 0, 0);
else
InsertPnt = resPoint.Value; //使用用戸输入的数据
double[] dipInfor = new double[2]; //存储倾向、倾角数据
Point3d tempPnt; //临时数据存放
PromptPointOptions optOcc = new PromptPointOptions(“\n请输入裂隙的产状<0°,0°>”);
PromptPointResult resOcc = ed.GetPoint(optOcc);
tempPnt = resOcc.Value;
dipInfor[0] = tempPnt.X;
dipInfor[1] = tempPnt.Y;
至此,产状信息获取完毕,然后使用简单的多段线生成命令和文字标注命令即可完成产状符号的绘制和注释,如下图所示,表示裂隙的倾向为45°,倾角为45°。
图2 裂隙产状符号及注释
5结束语
使用CAD加载编制好的类库文件进行岩层产状信息的录入,可以大大提高工作效率,类似的重复录入工作亦可参考本例进行插件开发。
参考文献
[1] 曾洪飞,卢择临,张帆,等.AutoCAD VBA&VB.NET开发基础与实例教程[M].北京:中国电力出版社,2013:73.
[2] JohnSharp,夏普,周靖.Visual C# 2012从入门到精通[M].北京:清华大学出版社,2014:215.