public ParkingTable(ParkingService service) { this.service = service; db = service.Db; this.data = service.Data; }
/// <summary> /// Расчет машиномест выбранных блоков линейных парковок /// </summary> public void CalcAndTable() { Doc = Application.DocumentManager.MdiActiveDocument; Db = Doc.Database; Ed = Doc.Editor; var parkings = Select(); if (parkings.Count == 0) { Ed.WriteMessage($"\nБлоки парковок не найдены."); return; } // Расчет машиномест для каждой парковки foreach (var parking in parkings) { parking.Calc(); } // Суммирование парковок Data = new ParkingData(parkings); Data.Calc(); if (Data.Places == 0 && Data.InvalidPlaces == 0) { Ed.WriteMessage("\nНет парковочных мест"); return; } // Вставка таблицы if (IsTableOrText) { ParkingTable table = new ParkingTable(this); table.CreateTable(); } else { using (var t = Db.TransactionManager.StartTransaction()) { // Вставка текста DBText text = new DBText(); text.SetDatabaseDefaults(); text.Height = 2.5 * AcadLib.Scale.ScaleHelper.GetCurrentAnnoScale(Db); // стиль текста text.TextStyleId = Db.GetTextStylePIK(); string mm = string.Empty; if (Data.Places != 0) { mm = $"{Data.Places} м/м "; } if (Data.InvalidPlaces != 0) { mm += $"({Data.InvalidPlaces} ММГН)"; } text.TextString = mm; Point3d ptText = Point3d.Origin; text.Position = ptText; text.LayerId = ParkingHelper.LayerTextId; var ms = Db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord; ms.AppendEntity(text); t.AddNewlyCreatedDBObject(text, true); PromptSelectionResult prs = Ed.SelectLast(); if (prs.Status == PromptStatus.OK) { PromptPointResult ppr = Ed.Drag(prs.Value, "\nТочка вставки текста:", (Point3d pt, ref Matrix3d mat) => { pt = pt.TransformBy(Ed.CurrentUserCoordinateSystem); if (ptText == pt) { return(SamplerStatus.NoChange); } mat = Matrix3d.Displacement(ptText.GetVectorTo(pt)); text.TransformBy(mat); ptText = pt; return(SamplerStatus.OK); }); if (ppr.Status != PromptStatus.OK) { text.Erase(); } } t.Commit(); } } }