Як вставити блок з атрибутами в простір моделі
Визначення блоку міститься в 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; ;