#DM2 Final #Melissa Schnell #Gruppe Gruber 01 ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/") ### sys.path.append("P:/WWW\kleeblaettchen04") ### import DM_lib as dm ### import math #reload(dm) ############################## rs.UnitSystem(4) # km = 5, meters = 4, cm = 3 etc rs.ShowGrid(None, 0) # grid > 0 = off rs.ShowGridAxes(None, 1) # y/y/z axen display > 0/1 = off/on #rs.ViewDisplayMode(rs.CurrentView(), "wireframe") rs.ViewDisplayMode(rs.CurrentView(), "rendered") rs.Command("cplane w t enter", 0) # cPlane World Top dm.PointRadius(displayModeX=0, rad=3, styl=3) dm.printDisplay(0) # nomen est omen rs.EnableRedraw(0) import Rhino import os dm.newEmptyLayer("myPROJ", [0,0,0]) rs.Redraw() #file_shepperton = "P:/WWW\kleeblaettchen04" #if os.path.exists(file_shepperton): # Rhino.RhinoDoc.OpenFile(file_shepperton) ###Grundform Kuppel ------------------------------------ def makeKuppel(scalTop = 5, hoeheFac = 1): anzSegments = 20*5 anzDivi = 8 baseCirc = rs.ObjectsByName("level_-91")[0] bBox = rs.BoundingBox( baseCirc ) center = dm.pntInbetween(bBox[0],bBox[2]) #rs.AddLine( bBox[0], bBox[2] ) radi = rs.Distance(bBox[0],bBox[1])*0.5 hoehe = radi*0.6*hoeheFac rs.DeleteObjects(rs.ObjectsByName("topCirc")) centerOben = rs.VectorAdd(center, [0,0,hoehe]) #rs.AddLine( center, centerOben) topCirc = rs.CopyObject(baseCirc, [0,0,hoehe]) topCirc = rs.ScaleObject(topCirc, centerOben , [scalTop, scalTop, 1] ) rs.ObjectName( topCirc, "topCirc") rs.RebuildCurve(topCirc, degree=3, point_count=8) #topCirc = rs.AddCircle([0,0,hoehe], radi*.15) baseCoords = rs.DivideCurve(baseCirc, anzSegments, 0) topCoords = rs.DivideCurve(topCirc, anzSegments, 0) roofwindow = rs.AddCurve(topCoords, 2) rs.ObjectColor(roofwindow, [139,0,0]) #rs.AddLine( [0,0,0], [0,0,hoehe]) allCoords = [] for i in range(anzSegments): pBase = baseCoords[i] pTop = topCoords[i] vecRadial = rs.VectorUnitize(pBase) p1 = rs.VectorAdd(pBase, [0,0,hoehe]) p1 = rs.VectorAdd(p1, rs.VectorScale(vecRadial, -12.0)) crv = rs.AddCurve( [ pBase, p1, pTop ], 2 ) coords = rs.DivideCurve( crv, anzDivi, 0) rs.ObjectColor( crv , [0,0,0] ) rs.ObjectPrintWidth( crv , 0.75 ) #rs.DeleteObject( crv ) #print coords # coords_1 = coords[0] hier wollte ich die horizontalen unterteilungen machen, es hat aber nicht funktioniert, ich verstehe nicht warum :( # #print coords_1 # coords_2 = coords [1] # print coords_2 # rs.AddCurve(coords_1 , 2) # rs.AddCurve(coords_2 ,1) allCoords.append( coords ) ### horizontale Teilungen Kuppel if 1: for i in range( anzDivi+0 ): coords = [ allCoords[j%anzSegments][i] for j in range(anzSegments+1) ] horizontal = rs.AddCurve( coords ) rs.ObjectColor(horizontal, [0,0,0]) rs.ObjectPrintWidth(horizontal, 0.75) ### Geschwungene Elemente auf Kuppel for i in range(anzSegments-0): coords = [] for j in range(anzDivi+1): k=(i+j)%anzSegments coords.append( allCoords[k][j] ) #rs.ObjectColor( rs.AddCurve( coords, 7 ), [200,200,0]) #rs.AddPoints( coords ) if 1: axeP0 = [0,0,0] axeP1 = [0,0, 25.594] #axe = rs.AddLine( axeP0, axeP1 ) #axeCoords = rs.DivideCurve(axe, anzDivi, 1) for i in range(anzSegments-0): coords = [] coordsA = [] for j in range(anzDivi+1): k = i+j k = k%anzSegments cor = allCoords[k][j] coords.append(cor) vec = rs.VectorScale( rs.VectorUnitize(cor), j*1.5) coordsA.append( rs.VectorAdd(cor, vec)) if i%5==0: ###nur jedes fuenfte Segment soll ein geschwungenes Element haben crvU = rs.AddCurve( coords ) crvA=rs.AddCurve( coordsA ) rs.ObjectColor(crvA, [0,0,0]) rs.AddCurve( [coords[-1], coordsA[-1]]) coordsVorne=[] coordsHinten = [] ang = 0 angPlus = 4 for x,vec in enumerate(coordsA): if x< (anzDivi*0.5)+1: if x: ang += angPlus else: ang -= angPlus coordsVorne.append( rs.VectorRotate( vec, ang, [0,0,1]) ) coordsHinten.append( rs.VectorRotate( vec, -ang, [0,0,1]) ) crvV = rs.AddCurve( coordsVorne ) rs.ObjectColor(crvV, [0,0,0]) crvH = rs.AddCurve( coordsHinten ) rs.ObjectColor(crvV, [0,0,0]) rs.ObjectColor( rs.AddTweenCurves(crvU, crvV, 8), [139,0,0]) rs.ObjectColor( rs.AddTweenCurves(crvA, crvH, 8), [105,105,105]) ### geschwungene Elemente von Kuppel abheben coordsV = rs.CurveEditPoints(crvV) #rs.AddPoints( coordsV ) rs.EnableObjectGrips(crvV, 1) print len(coordsV) nachAussenFac = 0.5 fac=0 for i in range(1, anzDivi): if i < anzDivi*.5: fac += nachAussenFac else: fac -= nachAussenFac pAxe = [ 0,0, coordsV[i][2] ] #rs.AddLine( pAxe, coordsV[i] ) vec = rs.VectorSubtract(coordsV[i], pAxe) vec = rs.VectorUnitize( vec ) vec = rs.VectorScale(vec, fac) coordsV[i] = rs.VectorAdd(coordsV[i], vec ) rs.ObjectGripLocations(crvV, coordsV) rs.EnableObjectGrips(crvV, 0) #rs.AddCurve(coordsV) coordsH = rs.CurveEditPoints(crvH) rs.EnableObjectGrips(crvH, 1) nachAussenFacH = 0.5 facH = 0 for i in range(1, anzDivi) : if i < anzDivi * 0.5: facH += nachAussenFacH else: facH -= nachAussenFacH pAxeH = [0,0, coordsH [i][2] ] vecH = rs.VectorSubtract(coordsH[i], pAxeH) vecH = rs.VectorUnitize( vecH ) vecH = rs.VectorScale(vecH, facH) coordsH [i] = rs.VectorAdd(coordsH[i], vec) rs.ObjectGripLocation(crvH, coordsH) rs.EnableObjectGrips(crvH, 0) rs.HideObject( rs.ObjectsByName("level_-91")[0] ) ### Animation for i in range(1,20): dm.esc() dm.eA() makeKuppel(scalTop = 2/i, hoeheFac = i*0.1) rs.Redraw() rs.Sleep(100) rs.ShowObject( rs.ObjectsByName("level_-91")[0] )