def setLayers(layers:iter, scn:Scene=None): """ set active layers of scn w/o 'dag ZERO' error """ assert len(layers) == 20 scn = scn or bpy.context.scene # update scene (prevents dag ZERO errors) scn.update() # set active layers of scn scn.layers = layers
def get_pixels_from_render(scene: Scene): """ get image pixels from a rendered image not yet saved to disk """ # ensure nodes are on scene.use_nodes = True tree = scene.node_tree links = tree.links # create render layer and viewer nodes rl = tree.nodes.new("CompositorNodeRLayers") v = tree.nodes.new("CompositorNodeViewer") v.use_alpha = False # link Image output to Viewer input links.new(rl.outputs[0], v.inputs[0]) # render bpy.ops.render.render() # get viewer pixels pixels = get_pixels(bpy.data.images["Viewer Node"]) # remove created nodes tree.nodes.remove(rl) tree.nodes.remove(v) # return pixels return pixels
def to_scenes(script): F = fountain.Fountain(script) scenes = [] current_scene = None current_char = None current_parenthetical = '' for fc, f in enumerate(F.elements): element_type = f.element_type text = f.element_text.strip() if element_type == 'Scene Heading': name = f.original_content.strip() current_scene = Scene(name, []) scenes.append(current_scene) elif not current_scene: continue elif element_type == 'Parenthetical': current_parenthetical = text elif element_type == 'Character': current_char = text elif element_type == 'Dialogue': seconds = text_to_seconds(text) * text_speed_factor current_scene.elements.append( Dialogue( seconds, current_char, current_parenthetical, text )) current_parenthetical = '' elif current_scene and element_type == 'Action': seconds = text_to_seconds(text) current_scene.elements.append(Action(seconds, text)) return scenes
def openLayer(layerNum:int, scn:Scene=None): scn = scn or bpy.context.scene layerList = [i == layerNum - 1 for i in range(20)] scn.layers = layerList return layerList