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
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
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
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
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
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]