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 + "'."); }
}
}