def main():
    fountain = fo.Fountain()

    commands = []

    iter = 1
    turn = False

    for i in range(0, 1000):
        if turn:
            commands.append(fountain.turn_on_pumps(i * 1000, iter))
            commands.append(fountain.open_valves(i * 1000, iter))
        else:
            commands.append(fountain.turn_off_pumps(i * 1000, iter))
            commands.append(fountain.close_valves(i * 1000, iter))

        iter += 1

        if iter == 10: iter = 1

        if i % 50 == 0:
            turn = not turn

    path = '../partitura.txt'
    file = open(path, 'w')
    for e in commands:
        file.write(e)
示例#2
0
 def __init__(self, input_num):
     self.fountains = []
     self.outputer = perceptron.Perceptron([1], 0)
     for i in range(input_num):
         self.fountains.append(fountain.Fountain())
示例#3
0
    def execute(self, context):

        fountain_script = bpy.context.area.spaces.active.text.as_string()
        if fountain_script.strip() == "": return {"CANCELLED"}

        F = fountain.Fountain(fountain_script)

        if not bpy.context.scene.sequence_editor:
            bpy.context.scene.sequence_editor_create()

        addSceneChannel = 1
        previous_time = 0
        previous_line = 0
        lines_pr_minute = 59
        first_duration = 0
        render = bpy.context.scene.render
        fps = round((render.fps / render.fps_base), 3)
        count = 0
        f_collected = []
        duration = 0

        for fc, f in enumerate(F.elements):
            if f.element_type == 'Scene Heading':
                f_collected.append(f)

        for fc, f in enumerate(f_collected):
            if str(f.scene_number) != "": f.scene_number = f.scene_number + " "
            name = str(f.scene_number + f.element_text.title())
            new_scene = bpy.data.scenes.new(name=name)

            cam = bpy.data.cameras.new("Camera")
            cam.lens = 35
            cam_obj1 = bpy.data.objects.new("Camera", cam)
            cam_obj1.location = (9.69, -10.85, 12.388)
            cam_obj1.rotation_euler = (0.6799, 0, 0.8254)
            new_scene.collection.objects.link(cam_obj1)

            if fc == 0:
                for ec, e in enumerate(f_collected):
                    if ec == fc + 1:
                        first_duration = int(
                            (((e.original_line) / lines_pr_minute) * 60) * fps)
                        duration = first_duration
                print("Fc " + str(e.original_line) + " ec " +
                      str(f.original_line))
            else:
                for ec, e in enumerate(f_collected):
                    if ec == fc + 1:
                        duration = int((((e.original_line - f.original_line) /
                                         lines_pr_minute) * 60) * fps)

            in_time = duration + previous_time
            bpy.data.scenes[name].frame_start = 0
            bpy.data.scenes[name].frame_end = duration
            newScene = bpy.context.scene.sequence_editor.sequences.new_scene(
                f.element_text.title(), new_scene, addSceneChannel,
                previous_time)
            bpy.context.scene.sequence_editor.sequences_all[
                newScene.name].scene_camera = bpy.data.objects[cam.name]
            #bpy.context.scene.sequence_editor.sequences_all[newScene.name].animation_offset_start = 0
            bpy.context.scene.sequence_editor.sequences_all[
                newScene.name].frame_final_end = in_time
            bpy.context.scene.sequence_editor.sequences_all[
                newScene.name].frame_start = previous_time
            previous_time = in_time
            previous_line = f.original_line

        bpy.ops.sequencer.set_range_to_strips()

        characters_pr_minute = 900
        for fc, f in enumerate(F.elements):
            if f.element_type == 'Dialogue':
                name = str(f.element_text)
                duration = int(
                    ((len(f.original_content) / characters_pr_minute) * 60) *
                    fps)
                in_time = int(((f.original_line / lines_pr_minute) * 60) * fps)

                text_strip = bpy.context.scene.sequence_editor.sequences.new_effect(
                    name=name,
                    type='TEXT',
                    channel=addSceneChannel + 1,
                    frame_start=in_time,
                    frame_end=in_time + duration)
                text_strip.font_size = int(
                    bpy.context.scene.render.resolution_y / 18)
                text_strip.text = str(name)
                text_strip.use_shadow = True
                text_strip.select = True
                text_strip.wrap_width = 0.85
                text_strip.location[1] = 0.10
                text_strip.blend_type = 'ALPHA_OVER'

        return {'FINISHED'}
示例#4
0
    def execute(self, context):
        space = bpy.context.space_data
        dir = os.path.dirname(bpy.data.filepath)
        if not dir in sys.path:
            sys.path.append(dir)

        current_text = os.path.basename(bpy.context.space_data.text.filepath)
        if current_text.strip() == "": return

        fountain_script = bpy.context.area.spaces.active.text.as_string()
        if fountain_script.strip() == "": return {"CANCELLED"}

        F = fountain.Fountain(fountain_script)

        filename = "Preview.txt"

        if filename not in bpy.data.texts:
            bpy.data.texts.new(filename)  # New document in Text Editor
        else:
            bpy.data.texts[filename].clear()  # Clear existing text

        # Get number of header lines
        contents = fountain_script.strip().replace('\r', '')

        contents_has_metadata = ':' in contents.splitlines()[0]
        contents_has_body = '\n\n' in contents

        if contents_has_metadata and contents_has_body:
            lines = fountain_script.split('\n\n')
            lines = lines[0].splitlines()
            current_line = bpy.data.texts[
                current_text].current_line_index - len(lines) - 1
        # elif contents_has_metadata and not contents_has_body:
        # self._parse_head(contents.splitlines())
        else:
            current_line = bpy.data.texts[current_text].current_line_index

        current_character = bpy.data.texts[current_text].current_character
        jump_to_line = 0
        margin = " " * 4
        document_width = 60 + len(margin)
        action_wrapper = textwrap.TextWrapper(width=document_width)
        dialogue_wrapper = textwrap.TextWrapper(width=37 +
                                                int(len(margin) / 2))
        dialogue_indentation = 13 + int(len(margin) / 2)
        cursor_indentation = margin
        add_lines = 0
        add_characters = current_character
        cursor_indentation_actual = ""
        text = bpy.context.area.spaces.active.text
        current_line_length = len(text.current_line.body)
        add_lines_actual = 0
        add_characters_actual = 0

        # This is the way to use title stuff
        # for meta in iter(F.metadata.items()):
        # if meta[0] == 'title':
        # bpy.data.texts[filename].write((str(meta[1])).center(document_width)+chr(10))

        add_lines = 0

        for fc, f in enumerate(F.elements):
            add_lines = -1
            #add_lines = 0  #int(document_width/current_character)
            add_characters = current_character
            if f.element_type == 'Scene Heading':
                if str(f.scene_number) != "":
                    f.scene_number = f.scene_number + " "
                bpy.data.texts[filename].write(margin + f.scene_number +
                                               f.scene_abbreviation.upper() +
                                               " " + f.element_text.upper() +
                                               chr(10))

                cursor_indentation = margin
            elif f.element_type == 'Action' and f.is_centered == False:
                action = f.element_text
                action_list = action_wrapper.wrap(text=action)
                add_action_lines = 0

                for action in action_list:
                    bpy.data.texts[filename].write(margin + action + chr(10))
                cursor_indentation = margin
            elif f.element_type == 'Action' and f.is_centered == True:
                bpy.data.texts[filename].write(
                    margin + f.element_text.center(document_width) + chr(10))
                cursor_indentation = margin + ("_" * (int(
                    (document_width / 2 - len(f.element_text) / 2)) - 2))
            elif f.element_type == 'Character':
                bpy.data.texts[filename].write(
                    margin + f.element_text.center(document_width).upper() +
                    chr(10))  # .upper()
                cursor_indentation = margin + ("_" * (
                    (f.element_text.center(document_width)).find(
                        f.element_text)))
            elif f.element_type == 'Parenthetical':
                bpy.data.texts[filename].write(
                    margin + f.element_text.center(document_width).lower() +
                    chr(10))  # .lower()
                cursor_indentation = margin + ("_" * int(
                    (document_width / 2 - len(f.element_text) / 2)))
            elif f.element_type == 'Dialogue':
                dialogue = f.element_text
                current_character
                line_list = dialogue_wrapper.wrap(text=dialogue)
                for dialogue in line_list:
                    bpy.data.texts[filename].write(margin + (
                        " " * dialogue_indentation + dialogue) + chr(10))
                    # if add_characters >= len(dialogue):
                    # add_characters = add_characters-len(dialogue)
                    # add_lines += 1
                cursor_indentation = margin + (" " * dialogue_indentation
                                               )  # + (" "*add_characters)
            elif f.element_type == 'Synopsis':  # Ignored by Fountain formatting
                bpy.data.texts[filename].write(chr(10))
            elif f.element_type == 'Page Break':
                bpy.data.texts[filename].write(
                    chr(10) + margin + ("_" * document_width) + chr(10))
            elif f.element_type == 'Boneyard':  # Ignored by Fountain formatting
                bpy.data.texts[filename].write(chr(10))
            elif f.element_type == 'Comment':  # Ignored by Fountain formatting
                bpy.data.texts[filename].write(chr(10))
            elif f.element_type == 'Section Heading':  # Ignored by Fountain formatting
                bpy.data.texts[filename].write(chr(10))
            elif f.element_type == 'Transition':
                bpy.data.texts[filename].write(
                    margin + f.element_text.rjust(document_width).upper() +
                    chr(10))
                cursor_indentation = margin + (
                    "_" * (document_width - len(f.element_text)))
            elif f.element_type == 'Empty Line':
                bpy.data.texts[filename].write(chr(10))
            #print("org "+str(f.original_line))
            #print("cur "+str(current_line))
            if current_line >= f.original_line and f.original_line != 0:  #current_line
                jump_to_line = bpy.data.texts[filename].current_line_index
                cursor_indentation_actual = cursor_indentation
                add_lines_actual = add_lines
                #print("add line: "+str(add_lines_actual))
                #add_characters_actual = add_characters
        #print("Jump: "+str(jump_to_line))

        line = jump_to_line - 1  #- add_lines_actual
        if line < 0: line = 0
        bpy.data.texts[filename].current_line_index = line
        cur = current_character + len(
            cursor_indentation_actual)  #+ add_characters_actual
        #print("Character:" + str(cur)+" Line: "+str((line)))
        bpy.data.texts[filename].select_set(line, cur, line, cur)

        return {"FINISHED"}