Example #1
0
 def test_angle(self):
     self.assertEqual(0.0, angle(QtCore.QPointF(0, 0),
                                 QtCore.QPointF(+1, 0)))
     self.assertEqual(+math.pi / 2,
                      angle(QtCore.QPointF(0, 0), QtCore.QPointF(0, -1)))
     self.assertEqual(-math.pi / 2,
                      angle(QtCore.QPointF(0, 0), QtCore.QPointF(0, +1)))
     self.assertEqual(math.pi,
                      angle(QtCore.QPointF(0, 0), QtCore.QPointF(-1, 0)))
     self.assertEqual(+math.pi / 4,
                      angle(QtCore.QPointF(0, 0), QtCore.QPointF(1, -1)))
Example #2
0
    def updatePos(self, points):
        """
        Update the current text position with respect to the shape.
        :type points: T <= tuple | list
        """
        if not points:
            return

        if self.isCentered():
            # Here the label should be centered in the edge path.
            # In this case we need to handle 2 different situations:
            #   1. when the edge path is composed of an even number of points (odd subpaths)
            #   2. when the edge path is composed of an odd number of points (even subpaths)
            if len(points) % 2 == 0:
                # If we have an even number of points, compute the position of the label
                # according to the midpoint of the subpath connecting the middle points.
                p1 = points[int(len(points) / 2) - 1]
                p2 = points[int(len(points) / 2)]
                mid = midpoint(p1, p2)
                rad = angle(p1, p2)
                spaceX = -40
                spaceY = -16
                self.setPos(
                    QtCore.QPointF(mid.x() + spaceX * sin(rad),
                                   mid.y() + spaceY * cos(rad)))
            else:
                # If we have an odd number of points compute the position
                # of the label according the point in the middle of the edge.
                mid = points[int(len(points) / 2)]
                rad1 = angle(points[int(len(points) / 2) - 1], mid)
                rad2 = angle(mid, points[int(len(points) / 2) + 1])
                diff = rad2 - rad1
                spaceX1 = 0
                spaceX2 = 0
                spaceY = -16
                if 0 < diff < M_PI:
                    spaceX1 = -80 * sin(rad1)
                    spaceX2 = -80 * sin(rad2)
                    spaceY += spaceY * sin(diff) * 1.8
                self.setPos(
                    QtCore.QPointF(mid.x() + spaceX1 + spaceX2,
                                   mid.y() + spaceY))
        else:
            # Here instead we will place the label near the intersection with
            # the target shape: this is mostly used for input edges connecting
            # role chain nodes and property assertion nodes, so we can inspect
            # visually the partecipation order of connected nodes without having
            # to scroll the diagram.
            rad = angle(points[-2], points[-1])
            pos = points[-1] - QtCore.QPointF(
                sin(rad + M_PI / 3.0) * 20,
                cos(rad + M_PI / 3.0) * 20)
            self.setPos(pos)
Example #3
0
    def updatePos(self, points):
        """
        Update the current text position with respect to the shape.
        :type points: T <= tuple | list
        """
        if not points:
            return

        if self.isCentered():
            # Here the label should be centered in the edge path.
            # In this case we need to handle 2 different situations:
            #   1. when the edge path is composed of an even number of points (odd subpaths)
            #   2. when the edge path is composed of an odd number of points (even subpaths)
            if len(points) % 2 == 0:
                # If we have an even number of points, compute the position of the label
                # according to the midpoint of the subpath connecting the middle points.
                p1 = points[int(len(points) / 2) - 1]
                p2 = points[int(len(points) / 2)]
                mid = midpoint(p1, p2)
                rad = angle(p1, p2)
                spaceX = -40
                spaceY = -16
                self.setPos(QtCore.QPointF(mid.x() + spaceX * sin(rad), mid.y() + spaceY * cos(rad)))
            else:
                # If we have an odd number of points compute the position
                # of the label according the point in the middle of the edge.
                mid = points[int(len(points) / 2)]
                rad1 = angle(points[int(len(points) / 2) - 1], mid)
                rad2 = angle(mid, points[int(len(points) / 2) + 1])
                diff = rad2 - rad1
                spaceX1 = 0
                spaceX2 = 0
                spaceY = -16
                if 0 < diff < M_PI:
                    spaceX1 = -80 * sin(rad1)
                    spaceX2 = -80 * sin(rad2)
                    spaceY += spaceY * sin(diff) * 1.8
                self.setPos(QtCore.QPointF(mid.x() + spaceX1 + spaceX2, mid.y() + spaceY))
        else:
            # Here instead we will place the label near the intersection with
            # the target shape: this is mostly used for input edges connecting
            # role chain nodes and property assertion nodes, so we can inspect
            # visually the partecipation order of connected nodes without having
            # to scroll the diagram.
            rad = angle(points[-2], points[-1])
            pos = points[-1] - QtCore.QPointF(sin(rad + M_PI / 3.0) * 20, cos(rad + M_PI / 3.0) * 20)
            self.setPos(pos)
Example #4
0
 def test_angle(self):
     self.assertEqual(0.0, angle(QtCore.QPointF(0, 0), QtCore.QPointF(+1, 0)))
     self.assertEqual(+math.pi / 2, angle(QtCore.QPointF(0, 0), QtCore.QPointF(0, -1)))
     self.assertEqual(-math.pi / 2, angle(QtCore.QPointF(0, 0), QtCore.QPointF(0, +1)))
     self.assertEqual(math.pi, angle(QtCore.QPointF(0, 0), QtCore.QPointF(-1, 0)))
     self.assertEqual(+math.pi / 4, angle(QtCore.QPointF(0, 0), QtCore.QPointF(1, -1)))
Example #5
0
def test_angle():
    assert 0.0 == angle(QtCore.QPointF(0, 0), QtCore.QPointF(+1, 0))
    assert +math.pi / 2 == angle(QtCore.QPointF(0, 0), QtCore.QPointF(0, -1))
    assert -math.pi / 2 == angle(QtCore.QPointF(0, 0), QtCore.QPointF(0, +1))
    assert math.pi == angle(QtCore.QPointF(0, 0), QtCore.QPointF(-1, 0))
    assert +math.pi / 4 == angle(QtCore.QPointF(0, 0), QtCore.QPointF(1, -1))