2023年11月30日发(作者:)

应用C#进行AutoCAD二次开发

1陈中治2王敏

(1.中交第二公路勘察设计研究院;2.江汉大学机电与建筑工程学院)

摘要:C。编程语言可以说是当今最优秀的开发工具,而AutoCm

ActiveX技术作为AutoCAD提供的二

Ac—

次开发接口,完美地将AutoCAD以类库的形式展现在开发人员面前。本文通过对AutoCAD

tiveX与C4语言的简要介绍,以及三个简单的例子,描述了如何使用C。进行AutoCAD二次开发

的过程。

关键词:二次开发Aur“?AD

C”AutnCADActiveX

AuloCAD二次开发接口

AutoCAD是目前最为流行的计算机辅助绘图软件,被广泛应用于机械、土建等众多行业

中。它具有开放的体系结构,允许用户和开发者采用AutoDesk公司提供的工具与接口对其进

行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求,方便软件开发人员针对某行

业或专业,在AutoCAD平台上开发出各种不同的行业(专业)软件,从而极大地提高了工作效

率,也使得AutoCAD深受广大专业人士的喜爱。

环顾AutoCAD现行的开发语言及工具,主要有Visual

LISP、ObjectARX以及ActiveX

tion等,各种工具都具有自身的特点。

vjsual

Automa.

LISP是以其易用性而著称,它使用IJSP语言,完全兼容AutoLISP,并且加入了对事

件的响应等功能,使用非常方便。但VisualLISP并不是一个完全独立的编程语言,它虽然不受

AutoCAD版本的限制,但它作为AutoCAD的内嵌语言是无法开发完整的大型Windows应用程

序的。

ObjectARX是一种强大的开发接口,它以Visual

C”为开发平台,采用先进的面向对象的编

象。需要强调的是,AetiveXAutomation是可以应用在所有支持此项功能的开发平台上,比如现在

比较流行的vc、VB、C”Builder、Delphi以及Visual

Studio.NET等,从而使开发人员可以选择自己

喜爱的开发平台进行工作,充分利用先进的开发工具,更加方便地建立优秀应用程序。

本文接下来就将针对Micnrsoft公司最新推出的c4语言如何应用AutoCADActiveX来开发

AutoCAD应用程序,给出一些简单的实现方法。

C8编程语言特点简介

首先让我们来认识一下c4语言。C4语言自C/C+*演变丽来。但是,它现代、篱单。完全

面向对象,类型安全。如果你是C/C++程序员,学习曲线将会很平坦。许多c

4语句直接借用

于现在十分流行的语言,包括表达式和操作符,乍一看,还以为它就是c“。c。最重要优点:

它是现代的编程语言,它简化和革新了c”中的类、名字空问、方法重载和异常处理等领域。

摒弃了c“的复杂性,使它更易用、更少出错。c“减少了c“的一些功能,不再有宏、模板和多

重继承。特别对企业开发者来说,上述功能只会产生更多的麻烦而不是效益。使编程更方便

的新功能有严格的类型安全、版本控制、垃圾收集(倒b舻collect)等等。所有这些功能的目

标,都是为了开发面向组件的软件。归纳起来,C。的优点如下:

2.1

简单

C*具有C.+所没有的一个优势就是简单易学。该语言首要的目标就是简单,很多功能有

助于C’全方位地简化。

人员就可以确保当他的类库升级时,仍保留着对已存在的客户应用程序的二进制兼容。

2.6兼容

C”并不是存在于一个封闭的世界中,它允许使用最先进的NGWS的通用语言规范(Corn.

1llOtl

Language

Specification,简写为c工5)访问不同的API。CLS规定了.一个标准,使符合这种标

准的语占能够协同工作。为了加强CLS的编译,C。编译器检测所有的公共出口编译,并在通

不过时列出错误。

2.7灵活

尽管C”代码的缺省状态是类型安全的,但是你可以声明一些类或者仅声明类的方法是非

安全类型的。这样的声明允许你使用指针、结构,静态地分配数组。

通过上面简单的介绍,大家是不是被C。如此优秀的编程语言所吸引呢?很幸运,现在您

可以使用它来进行AutoCAD的二次开发了。

3认识AutoCAD

ActiveX

AutoCAD通过AutoCADActiveX成为一个支持自动化的应用程序,其它应用程序通过暴露

的对象(object)对AutoCAD操作。应用程序正是通过对AutoCAD暴露的各级对象进行操作而

控制AutoCAD工作的。对象本身包含自己的方法和属性。通过方法可以实现对象的一些操

作,而对象状态信息的收集或改变则是通过属性完成。

一个对象就是AutoCADAcfiveX界面的一个主要组成块,每一暴露的对象描绘了AutoCAD

有图形还有大部分非图形的Au㈣对象(见图3)。通过提供的M删spac。(模型空间)和Pa.

perSpaee(图纸空间)访问图形对象(线、圆、弧等),通过提供的如Layers(图层)、I血e‘ypes(线型)

和Te)【【S哪es(字型)这样名称的集合访问非图形对象(图层、线形、字型等)。D0c。。。。t(文档)对

象也提供访问Plot(打印出图)和utibty(实用工具)对象。

圈1全局分层结构图

3.3

Collection(集合)对象

——■!!Q

JJn)方法以达到日的。不同的是,图元对象通常使用标头为Add<图元名称>这样的方法来进

行添加。例如,添加一条直线你必须使用AddLine方法。

集合也拥有共用的一些其它方法和属性。Count(g己数)属

性可用于获取集合中对象的数目,Item(项目)方法可用于获取

集合中的对象。

3.4图形和非图形对象

图形对象,也称为图元,它是构成图形的可见对象(如直

线、圆、光栅图像等)。创建这些对象,可用近似于Add<图元

名称>方法。修改或查询这些对象,可使用对象自身的方法和

吲2廊用对象结椅嘲

属性。每一图形对象都有方法允许的应用程序执行大部分的AutoCAD编辑命令,如复制、删

除、移动、镜像,还有其它。这些对象也有相应方法可以设定及返回扩展数据(xdata)、高亮和更

新、返回对象的边框范围等。图形对象具有如图层、线形、颜色和句柄这样典型的属性,也有其

特殊的依赖于这些对象类型的属性,如圆心、半径和面积等。

AutoCAD

ActiveX来进行AutoCAD二次开发。

4应用C”进行AutoCAD

二次开发的基本方法

AutoCAD

ActiveX将AutoCAD对象显示到“外

部世界”,从而C’能够和AutoCAD之间进行通讯。

下面让我们通过几个例子来说明怎样利用C8进

行AutoCAD二次开发。首先说明一下所用的开发

平台是Visual2003,AutoCAD平台是

Aut0C.,AD

2004。

Studio.NET

下面这个例子非常简单,就是通过C。建立的

窗体来启动AutoCAD并画一条直线。下面是编程

的具体步骤:

(1)通过Visual

Sudio.net建立一c。的Win—

dows应用程序。

(2)在“解决方案资源管理器”中右击“引用”

标签,在弹出的菜单中选择“添加引用”,在“添加

引用”对话框中选择“com”选项}下的下拉列表框

中的“AmoCAD

2004

Type

a.Application.Update();//更新显示

好了,你可以试着编译一下,看看是否能画出您想要的直线。这个例子中的方法虽然简单,但

存在~个缺点,那就是每次调试程序的时候C4都要重新启动AutoCAD,如果调试的次数非常多(比

如跟踪错误然后调试),那么编程的效率就很低,因为启动一次CAD还是需要较长的时间。

为了解决这个问题,就需要获得当前活动的AutoCAD对象,但在c”中却没有,我们可以使

用下面的语句获得当前活动的AutoCAD应用程序对象。

fAcadApplication)Marshal

GetActiveObject(”AutoCAD

Application

16”)

(对于AuwCAD2002,则把16改为15)

2000和AutoCAD

当然以上语句必须在AutoCAD打开的情况下才能使用,否则会发生错误。对于AutoCAD

没打开的情况,可以按上二面例子中的方法来处理。完整的连接AutoCAD与C

4的源程序如下:

using

System;

using

AuwCAD;

using

System.Runtime

InteropServices;

namespace

AcadExample

public

class

AutoCADCormector:IDisposable

private

AcadApplication

application

private

bool

initialized;

州rate

bool—disposed;

public

AutoCADConnector()

//Uponcreation,attempt

to

retrieveinstance

running

—application=(AcadApplication)

Marshal.GetActiveObject(”AutoCAD.Application.16”)

catch

try

//Createnag

//garbage

collectorwilldestruction

upon

~AutoCADConnector()

Dispose(false)

publicAcadApplicationApplication

get

//RetumintemalinstanceofAutoCAD

OIlY

returll—application;

,,Thistheuser-callableof

isversion

Dispose.

//ItcalIsintemalversionandthe

our

removes

,,object

fromthecollectorj

gauge

queue.

public

void

Dispose()

Dispose(true);

GC

SuppressFinalize(this)

version

//This

ofcalled

Disposeby

gets

our

//destmctor.

protected

virtual

void

Dispose(booldisposing)

//IfcreatedAutoCADinstance.call

we

OI,IT

its

,,Quit

methodavoid

to

leakingmemory.

if(!this.disposed&&一initialized)

application.Quit();

一disposed=true;

利用visual

Studio.NET把上面的程序编译成一个类库,你就可以在以后的程序中使用它

了,下面的这个例子说明了它的用法(首先把AcadExample类库包含在项目中)。

usingSystem;

using

using

AcadExmnple;

AutoCAD;

ConsoleApplication6

namespace

class

Classl

[STAThread]

staticvoid

Main(string[]args)

AutoCADConnector())

using(AutoCADConnector

connector=new

Console.WriteLine(connector.Application

ActiveDocument.Name)

Console.Re.adLine()

以}:代码是在C”窗口中显示AutoCAD中当前文档的标题。

接下来我再介绍一下AutoCAD对象模型。对象是AutoCADActiveX接口的主要构造块,每

一个显示的对象均精确代表一个AutoCAD组件。如前所述,所有对象的根对象是AutoCAD应

用程序本身,它用AcadApplication类来表示。Acad

Application对象下有四个子对象构成,分别

是AcadPrefemnces对象、AcadDocuments对象、AcadMenuBar对象、AcadMenuGmups对象。下面通

过一个简单的例子来说明AutoCAD对象模型的内容。这个例子是在AutoCAD中建立一个新的

层,然后在该层中画一个红色的圆和一条绿色的直线。程序的源代码如下:

using

System;

usingAcadExample;

using

AutoCAD;

CircleLiBe

narnespaee

//CI∞s1的摘要说明。

classClassl

//应用程序的主入口点。

[STAThmad]

double[]endPoint=new

Double[3]{40,40,0};//设置真线的终点

AeadLayer

newtayer=aDoctmlent.Layers.Add(”CircleLine”);

//仓tl建一个名为CircleLine的新层

aDocumem

Activelayer=newLayer;//把CircleLine层设置为当前层

AcadCircle

circle=al_)0cunlerlt.ModelSpace.AddCircle(center,radius);//1Jn入圆

AcadLine

line:aDocument.ModelSpace.AddLine(startPoint,endPoint);//加入赢线

circle.color=ACAD

COLOR.acRed;//把圆变为红色

line.color:ACAD

COLOR.acGreen;//把赢线变为绿色

comec沁r.Application.upaate();//更新显示

for(inti=0;i++)

console.WfiteLine(,,这是第{o}个对象:{1}”,i+1,anoeument.ModelSpace.Item(i))

//遍历当前图形

Console.ReadLine()

应用C<'#>进行AutoCAD二次开发

作者:陈中治王敏

作者单位:陈中治(中交第二公路勘察设计研究院)王敏(江汉大学机电与建筑工程学院)

相似文献(10条)

1.期刊论文万传风.魏庆朝.吴爽.李大勇轨道交通线路专业基于ActiveX技术进行AutoCAD二次开发的研究-铁道

学报2002,24(1)

对AutoCAD的二次开发工具作了系统、全面的介绍与比较,从中选定ActiveX技术,阐述了选择Visual Basic作为开发语言的原因,给出了应用

ActiveX技术开发AutoCAD的几段原代码,并针对北京城市铁路的部分区段(西直门-回龙观)进行了应用,证明程序的计算速度快捷、结果准确,该方法是可

行的.

2.会议论文万传风.吴爽轨道交通线路专业应用ActiveX技术进行AutoCAD二次开发的研究2001

本文介绍了研究背景与国内外现状,对AutoCAD的二次开发工具作了系统、全面的介绍与比较,从中选定ActiveX Automation技术,并阐述了选择

Visual Basic作为开发语言的原因,并针对北京城市铁路和地铁5号线雍和宫段线路进行了应用,证明程序的计算速度快捷、结果准确,该方法是可行的,同

时应用程序的界面友好,模块化强,可扩充性能好.

3.学位论文刘祖萍基于VBA的AutoCAD图形数据库管理技术研究2004

当前,协同设计是国内外研究的热点.在协同设计过程中不可避免的会产生冲突,结果冲突是协同设计中的主要冲突之一.解决结果冲突的主要方法是

在设计过程中对相关尺寸随时进行检验.实现这一目的的方法之一是使协同设计系统能方便、有效地对CAD图形数据库进行操作,从数据库中提取需要的参

数进行检验.该文就是在这样的背景下研究基于VBA的AutoCAD图形数据库管理技术.该文研究的主要目的是通过对图形数据库的研究,实现利用后台来直接

操作图形数据库(读取、修改、添加数据等),为在协同设计平台上建立独立于CAD系统的图形参数的管理功能提供基础.该文首先对基于VBA的AutoCAD图形

数据库管理技术进行了深入的研究,从理论上阐述了AutoCAD图形数据库的基本结构、输出图形对象的属性信息到外部数据库技术、图形数据库的连接与

操作技术.其次研究了基于VBA的AutoCAD开发技术以及ADO对象模型和CAO对象模型.利用CAO(Connection Automation Objects)对象库根据图形对象的句

柄标识把AutoCAD图形对象链接到外部数据库,构建AutoCAD图形数据库,用以在整个项目生命周期中向用户提供信息.通过ADO(ActiveX Data Objects)数

据访问技术实现对AutoCAD图形数据库进行操作.最后在以上分析与研究的基础上设计了一个基于VBA的AutoCAD图形数据库管理应用系统,以支持在协同设

计平台上对CAD系统的图形参数的管理功能,为解决协同设计中的结果冲突提供基础.

4.期刊论文袁知贵.林焰.纪卓尚在AutoCAD平台上应用ActiveX技术进行船体曲面造型-海洋工程2001,19(1)

论述了AutoCAD ActiveX Automation,并就应用ActiveX技术进行二次开发AutoCAD的问题,讨论了如何引用对象和使用对象的方法和属性、使用文档

对象的事件、用ADO(ActiveX Data Objects)开发基于数据库的应用程序等.通过应用ActiveX技术,在AutoCAD中构造了船体曲面.

5.期刊论文曹敏.宋安军用VBA及ActiveX技术实现AutoCAD的二次开发-电脑开发与应用2001,14(10)

论述了利用AutoCAD内嵌的VBA语言开发工具和ActiveX技术,阐明了AutoCAD进行二次开发的基本理论和方法.

6.学位论文龚志辉基于遗传算法的矩形件优化排样系统研究2003

矩形件排样是不规则零件排样的基础,国内外学者在这方面进行了很多探索,提出了多种算法,该文在认真研究了这些算法的基础上,通过比较分析,提

出了一种针对矩形件排样的新算法.以新算法为基础,该文采用C++语言完成了自动排样系统的开发.在开发过程中,全面考虑了实际排样所面临的种种问题

,提出了用适应度函数经验值来估计初始可排矩形件数目的方法;用矩形件放大的方法来消除切缝对排样图的影响.在记录数据时采用数掘比较记录的方法

,将超边界的部分剔除.自动排样完成了主要的排样工作,但一个完善的排样系统必须可以进行人机交互寻优处理.由于自动排样系统事先只能初步估计待

排矩形件的数目,所以自动排样系统产生的排样图可能会因排入的零件太多而使得个别零件超出板材,或因排入的零件太少而使板材无法排满.同时,自动

排样系统产生的排样图还可以通过零件之间互换位置,零件的旋转、移动等方式来对局部实现优化.该文在AutoCAD基础上成功地开发了一个人机交互寻优

处理系统,这个系统充分利用了AutoCAD强大的图形操作处理功能,实现了对排样图的交互寻优.优化处理之后系统将所有剩余的矩形件重新记录,以备下次

自动排样时调用.

7.期刊论文赖惠芬.鲁绪芝ActiveX技术在AutoCAD二次开发中的应用-宁夏工程技术2003,2(2)

对AutocAD进行二次开发的手段很多,如AutoLisp,ObjectARX,ADS,DXF等.自AutocAD R14版本开始,AutocAD中新增了ActiveX Automation技术.阐述了

用Visual Basic 6.0作为编程工具,从编程的角度,使用ActiveX技术和应用面向对象方法进行AutoCAD二次开发的方法,对通过ActiveX部件实现计算程序

与绘图程序的肾密结合,完成应用程序与AutocAD间的直接通信的有关问题进行了分析研究,为VB编程人员开发Auto-CAD提供了一个有利的工具.

8.期刊论文赵永平.郝赛男.于娇.刘空军.Zhao Yongping.Hao Sainan.Yu Jiao.Liu Kongjun基于VB的AutoCAD二

次开发与图形自动生成技术-森林工程2006,22(1)

通过例程分析对AutoCAD二次开发实现自动成图的几种不同方法的基本原理和特点.重点介绍了利用VB的ActiveX技术进行AutoCAD图形自动生成的原

理、方法与特点,提出了自动成图的程序设计思路和流程.

9.期刊论文慈铁军AutoCAD二次开发技术VBA在母线槽CAD系统中的应用-煤矿机械2004(6)

介绍了AutoCAD内嵌的VBA语言开发工具和ActiveX技术,分析了它的对象模型以及在VBA环境下编写AcitveX自动化程序的可行性.以母线槽CAD软件系

统的开发设计为例,阐明了AutoCAD二次开发的基本理论和方法.

10.期刊论文蒋廷臣.陈益锋.王秀萍.JIANG Ting-chen.CHEN Yi-feng.WANG Xiu-ping基于ActiveX技术的河道断

面图信息提取-测绘科学2009,34(1)

河道测量生产实践中,断面积标注、土方计算表编制等许多内业工作,仍以手工方式完成,耗时费力,且易出错.本文探讨运用ActiveX软件集成技术,提

取河道横断面图上的信息,并对所提取信息处理和挖掘,自动完成断面积标注、河道清淤土方计算表编制等河道测量内业工作,达到了提高工作效率和工作

质量的目的,无疑,该项工作具有极大的应用价值.

本文链接:/Conference_

授权使用:武汉大学(whdx),授权号:9ac3b630-cf44-4ebf-8840-9e6901338c8e

下载时间:2011年1月12日