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 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; } //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); System.Diagnostics.Debugger.Break(); //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); dsGroup2.RemoveEntityAt(index); } //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 dsGroup2.Explode(); System.Diagnostics.Debugger.Break(); //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.Rename("SampleGroup"); dsGroup1.Description = "My sample group."; System.Diagnostics.Debugger.Break(); //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) { return; } //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); } } }