// Получение списка плиток в определении блока private void IterateBtrEnt() { _tiles = new List <Tile>(); _paints = new List <Paint>(); var btrMarkSb = _idBtr.GetObject(OpenMode.ForRead) as BlockTableRecord; foreach (ObjectId idEnt in btrMarkSb) { if (idEnt.IsValidEx() && idEnt.ObjectClass.Name == "AcDbBlockReference") { var blRef = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference; string blName = blRef.GetEffectiveName(); // Плитка if (blName.Equals(Settings.Default.BlockTileName, StringComparison.OrdinalIgnoreCase)) { Tile tile = new Tile(blRef, blName); //Определение покраски плитки Paint paint = ColorArea.GetPaint(tile.CenterTile, _rtreeColorArea); _tiles.Add(tile); _paints.Add(paint); } // Окна else if (BlockWindow.IsblockWindow(blName)) { BlockWindow window = new BlockWindow(blRef, blName, this); Windows.Add(window); } } } }
/// <summary> /// Нормализация плиток - слой, поворот артикула и установка пустого артикула /// </summary> public static void TilesNormalize(ObjectId idBtrMarkSb) { // Перенос блоков плиток на слой var layerTile = LayerExt.CheckLayerState(new LayerInfo(Settings.Default.LayerTile)); //"АР_Плитка" var layerWindow = LayerExt.CheckLayerState(new LayerInfo(Settings.Default.LayerWindows)); //"АР_Окна" var btrMarkSb = idBtrMarkSb.GetObject(OpenMode.ForRead) as BlockTableRecord; var tilesDict = new Dictionary <Extents3d, BlockReference>(AcadLib.Comparers.Extents3dComparer.Default1); foreach (ObjectId idEnt in btrMarkSb) { if (!idEnt.IsValidEx()) { continue; } var blRef = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference; if (blRef == null) { continue; } if (string.Equals(blRef.GetEffectiveName(), Settings.Default.BlockTileName, StringComparison.CurrentCultureIgnoreCase)) { var tileExt = blRef.GeometricExtentsСlean(); if (tilesDict.ContainsKey(tileExt)) { // Дублирование плитки - удаление blRef.UpgradeOpen(); blRef.Erase(); } else { tilesDict.Add(tileExt, blRef); blRef.UpgradeOpen(); // Слой blRef.LayerId = layerTile; // Нормализация плитки (зеркальность, поворот) //blRef.Normalize(); // Есть плитки с подрезкой - как ее нормализовать, пока непонтно!!!??? FillTileArticle(blRef, ""); blRef.DowngradeOpen(); } } else if (BlockWindow.IsblockWindow(blRef.GetEffectiveName())) { if (!string.Equals(blRef.Layer, Settings.Default.LayerWindows)) { blRef.UpgradeOpen(); blRef.LayerId = layerWindow; } } } }