import rhinoscriptsyntax as rs import System, System.DateTime, sys import scriptcontext sys.path.append("C:/Users/carol/Desktop/Final Project/background.jpg") plane = rs.WorldXYPlane() allobjs = rs.AllObjects() rs.DeleteObjects(allobjs) ### verwendet wurde getpixels def getPixels(imagePath, steps_x=5, steps_y=5): # https://discourse.mcneel.com/t/how-to-store-list-of-list-when-reading-rgb-values-of-an-image/88276/6 #Gets the pixel colors of an image. #Args: #image_path: An absolute path to an image file. #steps_x: A number of pixels to sample in image x-direction. #steps_y: A number of pixels to sample in image y-direction. #Returns: #A list of lists with a sublist of pixel colors #for each sampled row of the image .. starting linx_unten ### print "imagePath =", imagePath ### bitmap = System.Drawing.Bitmap.FromFile(imagePath) print "wid", bitmap.Width, "/ steps_x("+str(steps_x)+") >>", int(bitmap.Width/steps_x),"px" print "hig", bitmap.Height, "/ steps_y("+str(steps_y)+") >>", int(bitmap.Height/steps_y),"px .. =", (bitmap.Width/steps_x)*(bitmap.Height/steps_y),"pixelz" pixels = [] for y in xrange(bitmap.Height-1,-1,-1): if y % steps_y == 0: row_pixels = [] for x in xrange(bitmap.Width): if x % steps_x == 0: pixel = bitmap.GetPixel(x, y) col = [pixel[0], pixel[1], pixel[2] ] row_pixels.append(col) pixels.append(row_pixels) return (pixels, int(bitmap.Width/steps_x),int(bitmap.Height/steps_y)) #return (pixels, res_x,res_y) ### nicht verwendet def getPixels_res(imagePath, res_x=5, res_y=5): # https://discourse.mcneel.com/t/how-to-store-list-of-list-when-reading-rgb-values-of-an-image/88276/6 #Gets the pixel colors of an image. #Args: #image_path: An absolute path to an image file. #steps_x: A number of pixels to sample in image x-direction. #steps_y: A number of pixels to sample in image y-direction. #Returns: #A list of lists with a sublist of pixel colors #for each sampled row of the image .. starting linx_unten ### print "imagePath =", imagePath ### bitmap = System.Drawing.Bitmap.FromFile(imagePath) print "wid", bitmap.Width, "/ res_x("+str(res_x)+") >>", int(bitmap.Width/res_x),"px-step" print "hig", bitmap.Height, "/ res_y("+str(res_y)+") >>", int(bitmap.Height/res_y),"px-step .. =", res_x*res_y,"pixelz" pixels = [] for y in xrange(bitmap.Height-1,-1,-1): if y % int(bitmap.Height/res_y) == 0: row_pixels = [] for x in xrange(bitmap.Width): if x % int(bitmap.Width/res_x) == 0: pixel = bitmap.GetPixel(x, y) col = [pixel[0], pixel[1], pixel[2] ] row_pixels.append(col) pixels.append(row_pixels) return (pixels, res_x, res_y) img_name = "C:/Users/carol/Desktop/Final Project/background.jpg" #img_name = "urs.jpg" resx=1 resy=1 pixels,xres,yres = getPixels(img_name, resx, resy) print xres,yres print pixels def brightness(r, g, b): return int(0.3*r + 0.59*g + 0.11*b) points = [] for y, row in enumerate(pixels): for x, color in enumerate(row): z = brightness(*color) # hoehe aus helligkeit berechnen points.append((x*10, y*10, z/10)) for i in range(yres): ptlist=[] for j in range(xres): index = (i*xres)+j ptlist.append(points[index]) front = rs.AddCurve(ptlist,3) front = [front] ### fassadenseite 1 facade1 = rs.RotateObject(front, (0,0,0), 90, axis=(1,0,0)) ### fassadenseite 2 facade2 = rs.CopyObject(front) rs.RotateObject(facade2, (0,0,0), 180, axis=(0,0,1)) rs.MoveObject(facade2, (190,190,0)) ### fassadenseite 3 facade3 = rs.MirrorObject(facade1, (0,0,0), (0,10,0), copy=True) rs.RotateObjects(facade3, (0,0,0), 90, axis=(0,0,1)) rs.MoveObject(facade3, (190,190,0)) ### fassadenseite 4 facade4 = rs.MirrorObject(front, (0,0,0), (0,10,0), copy=True) rs.RotateObjects(facade4, (0,0,0), -90, axis=(0,0,1)) ### startpunkte festlegen start_pt1 = [rs.CurveStartPoint(facade1)] start_pt2 = [rs.CurveStartPoint(facade2)] start_pt3 = [rs.CurveStartPoint(facade3)] start_pt4 = [rs.CurveStartPoint(facade4)] ### endpunkte festlegen end_pt1 = [rs.CurveEndPoint(facade1)] end_pt2 = [rs.CurveEndPoint(facade2)] end_pt3 = [rs.CurveEndPoint(facade3)] end_pt4 = [rs.CurveEndPoint(facade4)] ### einzelne punkte verbinden all_points1 = start_pt1 + start_pt4 smooth_curve1 = rs.AddInterpCurve(all_points1, degree=5) all_points2 = end_pt1 + end_pt3 smooth_curve2 = rs.AddInterpCurve(all_points2, degree=5) all_points3 = start_pt2 + start_pt3 smooth_curve3 = rs.AddInterpCurve(all_points3, degree=5) all_points4 = end_pt2 + end_pt4 smooth_curve4 = rs.AddInterpCurve(all_points4, degree=5) ### geschossplatten umrisslinie verbinden und extrudieren extline = rs.AddLine((ptlist[0][0], ptlist[0][1],0),(ptlist[0][0], ptlist[0][1]+0.5,0)) rs.RotateObject(extline, (0,0,0), 90, axis=(1,0,0)) all_curves = rs.JoinCurves([facade1, facade2, facade3, facade4, smooth_curve1, smooth_curve2, smooth_curve3, smooth_curve4], delete_input=True) ext = rs.ExtrudeCurve(all_curves, extline) rs.CapPlanarHoles(ext) for i in range(4): rs.CopyObject(ext,(0,0,330*i)) ### quader erstellen rect = rs.AddRectangle(plane, 215, 215) rectangle = rs.ExtrudeCurveStraight(rect, (20,20,0), (0,0,1320)) rs.CapPlanarHoles(rectangle) rs.MoveObject(rectangle, (-2.5,-2.5,0))