This example shows how to create and release dictionaries.
//-------------------------------------------------------------- // Preconditions: // 1. Create a C# Windows console project. // 2. Copy and paste this example into the C# IDE. // 3. Add a reference to: // install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll. // 4. Add references to System and System.Windows.Forms. // 5. Start DraftSight and open a document. // 6. 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. //---------------------------------------------------------------- using System; using DraftSight.Interop.dsAutomation; using System.Runtime.InteropServices; using System.Windows.Forms; namespace DictionariesAndXRecords { static class Program { static void Main(string[] args) { DraftSight.Interop.dsAutomation.Application dsApp; Document dsDoc; //Connect to DraftSight application dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application"); // Abort any command currently running in DraftSight to avoid nested commands dsApp.AbortRunningCommand(); if (null == dsApp) { return; } //Get active document dsDoc = dsApp.GetActiveDocument(); if (null == dsDoc) { MessageBox.Show("There are no open documents in DraftSight."); return; } //Get command message CommandMessage dsCmdMsg = dsApp.GetCommandMessage(); //Construct Circle Model dsModel; SketchManager dsSketchMgr; dsModel = dsDoc.GetModel(); dsSketchMgr = dsModel.GetSketchManager(); Circle dsCircle; dsCircle = dsSketchMgr.InsertCircle(5, 5, 0, 10); //Get drawing's root dictionary Dictionary dsRootDict; dsRootDict = dsDoc.GetNamedObjectsDictionary(); // Get an existing dictionary (e.g., each drawing has a table-style dictionary) bool hasEntry; hasEntry = dsRootDict.HasEntry( "ACAD_TABLESTYLE" ); if( hasEntry ) { dsObjectType_e entityType; object entity; entity = dsRootDict.GetEntry( "ACAD_TABLESTYLE", out 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 ) { Dictionary dict; dict = (Dictionary)entity; //Table-style dictionary should contain an active style TableStyleManager dsTblStyleMgr; dsTblStyleMgr = dsDoc.GetTableStyleManager(); TableStyle dsActiveTblStyle; dsActiveTblStyle = dsTblStyleMgr.GetActiveTableStyle(); string activeTblStyleEntryName; activeTblStyleEntryName = dict.GetNameOf( dsActiveTblStyle ); dsCmdMsg.PrintLine( String.Format("Active table-style entry: {0}", activeTblStyleEntryName ) ); } } //Create a dictionary in root dictionary Dictionary dsOurDict; dsOurDict = dsRootDict.CreateDictionary( "Our_Dict" ); //New dictionary is entry in root dictionary //Check if dictionary has new entry bool hasOurDict; hasOurDict = dsRootDict.HasEntry( "Our_Dict" ); if (hasOurDict) dsCmdMsg.PrintLine("\"Our_Dict\" dictionary added."); //Add XRecord entry XRecord dsOurXRecord; dsOurXRecord = dsOurDict.CreateXRecord( "Our_XRecord" ); //Check if dictionary has new entry bool hasOurXRecord; hasOurXRecord = dsOurDict.HasEntry("Our_XRecord"); if (hasOurXRecord) dsCmdMsg.PrintLine("\"Our_XRecord\" XRecord added."); //XRecords can contain arbitrary data int dataCount; 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 Dictionary extDict; extDict = dsCircle.CreateExtensionDictionary(); //Add XRecords to Circle's extension dictionary XRecord dsXRecord1; dsXRecord1 = extDict.CreateXRecord( "XRecord1" ); dsXRecord1.InsertStringData( 0, 1, "part number" ); dsXRecord1.InsertInteger32Data( 1, 90, 1 ); XRecord dsXRecord2; dsXRecord2 = extDict.CreateXRecord( "XRecord2" ); dsXRecord2.InsertStringData( 0, 1, "Description" ); dsXRecord2.InsertStringData( 1, 3, "Circle" ); //Read entries of Circle's extension dictionary object entitytypes = null; object[] entries = null; entries = extDict.GetEntries(out entitytypes) as object[]; int[] dsEntityTypes = (int[])entitytypes; for ( int index = 0; index < dsEntityTypes.Length; ++index ) { if( (dsObjectType_e)dsEntityTypes[index] == dsObjectType_e.dsXRecordType ) { XRecord xRecord; xRecord = (XRecord)entries[index]; if( xRecord == null ) continue; int count; count = xRecord.GetDataCount(); for( int i = 0; i < count; ++i ) { dsCustomDataType_e type = xRecord.GetDataType(i); if( type == dsCustomDataType_e.dsCustomDataType_String ) { string data; data = xRecord.GetStringData(i); dsCmdMsg.PrintLine( String.Format("String data: {0}",data)); } else if ( type == dsCustomDataType_e.dsCustomDataType_Integer32 ) { int intData; intData = xRecord.GetInteger32Data(i); dsCmdMsg.PrintLine(String.Format("Int data: {0}", intData)); } } } } //Remove the XRecords in the Circle's extension dictionary extDict.RemoveEntry("XRecord1"); extDict.RemoveEntry("XRecord2"); //Release and erase the Circle's extension dictionary bool removed; removed = dsCircle.ReleaseExtensionDictionary(); if (removed) { dsCmdMsg.PrintLine(String.Format("Circle's extension dictionary released and erased.")); } } } }