// 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); }
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(); }
/***************************************************/ /**** Public Methods - Surfaces ****/ /***************************************************/ public static RHG.Mesh CreatePreviewMesh(RHG.Extrusion surface, RHG.MeshingParameters parameters) { return(CreatePreviewMesh(surface.ToBrep(), parameters)); }
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(); }