예제 #1
0
 def glue(self, pos):
     """Behaves like simple line port, but for folded interface suggests
     connection to the middle point of a port."""
     if self.is_folded():
         px = (self.start.x + self.end.x) / 2
         py = (self.start.y + self.end.y) / 2
         d = distance_point_point((px, py), pos)
         return (px, py), d
     else:
         d, pl = distance_line_point(self.start, self.end, pos)
         return pl, d
예제 #2
0
    def glue(self, pos):
        """
        Get glue point on the port and distance to the port.

        >>> h = Handle((10, 10))
        >>> port = PointPort(h.pos)
        >>> port.glue((10, 0))
        (<Position object on (10, 10)>, 10.0)
        """
        d = distance_point_point(self.point, pos)
        return self.point, d
예제 #3
0
    def glue(self, pos):
        """
        Get glue point on the port and distance to the port.

        >>> h = Handle((10, 10))
        >>> port = PointPort(h.pos)
        >>> port.glue((10, 0))
        (<Position object on (10, 10)>, 10.0)
        """
        d = distance_point_point(self.point, pos)
        return self.point, d
예제 #4
0
    def glue(self, pos: SupportsFloatPos) -> Tuple[Pos, float]:
        """Get glue point on the port and distance to the port.

        >>> h = Handle((10, 10))
        >>> port = PointPort(h.pos)
        >>> port.glue((10, 0))
        (<Position object on (10, 10)>, 10.0)
        """
        point: Tuple[float, float] = self.point.pos  # type: ignore[assignment]
        d = distance_point_point(point, (float(pos[0]), float(pos[1])))
        return point, d
예제 #5
0
 def glue(self, pos):
     """
     Behaves like simple line port, but for folded interface suggests
     connection to the middle point of a port.
     """
     if self.iface.folded:
         px = old_div((self.start.x + self.end.x), 2)
         py = old_div((self.start.y + self.end.y), 2)
         d = distance_point_point((px, py), pos)
         return (px, py), d
     else:
         p1 = self.start
         p2 = self.end
         d, pl = distance_line_point(p1, p2, pos)
         return pl, d
예제 #6
0
 def glue(self, pos):
     """
     Behaves like simple line port, but for folded interface suggests
     connection to the middle point of a port.
     """
     if self.iface.folded:
         px = (self.start.x + self.end.x) / 2
         py = (self.start.y + self.end.y) / 2
         d = distance_point_point((px, py), pos)
         return (px, py), d
     else:
         p1 = self.start
         p2 = self.end
         d, pl = distance_line_point(p1, p2, pos)
         return pl, d
예제 #7
0
 def split(self, pos):
     item = self.item
     if isinstance(item, DataFlowView):
         return
     handles = item.handles()
     x, y = self.view.get_matrix_v2i(item).transform_point(*pos)
     max_dist = item.parent.border_width / 4.
     for h1, h2 in zip(handles, handles[1:]):
         if (h1 in item.end_handles() or h2 in item.end_handles()) and len(handles) > 2:
             continue
         xp = (h1.pos.x + h2.pos.x) / 2.
         yp = (h1.pos.y + h2.pos.y) / 2.
         if distance_point_point((x, y), (xp, yp)) <= max_dist:
             segment = handles.index(h1)
             handles, ports = self.split_segment(segment)
             return handles and handles[0]