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
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);
}
}
}