Пример #1
0
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)

        self.central = QWidget(self)
        self.textbox = QTextEdit(self.central)
        self.textbox.setMinimumSize(300, 100)

        self.vlayout = QVBoxLayout()        # Window layout
        self.displays = QHBoxLayout()
        self.disp = ImageWidget(self)    
        self.displays.addWidget(self.disp)
        self.vlayout.addLayout(self.displays)
        self.label = QLabel(self)
        self.vlayout.addWidget(self.label)
        self.vlayout.addWidget(self.textbox)
        self.central.setLayout(self.vlayout)
        self.setCentralWidget(self.central)

        self.mainMenu = self.menuBar()      # Menu bar
        exitAction = QAction('&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.triggered.connect(self.close)
        self.fileMenu = self.mainMenu.addMenu('&File')
        self.fileMenu.addAction(exitAction)

        im = cv.imread('C:\\Users\\Shir0w\\Desktop\\Figure_1.png')

        scale = 2
        disp_size = im.shape[1]//scale, im.shape[0]//scale
        disp_bpl = disp_size[0] * 3
        if scale > 1:
            im = cv.resize(im, disp_size, 
                             interpolation=cv.INTER_CUBIC)
        qim = QImage(im.data, disp_size[0], disp_size[1],QImage.Format_RGB888)
        self.disp.setImage(qim)
Пример #2
0
  def __init__(self):
    super(Tab_ECA,self).__init__()
    #Load UI From ui file
    loadUi(f'{UIS_FOLDER}/tab_eca.ui',self) #Load Ui From QT

    #Insert image widget
    self.image_widget = ImageWidget()
    self.verticalLayout_2.insertWidget(0,self.image_widget)

    self.eca = None
Пример #3
0
    def __init__(self):
        # Instantiate Widget and UI
        super(Tab_Sorter, self).__init__()
        loadUi(f'{UIS_FOLDER}/tab_sorter.ui', self)
        # Instantiate Image wrapper and Algo Sorter
        self.im_builder = ImageBuilder()
        self.sorter = None

        self.image_widget = ImageWidget()
        self.verticalLayout_2.insertWidget(0, self.image_widget)

        # Populate ListView with:
        # Avaiable sorting algorithm
        # Avaiable unsorted list
        self.populate()
Пример #4
0
    def __init__(self):
        super(Tab_Quadratic, self).__init__()
        #Load UI From ui file
        loadUi(f'{UIS_FOLDER}/tab_quadratic.ui', self)  #Load Ui From QT

        self.CPT = 0
        # self.im_builder = ImageBuilder()

        #Insert image widget
        self.image_widget = ImageWidget()
        self.verticalLayout_2.insertWidget(0, self.image_widget)

        self.quadra = None
        self.c_thread = None
        self.lbl_fps.setText(f"Average FPS : ")
Пример #5
0
    def __init__(self):
      super(Tab_Pathfinder,self).__init__()
      #Load UI From ui file
      loadUi(f'{UIS_FOLDER}/tab_pathfinder.ui',self) #Load Ui From QT


      #Insert image widget
      self.image_widget = ImageWidget()
      self.verticalLayout_2.insertWidget(0,self.image_widget)

      #Pathfinder class
      self.pathfinder = None

      #List avaiable algo and data
      self.populate_algo_list()
      self.populate_data_list()

      #Set stepts slider to 0
      self.sld_steps.setMinimum(0)
Пример #6
0
class Tab_ECA(QWidget):
  def __init__(self):
    super(Tab_ECA,self).__init__()
    #Load UI From ui file
    loadUi(f'{UIS_FOLDER}/tab_eca.ui',self) #Load Ui From QT

    #Insert image widget
    self.image_widget = ImageWidget()
    self.verticalLayout_2.insertWidget(0,self.image_widget)

    self.eca = None


  def anim_listener(self,stop_event):
    for k in range(self.eca.n_steps):
      self.eca.step(k)
      self.update_visual(k)
      time.sleep(.01)

    self.stop_event.set()

    sys.exit()

  def slt_start(self):
    self.current_step = 0

    rule_id = int(self.txt_rule.toPlainText())
    is_random = self.cb_random.isChecked()

    self.eca = ECA(901,450,rule_id,is_random)

    self.image = np.zeros((self.eca.n_steps,self.eca.w,3),dtype=np.uint8)
    self.stop_event = threading.Event()
    self.c_thread = threading.Thread(target=self.anim_listener,args=(self.stop_event,))

    self.c_thread.start()

  def update_visual(self,step):
    img = ImageBuilder.build(b_type='eca',data=self.eca.states,step=step, im=self.image )
    self.image_widget.setImage(display_image(img))
Пример #7
0
class Tab_Pathfinder(QWidget):
    def __init__(self):
      super(Tab_Pathfinder,self).__init__()
      #Load UI From ui file
      loadUi(f'{UIS_FOLDER}/tab_pathfinder.ui',self) #Load Ui From QT


      #Insert image widget
      self.image_widget = ImageWidget()
      self.verticalLayout_2.insertWidget(0,self.image_widget)

      #Pathfinder class
      self.pathfinder = None

      #List avaiable algo and data
      self.populate_algo_list()
      self.populate_data_list()

      #Set stepts slider to 0
      self.sld_steps.setMinimum(0)

    def get_implemented_algorithm(self):
      return [cls.__name__ for cls in Pathfinder.__subclasses__()]

    def populate_algo_list(self):
      for algorithm in self.get_implemented_algorithm():
        self.lst_func.addItem(algorithm)

    def populate_data_list(self):
      for file in glob(f"{DATA_FOLDER}/Pathfinder/*.txt"):
        f_name = file.split('\\')[-1]
        self.lst_data.addItem(f_name)

    def get_data_from_file(self):
      try:
        f_name = self.lst_data.currentItem().text()
      except AttributeError:
        return None
      txt = open(f"{DATA_FOLDER}/Pathfinder/{f_name}",'r').read()
      return [[col for col in row] for row in txt.split('\n')]

    def slt_sld_steps(self,val):
      self.current_step = val
      self.update_visual()

    def slt_btn_run(self):
      self.current_step = 0
      item = self.lst_func.currentItem().text()
      data = self.get_data_from_file()
      if data == None:
        return

      ##FILL
      if item == "Dijkstra":
        self.pathfinder = Dijkstra()
      elif item == "AStar":
        self.pathfinder = AStar()

      self.pathfinder.solve(data)
      self.total_steps = len(self.pathfinder.steps)-1
      self.sld_steps.setMaximum(self.total_steps)
      self.sld_steps.setValue(self.current_step)
      self.update_visual()


    def update_visual(self):
      if self.current_step == 0:
        text = "Initial Step"
      elif self.current_step == self.total_steps:
        text = "Final Step"
      else:
        text = f"Step {self.current_step} / {self.total_steps}" 

      img = ImageBuilder.build(b_type='pathfinder',data=self.pathfinder.steps[self.current_step] )
      self.image_widget.setImage(display_image(img))
      self.lbl_step.setText(text)
Пример #8
0
class Tab_Sorter(QWidget):
    """
    Class managing the Sorter Tab in our application
    """
    def __init__(self):
        # Instantiate Widget and UI
        super(Tab_Sorter, self).__init__()
        loadUi(f'{UIS_FOLDER}/tab_sorter.ui', self)
        # Instantiate Image wrapper and Algo Sorter
        self.im_builder = ImageBuilder()
        self.sorter = None

        self.image_widget = ImageWidget()
        self.verticalLayout_2.insertWidget(0, self.image_widget)

        # Populate ListView with:
        # Avaiable sorting algorithm
        # Avaiable unsorted list
        self.populate()

    def get_implemented_algorithm(self):
        return [cls.__name__ for cls in Sorter.__subclasses__()]

    def populate(self):
        self.populate_algo_list()
        self.populate_data_list()

    def populate_algo_list(self):
        for algorithm in self.get_implemented_algorithm():
            self.lst_func.addItem(algorithm)

    def populate_data_list(self):
        for file in glob(f"{DATA_FOLDER}/Sorter/*.txt"):
            f_name = file.split('\\')[-1]
            self.lst_data.addItem(f_name)

    def get_data_from_file(self):
        try:
            f_name = self.lst_data.currentItem().text()
        except AttributeError:
            return None
        txt = open(f"{DATA_FOLDER}/Sorter/{f_name}", 'r').read()
        return [int(i) for i in txt.split(',')]

    def slt_sld_step(self, val):
        """
      Update our visual on slider changes
      """
        self.current_step = val
        self.update_visual()

    def slt_sort_run(self):
        """
      Run algorithm using selected item in ListViews
      """
        item = self.lst_func.currentItem().text()
        data = self.get_data_from_file()
        print(f"Sorting {len(data)} items")
        if data == None:
            return

        if item == "Insertion":
            self.sorter = Insertion()
        elif item == "Selection":
            self.sorter = Selection()
        elif item == "Quicksort":
            self.sorter = Quicksort()
        elif item == "Bubblesort":
            self.sorter = Bubblesort()
        elif item == "Bubblesort_Optimized":
            self.sorter = Bubblesort_Optimized()
        elif item == "Bubblesort_Optimized_2":
            self.sorter = Bubblesort_Optimized_2()
        elif item == "Combsort":
            self.sorter = Combsort()
        elif item == "Gnomesort":
            self.sorter = Gnomesort()

        self.sorter.sort(dc(data))
        self.total_steps = len(self.sorter.steps) - 1
        self.sld_steps.setMaximum(self.total_steps)

        self.current_step = 0
        self.sld_steps.setValue(0)
        self.update_visual()

    def update_visual(self):
        if self.current_step == 0:
            text = "Initial Step"
        elif self.current_step == self.total_steps:
            text = "Final Step"
        else:
            text = f"Step {self.current_step} / {self.total_steps}"
        img = ImageBuilder.build(
            b_type='sorter',
            data=self.sorter.steps[self.current_step],
            status=self.sorter.steps_status[self.current_step])
        self.image_widget.setImage(display_image(img))
        self.lbl_step.setText(text)
Пример #9
0
class Tab_Quadratic(QWidget):
    def __init__(self):
        super(Tab_Quadratic, self).__init__()
        #Load UI From ui file
        loadUi(f'{UIS_FOLDER}/tab_quadratic.ui', self)  #Load Ui From QT

        self.CPT = 0
        # self.im_builder = ImageBuilder()

        #Insert image widget
        self.image_widget = ImageWidget()
        self.verticalLayout_2.insertWidget(0, self.image_widget)

        self.quadra = None
        self.c_thread = None
        self.lbl_fps.setText(f"Average FPS : ")

    def anim_listener(self, stop_event):
        state = True
        while state and not stop_event.isSet():
            start = time.time()
            #Check if we need to recompute the quad structure on each loop
            #Since our particles are moving
            if self.quadra.show_quad:
                self.quadra.create_qtree()

            #Check Collision
            if self.quadra.collision_loop:
                self.quadra.normal_collision_check()
            else:
                self.quadra.qtree = self.quadra.check_collision(
                    self.quadra.qtree)
            #Draw
            self.update_visual()
            #Update
            self.quadra.qtree = self.quadra.update_qtree(self.quadra.qtree)
            end = time.time()

            self.lbl_fps.setText(f"Average FPS : {1/(end-start):.5f}")
            time.sleep(.01)  # Avoid crashing if too few points
        sys.exit()

    def slt_start(self):

        # print(dir(self.c_thread))
        nb_points = int(self.txt_points.toPlainText())
        pt_limit = int(self.txt_limit.toPlainText())
        points = [
            Pt(random.randint(0, Quadratic.WIN_W),
               random.randint(0, Quadratic.WIN_H), 3) for _ in range(nb_points)
        ]
        self.quadra = Quadratic(nb_points, pt_limit)
        self.quadra.update_points(points)
        self.quadra.create_qtree()
        self.stop_event = threading.Event()
        self.c_thread = threading.Thread(target=self.anim_listener,
                                         args=(self.stop_event, ))

        self.c_thread.start()

    def slt_stop(self):
        self.stop_event.set()
        self.c_thread.join()

        self.clear_visual()

    def slt_quads_changed(self, value):
        self.quadra.show_quad = False
        if value != 0:
            self.quadra.show_quad = True

    def slt_collision_changed(self, value):
        self.quadra.collision_loop = False
        if value != 0:
            self.quadra.collision_loop = True

    def clear_visual(self):
        self.image_widget.clear()

    def update_visual(self):
        img = ImageBuilder.build(b_type='qtree',
                                 data=self.quadra.qtree,
                                 im=None,
                                 quads=self.quadra.show_quad,
                                 resize=True)
        self.image_widget.setImage(display_image(img))