Example #1
0
    def __init__(self):
        """
        Class constructor

        >>> 1 + 1
        2
        >>>
        """
        super(DySMainWindow, self).__init__()
        # self.setAttribute(QtCore.Qt.WA_TranslucentBackground, 90)
        #    minimum size
        self.setMinimumSize(500, 500)

        #   computer information
        self._hostname = socket.gethostname()
        print "self._hostname =", self._hostname
        #    style
        # self.setStyle("windows")
        #     plastique
        #     cde
        #     motif
        #     sgi
        #     windows
        #     cleanlooks
        #     mac
        
        #    icon
        self.setWindowIcon(QtGui.QIcon(":/application.png"))
        QtGui.QSystemTrayIcon(QtGui.QIcon(":/application.png"))
        
        #    location of window on self.screen_geometry
        self.window_offset_x = 250
        self.window_offset_y = 50

        #    language settings
        self.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))

        #    window name
        self.setWindowTitle("DyS")

        #   font
        self.font = QtGui.QFont("Consolas", 10)
        
        #    mouse tracking
        self.setMouseTracking(True)
        
        #    context menu
        self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        
        #    main window flags
        self.flags = QtCore.Qt.Window

        __main_dir = current_working_directory
        self._working_directory = QtCore.QString(os.path.abspath(__main_dir).replace("/", "\\"))

        #   get screen geometry size
        self.screen_geometry = QtGui.QDesktopWidget().screenGeometry()
        #    move
        # self.move(self.window_offset_x, self.window_offset_y)
        dy = .05*self.screen_geometry.height()

        #   size of application
        #   position main widget on self.screen_geometry
        self.setGeometry(.25*self.screen_geometry.width(), dy, .5*self.screen_geometry.width(), .5*self.screen_geometry.width())

        #    MBD system
        MBD_folder_name_ = None
        self.MBD_file_abs_path = None

        # self.MBD_filename = "0_0_0_double_pendulum.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_0_0_double_pendulum"

        # self.MBD_filename = "dys_0_.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_"

        # self.MBD_filename = "dys_0_2_1.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_2_1"

        # self.MBD_filename = "dys_0_3_prismatic_joint.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_3_prismatic_joint"

        # self.MBD_filename = "dys_0_4.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_4"

        # self.MBD_filename = "dys_0_5.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_5"

        # self.MBD_filename = "dys_0_6_1.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_6_1"

        # self.MBD_filename = "dys_0_6_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_6_2"

        # self.MBD_filename = "dys_0_7_0_1.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_0_1"

        # self.MBD_filename = "dys_0_7_0_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_0_2"

        # self.MBD_filename = "0_7_3_3_kinematic_analysis_1arm.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_3_kinematic_analysis_1arm"

        # self.MBD_filename = "0_7_3_3_kinematic_analysis_2arm.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_3_kinematic_analysis_2arm"

        # self.MBD_filename = "0_7_3_3_kinematic_analysis_slider_crank.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_3_kinematic_analysis_slider_crank"

        # self.MBD_filename = "0_7_3_3_kinematic_analysis_4bar.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_3_kinematic_analysis_4bar"

        # self.MBD_filename = "0_7_3_3_kinematic_analysis_efi.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_3_kinematic_analysis_efi"

        # self.MBD_filename = "0_7_3_3_dynamic_analysis_efi.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_3_dynamic_analysis_efi"
    
        # self.MBD_filename = "0_7_3_3_dynamic_analysis_efi_V2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_3_dynamic_analysis_efi_V2"

        # self.MBD_filename = "dys_0_7_3_0.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_0"
        
        # self.MBD_filename = "0_7_3_0_plane_sphere.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_0_plane_sphere"

        # self.MBD_filename = "dys_0_7_2_revolute_clearence_joint.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_2_revolute_clearence_joint"

        # self.MBD_filename = "0_7_2_revolute_clearance_joint_1.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_2_revolute_clearance_joint_1"

        # self.MBD_filename = "0_7_3_0_contact_models.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_0_contact_models"

        self.MBD_filename = "0_7_3_0_contact_models_cylinder.dprj"
        MBD_folder_name_ = "dynamic_systems\\0_7_3_0_contact_models_cylinder"

        # self.MBD_filename = "0_7_3_2_pin_slot_clearance_joint.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_2_pin_slot_clearance_joint"

        # self.MBD_filename = "0_7_3_2_pin_slot_clearance_joint_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_2_pin_slot_clearance_joint_2"

        # self.MBD_filename = "0_7_3_2_pin_slot_clearance_joint_paper.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_2_pin_slot_clearance_joint_paper"

        # self.MBD_filename = "0_7_3_2_pin_slot_clearance_joint_paper_1.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_2_pin_slot_clearance_joint_paper_1"

        # self.MBD_filename = "0_7_3_2_pin_slot_clearance_joint_paper_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_2_pin_slot_clearance_joint_paper_2"

        # self.MBD_filename = "0_7_1_0_spring_translational.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_1_0_spring_translational"

        # self.MBD_filename = "0_8_0_surface_roughness.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_8_0_surface_roughness"

        # self.MBD_filename = "0_9_0_brush_slip-ring.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_9_0_brush_slip-ring"

        # self.MBD_filename = "0_9_1_brush_slip-ring.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_9_1_brush_slip-ring"

        # self.MBD_filename = "0_9_2_multiple_contacts.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_9_2_multiple_contacts"

        # self.MBD_filename = "0_9_3_brush_slip-ring.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_9_3_brush_slip-ring"

        # self.MBD_filename = "0_9_4_brush_slip-ring.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_9_4_brush_slip-ring"

        # self.MBD_filename = "0_9_5_brush_energy.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_9_5_brush_energy"

        # self.MBD_filename = "0_9_6_brush_slip-ring.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_9_6_brush_slip-ring"

        # self.MBD_filename = "1_0_0_ancf-beam.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-beam"

        # self.MBD_filename = "1_0_0_ancf-cantilever_1element.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_1element"

        # self.MBD_filename = "1_0_0_ancf-cantilever_2elements.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_2elements"

        # self.MBD_filename = "1_0_0_ancf-cantilever_2elements.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_2elements"
        #
        # self.MBD_filename = "1_0_0_ancf-cantilever_4elements.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_4elements"
        #
        # self.MBD_filename = "1_0_0_ancf-cantilever_8elements.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_8elements"
        #
        # self.MBD_filename = "1_0_0_ancf-cantilever_16elements.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_16elements"
        #
        # self.MBD_filename = "1_0_0_ancf-cantilever_32elements.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_32elements"

        # self.MBD_filename = "1_0_0_ancf-free_falling_flexible_pendulum.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-free_falling_flexible_pendulum"

        # self.MBD_filename = "1_0_0_ancf-cantilever_M.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-cantilever_M"

        # self.MBD_filename = "1_0_0_ancf-beam_contact.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_0_ancf-beam_contact"

        # self.MBD_filename = "1_0_1_ancf_frame.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_ancf_frame"

        # self.MBD_filename = "1_0_1_geometry_test.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_geometry_test"

        # self.MBD_filename = "1_0_1_external_force.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_external_force"

        # self.MBD_filename = "1_0_1_paper_2_eigenfrequencies.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_eigenfrequencies"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_point_mass.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_point_mass"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_2"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_sub.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_sub"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_2"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_2_y_spring=-1mm.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_2_y_spring=-1mm"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_2_y_spring=+1mm.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_2_y_spring=+1mm"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_2_prestress_2x.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_2_prestress_2x"

        #self.MBD_filename = "1_0_1_paper_2_dynamic_system_2_prestress_params_2x.dprj"
        #MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_2_prestress_params_2x"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_2_prestress_0.5x.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_2_prestress_0.5x"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_rigid.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_rigid"

        # self.MBD_filename = "1_0_1_paper_2_dynamic_system_rigid_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_dynamic_system_rigid_2"

        # self.MBD_filename = "0_7_3_2_pin_slot_clearance_joint_testing.dprj"
        # MBD_folder_name_ = "dynamic_systems\\0_7_3_2_pin_slot_clearance_joint_testing"

        # self.MBD_filename = "1_0_1_paper_2_rigid_joint_rigid_flexible.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_rigid_joint_rigid_flexible"

        # self.MBD_filename = "1_0_1_paper_2_revolute_joint_flexible_flexible.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_revolute_joint_flexible_flexible"

        # self.MBD_filename = "1_0_1_paper_2_revolute_joint_rigid_flexible.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_revolute_joint_rigid_flexible"

        # self.MBD_filename = "1_0_1_paper_2_rigid_joint_point_mass_flexible.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_rigid_joint_point_mass_flexible"

        # self.MBD_filename = "1_0_1_paper_2_rigid_joint_point_mass_flexible_offset.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_rigid_joint_point_mass_flexible_offset"

        # self.MBD_filename = "1_0_1_paper_2_rigid_joint_rigid_flexible.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_rigid_joint_rigid_flexible"

        # self.MBD_filename = "1_0_1_paper_2_rigid_joint_rigid_flexible_2.dprj"
        # MBD_folder_name_ = "dynamic_systems\\1_0_1_paper_2_rigid_joint_rigid_flexible_2"

        #   predefine attributes
        self.simulation_control_widget = None
        self._visualization_widget = "vtk"

        #   file is not defined
        if MBD_folder_name_ is None:
            self.MBD_folder_abs_path = os.getcwd()
            self.MBD_filename = project_filename = "Model_1"
            print "File is not defined"

        #   file is defined
        else:
            self._working_directory = os.path.join(os.getcwd(), "..")
            self.MBD_file_abs_path = os.path.abspath(os.path.join(self._working_directory, MBD_folder_name_, self.MBD_filename))

            self.MBD_folder_abs_path = os.path.join(self._working_directory, MBD_folder_name_)
            project_filename = os.path.basename(self.MBD_folder_abs_path)

        self._file_types = "Dynamic System Project File (*.dprj);;Multibody System File (*.mbd)"
        self.project = MBD_system_items.MBDsystemItem("MBDProject", parent=None)
        self.project.dys = self

        # print "self.MBD_folder_abs_path =", self.MBD_folder_abs_path
        self.MBD_system = MBDsystem(MBD_file_abs_path=self.MBD_file_abs_path,
                                    MBD_folder_abs_path=self.MBD_folder_abs_path,
                                    MBD_filename=project_filename,
                                    dys=self,
                                    parent=self.project)

        #   tree view widget
        self.tree_view_widget = TreeViewWidget(self.project, self.MBD_system, parent=self)
        self.tree_view_widget.setWindowFlags(self.flags)
        # self.tree_view_widget.show()
        #    move
        self.tree_view_widget.move(.18*self.screen_geometry.width() - self.tree_view_widget.frameGeometry().width(), dy)#self.frameGeometry().width(), self.frameGeometry().height())
        self.tree_view_widget.resize(.20*self.screen_geometry.width(), 0.8 * self.screen_geometry.height())

        #    simulation control widget
        self.simulation_control_widget = SimulationControlWidget(MBD_system=self.MBD_system, parent=self)
        self.simulation_control_widget.setWindowFlags(self.flags)
        # self.simulation_control_widget.show()

        #    move
        self.simulation_control_widget.move(.25*self.screen_geometry.width() + self.geometry().width(), dy)

        #   preferences widget
        self.preferences_widget = PreferencesWidget(self.simulation_control_widget, parent=None)

        #   graph widget - test
        for measure in self.MBD_system.measures:
            measure.graph_widget.setWindowFlags(self.flags)
            measure.graph_widget.show()

        #   set central widget
        self.setCentralWidget(self.simulation_control_widget.vtkWidget)

            # self.simulation_control_widget.vtkWidget.displayText()
            # print "2 =", self.simulation_control_widget.vtkWidget.vtkWidget.GetSize()
        # if self.simulation_control_widget.opengl_widget is not None:
        #     self.setCentralWidget(self.simulation_control_widget.opengl_widget)
        #    init graph widget - test
#         graph_widget = GraphWidget(parent=self)
#         graph_widget.setWindowFlags(self.flags)
#         graph_widget.show()
        #    output widget
        #    maybe put in new thread? if output will be large
#         self.OutputWidget = OutputWidget(parent=self)
#         self.OutputWidget.setWindowFlags(self.flags)
#         self.OutputWidget.show()

        #    job list widget
        self.JobListWidget = JobListWidget(job_list_=["job1", "job2", "job3"], parent=self)
        self.JobListWidget.setWindowFlags(self.flags)
        
        #    python console
        self.python_console = None#PythonConsole()

        #    resize
        # self.resize(self.simulation_control_widget.opengl_widget.initial_window_width, self.simulation_control_widget.opengl_widget.initial_window_height)
        
        #    create actions
        self.create_actions()
        
        #    create menus
        self.create_menus()
        
        #    create status bar
        self.create_status_bar()

        #    signals and connections
        self.connect_signals()