raygeo.geo.shape.polygon3d
Functions
flip_polygon_3d()
flip_polygon_3d(
polygon: Sequence[types.Point3D],
flip_h: bool = False,
flip_v: bool = False,
flip_z: bool = False,
) -> types.Polygon3D
Flip a 3D polygon horizontally, vertically, and/or along Z.
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
flip_h | bool = False | Whether to flip horizontally (negate X). |
flip_v | bool = False | Whether to flip vertically (negate Y). |
flip_z | bool = False | Whether to flip along Z (negate Z). |
| Returns | types.Polygon3D | Flipped polygon. |
| Complexity | O(n) |

3D polygon flipped horizontally and along Z
flip_polygons_3d()
flip_polygons_3d(
polygons: Any,
flip_h: bool = False,
flip_v: bool = False,
flip_z: bool = False,
) -> list[types.Polygon3D]
Flip multiple 3D polygons.
| Parameter | Type | Description |
|---|---|---|
polygons | Any | List of 3D polygons. |
flip_h | bool = False | Whether to flip horizontally (negate X). |
flip_v | bool = False | Whether to flip vertically (negate Y). |
flip_z | bool = False | Whether to flip along Z (negate Z). |
| Returns | list[types.Polygon3D] | Flipped polygons. |
| Complexity | O(n * m) |
get_polygon_bounds_3d()
get_polygon_bounds_3d(polygon: Sequence[types.Point3D]) -> types.Rect3D
Get the 3D bounding box of a polygon.
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
| Returns | types.Rect3D | Bounding box as (x_min, y_min, x_max, y_max, z_min, z_max). |
| Complexity | O(n) |

3D bounding box (Rect3D)
get_polygon_centroid_3d()
get_polygon_centroid_3d(polygon: Sequence[types.Point3D]) -> types.Point3D
Get the centroid of a 3D polygon.
XY centroid from shoelace formula, Z from average.
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
| Returns | types.Point3D | Centroid point (x, y, z). |
| Complexity | O(n) |

3D centroid – XY via shoelace, Z as average
get_polygon_convex_hull_3d()
get_polygon_convex_hull_3d(polygon: Sequence[types.Point3D]) -> types.Polygon3D
Get the convex hull of a 3D polygon (XY-plane, Z from first vertex).
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
| Returns | types.Polygon3D | Convex hull as list of (x, y, z) points. |
| Complexity | O(n log n) |

3D convex hull (XY-plane, Z from first hull vertex)
get_polygon_edges_3d()
get_polygon_edges_3d(
polygon: Sequence[types.Point3D],
) -> list[tuple[types.Point3D, types.Point3D]]
Get the edges of a 3D polygon.
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
| Returns | list[tuple[types.Point3D, types.Point3D]] | List of ((x1, y1, z1), (x2, y2, z2)) edges. |
| Complexity | O(n) |

3D polygon edges as (start, end) pairs
get_polygon_group_bounds_3d()
get_polygon_group_bounds_3d(polygons: Any) -> types.Rect3D
Get the 3D bounding box of a group of polygons.
| Parameter | Type | Description |
|---|---|---|
polygons | Any | List of 3D polygons. |
| Returns | types.Rect3D | Bounding box as (x_min, y_min, x_max, y_max, z_min, z_max). |
| Complexity | O(n * m) |
get_polygon_perimeter_3d()
get_polygon_perimeter_3d(polygon: Sequence[types.Point3D]) -> float
Get the perimeter of a 3D polygon using full 3D edge lengths.
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
| Returns | float | Perimeter length. |
| Complexity | O(n) |

3D polygon perimeter using full 3D edge lengths
get_polygons_difference_3d()
get_polygons_difference_3d(poly1: Any, poly2: Any) -> list[types.Polygon3D]
Compute the difference of two 3D polygons (poly1 - poly2).
| Parameter | Type | Description |
|---|---|---|
poly1 | Any | Subject 3D polygon. |
poly2 | Any | Clip 3D polygon. |
| Returns | list[types.Polygon3D] | Difference result with Z from first polygon. |

3D polygon difference (A − B) — Z from A
get_polygons_group_difference_3d()
get_polygons_group_difference_3d(
subject: Any,
clip: Any,
) -> list[types.Polygon3D]
Group difference of 3D polygons (subject - clip).
| Parameter | Type | Description |
|---|---|---|
subject | Any | Subject group of 3D polygons. |
clip | Any | Clip group of 3D polygons. |
| Returns | list[types.Polygon3D] | Difference result with Z from first subject polygon. |
get_polygons_group_intersection_3d()
get_polygons_group_intersection_3d(
subject: Any,
clip: Any,
) -> list[types.Polygon3D]
Group intersection of 3D polygons (subject ∩ clip).
| Parameter | Type | Description |
|---|---|---|
subject | Any | Subject group of 3D polygons. |
clip | Any | Clip group of 3D polygons. |
| Returns | list[types.Polygon3D] | Intersection result with Z from first subject polygon. |
get_polygons_intersection_3d()
get_polygons_intersection_3d(poly1: Any, poly2: Any) -> list[types.Polygon3D]
Compute the intersection of two 3D polygons (XY-plane, Z preserved).
| Parameter | Type | Description |
|---|---|---|
poly1 | Any | First 3D polygon. |
poly2 | Any | Second 3D polygon. |
| Returns | list[types.Polygon3D] | Intersection result with Z from first polygon. |

3D polygon intersection — Z from first polygon
get_polygons_union_3d()
get_polygons_union_3d(polygons: Any) -> list[types.Polygon3D]
Compute the union of 3D polygons (XY-plane, Z preserved).
| Parameter | Type | Description |
|---|---|---|
polygons | Any | List of 3D polygons. |
| Returns | list[types.Polygon3D] | Union result with Z from first polygon. |

3D polygon union — Z from first polygon
offset_polygon_3d()
offset_polygon_3d(polygon: Any, offset: float) -> list[types.Polygon3D]
Offset (inflate/deflate) a closed 3D polygon.
| Parameter | Type | Description |
|---|---|---|
polygon | Any | Input 3D polygon. |
offset | float | Offset distance (positive = grow, negative = shrink). |
| Returns | list[types.Polygon3D] | Offset polygons with Z from input. |

3D polygon offset — Z preserved from input
offset_polyline_3d()
offset_polyline_3d(
polyline: Sequence[types.Point3D],
distance: float,
closed: bool = False,
) -> types.Polygon3D
Offset a 3D polyline in true 3D (edge-plane miter).
Unlike offset_polygon_3d (which projects to XY, offsets, then lifts back), this function offsets each vertex in the local plane of its two adjacent edges. This gives a true 3D offset suitable for non-planar polylines.
Positive distance offsets to the left of the traversal direction.
| Parameter | Type | Description |
|---|---|---|
polyline | Sequence[types.Point3D] | Input 3D vertices as (x, y, z) points. |
distance | float | Offset distance (positive = left, negative = right). |
closed | bool = False | When True, the polyline is treated as a closed ring (last vertex connects back to first). When False (default), the first and last vertices are offset perpendicular to their single edge. |
| Returns | types.Polygon3D | Offset polyline with the same number of vertices. |
| Complexity | O(n) |

True 3D polyline offset (edge-plane miter)
rotate_polygon_3d()
rotate_polygon_3d(
polygon: Sequence[types.Point3D],
angle: float,
) -> types.Polygon3D
Rotate a 3D polygon around the Z axis (XY rotation, Z preserved).
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
angle | float | Rotation angle in degrees. |
| Returns | types.Polygon3D | Rotated polygon. |
| Complexity | O(n) |

3D polygon rotated around Z axis (Z preserved)
rotate_polygons_3d()
rotate_polygons_3d(polygons: Any, angle: float) -> list[types.Polygon3D]
Rotate multiple 3D polygons around the Z axis.
| Parameter | Type | Description |
|---|---|---|
polygons | Any | List of 3D polygons. |
angle | float | Rotation angle in degrees. |
| Returns | list[types.Polygon3D] | Rotated polygons. |
| Complexity | O(n * m) |
scale_polygon_3d()
scale_polygon_3d(
polygon: Sequence[types.Point3D],
scale: float,
scale_y: Optional[float] = None,
scale_z: Optional[float] = None,
) -> types.Polygon3D
Scale a 3D polygon.
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
scale | float | X (and Y/Z if scale_y/scale_z are None) scale factor. |
scale_y | Optional[float] = None | Y scale factor (optional). |
scale_z | Optional[float] = None | Z scale factor (optional). |
| Returns | types.Polygon3D | Scaled polygon. |
| Complexity | O(n) |

3D polygon scaled uniformly
translate_polygon_3d()
translate_polygon_3d(
polygon: Sequence[types.Point3D],
dx: float,
dy: float,
dz: float = 0,
) -> types.Polygon3D
Translate a 3D polygon.
| Parameter | Type | Description |
|---|---|---|
polygon | Sequence[types.Point3D] | Polygon as (x, y, z) points. |
dx | float | X translation. |
dy | float | Y translation. |
dz | float = 0 | Z translation. |
| Returns | types.Polygon3D | Translated polygon. |
| Complexity | O(n) |

3D polygon translated by dx, dy, dz
translate_polygons_3d()
translate_polygons_3d(
polygons: Any,
dx: float,
dy: float,
dz: float = 0,
) -> list[types.Polygon3D]
Translate a list of 3D polygons.
| Parameter | Type | Description |
|---|---|---|
polygons | Any | List of 3D polygons. |
dx | float | X translation. |
dy | float | Y translation. |
dz | float = 0 | Z translation. |
| Returns | list[types.Polygon3D] | Translated polygons. |
| Complexity | O(n * m) |