兰州人 发表于 2008-4-7 09:16:00

[转帖]从 Visual Basic 连接至 AutoCAD

<p>用好多大侠都在问从 Visual Basic 连接至 AutoCAD 的问题。</p><p>在此转帖autocad的帮助文件,各位大侠只要经常使用AutoCAD的帮助文件,会有很多益处。</p><p class="body">要更新代码样例以在 VB 中使用,必须先引用 AutoCAD 类型库。要在 VB 中完成此操作,请从“工程”菜单中选择“引用”选项,启动“引用”对话框。在“引用”对话框中,选择 AutoCAD 类型库,然后单击“确定”。 </p><p class="body">下一步,将代码样例中所有的 ThisDrawing 引用替换为引用活动文档的用户指定的变量。要完成这项操作,请为 AutoCAD 应用程序 (acadApp) 和当前的文档 (acadDoc) 定义变量。然后,将应用程序变量设置为当前的 AutoCAD 应用程序。 </p><p class="body">如果 AutoCAD 正在运行,指定 AutoCAD 版本号时,VB GetObject 函数将检索 AutoCAD Application 对象。如果 AutoCAD 没有运行,发生的错误(本例中)会被捕获然后清除。CreateObject 函数接着会试图创建一个 AutoCAD Application 对象。如果创建成功,会启动 AutoCAD;如果失败,则会显示一个消息框,说明发生的错误。 </p><p class="body">同时运行多个 AutoCAD 任务时,GetObject 函数会返回 Windows 运行对象表中的第一个 AutoCAD 实例。关于验证 GetObject 返回任务的详细信息,请参见 Microsoft Visual Basic 文档中关于对象运行表 (ROT) 和 GetObject 函数的部分。 </p><p class="body">要显示 AutoCAD 图形窗口,需要将 AutoCAD 应用程序的 Visible 特性设置为 TRUE。 </p><p class="body">如果 GetObject 创建了一个新的 AutoCAD 实例(即调用 GetObject 时 AutoCAD 没有运行),没有将 Visible 设置为 TRUE 会导致 AutoCAD 应用程序不可见,甚至 AutoCAD 不显示在 Windows 任务栏上。 </p><p class="note">注意&nbsp; 使用依赖于版本的 ProgID。如果 CreateObject 或 GetObject 函数使用的是独立于版本的 ProgID,则将函数更改为使用依赖于版本的 ProgID。例如,如果使用的是 CreateObject,请将 CreateObject ("AutoCAD.Application") 替换为 CreateObject ("AutoCAD.Application.16")。此外,如果 GetInterfaceObject 方法使用的是独立于版本的 ProgID,则必须将该方法更改成使用依赖于版本的 ProgID。 </p><p class="body">本例使用 Err 的 Clear 和 Description 特性。如果用户编码环境不支持这些特性,则需要适当修改样例: </p><pre class="prog_in_0">Sub Ch2_ConnectToAcad()</pre><pre class="prog_in_0">    Dim acadApp As AcadApplication</pre><pre class="prog_in_0">    On Error Resume Next</pre><pre class="prog_in_0">
        </pre><pre class="prog_in_0">    Set acadApp = GetObject(, "AutoCAD.Application.16")</pre><pre class="prog_in_0">    If Err Then</pre><pre class="prog_in_0">      Err.Clear</pre><pre class="prog_in_0">      Set acadApp = CreateObject("AutoCAD.Application.16")</pre><pre class="prog_in_0">      If Err Then</pre><pre class="prog_in_0">            MsgBox Err.Description</pre><pre class="prog_in_0">            Exit Sub</pre><pre class="prog_in_0">      End If</pre><pre class="prog_in_0">    End If</pre><pre class="prog_in_0">    MsgBox "Now running " + acadApp.Name + _</pre><pre class="prog_in_0">         " version " + acadApp.Version</pre><pre class="prog_in_end_0">End Sub</pre><p class="body">接着,将文档变量设置为 AutoCAD 应用程序中的 Document 对象。Document 对象由 Application 对象的 ActiveDocument 特性返回。 </p><pre class="prog_in_0">Dim acadDoc as AcadDocument</pre><pre class="prog_in_end_0">Set acadDoc = acadApp.ActiveDocument</pre><p class="body">从现在开始,使用 acadDoc 变量引用当前的 AutoCAD 图形。 </p>

mccad 发表于 2008-4-7 12:30:00

一般来说,你将acadDoc变量改名为ThisDrawing变量,就跟VBA一样了。我一般这样写,所以可以先在VBA中调试,再直接转换到VB中去。

home 发表于 2008-4-17 22:27:00

<p>如果关闭了当前的文档窗口,没有关闭autocad软件,菜单栏只剩下“文件”、“视图”、“窗口”、“帮助”四个选项时,如果再运行连接cad的话,会在</p><p>Set acadDoc = acadApp.ActiveDocument这出错,这个该怎么处理??</p>
页: [1]
查看完整版本: [转帖]从 Visual Basic 连接至 AutoCAD