'' borrowed from Kean Walmsley
Public Shared Function GetFiled(ed As Editor) As String
Dim filename As String = String.Empty
Try
Dim opts As New PromptOpenFileOptions("Select a drawing")
opts.Filter = "Drawing (*.dwg)|*.dwg|Design Web Format (*.dwf)|*.dwf|" & "All files (*.*)|*.*"
Dim pr As PromptFileNameResult = ed.GetFileNameForOpen(opts)
If pr.Status = PromptStatus.OK Then
filename = pr.StringResult
ed.WriteMessage(vbLf & "File selected: {0}.", filename)
End If
Return filename
Catch ex As System.Exception
ed.WriteMessage(ex.Message)
Return String.Empty
End Try
End Function
<CommandMethod("COPYTXTS")> _
Public Shared Sub ExtCopyTextStyles()
Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim txtstylesToClone As New ObjectIdCollection()
Dim extdb As Database = Nothing
Try
extdb = New Database(False, True)
Dim tr As Transaction = doc.TransactionManager.StartTransaction()
Using tr
Dim txtstyNames As New List(Of String)()
Dim filename As String = GetFiled(ed)
If filename.Trim() = String.Empty Then
Return
End If
extdb.ReadDwgFile(filename, System.IO.FileShare.Read, True, Nothing)
If extdb Is Nothing Then
Return
End If
Dim tr2 As Transaction = extdb.TransactionManager.StartTransaction()
Using tr2
' Open the Textsyle table
Dim tt As TextStyleTable = DirectCast(tr2.GetObject(extdb.TextStyleTableId, OpenMode.ForRead), TextStyleTable)
For Each entId As ObjectId In tt
Dim ttr As TextStyleTableRecord = DirectCast(tr2.GetObject(entId, OpenMode.ForRead), TextStyleTableRecord)
Dim txtstyleName As String = ttr.Name
If (Not entId.IsErased) Then
txtstyNames.Add(txtstyleName)
txtstylesToClone.Add(entId)
End If
Next
txtstyNames.Sort()
''PrintList(ed, txtstyNames)''for test only
tr2.Commit()
End Using
If txtstylesToClone.Count > 0 Then
' We use wblockCloneObjects to clone between DWGs
Dim idMap As New IdMapping()
db.WblockCloneObjects(txtstylesToClone, db.TextStyleTableId, idMap, DuplicateRecordCloning.Ignore, False)
extdb.Dispose()
End If
ed.WriteMessage(vbLf & vbTab & "Imported: {0} textstyles", txtstylesToClone.Count)
tr.Commit()
End Using
Catch ex As System.Exception
ed.WriteMessage(ex.Message)
Finally
End Try
End Sub