WARNING: You're viewing the Rhino WIP version of this page! View the current version instead.

Unroll Surface and Mesh

Unroll developable surface and associated mesh

partial class Examples
  public static Rhino.Commands.Result UnrollSurface2(Rhino.RhinoDoc doc)
    const ObjectType filter = Rhino.DocObjects.ObjectType.Brep | Rhino.DocObjects.ObjectType.Surface;
    Rhino.DocObjects.ObjRef objref;
    Result rc = Rhino.Input.RhinoGet.GetOneObject("Select surface or brep to unroll", false, filter, out objref);
    if (rc != Rhino.Commands.Result.Success)
      return rc;
    Rhino.Geometry.Unroller unroll=null;
    Rhino.Geometry.Brep brep = objref.Brep();
    Rhino.Geometry.Mesh mesh=null;
    if (brep != null)
      unroll = new Rhino.Geometry.Unroller(brep);
      mesh = brep.Faces[0].GetMesh(Rhino.Geometry.MeshType.Render);
      Rhino.Geometry.Surface srf = objref.Surface();
      if (srf != null)
        unroll = new Rhino.Geometry.Unroller(srf);
    if (unroll == null || mesh==null)
      return Rhino.Commands.Result.Cancel;


    unroll.ExplodeOutput = false;
    Rhino.Geometry.Curve[] curves;
    Rhino.Geometry.Point3d[] points;
    Rhino.Geometry.TextDot[] dots;
    unroll.PerformUnroll(out curves, out points, out dots);

    // change the mesh vertices to the flattened form and add it to the document
    if( points.Length == mesh.Vertices.Count )
      for( int i=0; i<points.Length; i++ )
        mesh.Vertices.SetVertex(i, points[i]);
    doc.Objects.AddMesh(mesh, objref.Object().Attributes);
    return Rhino.Commands.Result.Success;
Partial Friend Class Examples
  Public Shared Function UnrollSurface2(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
	Const filter As ObjectType = Rhino.DocObjects.ObjectType.Brep Or Rhino.DocObjects.ObjectType.Surface
	Dim objref As Rhino.DocObjects.ObjRef = Nothing
	Dim rc As Result = Rhino.Input.RhinoGet.GetOneObject("Select surface or brep to unroll", False, filter, objref)
	If rc IsNot Rhino.Commands.Result.Success Then
	  Return rc
	End If
	Dim unroll As Rhino.Geometry.Unroller=Nothing
	Dim brep As Rhino.Geometry.Brep = objref.Brep()
	Dim mesh As Rhino.Geometry.Mesh=Nothing
	If brep IsNot Nothing Then
	  unroll = New Rhino.Geometry.Unroller(brep)
	  mesh = brep.Faces(0).GetMesh(Rhino.Geometry.MeshType.Render)
	  Dim srf As Rhino.Geometry.Surface = objref.Surface()
	  If srf IsNot Nothing Then
		unroll = New Rhino.Geometry.Unroller(srf)
	  End If
	End If
	If unroll Is Nothing OrElse mesh Is Nothing Then
	  Return Rhino.Commands.Result.Cancel
	End If


	unroll.ExplodeOutput = False
	Dim curves() As Rhino.Geometry.Curve = Nothing
	Dim points() As Rhino.Geometry.Point3d = Nothing
	Dim dots() As Rhino.Geometry.TextDot = Nothing
	unroll.PerformUnroll(curves, points, dots)

	' change the mesh vertices to the flattened form and add it to the document
	If points.Length = mesh.Vertices.Count Then
	  For i As Integer = 0 To points.Length - 1
		mesh.Vertices.SetVertex(i, points(i))
	  Next i
	End If
	doc.Objects.AddMesh(mesh, objref.Object().Attributes)
	Return Rhino.Commands.Result.Success
  End Function
End Class
import Rhino
import scriptcontext

def UnrollSurface2():
    filter = Rhino.DocObjects.ObjectType.Brep | Rhino.DocObjects.ObjectType.Surface
    rc, objref = Rhino.Input.RhinoGet.GetOneObject("Select surface or brep to unroll", False, filter)
    if rc!=Rhino.Commands.Result.Success: return rc;

    unroll = Rhino.Geometry.Unroller(objref.Geometry())
    mesh = objref.Brep().Faces[0].GetMesh(0)
    if not mesh: return Rhino.Commands.Result.Cancel

    unroll.ExplodeOutput = False
    breps, curves, points, dots = unroll.PerformUnroll()
    # change the mesh vertices to the flattened form and add it to the document
    if points.Length==mesh.Vertices.Count:
        for i, point in enumerate(points): mesh.Vertices.SetVertex(i, point)
    scriptcontext.doc.Objects.AddMesh(mesh, objref.Object().Attributes)
    return Rhino.Commands.Result.Success

if __name__=="__main__":