Exemplo n.º 1
0
 def on_expression_auto_clicked(self):
     """Auto configure the solutions."""
     if not self.driver_list.count():
         QMessageBox.information(self, "Auto configure",
                                 "Please setting the driver joint(s).")
         return
     reply = QMessageBox.question(
         self, "Auto configure", "This function can detect the structure " +
         "to configure the solutions.\n" +
         "The current settings will be cleared.")
     if ((reply != QMessageBox.Yes)
             or (not self.on_expression_clear_clicked())):
         return
     exprs = vpoints_configure(
         graph2vpoints(self.PreviewWindow.G, self.PreviewWindow.pos,
                       self.PreviewWindow.cus, self.PreviewWindow.same), [
                           eval(item.text().replace('P', ''))
                           for item in list_items(self.driver_list)
                       ], self.PreviewWindow.status)
     for expr in exprs:
         self.__addSolution(*expr)
     self.__hasSolution()
     self.__setWarning(self.expression_list_label,
                       not self.PreviewWindow.isAllLock())
     self.PreviewWindow.update()
Exemplo n.º 2
0
def getTriangle(self, vpoints: Tuple[VPoint]) -> List[Tuple[str]]:
    """Update triangle expression here.

    Special function for VPoints.
    """
    exprs = vpoints_configure(vpoints, tuple(self.InputsWidget.inputPair()))
    self.Entities_Expr.setExpr(exprs)
    return exprs
Exemplo n.º 3
0
    def getTriangle(self,
                    vpoints: Optional[Tuple[VPoint]] = None
                    ) -> List[Tuple[str]]:
        """Update triangle expression here.

        Special function for VPoints.
        """
        if vpoints is None:
            vpoints = self.EntitiesPoint.dataTuple()
        status = {}
        exprs = vpoints_configure(
            vpoints, tuple(
                (b, d) for b, d, a in self.InputsWidget.inputPairs()), status)
        data_dict, _ = data_collecting(
            exprs, {n: f'P{n}'
                    for n in range(len(vpoints))}, vpoints)
        self.EntitiesExpr.setExpr(exprs, data_dict,
                                  tuple(p for p, s in status.items() if not s))
        return exprs
Exemplo n.º 4
0
 def test_solving(self):
     """Test triangular formula solving.
     
     + Jansen's linkage (Single).
     """
     vpoints = [
         VPoint("ground, link_1", 0, 0., 'Green', 0., 0.),
         VPoint("link_1, link_2, link_4", 0, 0., 'Green', 9.61, 11.52),
         VPoint("ground, link_3, link_5", 0, 0., 'Blue', -38.0, -7.8),
         VPoint("link_2, link_3", 0, 0., 'Green', -35.24, 33.61),
         VPoint("link_3, link_6", 0, 0., 'Green', -77.75, -2.54),
         VPoint("link_4, link_5, link_7", 0, 0., 'Green', -20.1, -42.79),
         VPoint("link_6, link_7", 0, 0., 'Green', -56.05, -35.42),
         VPoint("link_7", 0, 0., 'Green', -22.22, -91.74),
     ]
     x, y = expr_solving(vpoints_configure(vpoints, [(0, 1)]),
                         {n: 'P{}'.format(n)
                          for n in range(len(vpoints))}, vpoints, [0.])[-1]
     self.assertTrue(isclose(x, -43.17005515543241))
     self.assertTrue(isclose(y, -91.75322590542523))
Exemplo n.º 5
0
    def __get_path(self, row: int) -> List[List[_Coord]]:
        """Using result data to generate paths of mechanism."""
        result = self.mechanism_data[row]
        expression: str = result['Expression']
        same: Dict[int:int] = result['same']
        inputs: List[Tuple[int, int]] = result['input']
        input_list = []
        for b, d in inputs:
            for i in range(b):
                if i in same:
                    b -= 1
            for i in range(d):
                if i in same:
                    d -= 1
            input_list.append((b, d))

        vpoints = parse_vpoints(expression)
        expr = vpoints_configure(vpoints, input_list)
        b, d = input_list[0]
        base_angle = vpoints[b].slope_angle(vpoints[d])

        path = [[] for _ in range(len(vpoints))]
        for angle in range(360 + 1):
            try:
                result_list = expr_solving(
                    expr, {i: f"P{i}"
                           for i in range(len(vpoints))}, vpoints,
                    [base_angle + angle] + [0] * (len(input_list) - 1))
            except ValueError:
                nan = float('nan')
                for i in range(len(vpoints)):
                    path[i].append((nan, nan))
            else:
                for i in range(len(vpoints)):
                    coord = result_list[i]
                    if type(coord[0]) == tuple:
                        path[i].append(coord[1])
                    else:
                        path[i].append(coord)
        return path
Exemplo n.º 6
0
    def get_triangle(self, vpoints: Optional[Tuple[VPoint]] = None) -> ExpressionStack:
        """Update triangle expression here.

        Special function for VPoints.
        """
        if vpoints is None:
            vpoints = self.entities_point.data_tuple()
        status = {}
        exprs = vpoints_configure(
            vpoints,
            [(b, d) for b, d, _ in self.inputs_widget.input_pairs()],
            status
        )
        data_dict, _ = data_collecting(
            exprs,
            {n: f'P{n}' for n in range(len(vpoints))},
            vpoints
        )
        self.entities_expr.set_expr(
            exprs,
            data_dict,
            tuple(p for p, s in status.items() if not s)
        )
        return exprs