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); }
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)); } } }