Jump to content

Using VB.Net and Autocad Electrical


Recommended Posts



I am trying to write a command method in VB.Net for AutoCAD Electrical.  I want to open a series of drawing and change the text font to a ttf.  The code below works as follows:


  • user enters CHANGEPROJECTTEXTSTYLEFONT in the command manager
  • a userform pops up
  • user selects a button on userform
  • a folderdialog comes up, they select a folder
  • all DWG files are put into an array
  • Autocad opens file, one at a time, changes font


Here is where my problem is.  I can't figure out how to save and close the file, before the next one gets open.  Right after I use the Commit, I try to execute CloseAndSave(acDoc, acDoc.Name) and this gives me an error.  Any ideas what I am doing wrong?




 <CommandMethod("ChangeProjectTextStyleFont")> Public Sub ChangeProjectTextStyleFont()

        ' This stack stores the directories to process.
        Dim stackElec As New Stack(Of String)
        Dim resultElec As New List(Of String)

        Dim frmDialog As New frmFolderBrowserDialog

        ' Add the initial directory

        Dim i As Integer = 0
        ' Continue processing for each stacked directory
        Do While (stackElec.Count > 0)
            ' Get top directory string
            Dim dirElec As String = stackElec.Pop
                ' Add all immediate file paths
                resultElec.AddRange(Directory.GetFiles(dirElec, "*.dwg"))

                ' Loop through all subdirectories and add them to the stack.
                Dim directoryName As String
                For Each directoryName In Directory.GetDirectories(dirElec)
            Catch ex As Exception

            End Try

        For Each drawingFile As String In resultElec

            Dim strFileName As String = drawingFile
            Dim acDocMgr As DocumentCollection = Application.DocumentManager

            Dim acDoc As Document = DocumentCollectionExtension.Open(acDocMgr, strFileName, False)
            Dim acCurDb As Database = acDoc.Database

            '' Get the current document and database, and start a transaction
            'Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
            Application.DocumentManager.MdiActiveDocument = acDoc

            '' Lock the new document
            Using acLckDoc As DocumentLock = acDoc.LockDocument()

                Using tr As Transaction = acCurDb.TransactionManager.StartTransaction()

                    Dim tsTbl As TextStyleTable = TryCast(tr.GetObject(acCurDb.TextStyleTableId, OpenMode.ForRead), TextStyleTable)

                    For Each objId As ObjectId In tsTbl
                        Dim tsTblRec As TextStyleTableRecord = TryCast(tr.GetObject(objId, OpenMode.ForWrite), TextStyleTableRecord)

                        Dim textStyleName As String = tsTblRec.Name

                        '' Get the current font settings
                        Dim acFont As Autodesk.AutoCAD.GraphicsInterface.FontDescriptor
                        acFont = tsTblRec.Font

                        '' Update the text style's typeface with "PlayBill"
                        Dim acNewFont As Autodesk.AutoCAD.GraphicsInterface.FontDescriptor
                        acNewFont = New Autodesk.AutoCAD.GraphicsInterface.FontDescriptor("Times New Roman", False, False, acFont.CharacterSet, acFont.PitchAndFamily)

                        tsTblRec.Font = acNewFont

                    '' Saves the changes to the database and closes the transaction

                    CloseAndSave(acDoc, acDoc.Name)
                End Using
            End Using
    End Sub


Link to comment
Share on other sites

  • 3 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...