private LyrebirdCurve GetLBCurve(Curve crv)
        {
            LyrebirdCurve lbc = null;

            List<LyrebirdPoint> points = new List<LyrebirdPoint>();
            if (crv.IsLinear())
            {
                // standard linear element
                points.Add(new LyrebirdPoint(crv.PointAtStart.X, crv.PointAtStart.Y, crv.PointAtStart.Z));
                points.Add(new LyrebirdPoint(crv.PointAtEnd.X, crv.PointAtEnd.Y, crv.PointAtEnd.Z));
                lbc = new LyrebirdCurve(points, "Line");
            }
            else if (crv.IsCircle())
            {
                crv.Domain = new Interval(0, 1);
                points.Add(new LyrebirdPoint(crv.PointAtStart.X, crv.PointAtStart.Y, crv.PointAtStart.Z));
                points.Add(new LyrebirdPoint(crv.PointAt(0.25).X, crv.PointAt(0.25).Y, crv.PointAt(0.25).Z));
                points.Add(new LyrebirdPoint(crv.PointAt(0.5).X, crv.PointAt(0.5).Y, crv.PointAt(0.5).Z));
                points.Add(new LyrebirdPoint(crv.PointAt(0.75).X, crv.PointAt(0.75).Y, crv.PointAt(0.75).Z));
                points.Add(new LyrebirdPoint(crv.PointAtEnd.X, crv.PointAtEnd.Y, crv.PointAtEnd.Z));
                lbc = new LyrebirdCurve(points, "Circle");
            }
            else if (crv.IsArc())
            {
                crv.Domain = new Interval(0, 1);
                // standard arc element
                points.Add(new LyrebirdPoint(crv.PointAtStart.X, crv.PointAtStart.Y, crv.PointAtStart.Z));
                points.Add(new LyrebirdPoint(crv.PointAt(0.5).X, crv.PointAt(0.5).Y, crv.PointAt(0.5).Z));
                points.Add(new LyrebirdPoint(crv.PointAtEnd.X, crv.PointAtEnd.Y, crv.PointAtEnd.Z));
                lbc = new LyrebirdCurve(points, "Arc");
            }
            else
            {
                // Spline
                // Old line: if (crv.Degree >= 3)
                if (crv.Degree == 3)
                {
                    NurbsCurve nc = crv as NurbsCurve;
                    if (nc != null)
                    {
                        List<LyrebirdPoint> lbPoints = new List<LyrebirdPoint>();
                        List<double> weights = new List<double>();
                        List<double> knots = new List<double>();

                        foreach (ControlPoint cp in nc.Points)
                        {
                            LyrebirdPoint pt = new LyrebirdPoint(cp.Location.X, cp.Location.Y, cp.Location.Z);
                            double weight = cp.Weight;
                            lbPoints.Add(pt);
                            weights.Add(weight);
                        }
                        for (int k = 0; k < nc.Knots.Count; k++)
                        {
                            double knot = nc.Knots[k];
                            // Add a duplicate knot for the first and last knot in the Rhino curve.
                            // Revit needs 2 more knots than Rhino to define a spline.
                            if (k == 0 || k == nc.Knots.Count - 1)
                            {
                                knots.Add(knot);
                            }
                            knots.Add(knot);
                        }

                        lbc = new LyrebirdCurve(lbPoints, weights, knots, nc.Degree, nc.IsPeriodic) { CurveType = "Spline" };
                    }
                }
                else
                {
                    const double incr = 1.0 / 100;
                    List<LyrebirdPoint> pts = new List<LyrebirdPoint>();
                    List<double> weights = new List<double>();
                    for (int i = 0; i <= 100; i++)
                    {
                        Point3d pt = crv.PointAtNormalizedLength(i * incr);
                        LyrebirdPoint lbp = new LyrebirdPoint(pt.X, pt.Y, pt.Z);
                        weights.Add(1.0);
                        pts.Add(lbp);
                    }

                    lbc = new LyrebirdCurve(pts, "Spline") { Weights = weights, Degree = crv.Degree };
                }
            }

            return lbc;
        }
Exemple #2
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 #3
0
        protected override void DrawOverlay(Rhino.Display.DrawEventArgs e)
        {
            base.DrawOverlay(e);

            List <Guid> noDupGUIDs = new List <Guid>();


            for (int i = 0; i < Ids.Count; i++)
            {
                if (noDupGUIDs.Contains(Ids[i]))
                {
                }
                else
                {
                    noDupGUIDs.Add(Ids[i]);
                    RhinoObject foundObject = Rhino.RhinoDoc.ActiveDoc.Objects.Find(Ids[i]);
                    int         isSelected  = foundObject.IsSelected(false);

                    switch (foundObject.ObjectType)
                    {
                    case Rhino.DocObjects.ObjectType.Point:
                        if (isSelected > 0)
                        {
                            e.Display.DrawDot(((Rhino.Geometry.Point)foundObject.Geometry).Location, i.ToString(), System.Drawing.Color.Red, System.Drawing.Color.White);
                        }
                        else
                        {
                            e.Display.DrawDot(((Rhino.Geometry.Point)foundObject.Geometry).Location, i.ToString(), System.Drawing.Color.Black, System.Drawing.Color.White);
                        }
                        break;

                    case Rhino.DocObjects.ObjectType.Curve:
                        Rhino.Geometry.Curve myCurve = (Rhino.Geometry.Curve)foundObject.Geometry;
                        myCurve.Domain = new Rhino.Geometry.Interval(0, 1);
                        if (isSelected > 0)
                        {
                            e.Display.DrawDot(myCurve.PointAtNormalizedLength(0.5), i.ToString(), System.Drawing.Color.Red, System.Drawing.Color.White);
                        }
                        else
                        {
                            e.Display.DrawDot(myCurve.PointAtNormalizedLength(0.5), i.ToString(), System.Drawing.Color.Black, System.Drawing.Color.White);
                        }
                        break;

                    case Rhino.DocObjects.ObjectType.Extrusion:
                        Rhino.Geometry.Extrusion myExtru         = (Rhino.Geometry.Extrusion)foundObject.Geometry;
                        Rhino.Geometry.Point3d   myExtruLocation = myExtru.GetBoundingBox(true).Center;
                        //Rhino.Geometry.Point3d myExtruCentroid = Rhino.Geometry.AreaMassProperties.Compute(myExtru.ToBrep()).Centroid;
                        if (isSelected > 0)
                        {
                            e.Display.DrawDot(myExtruLocation, i.ToString(), System.Drawing.Color.Red, System.Drawing.Color.White);
                        }
                        else
                        {
                            e.Display.DrawDot(myExtruLocation, i.ToString(), System.Drawing.Color.Black, System.Drawing.Color.White);
                        }
                        break;

                    case Rhino.DocObjects.ObjectType.Brep:
                        Rhino.Geometry.Brep    myBrep         = (Rhino.Geometry.Brep)foundObject.Geometry;
                        Rhino.Geometry.Point3d myBrepLocation = myBrep.GetBoundingBox(true).Center;
                        if (isSelected > 0)
                        {
                            e.Display.DrawDot(myBrepLocation, i.ToString(), System.Drawing.Color.Red, System.Drawing.Color.White);
                        }
                        else
                        {
                            e.Display.DrawDot(myBrepLocation, i.ToString(), System.Drawing.Color.Black, System.Drawing.Color.White);
                        }
                        break;

                    case Rhino.DocObjects.ObjectType.Mesh:
                        var mesh = foundObject.Geometry as Rhino.Geometry.Mesh;
                        Rhino.Geometry.Point3d myMeshLocation = mesh.GetBoundingBox(true).Center;
                        if (isSelected > 0)
                        {
                            e.Display.DrawDot(myMeshLocation, i.ToString(), System.Drawing.Color.Red, System.Drawing.Color.White);
                        }
                        else
                        {
                            e.Display.DrawDot(myMeshLocation, i.ToString(), System.Drawing.Color.Black, System.Drawing.Color.White);
                        }
                        break;

                    case Rhino.DocObjects.ObjectType.TextDot:
                        var textDot = (TextDot)foundObject.Geometry;
                        break;

                    case Rhino.DocObjects.ObjectType.Annotation:
                        var textObj = (Rhino.Geometry.TextEntity)foundObject.Geometry;
                        break;
                    }
                }
            }

            Rhino.RhinoDoc.ActiveDoc.Views.Redraw();
        }
Exemple #4
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();
        }