Create and Release Dictionaries Example (C#)

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.PrintLineString.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();
 
                    forint i = 0; i < count; ++i )
                    {
                        dsCustomDataType_e type = xRecord.GetDataType(i);
                        if( type == dsCustomDataType_e.dsCustomDataType_String )
                        {
                            string data;
                            data = xRecord.GetStringData(i);
                            dsCmdMsg.PrintLineString.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."));
            }
        }
    }
}