Exemplo n.º 1
0
        public List <Brep> CreateDefBreps(GH_Structure <GH_Point> treePoints, GH_Structure <GH_Integer> treeConnect, Vector3d[] defVectors, double scale, double angle, Point3d center)
        {
            List <Brep> breps = new List <Brep>();

            for (int j = 0; j < treePoints.PathCount; j++)
            {
                List <GH_Point>   vertices = (List <GH_Point>)treePoints.get_Branch(j);
                var               mesh     = new Mesh();
                List <GH_Integer> connect  = (List <GH_Integer>)treeConnect.get_Branch(j);

                for (int i = 0; i < vertices.Count; i++)
                {
                    GH_Point p     = vertices[i];
                    Point3d  new_p = Point3d.Add(p.Value, defVectors[connect[i].Value] * scale);
                    mesh.Vertices.Add(new_p);
                }
                mesh.Faces.AddFace(0, 1, 5, 4);
                mesh.Faces.AddFace(1, 2, 6, 5);
                mesh.Faces.AddFace(2, 3, 7, 6);
                mesh.Faces.AddFace(0, 3, 7, 4);
                mesh.Faces.AddFace(4, 5, 6, 7);
                mesh.Faces.AddFace(0, 1, 2, 3);

                Brep new_brep = Brep.CreateFromMesh(mesh, false);

                Vector3d vecAxis = new Vector3d(0, 0, 1);
                new_brep.Rotate(angle, vecAxis, center);

                breps.Add(new_brep);
            }
            return(breps);
        }
Exemplo n.º 2
0
        private void setInnerBound()
        {
            centroid = MeshTools.meshCentroid(boundary);
            Mesh offset = MeshTools.makeCuboid(cellPlane, xDim - memberSize, yDim - memberSize, zDim - memberSize);

            innerBoundary = Brep.CreateFromMesh(offset, false);

            foreach (BrepVertex p in innerBoundary.Vertices)
            {
                nodeGrid.Add(p.Location);
            }
            nodeGrid.Add(new Line(nodeGrid[0], nodeGrid[2]).PointAt(0.5));
            nodeGrid.Add(new Line(nodeGrid[1], nodeGrid[3]).PointAt(0.5));
            nodeGrid.Add(new Line(nodeGrid[6], nodeGrid[4]).PointAt(0.5));
            nodeGrid.Add(new Line(nodeGrid[7], nodeGrid[5]).PointAt(0.5));

            setCentreLines();
            //foreach(BrepEdge be in innerBoundary.Edges)
            //{
            //    untrimmedCentreLines.Add(be.DuplicateCurve());
            //}
            ////add diagonals

            for (int d = 0; d < 11; d++)
            {
                diagonalMembers.Add(new DiagonalMember(d, nodeGrid));
            }
            //set the faceboundaries
            setBoundaryGeometry();
        }
Exemplo n.º 3
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            List <Point3d> points = new List <Point3d>();

            if (!DA.GetDataList(0, points))
            {
                return;
            }

            Mesh mesh = new Mesh();

            for (int i = 0; i < points.Count; i++)
            {
                mesh.Vertices.Add(points[i]);
            }
            mesh.Faces.AddFace(0, 1, 5, 4); //Front
            mesh.Faces.AddFace(1, 2, 6, 5); //Right
            mesh.Faces.AddFace(2, 3, 7, 6); //Back
            mesh.Faces.AddFace(0, 4, 7, 3); //Left
            mesh.Faces.AddFace(0, 3, 2, 1); //Bottom
            mesh.Faces.AddFace(4, 5, 6, 7); //Top



            Brep brep = Brep.CreateFromMesh(mesh, true);

            //Brep brep = new Brep();
            DA.SetData(0, brep);
        }
Exemplo n.º 4
0
        public List <Brep> CreateDefBreps(List <Element> elements, double scale, double angle, Point3d center)
        {
            List <Brep> breps = new List <Brep>();

            for (int j = 0; j < elements.Count; j++)
            {
                var         mesh     = new Mesh();
                List <Node> vertices = elements[j].GetVertices();

                for (int i = 0; i < vertices.Count; i++)
                {
                    Point3d  p         = vertices[i].GetCoord();
                    Vector3d defVector = new Vector3d(vertices[i].GetDeformation()[0], vertices[i].GetDeformation()[1], vertices[i].GetDeformation()[2]);
                    Point3d  new_p     = Point3d.Add(p, defVector * scale);
                    mesh.Vertices.Add(new_p);
                }
                mesh.Faces.AddFace(0, 1, 5, 4);
                mesh.Faces.AddFace(1, 2, 6, 5);
                mesh.Faces.AddFace(2, 3, 7, 6);
                mesh.Faces.AddFace(0, 3, 7, 4);
                mesh.Faces.AddFace(4, 5, 6, 7);
                mesh.Faces.AddFace(0, 1, 2, 3);

                Brep     new_brep = Brep.CreateFromMesh(mesh, false);
                Vector3d vecAxis  = new Vector3d(0, 0, 1);
                new_brep.Rotate(angle, vecAxis, center);
                breps.Add(new_brep);
            }
            return(breps);
        }
Exemplo n.º 5
0
 private void setBoundaryGeometry()
 {
     outerBoundary = Brep.CreateFromMesh(boundary, false);
     boundCurve0   = outerBoundary.Faces[2].OuterLoop.To3dCurve();
     boundCurve1   = outerBoundary.Faces[4].OuterLoop.To3dCurve();
     boundPlane0   = new Plane(outerBoundary.Faces[2].PointAt(0.5, 0.5), outerBoundary.Faces[2].NormalAt(0.5, 0.5));
     boundPlane1   = new Plane(outerBoundary.Faces[4].PointAt(0.5, 0.5), outerBoundary.Faces[4].NormalAt(0.5, 0.5));
     basePoints.Add(outerBoundary.Vertices[0].Location);
     basePoints.Add(outerBoundary.Vertices[1].Location);
     basePoints.Add(outerBoundary.Vertices[2].Location);
     basePoints.Add(outerBoundary.Vertices[3].Location);
 }
Exemplo n.º 6
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            Mesh mesh = null;

            if (!DA.GetData(0, ref mesh))
            {
                return;
            }

            var brep = Brep.CreateFromMesh(mesh, false);

            DA.SetData(0, brep);
        }
Exemplo n.º 7
0
        public Point3d FindCentroidTwisted(List <GH_Point> pList)
        {
            Mesh mesh = new Mesh();

            for (int i = 0; i < pList.Count; i++)
            {
                mesh.Vertices.Add(pList[i].Value);
            }

            mesh.Faces.AddFace(0, 3, 2, 1); //Bottom
            mesh.Faces.AddFace(4, 5, 6, 7); //Top
            mesh.Faces.AddFace(2, 3, 7, 6); //Back
            mesh.Faces.AddFace(0, 1, 5, 4); //Front
            mesh.Faces.AddFace(1, 2, 6, 5); //Right
            mesh.Faces.AddFace(0, 4, 7, 3); //Left

            Brep brep = Brep.CreateFromMesh(mesh, true);
            VolumeMassProperties vmp = VolumeMassProperties.Compute(brep);
            Point3d centroid         = vmp.Centroid;

            return(centroid);
        }
Exemplo n.º 8
0
        private Brep MakeFrameBox(Brep[] frame)
        {
            Mesh m = new Mesh();
            Mesh f = new Mesh();

            for (int i = 0; i < meshnodes.Count; i++)
            {
                for (int j = 0; j < meshnodes[i].Count; j++)
                {
                    if (i < meshnodes.Count - 1 && j < meshnodes[i].Count - 1)
                    {
                        List <Point3d> points = new List <Point3d>()
                        {
                            meshnodes[i][j].point, meshnodes[i][j + 1].point, meshnodes[i + 1][j + 1].point, meshnodes[i + 1][j].point
                        };
                        FourNodeMesh(ref m, points);

                        List <Point3d> pointsF = new List <Point3d>()
                        {
                            frameGrid[i][j], frameGrid[i][j + 1], frameGrid[i + 1][j + 1], frameGrid[i + 1][j]
                        };
                        FourNodeMesh(ref f, pointsF);
                    }
                }
            }
            Brep        front = Brep.CreateFromMesh(m, false);
            Brep        back  = Brep.CreateFromMesh(f, false);
            List <Brep> breps = new List <Brep>();

            breps.Add(front);
            breps.Add(back);
            foreach (Brep b in frame)
            {
                breps.Add(b);
            }
            Brep[] box = Brep.JoinBreps(breps, RhinoDoc.ActiveDoc.ModelAbsoluteTolerance);

            return(box[0]);
        }
Exemplo n.º 9
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            //---variables---

            List <Point3d> points = new List <Point3d>();

            //---input---

            if (!DA.GetDataList(0, points))
            {
                return;
            }

            //---solve---

            Mesh mesh = new Mesh();

            for (int i = 0; i < points.Count; i++)
            {
                mesh.Vertices.Add(points[i]);
            }
            mesh.Faces.AddFace(0, 4, 5, 1); //Front
            mesh.Faces.AddFace(1, 5, 6, 2); //Right
            mesh.Faces.AddFace(2, 6, 7, 3); //Back
            mesh.Faces.AddFace(0, 3, 7, 4); //Left
            mesh.Faces.AddFace(0, 1, 2, 3); //Bottom
            mesh.Faces.AddFace(4, 7, 6, 5); //Top

            Brep brep = Brep.CreateFromMesh(mesh, true);

            Curve[] curves = brep.DuplicateEdgeCurves();

            //---output---

            DA.SetData(0, brep);
        }
Exemplo n.º 10
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            bool allBrepSolid = true;
            const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Brep | Rhino.DocObjects.ObjectType.Mesh;

            GetObject wro = new Rhino.Input.Custom.GetObject();

            wro.SetCommandPrompt("Select objects to weight.");
            wro.GeometryFilter = geometryFilter;

            wro.SubObjectSelect             = true;
            wro.DeselectAllBeforePostSelect = false;
            wro.OneByOnePostSelect          = true;
            wro.GetMultiple(1, 0);

            double volObj3 = 0;


            for (int i = 0; i < wro.ObjectCount; i++)
            {
                Rhino.DocObjects.ObjRef objref = wro.Object(i);
                // get selected surface object
                Rhino.DocObjects.RhinoObject obj = objref.Object();
                if (obj == null)
                {
                    return(Result.Failure);
                }
                // get selected surface (face)

                Brep refcr = objref.Brep();
                if (refcr != null)
                {
                    var    volObj  = VolumeMassProperties.Compute(refcr);
                    double volObj2 = refcr.GetVolume();
                    volObj3 = volObj3 + volObj2;
                    bool brepSolid = refcr.IsSolid;
                    if (brepSolid == false)
                    {
                        allBrepSolid = false;
                    }
                }
                if (refcr == null)
                {
                    Mesh   refcm   = objref.Mesh();
                    Brep   refmb   = Brep.CreateFromMesh(refcm, false);
                    var    volOb   = VolumeMassProperties.Compute(refmb);
                    double volObj4 = refmb.GetVolume();
                    volObj3 = volObj3 + volObj4;
                    bool brepSolid = refmb.IsSolid;
                    if (brepSolid == false)
                    {
                        allBrepSolid = false;
                    }
                }
            }

            double gold18k   = Math.Round(volObj3 * 0.0158, 2, MidpointRounding.AwayFromZero);
            double gold14k   = Math.Round(volObj3 * 0.0146, 2, MidpointRounding.AwayFromZero);
            double platinum  = Math.Round(volObj3 * 0.0214, 2, MidpointRounding.AwayFromZero);
            double palladium = Math.Round(volObj3 * 0.012, 2, MidpointRounding.AwayFromZero);
            double silver925 = Math.Round(volObj3 * 0.0102, 2, MidpointRounding.AwayFromZero);
            double diaCt     = Math.Round(volObj3 * 0.01755, 2, MidpointRounding.AwayFromZero);

            if (allBrepSolid)
            {
                RhinoApp.WriteLine("The weight is: Gold 18k " + gold18k + "g, Gold 14k " + gold14k + "g, Platinum " + platinum + "g, Palladium " + palladium + "g, Silver 925 " + silver925 + "g, Diamond" + diaCt + "Ct");
            }
            else
            {
                RhinoApp.WriteLine("AT LEAST ONE OBJECT IS OPEN! Result might be false!" + "The weight is: Gold 18k " + gold18k + "g, Gold 14k " + gold14k + "g, Platinum " + platinum + "g, Palladium " + palladium + "g, Silver 925 " + silver925 + "g, Diamond" + diaCt + "Ct");
            }



            return(Result.Success);
        }
Exemplo n.º 11
0
        private bool ProcessTopographySurface(List <Point3d> points)
        {
            try {
                //int MaxVertices = 500;
                //int MaxTriangles = 1000;
                // TODO: Not sure if these estimates are good or how the system will handle going over.
                int MaxVertices  = points.Count * 2;
                int MaxTriangles = MaxVertices * 2;

                // Points used.  !!Note: is a 1-based array
                TopoSurfVertex[] topoSurfVertex = new TopoSurfVertex[MaxVertices];
                // Triangles created. !!Note: is a 1-based array
                TopoSurfTriangle[] topoSurfTriangle = new TopoSurfTriangle[MaxTriangles];

                int numberOfPoints    = 0;
                int numberOfTriangles = 0;
                foreach (Point3d point3d in points)
                {
                    numberOfPoints++;
                    topoSurfVertex[numberOfPoints].x = point3d.X;
                    topoSurfVertex[numberOfPoints].y = point3d.Y;
                    topoSurfVertex[numberOfPoints].z = point3d.Z;
                }

                TriangulatePoints triangulatePoints = new TriangulatePoints(ref topoSurfVertex, out topoSurfTriangle, numberOfPoints, MaxVertices, MaxTriangles, ref numberOfTriangles);
                List <Curve>      curves            = new List <Curve>();
                for (int i = 1; i <= numberOfTriangles; i++)
                {
                    Line line = new Line(topoSurfVertex[topoSurfTriangle[i].vv0].x, topoSurfVertex[topoSurfTriangle[i].vv0].y, topoSurfVertex[topoSurfTriangle[i].vv0].z, topoSurfVertex[topoSurfTriangle[i].vv1].x, topoSurfVertex[topoSurfTriangle[i].vv1].y, topoSurfVertex[topoSurfTriangle[i].vv1].z);
                    curves.Add(new LineCurve(line));
                    line = new Line(topoSurfVertex[topoSurfTriangle[i].vv1].x, topoSurfVertex[topoSurfTriangle[i].vv1].y, topoSurfVertex[topoSurfTriangle[i].vv1].z, topoSurfVertex[topoSurfTriangle[i].vv2].x, topoSurfVertex[topoSurfTriangle[i].vv2].y, topoSurfVertex[topoSurfTriangle[i].vv2].z);
                    curves.Add(new LineCurve(line));
                    line = new Line(topoSurfVertex[topoSurfTriangle[i].vv0].x, topoSurfVertex[topoSurfTriangle[i].vv0].y, topoSurfVertex[topoSurfTriangle[i].vv0].z, topoSurfVertex[topoSurfTriangle[i].vv2].x, topoSurfVertex[topoSurfTriangle[i].vv2].y, topoSurfVertex[topoSurfTriangle[i].vv2].z);
                    curves.Add(new LineCurve(line));
                }
                Mesh mesh = new Mesh();
                for (int i = 1; i <= numberOfPoints; i++)
                {
                    mesh.Vertices.Add(new Point3d(topoSurfVertex[i].x, topoSurfVertex[i].y, topoSurfVertex[i].z));
                }
                for (int i = 1; i <= numberOfTriangles; i++)    // Note subtracting 1 from index due to 1-based array
                {
                    mesh.Faces.AddFace(topoSurfTriangle[i].vv0 - 1, topoSurfTriangle[i].vv1 - 1, topoSurfTriangle[i].vv2 - 1);
                }
                mesh.Normals.ComputeNormals();
                mesh.Compact();
                Brep brep = Brep.CreateFromMesh(mesh, true);

                // Add to outputs
                this.dataTreePoints.AddRange(points, new GH_Path(indexPoints));
                indexPoints++;
                this.dataTreeCurves.AddRange(curves, new GH_Path(indexCurves));
                indexCurves++;
                this.dataTreeBreps.AddRange(new List <Brep> {
                    brep
                }, new GH_Path(indexBreps));
                indexBreps++;

                // Create geometry
                if (createGeometryPoints)
                {
                    foreach (Point3d point3d in points)
                    {
                        Rhino.RhinoDoc.ActiveDoc.Objects.AddPoint(point3d);
                    }
                }
                if (createGeometryCurves)
                {
                    foreach (Curve curveItem in curves)
                    {
                        Rhino.RhinoDoc.ActiveDoc.Objects.AddCurve(curveItem);
                    }
                }
                if (createGeometrySurfaces)
                {
                    Rhino.RhinoDoc.ActiveDoc.Objects.AddBrep(brep);
                }

                return(true);
            }
            catch {
                return(false);
            }
        }
Exemplo n.º 12
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            Mesh        meshSurf;
            List <Guid> ids       = new List <Guid>();
            double      tolerance = doc.ModelAbsoluteTolerance;
            const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Surface |
                                                               Rhino.DocObjects.ObjectType.PolysrfFilter |
                                                               Rhino.DocObjects.ObjectType.Mesh;

            GetObject gs = new Rhino.Input.Custom.GetObject();

            gs.SetCommandPrompt("Surface to orient on");
            gs.GeometryFilter              = geometryFilter;
            gs.SubObjectSelect             = true;
            gs.DeselectAllBeforePostSelect = true;
            gs.OneByOnePostSelect          = true;
            gs.Get();
            if (gs.CommandResult() != Result.Success)
            {
                return(gs.CommandResult());
            }

            Rhino.DocObjects.ObjRef      objref = gs.Object(0);
            Rhino.DocObjects.RhinoObject obj    = objref.Object();
            if (obj == null)
            {
                return(Result.Failure);
            }

            brepSurf = objref.Brep();
            if (brepSurf == null)
            {
                meshSurf = objref.Mesh();
                brepSurf = Brep.CreateFromMesh(meshSurf, true);
            }
            if (brepSurf == null)
            {
                return(Result.Failure);
            }
            obj.Select(false);


            while (true)
            {
                w_key_pressed = false;
                s_key_pressed = false;
                a_key_pressed = false;
                d_key_pressed = false;

                m_escape_key_pressed = false;

                RhinoApp.EscapeKeyPressed += RhinoApp_EscapeKeyPressed;
                RhinoApp.KeyboardEvent    += OnRhinoKeyboardEvent;

                Point3d  pt0;
                GetPoint getPointAction = new GetPoint();
                getPointAction.SetCommandPrompt("Please select insert point(s) on surface.");
                getPointAction.Constrain(brepSurf, -1, -1, false);

                var stoneDiam  = new Rhino.Input.Custom.OptionDouble(diamStone);
                var stoneOff   = new Rhino.Input.Custom.OptionDouble(offSetStone);
                var boolOption = new Rhino.Input.Custom.OptionToggle(false, "Off", "On");
                var moveOption = new Rhino.Input.Custom.OptionToggle(false, "Off", "On");

                getPointAction.AddOptionDouble("StoneDiam", ref stoneDiam);
                getPointAction.AddOptionDouble("Offset", ref stoneOff);
                getPointAction.AddOptionToggle("Delete", ref boolOption);
                getPointAction.AddOptionToggle("Move", ref moveOption);
                getPointAction.DynamicDraw += RefCircleDraw;
                getPointAction.Tag          = obj;
                getPointAction.AcceptString(false);
                getPointAction.AcceptNothing(true);
                var res = getPointAction.Get();


                if (w_key_pressed || s_key_pressed)
                {
                    RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent;
                    w_key_pressed           = false;
                    s_key_pressed           = false;
                    stoneDiam.CurrentValue  = diamStone;
                }
                if (a_key_pressed || d_key_pressed)
                {
                    RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent;
                    a_key_pressed           = false;
                    d_key_pressed           = false;
                    stoneOff.CurrentValue   = offSetStone;
                }

                if (res == GetResult.Nothing)
                {
                    break;
                }
                if (m_escape_key_pressed)
                {
                    break;
                }

                diamStone   = stoneDiam.CurrentValue;
                offSetStone = stoneOff.CurrentValue;
                optionBool  = boolOption.CurrentValue;
                moveBool    = moveOption.CurrentValue;

                RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent;

                if (moveBool == true)
                {
                    RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent;
                    while (true)
                    {
                        GetObject gcd = new Rhino.Input.Custom.GetObject();
                        gcd.SetCommandPrompt("Select circle(s) to move. Press enter when done");
                        gcd.GeometryFilter              = Rhino.DocObjects.ObjectType.Curve;
                        gcd.SubObjectSelect             = false;
                        gcd.DeselectAllBeforePostSelect = true;
                        gcd.AcceptNothing(true);
                        if (gcd.Get() == GetResult.Nothing)
                        {
                            break;
                        }
                        gcd.Get();
                        Rhino.DocObjects.ObjRef      delobjref = gcd.Object(0);
                        Rhino.DocObjects.RhinoObject delobj    = delobjref.Object();
                        Curve  curveRadius  = delobjref.Curve();
                        Circle circleRadius = new Circle();
                        curveRadius.TryGetCircle(out circleRadius, tolerance);
                        diamStone = circleRadius.Diameter;
                        doc.Objects.Delete(delobj, true);
                        doc.Views.Redraw();

                        getPointAction.Get();
                        pt0 = getPointAction.Point();
                        Point3d        closestPoint;
                        ComponentIndex compIndex;
                        double         u, v;
                        Vector3d       vt1;

                        brepSurf.ClosestPoint(pt0, out closestPoint, out compIndex, out u, out v, 0.01, out vt1);
                        Plane  pl1  = new Plane(pt0, vt1);
                        Circle cr1  = new Circle(pl1, pt0, diamStone / 2);
                        var    crgu = doc.Objects.AddCircle(cr1);
                        ids.Add(crgu);
                        doc.Views.Redraw();
                    }
                    moveBool = false;
                }
                if (optionBool == true)
                {
                    RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent;
                    while (true)
                    {
                        GetObject gcd = new Rhino.Input.Custom.GetObject();
                        gcd.SetCommandPrompt("Select circle(s) to delete. Press enter when done");
                        gcd.GeometryFilter              = Rhino.DocObjects.ObjectType.Curve;
                        gcd.SubObjectSelect             = false;
                        gcd.DeselectAllBeforePostSelect = true;
                        gcd.AcceptNothing(true);
                        if (gcd.Get() == GetResult.Nothing)
                        {
                            break;
                        }
                        gcd.Get();
                        Rhino.DocObjects.ObjRef      delobjref = gcd.Object(0);
                        Rhino.DocObjects.RhinoObject delobj    = delobjref.Object();
                        Curve  curveRadius  = delobjref.Curve();
                        Circle circleRadius = new Circle();
                        curveRadius.TryGetCircle(out circleRadius, tolerance);
                        diamStone = circleRadius.Diameter;
                        doc.Objects.Delete(delobj, true);
                        doc.Views.Redraw();
                    }
                    optionBool = false;
                }

                if (res == GetResult.Point)
                {
                    pt0 = getPointAction.Point();
                    Point3d        closestPoint;
                    ComponentIndex compIndex;
                    double         u, v;
                    Vector3d       vt1;
                    brepSurf.ClosestPoint(pt0, out closestPoint, out compIndex, out u, out v, 0.01, out vt1);
                    Plane  pl1  = new Plane(pt0, vt1);
                    Circle cr1  = new Circle(pl1, pt0, diamStone / 2);
                    var    crgu = doc.Objects.AddCircle(cr1);
                    ids.Add(crgu);
                    doc.Views.Redraw();
                }
            }
            RhinoApp.KeyboardEvent    -= OnRhinoKeyboardEvent;
            RhinoApp.EscapeKeyPressed -= RhinoApp_EscapeKeyPressed;
            doc.Groups.Add(ids);
            return(Result.Success);
        }