This VBA sample shows how to use ObjectDBX to get information from multiple drawings without opening them. You need to have an AutoCAD based application installed though. Here block names are listed but other things can be done with ObjectDBX like making changes to the drawings in different ways. ObjectDBX can also be used with AutoLISP, VB, VB.NET or C#.
Option Explicit Dim objDbx As AxDbDocument ' 2007-06-08 ' By Jimmy Bergmark ' Copyright (C) 2007 JTB World, All Rights Reserved ' Website: www.jtbworld.com ' E-mail: info@jtbworld.com ' Runs in AutoCAD 2008 with axdb17enu.tlb (must be referenced) AutoCAD/ObjectDBX Common 17.0 Type Library ' Example of batch for listing all block names on all drawings in a directory. Private Sub ListBlockNames() Set objDbx = GetInterfaceObject("ObjectDBX.AxDbDocument.17") Dim inDir As String Dim elem As Object Dim filenom As String Dim WholeFile As String Dim newHeight As Double inDir = "c:\program files\autocad 2008\sample" filenom = Dir$(inDir & "\*.dwg") Do While filenom <> "" ThisDrawing.Utility.Prompt vbCrLf & "File: " & filenom ThisDrawing.Utility.Prompt vbCrLf & "-----------------" WholeFile = inDir & "\" & filenom objDbx.Open WholeFile For Each elem In objDbx.Blocks If elem.IsXRef = False And Left(elem.Name, 1) <> "*" Then ThisDrawing.Utility.Prompt vbCrLf & elem.Name End If Next Set elem = Nothing filenom = Dir$ ThisDrawing.Utility.Prompt vbCrLf Loop Set objDbx = Nothing End Sub
If you read this using Google reader see the code here.
If you want to manipulate DWG files without having an Autodesk application installed there is the option to use RealDWG.
Could you give an example on
ReplyDeletehow to run a vba sub or a lisp
routine while a dwg document is open with ObjectDBX?
Is it by using 'sendcommand'?
I'm not sure I understand your question. The sample in the post shows this with VBA unless I'm missing something.
ReplyDeleteThe question is simple.
ReplyDeleteWhile a dwg is open via objectdbx,
can a lisp or a vba routine be run
on the dwg that was opened via objectdbx?
I don't think so but I have not tried or confirmed it in any way.
ReplyDeleteTrying to do something similiar (extract some attribute values) and have the VBA working fine but am now try to port to a console out-of-process app. and am having difficulties getting the resources working correctly...
ReplyDeleteDim objDbx As AxDbDocument ' Autodesk.AutoCAD.Interop.Common.AxDbDocument does not work either...
objDbx = GetInterfaceObject("ObjectDBX.AxDbDocument.18") ' Not declaired???
Dim inDir As String, elem As Object, filenom As String, WholeFile As String, newHeight As Double
Dim objFnd As AcadEntity, indx As Integer ' Not defined???
Using:
Autocad 2010 Type Lib. | Acad/ ObjectDBX Common 18.0 Common Type Lib. | Acad.Interop and Interop.Common| OLE Automation | AcMgd and AcdbMgd
Any ideas?