Developer: RhinoScript
Summary: Demonstrates how to generate platonic and archimedean solids with RhinoScript.
The following sample script demonstrates how to create an truncated tetrahedron. The coordinates for this solid were taken from the following web site.
http://www.scienceu.com/geometry/facts/solids/handson.html
The function could easily be modified to generate any number of unpronounceable plantonic and archimedean solids, such as an rhombitruncated icosidodecahedron.
''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 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) strPolyline = Rhino.AddPolyline(arrPoints) arrPlanarSrf = Rhino.AddPlanarSrf(Array(strPolyline)) arrSurfaces(i) = arrPlanarSrf(0) Rhino.DeleteObject strPolyline Next ' Join all of the faces Rhino.SelectObjects arrSurfaces Rhino.Command "_-Join" Rhino.UnselectAllObjects Rhino.EnableRedraw True End Sub