Base class for all geometry classes that must provide runtime class id. Provides interface for common geometric operations like finding bounding boxes and transforming. More...
#include <opennurbs_geometry.h>
Public Member Functions | |
ON_Geometry ()=default | |
ON_Geometry (const ON_Geometry &)=default | |
~ON_Geometry ()=default | |
ON_BoundingBox | BoundingBox () const |
Get object's 3d axis aligned bounding box. More... | |
virtual class ON_Brep * | BrepForm (class ON_Brep *brep=nullptr) const |
If possible, BrepForm() creates a brep form of the ON_Geometry. More... | |
virtual void | ClearBoundingBox () |
Some objects cache bounding box information. If you modify an object, then call ClearBoundingBox() to inform the object that any cached bounding boxes are invalid. More... | |
virtual ON_COMPONENT_INDEX | ComponentIndex () const |
If this piece of geometry is a component in something larger, like an ON_BrepEdge in an ON_Brep, then this function returns the component index. More... | |
virtual int | Dimension () const |
Dimension of the object. More... | |
virtual bool | EvaluatePoint (const class ON_ObjRef &objref, ON_3dPoint &P) const |
Evaluate the location of a point from the object reference. More... | |
virtual bool | GetBBox (double *boxmin, double *boxmax, bool bGrowBox=false) const |
This is the virtual function that actually calculates axis aligned bounding boxes. More... | |
bool | GetBoundingBox (ON_BoundingBox &bbox, bool bGrowBox=false) const |
Get object's 3d axis aligned bounding box or the union of the input box with the object's bounding box. More... | |
bool | GetBoundingBox (ON_3dPoint &bbox_min, ON_3dPoint &bbox_max, bool bGrowBox=false) const |
Get corners of object's 3d axis aligned bounding box or the union of the input box with the object's bounding box. More... | |
virtual bool | GetTightBoundingBox (class ON_BoundingBox &tight_bbox, bool bGrowBox=false, const class ON_Xform *xform=nullptr) const |
Get tight bounding box. More... | |
virtual bool | HasBrepForm () const |
Query an object to see if it has an ON_Brep form. Result: Returns true if the virtual ON_Geometry::BrepForm can compute an ON_Brep representation of this object. More... | |
virtual bool | IsDeformable () const |
bool | IsValid (class ON_TextLog *text_log=nullptr) const override |
Tests an object to see if its data members are correctly initialized. More... | |
virtual bool | MakeDeformable () |
If possible, converts the object into a form that can be accuratly modified with "squishy" transformations like projections, shears, an non-uniform scaling. More... | |
ON_Geometry & | operator= (const ON_Geometry &)=default |
bool | Rotate (double sin_angle, double cos_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center) |
Rotates the object about the specified axis. A positive rotation angle results in a counter-clockwise rotation about the axis (right hand rule). More... | |
bool | Rotate (double rotation_angle, const ON_3dVector &rotation_axis, const ON_3dPoint &rotation_center) |
Rotates the object about the specified axis. A positive rotation angle results in a counter-clockwise rotation about the axis (right hand rule). More... | |
bool | Scale (double scale_factor) |
Scales the object by the specified facotor. The scale is centered at the origin. More... | |
virtual bool | SwapCoordinates (int i, int j) |
Swaps object coordinate values with indices i and j. More... | |
virtual bool | Transform (const ON_Xform &xform) |
Transforms the object. More... | |
bool | Translate (const ON_3dVector &translation_vector) |
Translates the object along the specified vector. More... | |
Public Member Functions inherited from ON_Object | |
ON_Object () ON_NOEXCEPT | |
ON_Object (const ON_Object &) | |
virtual | ~ON_Object () |
virtual ON_AggregateComponentStatus | AggregateComponentStatus () const |
Call whenever a component status setting is modifed by directly changing it on a component in a way that will result in any saved information about the parent object's aggretate component status becoming invalid. More... | |
bool | AttachUserData (class ON_UserData *pUserData) |
Attach user data to an object. More... | |
unsigned int | ClearAllComponentStates () const |
Set all active level component states to ON_ComponentStatus::NoneSet. More... | |
virtual unsigned int | ClearComponentStates (ON_ComponentStatus states_to_clear) const |
Clear the specified states on every component. More... | |
virtual unsigned int | ClearComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_clear) const |
Clear states on an individual component. More... | |
unsigned int | CopyUserData (const ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution) |
Expert user tool that copies user data items with positive values of ON_UserData.m_userdata_copycount from source_object to "this. More... | |
void | CopyUserData (const ON_Object &source_object) |
Calls CopyUserData(source_object,ON_Object::UserDataConflictResolution::source_object). More... | |
virtual ON__UINT32 | DataCRC (ON__UINT32 current_remainder) const |
Returns a CRC calculated from the information that defines the object. This CRC can be used as a quick way to see if two objects are not identical. More... | |
virtual bool | DeleteComponents (const ON_COMPONENT_INDEX *ci_list, size_t ci_count) |
Delete the portions of the object identified in ci_list[]. More... | |
virtual void | DestroyRuntimeCache (bool bDelete=true) |
Expert user function. If you are using openNURBS in its default configuration to read and write 3dm archives, you never need to call this function. Many objects employ lazy creation of (runtime) caches that save information to help speed geometric calculations. This function will destroy all runtime information. More... | |
bool | DetachUserData (class ON_UserData *pUserData) |
Remove user data from an object. More... | |
virtual void | Dump (ON_TextLog &) const |
Creates a text dump of the object. More... | |
void | EmergencyDestroy () |
Sets m_user_data_list = 0. More... | |
class ON_UserData * | FirstUserData () const |
User data is stored as a linked list of ON_UserData classes. FirstUserData gets the first item in the linked list. This is the most recent item attached using AttachUserData(). Remark: To iterate through all the user data on an object, call FirstUserData() and then use ON_UserData::Next() to traverse the list. More... | |
virtual unsigned int | GetComponentsWithSetStates (ON_ComponentStatus states_filter, bool bAllEqualStates, ON_SimpleArray< ON_COMPONENT_INDEX > &components) const |
class ON_UserData * | GetUserData (const ON_UUID &userdata_uuid) const |
Get a pointer to user data. More... | |
bool | GetUserString (const wchar_t *key, ON_wString &string_value) const |
Get user string from the object. More... | |
int | GetUserStringKeys (ON_ClassArray< ON_wString > &user_string_keys) const |
Get a list of all user string keys on the object. More... | |
int | GetUserStrings (ON_ClassArray< ON_UserString > &user_strings) const |
Get a list of all user strings on the object. More... | |
bool | IsKindOf (const ON_ClassId *pClassId) const |
Low level tool to test if an object is derived from a specified class. More... | |
virtual void | MarkAggregateComponentStatusAsNotCurrent () const |
Call whenever a component status setting is modifed by directly changing it on a component in a way that will result in any saved information about the parent object's aggretate component status becoming invalid. More... | |
virtual void | MemoryRelocate () |
The MemoryRelocate() function is called when an object's location in memory is changed. For example, if an object resides in a chunk of memory that is grown by calling a realloc that has to allocate a new chunk and copy the contents of the old chunk to the new chunk, then the location of the object's memory changes. In practice this happens when classes derived from ON_Object are stored in dynamic arrays, like the default implementation of ON_ObjectArray<>'s that use realloc to grow the dynamic array. More... | |
virtual ON_UUID | ModelObjectId () const |
All objects in an opennurbs model have an id ( ON_Layer.m_layer_id, ON_Font.m_font_id, ON_Material.m_material_id, ON_3dmObjectAttributes.m_uuid ). More... | |
unsigned int | MoveUserData (ON_Object &source_object, ON_UUID source_userdata_item_id, ON_Object::UserDataConflictResolution userdata_conflict_resolution, bool bDeleteAllSourceItems) |
Expert user tool that moves user data items from source_object to "this. More... | |
void | MoveUserData (ON_Object &source_object) |
Calls MoveUserData(source_object,ON_Object::UserDataConflictResolution::source_object,true). More... | |
virtual ON::object_type | ObjectType () const |
Useful for switch statements that need to differentiate between basic object types like points, curves, surfaces, and so on. More... | |
ON_Object & | operator= (const ON_Object &) |
void | PurgeUserData () |
PurgeUserData() removes all user data from object. More... | |
virtual bool | Read (ON_BinaryArchive &binary_archive) |
Low level archive writing tool used by ON_BinaryArchive::ReadObject(). More... | |
virtual unsigned int | SetComponentStates (ON_COMPONENT_INDEX component_index, ON_ComponentStatus states_to_set) const |
Set states on an individual component. More... | |
virtual unsigned int | SetComponentStatus (ON_COMPONENT_INDEX component_index, ON_ComponentStatus status_to_copy) const |
Copy status settings to an individual component. More... | |
bool | SetUserString (const wchar_t *key, const wchar_t *string_value) |
Attach a user string to the object. This information will perisist through copy construction, operator=, and file IO. More... | |
int | SetUserStrings (int count, const ON_UserString *user_strings, bool bReplace) |
Append entries to the user string list More... | |
virtual unsigned int | SizeOf () const |
void | TransformUserData (const class ON_Xform &xform) |
Objects derived from ON_Geometry must call TransformUserData() in their Transform() member function. More... | |
virtual bool | UpdateReferencedComponents (const class ON_ComponentManifest &source_manifest, const class ON_ComponentManifest &destination_manifest, const class ON_ManifestMap &manifest_map) |
Uses the destination_manifest to update references to other components. This is typically done when a component's references came from a "source" context and are being updated to the "destination" context. For example, inserting one model into another when index, id, and name conflicts need to be resolved at the time of insertion. More... | |
int | UserStringCount () const |
virtual bool | Write (ON_BinaryArchive &binary_archive) const |
Low level archive writing tool used by ON_BinaryArchive::WriteObject(). More... | |
Static Public Attributes | |
static const ON_Geometry | Unset |
Additional Inherited Members | |
Public Types inherited from ON_Object | |
enum | UserDataConflictResolution : unsigned char { UserDataConflictResolution::destination_object = 0, UserDataConflictResolution::source_object = 1, UserDataConflictResolution::source_copycount_gt = 2, UserDataConflictResolution::source_copycount_ge = 3, UserDataConflictResolution::destination_copycount_gt = 4, UserDataConflictResolution::destination_copycount_ge = 5, UserDataConflictResolution::delete_item = 6 } |
When a userdata item is copied or moved from a source object to a destination object, the ON_Object::UserDataConflictResolution enum values specify how conficts are resolved. Remark: A userdata item "conflict" occurs when both the destination and source object have a user data item with the same value of ON_UserData::m_userdata_uuid. More... | |
Base class for all geometry classes that must provide runtime class id. Provides interface for common geometric operations like finding bounding boxes and transforming.
|
default |
|
default |
|
default |
ON_BoundingBox ON_Geometry::BoundingBox | ( | ) | const |
Get object's 3d axis aligned bounding box.
Uses virtual GetBBox() function to calculate the result.
If possible, BrepForm() creates a brep form of the ON_Geometry.
brep | [in] if not nullptr, brep is used to store the brep form of the geometry. Result: Returns a pointer to on ON_Brep or nullptr. If the brep parameter is not nullptr, then brep is returned if the geometry has a brep form and nullptr is returned if the geometry does not have a brep form. |
The caller is responsible for managing the brep memory. See Also ON_Geometry::HasBrepForm
Reimplemented in ON_Brep, ON_MorphControl, ON_Hatch, ON_Surface, and ON_Extrusion.
|
virtual |
Some objects cache bounding box information. If you modify an object, then call ClearBoundingBox() to inform the object that any cached bounding boxes are invalid.
Generally, ClearBoundingBox() overrides simply invalidate a cached bounding box and then wait for a call to GetBBox() before recomputing the bounding box.
The default implementation does nothing.
Reimplemented in ON_Brep, ON_MorphControl, ON_BrepFace, ON_TextContent, ON_SumSurface, and ON_RevSurface.
|
virtual |
If this piece of geometry is a component in something larger, like an ON_BrepEdge in an ON_Brep, then this function returns the component index.
Reimplemented in ON_MeshComponentRef, ON_BrepFace, ON_BrepLoop, ON_BrepTrim, ON_BrepEdge, and ON_BrepVertex.
|
virtual |
Dimension of the object.
The dimension is typically three. For parameter space trimming curves the dimension is two. In rare cases the dimension can be one or greater than three.
Reimplemented in ON_MeshComponentRef, ON_Mesh, ON_Brep, ON_MorphControl, ON_NurbsCage, ON_TextDot, ON_BrepLoop, ON_InstanceRef, ON_Hatch, ON_NurbsSurface, ON_NurbsCurve, ON_TextContent, ON_CurveProxy, ON_Viewport, ON_SumSurface, ON_RevSurface, ON_ArcCurve, ON_PolyCurve, ON_PolylineCurve, ON_SurfaceProxy, ON_CurveOnSurface, ON_Leader, ON_Extrusion, ON_LineCurve, ON_PointCloud, ON_PlaneSurface, ON_Point, ON_PointGrid, ON_Text, ON_Light, and ON_DetailView.
|
virtual |
Evaluate the location of a point from the object reference.
objref | [in] |
point | [out] If the evaluation cannot be performed, ON_3dPoint::UnsetPoint is returned. |
Reimplemented in ON_Mesh, ON_Brep, ON_PolyCurve, ON_Curve, and ON_Surface.
|
virtual |
This is the virtual function that actually calculates axis aligned bounding boxes.
boxmin | [in/out] array of Dimension() doubles |
boxmax | [in/out] array of Dimension() doubles |
bGrowBox | [in] (default=false) If true, then the union of the input bbox and the object's bounding box is returned in bbox. If false, the object's bounding box is returned in bbox. |
Reimplemented in ON_MeshComponentRef, ON_Mesh, ON_Brep, ON_MorphControl, ON_NurbsCage, ON_Centermark, ON_BrepFace, ON_TextDot, ON_DimOrdinate, ON_BrepLoop, ON_DimRadial, ON_InstanceRef, ON_Hatch, ON_DimAngular, ON_OffsetSurface, ON_DimLinear, ON_NurbsSurface, ON_TextContent, ON_NurbsCurve, ON_CurveProxy, ON_Viewport, ON_SumSurface, ON_RevSurface, ON_ArcCurve, ON_PolyCurve, ON_PolylineCurve, ON_SurfaceProxy, ON_Text, ON_CurveOnSurface, ON_Leader, ON_Extrusion, ON_LineCurve, ON_PointCloud, ON_PlaneSurface, ON_Point, ON_PointGrid, ON_Light, and ON_DetailView.
bool ON_Geometry::GetBoundingBox | ( | ON_BoundingBox & | bbox, |
bool | bGrowBox = false |
||
) | const |
Get object's 3d axis aligned bounding box or the union of the input box with the object's bounding box.
bbox | [in/out] 3d axis aligned bounding box |
bGrowBox | [in] (default=false) If true, then the union of the input bbox and the object's bounding box is returned in bbox. If false, the object's bounding box is returned in bbox. |
Uses virtual GetBBox() function to calculate the result.
bool ON_Geometry::GetBoundingBox | ( | ON_3dPoint & | bbox_min, |
ON_3dPoint & | bbox_max, | ||
bool | bGrowBox = false |
||
) | const |
Get corners of object's 3d axis aligned bounding box or the union of the input box with the object's bounding box.
bbox_min | [in/out] minimum corner of the 3d bounding box |
bbox_max | [in/out] maximum corner of the 3d bounding box |
bGrowBox | [in] (default=false) If true, then the union of the input bbox and the object's bounding box is returned. If false, the object's bounding box is returned. |
|
virtual |
Get tight bounding box.
tight_bbox | [in/out] tight bounding box |
bGrowBox | [in] (default=false) If true and the input tight_bbox is valid, then returned tight_bbox is the union of the input tight_bbox and the curve's tight bounding box. |
xform | [in] (default=nullptr) If not nullptr, the tight bounding box of the transformed geometry is calculated. The geometry is not modified. |
In general, GetTightBoundingBox is slower that BoundingBox, especially when xform is not null.
Reimplemented in ON_Mesh, ON_Brep, ON_MorphControl, ON_NurbsCage, ON_Hatch, ON_Curve, ON_ArcCurve, ON_PolyCurve, ON_PolylineCurve, ON_Extrusion, ON_LineCurve, ON_PointCloud, ON_PointGrid, and ON_DetailView.
|
virtual |
Query an object to see if it has an ON_Brep form. Result: Returns true if the virtual ON_Geometry::BrepForm can compute an ON_Brep representation of this object.
The default implementation of ON_Geometry::BrepForm returns false. See Also ON_Geometry::BrepForm
Reimplemented in ON_Brep, ON_MorphControl, and ON_Surface.
|
virtual |
Reimplemented in ON_Mesh, ON_NurbsCage, ON_TextDot, ON_InstanceRef, ON_NurbsSurface, ON_NurbsCurve, ON_SumSurface, ON_PolyCurve, ON_PolylineCurve, ON_LineCurve, ON_PointCloud, ON_PointGrid, and ON_Point.
|
overridevirtual |
Tests an object to see if its data members are correctly initialized.
text_log | [in] if the object is not valid and text_log is not nullptr, then a brief englis description of the reason the object is not valid is appened to the log. The information appended to text_log is suitable for |
low | level debugging purposes by programmers and is not intended to be useful as a high level user interface tool. |
Reimplemented from ON_Object.
Reimplemented in ON_MeshComponentRef, ON_Mesh, ON_MorphControl, ON_NurbsCage, ON_InstanceRef, ON_Hatch, ON_NurbsSurface, ON_NurbsCurve, ON_SumSurface, ON_Viewport, ON_RevSurface, ON_PolyCurve, ON_SurfaceProxy, ON_TextContent, ON_PolylineCurve, ON_Leader, ON_LineCurve, ON_PointCloud, ON_PlaneSurface, ON_PointGrid, ON_Point, ON_Light, and ON_Text.
|
virtual |
If possible, converts the object into a form that can be accuratly modified with "squishy" transformations like projections, shears, an non-uniform scaling.
Reimplemented in ON_Mesh, ON_NurbsCage, ON_TextDot, ON_InstanceRef, ON_NurbsSurface, ON_NurbsCurve, ON_SumSurface, ON_PolyCurve, ON_PolylineCurve, ON_LineCurve, ON_PointCloud, ON_PointGrid, and ON_Point.
|
default |
bool ON_Geometry::Rotate | ( | double | sin_angle, |
double | cos_angle, | ||
const ON_3dVector & | rotation_axis, | ||
const ON_3dPoint & | rotation_center | ||
) |
Rotates the object about the specified axis. A positive rotation angle results in a counter-clockwise rotation about the axis (right hand rule).
sin_angle | [in] sine of rotation angle |
cos_angle | [in] sine of rotation angle |
rotation_axis | [in] direction of the axis of rotation |
rotation_center | [in] point on the axis of rotation |
Uses virtual Transform() function to calculate the result.
bool ON_Geometry::Rotate | ( | double | rotation_angle, |
const ON_3dVector & | rotation_axis, | ||
const ON_3dPoint & | rotation_center | ||
) |
Rotates the object about the specified axis. A positive rotation angle results in a counter-clockwise rotation about the axis (right hand rule).
rotation_angle | [in] angle of rotation in radians |
rotation_axis | [in] direction of the axis of rotation |
rotation_center | [in] point on the axis of rotation |
Uses virtual Transform() function to calculate the result.
bool ON_Geometry::Scale | ( | double | scale_factor | ) |
Scales the object by the specified facotor. The scale is centered at the origin.
scale_factor | [in] scale factor |
Uses virtual Transform() function to calculate the result.
|
virtual |
Swaps object coordinate values with indices i and j.
i | [in] coordinate index |
j | [in] coordinate index |
The default implementation uses the virtual Transform() function to calculate the result. If you are creating an object where Transform() is slow, coordinate swapping will be frequently used, and coordinate swapping can be quickly accomplished, then override this function.
Reimplemented in ON_Mesh, ON_Brep, ON_NurbsSurface, ON_NurbsCurve, ON_PolyCurve, ON_PolylineCurve, ON_PointCloud, ON_CurveOnSurface, ON_LineCurve, ON_PointGrid, and ON_Point.
|
virtual |
Transforms the object.
xform | [in] transformation to apply to object. If xform.IsSimilarity() is zero, then you may want to call MakeSquishy() before calling Transform. |
Classes derived from ON_Geometry should call ON_Geometry::Transform() to handle user data transformations and then transform their definition.
Reimplemented in ON_MeshComponentRef, ON_Mesh, ON_Brep, ON_MorphControl, ON_NurbsCage, ON_Centermark, ON_TextDot, ON_DimOrdinate, ON_BrepLoop, ON_DimRadial, ON_InstanceRef, ON_Hatch, ON_DimAngular, ON_NurbsSurface, ON_DimLinear, ON_NurbsCurve, ON_TextContent, ON_CurveProxy, ON_Viewport, ON_Curve, ON_SumSurface, ON_ArcCurve, ON_RevSurface, ON_PolyCurve, ON_PolylineCurve, ON_Text, ON_Leader, ON_SurfaceProxy, ON_CurveOnSurface, ON_Extrusion, ON_LineCurve, ON_PointCloud, ON_PlaneSurface, ON_PointGrid, ON_Point, ON_Light, and ON_DetailView.
bool ON_Geometry::Translate | ( | const ON_3dVector & | translation_vector | ) |
Translates the object along the specified vector.
translation_vector | [in] translation vector |
Uses virtual Transform() function to calculate the result.
|
static |