|
cgma
|
#include <CylinderEvaluator.hpp>
Public Member Functions | |
| CylinderEvaluator (const CylinderEvaluatorData *data) | |
| virtual | ~CylinderEvaluator () |
| virtual GeometryType | ask_type () |
| virtual CubitBoolean | is_parametric () const |
| virtual CubitBoolean | is_periodic () const |
| virtual CubitBoolean | is_periodic_in_U (double &period) const |
| virtual CubitBoolean | is_periodic_in_V (double &period) const |
| virtual CubitBoolean | is_singular_in_U () const |
| virtual CubitBoolean | is_singular_in_V () const |
| virtual CubitBoolean | is_closed_in_U () const |
| virtual CubitBoolean | is_closed_in_V () const |
| virtual CubitBoolean | get_param_range_U (double &lower_bound, double &upper_bound) const |
| virtual CubitBoolean | get_param_range_V (double &lower_bound, double &upper_bound) const |
| virtual CubitVector | position_from_u_v (double u, double v) const |
| virtual CubitStatus | u_v_from_position (CubitVector const &location, double &u, double &v, CubitVector *closest_location) const |
| virtual const CubitEvaluatorData * | evaluator_data () const |
| virtual CubitBox | bounding_box () const |
| virtual CubitStatus | principal_curvatures (CubitVector const &location, double &curvature_1, double &curvature_2, CubitVector *closest_location=NULL) |
| virtual CubitStatus | closest_point (CubitVector const &location, CubitVector *closest_location=NULL, CubitVector *unit_normal_ptr=NULL, CubitVector *curvature1_ptr=NULL, CubitVector *curvature2_ptr=NULL) const |
Protected Member Functions | |
| CubitVector | base () const |
Private Attributes | |
| CylinderEvaluatorData | mEvalData |
Definition at line 36 of file CylinderEvaluator.hpp.
| CylinderEvaluator::CylinderEvaluator | ( | const CylinderEvaluatorData * | data | ) |
Definition at line 35 of file CylinderEvaluator.cpp.
{
mEvalData = *data;
mTmatrix.scale_about_origin( 1.0, mEvalData.base_radius_y/mEvalData.base_radius_x, 1.0 );
}
| virtual CylinderEvaluator::~CylinderEvaluator | ( | ) | [inline, virtual] |
Definition at line 51 of file CylinderEvaluator.hpp.
{}
| virtual GeometryType CylinderEvaluator::ask_type | ( | ) | [inline, virtual] |
Reimplemented from CubitEvaluator.
Definition at line 54 of file CylinderEvaluator.hpp.
{ return CONE_SURFACE_TYPE; }
| CubitVector CylinderEvaluator::base | ( | ) | const [protected] |
Definition at line 262 of file CylinderEvaluator.cpp.
{
return CubitVector( 0.0, 0.0, -0.5*mEvalData.height );
}
| CubitBox CylinderEvaluator::bounding_box | ( | void | ) | const [virtual] |
Implements CubitEvaluator.
Definition at line 48 of file CylinderEvaluator.cpp.
{
int ipt = 0;
CubitVector pts[8];
CubitVector axis( 0.0, 0.0, 1.0 );
CubitVector base_pt = base();
CubitVector top_pt = base() + mEvalData.height * axis;
CubitVector x_dir( 1.0, 0.0, 0.0 );
CubitVector y_dir( 0.0, 1.0, 0.0 );
double scale = mEvalData.base_radius_y * mEvalData.base_radius_x;
pts[0] = base_pt + ( x_dir * mEvalData.base_radius_x );
pts[1] = base_pt - ( x_dir * mEvalData.base_radius_x );
pts[2] = base_pt + ( y_dir * mEvalData.base_radius_y );
pts[3] = base_pt - ( y_dir * mEvalData.base_radius_y );
pts[4] = top_pt + ( x_dir * mEvalData.top_radius );
pts[5] = top_pt - ( x_dir * mEvalData.top_radius );
pts[6] = top_pt + ( y_dir * mEvalData.top_radius * scale );
pts[7] = top_pt - ( y_dir * mEvalData.top_radius * scale );
for ( ipt = 0; ipt < 8; ipt++ )
{
pts[ipt] = mTmatrix * pts[ipt];
}
CubitVector min( pts[0] ),
max( pts[0] );
for ( ipt = 1; ipt < 8; ipt++ )
{
CubitVector *pt = &(pts[ipt]);
if ( min.x() > pt->x() ) min.x( pt->x() );
if ( min.y() > pt->y() ) min.y( pt->y() );
if ( min.z() > pt->z() ) min.z( pt->z() );
if ( max.x() < pt->x() ) max.x( pt->x() );
if ( max.y() < pt->y() ) max.y( pt->y() );
if ( max.z() < pt->z() ) max.z( pt->z() );
}
CubitBox thebbox( min, max );
return thebbox;
}
| CubitStatus CylinderEvaluator::closest_point | ( | CubitVector const & | location, |
| CubitVector * | closest_location = NULL, |
||
| CubitVector * | unit_normal_ptr = NULL, |
||
| CubitVector * | curvature1_ptr = NULL, |
||
| CubitVector * | curvature2_ptr = NULL |
||
| ) | const [virtual] |
Implements CubitEvaluator.
Definition at line 123 of file CylinderEvaluator.cpp.
{
CubitTransformMatrix inverse_Tmatrix = mTmatrix;
inverse_Tmatrix.inverse();
CubitVector new_pt = inverse_Tmatrix * location;
CubitVector normal;
double dist = sqrt( ( new_pt.x() * new_pt.x() ) + ( new_pt.y() * new_pt.y() ) );
if ( dist < GEOMETRY_RESABS )
{
normal.set( 1.0, 0.0, 0.0 );
}
else
{
normal.set( new_pt.x(), new_pt.y(), 0.0 );
}
normal.normalize();
if ( unit_normal_ptr )
{
CubitVector origin( 0.0, 0.0, 0.0 );
CubitVector endpt( normal );
origin = mTmatrix * origin;;
endpt = mTmatrix * endpt;
*unit_normal_ptr = endpt - origin;
unit_normal_ptr->normalize();
}
if ( closest_location != NULL )
{
CubitVector axis_pt( 0.0, 0.0, new_pt.z() );
double v = axis_pt.z() - base().z();
double radius = v * ( ( mEvalData.top_radius - mEvalData.base_radius_x ) / mEvalData.height ) + mEvalData.base_radius_x;
*closest_location = axis_pt + ( radius * normal );
*closest_location = mTmatrix * (*closest_location);
}
return CUBIT_SUCCESS;
}
| const CubitEvaluatorData * CylinderEvaluator::evaluator_data | ( | void | ) | const [virtual] |
Implements CubitEvaluator.
Definition at line 225 of file CylinderEvaluator.cpp.
{
return &mEvalData;
}
| CubitBoolean CylinderEvaluator::get_param_range_U | ( | double & | lower_bound, |
| double & | upper_bound | ||
| ) | const [virtual] |
Implements CubitEvaluator.
Definition at line 235 of file CylinderEvaluator.cpp.
{
lower_bound = 0.0;
upper_bound = 2*CUBIT_PI;
return CUBIT_TRUE;
}
| CubitBoolean CylinderEvaluator::get_param_range_V | ( | double & | lower_bound, |
| double & | upper_bound | ||
| ) | const [virtual] |
Implements CubitEvaluator.
Definition at line 250 of file CylinderEvaluator.cpp.
{
lower_bound = 0.0;
upper_bound = mEvalData.height;
return CUBIT_TRUE;
}
| virtual CubitBoolean CylinderEvaluator::is_closed_in_U | ( | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 63 of file CylinderEvaluator.hpp.
{ return CUBIT_TRUE; }
| virtual CubitBoolean CylinderEvaluator::is_closed_in_V | ( | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 64 of file CylinderEvaluator.hpp.
{ return CUBIT_FALSE; }
| virtual CubitBoolean CylinderEvaluator::is_parametric | ( | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 55 of file CylinderEvaluator.hpp.
{ return CUBIT_TRUE; }
| virtual CubitBoolean CylinderEvaluator::is_periodic | ( | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 56 of file CylinderEvaluator.hpp.
{ return CUBIT_TRUE; }
| virtual CubitBoolean CylinderEvaluator::is_periodic_in_U | ( | double & | period | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 57 of file CylinderEvaluator.hpp.
{ period = 2*CUBIT_PI;
return CUBIT_TRUE; }
| virtual CubitBoolean CylinderEvaluator::is_periodic_in_V | ( | double & | period | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 59 of file CylinderEvaluator.hpp.
{ period = mEvalData.height;
return CUBIT_FALSE; }
| virtual CubitBoolean CylinderEvaluator::is_singular_in_U | ( | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 61 of file CylinderEvaluator.hpp.
{ return CUBIT_FALSE; }
| virtual CubitBoolean CylinderEvaluator::is_singular_in_V | ( | ) | const [inline, virtual] |
Implements CubitEvaluator.
Definition at line 62 of file CylinderEvaluator.hpp.
{ return CUBIT_FALSE; }
| CubitVector CylinderEvaluator::position_from_u_v | ( | double | u, |
| double | v | ||
| ) | const [virtual] |
Implements CubitEvaluator.
Definition at line 170 of file CylinderEvaluator.cpp.
{
double radius = v * ( ( mEvalData.top_radius - mEvalData.base_radius_x ) / mEvalData.height ) + mEvalData.base_radius_x;
CubitVector base_pt = base();
double two_pi = 2.0 * CUBIT_PI;
while ( u > two_pi ) u -= two_pi;
while ( u < 0.0 ) u += two_pi;
double x = radius * sin( u );
double y = radius * cos( u );
double z = base_pt.z() + v;
CubitVector position( x, y, z );
position = mTmatrix * position;
return position;
}
| CubitStatus CylinderEvaluator::principal_curvatures | ( | CubitVector const & | location, |
| double & | curvature_1, | ||
| double & | curvature_2, | ||
| CubitVector * | closest_location = NULL |
||
| ) | [virtual] |
Implements CubitEvaluator.
Definition at line 100 of file CylinderEvaluator.cpp.
{
PRINT_ERROR("principles_curvatures not implemented for cylinders yet.\n");
return CUBIT_FAILURE;
// if ( closest_location )
// {
// return closest_point( location, closest_location );
// }
// return CUBIT_SUCCESS;
}
| CubitStatus CylinderEvaluator::u_v_from_position | ( | CubitVector const & | location, |
| double & | u, | ||
| double & | v, | ||
| CubitVector * | closest_location | ||
| ) | const [virtual] |
Implements CubitEvaluator.
Definition at line 194 of file CylinderEvaluator.cpp.
{
CubitTransformMatrix inverse_Tmatrix = mTmatrix;
inverse_Tmatrix.inverse();
CubitVector transformed_pt = inverse_Tmatrix * location;
CubitVector base_pt = base();
CubitVector dir( transformed_pt.x(), transformed_pt.y(), 0.0 );
dir.normalize();
v = transformed_pt.z() - base_pt.z();
u = acos( dir.y() );
if ( dir.x() < 0.0 )
u = 2*CUBIT_PI - u;
while ( u < 0.0 ) u += 2*CUBIT_PI;
while ( u >= 2*CUBIT_PI ) u -= 2*CUBIT_PI;
if ( closest_location )
closest_point( location, closest_location );
return CUBIT_SUCCESS;
}
Definition at line 41 of file CylinderEvaluator.hpp.