GeometryBase
============

.. py:module:: rhino3dm

.. py:class:: GeometryBase

   .. py:attribute:: ObjectType

      ObjectType: Useful for switch statements that need to differentiate between
      basic object types like points, curves, surfaces, and so on.

   .. py:attribute:: IsDeformable

      bool: True if object can be accurately modified with "squishy" transformations like
      projections, shears, and non-uniform scaling.

   .. py:attribute:: HasBrepForm

      bool: Returns True if the Brep.TryConvertBrep function will be successful for this object

   .. py:method:: Transform(xform)

      Transforms the geometry. If the input Transform has a SimilarityType of
      OrientationReversing, you may want to consider flipping the transformed
      geometry after calling this function when it makes sense. For example,
      you may want to call Flip() on a Brep after transforming it.

      :param Transform xform: Transformation to apply to geometry.

      :return: True if geometry successfully transformed.

      :rtype: bool

   .. py:method:: Translate(translationVector)

      Translates the object along the specified vector.

      :param rhino3dm.Vector3d translationVector: A moving vector.

      :return: True if geometry successfully translated.

      :rtype: bool

   .. py:method:: Scale(scaleFactor)

      Scales the object by the specified factor. The scale is centered at the origin.

      :param float scaleFactor: The uniform scaling factor.

      :return: True if geometry successfully scaled.

      :rtype: bool

   .. py:method:: Rotate(rotationAngle, rotationAxis, rotationCenter)

      Rotates the object about the specified axis. A positive rotation
      angle results in a counter-clockwise rotation about the axis (right hand rule).

      :param float angleRadians: Angle of rotation in radians.
      :param rhino3dm.Vector3d rotationAxis: Direction of the axis of rotation.
      :param rhino3dm.Point3d rotationCenter: Point on the axis of rotation.

      :return: True if geometry successfully rotated.

      :rtype: bool

   .. py:method:: GetBoundingBox()

      Bounding box solver. Gets the world axis aligned bounding box for the geometry.

      :param bool accurate: If true, a physically accurate bounding box will be computed. \
         If not, a bounding box estimate will be computed. For some geometry types there is no \
         difference between the estimate and the accurate bounding box. Estimated bounding boxes \
         can be computed much (much) faster than accurate (or "tight") bounding boxes. \
         Estimated bounding boxes are always similar to or larger than accurate bounding boxes.

      :return: The bounding box of the geometry in world coordinates or BoundingBox.Empty \
         if not bounding box could be found.

      :rtype: rhino3dm.BoundingBox

   .. py:method:: MakeDeformable()

      If possible, converts the object into a form that can be accurately modified
      with "squishy" transformations like projections, shears, an non-uniform scaling.

      :return: False if object cannot be converted to a deformable object. True if object was \
         already deformable or was converted into a deformable object.

      :rtype: bool

   .. py:method:: Duplicate()

      Constructs a deep (full) copy of this object.

      :return: An object of the same type as this, with the same properties and behavior.

      :rtype: rhino3dm.GeometryBase
