Ejemplo n.º 1
0
    def test_simple(self):
        """ Test distance using easy geometry """
        a = (0, 0)
        b = (1, 0)
        # Move the point along another line segment at 1 unit away
        for e in ((0, 1), (0.5, 1), (1, 1), (0.5, -1)):
            dist = perpendicular_distance(a, b, e)
            self.assertAlmostEqual(dist, 1)

        # Move the point along the original segment itself => dist == 0
        for e in ((0, 0), (0.5, 0), (1, 0)):
            dist = perpendicular_distance(a, b, e)
            self.assertAlmostEqual(dist, 0)
Ejemplo n.º 2
0
    def test_simple(self):
        """ Test distance using easy geometry """
        a = (0, 0)
        b = (1, 0)
        # Move the point along another line segment at 1 unit away
        for e in ((0, 1), (0.5, 1), (1, 1), (0.5, -1)):
            dist = perpendicular_distance(a, b, e)
            self.assertAlmostEqual(dist, 1)

        # Move the point along the original segment itself => dist == 0
        for e in ((0, 0), (0.5, 0), (1, 0)):
            dist = perpendicular_distance(a, b, e)
            self.assertAlmostEqual(dist, 0)
Ejemplo n.º 3
0
    def get_hover(self, vpos):
        """ Check if the given position is on/near a selection edge or inside the selection

        :return: (bool) Return False if not hovering, or the type of hover

        """

        if self.v_edges:

            vx, vy = vpos

            # If position outside outer box
            if (not self.v_edges["o_l"] < vx < self.v_edges["o_r"]
                    or not self.v_edges["o_t"] < vy < self.v_edges["o_b"]):
                return gui.HOVER_NONE

            if self.edit_mode == EDIT_MODE_BOX:
                # If position inside inner box
                if (self.v_edges["i_l"] < vx < self.v_edges["i_r"]
                        and self.v_edges["i_t"] < vy < self.v_edges["i_b"]):
                    # logging.debug("Selection hover")
                    return gui.HOVER_SELECTION
                else:
                    hover = gui.HOVER_NONE

                    if vx < self.v_edges["i_l"]:
                        # logging.debug("Left edge hover")
                        hover |= gui.HOVER_LEFT_EDGE
                    elif vx > self.v_edges["i_r"]:
                        # logging.debug("Right edge hover")
                        hover |= gui.HOVER_RIGHT_EDGE

                    if vy < self.v_edges["i_t"]:
                        logging.debug("Top edge hover")
                        hover |= gui.HOVER_TOP_EDGE
                    elif vy > self.v_edges["i_b"]:
                        logging.debug("Bottom edge hover")
                        hover |= gui.HOVER_BOTTOM_EDGE

                    return hover

            elif self.edit_mode == EDIT_MODE_POINT:
                if (self.v_edges["s_l"] < vx < self.v_edges["s_r"]
                        and self.v_edges["s_t"] < vy < self.v_edges["s_b"]):
                    return gui.HOVER_START
                elif (self.v_edges["e_l"] < vx < self.v_edges["e_r"]
                      and self.v_edges["e_t"] < vy < self.v_edges["e_b"]):
                    return gui.HOVER_END
                elif (
                        # If position inside inner box
                        self.v_edges["i_l"] < vx < self.v_edges["i_r"]
                        and self.v_edges["i_t"] < vy < self.v_edges["i_b"]):
                    dist = util.perpendicular_distance(self.select_v_start_pos,
                                                       self.select_v_end_pos,
                                                       vpos)
                    if dist < self.hover_margin:
                        return gui.HOVER_LINE

        return gui.HOVER_NONE
Ejemplo n.º 4
0
 def test_null_line(self):
     """ Test distance when the line is just a single point"""
     a = (1, 0)
     b = (1, 0)
     e = (0, 0)
     # Follow a segment at 1 unit away
     dist = perpendicular_distance(a, b, e)
     self.assertAlmostEqual(dist, 1)
Ejemplo n.º 5
0
 def test_null_line(self):
     """ Test distance when the line is just a single point"""
     a = (1, 0)
     b = (1, 0)
     e = (0, 0)
     # Follow a segment at 1 unit away
     dist = perpendicular_distance(a, b, e)
     self.assertAlmostEqual(dist, 1)
Ejemplo n.º 6
0
    def get_hover(self, vpos):
        """ Check if the given position is on/near a selection edge or inside the selection

        :return: (bool) Return False if not hovering, or the type of hover

        """

        if self.v_edges:

            vx, vy = vpos

            # If position outside outer box
            if (
                not self.v_edges["o_l"] < vx < self.v_edges["o_r"] or
                not self.v_edges["o_t"] < vy < self.v_edges["o_b"]
            ):
                return gui.HOVER_NONE

            if self.edit_mode == EDIT_MODE_BOX:
                # If position inside inner box
                if (
                    self.v_edges["i_l"] < vx < self.v_edges["i_r"] and
                    self.v_edges["i_t"] < vy < self.v_edges["i_b"]
                ):
                    # logging.debug("Selection hover")
                    return gui.HOVER_SELECTION
                else:
                    hover = gui.HOVER_NONE

                    if vx < self.v_edges["i_l"]:
                        # logging.debug("Left edge hover")
                        hover |= gui.HOVER_LEFT_EDGE
                    elif vx > self.v_edges["i_r"]:
                        # logging.debug("Right edge hover")
                        hover |= gui.HOVER_RIGHT_EDGE

                    if vy < self.v_edges["i_t"]:
                        logging.debug("Top edge hover")
                        hover |= gui.HOVER_TOP_EDGE
                    elif vy > self.v_edges["i_b"]:
                        logging.debug("Bottom edge hover")
                        hover |= gui.HOVER_BOTTOM_EDGE

                    return hover

            elif self.edit_mode == EDIT_MODE_POINT:
                if (
                        self.v_edges["s_l"] < vx < self.v_edges["s_r"] and
                        self.v_edges["s_t"] < vy < self.v_edges["s_b"]
                ):
                    return gui.HOVER_START
                elif (
                        self.v_edges["e_l"] < vx < self.v_edges["e_r"] and
                        self.v_edges["e_t"] < vy < self.v_edges["e_b"]
                ):
                    return gui.HOVER_END
                elif (
                    # If position inside inner box
                    self.v_edges["i_l"] < vx < self.v_edges["i_r"] and
                    self.v_edges["i_t"] < vy < self.v_edges["i_b"]
                ):
                    dist = util.perpendicular_distance(self.select_v_start_pos,
                                                       self.select_v_end_pos,
                                                       vpos)
                    if dist < self.hover_margin:
                        return gui.HOVER_LINE

        return gui.HOVER_NONE