/// <summary>
/// Метод который проходится по списку паттернов блоков и
/// заполняет ВСЕ поля и свойства в объекте block
/// </summary>
/// <param name="acCurDb">Текущщая база чертежа</param>
/// <param name="BlockID">Db.ObjectId выбранного пользователем блока</param>
private static void UpdateBlockList(Db.Database acCurDb, Db.ObjectId BlockID)
{
////Создаю объект содержищий имена дин. свойств и теги
////аттрибутов выбранного пользователем блока
//SelectelBlockProp = new SelectelBlockProperty();
// Пройтись по списку блоков и наполнить их смыслом
// Получить значения атрибутов и динамических свойств для выбранного блока.
using (Db.Transaction acTrans = acCurDb.TransactionManager.StartOpenCloseTransaction())
{
Db.BlockReference acBlock = (Db.BlockReference)acTrans.GetObject(BlockID, Db.OpenMode.ForRead);
Db.BlockTableRecord blr;
if (acBlock.IsDynamicBlock)
{
blr = (Db.BlockTableRecord)acTrans.GetObject(acBlock.DynamicBlockTableRecord, Db.OpenMode.ForRead);
}
else
{
blr = (Db.BlockTableRecord)acTrans.GetObject(acBlock.BlockTableRecord, Db.OpenMode.ForRead);
}
foreach (block blk in blkList)
{
if (acBlock.IsDynamicBlock)
{
foreach (KeyValuePair<string, Double> j in blk._DynProp.ToList())
{
//Ищим значение динамического сво-ва
Db.DynamicBlockReferenceProperty blockReferenceProperty = (
(from Db.DynamicBlockReferenceProperty blockRefProperty in acBlock.DynamicBlockReferencePropertyCollection
where blockRefProperty.PropertyName.Equals(j.Key, StringComparison.OrdinalIgnoreCase)
select blockRefProperty).FirstOrDefault()) as Db.DynamicBlockReferenceProperty;
Double prop = 0;
Double.TryParse(blockReferenceProperty.Value.ToString(), out prop);
blk._DynProp[j.Key] = prop;
// Ищим индекс динамического свойства по имени
//int DynPropIndex = GetNumberDynProp(acCurDb, BlockID, j.Key);
KeyValuePair<string, int> DynPropIndex = GetNumberDynProp(acCurDb, BlockID, j.Key);
blk._DynPropID[j.Key] = DynPropIndex.Value;
blk._DynPropConnectionName[j.Key] = DynPropIndex.Key;
}
}
if (blr.HasAttributeDefinitions)
{
foreach (KeyValuePair<string, string> j in blk._AttProp.ToList())
{
//Ищим записи и свойства аттрибута
Db.AttributeReference blockAttr = ((from Db.ObjectId attribRefId in acBlock.AttributeCollection
let attribRef = (Db.AttributeReference)acTrans.GetObject(attribRefId, Db.OpenMode.ForRead)
where attribRef.Tag.Equals(j.Key, StringComparison.OrdinalIgnoreCase)
select attribRef).FirstOrDefault()) as Db.AttributeReference;
if (blockAttr != null)
{
blk._AttProp[j.Key] = blockAttr.TextString;
blk._AttPropID[j.Key] = blockAttr.ObjectId;
}
}
}
}
acTrans.Commit();
}
}