Пример #1
0
        public void CreateBtrPanelFromBase(int i, string[] marks)
        {
            // Тест создания определения блока панели по описанию в xml базе.
             PanelBase panelBase;

             string testFile = @"c:\temp\test\АКР\Base\Tests\CreateBlockPanelTest\TestCreatePanels.dwg";
             //File.Copy(@"c:\Autodesk\AutoCAD\Pik\Settings\Template\АР\АР.dwt", testFile, true);

             using (var db = new Database(false, true))
             {
            db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
            db.CloseInput(true);
            using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
            {
               baseService.ClearPanelsAkrFromDrawing(db);
               baseService.InitToCreationPanels(db);

               Point3d pt = Point3d.Origin;
               List<ObjectId> idsBtrPanels = new List<ObjectId>();

               // Создание определениц блоков панелей
               foreach (var mark in marks)
               {
                  Panel panelXml = baseService.GetPanelXml(mark);
                  panelBase = new PanelBase(panelXml, baseService);
                  panelBase.CreateBlock();

                  if (!panelBase.IdBtrPanel.IsNull)
                  {
                     idsBtrPanels.Add(panelBase.IdBtrPanel);
                  }
               }

               // Вставка вхождениц блоков панелей в модель
               using (var t = db.TransactionManager.StartTransaction())
               {
                  foreach (var idBtrPanel in idsBtrPanels)
                  {
                     var blRefPanel = new BlockReference(pt, idBtrPanel);
                     var ms = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                     ms.AppendEntity(blRefPanel);
                     t.AddNewlyCreatedDBObject(blRefPanel, true);
                     pt = new Point3d(0, pt.Y + 10000, 0);
                  }
                  t.Commit();
               }
            }
            db.SaveAs(testFile, DwgVersion.Current);
             }
        }
Пример #2
0
        private Dictionary<string, PanelBase> matchingPlans(List<FacadeMounting> facadesMounting, List<FloorArchitect> floorsAr)
        {
            // Определение окон в монтажных планах по архитектурным планам
             var panelsBase = new Dictionary<string, PanelBase>(); // string - ключ - маркаСБ + Марки Окон по порядку.

             // Список монтажных планов - уникальных
             var floorsMount = facadesMounting.SelectMany(f => f.Floors);
             foreach (var floorMount in floorsMount)
             {
            // Найти соотв арх план
            var floorAr = floorsAr.Find(f =>
                              f.Section == floorMount.Section &&
                              f.IsEqualMountingStorey(floorMount.Storey)
                           );

            //Test Добавить текст имени плана Ар в блок монтажного плана
            #if Test
            {
               if (floorAr != null)
               {
                  using (var btrMount = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord)
                  {
                     DBText textFindPlanAr = new DBText();
                     textFindPlanAr.TextString = floorAr.BlName;
                     btrMount.AppendEntity(textFindPlanAr);
                     //btrMount.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(textFindPlanAr, true);
                  }
               }
            }
            #endif

            if (floorAr == null)
            {
               Inspector.AddError($"Не найден блок архитектурного плана для соответствующего монтажного плана '{floorMount.BlRefName}'",
                  floorMount.IdBlRefMounting,
                  icon: System.Drawing.SystemIcons.Error);
            }
            else if (floorAr.Windows.Count == 0)
            {
               Inspector.AddError($"Не найдено ни одного окна в блоке архитектурного плана '{floorMount.BlRefName}'.",
                  floorAr.IdBlRef,
                  icon: System.Drawing.SystemIcons.Error);
            }

            foreach (var panelMount in floorMount.PanelsSbInFront)
            {
               Panel panelXml = GetPanelXml(panelMount.MarkSb, panelMount);
               if (panelXml == null) continue;

               PanelBase panelBase = new PanelBase(panelXml, this, panelMount);

               // Определение окон в панели по арх плану
               if (panelXml.windows?.window != null)
               {
                  foreach (var window in panelXml.windows.window)
                  {
                     if (floorAr == null || floorAr.Windows.Count==0)
                     {
                        break;
                     }

                     // Точка окна внутри панели по XML описанию
                     Point3d ptOpeningCenter = new Point3d(window.posi.X + window.width * 0.5, 0, 0);
                     // Точка окна внутри монтажного плана
                     Point3d ptWindInModel = panelMount.ExtTransToModel.MinPoint.Add(ptOpeningCenter.GetAsVector());
                     Point3d ptWindInArPlan = ptWindInModel.TransformBy(floorMount.Transform.Inverse());

                     var windowKey = floorAr?.Windows.GroupBy(w => w.Key.DistanceTo(ptWindInArPlan))?.MinBy(w => w.Key);
                     if (windowKey == null || windowKey.Key > 600)
                     {
                        Inspector.AddError(
                           $"Не найдено соответствующее окно в архитектурном плане. Блок монтажной панели {panelMount.MarkSb}",
                           panelMount.ExtTransToModel, panelMount.IdBlRef, icon: System.Drawing.SystemIcons.Error);
                        continue;
                     }
                     panelBase.WindowsBaseCenters.Add(ptOpeningCenter, windowKey.First().Value);

                     // Test Добавление точек окна в блоке монтажки
            #if Test
                     {
                        using (var btrMountPlan = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord)
                        {
                           using (DBPoint ptWinInPlan = new DBPoint(ptWindInArPlan))
                           {
                              ptWinInPlan.ColorIndex = 2;
                              btrMountPlan.AppendEntity(ptWinInPlan);
                              //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInPlan, true);
                           }

                           using (DBText dbText = new DBText())
                           {
                              dbText.Position = ptWindInArPlan;
                              dbText.TextString = windowKey.First().Value;
                              btrMountPlan.AppendEntity(dbText);
                              //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(dbText, true);
                           }
                        }
                        using (var btrArPlan = floorAr.IdBtr.Open(OpenMode.ForWrite) as BlockTableRecord)
                        {
                           using (DBPoint ptWinInArPlan = new DBPoint(ptWindInArPlan))
                           {
                              ptWinInArPlan.ColorIndex = 1;
                              btrArPlan.AppendEntity(ptWinInArPlan);
                              //btrArPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInArPlan, true);
                           }
                        }
                     }
            #endif
                  }
               }
               // Уникальный ключ панели - МаркаСБ + Марки окон
               string key = panelBase.MarkWithoutElectric;
               if (panelBase.WindowsBaseCenters.Count > 0)
               {
                  string windowMarks = string.Join(";", panelBase.WindowsBaseCenters.Values);
                  key += windowMarks;
               }
               PanelBase panelBaseUniq;
               if (!panelsBase.TryGetValue(key, out panelBaseUniq))
               {
                  panelsBase.Add(key, panelBase);
                  panelBaseUniq = panelBase;
               }
               panelMount.PanelBase = panelBaseUniq;
            }
             }
             return panelsBase;
        }
Пример #3
0
 public DimensionFacade(BlockTableRecord btrPanel, Transaction t, PanelBase panel) : base(btrPanel, t, panel)
 {
 }
Пример #4
0
 public DimensionFacade(BlockTableRecord btrPanel, Transaction t, PanelBase panel)
     : base(btrPanel, t, panel)
 {
 }
Пример #5
0
 public DimensionAbstract(BlockTableRecord btrPanel, Transaction t, PanelBase panel)
 {
     this.btrPanel = btrPanel;
      this.t = t;
      this.panelBase = panel;
 }
Пример #6
0
 public DimensionAbstract(BlockTableRecord btrPanel, Transaction t, PanelBase panel)
 {
     this.btrPanel  = btrPanel;
     this.t         = t;
     this.panelBase = panel;
 }
Пример #7
0
        private Dictionary <string, PanelBase> matchingPlans(List <FacadeMounting> facadesMounting, List <FloorArchitect> floorsAr)
        {
            // Определение окон в монтажных планах по архитектурным планам
            var panelsBase = new Dictionary <string, PanelBase>(); // string - ключ - маркаСБ + Марки Окон по порядку.

            // Список монтажных планов - уникальных
            var floorsMount = facadesMounting.SelectMany(f => f.Floors);

            foreach (var floorMount in floorsMount)
            {
                // Найти соотв арх план
                var floorAr = floorsAr.Find(f =>
                                            f.Section == floorMount.Section &&
                                            f.IsEqualMountingStorey(floorMount.Storey)
                                            );

                //Test Добавить текст имени плана Ар в блок монтажного плана
#if Test
                {
                    if (floorAr != null)
                    {
                        using (var btrMount = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord)
                        {
                            DBText textFindPlanAr = new DBText();
                            textFindPlanAr.TextString = floorAr.BlName;
                            btrMount.AppendEntity(textFindPlanAr);
                            //btrMount.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(textFindPlanAr, true);
                        }
                    }
                }
#endif

                if (floorAr == null)
                {
                    Inspector.AddError($"Не найден блок архитектурного плана для соответствующего монтажного плана '{floorMount.BlRefName}'",
                                       floorMount.IdBlRefMounting,
                                       icon: System.Drawing.SystemIcons.Error);
                }
                else if (floorAr.Windows.Count == 0)
                {
                    Inspector.AddError($"Не найдено ни одного окна в блоке архитектурного плана '{floorMount.BlRefName}'.",
                                       floorAr.IdBlRef,
                                       icon: System.Drawing.SystemIcons.Error);
                }

                foreach (var panelMount in floorMount.PanelsSbInFront)
                {
                    Panel panelXml = GetPanelXml(panelMount.MarkSb, panelMount);
                    if (panelXml == null)
                    {
                        continue;
                    }

                    PanelBase panelBase = new PanelBase(panelXml, this, panelMount);

                    // Определение окон в панели по арх плану
                    if (panelXml.windows?.window != null)
                    {
                        foreach (var window in panelXml.windows.window)
                        {
                            if (floorAr == null || floorAr.Windows.Count == 0)
                            {
                                break;
                            }

                            // Точка окна внутри панели по XML описанию
                            Point3d ptOpeningCenter = new Point3d(window.posi.X + window.width * 0.5, 0, 0);
                            // Точка окна внутри монтажного плана
                            Point3d ptWindInModel  = panelMount.ExtTransToModel.MinPoint.Add(ptOpeningCenter.GetAsVector());
                            Point3d ptWindInArPlan = ptWindInModel.TransformBy(floorMount.Transform.Inverse());

                            var windowKey = floorAr?.Windows.GroupBy(w => w.Key.DistanceTo(ptWindInArPlan))?.MinBy(w => w.Key);
                            if (windowKey == null || windowKey.Key > 600)
                            {
                                Inspector.AddError(
                                    $"Не найдено соответствующее окно в архитектурном плане. Блок монтажной панели {panelMount.MarkSb}",
                                    panelMount.ExtTransToModel, panelMount.IdBlRef, icon: System.Drawing.SystemIcons.Error);
                                continue;
                            }
                            panelBase.WindowsBaseCenters.Add(ptOpeningCenter, windowKey.First().Value);

                            // Test Добавление точек окна в блоке монтажки
#if Test
                            {
                                using (var btrMountPlan = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord)
                                {
                                    using (DBPoint ptWinInPlan = new DBPoint(ptWindInArPlan))
                                    {
                                        ptWinInPlan.ColorIndex = 2;
                                        btrMountPlan.AppendEntity(ptWinInPlan);
                                        //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInPlan, true);
                                    }

                                    using (DBText dbText = new DBText())
                                    {
                                        dbText.Position   = ptWindInArPlan;
                                        dbText.TextString = windowKey.First().Value;
                                        btrMountPlan.AppendEntity(dbText);
                                        //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(dbText, true);
                                    }
                                }
                                using (var btrArPlan = floorAr.IdBtr.Open(OpenMode.ForWrite) as BlockTableRecord)
                                {
                                    using (DBPoint ptWinInArPlan = new DBPoint(ptWindInArPlan))
                                    {
                                        ptWinInArPlan.ColorIndex = 1;
                                        btrArPlan.AppendEntity(ptWinInArPlan);
                                        //btrArPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInArPlan, true);
                                    }
                                }
                            }
#endif
                        }
                    }
                    // Уникальный ключ панели - МаркаСБ + Марки окон
                    string key = panelBase.MarkWithoutElectric;
                    if (panelBase.WindowsBaseCenters.Count > 0)
                    {
                        string windowMarks = string.Join(";", panelBase.WindowsBaseCenters.Values);
                        key += windowMarks;
                    }
                    PanelBase panelBaseUniq;
                    if (!panelsBase.TryGetValue(key, out panelBaseUniq))
                    {
                        panelsBase.Add(key, panelBase);
                        panelBaseUniq = panelBase;
                    }
                    panelMount.PanelBase = panelBaseUniq;
                }
            }
            return(panelsBase);
        }