Skip to content

Commit

Permalink
Merge pull request #373 from specklesystems/dogukan/cnx-1006-add-miss…
Browse files Browse the repository at this point in the history
…ing-geometry-objects

feat: geometry objects with new structure
  • Loading branch information
dogukankaratas authored Jan 23, 2025
2 parents b4e2f37 + 010fb83 commit 85aa938
Show file tree
Hide file tree
Showing 25 changed files with 1,220 additions and 609 deletions.
Empty file.
296 changes: 0 additions & 296 deletions src/specklepy/objects/geometry.py

This file was deleted.

18 changes: 18 additions & 0 deletions src/specklepy/objects/geometry/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from specklepy.objects.geometry.arc import Arc
from specklepy.objects.geometry.line import Line
from specklepy.objects.geometry.mesh import Mesh
from specklepy.objects.geometry.plane import Plane
from specklepy.objects.geometry.point import Point
from specklepy.objects.geometry.polyline import Polyline
from specklepy.objects.geometry.vector import Vector

# re-export them at the geometry package level
__all__ = [
"Arc",
"Line",
"Mesh",
"Plane",
"Point",
"Polyline",
"Vector"
]
36 changes: 36 additions & 0 deletions src/specklepy/objects/geometry/arc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import math
from dataclasses import dataclass

from specklepy.objects.base import Base
from specklepy.objects.geometry.plane import Plane
from specklepy.objects.geometry.point import Point
from specklepy.objects.interfaces import ICurve, IHasUnits


@dataclass(kw_only=True)
class Arc(Base, IHasUnits, ICurve, speckle_type="Objects.Geometry.Arc"):
plane: Plane
startPoint: Point
midPoint: Point
endPoint: Point

@property
def radius(self) -> float:
return self.startPoint.distance_to(self.plane.origin)

@property
def length(self) -> float:
start_to_mid = self.startPoint.distance_to(self.midPoint)
mid_to_end = self.midPoint.distance_to(self.endPoint)
r = self.radius
angle = (2 * math.asin(start_to_mid / (2 * r))) + \
(2 * math.asin(mid_to_end / (2 * r)))
return r * angle

@property
def measure(self) -> float:
start_to_mid = self.startPoint.distance_to(self.midPoint)
mid_to_end = self.midPoint.distance_to(self.endPoint)
r = self.radius
return (2 * math.asin(start_to_mid / (2 * r))) + \
(2 * math.asin(mid_to_end / (2 * r)))
20 changes: 20 additions & 0 deletions src/specklepy/objects/geometry/line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from dataclasses import dataclass

from specklepy.objects.base import Base
from specklepy.objects.geometry.point import Point
from specklepy.objects.interfaces import ICurve, IHasUnits


@dataclass(kw_only=True)
class Line(
Base,
IHasUnits,
ICurve,
speckle_type="Objects.Geometry.Line"
):
start: Point
end: Point

@property
def length(self) -> float:
return self.start.distance_to(self.end)
Loading

0 comments on commit 85aa938

Please sign in to comment.