Exemple #1
0
        public void iterateEntInBlock(BlockTableRecord btr, bool _deleteWaste = true)
        {
            var tilesDict = new Dictionary <Extents3d, Tuple <ObjectId, Extents3d> >();

            _extentsByTile = new Extents3d();
            foreach (ObjectId idEnt in btr)
            {
                if (!idEnt.IsValidEx())
                {
                    continue;
                }
                using (var ent = idEnt.GetObject(OpenMode.ForRead) as Entity)
                {
                    EntInfos.Add(new EntityInfo(ent));

                    // Если это подпись Марки (на слое Марок)
                    if (ent is DBText && string.Equals(ent.Layer, Settings.Default.LayerMarks, StringComparison.CurrentCultureIgnoreCase))
                    {
                        // Как определить - это текст Марки или Покраски - сейчас Покраска в скобках (). Но вдруг будет без скобок.
                        var textCaption = (DBText)ent;
                        if (textCaption.TextString.StartsWith("("))
                        {
                            CaptionPaint   = textCaption.TextString;
                            IdCaptionPaint = idEnt;
                        }
                        else
                        {
                            CaptionMarkSb   = textCaption.TextString;
                            IdCaptionMarkSb = idEnt;
                            CaptionLayerId  = textCaption.LayerId;
                        }
                        continue;
                    }
                    // Если блок - плитка или окно
                    else if (ent is BlockReference)
                    {
                        var blRef  = ent as BlockReference;
                        var blName = blRef.GetEffectiveName();
                        if (blName.Equals(Settings.Default.BlockTileName, StringComparison.CurrentCultureIgnoreCase))
                        {
                            var ext = blRef.GeometricExtentsСlean();
                            _extentsByTile.AddExtents(ext);

                            try
                            {
                                tilesDict.Add(ext, new Tuple <ObjectId, Extents3d>(blRef.Id, ext));
                            }
                            catch (ArgumentException)
                            {
                                // Ошибка - плитка с такими границами уже есть
                                ErrMsg += "Наложение плиток. ";
                            }
                            catch (Exception ex)
                            {
                                Logger.Log.Error(ex, "iterateEntInBlock - tilesDict.Add(ent.GeometricExtents, ent.GeometricExtents);");
                            }
                            continue;
                        }
                        else if (blName.StartsWith(Settings.Default.BlockWindowName, StringComparison.OrdinalIgnoreCase))
                        {
                            // Окно оставляем
                            continue;
                        }
                    }

                    //// Удаление лишних объектов (мусора)
                    //if (_deleteWaste && deleteWaste(ent)) continue; // Если объект удален, то переход к новому объекту в блоке

                    if (_deleteWaste &&
                        (string.Equals(ent.Layer, Settings.Default.LayerDimensionFacade, StringComparison.CurrentCultureIgnoreCase) ||
                         string.Equals(ent.Layer, Settings.Default.LayerDimensionForm, StringComparison.CurrentCultureIgnoreCase)))
                    {
                        ent.UpgradeOpen();
                        ent.Erase();
                    }
                }
            }

            Tiles = tilesDict.Values.ToList();
            // Проверка
            if (string.IsNullOrEmpty(CaptionMarkSb))
            {
                ErrMsg += "Не наден текст подписи марки панели. ";
            }
            if (string.IsNullOrEmpty(CaptionPaint))
            {
                ErrMsg += "Не наден текст подписи марки покраски панели. ";
            }
            if (ExtentsByTile.Diagonal() < 100)
            {
                ErrMsg += string.Format("Не определены габариты панели по плиткам - диагональ панели = {0}", ExtentsByTile.Diagonal());
            }

            // Определение высоты панели
            HeightByTile = ExtentsByTile.MaxPoint.Y - ExtentsByTile.MinPoint.Y;
        }
Exemple #2
0
        private void defineEnds(ContourPanel contourPanel)
        {
            // условие наличия торцов
            if (ExtentsByTile.Diagonal() < 1000 || ExtentsNoEnd.Diagonal() < 1000 ||
                ExtentsByTile.Diagonal() - ExtentsNoEnd.Diagonal() < 100)
            {
                return;
            }

            // Определение торцевых объектов в блоке
            // Торец слева
            if ((ExtentsNoEnd.MinPoint.X - ExtentsByTile.MinPoint.X) > 400)
            {
                // поиск объектов с координатой близкой к ExtentsByTile.MinPoint.X
                var endTiles = GetEndTiles(new Extents3d(ExtentsByTile.MinPoint,
                                                         new Point3d(ExtentsByTile.MinPoint.X + 300, ExtentsByTile.MaxPoint.Y, ExtentsByTile.MaxPoint.Z)),
                                           contourPanel.TreeTiles);
                //var idsEndEntsTemp = getEndEntsInCoord(ExtentsByTile.MinPoint.X, true);
                if (endTiles.Count > 0)
                {
                    HashSet <ObjectId> idsEndLeftEntsHash = new HashSet <ObjectId>();
                    endTiles.ForEach(t => idsEndLeftEntsHash.Add(t));
                    IdsEndsLeftEntity = idsEndLeftEntsHash.ToList();
                }
            }
            // Торец справа
            if ((ExtentsByTile.MaxPoint.X - ExtentsNoEnd.MaxPoint.X) > 400)
            {
                var endTiles = GetEndTiles(new Extents3d(
                                               new Point3d(ExtentsByTile.MaxPoint.X - 300, ExtentsByTile.MinPoint.Y, ExtentsByTile.MinPoint.Z),
                                               ExtentsByTile.MaxPoint), contourPanel.TreeTiles);
                //var idsEndEntsTemp = getEndEntsInCoord(ExtentsByTile.MaxPoint.X, true);
                if (endTiles.Count > 0)
                {
                    var idsEndRightEntsHash = new HashSet <ObjectId>();
                    endTiles.ForEach(t => idsEndRightEntsHash.Add(t));
                    IdsEndsRightEntity = idsEndRightEntsHash.ToList();
                }
            }
            // Торец сверху
            if ((ExtentsByTile.MaxPoint.Y - ExtentsNoEnd.MaxPoint.Y) > 400)
            {
                var endTiles = GetEndTiles(new Extents3d(
                                               new Point3d(ExtentsByTile.MinPoint.X, ExtentsByTile.MaxPoint.Y - 300, ExtentsByTile.MaxPoint.Z),
                                               ExtentsByTile.MaxPoint), contourPanel.TreeTiles);
                //var idsEndEntsTemp = getEndEntsInCoord(ExtentsByTile.MaxPoint.Y, false);
                if (endTiles.Count > 0)
                {
                    var idsEndTopEntsHash = new HashSet <ObjectId>();
                    endTiles.ForEach(t => idsEndTopEntsHash.Add(t));
                    IdsEndsTopEntity = idsEndTopEntsHash.ToList();
                }
            }
            // Торец снизу
            if ((ExtentsNoEnd.MinPoint.Y - ExtentsByTile.MinPoint.Y) > 400)
            {
                var endTiles = GetEndTiles(new Extents3d(ExtentsByTile.MinPoint,
                                                         new Point3d(ExtentsByTile.MaxPoint.X, ExtentsByTile.MinPoint.Y + 300, ExtentsByTile.MinPoint.Z)),
                                           contourPanel.TreeTiles);
                //var idsEndEntsTemp = getEndEntsInCoord(ExtentsByTile.MinPoint.Y, false);
                if (endTiles.Count > 0)
                {
                    HashSet <ObjectId> idsEndBotEntsHash = new HashSet <ObjectId>();
                    endTiles.ForEach(t => idsEndBotEntsHash.Add(t));
                    IdsEndsBottomEntity = idsEndBotEntsHash.ToList();
                }
            }
        }