Get and Set Block Definitions, Block Instances, and BlockAttribute Instances Example (C#)
This example shows how to get and set Block definitions, Block
instances, and BlockAttribute instances.
//--------------------------------------------------------------
// 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. Review the code to see how Block definitions,
// Block instances, and BlockAttribute instances
// are modified.
// 7. Start debugging the project.
//
// Postconditions: Block definitions, Block instances, and
// BlockAttribute instances are modified. Message
// boxes pop up when a Block-related entity does not exist.
// Read the text in each message box before clicking OK to close it.
//----------------------------------------------------------------
using DraftSight.Interop.dsAutomation;
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
static class Module1
{
public static void Main()
{
DraftSight.Interop.dsAutomation.Application dsApp;
Document dsDoc = default(Document);
//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
dsDoc = (Document)dsApp.GetActiveDocument();
if (dsDoc != null)
{
//Test Block definitions
TestBlockDefinitions(dsDoc);
}
else
{
MessageBox.Show("There are no open documents in DraftSight.");
}
}
public static void TestBlockDefinitions(Document dsDoc)
{
object[] dsVarBlkDefinitions = null;
BlockDefinition dsBlkDefinition = default(BlockDefinition);
ExternalReference dsExtRef = default(ExternalReference);
int index = 0;
//Get all Block definitions in the drawing
dsVarBlkDefinitions = (object[])dsDoc.GetBlockDefinitions();
//Check if there are any Block definitions
if (dsVarBlkDefinitions != null)
{
for (index = 0; index <= dsVarBlkDefinitions.Length - 1; index++)
{
for (index = dsVarBlkDefinitions.GetLowerBound(0); index <= dsVarBlkDefinitions.GetUpperBound(0); index++)
{
dsBlkDefinition = (BlockDefinition)dsVarBlkDefinitions[index];
//Check if Block definition is a reference
dsExtRef = dsBlkDefinition.GetExternalReference();
if (dsExtRef != null)
{
MessageBox.Show(dsBlkDefinition.GetName() + " block definition is a reference.");
}
else
{
MessageBox.Show(dsBlkDefinition.GetName() + " block definition isn't a reference.");
}
//Test BlockAttribute definitions
TestAttributeDefinitions(dsBlkDefinition);
//Test Block instances
TestBlockInstances(dsBlkDefinition);
}
}
}
else
{
MessageBox.Show("There are no Block definitions in \"" + dsDoc.GetPathName() + "\" document.");
}
}
public static void TestAttributeDefinitions(BlockDefinition dsBlkDefinition)
{
object[] dsVarAttrDefinitions = null;
AttributeDefinition dsAttrDefinition = default(AttributeDefinition);
int index = 0;
string attrDefCaption = null;
string attrDefValue = null;
string attrDefName = null;
string newAttrCaptionValue = null;
string newAttrDefValue = null;
string newAttrDefName = null;
//Get all BlockAttribute definitions in Block definition
dsVarAttrDefinitions = (object[])dsBlkDefinition.GetAttributeDefinitions();
//Check if there are any BlockAttribute definition
if (dsVarAttrDefinitions != null)
{
for (index = dsVarAttrDefinitions.GetLowerBound(0); index <= dsVarAttrDefinitions.GetUpperBound(0); index++)
{
dsAttrDefinition = (AttributeDefinition)dsVarAttrDefinitions[index];
//Get BlockAttribute definition caption and change
attrDefCaption = dsAttrDefinition.Caption;
//Change caption value
newAttrCaptionValue = dsAttrDefinition.Caption + "_Changed";
dsAttrDefinition.Caption = newAttrCaptionValue;
if (newAttrCaptionValue != dsAttrDefinition.Caption)
{
MessageBox.Show("The caption of '" + dsAttrDefinition.Name + "' BlockAttribute definition wasn't changed from '" + attrDefCaption + "' to '" + newAttrCaptionValue + "'.");
}
//Get BlockAttribute definition value
attrDefValue = dsAttrDefinition.Value;
//Change BlockAttribute definition value
newAttrDefValue = dsAttrDefinition.Value + "_Changed";
dsAttrDefinition.Value = newAttrDefValue;
if (newAttrDefValue != dsAttrDefinition.Value)
{
MessageBox.Show("The value of '" + dsAttrDefinition.Name + "' BlockAttribute definition wasn't changed from '" + attrDefValue + "' to '" + newAttrDefValue + "'.");
}
//Get BlockAttribute definition name
attrDefName = dsAttrDefinition.Name;
//Change BlockAttribute definition name
newAttrDefName = dsAttrDefinition.Name + "_Changed";
dsAttrDefinition.Name = newAttrDefName;
if (newAttrDefName != dsAttrDefinition.Name)
{
MessageBox.Show("The name of '" + dsAttrDefinition.Name + "' BlockAttribute definition wasn't changed from '" + attrDefName + "' to '" + newAttrDefName + "'.");
}
}
}
else
{
MessageBox.Show("There are no BlockAttribute definitions in \"" + dsBlkDefinition.GetName() + "\" block definition.");
}
}
public static void TestBlockInstances(BlockDefinition dsBlkDefinition)
{
object[] dsVarBlockInstances = null;
BlockInstance dsBlockInstance = default(BlockInstance);
BlockDefinition dsBlockDefinition = default(BlockDefinition);
object Workspace = null;
dsObjectType_e workSpaceType = default(dsObjectType_e);
Sheet dsSheet = default(Sheet);
Model dsModel = default(Model);
int index = 0;
//Get Block instances of Block definition
dsVarBlockInstances = (object[])dsBlkDefinition.GetBlockInstances();
//Check if there are any Block instances
if (dsVarBlockInstances != null)
{
for (index = dsVarBlockInstances.GetLowerBound(0); index <= dsVarBlockInstances.GetUpperBound(0); index++)
{
dsBlockInstance = (BlockInstance)dsVarBlockInstances[index];
//Test attribute instances
TestAttributeInstances(dsBlockInstance);
//Get Block definition from Block instance
dsBlockDefinition = dsBlockInstance.GetBlockDefinition();
if (dsBlockDefinition == null)
{
MessageBox.Show("GetBlockDefinition method returns Nothing for Block instance with ID=\"" + dsBlockInstance.GetID() + ".");
}
//Get working space
dsBlockInstance.GetWorkingSpace(out workSpaceType, out Workspace);
if (Workspace != null)
{
//If work space is sheet
if (workSpaceType == dsObjectType_e.dsSheetType)
{
dsSheet = (Sheet)Workspace;
if (dsSheet == null)
{
MessageBox.Show("GetWorkingSpace method returns dsSheetType type, but sheet object is Nothing.");
}
}
else if (workSpaceType == dsObjectType_e.dsModelType)
{
dsModel = (Model)Workspace;
if (dsModel == null)
{
MessageBox.Show("GetWorkingSpace method returns dsModelType type, but model object is Nothing.");
}
}
}
else
{
MessageBox.Show("GetWorkingSpace method returns Nothing for Block instance.");
}
}
}
else
{
MessageBox.Show("There are no Block instances of \"" + dsBlkDefinition.GetName() + "\" Block definition.");
}
}
public static void TestAttributeInstances(BlockInstance dsBlockInstance)
{
object[] dsVarAttrInstances = null;
AttributeInstance dsAttrInstance = default(AttributeInstance);
int index = 0;
string attrInstanceName = null;
string attrInstanceValue = null;
string newAttrInstanceValue = null;
//Get BlockAttribute instances
dsVarAttrInstances = dsBlockInstance.GetAttributeInstances();
//Check if there are any BlockAttribute instances
if (dsVarAttrInstances != null)
{
for (index = dsVarAttrInstances.GetLowerBound(0); index <= dsVarAttrInstances.GetUpperBound(0); index++)
{
dsAttrInstance = (AttributeInstance)dsVarAttrInstances[index];
//Get BlockAttribute instance name
attrInstanceName = dsAttrInstance.GetName();
//Get BlockAttribute instance value
attrInstanceValue = dsAttrInstance.Value;
//Change BlockAttribute instance value
newAttrInstanceValue = dsAttrInstance.Value + "_Changed";
dsAttrInstance.Value = newAttrInstanceValue;
if (newAttrInstanceValue != dsAttrInstance.Value)
{
MessageBox.Show("The value of the '" + dsAttrInstance.GetName() + "' instance wasn't changed from '" + attrInstanceValue + "' to '" + newAttrInstanceValue + "'.");
}
//Test general properties
TestAttributeInstanceGeneralProperties(dsAttrInstance);
//Select BlockAttribute instance
dsAttrInstance.Select(true);
//Deselect BlockAttribute instance
dsAttrInstance.Select(false);
}
}
else
{
MessageBox.Show("There are no BlockAttribute instances in \"" + dsBlockInstance.GetBlockDefinition().GetName() + "\" Block instance.");
}
}
public static void TestAttributeInstanceGeneralProperties(AttributeInstance dsAttrInstance)
{
string layer = null;
string lineStyle = null;
double lineScale = 0;
double newLineScale = 0;
double precision = 0;
dsLineWeight_e lineWeight = default(dsLineWeight_e);
dsLineWeight_e newLineWeight = default(dsLineWeight_e);
bool visible = false;
bool newVisibleValue = false;
//Get layer name
layer = dsAttrInstance.Layer;
//Set the same layer
dsAttrInstance.Layer = layer;
//Get line scale
lineScale = dsAttrInstance.LineScale;
//Set line scale
newLineScale = 8.6;
dsAttrInstance.LineScale = newLineScale;
precision = 1E-09;
if (Math.Abs(newLineScale - dsAttrInstance.LineScale) > precision)
{
MessageBox.Show("The line scale of '" + dsAttrInstance.GetName() + "' attribute instance wasn't changed from '" + lineScale + "' to '" + newLineScale + "'.");
}
//Get line style
lineStyle = dsAttrInstance.LineStyle;
//Set the same line style
dsAttrInstance.LineStyle = lineStyle;
//Get line weight
lineWeight = dsAttrInstance.LineWeight;
//Set new line weight
newLineWeight = dsLineWeight_e.dsLnWt_015;
dsAttrInstance.LineWeight = newLineWeight;
if (newLineWeight != dsAttrInstance.LineWeight)
{
MessageBox.Show("The line weight of '" + dsAttrInstance.GetName() + "' attribute instance wasn't changed from '" + lineWeight + "' to '" + newLineWeight + "'.");
}
//Get visible property
visible = dsAttrInstance.Visible;
//Set visible property
newVisibleValue = !visible;
dsAttrInstance.Visible = newVisibleValue;
if (newVisibleValue != dsAttrInstance.Visible)
{
MessageBox.Show("The visible property of '" + dsAttrInstance.GetName() + "' attribute instance wasn't changed from '" + visible + "' to '" + newVisibleValue + "'.");
}
}
}