Beispiel #1
0
 def to_json(self):
     packed_obj = {
         POINTS: {
             EXTERIOR: points_to_row_col_list(self._exterior, flip_row_col_order=True),
             INTERIOR: [points_to_row_col_list(i, flip_row_col_order=True) for i in self._interior]
         }
     }
     return packed_obj
Beispiel #2
0
 def to_json(self):
     '''
     The function from_json convert VectorGeometry class object to json format
     :return: VectorGeometry class object in json format
     '''
     packed_obj = {
         POINTS: {
             EXTERIOR: points_to_row_col_list(self._exterior, flip_row_col_order=True),
             INTERIOR: [points_to_row_col_list(i, flip_row_col_order=True) for i in self._interior]
         },
         GEOMETRY_SHAPE: self.geometry_name(),
         GEOMETRY_TYPE: self.geometry_name(),
     }
     self._add_creation_info(packed_obj)
     return packed_obj
Beispiel #3
0
    def crop(self, rect):
        try:
            clipping_window_shpl = ShapelyPolygon(
                points_to_row_col_list(rect.corners))
            self_shpl = ShapelyPolygon(self.exterior_np,
                                       holes=self.interior_np)
            intersections_shpl = self_shpl.buffer(0).intersection(
                clipping_window_shpl)
            mapping_shpl = mapping(intersections_shpl)
        except Exception:
            logger.warn('Polygon cropping exception, shapely.', exc_info=False)
            raise

        intersections = shapely_figure_to_coords_list(mapping_shpl)

        # Check for bad cropping cases (e.g. empty points list)
        out_polygons = []
        for intersection in intersections:
            if isinstance(intersection,
                          list) and len(intersection) > 0 and len(
                              intersection[0]) >= 3:
                exterior = row_col_list_to_points(intersection[0],
                                                  do_round=True)
                interiors = []
                for interior_contour in intersection[1:]:
                    if len(interior_contour) > 2:
                        interiors.append(
                            row_col_list_to_points(interior_contour,
                                                   do_round=True))
                out_polygons.append(Polygon(exterior, interiors))
        return out_polygons
Beispiel #4
0
 def _transform(self, transform_fn):
     transformed_corners = [transform_fn(p) for p in self.corners]
     rows, cols = zip(*points_to_row_col_list(transformed_corners))
     return Rectangle(top=round(min(rows)),
                      left=round(min(cols)),
                      bottom=round(max(rows)),
                      right=round(max(cols)))
Beispiel #5
0
 def to_json(self):
     packed_obj = {
         POINTS: {
             EXTERIOR:
             points_to_row_col_list(self._exterior,
                                    flip_row_col_order=True),
             INTERIOR: [
                 points_to_row_col_list(i, flip_row_col_order=True)
                 for i in self._interior
             ]
         },
         GEOMETRY_SHAPE: self.geometry_name(),
         GEOMETRY_TYPE: self.geometry_name(),
     }
     self._add_creation_info(packed_obj)
     return packed_obj
Beispiel #6
0
 def to_json(self):
     packed_obj = {
         POINTS: points_to_row_col_list(self._points,
                                        flip_row_col_order=True),
         FACES: [face.to_json() for face in self._faces]
     }
     return packed_obj
Beispiel #7
0
 def to_json(self):
     packed_obj = {
         POINTS: {
             EXTERIOR:
             points_to_row_col_list(self._points, flip_row_col_order=True),
             INTERIOR: []
         }
     }
     return packed_obj
Beispiel #8
0
 def to_json(self):
     packed_obj = {
         POINTS: {
             EXTERIOR:
             points_to_row_col_list(self._points, flip_row_col_order=True),
             INTERIOR: []
         }
     }
     self._add_creation_info(packed_obj)
     return packed_obj
Beispiel #9
0
 def to_json(self):
     '''
     The function to_json convert Cuboid class object to json format
     :return: Cuboid in json format
     '''
     packed_obj = {
         POINTS: points_to_row_col_list(self._points, flip_row_col_order=True),
         FACES: [face.to_json() for face in self._faces]
     }
     self._add_creation_info(packed_obj)
     return packed_obj
Beispiel #10
0
 def to_json(self):
     '''
     The function to_json convert Rectangle class object to json format
     :return: Rectangle in json format
     '''
     packed_obj = {
         POINTS: {
             EXTERIOR: points_to_row_col_list(self._points, flip_row_col_order=True),
             INTERIOR: []
         }
     }
     self._add_creation_info(packed_obj)
     return packed_obj
Beispiel #11
0
    def crop(self, rect):
        '''
        Crop the current Polygon with a given rectangle, if polygon cat't be cropped it generate exception error
        :param rect: Rectangle class object
        :return: list of Poligon class objects
        '''
        from supervisely_lib.geometry.point_location import PointLocation
        try:
            points = [
                PointLocation(row=rect.top, col=rect.left),
                PointLocation(row=rect.top, col=rect.right + 1),
                PointLocation(row=rect.bottom + 1, col=rect.right + 1),
                PointLocation(row=rect.bottom + 1, col=rect.left)
            ]
            #points = rect.corners # old implementation with 1 pixel error (right bottom) #@TODO: investigate here (critical issue)

            clipping_window_shpl = ShapelyPolygon(
                points_to_row_col_list(points))
            self_shpl = ShapelyPolygon(self.exterior_np,
                                       holes=self.interior_np)
            intersections_shpl = self_shpl.buffer(0).intersection(
                clipping_window_shpl)
            mapping_shpl = mapping(intersections_shpl)
        except Exception:
            logger.warn('Polygon cropping exception, shapely.', exc_info=True)
            # raise
            # if polygon is invalid, just print warning and skip it
            # @TODO: need more investigation here
            return []

        intersections = shapely_figure_to_coords_list(mapping_shpl)

        # Check for bad cropping cases (e.g. empty points list)
        out_polygons = []
        for intersection in intersections:
            if isinstance(intersection,
                          list) and len(intersection) > 0 and len(
                              intersection[0]) >= 3:
                exterior = row_col_list_to_points(intersection[0],
                                                  do_round=True)
                interiors = []
                for interior_contour in intersection[1:]:
                    if len(interior_contour) > 2:
                        interiors.append(
                            row_col_list_to_points(interior_contour,
                                                   do_round=True))
                out_polygons.append(Polygon(exterior, interiors))
        return out_polygons
Beispiel #12
0
 def interior_np(self):
     return [
         np.array(points_to_row_col_list(i), dtype=np.int64)
         for i in self._interior
     ]
Beispiel #13
0
 def exterior_np(self):
     return np.array(points_to_row_col_list(self._exterior), dtype=np.int64)
Beispiel #14
0
 def exterior_np(self):
     '''
     The function exterior_np convert exterior attribute(list of PointLocation objects) to numpy array
     :return: numpy array
     '''
     return np.array(points_to_row_col_list(self._exterior), dtype=np.int64)
Beispiel #15
0
 def interior_np(self):
     '''
     The function interior_np convert interior attribute(list of PointLocation objects) to numpy array
     :return: numpy array
     '''
     return [np.array(points_to_row_col_list(i), dtype=np.int64) for i in self._interior]
Beispiel #16
0
 def _contours_list(self):
     return [
         points_to_row_col_list(
             [self._points[idx] for idx in face.tolist()],
             flip_row_col_order=True) for face in self._faces
     ]
Beispiel #17
0
 def assertPolyEquals(self, poly, exterior, interiors):
     self.assertIsInstance(poly, Polygon)
     self.assertCountEqual(points_to_row_col_list(poly.exterior, flip_row_col_order=True), exterior)
     self.assertEqual(len(poly.interior), len(interiors))
     for p_interior, interior in zip(poly.interior, interiors):
         self.assertCountEqual(points_to_row_col_list(p_interior, flip_row_col_order=True), interior)