查无此鸟的博客 一个不误正业的交通工程师的个人网站

[新浪博客]基于VB.NET的AutoCAD二次开发实例

标签:ACAD.NET | 发表时间:2015-07-12 11:00:30 | 更新时间: 2020-04-23 19:13:08 | 阅读数:447 | 评论数:0 | 字数:2903

本文2015-07-12 11:00:30首发于新浪博客,地址:http://blog.sina.com.cn/s/blog_638f98570102vwo7.html。
摘要:使用AutoCAD绘图在各行各业已经十分普遍,二次开发可以增强其功能并使其更加符合专业需求。首先介绍各种AutoCAD二次开发方式的优缺点,其后给出了使用VB.NET开发AutoCAD的一般过程,并通过一个实例在AutoCAD中绘制了一个正六边形。
1. 引言
AutoCAD是使用最为普遍的自动计算机辅助设计软件,广泛用于二维绘图、详细绘制、设计文档和基本三维设计,可以用于土木建筑、装饰装潢、工业制图、工程制图、电子工业、服装加工等多方面领域。
作为一个通用绘图平台,AutoCAD对于解决具体行业或者具体项目的功能还不够完善,因此其提供了丰富的二次开发方式,开发人员可以方便进行功能定制。AutoCAD二次开发方式主要包括ADS、ObjectARX、AutoLISP、VBA等[1],以基于C++的ObjectARX开发为主。

图片01
图1 AutoCAD开发方式-编程语言对应关系

ObjectARX能够对AutoCAD的所有事物进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性强。[1]但是C++的学习成本对于非程序员来说过于高昂,普通技术设计人员自主开发适合自身使用的定制程序十分困难。
从AutoCAD2006开始,AutoDesk为其开发增加了.NET API,使得使用VB语言也可以像C++一样调用ObjectARX开发AutoCAD。[1]本文介绍如何基于VB.NET采用ObjectARX方式开发AutoCAD,并用一个实例演示开发过程。
3. 实例
通过一个绘制正六边形的实例介绍基于VB.NET和ObjectARX的AutoCAD二次开发过程。
3.1 定义基本函数
本实例中使用到3个函数,分别是创建直线函数、提交事务函数、计算30°余弦值函数。
其中创建直线函数用来在AutoCAD模型中绘制直线,函数的参数包括直线的起点坐标和终点坐标;提交事物函数用于将实体图形对象加入到模型空间,需要的参数为实体。这两个函数可以作为通用函数使用,其中提交事物函数使用最多,每创建一个实体对象均需调用一次。
本实例还用到了计算30°余弦值的函数,用来计算30°角的余弦值,从而得到六边形的顶点坐标。
1)创建直线函数
'创建直线
Public Function addLine(ByVal startPt As Point3d, ByVal endPt As Point3d) As ObjectId
'在内存中创建一个直线对象
Dim LineEnt As New Line(startPt, endPt)
'调用AppendEntity函数,将直线加入到模型空间
Dim entID As ObjectId = AppendEntity(LineEnt)
Return entID
End Function
2)提交事物函数
'将图形对象加入到模型空间的函数
Public Function AppendEntity(ByVal Ent As Entity) As ObjectId
'得到当前文档的数据库对象
Dim Db As Database = HostApplicationServices.WorkingDatabase
Dim entID As ObjectId
Using Trans As Transaction = Db.TransactionManager.StartTransaction()
'以读方式打开块表
Dim Bt As BlockTable = Ctype(Trans.GetObject(Db.BlockTableId, OpenMode.ForRead), BlockTable)
'以写方式打开模型空间块表记录
Dim Btr As BlockTableRecord = Ctype(Trans.GetObject(Bt.Item(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)
'将图形对象的信息加到块表记录中,并返回ObjectId对象
entID = Btr.AppendEntity(Ent)
'把直线添加到事物处理中
Trans.AddNewlyCreatedDBObject(Ent, True)
'提交事物处理
Trans.Commit()
End Using
Return entID
End Function
3)计算30°的余弦值函数
'计算30°的余弦值
Function sCos30() As Single
Dim Pi As Single = 3.14
sCos30=Math.Cos(Pi/6)
End Function
3.2 绘制图形
1)正六边形各顶点坐标
以P0作为六边形原点,坐标为(0,0),边长为1,则P1~P5坐标如图2所示。

图片02
图2 正六边形顶点坐标示意图

2)绘制图形
在类库中新建创建六边形的命令 ,调用addLine函数分别绘制出六边形的6条边。主要代码如下所示。
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
Public Class Class1
'创建正六边形的命令
_
Public Sub DrawHexagon()
'分别定义6个点并进行坐标赋值
Dim P0 As New Point3d(0, 0, 0)
Dim P1 As New Point3d(-0.5, sCos30, 0)
Dim P2 As New Point3d(0, 2 * sCos30, 0)
Dim P3 As New Point3d(1, 2 * sCos30, 0)
Dim P4 As New Point3d(1.5, sCos30, 0)
Dim P5 As New Point3d(1, 0, 0)
'分别画出六边形的六条边
addLine(P0,P1)'调用创建直线函数绘制边1
addLine(P1,P2)'调用创建直线函数绘制边2
addLine(P2,P3)'调用创建直线函数绘制边3
addLine(P3,P4)'调用创建直线函数绘制边4
addLine(P4,P5)'调用创建直线函数绘制边5
addLine(P5,P0)'调用创建直线函数绘制边6
End Sub
'将图形对象加入到模型空间的函数
Public Function AppendEntity(ByVal Ent As Entity) As ObjectId
'创建直线
Public Function addLine(ByVal startPt As Point3d, ByVal endPt As Point3d) As ObjectId
'计算30°的余弦值
Function sCos30() As Single
End Class

图片03
图3 代码窗口

3.3 运行与结果
按F5运行程序,在AutoCAD中输入Netload命令打开对话框,找到并加载生成的文件;加载成功后,输入Hexagon命令,程序自动绘制正六边形,效果如图4所示。

图片04
图4 运行效果

注:同名论文已发表于《电脑知识与技术》2014年第26期,本文有删减。

版权声明:本文由@查无此鸟创作,采用知识共享 署名-非商业性使用-禁止演绎 3.0 中国大陆许可协议进行许可。除非注明,均为原创文章,请在转载时注明来源,并完整保留本段声明。本文地址: http://liyonggang.net/blog.aspx?id= 2015-07-12



本文评论:
暂无评论……

发表评论:(昵称或评论内容不允许为空!邮箱可不填,但建议填写以备联系,邮箱将不显示在评论中。) 昵称 邮箱

查无此鸟的博客

Copyright©查无此鸟 2020~2022, All Rights Reserved

邮箱:t5lyg@126.com

其他链接

卢昌海的网站 | 鱼の后花园博客) | 新交通人的技术闲谈-知乎 | FROYOs Blog | 博客园 | 鸟哥Linux | 蜂鸟的小窝 | 大眼仔

AutoCAD.NET: Kevin K | 大非sb