# (c) 2008 willem jan hengeveld itsme@xs4all.nl # # this is a google sketchup plugin, whichs adds all 5 platonic solids # as a component to your google sketchup environment - http://www.sketchup.com # # USE: # copy this file to # /Library/Application Support/Google SketchUp 6/SketchUp/plugins/ # or # /Users/itsme/Library/Application Support/Google SketchUp 6/SketchUp/Plugins/ # or # open the ruby console ( window -> ruby console ) # and type load "/fullpathto/platonic.rb"; # # todo: figure out how to create a seperate component library # to add these solids to. # def add_cube cube = Sketchup.active_model.definitions.add("ItsCube") ; unit=100/2.54 p = Array.new ; p[0] = ORIGIN ; p[1] = [unit, 0 , 0] ; p[2] = [unit, unit, 0] ; p[3] = [0 , unit, 0] ; face = cube.entities.add_face(p); face.reverse! if face.normal.z < 0; face.pushpull(unit); trans = Geom::Transformation.new([4*unit,0,0]); Sketchup.active_model.active_entities.add_instance(cube, trans) ; end def add_tetra tetraeder = Sketchup.active_model.definitions.add("ItsTetra") ; unit=100/2.54 p = Array.new ; p[0] = [-unit/3, -unit/3,-unit/3] ; p[1] = [unit, 0 , 0] ; p[2] = [0 , unit, 0] ; p[3] = [0 , 0,unit] ; tetraeder.entities.add_face([p[0],p[1],p[2]]); tetraeder.entities.add_face([p[0],p[1],p[3]]); tetraeder.entities.add_face([p[0],p[2],p[3]]); tetraeder.entities.add_face([p[1],p[2],p[3]]); trans = Geom::Transformation.new([-4*unit,0,0]); Sketchup.active_model.active_entities.add_instance(tetraeder, trans) ; end def add_octa octaeder = Sketchup.active_model.definitions.add("ItsOcta") ; unit= 50/2.54 p = Array.new ; p[0] = [ unit, 0 , 0] ; p[1] = [-unit, 0 , 0] ; p[2] = [0 , unit, 0] ; p[3] = [0 , -unit, 0] ; p[4] = [0 , 0, unit] ; p[5] = [0 , 0,-unit] ; octaeder.entities.add_face([p[0],p[2],p[4]]); octaeder.entities.add_face([p[0],p[3],p[4]]); octaeder.entities.add_face([p[1],p[2],p[4]]); octaeder.entities.add_face([p[1],p[3],p[4]]); octaeder.entities.add_face([p[0],p[2],p[5]]); octaeder.entities.add_face([p[0],p[3],p[5]]); octaeder.entities.add_face([p[1],p[2],p[5]]); octaeder.entities.add_face([p[1],p[3],p[5]]); trans = Geom::Transformation.new([0,4*unit,0]); Sketchup.active_model.active_entities.add_instance(octaeder, trans) ; end def add_dode dodecaeder = Sketchup.active_model.definitions.add("ItsDode") ; scale=200/(Math.sqrt(5)+1) / 2.54; s0=(Math.sqrt(5)-1)/2*scale; s1=(Math.sqrt(5)+1)/2*scale; unit=scale; p = Array.new ; for i in 0 .. 7 p[i]=[ (i&4)!=0?-unit:unit, (i&2)!=0?-unit:unit, (i&1)!=0?-unit:unit] end for i in 0 .. 3 p[i+8]= [ 0, (i&1)!=0?-s0:s0, (i&2)!=0?-s1:s1 ] p[i+12]= [ (i&1)!=0?-s0:s0, (i&2)!=0?-s1:s1, 0 ] p[i+16]= [ (i&2)!=0?-s1:s1, 0, (i&1)!=0?-s0:s0 ] end dodecaeder.entities.add_face([ p[8], p[9], p[2], p[16], p[0]]) dodecaeder.entities.add_face([ p[8], p[9], p[6], p[18], p[4]]) dodecaeder.entities.add_face([p[10],p[11], p[3], p[17], p[1]]) dodecaeder.entities.add_face([p[10],p[11], p[7], p[19], p[5]]) dodecaeder.entities.add_face([p[12],p[13], p[4], p[8], p[0]]) dodecaeder.entities.add_face([p[12],p[13], p[5], p[10], p[1]]) dodecaeder.entities.add_face([p[14],p[15], p[6], p[9], p[2]]) dodecaeder.entities.add_face([p[14],p[15], p[7], p[11], p[3]]) dodecaeder.entities.add_face([p[16],p[17], p[1], p[12], p[0] ]) dodecaeder.entities.add_face([p[16],p[17], p[3], p[14], p[2] ]) dodecaeder.entities.add_face([p[18],p[19], p[5], p[13], p[4] ]) dodecaeder.entities.add_face([p[18],p[19], p[7], p[15], p[6] ]) trans = Geom::Transformation.new([0,-4*unit,0]); Sketchup.active_model.active_entities.add_instance(dodecaeder, trans) ; end def add_ico icosaeder = Sketchup.active_model.definitions.add("ItsIco") ; scale=200/(Math.sqrt(5)+1) / 2.54; s1=(Math.sqrt(5)+1)/2*scale; unit=scale; p = Array.new ; for i in 0 .. 3 p[i+0]= [ 0, (i&1)!=0?-unit:unit, (i&2)!=0?-s1:s1 ] p[i+4]= [ (i&1)!=0?-unit:unit, (i&2)!=0?-s1:s1, 0 ] p[i+8]= [ (i&1)!=0?-s1:s1, 0,(i&2)!=0?-unit:unit ] end icosaeder.entities.add_face([p[0],p[4],p[5]]); icosaeder.entities.add_face([p[2],p[4],p[5]]); icosaeder.entities.add_face([p[1],p[6],p[7]]); icosaeder.entities.add_face([p[3],p[6],p[7]]); icosaeder.entities.add_face([p[0],p[1],p[8]]); icosaeder.entities.add_face([p[0],p[4],p[8]]); icosaeder.entities.add_face([p[1],p[6],p[8]]); icosaeder.entities.add_face([p[0],p[1],p[9]]); icosaeder.entities.add_face([p[0],p[5],p[9]]); icosaeder.entities.add_face([p[1],p[7],p[9]]); icosaeder.entities.add_face([p[2],p[3],p[10]]); icosaeder.entities.add_face([p[2],p[4],p[10]]); icosaeder.entities.add_face([p[3],p[6],p[10]]); icosaeder.entities.add_face([p[4],p[8],p[10]]); icosaeder.entities.add_face([p[6],p[8],p[10]]); icosaeder.entities.add_face([p[2],p[3],p[11]]); icosaeder.entities.add_face([p[2],p[5],p[11]]); icosaeder.entities.add_face([p[3],p[7],p[11]]); icosaeder.entities.add_face([p[5],p[9],p[11]]); icosaeder.entities.add_face([p[7],p[9],p[11]]); trans = Geom::Transformation.new([0,0,4*unit]); Sketchup.active_model.active_entities.add_instance(icosaeder, trans) ; end add_cube(); add_tetra(); add_octa(); add_dode(); add_ico();