Пример #1
0
        public MountingPanel(BlockReference blRefPanelSB, List <AttributeRefDetail> attrsDet, Matrix3d trans,
                             string mark, string painting, FloorMounting floor)
        {
            Floor  = floor;
            MarkSb = mark;
            MarkSbWithoutElectric = AkrHelper.GetMarkWithoutElectric(mark); //.Replace(' ', '-');
                                                                            // Проверка есть ли запись Окна _ОК1 в имени марки панели
            string windowSx;

            MarkSbWithoutElectric = AkrHelper.GetMarkWithoutWindowsSuffix(MarkSbWithoutElectric, out windowSx);
            WindowSuffix          = windowSx;

            MarkPainting = painting;

            ExtBlRef      = blRefPanelSB.Bounds;
            ExtBlRefClean = blRefPanelSB.GeometricExtentsСlean(); //blRefPanelSB.GeometricExtents;
            Thickness     = getThickness(ExtBlRefClean);
            var extTemp = ExtBlRefClean;

            extTemp.TransformBy(trans);
            ExtTransToModel = extTemp;

            IdBlRef = blRefPanelSB.Id;
            IdBtr   = blRefPanelSB.BlockTableRecord;
            AttrDet = attrsDet;
            PtCenterPanelSbInModel = getCenterPanelInModel();

            IndexConcreteClass = DefineIndexConcreteClass(MarkSb);
        }
Пример #2
0
        /// <summary>
        /// Получение фасадов из блоков монтажных планов и обозначений стороны фасада в чертеже
        /// </summary>
        /// <returns></returns>
        public static List <FacadeMounting> GetFacadesFromMountingPlans(PanelLibraryLoadService libLoadServ = null)
        {
            List <FacadeMounting> facades = new List <FacadeMounting>();
            var db = HostApplicationServices.WorkingDatabase;

            using (var t = db.TransactionManager.StartTransaction())
            {
                var ms = SymbolUtilityServices.GetBlockModelSpaceId(db).GetObject(OpenMode.ForRead) as BlockTableRecord;
                // Поиск всех блоков монтажных планов в Модели чертежа с соотв обозначением стороны фасада
                List <FloorMounting> floors = FloorMounting.GetMountingBlocks(libLoadServ, ms);
                // блоки сторон фасадов - Фасады
                List <FacadeFrontBlock> facadeFrontBlocks = FacadeFrontBlock.GetFacadeFrontBlocks(ms, floors);

                // Создание фасадов
                foreach (var front in facadeFrontBlocks)
                {
                    FacadeMounting facade = new FacadeMounting(front);
                    facades.Add(facade);
                }

                // определение уровней этажей Storey
                defineFloorStoreys(facades);
                t.Commit();
            }
            return(facades);
        }
Пример #3
0
        public static MountingPanel DefinePanel(BlockReference blRef, Matrix3d transform, PanelLibraryLoadService libLoadServ = null,
                                                FloorMounting floor = null)
        {
            // как определить что это блок панели СБ?
            // По набору атрибутов: Покраска, МАРКА
            string mark;
            string paint;
            List <AttributeRefDetail> attrsDet;

            if (IsMountingPanel(blRef, out mark, out paint, out attrsDet, libLoadServ))
            {
                return(new MountingPanel(blRef, attrsDet, transform, mark, paint, floor));
            }
            return(null);
        }
Пример #4
0
        //public void DefYForUpperAndParapetStorey()
        //{
        //    // определение уровней для Ч и П этажей в этом фасаде
        //    // уровеь последнего этажа в фасаде
        //    var floorsNumberType = Floors.Where(f => f.Storey.Type == EnumStorey.Number);
        //    double yLastNumberFloor = 0;
        //    if (floorsNumberType.Count() > 0)
        //    {
        //        yLastNumberFloor = floorsNumberType.Max(f => f.Storey.Y);
        //    }
        //    // чердак
        //    // double yParapet = 0;
        //    var floorUpper = Floors.Where(f => f.Storey.Type == EnumStorey.Upper).FirstOrDefault();
        //    if (floorUpper != null)
        //    {
        //        //var maxHeightPanel = floorUpper.PanelsSbInFront.Where(p => p.PanelAkr != null)?.Max(p => p.PanelAkr?.HeightPanelByTile);
        //        //if (maxHeightPanel.HasValue)
        //        //{
        //            floorUpper.Storey.Y = yLastNumberFloor + Settings.Default.FacadeFloorHeight;
        //            //yParapet = floorUpper.Storey.Y + maxHeightPanel.Value;
        //            //floorUpper.Height = maxHeightPanel.Value;
        //        //}
        //    }
        //    var floorParapet = Floors.Where(f => f.Storey.Type == EnumStorey.Parapet).FirstOrDefault();
        //    if (floorParapet != null)
        //    {
        //        yParapet = yParapet != 0 ? yParapet : yLastNumberFloor + Settings.Default.FacadeFloorHeight;
        //        floorParapet.Storey.Y = yParapet;
        //        var maxHeightPanel = floorParapet.PanelsSbInFront.Where(p => p.PanelAkr != null)?.Max(p => p.PanelAkr?.HeightPanelByTile);
        //        if (maxHeightPanel.HasValue)
        //        {
        //            floorParapet.Height = maxHeightPanel.Value;
        //        }
        //    }
        //}

        private static void captionFloor(double x, double yFloor, FloorMounting floor, BlockTableRecord ms, Transaction t)
        {
            // Подпись номера этажа
            DBText textFloor = new DBText();

            textFloor.SetDatabaseDefaults(ms.Database);
            textFloor.Annotative = AnnotativeStates.False;
            textFloor.Height     = Settings.Default.FacadeCaptionFloorTextHeight;// 250;// FacadeCaptionFloorTextHeight
            textFloor.TextString = floor.Storey.ToString();
            var height = floor.Storey.Height != 0? floor.Storey.Height: 2000;

            textFloor.Position = new Point3d(x - Settings.Default.FacadeCaptionFloorIndent, yFloor + (height * 0.5), 0);
            ms.AppendEntity(textFloor);
            t.AddNewlyCreatedDBObject(textFloor, true);
        }
Пример #5
0
        private void AddPanels(FloorMounting floor)
        {
            // найти блоки панелей-СБ входящих внутрь границ блока стороны фасада
            var panels = new List <MountingPanel>();

            foreach (var panelSb in floor.RemainingPanels)
            {
                if (Extents.IsPointInBounds(panelSb.ExtTransToModel.MinPoint) &&
                    Extents.IsPointInBounds(panelSb.ExtTransToModel.MaxPoint))
                {
                    panels.Add(panelSb);
                }
            }
            Panels.AddRange(panels);
            floor.RemainingPanels.RemoveAll(p => panels.Contains(p));
        }
Пример #6
0
        public static List <MountingPanel> GetPanels(BlockTableRecord btr, Point3d ptBase, Matrix3d transform,
                                                     PanelLibraryLoadService libLoadServ, FloorMounting floor)
        {
            // Поиск всех панелей СБ в определении блока
            var panelsSB = new List <MountingPanel>();

            foreach (ObjectId idEnt in btr)
            {
                if (idEnt.IsValidEx() && idEnt.ObjectClass.Name == "AcDbBlockReference")
                {
                    using (var blRefPanelSB = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference)
                    {
                        var panelSb = DefinePanel(blRefPanelSB, transform, libLoadServ, floor);
                        if (panelSb != null)
                        {
                            panelsSB.Add(panelSb);
                        }
                    }
                }
            }
            if (panelsSB.Count == 0)
            {
                // Ошибка - в блоке монтажного плана, не найдена ни одна панель
                Inspector.AddError($"В блоке монтажного плана {btr.Name} не найдена ни одна панель.",
                                   new Extents3d(ptBase, new Point3d(ptBase.X + 10000, ptBase.Y + 10000, 0)),
                                   btr.Id, icon: System.Drawing.SystemIcons.Error);
            }
            return(panelsSB);
        }