Спільнота програмістів autodesk в співдружність незалежних держав

Як вставити блок з атрибутами в простір моделі

Визначення блоку міститься в BlockTableRecord. Якщо у блоку є атрибути, то вони містяться в BlockTableRecord як AttributeDefinition - точно також як і будь-які інші примітиви.

Коли ми вставляємо блок в креслення (точніше в простір моделі), то ми вставляємо BlockReference. Якщо у блоку є атрибути, то для всіх (крім постійних) AttributeDefinition в BlockTableRecord є відповідні AttributeReference приєднані до BlockReference. Постійні атрибути обробляються не так, тому що їх текст однаковий у всіх вставках цього блоку (у всіх BlockReference). Вони знаходяться в BlockTableRecord, і не мають відповідних AttributeReference приєднаних до BlockReference.

Нижче простий C # -код для вставки блоку з атрибутами в простір моделі. Створіть креслення, що містить блок з ім'ям "CHECK" містить кілька атрибутів (частина постійних, частина немає) для перевірки коду.

# 91; CommandMethod # 40; "AddBlockTest" # 41; # 93;

static public void AddBlockTest # 40; # 41;

Database db = Application. DocumentManager. MdiActiveDocument. Database;

using # 40; Transaction myT = db. TransactionManager. StartTransaction # 40; # 41; # 41;

// Отримуємо визначення блоку "Check".

string blockName = "CHECK";

db. BlockTableId. GetObject # 40; OpenMode. ForRead # 41; as BlockTable;

bt # 91; blockName # 93 ;. GetObject # 40; OpenMode. ForRead # 41; as BlockTableRecord;

// Відкриваємо простір моделі - ми додаємо наш BlockReference до нього

bt # 91; BlockTableRecord. ModelSpace # 93 ;. GetObject # 40; OpenMode. ForWrite # 41;

// Створюємо BlockReference і пов'язуємо його з визначенням блоку

Point3d point = new Point3d # 40; 2.0. 4.0. 6.0 # 41; ;

using # 40; BlockReference blockRef =

new BlockReference # 40; point, blockDef. ObjectId # 41; # 41;

// Додаємо вставку блоку до простору моделі

ms. AppendEntity # 40; blockRef # 41; ;

myT. AddNewlyCreatedDBObject # 40; blockRef, true # 41; ;

// проходить по визначенню блоку для пошуку всіх неконстантних атрибутів

foreach # 40; ObjectId id in blockDef # 41;

DBObject obj = id. GetObject # 40; OpenMode. ForRead # 41; ;

AttributeDefinition attDef = obj as AttributeDefinition;

if # 40; # 40; attDef! = null # 41; # 40 ;. attDef. Constant # 41; # 41;

// Це неконстантний AttributeDefinition

// Створюємо новий AttributeReference

using # 40; AttributeReference attRef = new AttributeReference # 40; # 41; # 41;

attRef. SetAttributeFromBlock # 40; attDef, blockRef. BlockTransform # 41; ;

attRef. TextString = "Hello World";

// Додаємо AttributeReference до BlockReference

blockRef. AttributeCollection. AppendAttribute # 40; attRef # 41; ;

myT. AddNewlyCreatedDBObject # 40; attRef, true # 41; ;