Source code for supervisely.geometry.polyline_3d

from supervisely.geometry.geometry import Geometry
from supervisely.geometry.constants import LABELER_LOGIN, UPDATED_AT, CREATED_AT, ID, CLASS_ID
from supervisely.geometry.cuboid_3d import Vector3d
from typing import List, Union


[docs] class Polyline3D(Geometry): """3D polyline: sequence of connected line segments in 3D space. Immutable."""
[docs] @staticmethod def geometry_name(): """ Returns the name of the geometry. :returns: name of the geometry :rtype: str """ return "polyline_3d"
def __init__( self, points: Union[List[float], List[Vector3d]], sly_id=None, class_id=None, labeler_login=None, updated_at=None, created_at=None, ): """ Polyline3D geometry :param points: List of 3D point coordinates which define the polyline in 3D space. :type points: List[:class:`~supervisely.geometry.cuboid_3d.Vector3d`] :param sly_id: Polyline ID in Supervisely server. :type sly_id: int, optional :param class_id: ID of ObjClass to which Polyline belongs. :type class_id: int, optional :param labeler_login: Login of the user who created Polyline3D. :type labeler_login: str, optional :param updated_at: Date and Time when Polyline was modified last. Date Format: Year:Month:Day:Hour:Minute:Seconds. Example: '2021-01-22T19:37:50.158Z'. :type updated_at: str, optional :param created_at: Date and Time when Polyline was created. Date Format is the same as in "updated_at" parameter. :type created_at: str, optional :Usage Example: .. code-block:: python import supervisely as sly points = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] figure = sly.Polyline(points) """ if not isinstance(points[0], Vector3d): points = [Vector3d(point[0], point[1], point[2]) for point in points] super().__init__( sly_id=sly_id, class_id=class_id, labeler_login=labeler_login, updated_at=updated_at, created_at=created_at, ) self._points = points @property def points(self): return self._points def to_json(self): points = [[point.x, point.y, point.z] for point in self._points] res = {"points": points} self._add_creation_info(res) return res
[docs] @classmethod def from_json(cls, data): """ Convert a json dict to Polyline3D. :param data: Polyline3D in json format as a dict. :type data: dict :returns: Polyline3D from json. :rtype: :class:`~supervisely.geometry.polyline_3d.Polyline3D` :Usage Example: .. code-block:: python import supervisely as sly figure_json = { "points": { [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ], } } figure = sly.Polyline3D.from_json(figure_json) """ if not data.get("points"): raise ValueError("Data dict must contain 'points' field!") points = data["points"] labeler_login = data.get(LABELER_LOGIN, None) updated_at = data.get(UPDATED_AT, None) created_at = data.get(CREATED_AT, None) sly_id = data.get(ID, None) class_id = data.get(CLASS_ID, None) return cls( points, sly_id=sly_id, class_id=class_id, labeler_login=labeler_login, updated_at=updated_at, created_at=created_at, )