def get_port_at_point(self, vpos, distance=10, exclude=None, exclude_port_fun=None):
        """
        Find item with port closest to specified position.

        List of items to be ignored can be specified with `exclude`
        parameter.

        Tuple is returned

        - found item
        - closest, connectable port
        - closest point on found port (in view coordinates)

        :Parameters:
         vpos
            Position specified in view coordinates.
         distance
            Max distance from point to a port (default 10)
         exclude
            Set of items to ignore.
        """
        # Method had to be inherited, as the base method has a bug:
        # It misses the statement max_dist = d
        v2i = self.get_matrix_v2i
        vx, vy = vpos

        max_dist = distance
        port = None
        glue_pos = None
        item = None

        rect = (vx - distance, vy - distance, distance * 2, distance * 2)
        items = self.get_items_in_rectangle(rect, reverse=True)
        for i in items:
            if exclude and i in exclude:
                continue
            for p in i.ports():
                if not p.connectable:
                    continue
                if exclude_port_fun and exclude_port_fun(p):
                    continue

                ix, iy = v2i(i).transform_point(vx, vy)
                pg, d = p.glue((ix, iy))
                if d > max_dist:
                    continue

                max_dist = d
                item = i
                port = p

                # transform coordinates from connectable item space to view
                # space
                i2v = self.get_matrix_i2v(i).transform_point
                glue_pos = i2v(*pg)

        return item, port, glue_pos
def get_port_at_point ( self , vpos , distance = 10 , exclude = None , exclude_port_fun = None ) : v2i = self . get_matrix_v2i vx , vy = vpos max_dist = distance port = None glue_pos = None item = None rect = ( vx - distance , vy - distance , distance * 2 , distance * 2 ) items = self . get_items_in_rectangle ( rect , reverse = True ) for i in items : if exclude and i in exclude : continue for p in i . ports ( ) : if not p . connectable : continue if exclude_port_fun and exclude_port_fun ( p ) : continue ix , iy = v2i ( i ) . transform_point ( vx , vy ) pg , d = p . glue ( ( ix , iy ) ) if d > max_dist : continue max_dist = d item = i port = p i2v = self . get_matrix_i2v ( i ) . transform_point glue_pos = i2v ( * pg ) return item , port , glue_pos
Find item with port closest to specified position.

        List of items to be ignored can be specified with `exclude`
        parameter.

        Tuple is returned

        - found item
        - closest, connectable port
        - closest point on found port (in view coordinates)

        :Parameters:
         vpos
            Position specified in view coordinates.
         distance
            Max distance from point to a port (default 10)
         exclude
            Set of items to ignore.