import uuid, sys, code, random, os, math, bpy, canvas, mathutils sys.path.append(os.path.dirname(os.path.dirname(__file__))) import helpers class Dreamatorium(canvas.Canvas): def render(self): props = [] bpy.ops.import_scene.obj(filepath = os.path.join(self.MODELS_FOLDER_PATH + 'lightning.obj'), use_edges=True) logo = bpy.context.selected_objects[0] logo.location = helpers.rand_location(self.CANVAS_BOUNDARY) props.append(logo) bpy.ops.mesh.primitive_grid_add(x_subdivisions=100, y_subdivisions=100, location=(0, 6, 2)) display1 = bpy.context.object display1.name = 'display_1' bpy.ops.mesh.primitive_grid_add(x_subdivisions=100, y_subdivisions=100, location=(6, 0, 2)) display2 = bpy.context.object display2.name = 'display_2' bpy.data.groups['displays'].objects.link(display1) bpy.data.groups['displays'].objects.link(display2) display1.rotation_euler.x += math.radians(90) display1.rotation_euler.z -= math.radians(90) display2.rotation_euler.x += math.radians(90) display2.rotation_euler.y += math.radians(90) display2.rotation_euler.z += math.radians(120) for display in bpy.data.groups['displays'].objects: display.rotation_euler.x += math.radians(90) display.scale = self.DISPLAY_SCALE helpers.texture_object(display, self.TEXTURE_FOLDER_PATH) helpers.unwrap_model(display) helpers.glitch(display) for j in range(0, random.choice(range(5, 40))): for i in range(0, random.choice(range(5, 10))): new_line = self.create_line('line' + str(uuid.uuid1()), self.series(30, self.rand_proba(self.FUNCTIONS), 0.3), random.choice(self.COLORS), 0.003, (j, -10, 2)) bpy.data.groups['lines'].objects.link(new_line) new_line.location.z += i / 3 props.append(new_line) ocean = self.add_ocean(10, 20) for index in range(1, 5): new_object = helpers.spawn_text(self.TEXT_FILE_PATH) bpy.data.groups['texts'].objects.link(new_object) props.append(new_object) helpers.assign_material(new_object, helpers.random_material(self.MATERIALS_NAMES)) text_scale = random.uniform(0.75, 3) new_object.scale = (text_scale, text_scale, text_scale) new_object.location = helpers.rand_location(self.CANVAS_BOUNDARY) props.append(new_object) for obj in bpy.data.groups['neons'].objects: self.wireframize(obj, random.choice(self.COLORS)) for f in range(self.NUMBER_OF_FRAMES): bpy.context.scene.frame_set(f) for prop in props: helpers.shuffle(prop, self.CANVAS_BOUNDARY) helpers.assign_material(prop, helpers.random_material(self.MATERIALS_NAMES)) def add_ocean(self, spatial_size, resolution, depth = 100, scale=(4,4,4), wave_scale = 0.5): bpy.ops.mesh.primitive_cube_add(location=(0, 0, -0.4),radius=1) ocean = bpy.context.object ocean.scale = scale ocean.modifiers.new(name='Ocean', type='OCEAN') ocean.modifiers["Ocean"].spatial_size = spatial_size ocean.modifiers["Ocean"].resolution = resolution ocean.modifiers["Ocean"].wave_scale = wave_scale ocean.modifiers["Ocean"].depth = depth helpers.wireframize(ocean, random.choice(self.COLORS)) ocean.name = 'ocean' return ocean