Base class of topological shapes. More...
#include <cadex/ModelData_Shape.hxx>
Classes | |
class | Iterator |
Iterates over subshapes in a shape. More... | |
Public Member Functions | |
ModelData_Shape () | |
Constructor. | |
ModelData_Shape (const ModelData_Shape &theOther) | |
Constructor. | |
ModelData_Shape (ModelData_Shape &&theOther) | |
Move constructor. | |
~ModelData_Shape () | |
Destructor. | |
ModelData_Shape & | operator= (const ModelData_Shape &theOther) |
Assignment operator. | |
ModelData_Shape & | operator= (ModelData_Shape &&theOther) |
Move assignment operator. | |
operator const TopoDS_Shape & () const | |
Casts this object to TopoDS_Shape. | |
ModelData_ShapeType | Type () const |
Returns a shape type. | |
ModelData_ShapeOrientation | Orientation () const |
Returns orientation flag. | |
ModelData_Shape | Reversed () const |
Returns a shape that shares the same geometry and subshape graph but has opposite orientation. | |
ModelData_Shape | Oriented (ModelData_ShapeOrientation theOrientation) const |
Returns a shape that shares the same geometry and subshape graph and has specified orientation. | |
void | Nullify () |
Nullifies the object. | |
bool | IsNull () const |
Returns true if the object has not been initialized yet. | |
operator bool () const | |
Returns true if the object is not null. | |
bool | IsEqual (const ModelData_Shape &theOther) const |
Returns true if the shape shares the same geometry and subshape graph, and has equal orientation. | |
bool | IsSame (const ModelData_Shape &theOther) const |
Returns true if the shape shares the same geometry and subshape graph. | |
internal::ModelData_ShapeImpl * | Impl () const |
Returns internal implementation object. | |
Protected Member Functions | |
ModelData_Shape (const TopoDS_Shape &theOther, bool) | |
Constructor. | |
ModelData_Shape (internal::ModelData_ShapeImpl *theImpl) | |
Constructor. | |
Protected Attributes | |
internal::Base_Handle | myImpl |
Internal implementation object. | |
Base class of topological shapes.
Topological shapes define boundaries of the geometrical entities (curves and surfaces) in B-Rep representation.
Some topological entities refer to geometrical entities (e.g. edge refers to curve and face refers to surface), whereas some only refer to child topological entities (e.g. wire refers to edges it consists of or shell refers to faces it consists of).
Refer to Shape Types for the list of supported shape types. Type() returns a type as enumeration value which can be used to downcast to a respective subclass type, for instance:
Each shape can have either forward or reversed orientation as returned by the Orientation() method. Meaning of orientation depends on the shape type:
A shape with the opposite orientation can be returned with the Reversed() method. A shape with a specified orientation can be returned with the Oriented() method. Both methods create a shallow copy of the original shape, which shares a subshape graph but has a distinct orientation flag.
Two shapes are considered equal if they share the same definition (i.e. geometry and subshape graph) and have equal orientations. The method IsEqual() and operator==() can be used to check equality.
Two shapes are considered same if they share the same definition (i.e. geometry and subshape graph). Orientations are not required to be same. The method IsSame() can be used to check this relationship. Obviously, the 'IsSame' relationship is less strict than 'IsEqual'.
The following code snippet demonstrates both relationships:
For example, a closed shell contains pairs of IsSame() edges but with opposite orientations.
For any ModelData_Body created from single shape (e.g., solid body created from ModelData_Solid), IsSame() and IsEqual() returns true, if called for body and it's underlying shape. I.e.,
Children subshapes can be retrieved using ModelData_Shape::Iterator. Iterator supports two usage scenarios:
Refer to ModelData_Shape::Iterator for detailed explanations of both scenarios.
Orientation of a returned subshape is product of own subshape orientation (stored inside a subshape) and of its parent. Thus, if the subshape and its parent both have the same orientation then the returned subshape will have forward orientation, if they have opposite orientations then the returned subshape will have reversed orientation.
When exploring nested subshapes the same rule applies at each level of the hierarchy:
Resulting_orientation = parent_orientation * subshape_orientation * subsubshape_orientation * ...
For instance, when exploring a forward face, which has a wire with reversed orientation, with an edge having forward orientation, exploring that edge will return an edge with reversed orientation.
ModelData_Shape has a single data member, a shared pointer pointing to internal implementation (i.e. follows a 'pimpl' design pattern). ModelData_Shape subclasses do not add any own data fields. Therefore it is safe to store objects (even of different subtypes) in containers by value:
Shapes can be stored in associative containers (such as std::unordered_map or std::unordered_set) as keys. Hash and equality functors required for such containers can be selected depending on desired behavior, whether the container must ensure uniquness defined in terms of equality or similarity relationships (see above):
Refer to Equality and similarity relationships for relationship definitions.
The following code snippet demonstrates usage of both approaches:
bool cadex::ModelData_Shape::IsEqual | ( | const ModelData_Shape & | theOther | ) | const |
Returns true if the shape shares the same geometry and subshape graph, and has equal orientation.
bool cadex::ModelData_Shape::IsSame | ( | const ModelData_Shape & | theOther | ) | const |
Returns true if the shape shares the same geometry and subshape graph.
|
inline |
Nullifies the object.
IsNull() will return true after calling this method.
|
inline |
Returns true if the object is not null.
Returns the value opposite to IsNull().
cadex::ModelData_Shape::operator const TopoDS_Shape & | ( | ) | const |
Casts this object to TopoDS_Shape.
May only be used if IsNull() returns false. Otherwise behavior is undefined.
ModelData_ShapeOrientation cadex::ModelData_Shape::Orientation | ( | ) | const |
Returns orientation flag.
ModelData_Shape cadex::ModelData_Shape::Oriented | ( | ModelData_ShapeOrientation | theOrientation | ) | const |
Returns a shape that shares the same geometry and subshape graph and has specified orientation.
ModelData_Shape cadex::ModelData_Shape::Reversed | ( | ) | const |
Returns a shape that shares the same geometry and subshape graph but has opposite orientation.
ModelData_ShapeType cadex::ModelData_Shape::Type | ( | ) | const |
Returns a shape type.
For a null object returns ModelData_ST_Undefined.