/// <summary> /// Вставка блока профиля и стрелок к местам установки профиля на стыке плиток в торце панели /// </summary> protected void addProfileTile(bool doTrans, Matrix3d trans) { double xPtProfile = 0; double yPtProfile = 0; double xPtArrowDirect = 0; if (panelBase.IsCheekLeft) { // Для торца слева - профиль вставляется в одну и туже точку (-400,-600) xPtProfile = -400; yPtProfile = -600; ptPosArrowToHorSec = ptPosHorizontalPanelSection; } else if (panelBase.IsCheekRight) { // Для торца справа - на раст (400,600) от нижнего правого края последней плитки xPtProfile = panelBase.XMaxContour + 400; yPtProfile = -600; xPtArrowDirect = panelBase.XMaxContour; ptPosArrowToHorSec = new Point3d(panelBase.XMaxContour, ptPosHorizontalPanelSection.Y, 0); } else { // Не нужен профиль для панелей без торцов (Cheek) return; } // Поиск блока профиля в инвентаре BlockInfo biProfile = panelBase.Service.Env.BlocksInFacade.FirstOrDefault(b => b.BlName.Equals(Settings.Default.BlockProfileTile)); if (biProfile == null) { return; } ObjectId idBtrProfile = biProfile.IdBtr; // Точка вставки блока профиля ptPosProfile = new Point3d(xPtProfile, yPtProfile, 0); Point3d ptBlrefProfile = ptPosProfile; if (doTrans) { ptBlrefProfile = ptPosProfile.TransformBy(trans); } // Вставка блока профиля - название и марка var blRefProfile = CreateBlRefInBtrDim(ptBlrefProfile, idBtrProfile, Settings.Default.SheetScale); if (blRefProfile == null) { return; } // Добавление атрибутов Названия и марки // Атрибут Названия - из вхождения атрибута var atrRefName = biProfile.AttrsRef.FirstOrDefault(a => a.Tag.Equals("НАЗВАНИЕ")); if (atrRefName != null) { // определение атрибута var atrDefName = biProfile.AttrsDef.FirstOrDefault(a => a.Tag.Equals("НАЗВАНИЕ")); if (atrDefName != null) { AddAttrToBlockRef(blRefProfile, atrDefName.IdAtr, atrRefName.Text); } } // Атрибут Марки - из вхождения атрибута var atrRefMark = biProfile.AttrsRef.FirstOrDefault(a => a.Tag.Equals("МАРКА")); if (atrRefMark != null) { // определение атрибута var atrDefMark = biProfile.AttrsDef.FirstOrDefault(a => a.Tag.Equals("МАРКА")); if (atrDefMark != null) { AddAttrToBlockRef(blRefProfile, atrDefMark.IdAtr, atrRefMark.Text); } } // Вставка стрелки до угла панели Point3d ptArrowPos = new Point3d(xPtProfile, yPtProfile + 4 * Settings.Default.SheetScale, 0); Point3d ptArrowDirect = new Point3d(xPtArrowDirect, 0, 0); InsertArrowBlRef(ptArrowPos, ptArrowDirect, doTrans, trans); }
/// <summary> /// Поиск первых вхождения блоков в Модели в файле Фасада АКР _service.Db /// </summary> /// <param name="blNames"></param> /// <returns></returns> private List<BlockInfo> findBlocksInFacade(List<string> blNames) { Dictionary<string, BlockInfo> resVal = new Dictionary<string, BlockInfo>(); List<string> notFoundBlocks = blNames.ToList(); // Поиск блоков в чертеже фасада using (var bt = _service.Db.BlockTableId.Open(OpenMode.ForRead) as BlockTable) { using (var ms = bt[BlockTableRecord.ModelSpace].Open( OpenMode.ForRead) as BlockTableRecord) { foreach (var idEnt in ms) { using (var blRef = idEnt.Open(OpenMode.ForRead, false, true) as BlockReference) { if (blRef !=null) { var blName = blRef.GetEffectiveName(); if (resVal.ContainsKey(blName)) { //Добавляем только первое вхождение блока continue; } var name = blNames.Find(n => n.Equals(blName, StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrEmpty(name)) { BlockInfo bi = new BlockInfo(blRef, blName); resVal.Add(blName, bi); notFoundBlocks.Remove(name); } } } } } } // Добавление ошибок для ненайденых блоков foreach (var blNameNotFound in notFoundBlocks) { Inspector.AddError($"В файле фасада не найден требуемый блок {blNameNotFound} для создания альбома панелей.", icon: System.Drawing.SystemIcons.Error); } return resVal.Values.ToList(); }