Hide Table of Contents

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
            if (null == dsApp)
            //Get active document
            dsDoc = dsApp.GetActiveDocument();
            if (null == dsDoc)
                MessageBox.Show("There are no open documents in DraftSight.");
            //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 )
                    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
            //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."));

Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

Subject:   Feedback on Help Topics
Page:   Create and Remove Dictionaries Example (C#)
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:


We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again

Web Help Content Version: API Help (English only) 2024 SP02

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.