public BlockInfo(BlockReference blRef, string blName) { IdBtr = blRef.DynamicBlockTableRecord; BlName = blName; AttrsDef = AttributeInfo.GetAttrDefs(IdBtr); AttrsRef = AttributeInfo.GetAttrRefs(blRef); }
public ProfileTile(ObjectId idBlRefProfile) { // Блок Профиля для торцевых панелей // Считывание атрибу названия профиля и марки профиля using (var blRef = idBlRefProfile.Open(OpenMode.ForRead, false, true) as BlockReference) { var atrRefs = AttributeInfo.GetAttrRefs(blRef); ProfileTileName = atrRefs.Where(a => a.Tag.Equals("НАЗВАНИЕ", StringComparison.OrdinalIgnoreCase))?.FirstOrDefault()?.Text; ProfileTileMark = atrRefs.Where(a => a.Tag.Equals("МАРКА", StringComparison.OrdinalIgnoreCase))?.FirstOrDefault()?.Text; } }
private void defineAttrs(BlockReference blRef) { var attrs = AttributeInfo.GetAttrRefs(blRef); // Поиск атрибута типа квартиры TypeFlatAttr = attrs.Find(a => a.Tag.Equals(Options.Instance.ApartmentTypeFlatParameter, StringComparison.OrdinalIgnoreCase)); if (TypeFlatAttr != null) { TypeFlat = TypeFlatAttr.Text.Trim(); } }
private static int removeInBtr(BlockTableRecord btr) { if (!testedBtrs.Add(btr.Id)) { return(0); } int count = 0; List <ObjectId> innerBtrs = new List <ObjectId>(); foreach (var idEnt in btr) { using (var ent = idEnt.GetObject(OpenMode.ForRead, false, true)) { if (ent is BlockReference) { var blRef = (BlockReference)ent; var attRefs = AttributeInfo.GetAttrRefs(blRef); var dublAttr = attRefs.GroupBy(a => a.Tag).Where(g => g.Skip(1).Any()); foreach (var atrGroup in dublAttr) { foreach (var atrInfo in atrGroup.Skip(1)) { var atrRef = atrInfo.IdAtr.GetObject(OpenMode.ForWrite, false, true) as AttributeReference; atrRef.Erase(); count++; } } innerBtrs.Add(blRef.BlockTableRecord); } } } foreach (var idInnerBtr in innerBtrs) { using (var innerBtr = idInnerBtr.GetObject(OpenMode.ForRead) as BlockTableRecord) { count += removeInBtr(innerBtr); } } return(count); }
/// <summary> /// Создание ведомости деталей в чертеже в указанной точке верхнего левого угла таблицы /// Возвращается список объектов таблицы - набор блоков /// </summary> public List <ObjectId> CreateTable(Point3d ptTopLeftTable) { List <ObjectId> res = new List <ObjectId> (); if (details.Count == 0) { return(res); } // Копирование блоков деталей в чертеж var blNames = details.GroupBy(g => g.BlockNameDetail).Select(s => s.First().BlockNameDetail).ToList(); copyBlocks(blNames); var bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable; var cs = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord; var t = db.TransactionManager.TopTransaction; // Вставка блоков деталей и заполнение параметров var ptInsert = new Point3d(ptTopLeftTable.X, ptTopLeftTable.Y - 25 * scale, 0); var blRefTitle = BlockInsert.InsertBlockRef(blockTitleName, ptInsert, cs, t, scale); var layerId = AcadLib.Layers.LayerExt.GetLayerOrCreateNew(new AcadLib.Layers.LayerInfo(KRHelper.LayerTable)); blRefTitle.LayerId = layerId; res.Add(blRefTitle.Id); foreach (var detail in details) { var blRefDetail = BlockInsert.InsertBlockRef(detail.BlockNameDetail, ptInsert, cs, t, scale); blRefDetail.LayerId = layerId; var atrs = AttributeInfo.GetAttrRefs(blRefDetail); // Заполнение параметров detail.SetDetailsParam(atrs); // определение точки вставки следующего блока ptInsert = defineNextPtInsert(blRefDetail); res.Add(blRefDetail.Id); } return(res); }