Hide Table of Contents

Create and Change EntityGroups Example (C#)

This example shows how to create and change EntityGroups.

// 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. Inserts entities, two lines and two circles, in the drawing.
// 2. Creates two EntityGroups:
//    * SampleGroup1 contains two lines, line1 and line2.
//    * SampleGroup2 contains two circles, circle1 and circle2.
// 3. Changes the color of the lines from white to red.
// 4. Removes an entity, circle1, from SampleGroup2.
// 5. Adds an entity, circle2, to SampleGroup1.
// 6. Reorders SampleGroup1.
// 7. Explodes SampleGroup2, which removes the definition
//    from the drawing; however, circle1 remains as an entity
//    in the drawing.
// 8. Renames SampleGroup1 and changes its description.
// NOTE: Execution of the macro stops several times. Follow the
// instructions in the macro each time execution stops.
using System;
using DraftSight.Interop.dsAutomation;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
namespace EntityGroup
    static class Program
        private static DraftSight.Interop.dsAutomation.Application dsApp;
        private static Document dsDoc;
        static void Main()
            //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.");
            //Insert entities
            SketchManager dsSketchMgr = dsApp.GetActiveDocument().GetModel().GetSketchManager();
            Line line1 = dsSketchMgr.InsertLine(0, 0, 0, 10, 10, 0);
            Line line2 = dsSketchMgr.InsertLine(5, 0, 0, 15, 10, 0);
            Circle circle1 = dsSketchMgr.InsertCircle(5, 5, 0, 10);
            Circle circle2 = dsSketchMgr.InsertCircle(10, 5, 0, 10);
            DispatchWrapper[] EntitiesArray1 = new DispatchWrapper[2];
            EntitiesArray1[0] = new DispatchWrapper(line1);
            EntitiesArray1[1] = new DispatchWrapper(line2);
            DispatchWrapper[] EntitiesArray2 = new DispatchWrapper[2];
            EntitiesArray2[0] = new DispatchWrapper(circle1);
            EntitiesArray2[1] = new DispatchWrapper(circle2);
            CreateGroups(EntitiesArray1, EntitiesArray2);
            //Type GROUP at the command window
            //to verify that two EntityGroups, SampleGroup1
            //and SampleGroup2, were created
            //Press OK to close the dialog 
            //Press F5 in the IDE to continue
            //Get SampleGroup2 and remove circle2
            Group dsGroup2 = dsDoc.GetGroup("SampleGroup2");
            if (dsGroup2.HasEntity(circle2))
                int index = dsGroup2.GetIndex(circle2);
            //Get SampleGroup1 and add circle1 at last position
            Group dsGroup1 = dsDoc.GetGroup("SampleGroup1");
            DispatchWrapper[] EntitiesArray = new DispatchWrapper[1];
            EntitiesArray[0] = new DispatchWrapper(circle1);
            int count = dsGroup1.GetEntitiesCount();
            dsGroup1.InsertEntitiesAt(count, EntitiesArray);
            int newCount = dsGroup1.GetEntitiesCount();
            if (newCount != count + 1)
                MessageBox.Show("Circle1 was not inserted.");
            //Move circle1 to second position (index 1)
            int circleIndex = dsGroup1.GetIndex(circle1);
            if (circleIndex != count)
                MessageBox.Show("Circle1 inserted at wrong position.");
            dsGroup1.Reorder(circleIndex, 1, 1);
            circleIndex = dsGroup1.GetIndex(circle1);
            if (circleIndex != 1)
                MessageBox.Show("Circle1 inserted at wrong position.");
            //Explode SampleGroup2
            //Type GROUP at the command window
            //to verify that only SampleGroup1 exists
            //Press OK to close the dialog 
            //Press F5 in the IDE to continue
            object dsGroups = null;
            dsGroups = dsDoc.GetGroups();
            object[] groupObjects = (object[])dsGroups;
            if (groupObjects.Length != 1)
                MessageBox.Show("Group2 was not exploded.");
            //Rename SampleGroup1 and change description
            dsGroup1.Description = "My sample group.";
            //Type GROUP at the command window
            //to verify that SampleGroup1 was renamed
            //to SampleGroup and its description
            //changed to "My sample group"
            //Press OK to close the dialog 
            //Press F5 in the IDE to continue
        private static void CreateGroups(DispatchWrapper[] EntitiesArray1, DispatchWrapper[] EntitiesArray2)
            //Create group
            Group dsGroup1 = dsDoc.CreateGroup("SampleGroup1"false"This is my first sample group.", EntitiesArray1);
            object dsEntities = null;
            object dsEntityTypes = null;
            dsEntities = dsGroup1.GetEntities(out dsEntityTypes);
            object[] entityObjects = (object[])dsEntities;
            int[] dsEntityTypesArray = (int[])dsEntityTypes;
            if (null == entityObjects && null == dsEntityTypesArray)
            //Change color of lines from white to red
            EntityHelper dsEntityHelper = dsApp.GetEntityHelper();
            Color dsColor = dsApp.GetNamedColor(dsNamedColor_e.dsNamedColor_Red);
            foreach (object dsEntity in entityObjects)
                if (dsEntity != null)
                    dsEntityHelper.SetColor(dsEntity, dsColor);
            Group dsGroup2 = dsDoc.CreateGroup("SampleGroup2"false"This is my second sample group.", EntitiesArray2);

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 Change EntityGroups 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) 2019 SP04

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.