Platonic and Archimedean Solids
Windows only

Demonstrates how to generate platonic and archimedean solids with RhinoScript.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Define geometry for rhombitruncated icosidodecahedron
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub RhombitruncatedIcosidodecahedron()

' Define the vertices
Dim arrVertices(119)
arrVertices(0)   = Array( 0.519,  0.280, -0.560)
arrVertices(1)   = Array( 0.214, -0.733,  0.280)
arrVertices(2)   = Array( 0.280, -0.214, -0.733)
arrVertices(3)   = Array( 0.107,  0.107,  0.799)
arrVertices(4)   = Array( 0.280,  0.214,  0.733)
arrVertices(5)   = Array( 0.453,  0.107, -0.667)
arrVertices(6)   = Array( 0.733, -0.280,  0.214)
arrVertices(7)   = Array( 0.280, -0.214,  0.733)
arrVertices(8)   = Array(-0.280, -0.560,  0.519)
arrVertices(9)   = Array( 0.107, -0.107,  0.799)
arrVertices(10)  = Array(-0.560, -0.519,  0.280)
arrVertices(11)  = Array(-0.280,  0.560, -0.519)
arrVertices(12)  = Array( 0.214,  0.733, -0.280)
arrVertices(13)  = Array( 0.519, -0.280,  0.560)
arrVertices(14)  = Array(-0.667,  0.453, -0.107)
arrVertices(15)  = Array( 0.799, -0.107,  0.107)
arrVertices(16)  = Array(-0.107, -0.667,  0.453)
arrVertices(17)  = Array(-0.107,  0.107,  0.799)
arrVertices(18)  = Array( 0.107,  0.799,  0.107)
arrVertices(19)  = Array(-0.453,  0.107, -0.667)
arrVertices(20)  = Array(-0.280, -0.560, -0.519)
arrVertices(21)  = Array( 0.214, -0.733, -0.280)
arrVertices(22)  = Array( 0.346,  0.387,  0.626)
arrVertices(23)  = Array( 0.560, -0.519, -0.280)
arrVertices(24)  = Array(-0.107, -0.107,  0.799)
arrVertices(25)  = Array( 0.280, -0.560,  0.519)
arrVertices(26)  = Array(-0.107, -0.799,  0.107)
arrVertices(27)  = Array( 0.280,  0.560,  0.519)
arrVertices(28)  = Array(-0.799, -0.107,  0.107)
arrVertices(29)  = Array( 0.626, -0.346, -0.387)
arrVertices(30)  = Array(-0.667, -0.453, -0.107)
arrVertices(31)  = Array( 0.519,  0.280,  0.560)
arrVertices(32)  = Array( 0.560, -0.519,  0.280)
arrVertices(33)  = Array(-0.346,  0.387,  0.626)
arrVertices(34)  = Array(-0.346,  0.387, -0.626)
arrVertices(35)  = Array(-0.453, -0.107, -0.667)
arrVertices(36)  = Array(-0.560,  0.519,  0.280)
arrVertices(37)  = Array(-0.107,  0.799, -0.107)
arrVertices(38)  = Array(-0.519,  0.280,  0.560)
arrVertices(39)  = Array(-0.519, -0.280, -0.560)
arrVertices(40)  = Array(-0.453,  0.107,  0.667)
arrVertices(41)  = Array(-0.387,  0.626,  0.346)
arrVertices(42)  = Array(-0.346, -0.387,  0.626)
arrVertices(43)  = Array(-0.107,  0.667,  0.453)
arrVertices(44)  = Array(-0.733,  0.280, -0.214)
arrVertices(45)  = Array(-0.519, -0.280,  0.560)
arrVertices(46)  = Array(-0.107, -0.799, -0.107)
arrVertices(47)  = Array( 0.387, -0.626, -0.346)
arrVertices(48)  = Array( 0.733,  0.280, -0.214)
arrVertices(49)  = Array(-0.214,  0.733, -0.280)
arrVertices(50)  = Array(-0.107,  0.107, -0.799)
arrVertices(51)  = Array( 0.733,  0.280,  0.214)
arrVertices(52)  = Array( 0.667,  0.453,  0.107)
arrVertices(53)  = Array( 0.107, -0.799, -0.107)
arrVertices(54)  = Array( 0.667, -0.453,  0.107)
arrVertices(55)  = Array( 0.107,  0.799, -0.107)
arrVertices(56)  = Array(-0.346, -0.387, -0.626)
arrVertices(57)  = Array( 0.733, -0.280, -0.214)
arrVertices(58)  = Array(-0.280, -0.214,  0.733)
arrVertices(59)  = Array(-0.667,  0.453,  0.107)
arrVertices(60)  = Array( 0.346, -0.387,  0.626)
arrVertices(61)  = Array(-0.733,  0.280,  0.214)
arrVertices(62)  = Array( 0.214,  0.733,  0.280)
arrVertices(63)  = Array( 0.453, -0.107, -0.667)
arrVertices(64)  = Array( 0.107, -0.667,  0.453)
arrVertices(65)  = Array(-0.626, -0.346,  0.387)
arrVertices(66)  = Array(-0.667, -0.453,  0.107)
arrVertices(67)  = Array( 0.107, -0.107, -0.799)
arrVertices(68)  = Array(-0.626,  0.346,  0.387)
arrVertices(69)  = Array( 0.560,  0.519,  0.280)
arrVertices(70)  = Array(-0.214,  0.733,  0.280)
arrVertices(71)  = Array(-0.733, -0.280,  0.214)
arrVertices(72)  = Array(-0.107,  0.667, -0.453)
arrVertices(73)  = Array( 0.626,  0.346, -0.387)
arrVertices(74)  = Array( 0.667,  0.453, -0.107)
arrVertices(75)  = Array(-0.733, -0.280, -0.214)
arrVertices(76)  = Array( 0.626, -0.346,  0.387)
arrVertices(77)  = Array( 0.346,  0.387, -0.626)
arrVertices(78)  = Array(-0.214, -0.733,  0.280)
arrVertices(79)  = Array(-0.519,  0.280, -0.560)
arrVertices(80)  = Array(-0.626,  0.346, -0.387)
arrVertices(81)  = Array( 0.560,  0.519, -0.280)
arrVertices(82)  = Array(-0.387,  0.626, -0.346)
arrVertices(83)  = Array( 0.107, -0.799,  0.107)
arrVertices(84)  = Array( 0.453, -0.107,  0.667)
arrVertices(85)  = Array(-0.280,  0.560,  0.519)
arrVertices(86)  = Array( 0.799, -0.107, -0.107)
arrVertices(87)  = Array(-0.626, -0.346, -0.387)
arrVertices(88)  = Array( 0.667, -0.453, -0.107)
arrVertices(89)  = Array( 0.387,  0.626, -0.346)
arrVertices(90)  = Array(-0.799,  0.107, -0.107)
arrVertices(91)  = Array(-0.560,  0.519, -0.280)
arrVertices(92)  = Array(-0.107, -0.667, -0.453)
arrVertices(93)  = Array( 0.107, -0.667, -0.453)
arrVertices(94)  = Array( 0.280,  0.214, -0.733)
arrVertices(95)  = Array(-0.799, -0.107, -0.107)
arrVertices(96)  = Array( 0.387,  0.626,  0.346)
arrVertices(97)  = Array( 0.387, -0.626,  0.346)
arrVertices(98)  = Array( 0.799,  0.107,  0.107)
arrVertices(99)  = Array( 0.107,  0.667, -0.453)
arrVertices(100) = Array(-0.280,  0.214,  0.733)
arrVertices(101) = Array(-0.280,  0.214, -0.733)
arrVertices(102) = Array(-0.214, -0.733, -0.280)
arrVertices(103) = Array( 0.280,  0.560, -0.519)
arrVertices(104) = Array( 0.107,  0.107, -0.799)
arrVertices(105) = Array( 0.626,  0.346,  0.387)
arrVertices(106) = Array(-0.560, -0.519, -0.280)
arrVertices(107) = Array( 0.799,  0.107, -0.107)
arrVertices(108) = Array(-0.280, -0.214, -0.733)
arrVertices(109) = Array( 0.346, -0.387, -0.626)
arrVertices(110) = Array(-0.387, -0.626, -0.346)
arrVertices(111) = Array( 0.453,  0.107,  0.667)
arrVertices(112) = Array( 0.280, -0.560, -0.519)
arrVertices(113) = Array( 0.107,  0.667,  0.453)
arrVertices(114) = Array(-0.799,  0.107,  0.107)
arrVertices(115) = Array(-0.107, -0.107, -0.799)
arrVertices(116) = Array(-0.107,  0.799,  0.107)
arrVertices(117) = Array(-0.387, -0.626,  0.346)
arrVertices(118) = Array( 0.519, -0.280, -0.560)
arrVertices(119) = Array(-0.453, -0.107,  0.667)

'Define the faces
Dim arrFaces(61)
arrFaces(0)  = Array(47,23,88,54,32,97,1,83,53,21)
arrFaces(1)  = Array(84,111,4,3,9,7)
arrFaces(2)  = Array(76,6,54,32)
arrFaces(3)  = Array(24,9,3,17)
arrFaces(4)  = Array(18,62,96,69,52,74,81,89,12,55)
arrFaces(5)  = Array(35,39,87,75,95,90,44,80,79,19)
arrFaces(6)  = Array(8,16,78,117)
arrFaces(7)  = Array(8,42,45,65,10,117)
arrFaces(8)  = Array(7,60,13,84)
arrFaces(9)  = Array(114,90,44,14,59,61)
arrFaces(10) = Array(5,0,73,48,107,86,57,29,118,63)
arrFaces(11) = Array(77,94,104,50,101,34,11,72,99,103)
arrFaces(12) = Array(4,22,31,111)
arrFaces(13) = Array(49,37,55,12,99,72)
arrFaces(14) = Array(6,76,13,84,111,31,105,51,98,15)
arrFaces(15) = Array(100,33,38,40)
arrFaces(16) = Array(18,55,37,116)
arrFaces(17) = Array(43,70,41,85)
arrFaces(18) = Array(58,42,45,119)
arrFaces(19) = Array(105,31,22,27,96,69)
arrFaces(20) = Array(21,47,112,93)
arrFaces(21) = Array(105,51,52,69)
arrFaces(22) = Array(28,71,65,45,119,40,38,68,61,114)
arrFaces(23) = Array(15,86,107,98)
arrFaces(24) = Array(68,61,59,36)
arrFaces(25) = Array(93,92,102,46,53,21)
arrFaces(26) = Array(114,28,95,90)
arrFaces(27) = Array(65,71,66,10)
arrFaces(28) = Array(28,95,75,30,66,71)
arrFaces(29) = Array(113,62,96,27)
arrFaces(30) = Array(74,81,73,48)
arrFaces(31) = Array(89,103,77,0,73,81)
arrFaces(32) = Array(76,13,60,25,97,32)
arrFaces(33) = Array(14,91,80,44)
arrFaces(34) = Array(16,8,42,58,24,9,7,60,25,64)
arrFaces(35) = Array(23,29,118,109,112,47)
arrFaces(36) = Array(30,106,87,75)
arrFaces(37) = Array(43,85,33,100,17,3,4,22,27,113)
arrFaces(38) = Array(82,49,37,116,70,41,36,59,14,91)
arrFaces(39) = Array(0,5,94,77)
arrFaces(40) = Array(93,112,109,2,67,115,108,56,20,92)
arrFaces(41) = Array(74,52,51,98,107,48)
arrFaces(42) = Array(79,19,101,34)
arrFaces(43) = Array(25,64,1,97)
arrFaces(44) = Array(12,89,103,99)
arrFaces(45) = Array(39,35,108,56)
arrFaces(46) = Array(19,101,50,115,108,35)
arrFaces(47) = Array(64,1,83,26,78,16)
arrFaces(48) = Array(104,50,115,67)
arrFaces(49) = Array(110,102,46,26,78,117,10,66,30,106)
arrFaces(50) = Array(113,62,18,116,70,43)
arrFaces(51) = Array(118,63,2,109)
arrFaces(52) = Array(5,94,104,67,2,63)
arrFaces(53) = Array(100,17,24,58,119,40)
arrFaces(54) = Array(49,82,11,72)
arrFaces(55) = Array(91,80,79,34,11,82)
arrFaces(56) = Array(83,53,46,26)
arrFaces(57) = Array(102,110,20,92)
arrFaces(58) = Array(106,87,39,56,20,110)
arrFaces(59) = Array(85,41,36,68,38,33)
arrFaces(60) = Array(88,23,29,57)
arrFaces(61) = Array(6,54,88,57,86,15)

' Create the solid
CreateSolid arrVertices, arrFaces
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Define geometry for truncated tetrahedron
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub TruncatedTetrahedron()
' Define the vertices
Dim arrVertices(11)
arrVertices(0)  = Array(-0.347, 0.000,-0.735)
arrVertices(1)  = Array(-0.693,-0.347,-0.245)
arrVertices(2)  = Array( 0.347, 0.693, 0.245)
arrVertices(3)  = Array( 0.000, 0.347, 0.735)
arrVertices(4)  = Array( 0.693, 0.347,-0.245)
arrVertices(5)  = Array(-0.347,-0.693, 0.245)
arrVertices(6)  = Array( 0.347, 0.000,-0.735)
arrVertices(7)  = Array( 0.347,-0.693, 0.245)
arrVertices(8)  = Array( 0.693,-0.347,-0.245)
arrVertices(9)  = Array( 0.000,-0.347, 0.735)
arrVertices(10) = Array(-0.347, 0.693, 0.245)
arrVertices(11) = Array(-0.693, 0.347,-0.245)

'Define the faces
Dim arrFaces(7)
arrFaces(0) = Array(9,5,7)
arrFaces(1) = Array(6,4,8)
arrFaces(2) = Array(10,11,0,6,4,2)
arrFaces(3) = Array(4,2,3,9,7,8)
arrFaces(4) = Array(1,11,0)
arrFaces(5) = Array(10,3,2)
arrFaces(6) = Array(6,0,1,5,7,8)
arrFaces(7) = Array(5,1,11,10,3,9)

' Create the solid
CreateSolid arrVertices, arrFaces
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''
' General purpose subroutine to create solids
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub CreateSolid(arrVertices, arrFaces)
Dim arrSurfaces()
ReDim arrSurfaces(UBound(arrFaces))
Rhino.EnableRedraw False

' Create each face
Dim i, j, arrFace, arrPoints(), strPolyline, arrPlanarSrf
For i = 0 To UBound(arrFaces)
arrFace = arrFaces(i)
ReDim arrPoints(UBound(arrFace) + 1)
For j = 0 To UBound(arrFace)
arrPoints(j) = arrVertices(arrFace(j))
Next
arrPoints(UBound(arrFace) + 1) = arrPoints(0)