############################## import rhinoscriptsyntax as rs import random, time, sys, math ### sys.path.append("P:\WWW\halil2003\DM2") ### add path where "DM_lib.py" can be found !!! sys.path.append("P:\\") ### import DM_lib as dm ### reload(dm) ############################## rs.UnitSystem(3) rs.ShowGrid(view=None, show=0) rs.ShowGridAxes(view=None, show=0) rs.ViewDisplayMode(view=None, mode="Wireframe") rs.EnableRedraw(0) dm.PointRadius(displayModeX=0, rad=3, styl=3) dm.eA() ###################### ###################### ###################### spehere_1_cen = [10, 10, 10] spehere_2_cen = [200, 10, 10] spehere_3_cen = [105, 200, 10] centers = [spehere_1_cen, spehere_2_cen, spehere_3_cen] centroid_pt = dm.pntCentroid( centers ) centroid_pt[2] = 100.0 rs.AddCurve( centers, 1 ) anz = 1001 rad = 30.0 side = 15 ### anzahl points balken: -15..+15 .. int(rad*.5) ?? steps = 1 ### steps == distances for wuerfel coordsSph = [ rs.VectorRotate( rs.VectorScale( rs.VectorRotate([rad,0,0],random.uniform(-360, 360), [random.uniform(-1,1) for i in range(3)]), random.uniform(0.01, 0.99)), random.uniform(-360, 360),[random.uniform(-1,1) for i in range(3)]) for i in range(int(anz*rad*10)) ] ### viel zu viele vecs sodass sehr random :) vec0 = rs.VectorUnitize( rs.VectorSubtract(centers[0], centers[1]) ) vec1 = rs.VectorUnitize( rs.VectorSubtract(centers[1], centers[2]) ) vec2 = rs.VectorUnitize( rs.VectorSubtract(centers[2], centers[0]) ) vecs = [vec0, vec1, vec2] dists = [rs.Distance(centers[0], centers[1]), rs.Distance(centers[1], centers[2]), rs.Distance(centers[2], centers[0])] ## leider nicht gleichseitiges 3eck for n in range(3): ### sphere: random.shuffle(coordsSph) ## noch mehr random :) rs.AddPoints( [ rs.VectorAdd(centers[n], cor) for cor in coordsSph[0:int(anz*rad)] ] ) dm.zA() ### balken vec = vecs[n] nVec = rs.VectorRotate(vec, 90.0, [0,0,1] ) coords = [] topCoords = [] for i in range(-side, side): for j in range(-side, side): for k in range( int(dists[n]/steps)): cor = rs.VectorScale(nVec, i) cor = rs.VectorAdd(cor, [0,0,j]) cor = rs.VectorAdd(cor, centers[n]) cor = rs.VectorAdd(cor, rs.VectorScale(vec, -k*steps)) if rs.Distance(cor, centers[0])>rad and rs.Distance(cor, centers[1])>rad and rs.Distance(cor, centers[2])>rad: coords.append( cor) if i == -side+1 and j == side-1: topCoords.append( cor ) rs.ObjectColor( rs.AddPoints( coords ), [200,200,0]) ### 3_eck/dach for cor in topCoords: rs.ObjectColor( rs.AddLine( cor, centroid_pt ), [250*(n==0), 250*(n==1), 250*(n==2)]) ## !! rs.Redraw()