在AutoCAD2000中应用VBA技术自动绘制等高线
cad中如何使用vba

第一课:入门1.为什么要写这个教程市面上ACAD VBA的书不多,它的帮助是英文版的,很多人看不懂。
其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。
2.什么是Autocad VBA?VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。
3、VBA有多难?相信大家都知道Basic是的含义。
应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。
4、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。
仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。
本教程将陆续发布在CAD世界论坛上,您不需要付费就可以学习。
本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。
我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。
5、现在我们开始编写第一个程序:画一百个同心圆第一步:复制下面的红色代码第二步:在模型空间按快捷键Alt+F8,出现宏窗口第三步:在宏名称中填写C100,点“创建”、“确定”第四步:在Sub c100()和End Sub之间粘贴代码第五步:回到模型空间,再次按Alt+F8,点击“运行”Sub c100()Dim cc(0 To 2) As Double '声明坐标变量cc(0) = 1000 '定义圆心座标cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 '开始循环Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆Next iEnd Sub也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。
基于VBA在AutoCAD中自动绘图的应用

基于VBA在AutoCAD中自动绘图的应用------李广亚随着电脑技术的飞速发展,目前大多数企业都采用AutoCAD制图、绘图,在工程施工领域也是采用AutoCAD进行二维工程绘图。
GPS的应用使的施工现场坐标的采集非常方便,通常便于直观,监理、业主会要求将GPS采集的坐标绘制在CAD图上。
对于一个熟悉CAD的人来说,将10几个坐标数据手工录入坐标绘制到CAD中是比较容易的,但如果是几十个点,上百个点,甚至几百个点,对于一个施工技术员来说一个一个坐标的手工录入,就成了一个比较有难度的工作,主要因为手工录入会比较繁琐、耗费时间长还特别容易出错。
在这方面如何能提高技术人员的工作效率?基于此,我们采用AtuoCAD中的VBA技术,进二次开发,可以方便的将大量的坐标自动绘制到CAD图中。
下面通过一个简单事例来说明AtuoCAD中VBA技术的二次开发自动绘图程序的过程: 事件介绍:2012年业主在场区开挖一不规则多边形鱼塘,要求我单位将鱼塘进行测量并标注在总平面图上。
1、数据采集:使用GPS现场进行数据采集,在鱼塘周边从一点开始,顺时针方向进行,在不规则鱼塘的所有角点拐点均采集坐标,并保存在GPS中。
2、导出坐标:将GPS中采集的坐标导出到文本文档,如下图:3、数据处理:将导入的坐标使用EXCEl文档打开并编辑处理,高程全设为0,表单重命名为“SJ”,保存EXCEl文档到D盘,文档名称为“GPS导入坐标绘图”如下图:4、VBA跨平台技术二次开发:(1)、打开AutoCAD,选择工具->宏->VBA编辑器,打开VBA编辑器。
在VBA编缉器中插入用户窗体,在窗体上插入按钮组件,如图:(2)、双击按钮,打开代码编辑窗口,编缉代码如下:Private Sub CommandButton1_Click()Dim xlapp As Excel.ApplicationDim xlbook As Excel.workbookDim xlsheet As Excel.worksheetSet xlapp = CreateObject("excel.application")Set xlbook = xlapp.workbooks.Open("D:\GPS导入坐标绘图.xls")'打开的EXCEL路径xlapp.Visible = FalseSet xlsheet = xlbook.worksheets("sj") '打开EXCEL中的sj工作表i = xlsheet.Cells(1, 2) 'i为线条线数For p = 0 To i - 2 Step 1p = pk1 = xlsheet.Cells(3 + p, 3) '将表格第3行第3列内数值赋值给K1,X坐标值h1 = xlsheet.Cells(3 + p, 2)k3 = xlsheet.Cells(3 + p, 4)k2 = xlsheet.Cells(4 + p, 3)h2 = xlsheet.Cells(4 + p, 2)h3 = xlsheet.Cells(4 + p, 4)Dim 点 As AcadLineDim 起点(2) As DoubleDim 端点(2) As Double起点(0) = k1 '将K1值贱赋值给起点数组内第一个值,即起点X坐标。
AutoCAD2000VBA二次开发方法

A u toCAD 2000VBA 二次开发方法白海清Κ彭玉海;陕西工学院机电系Κ陕西汉中723003ΓD evelopm en t of A u toCAD U sed VBABA I Ha i q i ng ΚPENG Y u ha i;D epartm en t of M echan ical &E lectrical ΚShanx i In stitu te of T echno logy ΚH anzhong 723003ΚCh ina Γ 摘要Π介绍了在A u toCAD 2000下利用VBA 二次开发的方法、技巧和关键技术Κ并通过联轴器的参数化绘图详细阐述了利用VBA 实现参数化设计的步骤及关键技术Λ关键词ΠA u toCAD Μ二次开发ΜVBA中图分类号ΠT P 311.52文献标识码ΠB文章编号Π1001-2257;2002Γ02-0065-03Abstract ΠT h is p ap er in troduces a ob ject o ri 2en ted developm en t too l of A u toCAD 2000based on VBA Κand exp atiates the key techno logy and step of developm en t u sed VBA by an app licati on exam 2p le to draw the w o rk ing draw ing of coup ling .Key words ΠA u toCAD Μdevelopm en t ΜVBA收稿日期Π2001-11-190 引言对A u toCAD 的二次开发可以通过A ctiveX 来实现ΚA ctiveX 是微软公司提出的一个基于COM ;com ponen t ob ject m odel Γ的技术标准Λ应用A u to 2CAD A ctiveX 技术Κ用户可以利用VB 、VBA 等外部或内部程序来操作A u toCAD 暴露的对象Λ在A u toCAD 2000中Κ几乎对外暴露了所有对象Κ包括图形实体对象;如直线、圆ΓΚ样式设置对象;如线型、文本样式ΓΚ组织结构对象;如层、块ΓΚ图形显示对象;如视图、视图区Γ以及菜单、工具栏等Κ也就是说用户可以操作几乎所有的A u toCAD 对象ΛVBA ;visual basic fo r app licati on Γ由V isualB asic 派生而来Κ现在已经成为M icro soft 产品的标准语言Λ与VB 一样ΚVBA 是面向对象的程序设计语言Κ它继承了VB 语法简单、功能强大的特点Κ同时Κ由于VBA 可与主程序在同一内存空间内运行Κ大大提高了运行速度Κ并具有一定的:智能Φ功能Λ在A u toCAD 2000中Κ已经集成功能强大、易学易用的VBA 5.0程序开发环境Κ且提供了高质量的用户化编程能力Λ1 VBA 开发方法及关键技术1.1 AutoCAD ActiveX 对象的使用任何一个具有明确内涵的事物均可以称之为对象Κ如A u toCAD 应用程序Κ图形文件以及图形内的任何实体都是一种对象Κ对象是用类定义的Λ1.1.1 A u toCAD 2000对象模型A u toCAD 2000应用程序公开的对象很多Κ每个对象都代表了A u toCAD 应用程序的一部分Λ图形实体对象Π如直线;line ΓΚ圆;circle Γ等Μ样式设置对象Π如线型;linetyp e Γ等Μ组织结构对象Π如层;layer ΓΚ块;b lock Γ等Μ图形显示对象Π如视图;view ΓΚ视图区;view po rt Γ等Λ这些对象按照从属关系Κ有层次地组织在一起Κ就形成了A u toCAD 2000对象模型Λ1.1.2 对象的访问;引用ΓVBA 访问A u toCAD 2000对象的原则是按照对象模型进行访问ΛVBA 提供了一个特殊的对象—T h is D raw ing Κ它是A u toCAD VBA 的一个术语Κ代表当前打开的A u toCAD 图形文件Λ例ΠD i m M yline A s A cadL ine 9定义应用直线的变量Set M yline =T h is D raw ing .M odelSp ace .Item ;0Γ9应用这个直线;假设该直线是第1个实体Γ1.2 实体对象的创建与编辑在创建实体对象之前Κ要确定实体将放于何处Κ即是模型空间、图纸空间Κ还是存放在块中Λ不论在哪个对象中创建实体Κ都要先引用这个对象Λ・56・=机械与电子Ι2002;2Γ1.2.1 创建基本实体用A ddEn titynam e形式的方法Κ即:创建;A ddΓΦ+:实体名字;En tityN am eΓΦΛ例如下面语句在模型空间创建一个圆Κ圆心为;0Κ0Κ0ΓΚ半径为10ΛD i m cp;0To2ΓA s Doub lecp;0Γ=0Πcp;1Γ=0Πcp;2Γ=0Call T h is D raw ing.M odelSp ace.A ddC ircle;cpΚ10#Γ1.2.2 实体对象的编辑实体编辑是VBA编辑中最常用的操作Κ这些编辑操作包括复制、移动、删除等Λ同样Κ在编辑对象前必须对其引用Λ例Π将模型空间的第一个实体进行复制ΛD i m M yO b ject A s O b jectD i m retO b ject A s V arian tSet M yO b ject=T h is D raw ing.M odelSp ace;0ΓretO b ject=T h is D raw ing.Cop yO b jects;M y2 O b jectΓ1.3 工具栏和菜单的定制1.3.1 创建和编辑菜单A u toCAD A ctiveX可以定制两种类型的菜单Π下拉菜单和快捷菜单Λ创建一个下拉菜单是用A dd 方法将一个新的菜单对象添加到菜单集合中Λ例ΠD i m cu rr M enuGroup A s A cad M enuGroup 9定义菜单组对象变量Set cu rr M enuGroup=T h is D raw ing.A pp lica2 ti on.M enuGroup s.Item;0Γ 9对变量赋值D i m newM enu A s A cadPop upM enuSet newM enu=cu rr M enuGroup.M enu s.A dd ;:联轴器ΦΓ 9创建新菜单:联轴器Φ1.3.2 工具栏的创建与编辑通过A u toCAD A ctiveX技术Κ用户同样可以创建和编辑工具栏Λ用A dd方法可以向工具栏集合中添加新的工具栏Λ例Π创建一个名为:Coup lingΦ的工具栏ΠD i m cu rr M enuGroup A s A cad M enuGroupSet cu rr M enuGroup=T h is D raw ing.A pp lica2 ti on.M enuGroup s.Item;0ΓD i m new Too l B ar A s A cadToo l B arSet new Too l B ar=cu rr M enuGroup.Too l B ars.A dd;:Coup lingΦΓ以上是A u toCAD二次开发时用到的主要方法和技术Λ2 应用实例使用A u toCAD2000VBA二次开发技术Κ实现通用机械零件联轴器的参数化绘制Λ绘制时先创建一个块Κ在块中绘制联轴器Κ并使其可以随意拖动和定位Λ加载后在A u toCAD:绘制Φ菜单下增加一下拉菜单项:联轴器ΦΚ快捷菜单中增加菜单项:联轴器ΦΚ工具栏上增加一工具栏Λ2.1 设计窗体界面在A u toCAD命令行键入:VBA I D EΦ进入VBA 综合开发环境Κ在:插入Φ菜单下选择:添加用户窗体ΦΚ系统将显示一个空白窗体和控件工具箱Λ用户根据自己的愿望进行窗体设计Λ笔者开发的联轴器绘制窗体如图1所示Λ图1 联轴器绘制窗体2.2 编写程序代码按照VBA的编程方法为每一个对象编写相应代码Κ实现所要求的界面和联轴器的参数化绘制Λ这里仅介绍在A u toCAD的:绘图Φ菜单添加下拉菜单项:联轴器Φ的程序代码ΛPub lic Sub addm enu;O p ti onal a A s B yteΓ O n E rro r R esum e N ex t D i m oA cad A s A cadA pp licati on Set oA cad=T h is D raw ing.A pp licati on D i m oPop up A s A cadPop upM enu D i m oSubPop up A s A cadPop upM enu Item Fo r Each oPop up In oA cad.M enuB ar ‘tagstring is no t localized so u se it to locate the m enu D i m op enm acro A s String op enm acro=Ch r;3Γ+Ch r;3Γ+Ch r ;95Γ+:-vbarunΦ+Ch r;32Γ+:coup lingΦ+Ch r ;32Γ・66・=机械与电子Ι2002;2Γ If oPop up.T agString="I D M nD raw" T hen Set oSubPop up=oPop up.A dd M enu2 Item;0Κ"联轴器;&ZΓ"Κop enm acroΓ End IfN ex tEnd Sub3 结束语用内嵌VBA二次开发A u toCAD2000的方法简单、编程容易Κ并且运行速度较快ΛVBA具有如下特点Πa.VBA能够使A u toCAD与其它应用程序直接共享数据Λb.在VBA综合开发环境中Κ可以通过拖动图标的方法Κ简单而可视化地建立用户界面Λ用户可以使用A u toCAD工具栏Κ也可以使用标准VBA界面工具创建新的工具栏Λc.VBA的语言代码完全继承了VB的特征Κ编程语言简单Λd.具有开放式的对象模型Κ用户可以按照自己的愿望编程或定制A u toCAD2000软件Λe.具有良好的运行速度ΛVBA是一个内嵌式的控制器Κ共享A u toCAD的内存空间Κ其运行速度比其它开发方式;如AD S、L ispΓ要提高许多Λ利用VBA二次开发的技术Κ工程设计人员可以定制A u toCADΚ把用到的标准件象联轴器的参数化绘制一样Κ全部实现自动选取Κ因而大大地提高了设计效率Λ参考文献Π[1] 李晓明Κ等.A u toCAD2000使用与开发指南[M].北京Π国防工业出版社Κ2000.[2] 张国宝.A u toCAD2000VBA开发技术[M].北京Π清华大学出版社Κ2000.[3] 徐 灏.机械设计手册4;第二版Γ[M].北京Π机械工业出版社Κ2000.[4] D ietm ar R udo lph.A u toCAD2000对象开发从入门到精通[M].曾 琦Κ等译.北京Π电子工业出版社Κ2000.作者简介Π白海清 ;1970—ΓΚ男Κ陕西省榆林市人Κ机械设计制造及其自动化教研室主任Κ主要从事先进制造技术及机电一体化技术的研究ΛM A ST ER K系列可编程控制器在牧草打捆机上的应用 牧草打捆机一般是由液压系统来实现作业的Κ即先将料槽里已经称量好重量的牧草推入打捆机压缩箱内Κ封箱;上盖油缸前进ΓΜ然后主压油缸推动活塞在压缩箱内前进挤压牧草Κ达到设定位置挤压动作停止Μ再由推出油缸将草捆横向推出压缩箱Μ接下来3个油缸按前进顺序的逆顺序退回原位Κ即完成了一个工作循环Λ国内绝大多数打捆机的电气控制为手工控制Κ即由操作工人按工作顺序点动一系列按扭来完成打捆机的基本动作Λ这种操作不仅浪费人力、动作精度不好保证Κ而且极易出错Κ工作效率低Λ为使打捆机在正常工作时能够实现全自动化Κ提高工作效率和精度Κ我们在设计打捆机时Κ考虑到产品的造价和实际工作需要Κ把装料进压缩箱这一动作设计由人工来完成Κ从封箱开始到回位共6个动作为自动循环Λ电气控制部分Κ将M K系列可编程控制器;PL CΓ作为控制核心Κ使打捆机可实现全自动控制、点动控制、手动顺序控制以及行程开关调整控制ΛM K系列可编程控制器;PL CΓ是L G公司的产品Κ该产品除具备PL C共有的可靠性高、柔性好、功能强大、使用方便、体积小、能耗低等特点外Κ还可识别梯形图程序Κ编程简便Κ可直接在个人计算机上用其附带软件进行编程、编好的程序可用232电缆由计算机的通信口直接传送进PL CΚ可用一些简单的触发开关代替实际的触发信号在计算机上模拟运行程序Κ调试、修改程序非常方便Λ由于PL C内部设有若干:软继电器ΦΚ因此Κ在输出电路里不需要给每个液压系统的电磁阀设置一个继电器Κ这样也大大简化了外电路的结构Κ给电气系统的检修带来了极大的方便Κ使整个电气系统的可靠性大大提高Λ经实际使用证明Κ将PL C用于国产打捆机控制系统效果良好Κ是一种方便可行的方法Λ;黑龙江八一农垦大学食品学院 李大鹏Γ・76・=机械与电子Ι2002;2Γ。
基于VBA在AutoCAD中自动绘图的应用

基于VBA在AutoCAD中自动绘图的应用------李广亚随着电脑技术的飞速发展,目前大多数企业都采用AutoCAD制图、绘图,在工程施工领域也是采用AutoCAD进行二维工程绘图。
GPS的应用使的施工现场坐标的采集非常方便,通常便于直观,监理、业主会要求将GPS采集的坐标绘制在CAD图上。
对于一个熟悉CAD的人来说,将10几个坐标数据手工录入坐标绘制到CAD中是比较容易的,但如果是几十个点,上百个点,甚至几百个点,对于一个施工技术员来说一个一个坐标的手工录入,就成了一个比较有难度的工作,主要因为手工录入会比较繁琐、耗费时间长还特别容易出错。
在这方面如何能提高技术人员的工作效率?基于此,我们采用AtuoCAD中的VBA技术,进二次开发,可以方便的将大量的坐标自动绘制到CAD图中。
下面通过一个简单事例来说明AtuoCAD中VBA技术的二次开发自动绘图程序的过程: 事件介绍:2012年业主在场区开挖一不规则多边形鱼塘,要求我单位将鱼塘进行测量并标注在总平面图上。
1、数据采集:使用GPS现场进行数据采集,在鱼塘周边从一点开始,顺时针方向进行,在不规则鱼塘的所有角点拐点均采集坐标,并保存在GPS中。
2、导出坐标:将GPS中采集的坐标导出到文本文档,如下图:3、数据处理:将导入的坐标使用EXCEl文档打开并编辑处理,高程全设为0,表单重命名为“SJ”,保存EXCEl文档到D盘,文档名称为“GPS导入坐标绘图”如下图:4、VBA跨平台技术二次开发:(1)、打开AutoCAD,选择工具->宏->VBA编辑器,打开VBA编辑器。
在VBA编缉器中插入用户窗体,在窗体上插入按钮组件,如图:(2)、双击按钮,打开代码编辑窗口,编缉代码如下:Private Sub CommandButton1_Click()Dim xlapp As Excel.ApplicationDim xlbook As Excel.workbookDim xlsheet As Excel.worksheetSet xlapp = CreateObject("excel.application")Set xlbook = xlapp.workbooks.Open("D:\GPS导入坐标绘图.xls")'打开的EXCEL路径xlapp.Visible = FalseSet xlsheet = xlbook.worksheets("sj") '打开EXCEL中的sj工作表i = xlsheet.Cells(1, 2) 'i为线条线数For p = 0 To i - 2 Step 1p = pk1 = xlsheet.Cells(3 + p, 3) '将表格第3行第3列内数值赋值给K1,X坐标值h1 = xlsheet.Cells(3 + p, 2)k3 = xlsheet.Cells(3 + p, 4)k2 = xlsheet.Cells(4 + p, 3)h2 = xlsheet.Cells(4 + p, 2)h3 = xlsheet.Cells(4 + p, 4)Dim 点 As AcadLineDim 起点(2) As DoubleDim 端点(2) As Double起点(0) = k1 '将K1值贱赋值给起点数组内第一个值,即起点X坐标。
CAD等高线自动标高赋值VBX代码

FilterType(2) = 0
FilterData(2) = "Polyline"
FilterType(3) = 0
FilterData(3) = "Line"
FilterType(4) = -4
Private Sub CmdH_Click()
'接受输入步长值和增量
Dim dblStart As Double, dblStep As Double
Dim dblStart0 As Double
On Error Resume Next
dblStart = 0
dblStep = 1
Next
= 0 Then
ThisDrawing.Utility.Prompt "已成功为等高线设置高程哈哈。" + vbCrLf
Else
ThisDrawing.Utility.Prompt "执行过程中出现错误呵呵呵。" + vbCrLf
'给3DPolyline赋高程
ReDim NPS(UBound(ent.Coordinates)) As Double
NPS = ent.Coordinates
For i = 2 To UBound(ent.Coordinates) Step 3
Dim i As Integer
For Each ent In ssetObj
Select Case TypeName(ent)
Case "IAcadLine"
AutoCAD中如何生成等高线

AutoCAD中如何生成等高线AutoCAD中如何生成等高线工具准备AutoCAD2008AutoCAD2014(64位)BIGEMAP地图下载器Global Mapper下载地址:第一步影像下载/高程数据下载影像须使用BIGEMAP地图下载器中Google Earth无偏移影像,并具有无Google 小水印、免封IP、影像更新更快等特点。
首先在图源列表中选中Google Earth图源,只有此图源可实现高清卫星图像下载和高程等高线下载。
在此通过矩形区域选择下载边界(如图 1所示),以下载重庆的某块区域为例加以演示:下载卫星图像选定一个区域,下载卫星图像,如下图:注意:红色箭头的地方。
下载高程数据同一个矩形区域,再次双击,选择高程,选择级别,开始下载,如下图:第二步:投影变换由于AutoCAD不支持经纬度坐标,需要用到大地坐标,所以需要将下载的卫星图像和高程数据转换成Xi'AN80坐标系或者Beijing54坐标系。
本实例已转Xi'an80坐标系为例说明。
2.1 将卫星图像转化成Xi'an80坐标系如何将下载的卫星图像转换成西安80坐标?2.2 将高程数据转换成Xi'an80坐标系如何转换等高线到西安80坐标系?第三步:将等高线和卫星图像在CAD中打开叠加3.1 先打开等高线在等高线转换成西安80之后,保存成为了DXF格式,双击DXF 格式的等高线,会自动启动CAD打开等高线,如下图:3.2 插入卫星图像在2.1中转换成西安80坐标系的过程中,转换完成后的目录里会有一个与你保存转换后卫星图像文件同名的TXT文件,如本例中的下图:打开这个TXT文件,如下图:回到刚才打开等高线的AutoCAD界面:选择工具栏里面的【插入】->【光栅图像参照】,如下图:打开如下界面,选择转换成西安80的卫星图像,如下图:点击【打开】,出现如下界面:上图中需要填写①和②的参数,把方框□中的勾去掉,下面的参数才可以填写,这个参数来自刚开打开的TXT文件,填写如下:①X(X):填写TXT文件中的【左下角X】后面的数字X(Y):填写TXT文件中的【左下角Y】后面的数字Z(Z):不用填,默认②缩放比例:填写TXT文件中的【实际宽度】后面的数字填写完成后的效果如下图:点击上图中的【确定】,如下图所示:选择工具栏的【工具】->【绘图次序】->【后置】,框选整个图像区域,如下图:滚动鼠标可放大缩小,如下图:套合成功,很完美的效果,可储存为你想要的结果。
CAD中等高线的绘制

用法:1:启动AUTO_CAD;2:在Co mmand中输入vb aload命令,装载需要运行扩展名为dv b文件(本程式名为:“Celi ang_P rojec t.dvb”)。
3:在Comm and中输入vbar un命令(快捷键Al t+F8),选取需要运行的功能。
其中:Celi angTo olbar功能为增加一个本程式包的工具条;celi ang1为展点程式;celia ng2为等高线生成程式;cel iang3为断面图生成程式。
查看原代码:在Co mmand中输入vb aide命令(快捷键Alt+F11)。
cel iang1是展点程式,暂只能展Cass扩展名为da t文件格式。
Ca ss格式:1,nam e1,2904.500,2637.800,-4.5002,,2910.900,2644.700,-5.000... ...其中:1为点序号;nam e1为点名;2904.500为X坐标;2637.800为Y坐标;-4.500为高程。
功能:生成层指定名;可选择展出三维坐标点、点名、序号、坐标;坐标X、Y轴对换;使用方法:1:在CA D用vba load命令装载Ce liang_Proj ect.d vb程序;2:后运行-vbar un命令,输入cel iang1,回车;3:按开始键,装入需要展点的原始dat文件。
速度如下表:(CPU:1.8G 内存:256M 测试)展点数;商业测量软件;未打开过程显示的本程式式;65000个点; 1.5分钟;1分钟;celi ang2是生成三角网和等高线程式。
只能由图面点生成,暂无边界选取功能。
AutoCAD 二次开发技术VBA在窗体绘图中的应用

AutoCAD 二次开发技术VBA 在窗体绘图中的应用地质10-1班何有AutoCAD 二次开发技术VBA在窗体绘图中的应用何有(黑龙江科技大学地质10-1班)摘要:根据目前提供的AutoCAD二次开发工具,结合VB面向对象编程的强大功能,介绍了AutoCAD进行二次开发的一般原理,着重分析了VB对AutoCAD进行二次开发的实现途径和具体方法,并且结合实际要求,以窗体绘制巷道断面为例,说明了VB对AutoCAD二次开发完成窗体化绘图的优点及实用性。
关键词: VBA; AutoCAD; 二次开发一、引言AutoCAD二次开发主要包括用户接口的设计和开发,标准元件库的建立, 工程图纸的生成, 接口文件的生成,其中用户接口包括绘图主界面、菜单、工具按钮和命令行等。
标准元件库的建立可以大大减少复杂繁琐的重复劳动, 同时也可以提高应用程序的标准化程度。
各种明细表文件的自动生成对于完整的工程图纸也是必须的。
此外,利用数据库技术可以实现2个系统之间的信息交换,同时引入一些复杂的算法来实现应用程序结构的优化。
可以看出,二次开发特别是利用高级语言进行的AutoCAD二次开发具有较大的灵活性, 再加上数据库技术和动态链接库技术的支持等, 使应用程序具有更为强大的功能和运行效率, 系统的集成性也得到很大的提高。
Visual Basic 是独立于AutoCAD 的开发环境, 而VBA 和AutoCAD 运行在同一处理空间,通过接口界面提供AutoCAD 的编程控制。
VBA 通过使用ThisDrawing 对象提供到Auto CAD当前进程中激活图形的链接, 从而可以快速访问当前文档对象和其方法、属性和事件,以及其他所有对象层中的对象。
这使程序执行速度大大地提高了,两者之间的通讯变得简洁而高效。
系统环境为AutoCAD 和VBA 之间的结合提供很强的接口功能,不但可以控制AutoCAD 对象,还可以从其他应用程序发送数据或接收数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在AutoCAD2000中应用VBA技术
自动绘制等高线
王永新
福州市土地管理局计算机中心 350004
摘要:
应用AutoCAD进行地形图的计算机辅助制图能够极大地提高工作效率,但其没有自动生成等高线的功能,本人用VBA技术,将外业采集的离散点通过建立三角网,在三角形边上内插等高点的方式,能够在AutoCAD中实现等高线的自动绘制。
内容:
VB是最为常用的支持ActiveX Automation技术的开发工具,其语法简单、功能强大。
VBA是VB的子集,由于AutoCAD2000的VBA是嵌入在AutoCAD 内部的,共享AutoCAD内存空间,可以很好地与AutoCAD沟通。
运用VBA 技术自动绘制等高线将极大地提高绘图效率,缩短项目的周期。
平面等高线自动绘制有很多方法,其中较为简单和比较常用的是三角网法。
用三角网方法绘制等高线包括四个主要过程:根据离散分布的数据点(离散点)建立不规则的三角形网;在三角形边上内插等高点;找等高线的起迄点并追踪全部等高点;连接等高点绘成光滑曲线。
下面介绍三角网法绘制等高线具体的算法过程。
一、建立三角网
假设在AutoCAD模型空间的平面上已经有n个离散点,点的类型为具有3D坐标的Point实体。
为了保证等值点内插的精度,要使形成的每个三角形尽可能呈锐角三角形,并保证各个三角形之间互不交叉且不重复。
具体联结的方法是:
1、确定第一个三角形
设L为每次自动连成的三角形编号,K为每次用来扩展的三角形编号。
首先设L=1,从n个离散点中找出左下角的点赋给Ver(L,1),作为第一个三角形的第一个顶点,找出距离该点最近的点赋给Ver(L,2),作为第一个三角形的第二个顶点,找出距离这两点连线中点最近且不和这两点在一条直线上的点赋给Ver(L,3),作为第一个三角形的第三个顶点。
这样,就形成一号三角形的顶点信息,K=1。
2、三角形扩展
由第一号三角形向外扩展,直到将全部的离散点连成三角网的过程是:首先从K 号三角形的第一条边(Ver(K,1)、Ver(K,2))向外扩展,为了避免三角形的交叉,以第一条边为界,显然,位于顶点Ver(K,3)同侧的离散点必须被排除,(见图1),利用直线判别正负区的原理可以实现这一要求。
为此,首先建立正负区判别式:
F (X ,Y )=Y –A · X –B
式中: A=(Y 2 –Y 1)/(X 2–X 1)
B=(Y 1X 2–Y 2X 1)/(X 2–X 1)
X 1、Y 1和X 2、Y 2分别为扩展边两端点的坐标。
〉0 离散点位于正区
显然, F (X ,Y )= = 0 离散点位于该直线上
〈 0 离散点位于负区
将K 号三角形的第三个顶点Ver(K,3)的坐标
代入F (X ,Y ),结果赋给M1,然后将其余离散
点的坐标也代入F (X ,Y ),结果赋给M2,凡
M1=M2或M2=0的离散点都被排除,对符合判
别条件的离散点,利用三角形边角关系的余弦定理:c ²=a ²+b ²-2abcosC ,找出与扩展边上的两点组成的角在所有的三角形中为最大,该点就作为新的三角形的第三个顶点Ver(L,3),此时的
L=L+1。
为了避免三角形的交叉和重复,对该顶点还要进行一次检查判断,其方法是根据三角形的任一边最多只能为两个三角形共用这一条件,进行全等比较。
即判断新的三角形的三条边是否已分别被前面形成的三角形共用过两次,如果是,则此三角形无效,此时L=L-1。
否则,为有效三角形。
K 号三角形的
第一条边扩展完后,就可转向其它两条边重复上述扩展工作,每当形成一个新的三角形时,必须使L=L+1。
直至K 号三角形的三条边都做完扩展工作以后,再取出另一个三角形(K=K+1)来继续做新三角形的扩展工作,当K=L 并且L≠1时,表示全部三角形扩展结束,这时三角网就形成了。
依据上述原理和方法,自动联结三角网的程序设计流程图见附图1。
二、在三角形边上内插等高点
建立了三角网信息后,接着找出位于离散点间等高点的平面位置。
显然等高点的内插都是在三角形边上进行的。
下面讨论任一三角形的空间情况:平面三角形1’2’3’对应于空间三角形123,三角形的三个顶点1、2、3的高程值分别为Z 1、Z 2、Z 3,图2中B1B2线为空间等高线,b1b2线为投影等高线,两者之间的距离为等高线的高程值,用Z 表示,则有:
图1 直线判别正负区的原理 (斜线部分为不能扩展的点)
Z=|B 1b 1|=|B 2b 2|
平面三角形1’2’3’上是否有等高点取决于空间三角形123是否与高程为Z 的水平面相交。
即为了在三角形边上内插等高点,
首先采用下式,判别该边有无等高点通过:
(Z –Z 1)·(Z –Z 2)≥0时,则该边无等高点,否则必有等高点。
(Z –Z 1)·(Z –Z 3)≥0时,则该边无等高点,否则必有等高点。
(Z –Z 2)·(Z –Z 2)≥0时,则该边无等高点,否则必有等高点。
在确定三角形边上存在等高点后,用下述线性内插公式,求取图2中b 1、b 2点的平面坐标:
式中的(X1,Y1,Z1),(X2,Y2,Z2),
(X3,Y3,Z3)分别为三角形三顶点的坐标。
三、 搜索等高线的起迄点并追踪全部等高点
1、搜索等高线的起迄点
为了追踪等高点,以便连结成等高线,首先必须寻找该条等高线的起始等高点和终止等高点,也即线头。
对于闭合等高线,如图3所示,等高线
由三角形I 到三角形IV 所经过的a 、b 、c 、
d 各等高点都属于中间点,任一点都可以作
为等高线的起点和终点。
对于非闭合等高线,如图4所示,B 点
既是三角形I 的出口点,又是三角形II 的入口点,因此将三角形I 的B 点的坐标同相邻三角形II 的B ’点坐标作比较,两者必定相
等,这时将计数器M=M+1=2的值赋给数组LB(L)。
但是,如果等高点位于边
界上时(图4的A 点和C 点),只能自
身进行比较时相等,这时将计数器
M=M+1=1的值赋给数组LB(L)。
(计数器
M 的值在每个点进行完比较后置为0
,即
图2 内插等高点示意图
图3 搜索闭曲线的起迄点
M=0)。
所以,根据这个条件可以判别:当
M=1时,该高程点位于边界上,即为起迄等
高点,当M=2时,该高程点属于中间高程
点。
2、等高点的追踪
在追踪等高点时,先找开曲线的起始等
高点(即LB(L)=1的三角形入口等高点),然后根据某一等高点既是某个三角形的出口点,又是相邻三角形的入口点的原理,建立追踪算法,具体方法如下:
①、首先从LB(L)中找到数值为1的三角形号,将开曲线起始等高点的坐标X、Y赋给Xd0(LD1)、Yd0(LD1),即Xd0(LD1)=Xb(1,L),Yd0(LD1) =Yb(1,L)。
LD1为等高点记数,此时LD1=1。
接着LD1=LD1+1,Xd0(LD1)=Xb(2,L),Yd0(LD1) =Yb(2,L)。
②、按照三角形的序号,将Xd0(LD1)、Yd0(LD1)同全部三角形所有等高点进行全等比较,当Xd0(LD1)=Xb(1,J)和Yd0(LD1)=Yb(1,J)时,则LD1=LD1+1,Xd0(LD1)=Xb(2,L),Yd0(LD1) =Yb(2,L);当Xd0(LD1)=Xb(2,J)和Yd0(LD1)=Yb(2,J)时,则LD1=LD1+1,Xd0(LD1)=Xb(1,L),Yd0(LD1) =Yb(1,L)。
为了避开已经被追踪过的三角形,须抹去该三角形,即将LB(L)置零。
按照这种方法,一直追踪到开曲线的终点,得到开曲线一组有序的等高点Xd0(LD1),Yd0(LD1) ,LD1=1,2,┉,N。
然后调用绘制曲线程序,将一组等高点连成曲线。
③、绘完所有的开曲线,转入追踪闭合等高线。
当LB(L)=2时,闭合等高线的起点可以从任一三角形的等高点开始,按上述方法追踪到该点结束并绘制出闭曲线。
④、当某一高程等高线全部追踪完后,再开始下一个高程等高线的绘制,按上述方法直到全部等高线绘制结束。
3、离散点的预处理
为了避免离散点的高程与等高线高程值相等,造成在追踪时发生重复使用和追踪混乱的问题,必须对离散点进行预处理,方法是对等于当前高程值的离散点加上一个足够小的数值给予修正。
修正值应很小,使其不至于影响到绘图的精度。
四、连接等高点绘成光滑曲线
B样条曲线在AutoCAD中称为Spline曲线,它可以将平面或空间上的任意3个或3个以上的点,连成一条光滑的曲线。
在本例中使用AddSpline方法创建样条曲线来代表等高线。
依据上述原理和方法,绘制等高线的程序设计流程图见附图2。
参考书:
1、胡友元等:计算机地图制图,测绘出版社,1987
2、王来生等:大比例尺地形图机助制图算法及程序,测绘出版社,1992
附图1 自动联结三角网流程图
附图2 绘制等高线流程图。