Option Explicit 'script "flat wireframe tesselation" - tesselates a surface according to its wireframe in flat panels 'script written by quirin krumbholz 'script copyright by quirin krumbholz 'script link - www.ovion.de 'script version 1.0, date 080115 Call main Sub main() Dim surface, plane, field, i, arrWires, bound, arrPlane Dim Point00, Point01, Point10, Point11, Points, centerPoint, surfNormal, localCplane surface = Rhino.GetObject("Select surface to flatten panels", 8) Call Rhino.enableRedraw(False) Rhino.SelectObject (surface) Rhino.command "_ExtractWireframe" arrWires = Rhino.SelectedObjects If IsArray(arrWires) Then Rhino.SelectObjects (arrWires) Rhino.UnselectAllObjects Rhino.SelectObject (surface) Rhino.Command "_Split _SelLast _Enter" field = Rhino.SelectedObjects Rhino.DeleteObjects (arrWires) Else Exit Sub End If If IsArray(field) Then bound = UBound(field) For i = 0 To bound Rhino.UnselectAllObjects Rhino.SelectObject field(i) Rhino.ShrinkTrimmedSurface field(i) Rhino.Command "_Reparameterize 0 1 0 1" centerPoint = Rhino.EvaluateSurface(field(i), Array(0.5, 0.5)) surfNormal = Rhino.SurfaceNormal(field(i), Array(0.5, 0.5)) Rhino.ViewCPlane, Rhino.PlaneFromNormal (centerPoint, surfNormal) Rhino.command "projecttocplane y" Point00 = Rhino.EvaluateSurface(field(i), Array(0, 0)) Point01 = Rhino.EvaluateSurface(field(i), Array(0, 1)) Point10 = Rhino.EvaluateSurface(field(i), Array(1, 0)) Point11 = Rhino.EvaluateSurface(field(i), Array(1, 1)) Points = Array(Point00, Point01, Point10, Point11) Rhino.DeleteObject field(i) Rhino.AddSrfPt Points Rhino.UnselectObject field(i) Next Call Rhino.enableRedraw(True) Rhino.command"cplane w t" End If End Sub