Example #1
0
def make_mask(shape, edge, width, seed):
    """ Make a mask representing a valley out of a countour edge specification """
    
    straights, concave, convex = get_features(edge)
    components = vec.uniques(itertools.chain.from_iterable(vec.decompose(v) for v in itertools.chain(straights, concave, convex)))
    return numpy.logical_or(
        make_mask_straights(shape, width, seed, components, straights),
        make_mask_corners(shape, width, seed, components, concave, convex)
    )
Example #2
0
def get_induced_corners(edge):
    """ These corners are induced by straight edges """
    
    corners = []
    for x in (-1, 1):
        for z in (-1, 1):
            corner = numpy.array([x, z])
            if all(vec.inside(v, edge) for v in vec.decompose(corner)):
                corners.append(corner)
    return corners
Example #3
0
def get_induced_corners(edge):
    """ These corners are induced by straight edges """

    corners = []
    for x in (-1, 1):
        for z in (-1, 1):
            corner = numpy.array([x, z])
            if all(vec.inside(v, edge) for v in vec.decompose(corner)):
                corners.append(corner)
    return corners
Example #4
0
def make_mask(shape, edge, width, seed):
    """ Make a mask representing a valley out of a countour edge specification """

    straights, concave, convex = get_features(edge)
    components = vec.uniques(
        itertools.chain.from_iterable(
            vec.decompose(v)
            for v in itertools.chain(straights, concave, convex)))
    return numpy.logical_or(
        make_mask_straights(shape, width, seed, components, straights),
        make_mask_corners(shape, width, seed, components, concave, convex))
Example #5
0
def get_corners(edge, straights):
    """ Get vectors representing corners """
    
    concave_corners = []
    convex_corners = []
    for corner in (v for v in edge if v[0] != 0 and v[1] != 0):
        # Are the corner component vectors in straight edges?
        in_straight = [vec.inside(v, straights) for v in vec.decompose(corner)]
        
        # If all or none of the component vectors are in straight edges then it's a real corner
        if all(in_straight):
            convex_corners.append(corner)
        elif not any(in_straight):
            concave_corners.append(corner)
        
    return concave_corners, convex_corners
Example #6
0
def get_corners(edge, straights):
    """ Get vectors representing corners """

    concave_corners = []
    convex_corners = []
    for corner in (v for v in edge if v[0] != 0 and v[1] != 0):
        # Are the corner component vectors in straight edges?
        in_straight = [vec.inside(v, straights) for v in vec.decompose(corner)]

        # If all or none of the component vectors are in straight edges then it's a real corner
        if all(in_straight):
            convex_corners.append(corner)
        elif not any(in_straight):
            concave_corners.append(corner)

    return concave_corners, convex_corners