Esempio n. 1
0
        public static void PaintTileInBtr(ObjectId idBtr, RTree <ColorArea> rtreeColorAreas, Matrix3d transToModel)
        {
            var btr = idBtr.GetObject(OpenMode.ForRead) as BlockTableRecord;

            foreach (ObjectId idEnt in btr)
            {
                if (idEnt.IsValidEx() && idEnt.ObjectClass.Name == "AcDbBlockReference")
                {
                    var    blRef  = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference;
                    string blName = blRef.GetEffectiveName();
                    if (blName.StartsWith(Settings.Default.BlockTileName, StringComparison.OrdinalIgnoreCase))
                    {
                        Tile tile = new Tile(blRef, blName);
                        //Определение покраски плитки
                        Paint paint = ColorArea.GetPaint(tile.CenterTile.TransformBy(transToModel), rtreeColorAreas);
                        if (paint != null)
                        {
                            blRef.UpgradeOpen();
                            blRef.Layer = paint.Layer;
                            FillTileArticle(blRef, paint.Article); // Так же поворачивает атрибут
                            //tile.SetPaint(paint);
                        }
                    }
                    else if (!MarkSb.IsBlockNamePanel(blName))
                    {
                        // Покраска во вложенных блоках, кроме АРК панелей
                        PaintTileInBtr(blRef.BlockTableRecord, rtreeColorAreas, blRef.BlockTransform * transToModel);
                    }
                }
            }
        }
Esempio n. 2
0
        // Определение покраски панели (список цветов по порядку списка плитов в блоке СБ)
        public static List <Paint> GetPanelMarkAR(MarkSb markSb, BlockReference blRefPanel, RTree <ColorArea> rtreeColorAreas)
        {
            List <Paint> paintsAR = new List <Paint>();

            int  i = 0;
            bool hasTileWithoutPaint = false;

            foreach (Tile tileMarSb in markSb.Tiles)
            {
                Paint paintSb = markSb.Paints[i++];
                Paint paintAR;
                if (paintSb == null)
                {
                    // Опрделение покраски по зонам
                    Point3d centerTileInBlRef = GetCenterTileInBlockRef(blRefPanel.Position, tileMarSb.CenterTile);
                    paintAR = ColorArea.GetPaint(centerTileInBlRef, rtreeColorAreas);
                    if (paintAR == null)
                    {
                        if (!hasTileWithoutPaint)
                        {
                            //Ошибка. Не удалось определить покраску плитки.???
                            Inspector.AddError($"{markSb.MarkSbClean} - не все плитки покрашены", blRefPanel, icon: System.Drawing.SystemIcons.Error);
                            hasTileWithoutPaint = true;
                        }
                    }
                }
                else
                {
                    paintAR = paintSb;
                }
                paintsAR.Add(paintAR);
            }
            return(paintsAR);
        }
Esempio n. 3
0
        // Получение списка плиток в определении блока
        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);
                    }
                }
            }
        }