用VB编写CAD绘图插件

作者&投稿:戎肯 (若有异议请与网页底部的电邮联系)
用VB编写CAD绘图插件~

操作步骤:
一、创建一个ACTIVEX DLL cadPro工程
二、添加一个模块命名为ModCad.代码如下
Public acadApp As Object
Public acadDoc As Object
(这里建立一个新块主要是为了以后在多个窗体、类或者多个工程中可以调用)
二、添加一个类ClsTest代码如下:

Public Function MenuMain(MenuIndex As Integer)

'下面的判断在VB中测试的时候可以用到,在生成DLL后VBA调用时可注释
If ModCad.acadApp Is Nothing Or ModCad.acadDoc Is Nothing Then

ConnectToAcad
setApp ModCad.acadApp
setDoc ModCad.acadDoc
End If

Select Case MenuIndex
Case 1
AutoCADTest
Case 2

End Select
End Function


Public Function ConnectToAcad()
On Error Resume Next
Set ModCad.acadApp = GetObject(, "AutoCAD.Application.16.2") '16.2是CAD的版本
If Err Then
Err.Clear
Set ModCad.acadApp = CreateObject("AutoCAD.Application.16.2")
End If
If Err Then
Err.Clear
Set ModCad.acadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set ModCad.acadApp = CreateObject("AutoCAD.Application")
End If
If Err Then
Unload Me
End If
End If
ModCad.acadApp.Visible = True
Set ModCad.acadDoc = ModCad.acadApp.ActiveDocument
End Function
Public Function setApps(acadObj As AcadApplication)
Set ModCad.acadApp = acadObj
Set ModCad.acadDoc = acadApp.ActiveDocument
End Function
'VB中要在CAD中实现的功能
Private Function AutoCADTest()
Dim cadLine As AcadLine
Dim cadPoint As Variant

cadPoint = ModCad.acadDoc.Utility.GetPoint(, "请选取一个插入点:")

ModCad.acadDoc.ModelSpace.AddCircle cadPoint, 5
End Function
三、如果要在VB中调试,在添加一个EXE工程,引用ACTIVEX工程,添加一个窗体,在窗体上添加一个按钮,

Private Sub Command1_Click()
Dim Rec As New cadPro.MenuMain

Rec.MenuMain 1

End Sub

四、生成DLL文件在VBA中调用。
在工具----设定引用项目中加入生成的DLL。代码如下:
Option Explicit
Private clsGre As New cadPro.ClsTest
Public Sub cadtest()
On Error Resume Next
clsGre.setApp ThisDrawing.Application
clsGre.MenuMain 1
End Sub

按照以上四个步骤就可实现VB与AutoCAD的连接。
以上程序在本机测试通过。
OS:winxp sp2 cht
AuotCAD Version:AutoCAD 2006

有专门这样的程序,百度搜索 工程桩自动编号并提取坐标程序,专门解决这方面问题。

操作步骤:
一、创建一个ACTIVEX DLL cadPro工程
二、添加一个模块命名为ModCad.代码如下
Public acadApp As Object
Public acadDoc As Object
(这里建立一个新块主要是为了以后在多个窗体、类或者多个工程中可以调用)
二、添加一个类ClsTest代码如下:

Public Function MenuMain(MenuIndex As Integer)

'下面的判断在VB中测试的时候可以用到,在生成DLL后VBA调用时可注释
If ModCad.acadApp Is Nothing Or ModCad.acadDoc Is Nothing Then

ConnectToAcad
setApp ModCad.acadApp
setDoc ModCad.acadDoc
End If

Select Case MenuIndex
Case 1
AutoCADTest
Case 2

End Select
End Function

Public Function ConnectToAcad()
On Error Resume Next
Set ModCad.acadApp = GetObject(, "AutoCAD.Application.16.2") '16.2是CAD的版本
If Err Then
Err.Clear
Set ModCad.acadApp = CreateObject("AutoCAD.Application.16.2")
End If
If Err Then
Err.Clear
Set ModCad.acadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set ModCad.acadApp = CreateObject("AutoCAD.Application")
End If
If Err Then
Unload Me
End If
End If
ModCad.acadApp.Visible = True
Set ModCad.acadDoc = ModCad.acadApp.ActiveDocument
End Function
Public Function setApps(acadObj As AcadApplication)
Set ModCad.acadApp = acadObj
Set ModCad.acadDoc = acadApp.ActiveDocument
End Function
'VB中要在CAD中实现的功能
Private Function AutoCADTest()
Dim cadLine As AcadLine
Dim cadPoint As Variant

cadPoint = ModCad.acadDoc.Utility.GetPoint(, "请选取一个插入点:")

ModCad.acadDoc.ModelSpace.AddCircle cadPoint, 5
End Function
三、如果要在VB中调试,在添加一个EXE工程,引用ACTIVEX工程,添加一个窗体,在窗体上添加一个按钮,

Private Sub Command1_Click()
Dim Rec As New cadPro.MenuMain

Rec.MenuMain 1

End Sub

四、生成DLL文件在VBA中调用。
在工具----设定引用项目中加入生成的DLL。代码如下:
Option Explicit
Private clsGre As New cadPro.ClsTest
Public Sub cadtest()
On Error Resume Next
clsGre.setApp ThisDrawing.Application
clsGre.MenuMain 1
End Sub

按照以上四个步骤就可实现VB与AutoCAD的连接。
以上程序在本机测试通过。
OS:winxp sp2 cht
AuotCAD Version:AutoCAD 2006

要是我知道CAD是怎么画出三维图来的,我用VB应该就能写出这样的一个程序来.(用vb来控制CAD),可惜我不会用CAD

如果要写CAD插件的话,就不要选VB了,用C++吧.
用VB的话,基本上说是很难的.

谁能帮我编一段用VB对CAD进行二次开发的程序代码啊
答:2019-01-28 如何利用VB二次开发CAD,编写一个程序可以在CAD中自动布... 2011-09-28 用VB进行CAD二次开发,制作表格代码(普通表格,不是报表)... 1 2014-10-29 谁能提供一段vb在CAD中绘制多段线的实例代码作参考! 1 2016-10-12 用vb.net编写cad二次开发的程序,用鼠标框选CAD图的... 2011-08-09 ...

VB窗体怎样调用CAD并在里面画园
答:MsgBox Err.Number & ":" & Err.Description '打开失败 Exit Sub End If End If On Error GoTo prcERR myAcadApp.Visible = True '显示CAD Set activeDoc = myAcadApp.ActiveDocument Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double Dim LineObj As AcadLine'如果画图...

VB编程结合CAD画图
答:你需要引用autocad库,里面一大堆对象集合,慢慢看帮助文件吧,无非就是创建应用、文档对象,然后新建/打开文档,创建直线、圆弧、矩形等对象画你想要的图,然后调用应用或者文档的save/saveas方法存起来。

利用vb程序控制cad划矩形
答:先在 工程-引用 里面增加 aucocad类型库然后写代码如下:Private Sub Command1_Click()Dim p1(2) As Double, p2(2) As Double, p3(2) As Double Dim acad As AcadApplication Dim adoc As AcadDocument Dim aline As acadline Dim dima As AcadDimAligned Set acad = CreateObject("autocad....

VB如何设计程序选中CAD里指定的圆并填充
答:其实就是控制CAD的过程,思路如下:一、在VB中建一个窗体,在上面放上一个按钮A,放一个文本框,用来存放想要填充的图案名称(PAT文件名)二、按钮A的编程:1、调用API找到CAD类,2、向CAD发出指令,---选择图元的指令是UTILITY下边的GETENTITY,,然后用填充指令,在MODELSPACE下边的AddHatch,,3、...

关于vb.net二次开发autocad,是否不用netload调用dll文件也可以_百度知 ...
答:你看到的调用DLL的应该是用的objectARX做的开发。你可以用ActiveX外部调用CAD啊~我是用的C#做的二次开发:System.Diagnostics.Process.Start("CAD文件路径");//运行CAD AcadApplication _application= (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.16");//获取正在运行的CAD程序实例 Acad...

帮忙写一个VB读写CAD扩展属性的例子,50分!415552258@qq.com
答:Sub Example_SetXdata()' This example creates a line and attaches extended data to that line.' Create the line Dim lineObj As AcadLine Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0 endPt(0) = 5#: ...

vb怎么写“cad中用长度和角度画多段线”的程序?
答:'以下为画一段:Public Sub LineLQ(IStartx As Single, IStarty As Single, L As Single, Q As Single)Dim OutX As Single, OutY As Single Dim iQ As Single iQ = -Q / 180 * 3.1415926 OutX = Cos(iQ) * L + IStartx OutY = Sin(iQ) * L + IStarty Line (IStartx, ...

vb 中调用 cad
答:myAcadApp.Visible = True '显示CAD Set activeDoc = myAcadApp.ActiveDocument Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double Dim LineObj As AcadLine'如果画图时出错,改为Dim LineObj As Object startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0 endPoin...

VB二次开发cad选择集过滤器的用法
答:居然三个都是你问的,在CAD的VBA中 用以下代码你就明白了 你要求的是在图层GCZJ的单行文字TEXT变为绿色 sub asdfadsf()Dim ssetobj As AcadSelectionSet Set ssetobj = ThisDrawing.SelectionSets.Add("test1")Dim FType(0 To 1) As Integer Dim FData(0 To 1) As Variant FType(0) = 0...