コード例 #1
0
        public void _drawGridCartogramma2()
        {
            _step = _dataHost.Read("step", 20d);


            //Создаем представление (форму)
            CivilSurfaces.Views.SurfaceSelectorUserControl control = new CivilSurfaces.Views.SurfaceSelectorUserControl();
            var surfInfos = CivilSurfaces.SurfaceTools.GetAllVolumeSurfaces();

            control.comboBox_surfaces.Tag = surfInfos;
            foreach (var si in surfInfos)
            {
                int item = control.comboBox_surfaces.Items.Add(si);
            }

            if (surfInfos.Count > 0)
            {
                control.comboBox_surfaces.SelectedIndex = 0;
            }
            else
            {
                Tools.GetAcadEditor().WriteMessage($"\nВ проекте нет ни одной подходящей поверхности.");
                return;
            }

            /*Autodesk.AutoCAD.Windows.PaletteSet acWindow = new Autodesk.AutoCAD.Windows.PaletteSet($"{nameof(_drawGridCartogramma2)}");
             * var palette = acWindow.AddVisual("Картограмма", control, true);
             * acWindow.Visible = true;*/
            var mwin = Autodesk.AutoCAD.ApplicationServices.Application.MainWindow;

            System.Windows.Window acadWin = new CustomWindows.KeywordWindow(mwin, CustomWindows.AcadWindow.Dock.BottomRight);
            acadWin.Content    = control;
            acadWin.Visibility = System.Windows.Visibility.Visible;


            KeywordCollection keywords = new KeywordCollection();

            keywords.Add("Step", "Шаг", "Шаг сетки", true, true);
            //keywords.Add("View", "Список", "Список поверхностей", true, true);
            Func <PromptEntityResult, PromptStatus> promptStep = per =>
            {
                switch (per.StringResult)
                {
                case "Step":
                {
                    PromptDoubleOptions pdo = new PromptDoubleOptions("\nУкажите шаг сетки картограммы: ");
                    pdo.UseDefaultValue = true;
                    pdo.DefaultValue    = _step;
                    pdo.AllowZero       = false;
                    pdo.AllowNegative   = false;
                    pdo.AllowNone       = false;

                    var pdr = Tools.GetAcadEditor().GetDouble(pdo);
                    if (pdr.Status == PromptStatus.OK)
                    {
                        _step = pdr.Value;
                        _dataHost.Write("step", _step);
                    }
                    return(pdr.Status);
                }
                }

                return(PromptStatus.Error);
            };

            ObjectId surfaceId = ObjectId.Null;

            Autodesk.Civil.DatabaseServices.TinVolumeSurface surface;
            if (!ObjectCollector.TrySelectAllowedClassObject(out surface, keywords, promptStep))
            {
                surfaceId = ((KeyValuePair <string, ObjectId>)control.comboBox_surfaces.SelectedItem).Value;
            }
            else
            {
                surfaceId = surface.Id;
            }


            Polyline polygon = null;

            Tools.StartTransaction(() =>
            {
                surface = surfaceId.GetObjectForRead <CivilSurface>() as Autodesk.Civil.DatabaseServices.TinVolumeSurface;
                if (surface == null)
                {
                    return;
                }

                polygon = surface.ExtractBorders().ConvertToPolyline();
            });

            Matrix3d ucs = Tools.GetAcadEditor().CurrentUserCoordinateSystem;

            polygon.TransformBy(ucs);
            Extents3d bounds = polygon.Bounds.Value;

            Vector3d hVector = Matrix3d.Identity.CoordinateSystem3d.Xaxis.MultiplyBy((bounds.MaxPoint - bounds.MinPoint).X);
            Vector3d vVector = Matrix3d.Identity.CoordinateSystem3d.Yaxis.MultiplyBy((bounds.MaxPoint - bounds.MinPoint).Y);

            ObjectId btrId = ObjectId.Null;
            ObjectId brId  = ObjectId.Null;

            List <Entity>    rectgs        = null;
            CartogrammLabels labelsFactory = null;

            gride         = new SimpleGride(bounds.MinPoint, vVector, hVector, _step, _step);
            labelsFactory = new CartogrammLabels(gride);

            int rowsCount   = SimpleGride.CalculateCeilingCount(vVector, _step);
            int columnCount = SimpleGride.CalculateCeilingCount(hVector, _step);

            rectgs = new List <Entity>(rowsCount * columnCount);
            for (int r = 0; r < rowsCount; r++)
            {
                for (int c = 0; c < columnCount; c++)
                {
                    Polyline line = gride.CalculateRectagle(r, c, polygon, true);
                    if (line != null)
                    {
                        line.TransformBy(ucs.Inverse());
                        rectgs.Add(line);
                    }
                }
            }

            labelsFactory.CreateTeble(columnCount);

            Tools.StartTransaction(() =>
            {
                rectgs.AddRange(labelsFactory.CreateGridLabels(rectgs.Cast <Polyline>(), surface));
            });

            rectgs.AddRange(labelsFactory.Entities.Select(x => x.GetTransformedCopy(ucs.Inverse())));

            btrId = AcadBlocks.BlockTools.CreateBlockTableRecord("*U", bounds.MinPoint.TransformBy(ucs.Inverse()), rectgs.Cast <Entity>(), AnnotativeStates.NotApplicable, false);
            brId  = AcadBlocks.BlockTools.AppendBlockItem(bounds.MinPoint.TransformBy(ucs.Inverse()), btrId, null);

            acadWin.Visibility = System.Windows.Visibility.Hidden;
            acadWin.Close();
            //acWindow.Close();
        }
コード例 #2
0
        public void _drawGridCartogramma2()
        {
            _step = _dataHost.Read("step", 20d);
            KeywordCollection keywords = new KeywordCollection();

            keywords.Add("Step", "Шаг", "Шаг сетки", true, true);
            keywords.Add("View", "Список", "Список поверхностей", true, true);
            Func <PromptEntityResult, PromptStatus> promptStep = per =>
            {
                switch (per.StringResult)
                {
                case "Step":
                {
                    PromptDoubleOptions pdo = new PromptDoubleOptions("\nУкажите шаг сетки картограммы: ");
                    pdo.UseDefaultValue = true;
                    pdo.DefaultValue    = _step;
                    pdo.AllowZero       = false;
                    pdo.AllowNegative   = false;
                    pdo.AllowNone       = false;

                    var pdr = Tools.GetAcadEditor().GetDouble(pdo);
                    if (pdr.Status == PromptStatus.OK)
                    {
                        _step = pdr.Value;
                        _dataHost.Write("step", _step);
                    }
                    return(pdr.Status);
                }
                }

                return(PromptStatus.Error);
            };

            Autodesk.Civil.DatabaseServices.TinVolumeSurface surface;
            if (!ObjectCollector.TrySelectAllowedClassObject(out surface, keywords, promptStep))
            {
                return;
            }


            Polyline polygon = null;

            Tools.StartTransaction(() =>
            {
                surface = surface.Id.GetObjectForRead <CivilSurface>() as Autodesk.Civil.DatabaseServices.TinVolumeSurface;
                if (surface == null)
                {
                    return;
                }

                polygon = surface.ExtractBorders().ConvertToPolyline();
            });

            Matrix3d ucs = Tools.GetAcadEditor().CurrentUserCoordinateSystem;

            polygon.TransformBy(ucs);
            Extents3d bounds = polygon.Bounds.Value;

            Vector3d hVector = Matrix3d.Identity.CoordinateSystem3d.Xaxis.MultiplyBy((bounds.MaxPoint - bounds.MinPoint).X);
            Vector3d vVector = Matrix3d.Identity.CoordinateSystem3d.Yaxis.MultiplyBy((bounds.MaxPoint - bounds.MinPoint).Y);

            ObjectId btrId = ObjectId.Null;
            ObjectId brId  = ObjectId.Null;

            List <Entity>    rectgs        = null;
            CartogrammLabels labelsFactory = null;

            gride         = new SimpleGride(bounds.MinPoint, vVector, hVector, _step, _step);
            labelsFactory = new CartogrammLabels(gride);

            int rowsCount   = SimpleGride.CalculateCeilingCount(vVector, _step);
            int columnCount = SimpleGride.CalculateCeilingCount(hVector, _step);

            rectgs = new List <Entity>(rowsCount * columnCount);
            for (int r = 0; r < rowsCount; r++)
            {
                for (int c = 0; c < columnCount; c++)
                {
                    Polyline line = gride.CalculateRectagle(r, c, polygon, true);
                    if (line != null)
                    {
                        line.TransformBy(ucs.Inverse());
                        rectgs.Add(line);
                    }
                }
            }

            labelsFactory.CreateTeble(columnCount);

            Tools.StartTransaction(() =>
            {
                rectgs.AddRange(labelsFactory.CreateGridLabels(rectgs.Cast <Polyline>(), surface));
            });

            rectgs.AddRange(labelsFactory.Entities.Select(x => x.GetTransformedCopy(ucs.Inverse())));

            btrId = AcadBlocks.BlockTools.CreateBlockTableRecord("*U", bounds.MinPoint.TransformBy(ucs.Inverse()), rectgs.Cast <Entity>(), AnnotativeStates.NotApplicable, false);
            brId  = AcadBlocks.BlockTools.AppendBlockItem(bounds.MinPoint.TransformBy(ucs.Inverse()), btrId, null);
        }