
Option Explicit
'Script written by Natasha Harper
'Script version Friday, March 07, 2008 10:09:37 AM
Call Main()
Sub Main()
Call Rhino.AddLayer("New Triangles", RGB(255, 0, 0))
Rhino.CurrentLayer ("New Triangles")
arrTri = Rhino.GetObjects("Select triangles", 4)
Dim tript00,tript01,tript02, curve1, curve2, curve3, arrCVPoints
Dim arrTri, tri, arrArea, area, arrCP, triCP, arrPolypoints1, arrPolypoints2, arrPolypoints3
Dim LengthA, LengthB, LengthC, AMidPt, BMidPt, CMidPt
For Each tri In arrTri
arrArea = Rhino.CurveArea(tri)
area =(arrArea(0))
Dim triCoord : triCoord = Rhino.PolylineVertices (tri)
Dim distanceA : distanceA = Rhino.Distance(triCoord(0), triCoord(1))
Dim distanceB : distanceB = Rhino.Distance(triCoord(1), triCoord(2))
Dim distanceC : distanceC = Rhino.Distance(triCoord(2), triCoord(0))
LengthA = Rhino.AddLine(triCoord(0), triCoord(1))
LengthB = Rhino.AddLine(triCoord(1), triCoord(2))
LengthC = Rhino.AddLine(triCoord(2), triCoord(0))
AMidPt = Rhino.CurveMidPoint (LengthA)
BMidPt = Rhino.CurveMidPoint (LengthB)
CMidPt = Rhino.CurveMidPoint (LengthC)
If isNull(tri) Then
Call rhino. print("Error")
ElseIf area > 1000 And (distanceA < .5*distanceB Or distanceC < .5*distanceC) Then Dim arrShortSideA : arrShortSideA = Array(triCoord(2),BMidPt, CMidPt, triCoord(2)) Call Rhino.AddPolyline(arrShortSideA) Dim arrQuadA : arrQuadA = Array(triCoord(0), triCoord(1), BMidPt, CMidPt, TriCoord(0)) Dim polyQuadA : polyQuadA = Rhino.AddPolyline (arrQuadA) Dim QuadCenterA : QuadCenterA = Rhino.CurveAreaCentroid(polyQuadA) Dim arrQuad1A : arrQuad1A = array(triCoord(1), BMidPt, QuadCenterA(0), triCoord(1)) Dim arrQuad2A : arrQuad2A = Array(BMidPt, CMidPt, QuadCenterA(0), BMidPt) Dim arrQuad3A : arrQuad3A = Array(CMidPt, triCoord(0), QuadCenterA(0), CMidPt) Dim arrQuad4A : arrQuad4A = Array(triCoord(0), triCoord(1), QuadCenterA(0), triCoord(0)) Call Rhino.AddPolyline (arrQuad1A) Call Rhino.AddPolyline (arrQuad2A) Call Rhino.AddPolyline (arrQuad3A) Call Rhino.AddPolyline (arrQuad4A) Call Rhino.DeleteObject (polyQuadA) Call Rhino.DeleteObject (tri) ElseIf area > 1000 And (distanceB < .5* distanceA Or distanceC < .5*distanceC) Then Dim arrShortSideB : arrShortSideB = Array(triCoord(0),AMidPt, CMidPt, triCoord(0)) Call Rhino.AddPolyline(arrShortSideB) Dim arrQuadB : arrQuadB = Array(triCoord(1), triCoord(2), CMidPt, AMidPt, triCoord(1)) Dim polyQuadB : polyQuadB = Rhino.AddPolyline (arrQuadB) Dim QuadCenterB : QuadCenterB = Rhino.CurveAreaCentroid(polyQuadB) Dim arrQuad1B : arrQuad1B = Array(triCoord(1), triCoord(2), QuadCenterB(0), triCoord(1)) Dim arrQuad2B : arrQuad2B = Array(triCoord(2), CMidPt, QuadCenterB(0), triCoord(2)) Dim arrQuad3B : arrQuad3B = Array(CMidPt, AMidPt, QuadCenterB(0), CMidPt) Dim arrQuad4B : arrQuad4B = Array(AMidPt, triCoord(1), QuadCenterB(0), AMidPt) Call Rhino.AddPolyline (arrQuad1B) Call Rhino.AddPolyline (arrQuad2B) Call Rhino.AddPolyline (arrQuad3B) Call Rhino.AddPolyline (arrQuad4B) Call Rhino.DeleteObject (polyQuadB) Call Rhino.DeleteObject (tri) ElseIf area > 1000 And (distanceC < .5* distanceA Or distanceB < .5*distanceC) Then Dim arrShortSideC : arrShortSideC = Array(triCoord(1),AMidPt, BMidPt, triCoord(1)) Call Rhino.AddPolyline(arrShortSideC) Dim arrQuadC : arrQuadC = Array(triCoord(0), AMidPt, BMidPt, TriCoord(2), triCoord(0)) Dim polyQuadC : polyQuadC = Rhino.AddPolyline (arrQuadC) Dim QuadCenterC : QuadCenterC = Rhino.CurveAreaCentroid(polyQuadC) Dim arrQuad1C : arrQuad1C = Array(triCoord(2), triCoord(0), QuadCenterC(0), triCoord(2)) Dim arrQuad2C : arrQuad2C = Array(triCoord(0), AMidPt, QuadCenterC(0), triCoord(0)) Dim arrQuad3C : arrQuad3C = Array(AMidPt, BMidPt, QuadCenterC(0), AMidPt) Dim arrQuad4C : arrQuad4C = Array(BMidPt, triCoord(2), QuadCenterC(0), BMidPt) Call Rhino.AddPolyline (arrQuad1C) Call Rhino.AddPolyline (arrQuad2C) Call Rhino.AddPolyline (arrQuad3C) Call Rhino.AddPolyline (arrQuad4C) Call Rhino.DeleteObject (polyQuadC) Call Rhino.DeleteObject (tri) ElseIf area > 2000 Then
'Rhino.ObjectLayer (tri), "New Triangles"
arrCvPoints = Rhino.PolylineVertices (tri)
triCP = Rhino.CurveAreaCentroid(tri)
arrCP = Rhino.AddPoints (triCP)
arrPolypoints1 = array(arrCVPoints(0),arrCVPoints(1), triCP(0), arrCVPoints(0))
arrPolypoints2 = array(arrCVPoints(1),arrCVPoints(2), triCP(0), arrCVPoints(1))
arrPolypoints3 = array(arrCVPoints(2),arrCVPoints(0), triCP(0), arrCVPoints(2))
Call Rhino.AddPolyline (arrPolypoints1)
Call Rhino.AddPolyline (arrPolypoints2)
Call Rhino.AddPolyline (arrPolypoints3)
Call Rhino.DeleteObject (tri)
End If
Call Rhino.DeleteObject (LengthA)
Call Rhino.DeleteObject (LengthB)
Call Rhino.DeleteObject (LengthC)
Next
End Sub
'Script written by Natasha Harper
'Script version Friday, March 07, 2008 10:09:37 AM
Call Main()
Sub Main()
Call Rhino.AddLayer("New Triangles", RGB(255, 0, 0))
Rhino.CurrentLayer ("New Triangles")
arrTri = Rhino.GetObjects("Select triangles", 4)
Dim tript00,tript01,tript02, curve1, curve2, curve3, arrCVPoints
Dim arrTri, tri, arrArea, area, arrCP, triCP, arrPolypoints1, arrPolypoints2, arrPolypoints3
Dim LengthA, LengthB, LengthC, AMidPt, BMidPt, CMidPt
For Each tri In arrTri
arrArea = Rhino.CurveArea(tri)
area =(arrArea(0))
Dim triCoord : triCoord = Rhino.PolylineVertices (tri)
Dim distanceA : distanceA = Rhino.Distance(triCoord(0), triCoord(1))
Dim distanceB : distanceB = Rhino.Distance(triCoord(1), triCoord(2))
Dim distanceC : distanceC = Rhino.Distance(triCoord(2), triCoord(0))
LengthA = Rhino.AddLine(triCoord(0), triCoord(1))
LengthB = Rhino.AddLine(triCoord(1), triCoord(2))
LengthC = Rhino.AddLine(triCoord(2), triCoord(0))
AMidPt = Rhino.CurveMidPoint (LengthA)
BMidPt = Rhino.CurveMidPoint (LengthB)
CMidPt = Rhino.CurveMidPoint (LengthC)
If isNull(tri) Then
Call rhino. print("Error")
ElseIf area > 1000 And (distanceA < .5*distanceB Or distanceC < .5*distanceC) Then Dim arrShortSideA : arrShortSideA = Array(triCoord(2),BMidPt, CMidPt, triCoord(2)) Call Rhino.AddPolyline(arrShortSideA) Dim arrQuadA : arrQuadA = Array(triCoord(0), triCoord(1), BMidPt, CMidPt, TriCoord(0)) Dim polyQuadA : polyQuadA = Rhino.AddPolyline (arrQuadA) Dim QuadCenterA : QuadCenterA = Rhino.CurveAreaCentroid(polyQuadA) Dim arrQuad1A : arrQuad1A = array(triCoord(1), BMidPt, QuadCenterA(0), triCoord(1)) Dim arrQuad2A : arrQuad2A = Array(BMidPt, CMidPt, QuadCenterA(0), BMidPt) Dim arrQuad3A : arrQuad3A = Array(CMidPt, triCoord(0), QuadCenterA(0), CMidPt) Dim arrQuad4A : arrQuad4A = Array(triCoord(0), triCoord(1), QuadCenterA(0), triCoord(0)) Call Rhino.AddPolyline (arrQuad1A) Call Rhino.AddPolyline (arrQuad2A) Call Rhino.AddPolyline (arrQuad3A) Call Rhino.AddPolyline (arrQuad4A) Call Rhino.DeleteObject (polyQuadA) Call Rhino.DeleteObject (tri) ElseIf area > 1000 And (distanceB < .5* distanceA Or distanceC < .5*distanceC) Then Dim arrShortSideB : arrShortSideB = Array(triCoord(0),AMidPt, CMidPt, triCoord(0)) Call Rhino.AddPolyline(arrShortSideB) Dim arrQuadB : arrQuadB = Array(triCoord(1), triCoord(2), CMidPt, AMidPt, triCoord(1)) Dim polyQuadB : polyQuadB = Rhino.AddPolyline (arrQuadB) Dim QuadCenterB : QuadCenterB = Rhino.CurveAreaCentroid(polyQuadB) Dim arrQuad1B : arrQuad1B = Array(triCoord(1), triCoord(2), QuadCenterB(0), triCoord(1)) Dim arrQuad2B : arrQuad2B = Array(triCoord(2), CMidPt, QuadCenterB(0), triCoord(2)) Dim arrQuad3B : arrQuad3B = Array(CMidPt, AMidPt, QuadCenterB(0), CMidPt) Dim arrQuad4B : arrQuad4B = Array(AMidPt, triCoord(1), QuadCenterB(0), AMidPt) Call Rhino.AddPolyline (arrQuad1B) Call Rhino.AddPolyline (arrQuad2B) Call Rhino.AddPolyline (arrQuad3B) Call Rhino.AddPolyline (arrQuad4B) Call Rhino.DeleteObject (polyQuadB) Call Rhino.DeleteObject (tri) ElseIf area > 1000 And (distanceC < .5* distanceA Or distanceB < .5*distanceC) Then Dim arrShortSideC : arrShortSideC = Array(triCoord(1),AMidPt, BMidPt, triCoord(1)) Call Rhino.AddPolyline(arrShortSideC) Dim arrQuadC : arrQuadC = Array(triCoord(0), AMidPt, BMidPt, TriCoord(2), triCoord(0)) Dim polyQuadC : polyQuadC = Rhino.AddPolyline (arrQuadC) Dim QuadCenterC : QuadCenterC = Rhino.CurveAreaCentroid(polyQuadC) Dim arrQuad1C : arrQuad1C = Array(triCoord(2), triCoord(0), QuadCenterC(0), triCoord(2)) Dim arrQuad2C : arrQuad2C = Array(triCoord(0), AMidPt, QuadCenterC(0), triCoord(0)) Dim arrQuad3C : arrQuad3C = Array(AMidPt, BMidPt, QuadCenterC(0), AMidPt) Dim arrQuad4C : arrQuad4C = Array(BMidPt, triCoord(2), QuadCenterC(0), BMidPt) Call Rhino.AddPolyline (arrQuad1C) Call Rhino.AddPolyline (arrQuad2C) Call Rhino.AddPolyline (arrQuad3C) Call Rhino.AddPolyline (arrQuad4C) Call Rhino.DeleteObject (polyQuadC) Call Rhino.DeleteObject (tri) ElseIf area > 2000 Then
'Rhino.ObjectLayer (tri), "New Triangles"
arrCvPoints = Rhino.PolylineVertices (tri)
triCP = Rhino.CurveAreaCentroid(tri)
arrCP = Rhino.AddPoints (triCP)
arrPolypoints1 = array(arrCVPoints(0),arrCVPoints(1), triCP(0), arrCVPoints(0))
arrPolypoints2 = array(arrCVPoints(1),arrCVPoints(2), triCP(0), arrCVPoints(1))
arrPolypoints3 = array(arrCVPoints(2),arrCVPoints(0), triCP(0), arrCVPoints(2))
Call Rhino.AddPolyline (arrPolypoints1)
Call Rhino.AddPolyline (arrPolypoints2)
Call Rhino.AddPolyline (arrPolypoints3)
Call Rhino.DeleteObject (tri)
End If
Call Rhino.DeleteObject (LengthA)
Call Rhino.DeleteObject (LengthB)
Call Rhino.DeleteObject (LengthC)
Next
End Sub








