Option Explicit 'script "wireframe triangulation" - triangulates surfaces by their wireframes including direction preview 'script written by quirin krumbholz 'script copyrighted by quirin krumbholz 'script link - www.ovion.de 'script version 1.0, date 080213 Call main() Sub main() Dim surface, arrWires, bound, brepCurve, cmd, cutter, field, part Dim uv0, uv1, uvDirection, uvValues, uvResult Dim tr0Point, tr1Point, tr2Point, tr3Point Dim trtest0Point, trtest1Point, uvtest0, uvtest1 Dim prev0Point, prev1Point, prev2Point, prev3Point, prevPoints Dim input, inputResult '-> prompts for a surface to triangulate' surface = Rhino.GetObject ("select surface to triangulate", 8) input = Array("toggle", "yes", "no") inputResult = Rhino.GetBoolean ("delete input?", input, Array(True)) Call Rhino.enableRedraw(False) If inputResult(0) = True Then Rhino.CopyObject surface Else End If '-> generates preview curve for triangulation direction' Rhino.SelectObject (surface) Dim u, v, i, uvPoint Dim arrParam() Dim pointArr() Dim testCurve u = Rhino.SurfaceDomain(surface, 0) v = Rhino.SurfaceDomain(surface, 1) For i = 0 To 20 ReDim Preserve arrParam(1) arrParam(0) = u(0) + (((u(1) - u(0)) /20)*i) arrParam(1) = v(0) + (((v(1) - v(0)) /20)*i) uvPoint = Rhino.EvaluateSurface(surface, arrParam) ReDim Preserve pointArr(i) pointArr(i) = uvPoint Next If IsArray(pointArr) Then testCurve = Rhino.AddCurve (pointArr, 3) End If Rhino.UnselectAllObjects Rhino.SelectObject (testCurve) '-> prompts for selection of tiling direction' Call Rhino.enableRedraw(True) uvValues = Array("toggle", "current", "flip") uvResult = Rhino.GetBoolean ("tiling direction preview", uvValues, Array(True)) Call Rhino.enableRedraw(False) '-> surface preparation for triangulation' Rhino.DeleteObject (testCurve) 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) '-> triangulation' If IsArray(field) Then bound = UBound(field) For part = 0 To bound Rhino.ShrinkTrimmedSurface (field(part)) Rhino.Command "_Reparameterize 0 1 0 1" uv0 = 0 uv1 = 1 tr0Point = Rhino.EvaluateSurface(field(part), Array(uv0, uv0)) tr1Point = Rhino.EvaluateSurface(field(part), Array(uv1, uv0)) tr2Point = Rhino.EvaluateSurface(field(part), Array(uv0, uv1)) tr3Point = Rhino.EvaluateSurface(field(part), Array(uv1, uv1)) If uvResult(0) = True Then Rhino.AddSrfPt Array(tr3Point, tr0Point, tr1Point) Rhino.AddSrfPt Array(tr0Point, tr2Point, tr3Point) Else Rhino.AddSrfPt Array(tr0Point, tr1Point, tr2Point) Rhino.AddSrfPt Array(tr1Point, tr2Point, tr3Point) End If Rhino.DeleteObject (field(part)) Next Call Rhino.enableRedraw(True) End If End If End Sub