public static void GenerateNCS() { doc = Application.DocumentManager.Add(string.Empty); using (doc.LockDocument()) { ed = doc.Editor; db = doc.Database; IdTextStylePik = db.GetTextStylePIK(); using (var t = db.TransactionManager.StartTransaction()) { // Форма стартовых настроек Options.Show(); // Чтение палитры NCS var colorBookNcs = ColorBook.ReadFromFile(Options.Instance.NCSFile); // Запрос точки начала генерации палитр цветов var ptStart = ed.GetPointWCS("Точка вставки"); // Расположение цветов в модели var cs = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord; PlacementColors(cs, colorBookNcs, ptStart); t.Commit(); } } }
public static ColorBook ReadFromFile([NotNull] string NcsFile) { var colorBookNcs = new ColorBook("NCS"); using (var exlPack = new ExcelPackage(new FileInfo(NcsFile))) { var wsNcs = exlPack.Workbook.Worksheets["NCS"]; var row = 1; do { row++; var nameNcs = wsNcs.Cells[row, 1].Text; if (string.IsNullOrEmpty(nameNcs)) { break; } var r = GetByte(wsNcs.Cells[row, 2].Text); if (r.Failure) { Inspector.AddError($"Ошибка в ячейке [{row},2] - {r.Error}"); continue; } var g = GetByte(wsNcs.Cells[row, 3].Text); if (g.Failure) { Inspector.AddError($"Ошибка в ячейке [{row},2] - {g.Error}"); continue; } var b = GetByte(wsNcs.Cells[row, 4].Text); if (b.Failure) { Inspector.AddError($"Ошибка в ячейке [{row},2] - {b.Error}"); continue; } var colorItem = new ColorItem(nameNcs, r.Value, g.Value, b.Value); colorBookNcs.Colors.Add(colorItem); } while (true); } return(colorBookNcs); }
private static void PlacementColors(BlockTableRecord cs, [NotNull] ColorBook colorBookNcs, Point3d ptStart) { var t = db.TransactionManager.TopTransaction; double widthLayout = Options.Instance.Width; double heightLayout = Options.Instance.Height; var widthCells = widthLayout - widthLayout * 0.1; var heightCells = heightLayout - heightLayout * 0.1; var columns = Options.Instance.Columns; var rows = Options.Instance.Rows; // Определение длины и высоты для каждой ячейки цвета CellWidth = widthCells / columns; CellHeight = heightCells / rows; Margin = CellWidth * 0.1; TextHeight = Convert.ToInt32(CellWidth * 0.09); var ptLayout = ptStart; var progress = new ProgressMeter(); progress.SetLimit(colorBookNcs.Colors.Count); progress.Start("Расстановка цветов..."); // Кол листов double cellsCount = columns * rows; var layCount = Convert.ToInt32(Math.Ceiling(colorBookNcs.Colors.Count / cellsCount)); var index = 0; for (var l = 1; l < layCount + 1; l++) { // создание рамки листа AddLayout(ptLayout, l, widthLayout, heightLayout, cs, t); var ptCellFirst = new Point2d(ptLayout.X + (widthLayout - widthCells) * 0.5, ptLayout.Y - (heightLayout - heightCells) * 0.5); // Заполнение ячейками цветов for (var r = 0; r < rows; r++) { var isBreak = false; for (var c = 0; c < columns; c++) { index++; if (index == colorBookNcs.Colors.Count) { isBreak = true; break; } var colorItem = colorBookNcs.Colors[index]; var ptCell = new Point2d(ptCellFirst.X + c * CellWidth, ptCellFirst.Y - r * CellHeight); colorItem.Create(ptCell, cs, t); progress.MeterProgress(); } if (isBreak) { break; } } ptLayout = new Point3d(ptLayout.X, ptLayout.Y + heightLayout, 0); } progress.Stop(); }