diff --git a/src/specklepy/objects/GIS/__init__.py b/src/specklepy/objects/GIS/__init__.py index 58d7b337..5845b0ee 100644 --- a/src/specklepy/objects/GIS/__init__.py +++ b/src/specklepy/objects/GIS/__init__.py @@ -1,12 +1,22 @@ """Builtin Speckle object kit.""" from specklepy.objects.GIS.CRS import CRS +from specklepy.objects.GIS.features import ( + GisMultipatchFeature, + GisNonGeometricFeature, + GisPointFeature, + GisPolygonFeature, + GisPolylineFeature, +) from specklepy.objects.GIS.geometry import ( GisLineElement, GisPointElement, GisPolygonElement, GisPolygonGeometry, GisRasterElement, + PolygonGeometry, + PolygonGeometry3d, + GisMultipatchGeometry, ) from specklepy.objects.GIS.layers import RasterLayer, VectorLayer @@ -14,9 +24,17 @@ "VectorLayer", "RasterLayer", "GisPolygonGeometry", + "PolygonGeometry", + "PolygonGeometry3d", + "GisMultipatchGeometry", "GisPolygonElement", "GisLineElement", "GisPointElement", "GisRasterElement", "CRS", + "GisPointFeature", + "GisPolylineFeature", + "GisPolygonFeature", + "GisMultipatchFeature", + "GisNonGeometricFeature", ] diff --git a/src/specklepy/objects/GIS/features.py b/src/specklepy/objects/GIS/features.py new file mode 100644 index 00000000..7b85afa8 --- /dev/null +++ b/src/specklepy/objects/GIS/features.py @@ -0,0 +1,107 @@ +from typing import List, Optional + +from specklepy.objects.base import Base +from specklepy.objects.geometry import Mesh, Point, Polyline +from specklepy.objects.GIS.geometry import PolygonGeometry + + +class GisNonGeometricFeature(Base, speckle_type="Objects.GIS.GisNonGeometricFeature"): + """GIS Table feature""" + + attributes: Base + + def __init__( + self, + attributes: Optional[Base] = None, + ) -> None: + self.attributes = attributes or Base() + + +class GisPointFeature( + Base, + detachable={"displayValue"}, + speckle_type="Objects.GIS.GisPointFeature", +): + """Gis Point Feature""" + + attributes: Base + displayValue: List[Point] + + @property + def geometry(self) -> List[Point]: + return self.displayValue + + def __init__( + self, + attributes: Optional[Base] = None, + displayValue: Optional[List[Point]] = None, + ) -> None: + self.attributes = attributes or Base() + displayValue = displayValue or [] + + +class GisPolylineFeature( + Base, + detachable={"displayValue"}, + speckle_type="Objects.GIS.GisPolylineFeature", +): + """Gis Polyline Feature""" + + attributes: Base + displayValue: List[Polyline] + + @property + def geometry(self) -> List[Polyline]: + return self.displayValue + + def __init__( + self, + attributes: Optional[Base] = None, + displayValue: Optional[List[Point]] = None, + ) -> None: + self.attributes = attributes or Base() + displayValue = displayValue or [] + + +class GisPolygonFeature( + Base, + detachable={"displayValue", "geometry"}, + speckle_type="Objects.GIS.GisPolygonFeature", +): + """Gis Polygon Feature""" + + attributes: Base + displayValue: List[Mesh] + geometry: List[PolygonGeometry] + + def __init__( + self, + geometry: List[PolygonGeometry], + attributes: Optional[Base] = None, + displayValue: Optional[List[Point]] = None, + ) -> None: + self.geometry = geometry + self.attributes = attributes or Base() + displayValue = displayValue or [] + + +class GisMultipatchFeature( + Base, + detachable={"displayValue", "geometry"}, + speckle_type="Objects.GIS.GisMultipatchFeature", +): + """Gis Multipatch Feature""" + + attributes: Base + displayValue: List[Mesh] + geometry: List[Base] # GisMultipatchGeometry or PolygonGeometry3d + + def __init__( + self, + geometry: List[Base], + attributes: Optional[Base] = None, + displayValue: Optional[List[Point]] = None, + ) -> None: + self.geometry = geometry + self.attributes = attributes or Base() + displayValue = displayValue or [] diff --git a/src/specklepy/objects/GIS/geometry.py b/src/specklepy/objects/GIS/geometry.py index 5cb78e11..c1d8dae3 100644 --- a/src/specklepy/objects/GIS/geometry.py +++ b/src/specklepy/objects/GIS/geometry.py @@ -1,5 +1,7 @@ from typing import List, Optional, Union +from deprecated import deprecated + from specklepy.objects.base import Base from specklepy.objects.geometry import ( Arc, @@ -12,23 +14,69 @@ ) -class GisPolygonGeometry( - Base, speckle_type="Objects.GIS.PolygonGeometry", detachable={"displayValue"} -): +class PolygonGeometry(Base, speckle_type="Objects.GIS.PolygonGeometry"): """GIS Polygon Geometry""" - boundary: Optional[Union[Polyline, Arc, Line, Circle, Polycurve]] = None - voids: Optional[List[Union[Polyline, Arc, Line, Circle, Polycurve]]] = None - displayValue: Optional[List[Mesh]] = None + boundary: Polyline + voids: List[Polyline] + + def __init__( + self, + units: str, + boundary: Polyline, + voids: Optional[List[Polyline]] = None, + ) -> None: + super().__init__(units=units) + self.boundary = boundary + self.voids = voids or [] + + +GisPolygonGeometry = PolygonGeometry +class PolygonGeometry3d( + PolygonGeometry, + speckle_type="Objects.GIS.PolygonGeometry3d", +): + """GIS Polygon3d Geometry""" + + def __init__( + self, + units: str, + boundary: Polyline, + voids: Optional[List[Polyline]] = None, + ) -> None: + super().__init__(units=units, boundary=boundary, voids=voids) + + +class GisMultipatchGeometry( + Base, + speckle_type="Objects.GIS.GisMultipatchGeometry", +): + """GIS Polygon3d Geometry""" + + def __init__( + self, + units: str, + faces: List[int], + vertices: List[float], + colors: Optional[List[int]], + ) -> None: + super().__init__(units=units) + self.faces = faces + self.vertices = vertices + self.colors = colors or [] + + +@deprecated(version="2.20", reason="Replaced with GisPolygonFeature") class GisPolygonElement(Base, speckle_type="Objects.GIS.PolygonElement"): """GIS Polygon element""" - geometry: Optional[List[GisPolygonGeometry]] = None + geometry: Optional[List[PolygonGeometry]] = None attributes: Optional[Base] = None +@deprecated(version="2.20", reason="Replaced with GisPolyineFeature") class GisLineElement(Base, speckle_type="Objects.GIS.LineElement"): """GIS Polyline element""" @@ -36,6 +84,7 @@ class GisLineElement(Base, speckle_type="Objects.GIS.LineElement"): attributes: Optional[Base] = None +@deprecated(version="2.20", reason="Replaced with GisPointFeature") class GisPointElement(Base, speckle_type="Objects.GIS.PointElement"): """GIS Point element""" @@ -68,6 +117,7 @@ class GisTopography( """GIS Raster element with 3d Topography representation""" +@deprecated(version="2.20", reason="Replaced with GisNonGeometricFeature") class GisNonGeometryElement(Base, speckle_type="Objects.GIS.NonGeometryElement"): """GIS Table feature""" diff --git a/src/specklepy/objects/other.py b/src/specklepy/objects/other.py index 5a2576e4..ffc3a271 100644 --- a/src/specklepy/objects/other.py +++ b/src/specklepy/objects/other.py @@ -295,17 +295,33 @@ class RevitParameter(Base, speckle_type="Objects.BuiltElements.Revit.Parameter") value: Any = None applicationUnitType: Optional[str] = None # eg UnitType UT_Length applicationUnit: Optional[str] = None # DisplayUnitType eg DUT_MILLIMITERS - applicationInternalName: Optional[ - str - ] = None # BuiltInParameterName or GUID for shared parameter + applicationInternalName: Optional[str] = ( + None # BuiltInParameterName or GUID for shared parameter + ) isShared: bool = False isReadOnly: bool = False isTypeParameter: bool = False +@deprecated( + version="2.20", reason="Collections namespace changed, collectionType deprecated" +) class Collection( Base, speckle_type="Speckle.Core.Models.Collection", detachable={"elements"} ): name: Optional[str] = None collectionType: Optional[str] = None elements: Optional[List[Base]] = None + + +class Collection( # noqa: F811 + Base, + speckle_type="Speckle.Core.Models.Collections.Collection", + detachable={"elements"}, +): + name: str + elements: List[Base] + + def init(self, name: str, elements: Optional[List[Base]] = None): + self.name = name + self.elements = elements or []