def _get_arc_graph(core_parse, circle, circle_variable, circle_points): """ Directional arc graph. :param core_parse: :param circle: :return: """ eps = CIRCLE_EPS arc_graph = nx.DiGraph() for key0, key1 in itertools.permutations(circle_points, 2): p0, p1 = circle_points[key0], circle_points[key1] arc = instantiators['arc'](circle, p0, p1) v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[ key1] var = FormulaNode(signatures['Arc'], [circle_variable, v0, v1]) if instance_exists(core_parse, arc): arc_points = {} for key in set(circle_points).difference({key0, key1}): point = circle_points[key] if distance_between_arc_and_point(arc, point) <= eps: arc_points[key] = point arc_graph.add_edge(key0, key1, instance=arc, points=arc_points, variable=var) return arc_graph
def _arc_exists(diagram_parse, arc): eps = 4 multiplier = 1 assert isinstance(diagram_parse, CoreParse) pixels = diagram_parse.primitive_parse.image_segment_parse.diagram_image_segment.pixels near_pixels = set(pixel for pixel in pixels if distance_between_arc_and_point(arc, pixel) <= eps) length = arc_length(arc) ratio = float(len(near_pixels))/length if ratio < multiplier: return False return True
def _arc_exists(diagram_parse, arc): eps = 4 multiplier = 1 assert isinstance(diagram_parse, CoreParse) pixels = diagram_parse.primitive_parse.image_segment_parse.diagram_image_segment.pixels near_pixels = set(pixel for pixel in pixels if distance_between_arc_and_point(arc, pixel) <= eps) length = arc_length(arc) ratio = float(len(near_pixels)) / length if ratio < multiplier: return False return True
def _get_arc_graph(diagram_parse, circle, circle_points): """ Directional arc graph. :param diagram_parse: :param circle: :return: """ eps = CIRCLE_EPS arc_graph = nx.DiGraph() for key0, key1 in itertools.permutations(circle_points, 2): p0, p1 = circle_points[key0], circle_points[key1] arc = instantiators['arc'](circle, p0, p1) if instance_exists(diagram_parse, arc): arc_points = {} for key in set(circle_points).difference({key0, key1}): point = circle_points[key] if distance_between_arc_and_point(arc, point) <= eps: arc_points[key] = point arc_graph.add_edge(key0, key1, instance=arc, points=arc_points) return arc_graph
def _get_arc_graph(core_parse, circle, circle_variable, circle_points): """ Directional arc graph. :param core_parse: :param circle: :return: """ eps = CIRCLE_EPS arc_graph = nx.DiGraph() for key0, key1 in itertools.permutations(circle_points, 2): p0, p1 = circle_points[key0], circle_points[key1] arc = instantiators['arc'](circle, p0, p1) v0, v1 = core_parse.point_variables[key0], core_parse.point_variables[key1] var = FormulaNode(signatures['Arc'], [circle_variable, v0, v1]) if instance_exists(core_parse, arc): arc_points = {} for key in set(circle_points).difference({key0, key1}): point = circle_points[key] if distance_between_arc_and_point(arc, point) <= eps: arc_points[key] = point arc_graph.add_edge(key0, key1, instance=arc, points=arc_points, variable=var) return arc_graph