autocad+vba开发实例教程(autocad编程显示错误提示“autocad主窗口不可见“是为什么)

:暂无数据 2026-07-08 16:30:05 :0

autocad+vba开发实例教程(autocad编程显示错误提示“autocad主窗口不可见“是为什么)

“autocad+vba开发实例教程”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看autocad+vba开发实例教程(autocad编程显示错误提示“autocad主窗口不可见“是为什么)!

本文目录

autocad编程显示错误提示“autocad主窗口不可见“是为什么

显示“主窗口不可见”的错误,这是因为自己创建的的窗体被认为是模型显示,只要自己创建的窗体隐藏就行了,我也是从书中找到答案的,AutoCAD+VBA&vb.NET开发基础与实例教程(vb.net)版 102页。
解决方法
假如自己创建的窗口叫Form1
那么在代码中加入
Form1.hide
Dim textobj As AcadText
Dim txstr As String
Dim inspnt As Variant
Dim txtheight As Double
txtStr = "你好"
txtheight = 15
inspnt = ThisDrawing.Utility.GetPoint(, "chosepoint")
Set textobj = ThisDrawing.ModelSpace.AddText(txtStr, inspnt, txtheight)
Form1.show

AutoCAD CAD 二次开发 CAD VBA开发

Dim BlockNameSt As String
Sub DimDimaligned()
On Error GoTo Err
Dim Po(0 To 2) As Double
Dim Pr(0 To 2) As Double
Dim Var As Variant
Dim DimDimalign As AcadDimRotated
Dim BlokName As String
Dim Ang As Double
Dim LDob As Double
Dim XDob As Double
Dim PtH As String
Var = ThisDrawing.Utility.GetPoint(, vbCr & "指定第一条尺寸界线原点:")
Po(0) = Var(0): Po(1) = Var(1): Po(2) = Var(2)
Var = ThisDrawing.Utility.GetPoint(Po, vbCr & "指定第二条尺寸界线原点:")
Pr(0) = Var(0): Pr(1) = Var(1): Pr(2) = Var(2)
XDob = Pr(0) - Po(0)
LDob = Sqr(((Pr(0) - Po(0)) * (Pr(0) - Po(0))) + ((Pr(1) - Po(1)) * (Pr(1) - Po(1))))
Ang = XDob / LDob
If Pr(1) 》 Po(1) Then
Ang = Atn(-Ang / Sqr(-Ang * Ang + 1)) + 2 * Atn(1)
End If
If Pr(1) 《 Po(1) Then
Ang = -Atn(-Ang / Sqr(-Ang * Ang + 1)) + 2 * Atn(1) - 180 * 3.1415926 / 180
End If
If Pr(1) = Po(1) And Pr(0) 《 Po(0) Then
Ang = 180 * 3.1415926 / 180
End If
If Pr(1) = Po(1) And Pr(0) 》 Po(0) Then
Ang = 0
End If
Set DimDimalign = ThisDrawing.ModelSpace.AddDimRotated(Po, Pr, Pr, Ang)
Err:
End Sub
Sub Linkblok()
On Error GoTo Err
Dim Po(0 To 2) As Double
Dim Pr(0 To 2) As Double
Dim Var As Variant
Dim BlokIn As AcadBlockReference
Dim BlokName As String
Dim Ang As Double
Dim LDob As Double
Dim XDob As Double
Dim PtH As String
Dim UcsObj As AcadUCS
Dim Origin(0 To 2) As Double
Dim XAxisPo(0 To 2) As Double
Dim YAxisPo(0 To 2) As Double
Origin(0) = 0#: Origin(1) = 0#: Origin(2) = 0#
XAxisPo(0) = 3: XAxisPo(1) = 0: XAxisPo(2) = 0
YAxisPo(0) = 0: YAxisPo(1) = 3: YAxisPo(2) = 0
Set UcsObj = ThisDrawing.UserCoordinateSystems.Add(Origin, XAxisPo, YAxisPo, "WUCS")
ThisDrawing.ActiveUCS = UcsObj
BlokName = ThisDrawing.Utility.GetString(False, vbCr & "输入的块名《" + BlockNameSt + "》: ")
If BlokName = "" Then BlokName = BlockNameSt
PtH = "D:\CAD块\" + BlokName + ".dwg"
If Dir(PtH) 《》 "" Then
BlockNameSt = BlokName

Do
Var = ThisDrawing.Utility.GetPoint(, vbCr & "选取图块放置点:")
Po(0) = Var(0): Po(1) = Var(1): Po(2) = Var(2)
Set BlokIn = ThisDrawing.ModelSpace.InsertBlock(Po, PtH, 1, 1, 1, 0)
Var = ThisDrawing.Utility.GetPoint(Po, vbCr & "指定图块方向:")
Pr(0) = Var(0): Pr(1) = Var(1): Pr(2) = Var(2)
XDob = Pr(0) - Po(0)
LDob = Sqr(((Pr(0) - Po(0)) * (Pr(0) - Po(0))) + ((Pr(1) - Po(1)) * (Pr(1) - Po(1))))
Ang = XDob / LDob
If Pr(1) 》 Po(1) Then
Ang = Atn(-Ang / Sqr(-Ang * Ang + 1)) + 2 * Atn(1)
End If
If Pr(1) 《 Po(1) Then
Ang = -Atn(-Ang / Sqr(-Ang * Ang + 1)) + 2 * Atn(1) - 180 * 3.1415926 / 180
End If
If Pr(1) = Po(1) And Pr(0) 《 Po(0) Then
Ang = 180 * 3.1415926 / 180
End If
If Pr(1) = Po(1) And Pr(0) 》 Po(0) Then
Ang = 0
End If

BlokIn.Rotate Po, Ang
Loop
Else
ThisDrawing.Utility.Prompt vbCr & PtH + "的文件路径不存在!"
End If
Err:
End Sub
Sub LinkblokR0()
On Error GoTo Err
Dim Po(0 To 2) As Double
Dim Pr(0 To 2) As Double
Dim Var As Variant
Dim BlokIn As AcadBlockReference
Dim BlokName As String
Dim Ang As Double
Dim LDob As Double
Dim XDob As Double
Dim PtH As String
Dim UcsObj As AcadUCS
Dim Origin(0 To 2) As Double
Dim XAxisPo(0 To 2) As Double
Dim YAxisPo(0 To 2) As Double
Origin(0) = 0#: Origin(1) = 0#: Origin(2) = 0#
XAxisPo(0) = 3: XAxisPo(1) = 0: XAxisPo(2) = 0
YAxisPo(0) = 0: YAxisPo(1) = 3: YAxisPo(2) = 0
Set UcsObj = ThisDrawing.UserCoordinateSystems.Add(Origin, XAxisPo, YAxisPo, "WUCS")
ThisDrawing.ActiveUCS = UcsObj
BlokName = ThisDrawing.Utility.GetString(False, vbCr & "输入的块名《" + BlockNameSt + "》: ")
If BlokName = "" Then BlokName = BlockNameSt
PtH = "D:\CAD块\" + BlokName + ".dwg"
If Dir(PtH) 《》 "" Then
BlockNameSt = BlokName

Do
Var = ThisDrawing.Utility.GetPoint(, vbCr & "选取图块放置点:")
Po(0) = Var(0): Po(1) = Var(1): Po(2) = Var(2)
Set BlokIn = ThisDrawing.ModelSpace.InsertBlock(Po, PtH, 1, 1, 1, 0)
’Var = ThisDrawing.Utility.GetPoint(Po, vbCr & "指定图块方向:")
’Pr(0) = Var(0): Pr(1) = Var(1): Pr(2) = Var(2)
Pr(0) = 0#: Pr(1) = 0#: Pr(2) = 0#
XDob = Pr(0) - Po(0)
LDob = Sqr(((Pr(0) - Po(0)) * (Pr(0) - Po(0))) + ((Pr(1) - Po(1)) * (Pr(1) - Po(1))))
Ang = XDob / LDob
If Pr(1) 》 Po(1) Then
Ang = Atn(-Ang / Sqr(-Ang * Ang + 1)) + 2 * Atn(1)
End If
If Pr(1) 《 Po(1) Then
Ang = -Atn(-Ang / Sqr(-Ang * Ang + 1)) + 2 * Atn(1) - 180 * 3.1415926 / 180
End If
If Pr(1) = Po(1) And Pr(0) 《 Po(0) Then
Ang = 180 * 3.1415926 / 180
End If
If Pr(1) = Po(1) And Pr(0) 》 Po(0) Then
Ang = 0
End If

BlokIn.Rotate Po, Ang
Loop
Else
ThisDrawing.Utility.Prompt vbCr & PtH + "的文件路径不存在!"
End If
Err:
End Sub

Sub PlineLenX()
On Error GoTo Err
Dim Plx As String
Dim Obj As AcadEntity
Dim LenTxt As AcadText
Dim Po(0 To 2) As Double
Dim Var As Variant
ThisDrawing.Utility.GetEntity Obj, Var, vbCr & "选取PolyLine对象:"
If Obj.ObjectName = "AcDbPolyline" Then
Plx = CStr(Int(Obj.Length * 100) / 100)

Var = ThisDrawing.Utility.GetPoint(, vbCr & "选取文字放置点:")
Po(0) = Var(0): Po(1) = Var(1): Po(2) = Var(2)
Set LenTxt = ThisDrawing.ModelSpace.AddText("heater len", Po, 4)
LenTxt.StyleName = "HEATERTXT": LenTxt.Layer = "3"
Po(0) = Po(0): Po(1) = Po(1) - 6: Po(2) = Po(2)
Set LenTxt = ThisDrawing.ModelSpace.AddText(Plx, Po, 4)
LenTxt.StyleName = "HEATERTXT": LenTxt.Layer = "3"
Else
ThisDrawing.Utility.Prompt vbCr & "选取对象无效!"
End If
Err:
End Sub

CAD软件怎么进行二次开发CAD二次开发的操作教程

CAD软件是一款非常专业的绘图软件,由于其强大的功能,CAD在各行各业应用非常广泛。不仅如此,CAD还是一个复杂的计算机辅助设计系统,可以对其进行二次开发定制,让它更加适用于某一具体的设计领域。你知道怎么对CAD进行二次开发吗?下面内容就来演示CAD二次开发的操作方法。更多CAD软件的使用教程都在哦,这里有CAD从基础到进阶的各种操作教程,快来一起学习吧。

CAD软件二次开发的操作教程:

打开cad输入命令vbaide回车会出现VBA的界面,双击ThisDrawing在右侧的代码区输入上面的代码。如下图:

然后按F5键会出现宏窗口,点击运行,大家看到什么?这就是一个最简单的一个用VBA对cad进行二次开发的程序,也就是宏。

那什么是VBA呢?VBA就是VB的一个子集它的全称是VisualBasicForApplication,它具有VB的大部分功能。既然选择了VBA,首先要知道VBA能操作CAD里的哪些对象呢?打开VBAIDE窗口按下F2键会出现对象浏览器。如下图。

库选择AutoCAD,这时下面显示的就是cad为VBA提供的可操作的对象的类了。这时有的人因没有基础,所以还是一头雾水,别怕,选中一个类图标后按F1,这时会弹出AutoCADActiveXandVBAReference,选择最上面的一个子项ObjectModel(对象模型),这个就是在cad里那些对象的关系,如下图。

先介绍第一种,cad的菜单文件它是文本文件,我们用记事本就可打开并它,或者再重新创建一个说到这里有的人可能要问了,应该从何处开始入手呢,要怎样做呢?别急,cad本身就有现成的可供参考,就放在cad的安装文件夹下的Support文件夹内,或者其它插件的文件夹内,找不到可以按F3搜一下,扩展名分别为.mnu.mns,mnc默认的菜单文件是acad.mnu。

原始ASCII菜单文件,即用户通常或创建的文件。该文件以查看完整菜单文件的外表特征。.mnc已编译的菜单文件;一种二进制文件,包含用于定义菜单或其他界面元素的功能及外观的命令字符串和菜单语法。首次加载MNU文件时,AutoCAD将编译此文件。

.mns源菜单文件;一种与MNU文件相同的ASCII文件,但是不包含注释或特殊格式。每次菜单文件的内容被更改时,AutoCAD将修改源菜单文件。.mnr菜单资源文件;一种二进制文件,包含由菜单或其他界面元素使用的位图。AutoCAD每次编译MNC文件时,均生成菜单资源文件。.mnt菜单资源文件。仅在MNR文件无效(例如,只读)时生成该文件。.mnl菜单LISP文件;包含菜单文件使用的AutoLISP表达式。当加载与菜单LISP文件具有相同文件名的菜单文件时,AutoCAD会将菜单LISP文件加载至内存。

cad二次开发的教程就先介绍这么多了。关于cad它只提供了基础的cad功能,如果要完成具体项目设计,就必须根据数据一笔笔绘制出图形,这样一旦在设计完成之后,要更改局部图形则需要重复原来的全部内容,造成了大量工作量的浪费。因此,要想让cad真正使用于某一具体领域,或让其经常完成一些重复性的工作,则必须利用cad的开发系统对其进行二次开发。

基于VB对AUTOCAD开发问题

可以的
CAD本身就支持VBA
简单举个例子吧
打开CAD,新建一个CAD图形文件,然后按ALT+F8 打开宏界面
跟WORD一样 建一个宏
里面可以输入以下代码
Sub Example_AddLine()
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
ZoomAll

End Sub
然后运行这个宏
就可以发现,自动画了一条线

cadlisp二次开发实例

AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。

AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD2000或2002,最新版本是AutoCAD2004,其二次开发语言及工具也在不断地涌现

1AutoLISP

AutoLISP的全名是LISTProcessingLanguage,她出现于1985年推出的AutoCADR2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。

3ADS

ADS的全名是AutoCADDevelopmentSystem,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。

4ObjectARX

ObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARXforAutoCAD2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(AutoCAD数据库)和AcEd(AutoCAD编译器),另外还有其它的一些重要库组件,如AcRX(AutoCAD实时扩展)、AcGi(AutoCAD图形接口)、AcGe(AutoCAD几何库)、ADSRX(AutoCAD开发系统实时扩展)。ObjectARX还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作。

5VisualLISP

VisualLISP已经被完整地集成到AutoCAD2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD2000中默认的代码工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于AutoCAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。

6VBA

VBA即Mcrosoftoffice中的VisualBasicforApplications,它被集成到AutoCAD2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。

如何在AutoCAD中通过VBA编程打开Excel应用程序

Set xlApp = CreateObject("Excel.Application") ’创建EXCEL对象
Set xlBook = xlApp.Workbooks.Open(App.Path & "\文件名.xls") ’打开已经存在的EXCEL工件簿文件
xlApp.Visible = True ’设置EXCEL对象可见(或不可见)
Set xlSheet = xlBook.Worksheets("sheel1") ’设置活动工作表,sheet1表示表名,可以使用字符型变量代替。
xlSheet.Activate ’激活工作表,让它处于前台活动中。
xlBook.RunAutoMacros (xlAutoOpen) ’运行自动开启宏Macro1(),在EXCEL中加入以下宏
’Sub auto_open() ’这是VBA中的自动打开时运行的宏
’ 您要宏自动运行的程序,比如可以call其它的宏,这样VB在打开EXCEL时,使用上面的语句就可以先运行这个宏
’End Sub

关于autocad+vba开发实例教程和autocad编程显示错误提示“autocad主窗口不可见“是为什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

autocad+vba开发实例教程(autocad编程显示错误提示“autocad主窗口不可见“是为什么)

本文编辑:admin

更多文章:


手机拉黑了用飞信(电话被拉黑怎么用电脑发信息给别人看)

手机拉黑了用飞信(电话被拉黑怎么用电脑发信息给别人看)

这篇文章给大家聊聊关于手机拉黑了用飞信,以及电话被拉黑怎么用电脑发信息给别人看对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 07:50

笔记本电脑怎么设置动态桌面壁纸(电脑怎么设置动态桌面)

笔记本电脑怎么设置动态桌面壁纸(电脑怎么设置动态桌面)

各位老铁们,大家好,今天由我来为大家分享笔记本电脑怎么设置动态桌面壁纸,以及电脑怎么设置动态桌面的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年10月11日 07:30

射雕群侠传手游官网(新射雕群侠传初期侠客获取方式攻略)

射雕群侠传手游官网(新射雕群侠传初期侠客获取方式攻略)

大家好,关于射雕群侠传手游官网很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于新射雕群侠传初期侠客获取方式攻略的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 07:10

4枚美制导弹奇袭俄本土(真实的俄罗斯“匕首”导弹)

4枚美制导弹奇袭俄本土(真实的俄罗斯“匕首”导弹)

各位老铁们,大家好,今天由我来为大家分享4枚美制导弹奇袭俄本土,以及真实的俄罗斯“匕首”导弹的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年10月11日 07:00

手机下载word文档(哪个手机word软件好用)

手机下载word文档(哪个手机word软件好用)

大家好,今天小编来为大家解答以下的问题,关于手机下载word文档,哪个手机word软件好用这个很多人还不知道,现在让我们一起来看看吧!

2026年10月11日 05:20

大富豪2为什么下架了(宫颐府大富豪面包为什么断货)

大富豪2为什么下架了(宫颐府大富豪面包为什么断货)

大家好,如果您还对大富豪2为什么下架了不太了解,没有关系,今天就由本站为大家分享大富豪2为什么下架了的知识,包括宫颐府大富豪面包为什么断货的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 05:10

地下城与勇士手游贴吧(地下城与勇士手游贴吧狂战带火炬还是屠戮)

地下城与勇士手游贴吧(地下城与勇士手游贴吧狂战带火炬还是屠戮)

各位老铁们好,相信很多人对地下城与勇士手游贴吧都不是特别的了解,因此呢,今天就来为大家分享下关于地下城与勇士手游贴吧以及地下城与勇士手游贴吧狂战带火炬还是屠戮的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月11日 04:30

拼多多官网进入(拼多多官方网平台)

拼多多官网进入(拼多多官方网平台)

本篇文章给大家谈谈拼多多官网进入,以及拼多多官方网平台对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月11日 04:20

王者荣耀鲁班大师怎么克制?王者荣耀鲁班大师技能是什么

王者荣耀鲁班大师怎么克制?王者荣耀鲁班大师技能是什么

大家好,鲁班大师相信很多的网友都不是很明白,包括王者荣耀鲁班大师怎么克制也是一样,不过没有关系,接下来就来为大家分享关于鲁班大师和王者荣耀鲁班大师怎么克制的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

2026年10月11日 04:10

作业盒子小学(钉钉作业盒子是什么)

作业盒子小学(钉钉作业盒子是什么)

其实作业盒子小学的问题并不复杂,但是又很多的朋友都不太了解钉钉作业盒子是什么,因此呢,今天小编就来为大家分享作业盒子小学的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:00

最近更新

majority of(the majority of 和 a majority of的区别以及用法例句)
2026-10-11 07:40:02 浏览:0
热门文章

标签列表