Example #1
0
 def init_widgets(self):
     self.object_widgets = dict()
     for key in WidgetManager.get_list():
         self.object_widgets[key] = WidgetManager.create(key, self)
         self.object_widgets[key].hide()
         self.objectPropertiesLayout.addWidget(self.object_widgets[key])
         if self.object_widgets[key].animated:
             self.app_manager.updated_animation_frame.connect(self.object_widgets[key].updateAnimationTimeInGUI)
         if key in self.widget_buttons:
             for (name, func, layout_name) in self.widget_buttons[key]:
                 new_button = QToolButton(self.object_widgets[key])
                 new_button.setObjectName(name)
                 action = QAction(name, self.object_widgets[key])
                 action.triggered.connect(partial(func,self.object_widgets[key]))
                 new_button.setDefaultAction(action)
                 setattr(self.object_widgets[key], name, new_button)
                 if layout_name is not None:
                     layout = getattr(self.object_widgets[key], layout_name)
                     layout.addWidget(new_button)
                self.forceXLineEdit.text(),
                self.forceYLineEdit.text(),
                self.forceZLineEdit.text()
            ]))
        self._character.apply_force(body_name, force)

    def apply_torque(self):
        body_name = str(self.bodyComboBox.currentText())
        torque = list(
            map(float, [
                self.torqueXLineEdit.text(),
                self.torqueYLineEdit.text(),
                self.torqueZLineEdit.text()
            ]))
        self._character.apply_torque(body_name, torque)

    def set_angular_velocity(self):
        joint_name = str(self.jointComboBox.currentText())
        print(joint_name)
        velocity = list(
            map(float, [
                self.angularVelocityXLineEdit.text(),
                self.angularVelocityYLineEdit.text(),
                self.angularVelocityZLineEdit.text()
            ]))
        self._character.set_angular_velocity(self.joint_key_map[joint_name],
                                             velocity)


WidgetManager.register("character", CharacterWidget)
                                "position"] = transform_func(p["position"])
                    constraint = c
                    constraints_dict["elementaryActions"][idx]["constraints"][
                        c_idx] = constraint
        return constraints_dict

    def update_action_sequence_list(self):
        self.actionListWidget.clear()
        if self._action_sequence is None:
            return
        for action in self._action_sequence:
            item = QListWidgetItem()
            item.setText(action[0])
            item.setData(Qt.UserRole, action[1])
            self.actionListWidget.addItem(item)

    def save_graph_walk_to_file(self):
        filename = QFileDialog.getSaveFileName(self, 'Save To File', '.')[0]
        self._controller.export_graph_walk_to_file(filename)

    def load_graph_walk_from_file(self):
        filename = str(QFileDialog.getOpenFileName(self, 'Load From File',
                                                   '.'))[0]
        self._controller.load_graph_walk_from_file(filename)

    def clear_graph_walk(self):
        self._controller.clear_graph_walk()


WidgetManager.register("mg_player", MorphableGraphControllerWidget)
        self.setAnimationSliderValue(value)
        self.setAnimationFrameSpinBoxValue(value)

    def setAnimationSliderValue(self, value):
        self.animationFrameSlider.setValue(value)

    def setAnimationFrameSpinBoxValue(self, value):
        self.animationFrameSpinBox.setValue(value)

    def draw_mode_selection_changed(self, idx):
        for anim_controller in self._controller.get_animation_controllers():
            anim_controller._visualization.draw_mode = int(idx)


class GroupAnimationPlayerWidget(GroupAnimationPlayerBaseWidget, Ui_Form):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        Ui_Form.setupUi(self, self)
        self.animationSpeedDoubleSpinBox.setRange(-4.0, 4.0)
        self.deactivate_player_controls()
        self.init_animation_player_actions()
        self.initSignals()
        self.initSlots()
        self.isPlaying = False
        self._controller = None
        self.init_combo_box()



WidgetManager.register("group_player", GroupAnimationPlayerWidget, True)
    def update_n_neighbors(self, value):
        n_neighbors = int(value)
        self._controller.set_n_neighbors(n_neighbors)

    def init_combo_box(self):
        self.drawModeComboBox.clear()
        self.drawModeComboBox.addItem("None", 0)
        self.drawModeComboBox.addItem("Lines", 1)
        self.drawModeComboBox.addItem("Boxes", 2)
        self.drawModeComboBox.addItem("CoordinateSystem", 3)
        self.drawModeComboBox.setCurrentIndex(1)
        self.drawModeComboBox.currentIndexChanged.connect(
            self.draw_mode_selection_changed)

    def draw_mode_selection_changed(self, idx):
        self._controller._visualization.draw_mode = int(idx)

    def save_to_file(self):
        filename = str(QFileDialog.getSaveFileName(self, 'Save To File',
                                                   '.'))[0]
        self._controller.save_to_file(filename)

    def export_to_bvh_file(self):
        filename = str(QFileDialog.getSaveFileName(self, 'Save To File',
                                                   '.'))[0]
        self._controller.export_to_bvh_file(filename)


WidgetManager.register("blend_controller", BlendAnimationControllerWidget,
                       True)
        self.mg_controller.direction_vector = dir_vector

    def set_animation_speed(self):
        speed = float(self.animSpeedLineEdit.text())
        self.mg_controller.speed = speed

    def set_blend_window(self):
        blend_window = int(self.blendWindowLineEdit.text())
        self.mg_controller.planner.settings.blend_window = blend_window

    def set_ik(self, state):
        self.mg_controller.planner.settings.activate_ik = bool(state)

    def set_grounding(self, state):
        self.mg_controller.activate_grounding = bool(state)

    def set_transition_constraint(self, state):
        self.mg_controller.planner.settings.add_transition_constraint = bool(
            state)

    def set_position_weight(self):
        self.mg_controller.planner.settings.position_constraint_weight = float(
            self.posWeightLineEdit.text())

    def set_direction_weight(self):
        self.mg_controller.planner.settings.direction_constraint_weight = float(
            self.dirWeightLineEdit.text())


WidgetManager.register("morphablegraph_state_machine", MGStateMachineWidget)
        self._figure_controller.scene_object._components[
            "character"].visible = new_visible

    def on_av_scale_changed(self):
        self._figure_controller.av_scale = float(self.avScaleLineEdit.text())

    def on_click_visible_com(self):
        new_visible = self.visibleCOMCheckBox.isChecked()
        self._figure_controller.visualize_com = new_visible

    def on_click_kinematic_root(self):
        self._figure_controller.activate_kinematic_root = self.kinematicRootCheckBox.isChecked(
        )
        if not self._figure_controller.activate_kinematic_root:
            root_body = self._figure_controller.target_figure.root_body
            self._figure_controller.target_figure.bodies[
                root_body].set_dynamic()

    def on_click_external_force(self):
        self._figure_controller.activate_external_force = self.externalForceCheckBox.isChecked(
        )
        if not self._figure_controller.activate_external_force:
            self._figure_controller.reset_motor_targets()

    def on_click_balance(self):
        self._figure_controller.activate_balance = self.balanceCheckBox.isChecked(
        )


WidgetManager.register("figure_controller", FigureControllerWidget)
    def _init_signals(self):
        self.applyScaleButton.setDefaultAction(self.applyScaleAction)

    def _init_slots(self):
        return

    def _apply_scale(self):
        if self._animated_mesh is not None:
            scale = float(self.scaleLineEdit.text())
            self._animated_mesh.scale_mesh(scale)

    def on_click_visible(self):
        new_visible = self.visibleCheckBox.isChecked()
        self._animated_mesh.visible = new_visible

    def render_mode_selection_changed(self, idx):
        if self._animated_mesh is not None:
            self._animated_mesh.render_mode = idx

    def init_render_mode_combo_box(self):
        self.renderModeComboBox.clear()
        self.renderModeComboBox.addItem("None", 0)
        self.renderModeComboBox.addItem("Standard", 1)
        self.renderModeComboBox.addItem("Normal Map", 2)
        self.renderModeComboBox.setCurrentIndex(1)
        self.renderModeComboBox.currentIndexChanged.connect(
            self.render_mode_selection_changed)


WidgetManager.register("animated_mesh", AnimatedMeshWidget)
    def fill_joints_combobox(self):
        self.jointComboBox.clear()
        joints = self._controller.skeleton.get_joint_names()
        for idx, joint in enumerate(joints):
            self.jointComboBox.addItem(joint, idx)

    def create_blend_controller(self):
        self._controller.create_blend_controller()

    def create_motion_copy(self):
        scene_object = self._controller.scene_object
        if len(self._controller.samples) < 1:
            return
        sample = self._controller.samples[0]
        copy_dialog = CopyMotionDialog(sample.n_frames, scene_object.name,
                                       self)
        copy_dialog.exec_()
        if copy_dialog.success:
            scene = scene_object.scene
            skeleton_copy = self._controller.get_skeleton_copy()
            start_frame = copy_dialog.start_frame
            end_frame = copy_dialog.end_frame
            mv_copy = self._controller.get_motion_vector_copy(
                start_frame, end_frame)
            scene.object_builder.create_object("animation_controller",
                                               copy_dialog.name, skeleton_copy,
                                               mv_copy, mv_copy.frame_time)


WidgetManager.register("mp_player", MotionPrimitiveControllerWidget, True)
    def _init_actions(self):
        self.updateAction = QAction("Update", self)
        self.updateAction.triggered.connect(self._set_object_values)
        self.posXLineEdit.returnPressed.connect(self._set_object_values)
        self.posYLineEdit.returnPressed.connect(self._set_object_values)
        self.posZLineEdit.returnPressed.connect(self._set_object_values)
        self.scaleLineEdit.returnPressed.connect(self._set_object_values)

    def _init_signals(self):
        self.updateButton.setDefaultAction(self.updateAction)

    def _init_slots(self):
        return
        #self.connect(self.animationFrameSlider, QtCore.SIGNAL("valueChanged(Qstri) "), self.valueChanged)

    def _set_object_values(self):
        if self._scene_object is not None:
            position = list(
                map(float, [
                    self.posXLineEdit.text(),
                    self.posYLineEdit.text(),
                    self.posZLineEdit.text()
                ]))
            self._scene_object.setPosition(np.array(position))
            self._scene_object.name = str(self.nameLineEdit.text())
            scale = float(self.scaleLineEdit.text())
            self._scene_object.set_scale(scale)


WidgetManager.register("object", ObjectPropertiesWidget)
            data["name"] = name
            data["skeleton"] = skeleton.to_unity_format()
            data["model"] = skeleton_editor.skeleton_model
            save_local_skeleton(self.local_skeleton_dir, name, data)
            constants.LOCAL_SKELETON_MODELS[name] = data
            self.fill_combo_box_with_models()

class AnimationPlayerWidget(AnimationPlayerBaseWidget, Ui_Form):
    COMPONENT_NAME = "animation_controller"
    def __init__(self, parent):
        QWidget.__init__(self, parent)
        Ui_Form.setupUi(self, self)
        self.local_skeleton_dir = constants.DATA_DIR + os.sep + "skeletons"
        self.animationSpeedDoubleSpinBox.setRange(-4.0, 4.0)
        self.deactivate_player_controls()
        self.init_animation_player_actions()
        self.initSignals()
        self.initSlots()
        self.isPlaying = False
        self._controller = None
        self.fpsLineEdit.textChanged.connect(self.slot_fps_text_changed)
        self.init_combo_box()
        self.prev_annotation_edit_frame_idx = 0
        self.labelView.setTimeLineParameters(100000, 10)
        self.labelView.initScene()

        self.labelView.show()


WidgetManager.register("animation_player", AnimationPlayerWidget, True)
    def deactivate_player_controls(self):
        self.animationFrameSlider.setEnabled(False)
        self.animationFrameSpinBox.setEnabled(False)
        self.animationButton.setEnabled(False)

    def updateAnimationTimeInGUI(self, value):
        self.setAnimationSliderValue(value)
        self.setAnimationFrameSpinBoxValue(value)

    def setAnimationSliderValue(self, value):
        self.animationFrameSlider.setValue(value)

    def setAnimationFrameSpinBoxValue(self, value):
        self.animationFrameSpinBox.setValue(value)

    def draw_mode_selection_changed(self, draw_mode):
        self._controller.set_draw_mode(draw_mode)

    def on_select_file(self, item):
        name = str(item.text())
        n_frames = self._controller.select_file(name)
        if n_frames is not None:
            self.setFrameRange(0, n_frames - 1)

    def load_selected(self):
        n_frames = self._controller.load_selected()


WidgetManager.register("animation_directory_explorer",
                       AnimationDirectoryWidget, True)
Example #13
0
        if set_constraint_dialog.success:
            constraint_object = self.nav_agent.scene_object.scene.getObject(set_constraint_dialog.selected_node_id)
            self.nav_agent.set_walk_target(constraint_object)

    def remove_walk_target(self):
        self.nav_agent.remove_walk_target()

    def perform_action(self):
        position = None
        keyframe_label = None
        action_name = str(self.actionComboBox.currentText())
        if self.keyframeComboBox.count() > 0:
            set_constraint_dialog = SelectSceneObjectsDialog(self.nav_agent.scene_object.scene, get_constraints)
            set_constraint_dialog.exec_()
            if set_constraint_dialog.success:
                constraint_object = self.nav_agent.scene_object.scene.getObject(set_constraint_dialog.selected_node_id)
                keyframe_label = str(self.keyframeComboBox.currentText())
                position = constraint_object.getPosition()
        self.nav_agent.perform_action(action_name, keyframe_label, position)

    def update_keyframe_combobox(self, label):
        self.fill_keyframe_combobox(str(label))

    def set_tolerance(self):
        self.nav_agent.tolerance = float(self.toleranceLineEdit.text())


WidgetManager.register("nav_agent", NavAgentWidget)