This example shows how to create and release dictionaries.
'-------------------------------------------------------------- ' Preconditions: ' 1. Create a VB.NET Windows console project. ' 2. Copy and paste this example into the VB.NET IDE. ' 3. Add a reference to: ' install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll. ' 4. Start DraftSight and open a document. ' 5. Start debugging the project. ' ' Postconditions: ' 1. Constructs a Circle. ' 2. Gets the root dictionary of the document. ' 3. Gets the existing table-style dictionary of the document. ' 4. Gets the active style in the table-style dictionary and ' prints the style type to the command window. ' 5. Creates a dictionary in the root dictionary called Our_Dict ' and prints the name of the dictionary to the command window. ' 6. Adds an XRecord entry to Out_Dict dictionary and prints ' the name of the XRecord to the command window. ' 7. Creates an extension dictionary for the Circle. ' 8. Adds XRecord entries to the Circle's extension dictionary. ' 9. Reads the XRecord entries in the Circle's extension dictionary ' and prints their data to the command window. ' 10. Removes the XRecord entries from the Circle's extension dictionary. ' 11. Releases and erases the Circle's extension dictionary and prints ' confirmation to the command window. '---------------------------------------------------------------- Imports DraftSight.Interop.dsAutomation Imports System.Runtime.InteropServices Module Module1 Sub Main() Dim dsApp As Application Dim dsDoc As Document 'Connect to DraftSight application dsApp = GetObject(, "DraftSight.Application") ' Abort any command currently running in DraftSight to avoid nested commands dsApp.AbortRunningCommand() If dsApp Is Nothing Then Return End If 'Get active document dsDoc = dsApp.GetActiveDocument() If dsDoc Is Nothing Then MsgBox("There are no open documents in DraftSight.") Return End If 'Get command message Dim dsCmdMsg As CommandMessage = dsApp.GetCommandMessage() 'Construct Circle Dim dsModel As Model Dim dsSketchMgr As SketchManager dsModel = dsDoc.GetModel() dsSketchMgr = dsModel.GetSketchManager() Dim dsCircle As Circle dsCircle = dsSketchMgr.InsertCircle(5, 5, 0, 10) 'Get drawing's root dictionary Dim dsRootDict As Dictionary dsRootDict = dsDoc.GetNamedObjectsDictionary() ' Get an existing dictionary (e.g., each drawing has a table-style dictionary) Dim hasEntry As Boolean hasEntry = dsRootDict.HasEntry("ACAD_TABLESTYLE") If hasEntry Then Dim entityType As dsObjectType_e Dim entity As Object entity = dsRootDict.GetEntry("ACAD_TABLESTYLE", entityType) 'Dictionary entries can be of arbitrary entity types 'In this case, the arbitrary entity type should be a dictionary If entityType = dsObjectType_e.dsDictionaryType Then Dim dict As Dictionary dict = DirectCast(entity, Dictionary) 'Table-style dictionary should contain an active style Dim dsTblStyleMgr As TableStyleManager dsTblStyleMgr = dsDoc.GetTableStyleManager() Dim dsActiveTblStyle As TableStyle dsActiveTblStyle = dsTblStyleMgr.GetActiveTableStyle() Dim activeTblStyleEntryName As String activeTblStyleEntryName = dict.GetNameOf(dsActiveTblStyle) dsCmdMsg.PrintLine([String].Format("Active table-style entry: {0}", activeTblStyleEntryName)) End If End If 'Create a dictionary in root dictionary Dim dsOurDict As Dictionary dsOurDict = dsRootDict.CreateDictionary("Our_Dict") 'New dictionary is entry in root dictionary 'Check if dictionary has new entry Dim hasOurDict As Boolean hasOurDict = dsRootDict.HasEntry("Our_Dict") If hasOurDict Then dsCmdMsg.PrintLine("""Our_Dict"" dictionary added.") End If 'Add XRecord entry Dim dsOurXRecord As XRecord dsOurXRecord = dsOurDict.CreateXRecord("Our_XRecord") 'Check if dictionary has new entry Dim hasOurXRecord As Boolean hasOurXRecord = dsOurDict.HasEntry("Our_XRecord") If hasOurXRecord Then dsCmdMsg.PrintLine("""Our_XRecord"" XRecord added.") End If 'XRecords can contain arbitrary data Dim dataCount As Integer dataCount = dsOurXRecord.GetDataCount() 'Add double data dsOurXRecord.InsertDoubleData(dataCount, 20, 1.42) dataCount = dsOurXRecord.GetDataCount() 'Add string data dsOurXRecord.InsertStringData(dataCount, 3, "XRecordstring data") 'Each entity can have its own extension dictionary 'Create extension dictionary for Circle entity Dim extDict As Dictionary extDict = dsCircle.CreateExtensionDictionary() 'Add XRecords to Circle's extension dictionary Dim dsXRecord1 As XRecord dsXRecord1 = extDict.CreateXRecord("XRecord1") dsXRecord1.InsertStringData(0, 1, "part number") dsXRecord1.InsertInteger32Data(1, 90, 1) Dim dsXRecord2 As XRecord dsXRecord2 = extDict.CreateXRecord("XRecord2") dsXRecord2.InsertStringData(0, 1, "Description") dsXRecord2.InsertStringData(1, 3, "Circle") 'Read entries of Circle's extension dictionary Dim entitytypes As Object = Nothing Dim entries As Object() = Nothing entries = TryCast(extDict.GetEntries(entitytypes), Object()) Dim dsEntityTypes As Integer() = DirectCast(entitytypes, Integer()) For index As Integer = 0 To dsEntityTypes.Length - 1 If DirectCast(dsEntityTypes(index), dsObjectType_e) = dsObjectType_e.dsXRecordType Then Dim xRecord As XRecord xRecord = DirectCast(entries(index), XRecord) If xRecord Is Nothing Then Continue For End If Dim count As Integer count = xRecord.GetDataCount() For i As Integer = 0 To count - 1 Dim type As dsCustomDataType_e = xRecord.GetDataType(i) If type = dsCustomDataType_e.dsCustomDataType_String Then Dim data As String data = xRecord.GetStringData(i) dsCmdMsg.PrintLine([String].Format("String data: {0}", data)) ElseIf type = dsCustomDataType_e.dsCustomDataType_Integer32 Then Dim intData As Integer intData = xRecord.GetInteger32Data(i) dsCmdMsg.PrintLine([String].Format("Int data: {0}", intData)) End If Next End If Next 'Remove the XRecords in the Circle's extension dictionary extDict.RemoveEntry("XRecord1") extDict.RemoveEntry("XRecord2") 'Release and erase the Circle's extension dictionary Dim removed As Boolean removed = dsCircle.ReleaseExtensionDictionary() If removed Then dsCmdMsg.PrintLine([String].Format("Circle's extension dictionary released and erased.")) End If End Sub End Module