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