예제 #1
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);
        }
예제 #2
0
        // мин значение х среди всех границ блоков панелей внктри этажа

        /// <summary>
        /// Поиск всех блоков монтажек в модели в WorkingDatabase
        /// Запускается транзакция
        /// </summary>
        public static List <FloorMounting> GetMountingBlocks(PanelLibraryLoadService libLoadServ, BlockTableRecord ms)
        {
            List <FloorMounting> floors = new List <FloorMounting>();

            // Найти блоки монтажек пересекающиеся с блоками обозначения стороны фасада
            //// Поиск панелейСБ в Модели и добавление в общий список панелей СБ.
            //libLoadServ.AllPanelsSB.AddRange(PanelSB.GetPanels(ms.Id, Point3d.Origin, Matrix3d.Identity));
            foreach (ObjectId idEnt in ms)
            {
                if (!idEnt.IsValidEx())
                {
                    continue;
                }
                var blRefMounting = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference;
                if (blRefMounting == null)
                {
                    continue;
                }

                // Если это блок монтажного плана - имя блока начинается с АКР_Монтажка_
                if (blRefMounting.Name.StartsWith(Settings.Default.BlockPlaneMountingPrefixName, StringComparison.CurrentCultureIgnoreCase))
                {
                    FloorMounting floor = new FloorMounting(blRefMounting, libLoadServ);
                    floor.GetAllPanels();
                    floors.Add(floor);
                }
            }
            return(floors);
        }
예제 #3
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);
        }
예제 #4
0
        public FloorMounting(BlockReference blRefMounting, PanelLibraryLoadService libLoadServ)
        {
            IdBtrMounting   = blRefMounting.BlockTableRecord;
            PosBlMounting   = blRefMounting.Position;
            LibLoadServ     = libLoadServ;
            IdBlRefMounting = blRefMounting.Id;
            BlRefName       = blRefMounting.Name;
            Transform       = blRefMounting.BlockTransform;
            Section         = DefinePlanSection(blRefMounting);

            try
            {
                Extents = blRefMounting.GeometricExtents;
            }
            catch
            {
                string err = $"Ошибка при определении границ монтажного плана - {BlRefName}";
                Inspector.AddError(err, IdBlRefMounting, System.Drawing.SystemIcons.Error);
                throw new Exception(err);
            }

            var ext = Extents;

            ext.TransformBy(blRefMounting.BlockTransform.Inverse());
            var h = Extents.MaxPoint.Y - Extents.MinPoint.Y;
            var l = Extents.MaxPoint.X - Extents.MinPoint.X;

            PlanExtentsHeight = ext.MaxPoint.Y - ext.MinPoint.Y;
            PlanExtentsLength = ext.MaxPoint.X - ext.MinPoint.X;

            RectangleRTree = new Rectangle(Extents.MinPoint.X, Extents.MinPoint.Y, Extents.MaxPoint.X, Extents.MaxPoint.Y, 0, 0);

            //defFloorNameAndNumber(blRefMounting);

            //// добавление блоков паненлей в общий список панелей СБ
            //libLoadServ.AllPanelsSB.AddRange(_allPanelsSbInFloor);
        }
예제 #5
0
 public static bool IsMountingPanel(BlockReference blRefPanelSB,
                                    out string mark, out string paint, out List <AttributeRefDetail> attrsDet, PanelLibraryLoadService libLoadServ = null)
 {
     mark     = null;
     paint    = null;
     attrsDet = null;
     if (!blRefPanelSB.IsDynamicBlock && blRefPanelSB.AttributeCollection != null)
     {
         attrsDet = new List <AttributeRefDetail>();
         foreach (ObjectId idAtrRef in blRefPanelSB.AttributeCollection)
         {
             var atrRef = idAtrRef.GetObject(OpenMode.ForRead, false, true) as AttributeReference;
             // ПОКРАСКА
             if (string.Equals(atrRef.Tag, Settings.Default.AttributePanelSbPaint, StringComparison.CurrentCultureIgnoreCase))
             {
                 var atrDet = new AttributeRefDetail(atrRef);
                 attrsDet.Add(atrDet);
                 paint = atrRef.TextString.Trim();
                 // Если выполняется создание альбома и выключена опция проверки покраски, то стираем марку покраски из монтажной панели
                 if (libLoadServ?.Album != null && !libLoadServ.Album.StartOptions.CheckMarkPainting)
                 {
                     // Удаление старой марки покраски из блока монтажной панели
                     atrRef.UpgradeOpen();
                     atrRef.TextString = string.Empty;
                 }
             }
             // МАРКА
             else if (string.Equals(atrRef.Tag, Settings.Default.AttributePanelSbMark, StringComparison.CurrentCultureIgnoreCase))
             {
                 var atrDet = new AttributeRefDetail(atrRef);
                 attrsDet.Add(atrDet);
                 mark = atrRef.TextString.Trim();
             }
         }
         return(attrsDet.Count == 2);
     }
     return(false);
 }
예제 #6
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);
        }
예제 #7
0
        // Создание альбома панелей
        public void CreateAlbum()
        {
            ChangeJob.ChangeJobService.Init();

            // Пока не нужны XML панели для создания альбома.
            //if (StartOptions.NewMode)
            //{
            //   BasePanelsService = new BaseService();
            //   BasePanelsService.ReadPanelsFromBase();
            //}

            // Определение включен ли артикул подписи в плитке (по состоянию замороженности слоя - Артикул пдлитки)
            IsTileArticleOn = GetTileArticleState();

            // Подсчет общего кол плитки на альбом
            TotalTilesCalc = TileCalc.CalcAlbum(this);

            // Создание папки альбома панелей
            _sheetsSet = new SheetsSet(this);
            _sheetsSet.CreateAlbum();

            // Заполнение атрибутов марок покраски в блоках монтажек
            try
            {
                var libService = new PanelLibrary.PanelLibraryLoadService();
                libService.FillMarkPainting(this);
                this.LibLoadService = libService;
            }
            catch (System.Exception ex)
            {
                string errMsg = "Ошибка заполнения марок покраски в монтажки - libService.FillMarkPainting(_album);";
                this.Doc.Editor.WriteMessage($"\n{errMsg} - {ex.Message}");
                Logger.Log.Error(ex, errMsg);
            }

            //// Проверка новых панелей, которых нет в библиотеке
            //try
            //{
            //   PanelLibrarySaveService.CheckNewPanels();
            //}
            //catch (Exception ex)
            //{
            //   Logger.Log.Error(ex, "Не удалось проверить есть ли новые панели в чертеже фасада, которых нет в библиотеке.");
            //}

            // Если есть панели с изменениями - создание задания.
            try
            {
                ChangeJob.ChangeJobService.CreateJob(this);
            }
            catch (System.Exception ex)
            {
                Inspector.AddError($"Ошибка при создании Задания на Изменение марок покраски - {ex.Message}");
            }

            // Еспорт списка панелей в ексель.
            try
            {
                ExportToExcel.Export(this);
            }
            catch (System.Exception ex)
            {
                Logger.Log.Error(ex, "Не удалось экспортировать панели в Excel.");
            }

            // вставка итоговой таблицы по плитке
            try
            {
                TotalTileTable tableTileTotal = new TotalTileTable(this);
                tableTileTotal.InsertTableTotalTile();
            }
            catch (System.Exception ex)
            {
                Logger.Log.Error(ex, "Не удалось вставить итоговую таблицу плитки на альбом.");
            }
        }
예제 #8
0
        // Создание альбома панелей
        public void CreateAlbum()
        {
            ChangeJob.ChangeJobService.Init();

            // Пока не нужны XML панели для создания альбома.
            //if (StartOptions.NewMode)
            //{
            //   BasePanelsService = new BaseService();
            //   BasePanelsService.ReadPanelsFromBase();
            //}

            // Определение включен ли артикул подписи в плитке (по состоянию замороженности слоя - Артикул пдлитки)
            //IsTileArticleOn = GetTileArticleState();

            // Подсчет общего кол плитки на альбом
            TotalTilesCalc = TileCalc.CalcAlbum(this);

            // Создание папки альбома панелей
            _sheetsSet = new SheetsSet(this);
            _sheetsSet.CreateAlbum();

            // Заполнение атрибутов марок покраски в блоках монтажек
            try
            {
                var libService = new PanelLibrary.PanelLibraryLoadService();
                libService.FillMarkPainting(this);
                this.LibLoadService = libService;
            }
            catch (System.Exception ex)
            {
                string errMsg = "Ошибка заполнения марок покраски в монтажки - libService.FillMarkPainting(_album);";
                this.Doc.Editor.WriteMessage($"\n{errMsg} - {ex.Message}");
                Logger.Log.Error(ex, errMsg);
            }

            //// Проверка новых панелей, которых нет в библиотеке
            //try
            //{
            //   PanelLibrarySaveService.CheckNewPanels();
            //}
            //catch (Exception ex)
            //{
            //   Logger.Log.Error(ex, "Не удалось проверить есть ли новые панели в чертеже фасада, которых нет в библиотеке.");
            //}

            // Если есть панели с изменениями - создание задания.
            try
            {
                ChangeJob.ChangeJobService.CreateJob(this);
            }
            catch (System.Exception ex)
            {
                Inspector.AddError($"Ошибка при создании Задания на Изменение марок покраски - {ex.Message}");
            }

            // Еспорт списка панелей в ексель.
            try
            {
                ExportToExcel.Export(this);
            }
            catch (System.Exception ex)
            {
                Logger.Log.Error(ex, "Не удалось экспортировать панели в Excel.");
            }

            // вставка итоговой таблицы по плитке
            try
            {
                TotalTileTable tableTileTotal = new TotalTileTable(this);
                tableTileTotal.InsertTableTotalTile();
            }
            catch (System.Exception ex)
            {
                Logger.Log.Error(ex, "Не удалось вставить итоговую таблицу плитки на альбом.");
            }
        }
예제 #9
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;
        }
예제 #10
0
 public void AKR_LoadPanelsFromLibrary()
 {
     CommandStart.Start(doc =>
     {
         using (var DocLock = doc.LockDocument())
         {
             PanelLibraryLoadService loadPanelsService = new PanelLibraryLoadService();
             loadPanelsService.LoadPanels();
         }
     });
 }