import rhinoscriptsyntax as rs import Rhino.Geometry as rg import random, time, sys, math ### #sys.path.append("P:/") ### sys.path.append("C:\Users\Sven\OneDrive\Tu Graz\DM2")### import DM_lib as dm def clear_all(): rs.DeleteObjects(rs.AllObjects()) def makeDodekaeder( rad=10.0, pos=[0,0,0], makeCrv=1, makeSrf=1, verbose=1): ### https://de.wikipedia.org/wiki/Dodekaeder#/media/Datei:Dodekaeder-w.svg ''' return: allCoords = 12 coordLists ''' r = rad c = (5**0.5+1)*0.5*r a = rs.Distance([r,0,0], rs.VectorRotate( [r,0,0], 72, [0,0,1] )) if verbose: print "*** dodecahedron | pentagondodekaeder" print "*** radius\t\t r", r print "*** kantePentagon\t a", a print "*** kante Cubus\t c", c print "*** allCoords = [ rs.VectorAdd(pos, rs.VectorRotate(cor, 72.0*i, [0,0,1])) for cor in [[r,0,0], [c, 0, r], rs.VectorRotate([c,0,c], 36.0, [0,0,1] ), [c*.5,a*.5,r+c]] for i in range(5) ]" allCoords = [ rs.VectorAdd(pos, rs.VectorRotate(cor, 72.0*i, [0,0,1])) for cor in [[r,0,0], [c, 0, r], rs.VectorRotate([c,0,c], 36.0, [0,0,1] ), [c*.5,a*.5,r+c]] for i in range(5) ] indices=[[x+(i*5) for x in [0,1,2,3,4]] for i in range(0,4)] pentaIndices = [[0,1,2,3,4,0]] pentaIndices.extend( [[indices[0][0+i], indices[0][1+i], indices[1][1+i], indices[2][0+i], indices[1][0+i],indices[0][0+i]] for i in range(4)] ) pentaIndices.append( [4,0,5,14,9,4] ) pentaIndices.append( [6,11,16,15,10,6] ) pentaIndices.extend( [[pentaIndices[6][0]+i, pentaIndices[6][1]+i, pentaIndices[6][2]+i, pentaIndices[6][3]+i, pentaIndices[6][4]+i, pentaIndices[6][5]+i] for i in range(1,4)] ) pentaIndices.append( [5,10,15,19,14,5] ) pentaIndices.extend( [range(15,20)] ) pentaIndices[-1].append(15) pentaIndices[0].reverse() allCoords = [[allCoords[i] for i in indlist] for indlist in pentaIndices ] if makeCrv: for coords in allCoords: crv=rs.AddCurve( coords, 1 ) if makeSrf: rs.AddPlanarSrf(crv) return allCoords # Beispielaufruf: Erzeuge das Geruest eines Dodekaeders mit Mittelpunkt (0, 0, 0) und Kantenlaenge 5 clear_all() #prof demo coords = makeDodekaeder( rad=1.0, pos=[0,0,0], makeCrv=1, makeSrf=1, verbose=1) coords = makeDodekaeder( rad=3.0, pos=[5,7,0], makeCrv=1, makeSrf=1, verbose=1)