Source code for compas_rhino.geometry.point
from __future__ import print_function
from __future__ import absolute_import
from __future__ import division
import Rhino
import compas_rhino
from compas.geometry import Point
from ._geometry import BaseRhinoGeometry
__all__ = ['RhinoPoint']
[docs]class RhinoPoint(BaseRhinoGeometry):
"""Wrapper for Rhino point objects.
Attributes
----------
x (read-only) : float
The X coordinate.
y (read-only) : float
The Y coordinate.
z (read-only) : float
The Z coordinate.
xyz (read-only) : list
The XYZ coordinates.
"""
def __init__(self):
super(RhinoPoint, self).__init__()
@property
def x(self):
return self.geometry.X
@property
def y(self):
return self.geometry.Y
@property
def z(self):
return self.geometry.Z
@property
def xyz(self):
return [self.x, self.y, self.z]
@classmethod
def from_guid(cls, guid):
"""Construct a Rhino object wrapper from the GUID of an existing Rhino object.
Parameters
----------
guid : str
The GUID of the Rhino object.
Returns
-------
:class:`compas_rhino.geometry.BaseRhinoGeometry`
The Rhino object wrapper.
"""
obj = compas_rhino.find_object(guid)
wrapper = cls()
wrapper.guid = obj.Id
wrapper.object = obj
wrapper.geometry = obj.Geometry.Location
return wrapper
[docs] @classmethod
def from_geometry(cls, geometry):
"""Construct a point wrapper from an existing geometry object.
Parameters
----------
geometry : point or :class:`Rhino.Geometry.Point3d`
The input geometry.
Returns
-------
:class:`compas_rhino.geometry.RhinoPoint`
The wrapped point.
"""
if not isinstance(geometry, Rhino.Geometry.Point3d):
geometry = Rhino.Geometry.Point3d(* geometry)
point = cls()
point.geometry = geometry
return point
[docs] @classmethod
def from_selection(cls):
"""Construct as point wrapper from a selected point object.
Parameters
----------
None
Returns
-------
:class:`compas_rhino.geometry.RhinoPoint`
The wrapped point.
"""
guid = compas_rhino.select_point()
return cls.from_guid(guid)
[docs] def to_compas(self):
"""Convert the wrapper to a COMPAS point.
Returns
-------
:class:`compas.geometry.Point`
A COMPAS point.
"""
return Point(self.x, self.y, self.z)
def closest_point(self, point, maxdist=0.0, return_param=False):
"""Compute the closest point on a curve to a point in space.
Parameters
----------
point : point
A point location.
maxdist : float, optional
The maximum distance between the point on the curve and the curve.
Default is ``0.0``.
return_param : bool, optional
Return not only the point coordinates, but also the parameter of the point on the curve.
Default is ``False``.
Returns
-------
list
The XYZ coordinates of the point.
"""
return self.xyz
# ==============================================================================
# Main
# ==============================================================================
if __name__ == "__main__":
from compas.geometry import Translation
from compas.geometry import Rotation
point = RhinoPoint.from_selection()
# point = RhinoPoint.from_geometry(Point3d(0, 0, 0))
# point = RhinoPoint.from_geometry(Point(0, 0, 0))
print(point.guid)
print(point.object)
print(point.geometry)
print(point.type)
print(point.name)
print(point.xyz)
p = point.to_compas()
print(p)
T = Translation([1.0, 1.0, 0.0])
R = Rotation.from_axis_and_angle([0.0, 0.0, 1.0], 0.5 * 3.14159)
X = R * T
point.transform(X)
p = point.to_compas()
print(p)