Hide menu
Loading...
Searching...
No Matches
cadex::ModelData_Surface Class Reference

Base class for geometrical surfaces. More...

#include <cadex/ModelData_Surface.hxx>

Inheritance diagram for cadex::ModelData_Surface:
cadex::ModelData_BSplineSurface cadex::ModelData_BezierSurface cadex::ModelData_ElementarySurface cadex::ModelData_OffsetSurface cadex::ModelData_RectangularTrimmedSurface cadex::ModelData_SweptSurface cadex::ModelData_ConicalSurface cadex::ModelData_CylindricalSurface cadex::ModelData_Plane cadex::ModelData_SphericalSurface cadex::ModelData_ToroidalSurface cadex::ModelData_SurfaceOfLinearExtrusion cadex::ModelData_SurfaceOfRevolution

Public Member Functions

 ModelData_Surface ()
 Constructor.
 
 ModelData_Surface (const ModelData_Surface &theOther)
 Constructor.
 
 ModelData_Surface (ModelData_Surface &&theOther)
 Constructor.
 
 ~ModelData_Surface ()
 Destructor.
 
ModelData_Surfaceoperator= (const ModelData_Surface &theOther)
 Assignment operator.
 
ModelData_Surfaceoperator= (ModelData_Surface &&theOther)
 Move assignment operator.
 
ModelData_SurfaceType Type () const
 Returns a surface type.
 
bool IsNull () const
 Returns true if the object has not been initialized yet.
 
void Nullify ()
 Resets the object.
 
 operator bool () const
 
bool IsUPeriodic () const
 Returns true if the surface is periodic in U direction.
 
bool IsVPeriodic () const
 Returns true if the surface is periodic in V direction.
 
double UMin () const
 Returns a minimum parameter of a definition domain in U direction.
 
double UMax () const
 Returns a maximum parameter of a definition domain in U direction.
 
double VMin () const
 Returns a minimum parameter of a definition domain in V direction.
 
double VMax () const
 Returns a maximum parameter of a definition domain in V direction.
 
void Domain (double &theUMin, double &theUMax, double &theVMin, double &theVMax) const
 Returns a definition domain.
 
ModelData_Point Value (double theParameterU, double theParameterV) const
 Evaluates a point on the surface.
 
void Transform (const ModelData_Transformation &theTransformation)
 Applies transformation matrix to this object.
 
ModelData_Surface Transformed (const ModelData_Transformation &theTransformation) const
 Returns a copy this object after applying transformation.
 
ModelData_Continuity Continuity () const
 Returns a continuity type of the surface.
 
void D0 (double theParameterU, double theParameterV, ModelData_Point &theValue) const
 Returns the point theValue of parameter theU, theV on the surface.
 
void D1 (double theParameterU, double theParameterV, ModelData_Point &theValue, ModelData_Vector &theD1U, ModelData_Vector &theD1V) const
 Returns the point theValue and the first derivatives in the directions U theD1U and V theD1V at this point.
 
void D2 (double theParameterU, double theParameterV, ModelData_Point &theValue, ModelData_Vector &theD1U, ModelData_Vector &theD1V, ModelData_Vector &theD2U, ModelData_Vector &theD2V, ModelData_Vector &theD2UV) const
 Returns the point theValue, the first and the second derivatives in the directions U and V at this point.
 
bool DN (double theParameterU, double theParameterV, size_t theDerivativeOrder, ModelData_Point &theValue, ModelData_Vector theD[]) const
 
void Curvature (double theParameterU, double theParameterV, ModelData_Vector &thePrincipalMaxDirection, ModelData_Vector &thePrincipalMinDirection) const
 Returns the max and min principal curvature directions multiplied by max and min value of curvature respectively.
 
void Curvature (double theParameterU, double theParameterV, ModelData_Direction &thePrincipalMaxDirection, ModelData_Direction &thePrincipalMinDirection, double &theMaxCurvature, double &theMinCurvature) const
 Returns the max and min principal curvature directions and their values.
 
void Normal (double theParameterU, double theParameterV, ModelData_Direction &theNormal) const
 Returns the normal direction theNormal at the current point.
 
void Mirror (const ModelData_Point &thePoint)
 Mirrors the surface relative to the point.
 
void Mirror (const ModelData_Axis1Placement &theAxis)
 Mirrors the surface relative to the axis placement.
 
void Mirror (const ModelData_Axis2Placement &theAxis)
 Mirrors the surface relative to the axis placement.
 
ModelData_Surface Mirrored (const ModelData_Point &theRef) const
 Returns a copy this surface mirrored along the object.
 
ModelData_Surface Mirrored (const ModelData_Axis1Placement &theAxis) const
 Returns a copy this surface mirrored along the object.
 
ModelData_Surface Mirrored (const ModelData_Axis2Placement &theAxis) const
 Returns a copy this surface mirrored along the object.
 
void Rotate (const ModelData_Axis1Placement &theAxis, double theAngle)
 Rotates the surface around the axis.
 
ModelData_Surface Rotated (const ModelData_Axis1Placement &theAxis, double theAngle) const
 Returns a copy this surface rotated along the axis.
 
void Translate (const ModelData_Vector &theVector)
 Translates the surface along the vector.
 
ModelData_Surface Translated (const ModelData_Vector &theVector) const
 Returns a copy this surface translated along the vector.
 
void Scale (const ModelData_Point &thePoint, double theScale)
 Scales the surface with respect to the point.
 
ModelData_Surface Scaled (const ModelData_Point &thePoint, double theScale) const
 Returns a copy this surface scaled with respect to the point.
 

Detailed Description

Base class for geometrical surfaces.

Surfaces in 3D space are used to represent boundaries of a body (e.g. solid or sheet body). Each face must refer to a surface.

Types

Refer to Surface Types for the list of supported surface types. Type() returns a surface type as enumeration value which can be used to downcast to a respective subclass type, for instance:

ModelData_Surface aSurface = ...;
if (aSurface.Type() == ModelData_ST_Cylinder) {
const ModelData_CylindricalSurface& aCylSurf = static_cast<const ModelData_CylindricalSurface&> (aSurface);
double aRadius = aCylSurf.Radius();
...
}
Defines a cylindrical surface.
Definition: ModelData_CylindricalSurface.hxx:32
double Radius() const
Returns radius.
Definition: ModelData_CylindricalSurface.cxx:85
Base class for geometrical surfaces.
Definition: ModelData_Surface.hxx:44
ModelData_SurfaceType Type() const
Returns a surface type.
Definition: ModelData_Surface.cxx:195

Parametric Definition

Surface is defined using parametric definition as \(\mathbf{S}(u,v)\) where \(\mathbf{S}\) is a 3D radius-vector \((x,y,z)\) and \((u, v)\) are parameters from a definition domain \([u_{min}, u_{max}]\times[v_{min}, v_{max}]\).

UMin(), UMax() and VMin(), VMax(), and Domain() return parametric definition range. Parametric range can be bounded (e.g. \([0, 1]\times[0, 1]\) for Bezier surface), unbounded (e.g. \((-\infty, +\infty)\times(-\infty, +\infty)\) for a plane), or semi-unbounded (e.g. \([0, 2\pi]\times(-\infty, +\infty)\) for cylindrical surface).

Evaluation

At any parameter u and v within a definition domain, the surface can be evaluated as follows:

  • Value() and D0() return a 3D point;
  • D1(), D2() and DN() return a derivative of a respective order;
  • Curvature() returns a curvature;
  • Normal() returns a normal to the surface (i.e. perpendicular to a tangential plane).

The following example demonstrates computation of a point on a sphere at parameters \(u=\frac{\pi}{4}\), \(v=\frac{\pi}{6}\):

ModelData_Point aPoint = aSphere.Value (M_PI / 4, M_PI / 6);
Defines a 3D point.
Definition: ModelData_Point.hxx:295
ModelData_Point Value(double theParameterU, double theParameterV) const
Evaluates a point on the surface.
Definition: ModelData_Surface.cxx:285

If the surface is periodic in U and/or V (IsUPeriodic() and/or IsVPeriodic() return true) then the surface can be evaluated at any parameter U and/or V, otherwise behavior is undefined (e.g. an exception can be thrown or a weird value can be returned).

Continuity

Continuity() returns continuity (C0, C1, C2, CN) of the surface, minimum of U- and V- continuities, where C0 indicates continuity of the surface only, C1 - of its first derivative and so on.

Transformation

The surface can be modified using the following operations:

Warning
As the surface data is shared via internal pointer modification of the surface may affect other users of the surface (e.g. a face referring to it). So you might want to use method returning a modified copy of the surface (such as Transformed()).
See also
Surfaces, ModelData_Curve, ModelData_Face.
Examples
exploring/brepgeometry/Program.cs, exploring/brepgeometry/main.cxx, exploring/breprepresentation/Program.cs, and exploring/breprepresentation/main.cxx.

Member Function Documentation

◆ D0()

void cadex::ModelData_Surface::D0 ( double  theU,
double  theV,
ModelData_Point theValue 
) const

Returns the point theValue of parameter theU, theV on the surface.

Throws exception only for the ModelData_OffsetSurface if it is not possible to compute the current point.

◆ D1()

void cadex::ModelData_Surface::D1 ( double  theU,
double  theV,
ModelData_Point theValue,
ModelData_Vector theD1U,
ModelData_Vector theD1V 
) const

Returns the point theValue and the first derivatives in the directions U theD1U and V theD1V at this point.

Throws exception if the continuity of the surface is not C1.

◆ D2()

void cadex::ModelData_Surface::D2 ( double  theU,
double  theV,
ModelData_Point theValue,
ModelData_Vector theD1U,
ModelData_Vector theD1V,
ModelData_Vector theD2U,
ModelData_Vector theD2V,
ModelData_Vector theD2UV 
) const

Returns the point theValue, the first and the second derivatives in the directions U and V at this point.

Throws exception if the continuity of the surface is not C2.

◆ DN()

bool cadex::ModelData_Surface::DN ( double  theU,
double  theV,
size_t  theDerivativeOrder,
ModelData_Point theValue,
ModelData_Vector  theD[] 
) const

Returns true if calculation was passed succsesfully, the returned vectors gives the value of the derivative for the order of derivation theDerivativeOrder. Otherwise returns false. Throws exception if the continuity of the surface is not CN.

Parameters:

  • theDerivativeOrder must belong to range [0, 3].
  • theD should have enough size to store 2 for D1(), 5 for D2() or 9 for D3() derivatives.

◆ Domain()

void cadex::ModelData_Surface::Domain ( double &  theUMin,
double &  theUMax,
double &  theVMin,
double &  theVMax 
) const

Returns a definition domain.

See also
UMin(), UMax(), VMin(), VMax().

◆ IsNull()

bool cadex::ModelData_Surface::IsNull ( ) const

Returns true if the object has not been initialized yet.

See also
Nullify().

◆ IsUPeriodic()

bool cadex::ModelData_Surface::IsUPeriodic ( ) const

Returns true if the surface is periodic in U direction.

Examples include sphere, torus or a surface of revolution

◆ IsVPeriodic()

bool cadex::ModelData_Surface::IsVPeriodic ( ) const

Returns true if the surface is periodic in V direction.

Examples include torus or a V-periodic B-Spline.

◆ Mirrored() [1/3]

ModelData_Surface cadex::ModelData_Surface::Mirrored ( const ModelData_Axis1Placement theAxis) const

Returns a copy this surface mirrored along the object.

The contents of this object is not modified.

See also
Mirror().

◆ Mirrored() [2/3]

ModelData_Surface cadex::ModelData_Surface::Mirrored ( const ModelData_Axis2Placement theAxis) const

Returns a copy this surface mirrored along the object.

The contents of this object is not modified.

See also
Mirror().

◆ Mirrored() [3/3]

ModelData_Surface cadex::ModelData_Surface::Mirrored ( const ModelData_Point theRef) const

Returns a copy this surface mirrored along the object.

The contents of this object is not modified.

See also
Mirror().

◆ Nullify()

void cadex::ModelData_Surface::Nullify ( )

Resets the object.

IsNull() will return true after calling this method.

◆ Rotated()

ModelData_Surface cadex::ModelData_Surface::Rotated ( const ModelData_Axis1Placement theAxis,
double  theAngle 
) const

Returns a copy this surface rotated along the axis.

The contents of this object is not modified.

See also
Rotate().

◆ Scaled()

ModelData_Surface cadex::ModelData_Surface::Scaled ( const ModelData_Point thePoint,
double  theScale 
) const

Returns a copy this surface scaled with respect to the point.

The contents of this object is not modified.

See also
Scale().

◆ Transform()

void cadex::ModelData_Surface::Transform ( const ModelData_Transformation theTransformation)

Applies transformation matrix to this object.

Results depends on the actual surface type.

See also
Transformed().

◆ Transformed()

ModelData_Surface cadex::ModelData_Surface::Transformed ( const ModelData_Transformation theTransformation) const

Returns a copy this object after applying transformation.

The contents of this object is not modified.

See also
Transform().

◆ Translated()

ModelData_Surface cadex::ModelData_Surface::Translated ( const ModelData_Vector theVector) const

Returns a copy this surface translated along the vector.

The contents of this object is not modified.

See also
Translate().

◆ UMax()

double cadex::ModelData_Surface::UMax ( ) const

Returns a maximum parameter of a definition domain in U direction.

See also
UMin(), Domain().
Examples
exploring/brepgeometry/Program.cs, and exploring/brepgeometry/main.cxx.

◆ UMin()

double cadex::ModelData_Surface::UMin ( ) const

Returns a minimum parameter of a definition domain in U direction.

See also
UMax(), Domain().
Examples
exploring/brepgeometry/Program.cs, and exploring/brepgeometry/main.cxx.

◆ Value()

ModelData_Point cadex::ModelData_Surface::Value ( double  theParameterU,
double  theParameterV 
) const

Evaluates a point on the surface.

theParameterU must be within [UMin(), UMax()] if the surface is not U-periodic. theParameterV must be within [VMin(), VMax()] if the surface is not V-periodic.

◆ VMax()

double cadex::ModelData_Surface::VMax ( ) const

Returns a maximum parameter of a definition domain in V direction.

See also
VMin(), Domain().
Examples
exploring/brepgeometry/Program.cs, and exploring/brepgeometry/main.cxx.

◆ VMin()

double cadex::ModelData_Surface::VMin ( ) const

Returns a minimum parameter of a definition domain in V direction.

See also
VMax(), Domain().
Examples
exploring/brepgeometry/Program.cs, and exploring/brepgeometry/main.cxx.