Пример #1
0
 public ParkingTable(ParkingService service)
 {
     this.service = service;
     db           = service.Db;
     this.data    = service.Data;
 }
Пример #2
0
        /// <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();
                }
            }
        }