// Extrusions
        // TODO: Research into how to properly create and recreate extrusions. Current way we compromise by transforming them into breps.
        public static SpeckleBrep ToSpeckle(this Rhino.Geometry.Extrusion extrusion)
        {
            return(extrusion.ToBrep().ToSpeckle());

            //var myExtrusion = new SpeckleExtrusion( SpeckleCore.Converter.Serialise( extrusion.Profile3d( 0, 0 ) ), extrusion.PathStart.DistanceTo( extrusion.PathEnd ), extrusion.IsCappedAtBottom );

            //myExtrusion.PathStart = extrusion.PathStart.ToSpeckle();
            //myExtrusion.PathEnd = extrusion.PathEnd.ToSpeckle();
            //myExtrusion.PathTangent = extrusion.PathTangent.ToSpeckle();

            //var Profiles = new List<SpeckleObject>();
            //for ( int i = 0; i < extrusion.ProfileCount; i++ )
            //  Profiles.Add( SpeckleCore.Converter.Serialise( extrusion.Profile3d( i, 0 ) ) );

            //myExtrusion.Profiles = Profiles;
            //myExtrusion.Properties = extrusion.UserDictionary.ToSpeckle( root: extrusion );
            //myExtrusion.GenerateHash();
            //return myExtrusion;
        }
        /***************************************************/
        /**** Public Methods  - Surfaces                ****/
        /***************************************************/

        public static void RenderRhinoMeshes(RHG.Extrusion surface, Rhino.Display.DisplayPipeline pipeline, DisplayMaterial material)
        {
            pipeline.DrawBrepShaded(surface.ToBrep(), material);
        }
Exemple #3
0
        protected override void DrawForeground(DrawEventArgs e)
        {
            base.DrawForeground(e);



            RhinoObject foundObject = Rhino.RhinoDoc.ActiveDoc.Objects.Find(Id);

            Rhino.Display.RhinoView     myViewport = Rhino.RhinoDoc.ActiveDoc.Views.ActiveView;
            Rhino.Display.RhinoViewport viewport   = myViewport.ActiveViewport;


            e.Display.EnableDepthWriting(false);
            switch (foundObject.ObjectType)
            {
            case Rhino.DocObjects.ObjectType.Point:
                break;

            case Rhino.DocObjects.ObjectType.Curve:
                break;

            case Rhino.DocObjects.ObjectType.Extrusion:
                Rhino.Geometry.Extrusion myExtru = (Rhino.Geometry.Extrusion)foundObject.Geometry;
                Rhino.Geometry.Brep      myBrep  = myExtru.ToBrep();
                Mesh[] extruMeshes     = Rhino.Geometry.Mesh.CreateFromBrep(myBrep);
                Mesh   globalExtruMesh = new Rhino.Geometry.Mesh();
                foreach (Mesh m in extruMeshes)
                {
                    globalExtruMesh.Append(m);
                }
                Polyline[] myExtruPoly = globalExtruMesh.GetOutlines(viewport);
                foreach (Polyline poly in myExtruPoly)
                {
                    e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                }
                break;

            case Rhino.DocObjects.ObjectType.Brep:
                Mesh[] meshes     = Rhino.Geometry.Mesh.CreateFromBrep((Brep)foundObject.Geometry);
                Mesh   globalMesh = new Rhino.Geometry.Mesh();
                foreach (Mesh m in meshes)
                {
                    globalMesh.Append(m);
                }
                Polyline[] myPolys2 = globalMesh.GetOutlines(viewport);
                foreach (Polyline poly in myPolys2)
                {
                    e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                }
                break;

            case Rhino.DocObjects.ObjectType.Mesh:
                Mesh       mesh        = foundObject.Geometry as Rhino.Geometry.Mesh;
                Polyline[] meshOutline = mesh.GetOutlines(viewport);
                foreach (Polyline poly in meshOutline)
                {
                    e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                }
                break;

            case Rhino.DocObjects.ObjectType.TextDot:
                break;

            case Rhino.DocObjects.ObjectType.Annotation:
                break;
            }
            e.Display.EnableDepthWriting(true);
            e.Display.EnableDepthWriting(false);

            if (Edges.Count > 0)
            {
                System.Drawing.Color colorKid = System.Drawing.Color.LightCoral;
                foreach (List <Guid> li in Edges)
                {
                    RhinoObject            foundObject0 = Rhino.RhinoDoc.ActiveDoc.Objects.Find(li[0]);
                    RhinoObject            foundObject1 = Rhino.RhinoDoc.ActiveDoc.Objects.Find(li[1]);
                    Rhino.Geometry.Point3d ce0          = new Rhino.Geometry.Point3d();
                    Rhino.Geometry.Point3d ce1          = new Rhino.Geometry.Point3d();

                    switch (foundObject0.ObjectType)
                    {
                    case Rhino.DocObjects.ObjectType.Point:
                        ce0 = ((Rhino.Geometry.Point)foundObject0.Geometry).Location;
                        break;

                    case Rhino.DocObjects.ObjectType.Curve:
                        Rhino.Geometry.Curve myCurve = (Rhino.Geometry.Curve)foundObject0.Geometry;
                        myCurve.Domain = new Rhino.Geometry.Interval(0, 1);
                        ce0            = myCurve.PointAtNormalizedLength(0.5);
                        break;

                    case Rhino.DocObjects.ObjectType.Extrusion:
                        Rhino.Geometry.Extrusion myExtru         = (Rhino.Geometry.Extrusion)foundObject0.Geometry;
                        Rhino.Geometry.Point3d   myExtruCentroid = Rhino.Geometry.AreaMassProperties.Compute(myExtru.ToBrep()).Centroid;
                        ce0 = myExtruCentroid;

                        Rhino.Geometry.Brep myBrep = myExtru.ToBrep();
                        Mesh[] extruMeshes         = Rhino.Geometry.Mesh.CreateFromBrep(myBrep);
                        Mesh   globalExtruMesh     = new Rhino.Geometry.Mesh();
                        foreach (Mesh m in extruMeshes)
                        {
                            globalExtruMesh.Append(m);
                        }
                        Polyline[] myExtruPoly = globalExtruMesh.GetOutlines(viewport);
                        foreach (Polyline poly in myExtruPoly)
                        {
                            e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                        }

                        break;

                    case Rhino.DocObjects.ObjectType.Brep:
                        Rhino.Geometry.Point3d myBrepCentroid = ((Brep)foundObject0.Geometry).GetBoundingBox(true).Center;
                        ce0 = myBrepCentroid;

                        Mesh[] meshes     = Rhino.Geometry.Mesh.CreateFromBrep((Brep)foundObject0.Geometry);
                        Mesh   globalMesh = new Rhino.Geometry.Mesh();
                        foreach (Mesh m in meshes)
                        {
                            globalMesh.Append(m);
                        }
                        Polyline[] myPolys2 = globalMesh.GetOutlines(viewport);
                        foreach (Polyline poly in myPolys2)
                        {
                            e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                        }

                        break;

                    case Rhino.DocObjects.ObjectType.Mesh:
                        var mesh = foundObject0.Geometry as Rhino.Geometry.Mesh;

                        Polyline[] meshOutline = mesh.GetOutlines(viewport);
                        foreach (Polyline poly in meshOutline)
                        {
                            e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                        }

                        Rhino.Geometry.Point3d myMeshCentroid = mesh.GetBoundingBox(true).Center;
                        ce0 = myMeshCentroid;



                        break;

                    case Rhino.DocObjects.ObjectType.TextDot:
                        // todo
                        break;

                    case Rhino.DocObjects.ObjectType.Annotation:
                        // todo
                        break;
                    }

                    switch (foundObject1.ObjectType)
                    {
                    case Rhino.DocObjects.ObjectType.Point:
                        ce1 = ((Rhino.Geometry.Point)foundObject1.Geometry).Location;
                        break;

                    case Rhino.DocObjects.ObjectType.Curve:
                        Rhino.Geometry.Curve myCurve = (Rhino.Geometry.Curve)foundObject1.Geometry;
                        myCurve.Domain = new Rhino.Geometry.Interval(0, 1);
                        ce1            = myCurve.PointAtNormalizedLength(0.5);
                        break;

                    case Rhino.DocObjects.ObjectType.Extrusion:
                        Rhino.Geometry.Extrusion myExtru         = (Rhino.Geometry.Extrusion)foundObject1.Geometry;
                        Rhino.Geometry.Point3d   myExtruCentroid = Rhino.Geometry.AreaMassProperties.Compute(myExtru.ToBrep()).Centroid;
                        ce1 = myExtruCentroid;


                        Rhino.Geometry.Brep myBrep = myExtru.ToBrep();
                        Mesh[] extruMeshes         = Rhino.Geometry.Mesh.CreateFromBrep(myBrep);
                        Mesh   globalExtruMesh     = new Rhino.Geometry.Mesh();
                        foreach (Mesh m in extruMeshes)
                        {
                            globalExtruMesh.Append(m);
                        }
                        Polyline[] myExtruPoly = globalExtruMesh.GetOutlines(viewport);
                        foreach (Polyline poly in myExtruPoly)
                        {
                            e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                        }

                        break;

                    case Rhino.DocObjects.ObjectType.Brep:
                        Rhino.Geometry.Point3d myBrepCentroid = ((Brep)foundObject1.Geometry).GetBoundingBox(true).Center;
                        ce1 = myBrepCentroid;

                        Mesh[] meshes     = Rhino.Geometry.Mesh.CreateFromBrep((Brep)foundObject1.Geometry);
                        Mesh   globalMesh = new Rhino.Geometry.Mesh();
                        foreach (Mesh m in meshes)
                        {
                            globalMesh.Append(m);
                        }
                        Polyline[] myPolys2 = globalMesh.GetOutlines(viewport);
                        foreach (Polyline poly in myPolys2)
                        {
                            e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                        }

                        break;

                    case Rhino.DocObjects.ObjectType.Mesh:
                        var mesh = foundObject1.Geometry as Rhino.Geometry.Mesh;
                        Rhino.Geometry.Point3d myMeshCentroid = mesh.GetBoundingBox(true).Center;
                        ce1 = myMeshCentroid;


                        Polyline[] meshOutline = mesh.GetOutlines(viewport);
                        foreach (Polyline poly in meshOutline)
                        {
                            e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Red, 6);
                        }


                        break;

                    case Rhino.DocObjects.ObjectType.TextDot:
                        // todo
                        break;

                    case Rhino.DocObjects.ObjectType.Annotation:
                        // todo
                        break;
                    }


                    Rhino.Geometry.Line graphEdge = new Rhino.Geometry.Line();
                    graphEdge.From = ce0;
                    graphEdge.To   = ce1;

                    e.Display.DrawLineArrow(graphEdge, System.Drawing.Color.DarkRed, 7, 4);
                }
            }
            e.Display.EnableDepthWriting(true);

            Rhino.RhinoDoc.ActiveDoc.Views.Redraw();
        }
Exemple #4
0
        /***************************************************/
        /**** Public Methods  - Surfaces                ****/
        /***************************************************/

        public static RHG.Mesh CreatePreviewMesh(RHG.Extrusion surface, RHG.MeshingParameters parameters)
        {
            return(CreatePreviewMesh(surface.ToBrep(), parameters));
        }
Exemple #5
0
        protected override void DrawForeground(DrawEventArgs e)
        {
            base.DrawForeground(e);
            if (Edges.Count > 0)
            {
                System.Drawing.Color colorKid = System.Drawing.Color.LightCoral;
                foreach (List <Guid> li in Edges)

                {
                    RhinoObject            foundObject0 = Rhino.RhinoDoc.ActiveDoc.Objects.Find(li[0]);
                    RhinoObject            foundObject1 = Rhino.RhinoDoc.ActiveDoc.Objects.Find(li[1]);
                    Rhino.Geometry.Point3d ce0          = new Rhino.Geometry.Point3d();
                    Rhino.Geometry.Point3d ce1          = new Rhino.Geometry.Point3d();

                    switch (foundObject0.ObjectType)
                    {
                    case Rhino.DocObjects.ObjectType.Point:
                        ce0 = ((Rhino.Geometry.Point)foundObject0.Geometry).Location;
                        break;

                    case Rhino.DocObjects.ObjectType.Curve:
                        Rhino.Geometry.Curve myCurve = (Rhino.Geometry.Curve)foundObject0.Geometry;
                        myCurve.Domain = new Rhino.Geometry.Interval(0, 1);
                        ce0            = myCurve.PointAtNormalizedLength(0.5);
                        break;

                    case Rhino.DocObjects.ObjectType.Extrusion:
                        Rhino.Geometry.Extrusion myExtru         = (Rhino.Geometry.Extrusion)foundObject0.Geometry;
                        Rhino.Geometry.Point3d   myExtruCentroid = Rhino.Geometry.AreaMassProperties.Compute(myExtru.ToBrep()).Centroid;
                        ce0 = myExtruCentroid;
                        break;

                    case Rhino.DocObjects.ObjectType.Brep:
                        Rhino.Geometry.Point3d myBrepCentroid = ((Brep)foundObject0.Geometry).GetBoundingBox(true).Center;
                        ce0 = myBrepCentroid;
                        break;

                    case Rhino.DocObjects.ObjectType.Mesh:
                        var mesh = foundObject0.Geometry as Rhino.Geometry.Mesh;
                        Rhino.Geometry.Point3d myMeshCentroid = mesh.GetBoundingBox(true).Center;
                        ce0 = myMeshCentroid;
                        break;

                    case Rhino.DocObjects.ObjectType.TextDot:
                        // todo
                        break;

                    case Rhino.DocObjects.ObjectType.Annotation:
                        // todo
                        break;
                    }

                    switch (foundObject1.ObjectType)
                    {
                    case Rhino.DocObjects.ObjectType.Point:
                        ce1 = ((Rhino.Geometry.Point)foundObject1.Geometry).Location;
                        break;

                    case Rhino.DocObjects.ObjectType.Curve:
                        Rhino.Geometry.Curve myCurve = (Rhino.Geometry.Curve)foundObject1.Geometry;
                        myCurve.Domain = new Rhino.Geometry.Interval(0, 1);
                        ce1            = myCurve.PointAtNormalizedLength(0.5);
                        break;

                    case Rhino.DocObjects.ObjectType.Extrusion:
                        Rhino.Geometry.Extrusion myExtru         = (Rhino.Geometry.Extrusion)foundObject1.Geometry;
                        Rhino.Geometry.Point3d   myExtruCentroid = Rhino.Geometry.AreaMassProperties.Compute(myExtru.ToBrep()).Centroid;
                        ce1 = myExtruCentroid;
                        break;

                    case Rhino.DocObjects.ObjectType.Brep:
                        Rhino.Geometry.Point3d myBrepCentroid = ((Brep)foundObject1.Geometry).GetBoundingBox(true).Center;
                        ce1 = myBrepCentroid;
                        break;

                    case Rhino.DocObjects.ObjectType.Mesh:
                        var mesh = foundObject1.Geometry as Rhino.Geometry.Mesh;
                        Rhino.Geometry.Point3d myMeshCentroid = mesh.GetBoundingBox(true).Center;
                        ce1 = myMeshCentroid;
                        break;

                    case Rhino.DocObjects.ObjectType.TextDot:
                        // todo
                        break;

                    case Rhino.DocObjects.ObjectType.Annotation:
                        // todo
                        break;
                    }


                    Rhino.Geometry.Line graphEdge = new Rhino.Geometry.Line();
                    graphEdge.From = ce0;
                    graphEdge.To   = ce1;
                    e.Display.DrawLine(graphEdge, Color.Orange, 4);
                }
            }

            Rhino.RhinoDoc.ActiveDoc.Views.Redraw();
        }