Ejemplo n.º 1
0
        private void loadBtr()
        {
            List <string> blNamesToCopy = new List <string> {
                Settings.Default.BlockTileName, Settings.Default.BlockWindowName,
                Settings.Default.BlockViewName, Settings.Default.BlockCrossName,
                Settings.Default.BlockWindowHorSection, Settings.Default.BlockArrow
            };

            // Поиск блоков в файле фасада
            BlocksInFacade = findBlocksInFacade(new List <string> {
                Settings.Default.BlockProfileTile
            });

            // Копирование блоков
            _blocks = defineBlockFromTemplate(blNamesToCopy);

            // Блок Плитки
            IdBtrTile = GetIdBtrLoaded(Settings.Default.BlockTileName);
            // Блок Окна
            IdBtrWindow = GetIdBtrLoaded(Settings.Default.BlockWindowName);
            WindowMarks = BlockWindow.GetMarks(IdBtrWindow);
            // Блок Вида
            IdBtrView = GetIdBtrLoaded(Settings.Default.BlockViewName);
            // Атрибут блока вида
            IdAttrDefView = getAttrDef(IdBtrView, "ВИД");
            // Блок Разреза
            IdBtrCross = GetIdBtrLoaded(Settings.Default.BlockCrossName);
            // Атрибут блока разреза
            IdAttrDefCross = getAttrDef(IdBtrCross, "НОМЕР");
            // Блок окна для горизонтального сечения
            IdBtrWindowHorSection = GetIdBtrLoaded(Settings.Default.BlockWindowHorSection);
            // Блок стрелки
            IdBtrArrow = GetIdBtrLoaded(Settings.Default.BlockArrow);
        }
Ejemplo n.º 2
0
        private void addWindows(BlockTableRecord btrPanel, Transaction t)
        {
            // все окна и балеоны в панели
            var windows   = Panel.windows?.window?.Select(w => new { posi = w.posi, width = w.width, height = w.height });
            var balconys  = Panel.balconys?.balcony?.Select(b => new { posi = b.posi, width = b.width, height = b.height });
            var apertures = balconys == null? windows: windows?.Union(balconys) ?? balconys;

            if (apertures != null)
            {
                foreach (var item in apertures)
                {
                    // контур окон
                    Polyline plWindow = new Polyline();
                    plWindow.LayerId = Service.Env.IdLayerContourPanel;
                    Point2d ptMinWindow = new Point2d(item.posi.X, item.posi.Y);
                    plWindow.AddVertexAt(0, ptMinWindow, 0, 0, 0);
                    plWindow.AddVertexAt(0, new Point2d(ptMinWindow.X, ptMinWindow.Y + item.height), 0, 0, 0);
                    Point2d ptMaxWindow = new Point2d(ptMinWindow.X + item.width, ptMinWindow.Y + item.height);
                    plWindow.AddVertexAt(0, ptMaxWindow, 0, 0, 0);
                    plWindow.AddVertexAt(0, new Point2d(ptMinWindow.X + item.width, ptMinWindow.Y), 0, 0, 0);
                    plWindow.Closed = true;

                    btrPanel.AppendEntity(plWindow);
                    t.AddNewlyCreatedDBObject(plWindow, true);

                    // добавление точек для верхнего образмеривания.
                    PtsForTopDim.Add(ptMinWindow.X);
                    PtsForTopDim.Add(ptMaxWindow.X);

                    Openings.Add(new Extents3d(ptMinWindow.Convert3d(), ptMaxWindow.Convert3d()));

                    // Вставка окон
                    if (WindowsBaseCenters.Count > 0)
                    {
                        var xCenter    = item.posi.X + item.width * 0.5;
                        var winMarkMin = WindowsBaseCenters.Where(w => Math.Abs(w.Key.X - xCenter) < 600);
                        if (winMarkMin.Count() > 0)
                        {
                            var winMark = winMarkMin.MinBy(g => (g.Key.X - xCenter));
                            if (string.IsNullOrWhiteSpace(winMark.Value))
                            {
                                continue;
                            }

                            // Точка вставки блока окна
                            Point3d ptWin = new Point3d(item.posi.X, item.posi.Y, 0);
                            // Вставка блока окна
                            if (!Service.Env.IdBtrWindow.IsNull)
                            {
                                BlockReference blRefWin = new BlockReference(ptWin, Service.Env.IdBtrWindow);
                                blRefWin.LayerId = Service.Env.IdLayerWindow;
                                btrPanel.AppendEntity(blRefWin);
                                t.AddNewlyCreatedDBObject(blRefWin, true);

                                var resSetDyn = BlockWindow.SetDynBlWinMark(blRefWin, winMark.Value);
                                if (!resSetDyn)
                                {
                                    // Добавление текста марки окна
                                    DBText dbTextWin = new DBText();
                                    dbTextWin.Position   = ptWin;
                                    dbTextWin.LayerId    = Service.Env.IdLayerWindow;
                                    dbTextWin.TextString = winMark.Value;
                                    dbTextWin.Height     = 180;
                                    btrPanel.AppendEntity(dbTextWin);
                                    t.AddNewlyCreatedDBObject(dbTextWin, true);
                                }
                            }
#if Test
                            // Test
                            else
                            {
                                // Добавление текста марки окна
                                DBText dbTextWin = new DBText();
                                dbTextWin.Position   = ptWin;
                                dbTextWin.LayerId    = Service.Env.IdLayerWindow;
                                dbTextWin.TextString = winMark.Value;
                                dbTextWin.Height     = 180;
                                btrPanel.AppendEntity(dbTextWin);
                                t.AddNewlyCreatedDBObject(dbTextWin, true);
                            }
#endif
                        }
                    }
                    // Сортировка окон слева-направо
                    Openings.Sort((w1, w2) => w1.MinPoint.X.CompareTo(w2.MinPoint.X));
                }
            }
        }