Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
#include <SmoothCurve.hpp>
Public Member Functions | |
SmoothCurve (Interface *mb, EntityHandle curve, GeomTopoTool *gTool) | |
virtual | ~SmoothCurve () |
virtual double | arc_length () |
virtual bool | is_parametric () |
Get the parametric status of the curve. | |
virtual bool | is_periodic (double &period) |
Get the periodic status of the curve. | |
virtual void | get_param_range (double &u_start, double &u_end) |
Get the parameter range of the curve. | |
virtual double | u_from_arc_length (double u_root, double arc_length) |
Compute the parameter value at a specified distance along the curve. | |
virtual bool | position_from_u (double u, double &x, double &y, double &z, double *tg=NULL) |
Evaluate the curve at a specified parameter value. | |
virtual void | move_to_curve (double &x, double &y, double &z) |
Move a point near the curve to the closest point on the curve. | |
virtual double | u_from_position (double x, double y, double z, EntityHandle &v, int &indexEdge) |
Get the u parameter value on the curve closest to x,y,z and the point on the curve. | |
virtual void | start_coordinates (double &x, double &y, double &z) |
Get the starting point of the curve. | |
virtual void | end_coordinates (double &x, double &y, double &z) |
Get the ending point of the curve. | |
void | compute_tangents_for_each_edge () |
void | compute_control_points_on_boundary_edges (double min_dot, std::map< EntityHandle, SmoothFace * > &mapSurfaces, Tag controlPointsTag, Tag markTag) |
ErrorCode | evaluate_smooth_edge (EntityHandle eh, double &tt, CartVect &outv, CartVect &out_tangent) |
Private Attributes | |
std::vector< EntityHandle > | _entities |
double | _leng |
std::vector< double > | _fractions |
Tag | _edgeTag |
Interface * | _mb |
EntityHandle | _set |
GeomTopoTool * | _gtt |
Definition at line 29 of file SmoothCurve.hpp.
moab::SmoothCurve::SmoothCurve | ( | Interface * | mb, |
EntityHandle | curve, | ||
GeomTopoTool * | gTool | ||
) |
Definition at line 16 of file SmoothCurve.cpp.
moab::SmoothCurve::~SmoothCurve | ( | ) | [virtual] |
Definition at line 25 of file SmoothCurve.cpp.
{
// TODO Auto-generated destructor stub
}
double moab::SmoothCurve::arc_length | ( | ) | [virtual] |
void moab::SmoothCurve::compute_control_points_on_boundary_edges | ( | double | min_dot, |
std::map< EntityHandle, SmoothFace * > & | mapSurfaces, | ||
Tag | controlPointsTag, | ||
Tag | markTag | ||
) |
Definition at line 428 of file SmoothCurve.cpp.
References _edgeTag, _entities, _fractions, _gtt, _leng, _mb, _set, ErrorCode, moab::Interface::get_connectivity(), moab::Interface::get_coords(), moab::Interface::get_entities_by_type(), moab::GeomTopoTool::get_senses(), moab::CartVect::length(), MB_SUCCESS, MB_TYPE_DOUBLE, MBEDGE, T, moab::Interface::tag_get_data(), moab::Interface::tag_get_handle(), and moab::Interface::tag_set_data().
Referenced by moab::FBEngine::initializeSmoothing().
{ // these points really need the surfaces they belong to, because the control points on edges // depend on the normals on surfaces // the control points are averaged from different surfaces, by simple mean average // the surfaces have // do we really need min_dot here? // first of all, find out the SmoothFace for each surface set that is adjacent here // GeomTopoTool gTopoTool(_mb); std::vector< EntityHandle > faces; std::vector< int > senses; ErrorCode rval = _gtt->get_senses( _set, faces, senses ); if( MB_SUCCESS != rval ) return; // need to find the smooth face attached unsigned int numSurfacesAdjacent = faces.size(); // get the edges, and then get the // std::vector<EntityHandle> entities; _mb->get_entities_by_type( _set, MBEDGE, _entities ); // no recursion!! // each edge has the tangent computed already Tag tangentsTag; rval = _mb->tag_get_handle( "TANGENTS", 6, MB_TYPE_DOUBLE, tangentsTag ); if( rval != MB_SUCCESS ) return; // some error should be thrown // we do not want to search every time std::vector< SmoothFace* > smoothFaceArray; unsigned int i = 0; for( i = 0; i < numSurfacesAdjacent; i++ ) { SmoothFace* sms = mapSurfaces[faces[i]]; smoothFaceArray.push_back( sms ); } unsigned int e = 0; for( e = 0; e < _entities.size(); e++ ) { CartVect zero( 0. ); CartVect ctrlP[3] = { zero, zero, zero }; // null positions initially // the control points are averaged from connected faces EntityHandle edge = _entities[e]; // the edge in the chain int nnodes; const EntityHandle* conn2; rval = _mb->get_connectivity( edge, conn2, nnodes ); if( rval != MB_SUCCESS || 2 != nnodes ) return; // or continue or return error // double coords[6]; // store the coordinates for the nodes CartVect P[2]; // ErrorCode rval = _mb->get_coords(conn2, 2, coords); rval = _mb->get_coords( conn2, 2, (double*)&P[0] ); if( rval != MB_SUCCESS ) return; CartVect chord = P[1] - P[0]; _leng += chord.length(); _fractions.push_back( _leng ); CartVect N[2]; // MBCartVect N0(&normalVec[0]); // MBCartVect N3(&normalVec[3]); CartVect T[2]; // T0, T3 // if (edge->num_adj_facets() <= 1) { // stat = compute_curve_tangent(edge, min_dot, T0, T3); // if (stat != CUBIT_SUCCESS) // return stat; //} else { //} rval = _mb->tag_get_data( tangentsTag, &edge, 1, &T[0] ); if( rval != MB_SUCCESS ) return; for( i = 0; i < numSurfacesAdjacent; i++ ) { CartVect controlForEdge[3]; rval = smoothFaceArray[i]->get_normals_for_vertices( conn2, N ); if( rval != MB_SUCCESS ) return; rval = smoothFaceArray[i]->init_edge_control_points( P[0], P[1], N[0], N[1], T[0], T[1], controlForEdge ); if( rval != MB_SUCCESS ) return; // accumulate those over faces!!! for( int j = 0; j < 3; j++ ) { ctrlP[j] += controlForEdge[j]; } } // now divide them for the average position! for( int j = 0; j < 3; j++ ) { ctrlP[j] /= numSurfacesAdjacent; } // we are done, set the control points now! // edge->control_points(ctrl_pts, 4); rval = _mb->tag_set_data( controlPointsTag, &edge, 1, &ctrlP[0] ); if( rval != MB_SUCCESS ) return; this->_edgeTag = controlPointsTag; // this is a tag that will be stored with the edge // is that a waste of memory or not... // also mark the edge for later on unsigned char used = 1; _mb->tag_set_data( markTag, &edge, 1, &used ); } // now divide fractions, to make them vary from 0 to 1 assert( _leng > 0. ); for( e = 0; e < _entities.size(); e++ ) _fractions[e] /= _leng; }
Definition at line 377 of file SmoothCurve.cpp.
References _mb, _set, entities, ErrorCode, moab::Interface::get_entities_by_type(), MB_SUCCESS, MB_TYPE_DOUBLE, MBEDGE, moab::CartVect::normalize(), T, moab::Interface::tag_get_data(), moab::Interface::tag_get_handle(), moab::Interface::tag_set_data(), and TC.
Referenced by moab::FBEngine::initializeSmoothing().
{ // will retrieve the edges in each set; they are retrieved in order they were put into, because // these sets are "MESHSET_ORDERED" // retrieve the tag handle for the tangents; it should have been created already // this tangents are computed for the chain of edges that form a geometric edge // some checks should be performed on the vertices, but we trust the correctness of the model // completely (like the vertices should match in the chain...) Tag tangentsTag; ErrorCode rval = _mb->tag_get_handle( "TANGENTS", 6, MB_TYPE_DOUBLE, tangentsTag ); if( rval != MB_SUCCESS ) return; // some error should be thrown std::vector< EntityHandle > entities; _mb->get_entities_by_type( _set, MBEDGE, entities ); // no recursion!! // basically, each tangent at a node will depend on previous tangent int nbEdges = entities.size(); // now, we can advance in the loop // the only special problem is if the first node coincides with the last node, then we should // consider the closed loop; or maybe we should look at angles in that case too? // also, should we look at the 2 semi-circles case? How to decide if we need to continue the // "tangents" maybe we can do that later, and we can alter the tangents at the feature nodes, in // the directions of the loops again, do we need to decide the "closed" loop or not? Not yet... EntityHandle previousEdge = entities[0]; // this is the first edge in the chain CartVect TP[2]; // tangents for the previous edge rval = _mb->tag_get_data( tangentsTag, &previousEdge, 1, &TP[0] ); // tangents for previous edge if( rval != MB_SUCCESS ) return; // some error should be thrown CartVect TC[2]; // tangents for the current edge EntityHandle currentEdge; for( int i = 1; i < nbEdges; i++ ) { // current edge will start after first one currentEdge = entities[i]; rval = _mb->tag_get_data( tangentsTag, ¤tEdge, 1, &TC[0] ); // if( rval != MB_SUCCESS ) return; // some error should be thrown // now compute the new tangent at common vertex; reset tangents for previous edge and // current edge a little bit of CPU and memory waste, but this is life CartVect T = 0.5 * TC[0] + 0.5 * TP[1]; // T.normalize(); TP[1] = T; rval = _mb->tag_set_data( tangentsTag, &previousEdge, 1, &TP[0] ); // if( rval != MB_SUCCESS ) return; // some error should be thrown TC[0] = T; rval = _mb->tag_set_data( tangentsTag, ¤tEdge, 1, &TC[0] ); // if( rval != MB_SUCCESS ) return; // some error should be thrown // now set the next edge previousEdge = currentEdge; TP[0] = TC[0]; TP[1] = TC[1]; } return; }
void moab::SmoothCurve::end_coordinates | ( | double & | x, |
double & | y, | ||
double & | z | ||
) | [virtual] |
Get the ending point of the curve.
x | The x coordinate of the start point |
y | The y coordinate of the start point |
z | The z coordinate of the start point |
Definition at line 360 of file SmoothCurve.cpp.
References _entities, _mb, moab::Interface::get_connectivity(), and moab::Interface::get_coords().
{ int nnodes = 0; const EntityHandle* conn2 = NULL; _mb->get_connectivity( _entities[_entities.size() - 1], conn2, nnodes ); double c[3]; // careful, the second node here _mb->get_coords( &conn2[1], 1, c ); x = c[0]; y = c[1]; z = c[2]; return; }
ErrorCode moab::SmoothCurve::evaluate_smooth_edge | ( | EntityHandle | eh, |
double & | tt, | ||
CartVect & | outv, | ||
CartVect & | out_tangent | ||
) |
Definition at line 537 of file SmoothCurve.cpp.
References _edgeTag, _mb, ErrorCode, moab::Interface::get_connectivity(), moab::Interface::get_coords(), MB_SUCCESS, MB_TYPE_DOUBLE, moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by position_from_u().
{ CartVect P[2]; // P0 and P1 CartVect controlPoints[3]; // edge control points double t4, t3, t2, one_minus_t, one_minus_t2, one_minus_t3, one_minus_t4; // project the position to the linear edge // t is from 0 to 1 only!! // double tt = (t + 1) * 0.5; if( tt <= 0.0 ) tt = 0.0; if( tt >= 1.0 ) tt = 1.0; int nnodes = 0; const EntityHandle* conn2 = NULL; ErrorCode rval = _mb->get_connectivity( eh, conn2, nnodes ); if( rval != MB_SUCCESS ) return rval; rval = _mb->get_coords( conn2, 2, (double*)&P[0] ); if( rval != MB_SUCCESS ) return rval; if( 0 == _edgeTag ) { rval = _mb->tag_get_handle( "CONTROLEDGE", 9, MB_TYPE_DOUBLE, _edgeTag ); if( rval != MB_SUCCESS ) return rval; } rval = _mb->tag_get_data( _edgeTag, &eh, 1, (double*)&controlPoints[0] ); if( rval != MB_SUCCESS ) return rval; t2 = tt * tt; t3 = t2 * tt; t4 = t3 * tt; one_minus_t = 1. - tt; one_minus_t2 = one_minus_t * one_minus_t; one_minus_t3 = one_minus_t2 * one_minus_t; one_minus_t4 = one_minus_t3 * one_minus_t; outv = one_minus_t4 * P[0] + 4. * one_minus_t3 * tt * controlPoints[0] + 6. * one_minus_t2 * t2 * controlPoints[1] + 4. * one_minus_t * t3 * controlPoints[2] + t4 * P[1]; out_tangent = -4. * one_minus_t3 * P[0] + 4. * ( one_minus_t3 - 3. * tt * one_minus_t2 ) * controlPoints[0] + 12. * ( tt * one_minus_t2 - t2 * one_minus_t ) * controlPoints[1] + 4. * ( 3. * t2 * one_minus_t - t3 ) * controlPoints[2] + 4. * t3 * P[1]; return MB_SUCCESS; }
void moab::SmoothCurve::get_param_range | ( | double & | u_start, |
double & | u_end | ||
) | [virtual] |
Get the parameter range of the curve.
u_start | The beginning curve parameter |
u_end | The ending curve parameter |
Definition at line 70 of file SmoothCurve.cpp.
Referenced by moab::FBEngine::getEntURange().
{ // assert(_ref_edge); u_start = 0; u_end = 1.; return; }
bool moab::SmoothCurve::is_parametric | ( | ) | [virtual] |
Get the parametric status of the curve.
Definition at line 39 of file SmoothCurve.cpp.
{ return true; }
bool moab::SmoothCurve::is_periodic | ( | double & | period | ) | [virtual] |
Get the periodic status of the curve.
period | The period of the curve if periodic. |
Definition at line 49 of file SmoothCurve.cpp.
References _leng, _mb, _set, moab::Interface::get_child_meshsets(), and moab::Range::size().
{ // assert(_ref_edge); // return _ref_edge->is_periodic( period); Range vsets; _mb->get_child_meshsets( _set, vsets ); // num_hops =1 if( vsets.size() == 1 ) { period = _leng; return true; // true , especially for ice sheet data } return false; }
void moab::SmoothCurve::move_to_curve | ( | double & | x, |
double & | y, | ||
double & | z | ||
) | [virtual] |
Move a point near the curve to the closest point on the curve.
x | The x coordinate of the point |
y | The y coordinate of the point |
z | The z coordinate of the point |
Definition at line 144 of file SmoothCurve.cpp.
References position_from_u(), and u_from_position().
Referenced by moab::FBEngine::getEntClosestPt().
{ // find closest point to the curve, and the parametric position // must be close by, but how close ??? EntityHandle v; int edgeIndex; double u = u_from_position( x, y, z, v, edgeIndex ); position_from_u( u, x, y, z ); return; }
bool moab::SmoothCurve::position_from_u | ( | double | u, |
double & | x, | ||
double & | y, | ||
double & | z, | ||
double * | tg = NULL |
||
) | [virtual] |
Evaluate the curve at a specified parameter value.
u | The parameter at which to evaluate the curve |
x | The x coordinate of the evaluated point |
y | The y coordinate of the evaluated point |
z | The z coordinate of the evaluated point |
Definition at line 105 of file SmoothCurve.cpp.
References _entities, _fractions, ErrorCode, evaluate_smooth_edge(), MB_SUCCESS, and t.
Referenced by moab::FBEngine::getEntTgntU(), moab::FBEngine::getEntUtoXYZ(), and move_to_curve().
{ // _fractions are increasing, so find the double* ptr = std::lower_bound( &_fractions[0], ( &_fractions[0] ) + _fractions.size(), u ); int index = ptr - &_fractions[0]; double nextFraction = _fractions[index]; double prevFraction = 0; if( index > 0 ) { prevFraction = _fractions[index - 1]; } double t = ( u - prevFraction ) / ( nextFraction - prevFraction ); EntityHandle edge = _entities[index]; CartVect position, tangent; ErrorCode rval = evaluate_smooth_edge( edge, t, position, tangent ); if( MB_SUCCESS != rval ) return false; assert( rval == MB_SUCCESS ); x = position[0]; y = position[1]; z = position[2]; if( tg ) { // we need to do some scaling, double dtdu = 1 / ( nextFraction - prevFraction ); tg[0] = tangent[0] * dtdu; tg[1] = tangent[1] * dtdu; tg[2] = tangent[2] * dtdu; } return true; }
void moab::SmoothCurve::start_coordinates | ( | double & | x, |
double & | y, | ||
double & | z | ||
) | [virtual] |
Get the starting point of the curve.
x | The x coordinate of the start point |
y | The y coordinate of the start point |
z | The z coordinate of the start point |
Definition at line 339 of file SmoothCurve.cpp.
References _entities, _mb, moab::Interface::get_connectivity(), and moab::Interface::get_coords().
{ int nnodes = 0; const EntityHandle* conn2 = NULL; _mb->get_connectivity( _entities[0], conn2, nnodes ); double c[3]; _mb->get_coords( conn2, 1, c ); x = c[0]; y = c[1]; z = c[2]; return; }
double moab::SmoothCurve::u_from_arc_length | ( | double | u_root, |
double | arc_leng | ||
) | [virtual] |
Compute the parameter value at a specified distance along the curve.
u_root | The start parameter from which to compute the distance along the curve. |
arc_length | The distance to move along the curve. |
Definition at line 92 of file SmoothCurve.cpp.
References _leng.
double moab::SmoothCurve::u_from_position | ( | double | x, |
double | y, | ||
double | z, | ||
EntityHandle & | v, | ||
int & | edgeIndex | ||
) | [virtual] |
Get the u parameter value on the curve closest to x,y,z and the point on the curve.
x | The x coordinate of the point |
y | The y coordinate of the point |
z | The z coordinate of the point |
Definition at line 165 of file SmoothCurve.cpp.
References _edgeTag, _entities, _fractions, _mb, delta_t, ErrorCode, moab::Interface::get_connectivity(), moab::Interface::get_coords(), length(), length_squared(), moab::CartVect::length_squared(), MB_SUCCESS, MB_TYPE_DOUBLE, moab::Interface::tag_get_data(), moab::Interface::tag_get_handle(), and moab::tolerance.
Referenced by move_to_curve(), and moab::FBEngine::split_edge_at_point().
{ // this is an iterative process, expensive usually // get first all nodes , and their positions // find the closest node (and edge), and from there do some // iterations up to a point // do not exaggerate with convergence criteria v = 0; // we do not have a close by vertex yet CartVect initialPos( x, y, z ); double u = 0; int nbNodes = (int)_entities.size() * 2; // the mesh edges are stored std::vector< EntityHandle > nodesConnec; nodesConnec.resize( nbNodes ); ErrorCode rval = this->_mb->get_connectivity( &( _entities[0] ), nbNodes / 2, nodesConnec ); if( MB_SUCCESS != rval ) { std::cout << "error in getting connectivity\n"; return 0; } // collapse nodesConnec, nodes should be in order for( int k = 0; k < nbNodes / 2; k++ ) { nodesConnec[k + 1] = nodesConnec[2 * k + 1]; } int numNodes = nbNodes / 2 + 1; std::vector< CartVect > coordNodes; coordNodes.resize( numNodes ); rval = _mb->get_coords( &( nodesConnec[0] ), numNodes, (double*)&( coordNodes[0] ) ); if( MB_SUCCESS != rval ) { std::cout << "error in getting node positions\n"; return 0; } // find the closest node, then find the closest edge, based on closest node int indexNode = 0; double minDist = 1.e30; // expensive linear search for( int i = 0; i < numNodes; i++ ) { double d1 = ( initialPos - coordNodes[i] ).length(); if( d1 < minDist ) { indexNode = i; minDist = d1; } } double tolerance = 0.00001; // what is the unit? // something reasonable if( minDist < tolerance ) { v = nodesConnec[indexNode]; // we are done, just return the proper u (from fractions) if( indexNode == 0 ) { return 0; // first node has u = 0 } else return _fractions[indexNode - 1]; // fractions[0] > 0!!) } // find the mesh edge; could be previous or next edge edgeIndex = indexNode; // could be the previous one, though!! if( edgeIndex == numNodes - 1 ) edgeIndex--; // we have one less edge, and do not worry about next edge else { if( edgeIndex > 0 ) { // could be the previous; decide based on distance to the other // nodes of the 2 connected edges CartVect prevNodePos = coordNodes[edgeIndex - 1]; CartVect nextNodePos = coordNodes[edgeIndex + 1]; if( ( prevNodePos - initialPos ).length_squared() < ( nextNodePos - initialPos ).length_squared() ) { edgeIndex--; } } } // now, we know for sure that the closest point is somewhere on edgeIndex edge // // do newton iteration for local t between 0 and 1 // copy from evaluation method CartVect P[2]; // P0 and P1 CartVect controlPoints[3]; // edge control points double t4, t3, t2, one_minus_t, one_minus_t2, one_minus_t3, one_minus_t4; P[0] = coordNodes[edgeIndex]; P[1] = coordNodes[edgeIndex + 1]; if( 0 == _edgeTag ) { rval = _mb->tag_get_handle( "CONTROLEDGE", 9, MB_TYPE_DOUBLE, _edgeTag ); if( rval != MB_SUCCESS ) return 0; } rval = _mb->tag_get_data( _edgeTag, &( _entities[edgeIndex] ), 1, (double*)&controlPoints[0] ); if( rval != MB_SUCCESS ) return rval; // starting point double tt = 0.5; // between the 2 ends of the edge int iterations = 0; // find iteratively a better point int maxIterations = 10; // not too many CartVect outv; // we will solve minimize F = 0.5 * ( ini - r(t) )^2 // so solve F'(t) = 0 // Iteration: t_ -> t - F'(t)/F"(t) // F'(t) = r'(t) (ini-r(t) ) // F"(t) = r"(t) (ini-r(t) ) - (r'(t))^2 while( iterations < maxIterations ) // { t2 = tt * tt; t3 = t2 * tt; t4 = t3 * tt; one_minus_t = 1. - tt; one_minus_t2 = one_minus_t * one_minus_t; one_minus_t3 = one_minus_t2 * one_minus_t; one_minus_t4 = one_minus_t3 * one_minus_t; outv = one_minus_t4 * P[0] + 4. * one_minus_t3 * tt * controlPoints[0] + 6. * one_minus_t2 * t2 * controlPoints[1] + 4. * one_minus_t * t3 * controlPoints[2] + t4 * P[1]; CartVect out_tangent = -4. * one_minus_t3 * P[0] + 4. * ( one_minus_t3 - 3. * tt * one_minus_t2 ) * controlPoints[0] + 12. * ( tt * one_minus_t2 - t2 * one_minus_t ) * controlPoints[1] + 4. * ( 3. * t2 * one_minus_t - t3 ) * controlPoints[2] + 4. * t3 * P[1]; CartVect second_deriv = 12. * one_minus_t2 * P[0] + 4. * ( -3. * one_minus_t2 - 3. * one_minus_t2 + 6. * tt * one_minus_t ) * controlPoints[0] + 12. * ( one_minus_t2 - 4 * tt * one_minus_t + t2 ) * controlPoints[1] + 4. * ( 6. * tt - 12 * t2 ) * controlPoints[2] + 12. * t2 * P[1]; CartVect diff = outv - initialPos; double F_d = out_tangent % diff; double F_dd = second_deriv % diff + out_tangent.length_squared(); if( 0 == F_dd ) break; // get out, we found minimum? double delta_t = -F_d / F_dd; if( fabs( delta_t ) < 0.000001 ) break; tt = tt + delta_t; if( tt < 0 ) { tt = 0.; v = nodesConnec[edgeIndex]; // we are at end of mesh edge break; } if( tt > 1 ) { tt = 1; v = nodesConnec[edgeIndex + 1]; // we are at one end break; } iterations++; } // so we have t on the segment, convert to u, which should // be between _fractions[edgeIndex] numbers double prevFraction = 0; if( edgeIndex > 0 ) prevFraction = _fractions[edgeIndex - 1]; u = prevFraction + tt * ( _fractions[edgeIndex] - prevFraction ); return u; }
Tag moab::SmoothCurve::_edgeTag [private] |
Definition at line 134 of file SmoothCurve.hpp.
Referenced by compute_control_points_on_boundary_edges(), evaluate_smooth_edge(), SmoothCurve(), and u_from_position().
std::vector< EntityHandle > moab::SmoothCurve::_entities [private] |
Definition at line 128 of file SmoothCurve.hpp.
Referenced by compute_control_points_on_boundary_edges(), end_coordinates(), position_from_u(), start_coordinates(), and u_from_position().
std::vector< double > moab::SmoothCurve::_fractions [private] |
Definition at line 130 of file SmoothCurve.hpp.
Referenced by compute_control_points_on_boundary_edges(), position_from_u(), and u_from_position().
GeomTopoTool* moab::SmoothCurve::_gtt [private] |
Definition at line 138 of file SmoothCurve.hpp.
Referenced by compute_control_points_on_boundary_edges().
double moab::SmoothCurve::_leng [private] |
Definition at line 129 of file SmoothCurve.hpp.
Referenced by arc_length(), compute_control_points_on_boundary_edges(), is_periodic(), SmoothCurve(), and u_from_arc_length().
Interface* moab::SmoothCurve::_mb [private] |
Definition at line 136 of file SmoothCurve.hpp.
Referenced by compute_control_points_on_boundary_edges(), compute_tangents_for_each_edge(), end_coordinates(), evaluate_smooth_edge(), is_periodic(), start_coordinates(), and u_from_position().
EntityHandle moab::SmoothCurve::_set [private] |
Definition at line 137 of file SmoothCurve.hpp.
Referenced by compute_control_points_on_boundary_edges(), compute_tangents_for_each_edge(), and is_periodic().