Hide Table of Contents

Add, Modify, and Remove Custom Data Example (C#)

This example shows how to add, modify, and remove custom data from a Circle.

//--------------------------------------------------------------
//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. Open the Immediate window.
// 6. Start DraftSight and open a document.
// 7. Click Start Debugging.
//
//Postconditions: 
// 1. Circle is constructed.
// 2. Custom data is added to, modified, and removed from
//    the Circle.  
// 3. Examine the Immediate window to verify.
//----------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using DraftSight.Interop.dsAutomation;
namespace SetAndGetXData
{
    class Program
    {
        private static DraftSight.Interop.dsAutomation.Application dsApp;
        static void Main(string[] args)
        {
            //Connect to DraftSight application
            dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application");
            dsApp.AbortRunningCommand(); // abort any command currently running in DraftSight to avoid nested commands
            //Get active document
            Document dsDoc = dsApp.GetActiveDocument();
            if (null == dsDoc)
            {
                MessageBox.Show("There are no open documents in DraftSight.");
                return;
            }
            //Get model space
            Model dsModel = dsDoc.GetModel();
            //Get sketch manager
            SketchManager dsSketchMgr = dsModel.GetSketchManager();
            //Draw a Circle
            double centerX = 1, centerY = 1, centerZ = 0;
            double radius = 5;
            Circle dsCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius);
            //Zoom to fit
            dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, null, null);
            //Add custom data to the Circle
            string applicationName = "CircleApp";
            AddCustomDataToCircle(dsCircle, applicationName);
            Debug.Print(Environment.NewLine + "Circle custom data..." + Environment.NewLine);
            //Print custom data
            PrintCustomDataInfo(dsCircle.GetCustomData(applicationName));
            //Change custom data
            CustomData dsCustomData = dsCircle.GetCustomData(applicationName);
            ChangeCustomData(dsCustomData);
            //Apply the changed custom data to the Circle
            dsCircle.SetCustomData(applicationName, dsCustomData);
            Debug.Print(Environment.NewLine + "Custom data changed..." + Environment.NewLine);
            //Print custom data after changing it
            PrintCustomDataInfo(dsCircle.GetCustomData(applicationName));
            //Remove all string values from custom data
            dsCustomData = dsCircle.GetCustomData(applicationName);
            DeleteStringDataFromCustomData(dsCustomData, dsCustomDataType_e.dsCustomDataType_String);
            //Apply the changed custom data to the Circle
            dsCircle.SetCustomData(applicationName, dsCustomData);
            Debug.Print(Environment.NewLine + "Removed all string values from custom data..." + Environment.NewLine);
            //Print custom data after removing elements
            PrintCustomDataInfo(dsCircle.GetCustomData(applicationName));
            //Delete custom data from the Circle
            dsCircle.DeleteCustomData(applicationName);
            Debug.Print(Environment.NewLine + "The custom data for the circle is removed..." + Environment.NewLine);
            //Print custom data after removing it from the Circle
            PrintCustomDataInfo(dsCircle.GetCustomData(applicationName));
        }
        private static void AddCustomDataToCircle(Circle dsCircle, string applicationName)
        {
            //Get custom data for the Circle
            CustomData dsCustomData = dsCircle.GetCustomData(applicationName);
            //Clear existing custom data
            dsCustomData.Empty();
            //Get the index
            int index = dsCustomData.GetDataCount();
            //Add a description of the Circle as a string value to the custom data
            int markerForString = 1000;
            dsCustomData.InsertStringData(index, markerForString, "Circle entity");
            //Get the next index
            index = dsCustomData.GetDataCount();
            //Add custom data section to custom data
            CustomData dsInnerCustomData = dsCustomData.InsertCustomData(index);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Get the center point of the Circle 
            //and add it as point data to the custom data
            int markerForPoint = 1011;
            double centerX, centerY, centerZ;
            dsCircle.GetCenter(out centerX, out centerY, out centerZ);
            dsInnerCustomData.InsertPointData(index, markerForPoint, centerX, centerY, centerZ);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Get the radius of the Circle 
            //and add it as double data to the custom data
            int markerForDouble = 1040;
            double doubleValue = dsCircle.Radius;
            dsInnerCustomData.InsertDoubleData(index, markerForDouble, doubleValue);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Add the layer name of Circle as layer name data
            //to custom data
            dsInnerCustomData.InsertLayerName(index, dsCircle.Layer);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Add the name of the LineStyle of the Circle 
            //as a string data to custom data            
            dsInnerCustomData.InsertStringData(index, markerForString, dsCircle.LineStyle);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Add Int16 data to custom data
            int markerForInt16 = 1070;
            Int16 intValue = 5;
            dsInnerCustomData.InsertInteger16Data(index, markerForInt16, intValue);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Add Int32 data to custom data
            int markerForInt32 = 1071;
            Int32 int32Value = 7;
            dsInnerCustomData.InsertInteger32Data(index, markerForInt32, int32Value);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Add the handle of the Circle as handle data to custom data
            dsInnerCustomData.InsertHandle(index, dsCircle.Handle);
            //Get the next index
            index = dsInnerCustomData.GetDataCount();
            //Add binary data to custom data
            byte[] binaryDataArray = new byte[] { 0, 1, 0, 1 };
            dsInnerCustomData.InsertByteData(index, binaryDataArray);
            //Set custom data
            dsCircle.SetCustomData(applicationName, dsCustomData);
        }
        private static void DeleteStringDataFromCustomData(CustomData dsCustomData, dsCustomDataType_e dataType)
        {
            //Get custom data count
            int count = dsCustomData.GetDataCount();
            for (int index = count - 1; index >= 0; --index)
            {
                //Get custom data type
                dsCustomDataType_e customDataType;
                dsCustomData.GetDataType(index, out customDataType);
                if (customDataType == dataType)
                {
                    //Delete custom data element
                    dsCustomData.Delete(index);
                }
                if (customDataType == dsCustomDataType_e.dsCustomDataType_CustomData)
                {
                    //Get inner custom data
                    CustomData dsInnerCustomData;
                    dsCustomData.GetCustomData(index, out dsInnerCustomData);
                    DeleteStringDataFromCustomData(dsInnerCustomData, dataType);
                }
            }
        }
        private static void ChangeCustomData(CustomData dsCustomData)
        {
            //Get custom data count
            int count = dsCustomData.GetDataCount();
            for (int index = 0; index < count; ++index)
            {
                //Get custom data type
                dsCustomDataType_e dataType;
                dsCustomData.GetDataType(index, out dataType);
                switch (dataType)
                {
                    case dsCustomDataType_e.dsCustomDataType_BinaryData:
                        {
                            //Get binary data from custom data
                            byte[] binaryDataArray = (byte[])dsCustomData.GetByteData(index);
                            //Check if binary data is not empty
                            if (null != binaryDataArray)
                            {
                                for (int i = 0; i < binaryDataArray.Length; ++i)
                                {
                                    binaryDataArray[i]++;
                                }
                                //Set the updated binary data to custom data
                                dsCustomData.SetByteData(index, binaryDataArray);
                            }
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_CustomData:
                        {
                            //Get the inner custom data
                            CustomData dsInnerCustomData;
                            dsCustomData.GetCustomData(index, out dsInnerCustomData);
                            ChangeCustomData(dsInnerCustomData);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Double:
                        {
                            //Get double custom data
                            double doubleValue;
                            dsCustomData.GetDoubleData(index, out doubleValue);
                            //Change double value
                            doubleValue += 1;
                            //Set the updated double value to custom data
                            dsCustomData.SetDoubleData(index, doubleValue);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Integer16:
                        {
                            //Get Int16 custom data
                            int intValue;
                            dsCustomData.GetInteger16Data(index, out intValue);
                            //Change Int16 value
                            intValue++;
                            //Set the updated Int16 value to custom data
                            dsCustomData.SetInteger16Data(index, intValue);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Integer32:
                        {
                            //Get Int32 custom data
                            Int32 intValue;
                            dsCustomData.GetInteger32Data(index, out intValue);
                            //Change Int32 value
                            intValue++;
                            //Set the updated Int32 value to custom data
                            dsCustomData.SetInteger32Data(index, intValue);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Point:
                        {
                            //Get point custom data
                            double x, y, z;
                            dsCustomData.GetPointData(index, out x, out y, out z);
                            //Change point coordinates
                            x += 2;
                            y += 2;
                            z += 2;
                            //Set the updated point coordinates to custom data
                            dsCustomData.SetPointData(index, x, y, z);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_String:
                        {
                            //Get string custom data
                            string stringValue;
                            dsCustomData.GetStringData(index, out stringValue);
                            //Modify string value
                            stringValue += "_Changed";
                            //Set the updated string value to custom data
                            dsCustomData.SetStringData(index, stringValue);
                            break;
                        }
                    default:
                        break;
                }
            }
        }
        private static void PrintCustomDataInfo(CustomData dsCustomData)
        {
            //Get custom data count
            int count = dsCustomData.GetDataCount();
            Debug.Print("Custom data count:" + count.ToString());
            for (int index = 0; index < count; ++index)
            {
                //Get custom data type
                dsCustomDataType_e dataType;
                dsCustomData.GetDataType(index, out dataType);
                //Get custom data marker
                int marker;
                dsCustomData.GetDataMarker(index, out marker);
                switch (dataType)
                {
                    case dsCustomDataType_e.dsCustomDataType_BinaryData:
                        {
                            //Get binary data from custom data
                            byte[] binaryDataArray = (byte[])dsCustomData.GetByteData(index);
                            string binaryDataContent = string.Empty;
                            if (null == binaryDataArray)
                            {
                                binaryDataContent = "Empty";
                            }
                            else
                            {
                                foreach (byte binaryData in binaryDataArray)
                                {
                                    binaryDataContent += binaryData.ToString() + ",";
                                }
                            }
                            //Print custom data index, data type, marker, and binary value
                            PrintCustomDataElement(index, dataType, marker, binaryDataContent);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_CustomData:
                        {
                            //Get inner custom data
                            CustomData dsGetCustomData;
                            dsCustomData.GetCustomData(index, out dsGetCustomData);
                            PrintCustomDataInfo(dsGetCustomData);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Double:
                        {
                            //Get double value from custom data
                            double doubleValue;
                            dsCustomData.GetDoubleData(index, out doubleValue);
                            //Print custom data index, data type, marker and double value
                            PrintCustomDataElement(index, dataType, marker, doubleValue);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Handle:
                        {
                            //Get handle value from custom data
                            string handle = dsCustomData.GetHandleData(index);
                            //Print custom data index, data type, marker, and handle value
                            PrintCustomDataElement(index, dataType, marker, handle);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Integer16:
                        {
                            int intValue;
                            dsCustomData.GetInteger16Data(index, out intValue);
                            //Print custom data index, data type, marker, and Int16 value
                            PrintCustomDataElement(index, dataType, marker, intValue);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Integer32:
                        {
                            Int32 intValue;
                            dsCustomData.GetInteger32Data(index, out intValue);
                            //Print custom data index, data type, marker, and Int32 value
                            PrintCustomDataElement(index, dataType, marker, intValue);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_LayerName:
                        {
                            //Get layer name from custom data
                            string layerName;
                            dsCustomData.GetLayerName(index, out layerName);
                            //Print custom data index, data type, marker, and layer name value
                            PrintCustomDataElement(index, dataType, marker, layerName);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Point:
                        {
                            //Get point coordinates from custom data
                            double x, y, z;
                            dsCustomData.GetPointData(index, out x, out y, out z);
                            //Print custom data index, data type, marker, and point values
                            string pointCoordinates = x + "," + y + "," + z;
                            PrintCustomDataElement(index, dataType, marker, pointCoordinates);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_String:
                        {
                            //Get string value from custom data
                            string stringValue;
                            dsCustomData.GetStringData(index, out stringValue);
                            //Print custom data index, data type, marker, and string value
                            PrintCustomDataElement(index, dataType, marker, stringValue);
                            break;
                        }
                    case dsCustomDataType_e.dsCustomDataType_Unknown:
                        {
                            //Print custom data index, data type, marker and value
                            PrintCustomDataElement(index, dataType, marker, "Unknown value");
                            break;
                        }
                    default:
                        break;
                }
            }
        }
        private static void PrintCustomDataElement(int index, dsCustomDataType_e dataType, int marker, object customDataValue)
        {
            //Print custom data index, data type, marker and value
            string message = "Index: " + index.ToString();
            message += " Data type: " + dataType.ToString();
            message += " Marker: " + marker.ToString();
            message += " Value: " + customDataValue.ToString();
            Debug.Print(message);
        }
    }
}


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

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Add, Modify, and Remove Custom Data Example (C#)
*Comment:  
*   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:

x

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
x

Web Help Content Version: API Help (English only) 2020 SP05

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.