Hide Table of Contents

Add, Modify, and Remove Custom Data Example (VBA)

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

'--------------------------------------------------------------
'Preconditions:
' 1. Create a VBA macro in a software product in which VBA is
'    embedded.
' 2. Copy and paste this example into the Visual Basic IDE.
' 3. Add a reference to the DraftSight type library,
'    install_dir\bin\dsAutomation.dll.
' 4. Open the Immediate window.
' 5. Start DraftSight and open a document.
' 6. Run the macro.
'
'Postconditions:
' 1. Circle is constructed.
' 2. Custom data is added to, modified, and removed from
'    the Circle.
' 3. Examine the Immediate window to verify.
'----------------------------------------------------------------
Option Explicit
    Sub main()
        Dim dsApp As DraftSight.Application
        'Connect to DraftSight application
        Set dsApp = GetObject(, "DraftSight.Application")
        'Abort any command currently running in DraftSight 
        'to avoid nested commands
	dsApp.AbortRunningCommand 
        'Get active document
        Dim dsDoc As DraftSight.Document
        Set dsDoc = dsApp.GetActiveDocument()
        If dsDoc Is Nothing Then
            MsgBox ("There are no open documents in DraftSight.")
            Return
        End If
        'Get model space
        Dim dsModel As DraftSight.Model
        Set dsModel = dsDoc.GetModel()
        'Get sketch manager
        Dim dsSketchMgr As DraftSight.SketchManager
        Set dsSketchMgr = dsModel.GetSketchManager()
        'Draw a Circle
        Dim centerX As Double
        centerX = 1
        Dim centerY As Double
        centerY = 1
        Dim centerZ As Double
        centerZ = 0
        Dim radius As Double
        radius = 5
        Dim dsCircle As DraftSight.Circle
        Set dsCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius)
        'Zoom to fit
        dsApp.Zoom dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing
        'Add custom data to the Circle
        Dim applicationName As String
        applicationName = "CircleApp"
        AddCustomDataToCircle dsCircle, applicationName
        Debug.Print ("Circle custom data...")
        Debug.Print ("")
        'Print custom data
        PrintCustomDataInfo dsCircle.GetCustomData(applicationName)
        'Change custom data
        Dim dsCustomData As DraftSight.CustomData
        Set dsCustomData = dsCircle.GetCustomData(applicationName)
        ChangeCustomData dsCustomData
        'Apply the changed custom data to the Circle
        dsCircle.SetCustomData applicationName, dsCustomData
        Debug.Print ("")
        Debug.Print ("Custom data changed...")
        Debug.Print ("")
        'Print custom data after changing it
        PrintCustomDataInfo dsCircle.GetCustomData(applicationName)
        'Remove all string values from custom data
        Set dsCustomData = dsCircle.GetCustomData(applicationName)
        DeleteStringDataFromCustomData dsCustomData, dsCustomDataType_e.dsCustomDataType_String
        'Apply the changed custom data to the Circle
        dsCircle.SetCustomData applicationName, dsCustomData
        Debug.Print ("")
        Debug.Print ("Removed all string values from custom data...")
        Debug.Print ("")
        'Print custom data after removing elements
        PrintCustomDataInfo dsCircle.GetCustomData(applicationName)
        'Delete custom data from the Circle
        dsCircle.DeleteCustomData applicationName
        Debug.Print ("")
        Debug.Print ("The custom data for the circle is removed...")
        Debug.Print ("")
        'Print custom data after removing it from the Circle
        PrintCustomDataInfo dsCircle.GetCustomData(applicationName)
    End Sub
    Sub AddCustomDataToCircle(ByVal dsCircle As DraftSight.Circle, ByVal applicationName As String)
        'Get custom data for the Circle
        Dim dsCustomData As DraftSight.CustomData
        Set dsCustomData = dsCircle.GetCustomData(applicationName)
        'Clear existing custom data
        dsCustomData.Empty
        'Get the index
        Dim index As Long
        index = dsCustomData.GetDataCount()
        'Add a description of the Circle as a string value to the custom data
        Dim markerForString As Long
        markerForString = 1000
        dsCustomData.InsertStringData index, markerForString, "Circle entity"
        'Get the next index
        index = dsCustomData.GetDataCount()
        'Add custom data section to custom data
        Dim dsInnerCustomData As DraftSight.CustomData
        Set 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
        Dim markerForPoint As Long
        markerForPoint = 1011
        Dim centerX As Double, centerY As Double, centerZ As Double
        dsCircle.GetCenter centerX, centerY, 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
        Dim markerForDouble As Long
        markerForDouble = 1040
        Dim doubleValue As 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
        Dim markerForInt16 As Integer
        markerForInt16 = 1070
        Dim intValue As Long
        intValue = 5
        dsInnerCustomData.InsertInteger16Data index, markerForInt16, intValue
        'Get the next index
        index = dsInnerCustomData.GetDataCount()
        'Add Int32 data to custom data
        Dim markerForInt32 As Integer
        markerForInt32 = 1071
        Dim int32Value As Long
        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
        Dim binaryDataArray(3) As Byte
        binaryDataArray(0) = 0
        binaryDataArray(1) = 1
        binaryDataArray(2) = 0
        binaryDataArray(3) = 1
        dsInnerCustomData.InsertByteData index, binaryDataArray
        'Set custom data
        dsCircle.SetCustomData applicationName, dsCustomData
    End Sub
    Sub DeleteStringDataFromCustomData(ByVal dsCustomData As DraftSight.CustomData, ByVal dataType As dsCustomDataType_e)
        'Get custom data count
        Dim count As Long
        count = dsCustomData.GetDataCount()
        Dim index As Long
        For index = count - 1 To 0 Step -1
            'Get custom data type
            Dim customDataType As dsCustomDataType_e
            dsCustomData.GetDataType index, customDataType
            If customDataType = dataType Then
                'Delete custom data element
                dsCustomData.Delete (index)
            End If
            If customDataType = dsCustomDataType_e.dsCustomDataType_CustomData Then
                'Get inner custom data
                Dim dsInnerCustomData As DraftSight.CustomData
                Set dsInnerCustomData = Nothing
                dsCustomData.GetCustomData index, dsInnerCustomData
                DeleteStringDataFromCustomData dsInnerCustomData, dataType
            End If
        Next
    End Sub
    Sub ChangeCustomData(ByVal dsCustomData As CustomData)
        'Get custom data count
        Dim count As Long
        count = dsCustomData.GetDataCount()
        Dim index As Long
        For index = 0 To count - 1
            'Get custom data type
            Dim dataType As dsCustomDataType_e
            dsCustomData.GetDataType index, dataType
            Select Case dataType
                Case dsCustomDataType_e.dsCustomDataType_BinaryData
                    If True Then
                        'Get binary data from custom data
                        Dim binaryDataArray As Variant
                        binaryDataArray = dsCustomData.GetByteData(index)
                        'Check if binary data is not empty
                        Dim i As Long
                        If Not IsEmpty(binaryDataArray) Then
                            For i = LBound(binaryDataArray) To UBound(binaryDataArray)
                                binaryDataArray(i) = binaryDataArray(i) + 1
                            Next i
                            'Set the updated binary data to custom data
                            dsCustomData.SetByteData index, binaryDataArray
                        End If
                    End If
                Case dsCustomDataType_e.dsCustomDataType_CustomData
                    If True Then
                        'Get the inner custom data
                        Dim dsInnerCustomData As DraftSight.CustomData
                        Set dsInnerCustomData = Nothing
                        dsCustomData.GetCustomData index, dsInnerCustomData
                        ChangeCustomData dsInnerCustomData
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Double
                    If True Then
                        'Get double custom data
                        Dim doubleValue As Double
                        dsCustomData.GetDoubleData index, doubleValue
                        'Change double value
                        doubleValue = doubleValue + 1
                        'Set the updated double value to custom data
                        dsCustomData.SetDoubleData index, doubleValue
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Integer16
                    If True Then
                        'Get Int16 custom data
                        Dim intValue As Long
                        dsCustomData.GetInteger16Data index, intValue
                        'Change Int16 value
                        intValue = intValue + 1
                        'Set the updated Int16 value to custom data
                        dsCustomData.SetInteger16Data index, intValue
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Integer32
                    If True Then
                        'Get Int32 custom data
                        dsCustomData.GetInteger32Data index, intValue
                        'Change Int32 value
                        intValue = intValue + 1
                        'Set the updated Int32 value to custom data
                        dsCustomData.SetInteger32Data index, intValue
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Point
                    If True Then
                        'Get point custom data
                        Dim x As Double, y As Double, z As Double
                        dsCustomData.GetPointData index, x, y, z
                        'Change point coordinates
                        x = x + 2
                        y = y + 2
                        z = z + 2
                        'Set the updated point coordinates to custom data
                        dsCustomData.SetPointData index, x, y, z
                    End If
                Case dsCustomDataType_e.dsCustomDataType_String
                    If True Then
                        'Get string custom data
                        Dim stringValue As String
                        stringValue = ""
                        dsCustomData.GetStringData index, stringValue
                        'Modify string value
                        stringValue = stringValue + "_Changed"
                        'Set the updated string value to custom data
                        dsCustomData.SetStringData index, stringValue
                    End If
                Case Else
            End Select
        Next
    End Sub
    Sub PrintCustomDataInfo(ByVal dsCustomData As CustomData)
        'Get custom data count
        Dim count As Long
        count = dsCustomData.GetDataCount()
        Debug.Print ("Custom data count:" & count)
        Dim index As Long
        For index = 0 To count - 1
            'Get custom data type
            Dim dataType As dsCustomDataType_e
            dsCustomData.GetDataType index, dataType
            'Get custom data marker
            Dim marker As Long
            dsCustomData.GetDataMarker index, marker
            Select Case dataType
                Case dsCustomDataType_e.dsCustomDataType_BinaryData
                    If True Then
                        'Get binary data from custom data
                        Dim binaryArray As Variant
                        binaryArray = dsCustomData.GetByteData(index)
                       
                        Dim binaryDataContent As String
                        binaryDataContent = ""
                     
                        If IsEmpty(binaryArray) Then
                            binaryDataContent = "Empty"
                        Else
                            Dim j As Long
                            For j = LBound(binaryArray) To UBound(binaryArray)
                                binaryDataContent = binaryDataContent + CStr(binaryArray(j)) & ","
                            Next j
                        End If
                        'Print custom data index, data type, marker, and binary value
                        PrintCustomDataElement index, dataType, marker, binaryDataContent
                    End If
                Case dsCustomDataType_e.dsCustomDataType_CustomData
                    If True Then
                        'Get inner custom data
                        Dim dsGetCustomData As DraftSight.CustomData
                        Set dsGetCustomData = Nothing
                        dsCustomData.GetCustomData index, dsGetCustomData
                        PrintCustomDataInfo dsGetCustomData
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Double
                    If True Then
                        'Get double value from custom data
                        Dim doubleValue As Double
                        dsCustomData.GetDoubleData index, doubleValue
                        'Print custom data index, data type, marker and double value
                        PrintCustomDataElement index, dataType, marker, doubleValue
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Handle
                    If True Then
                        'Get handle value from custom data
                        Dim handle As String
                        handle = dsCustomData.GetHandleData(index)
                        'Print custom data index, data type, marker, and handle value
                        PrintCustomDataElement index, dataType, marker, handle
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Integer16
                    If True Then
                        Dim int16Value As Long
                        dsCustomData.GetInteger16Data index, int16Value
                        'Print custom data index, data type, marker, and Int16 value
                        PrintCustomDataElement index, dataType, marker, int16Value
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Integer32
                    If True Then
                        Dim int32Value As Long
                        dsCustomData.GetInteger32Data index, int32Value
                        'Print custom data index, data type, marker, and Int32 value
                        PrintCustomDataElement index, dataType, marker, int32Value
                    End If
                Case dsCustomDataType_e.dsCustomDataType_LayerName
                    If True Then
                        'Get layer name from custom data
                        Dim layerName As String
                        dsCustomData.GetLayerName index, layerName
                        'Print custom data index, data type, marker, and layer name value
                        PrintCustomDataElement index, dataType, marker, layerName
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Point
                    If True Then
                        'Get point coordinates from custom data
                        Dim x As Double, y As Double, z As Double
                        dsCustomData.GetPointData index, x, y, z
                        'Print custom data index, data type, marker, and point values
                        Dim pointCoordinates As String
                        pointCoordinates = x & "," & y & "," & z
                        PrintCustomDataElement index, dataType, marker, pointCoordinates
                    End If
                Case dsCustomDataType_e.dsCustomDataType_String
                    If True Then
                        'Get string value from custom data
                        Dim stringValue As String
                        dsCustomData.GetStringData index, stringValue
                        'Print custom data index, data type, marker, and string value
                        PrintCustomDataElement index, dataType, marker, stringValue
                    End If
                Case dsCustomDataType_e.dsCustomDataType_Unknown
                    If True Then
                        'Print custom data index, data type, marker and value
                        PrintCustomDataElement index, dataType, marker, "Unknown value"
                    End If
                Case Else
            End Select
        Next
    End Sub
    Sub PrintCustomDataElement(ByVal index As Long, ByVal dataType As dsCustomDataType_e, ByVal marker As Integer, ByVal customDataValue As Variant)
        'Print custom data index, data type, marker, and value
        Dim message As String
        message = "Index: " & index
        message = message + " Data type: " & dataType
        message = message + " Marker: " & marker
        message = message + " Value: " & customDataValue
        Debug.Print (message)
    End Sub

 



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 (VBA)
*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) 2019 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.