cgma
CurveFacetEvalTool Class Reference

#include <CurveFacetEvalTool.hpp>

List of all members.

Public Member Functions

 CurveFacetEvalTool ()
 ~CurveFacetEvalTool ()
CubitStatus initialize (DLIList< CubitFacetEdge * > &edge_list, DLIList< CubitPoint * > &point_list, FacetEvalTool *surf_eval=NULL)
CubitStatus initialize (FacetEvalTool *surf_eval_tool, CubitPoint *start_point, CubitPoint *end_point, CubitSense orientation)
CubitStatus initialize (FacetEvalTool *surf_eval_tool, CubitVector &start, CubitVector &end, CubitSense orientation)
CubitStatus initialize (FacetEvalTool *surf_eval_tool, CubitVector &start, std::vector< CubitVector > &positions)
CubitStatus save (FILE *fp)
CubitStatus restore (FILE *fp, unsigned int endian, int num_edges, int num_points, CubitFacetEdge **edges, CubitPoint **points, int num_fets, FacetEvalTool **fet_list)
int get_output_id ()
void set_output_id (int id)
CubitBox bounding_box ()
CubitStatus closest_point (CubitVector &this_point, CubitVector &closest_point_ptr, CubitVector *normal_ptr=NULL, CubitVector *curvature_ptr=NULL, double *param=NULL)
CubitBoolean replace_point (CubitPoint *del_pnt, CubitPoint *keep_pnt)
CubitBoolean replace_facets (DLIList< CubitFacetEdge * > &curv_edges)
void remove_facets (DLIList< CubitFacetEdge * > &facet_edges)
CubitStatus position_from_fraction (double fraction, CubitVector &location_on_curve)
double u_from_arc_length (double root_param, double arc_length)
double length_from_u (double root_param, double end_param)
double length ()
CubitSense sense ()
void get_facets (DLIList< CubitFacetEdge * > &facet_list)
void get_points (DLIList< CubitPoint * > &point_list)
FacetEvalToolget_surf_eval_tool ()
void set_facet_eval_tool (FacetEvalTool *surf_eval_tool_ptr)
void set_length ()
CubitBoolean has_good_curve_data ()
void debug_draw_facet_edges (int color=-1)

Private Member Functions

void draw_edges (int color=-1)
void draw_edge (CubitFacetEdge *edge, int color)
void draw_line (CubitVector &begin, CubitVector &end, int color=-1)
void draw_location (CubitVector &loc, int color=-1)
void destroy_facets ()
CubitStatus get_segments_from_loops (DLIList< DLIList< CubitFacetEdge * > * > *facet_loop_list, CubitVector &start, CubitVector &end, DLIList< CubitFacetEdge * > &edge_list, DLIList< CubitPoint * > &point_list, CubitSense owrts)
CubitStatus get_segments_from_loops (DLIList< DLIList< CubitFacetEdge * > * > *facet_loop_list, CubitPoint *start_pt, CubitPoint *end_pt, DLIList< CubitFacetEdge * > &edge_list, DLIList< CubitPoint * > &point_list, CubitSense owrts)
CubitStatus get_segments_from_positions (std::vector< CubitVector > &positions, CubitVector &start_pt, DLIList< CubitFacetEdge * > &edge_list, DLIList< CubitPoint * > &point_list)
CubitStatus evaluate_bezier_edge (CubitFacetEdge *edge, int index0, int index1, double fraction, CubitVector &location_on_curve, double *tangent)
CubitStatus project_to_bezier_edge (CubitFacetEdge *edge, CubitVector &point, CubitVector &projected_point, double *tangent, double *tval)
double u_on_facet_edge (CubitFacetEdge *edge_at_pt, CubitVector pt)
CubitStatus fix_point_edge_order ()
CubitSense find_curv_sense (CubitPoint *start_ptr)
CubitSense find_curv_sense (CubitVector &start)

Private Attributes

int toolID
int interpOrder
DLIList< CubitFacetEdge * > myEdgeList
DLIList< CubitPoint * > myPointList
CubitBoxmyBBox
FacetEvalToolsurfFacetEvalTool
double facetLength
CubitSense curvSense
CubitBoolean goodCurveData
int output_id

Detailed Description

Definition at line 26 of file CurveFacetEvalTool.hpp.


Constructor & Destructor Documentation

Definition at line 150 of file CurveFacetEvalTool.cpp.

{
  static int counter = 0;
  toolID = counter++;
  myBBox = NULL;
  goodCurveData = CUBIT_TRUE;
  
}

Definition at line 164 of file CurveFacetEvalTool.cpp.

{
  if ( myBBox ) delete myBBox;
  destroy_facets();
}

Member Function Documentation

Definition at line 578 of file CurveFacetEvalTool.cpp.

{
  if ( !myBBox )
  {
    int ii;
    CubitPoint *point_ptr;
    double x, y, z;
    double x_min = CUBIT_DBL_MAX, x_max = -CUBIT_DBL_MAX;
    double y_min = CUBIT_DBL_MAX, y_max = -CUBIT_DBL_MAX;
    double z_min = CUBIT_DBL_MAX, z_max = -CUBIT_DBL_MAX;
    for ( ii = myPointList.size(); ii > 0; ii-- )
    {
      point_ptr = myPointList.get_and_step();
      x = point_ptr->x();
      y = point_ptr->y();
      z = point_ptr->z();
      if ( x < x_min )
        x_min = x;
      if ( y < y_min )
        y_min = y;
      if ( z < z_min )
        z_min = z;
      if ( x > x_max )
        x_max = x;
      if ( y > y_max )
        y_max = y;
      if ( z > z_max )
        z_max = z;
    }
    CubitVector min_v(x_min, y_min, z_min );
    CubitVector max_v(x_max, y_max, z_max );
    myBBox = new CubitBox( min_v, max_v );
  }
  return *(myBBox);
}
CubitStatus CurveFacetEvalTool::closest_point ( CubitVector this_point,
CubitVector closest_point_ptr,
CubitVector normal_ptr = NULL,
CubitVector curvature_ptr = NULL,
double *  param = NULL 
)

Definition at line 805 of file CurveFacetEvalTool.cpp.

{
  CubitStatus stat = CUBIT_SUCCESS;
//  int outside;
  int mydebug = 0;
  if (mydebug)
  {
    draw_location(this_point, CUBIT_RED_INDEX);
  }
/*
  if (surfFacetEvalTool == NULL)
  {
    stat = project_to_linear_facet_edge( this_point, closest_point,
                                         tangent_ptr, curvature_ptr,
                                         param, &outside );
  }
  else
  {
    stat = project_to_facet_edge( this_point, closest_point, 
                                  tangent_ptr, curvature_ptr, param, &outside );
  }
  */
  int i;
  CubitVector test_pt_v, closest_pt_v, pt0_v, pt1_v;
  double distance2, closest_distance2; //  distance squared
  CubitFacetEdge *edge, *best_edge = NULL;

  myEdgeList.reset();
  closest_distance2 = CUBIT_DBL_MAX;
  for ( i = myEdgeList.size(); i > 0; i-- ) {  
    edge = myEdgeList.get_and_step();
    pt0_v = edge->point(0)->coordinates();
    pt1_v = edge->point(1)->coordinates();
    test_pt_v = FacetDataUtil::squared_distance_to_segment(this_point,
                     pt0_v,pt1_v,distance2);
    if ( distance2 < closest_distance2 ) {
      closest_distance2 = distance2;
      closest_pt_v = test_pt_v;
      best_edge = edge;
      if ( distance2 < GEOMETRY_RESABS*GEOMETRY_RESABS ) break;
    }
  }


  if (mydebug)
  {
    myEdgeList.reset();
    for ( i = myEdgeList.size(); i > 0; i-- ) {  
      edge = myEdgeList.get_and_step();
      pt0_v = edge->point(0)->coordinates();
      pt1_v = edge->point(1)->coordinates();
      GfxDebug::draw_point(pt0_v, CUBIT_GREEN_INDEX );
      GfxDebug::draw_point(pt1_v, CUBIT_RED_INDEX );
      GfxDebug::flush();
    }
  }
  
  if ( interpOrder == 0 ) {
    closest_point = closest_pt_v;
    if (tangent_ptr) {
      CubitVector tangent;
      if (best_edge->edge_tangent( closest_point, tangent ) != CUBIT_SUCCESS) {
        return CUBIT_FAILURE;
      }
      if (curvSense == CUBIT_REVERSED)
        tangent = -tangent;
      *tangent_ptr = tangent;
    } 
    // evaluate the curvature if required
    if (curvature_ptr) 
    {
      if( myEdgeList.size() == 1 )
        (*curvature_ptr).set( 0, 0, 0); 
      else
      {
        CubitVector curvature;
        myEdgeList.move_to( best_edge );
        int index = myEdgeList.get_index();

        //"best_edge" could be last or first on curve 
        CubitFacetEdge* prev_edge = NULL; 
        myEdgeList.back();
        if( (index - 1) == myEdgeList.get_index() ) 
          prev_edge = myEdgeList.get();

        CubitFacetEdge* next_edge = NULL; 
        myEdgeList.step(2);
        if( (index + 1) == myEdgeList.get_index() ) 
          next_edge = myEdgeList.get();


        CubitFacetEdge *closest_edge;
        //determine which adjacent edge is closest to "best_point"
        if( prev_edge && next_edge )
        {
          CubitVector tmp_vec;
          double prev_dist, next_dist;
          tmp_vec = (prev_edge->point(0)->coordinates() + 
                     prev_edge->point(1)->coordinates() ) / 2;
          prev_dist = closest_point.distance_between( tmp_vec ); 

          tmp_vec = (next_edge->point(0)->coordinates() + 
                     next_edge->point(1)->coordinates() ) / 2;
          next_dist = closest_point.distance_between( tmp_vec ); 
        
          if( prev_dist < next_dist )
            closest_edge = prev_edge;
          else
            closest_edge = next_edge;
        }
        else if( prev_edge )
          closest_edge = prev_edge;
        else
          closest_edge = next_edge;

        if (best_edge->edge_curvature( closest_point, curvature, closest_edge ) != CUBIT_SUCCESS) {
          return CUBIT_FAILURE;
        }
        if (curvSense == CUBIT_REVERSED)
          curvature = -curvature;
        *curvature_ptr = curvature;
      }
    }
  } else if ( interpOrder == 4 ) { 
    double t_value;    
    double tangent[3];
    stat = project_to_bezier_edge(best_edge,this_point,
                                  closest_point,tangent,&t_value);
    if(curvSense == CUBIT_REVERSED){
      tangent[0]= -tangent[0];
      tangent[1]= -tangent[1];
      tangent[2]= -tangent[2];
    }
    
    if ( tangent_ptr ) {                                    
      tangent_ptr->x(tangent[0]);
      tangent_ptr->y(tangent[1]);
      tangent_ptr->z(tangent[2]);
    }

    if ( curvature_ptr ) {
    //  The idea here is to get the planes normal to two points on the curve
    //  on either side of the closest_point, and also to get the plane through 
    //  these three points.  The point of intersection of these three planes
    //  should be a good approximation of the center of curvature, from which
    //  the curvature vector is readily found.
    //  tan1 and tan2 are the normals to the two planes for the endpoints;
    //  norm3 is the normal for the plane through the three points. 
      CubitVector tan1, tan2, point_1,  point_2;
      CubitVector *tan1_ptr = &tan1;
      CubitVector *tan2_ptr = &tan2;
//       CubitVector *point_1_ptr = &point_1;
      CubitVector *point_2_ptr = &point_2;
      t_value -= 0.01;
      best_edge->evaluate_single_tangent(t_value,tan1_ptr);
      t_value += 0.02;
      best_edge->evaluate_single(t_value,tan2_ptr);
      best_edge->evaluate_single_tangent(t_value,point_2_ptr);
      tan1.normalize();
      tan2.normalize();
      //  Get the plane through the point and normal to the tangent for the two 
      //  points at the end.
      //  Get the plane for the three points.
      CubitVector arm1 = point_1 - closest_point;
      CubitVector arm2 = point_2 - closest_point;
      CubitVector norm3 = arm1*arm2;
      norm3.normalize();
      double denominator;
      
      denominator = tan1 % ( tan2 * norm3 );  

      if ( fabs(denominator) < GEOMETRY_RESABS ) { // planes are parallel; 
                                                    // curvature is infinite
        curvature_ptr->x(CUBIT_DBL_MAX);
        curvature_ptr->y(CUBIT_DBL_MAX);
        curvature_ptr->z(CUBIT_DBL_MAX);
      
      } else {
        CubitVector IntersectionPoint;
        IntersectionPoint = ( (point_1%tan1)*(norm3*tan2) + 
                              (closest_point%norm3)*(tan2*tan1) +
                              (point_2%tan2)*(tan1*norm3) )/denominator;
      
        curvature_ptr->x(closest_point.x() - IntersectionPoint.x());
        curvature_ptr->y(closest_point.y() - IntersectionPoint.y());
        curvature_ptr->z(closest_point.z() - IntersectionPoint.z());
        
      }
              
    }  
  } else {
    PRINT_ERROR("Error:  Only curves or order 0 or 4 are supported.\n");
    return CUBIT_FAILURE;    
  }
  

  
  if (param)
  {
    *param = u_on_facet_edge( best_edge, closest_point );
  }
   
  if (mydebug)
  {
    draw_location(closest_point, CUBIT_GREEN_INDEX);
  }
  return stat;

}

Definition at line 2115 of file CurveFacetEvalTool.cpp.

{
  draw_edges(color);
}

Definition at line 1783 of file CurveFacetEvalTool.cpp.

{

}
void CurveFacetEvalTool::draw_edge ( CubitFacetEdge edge,
int  color 
) [private]

Definition at line 1822 of file CurveFacetEvalTool.cpp.

{

  CubitPoint *begin_point = edge->point(0);
  CubitPoint *end_point = edge->point(1);
  GfxDebug::draw_line(begin_point->x(), 
                      begin_point->y(), 
                      begin_point->z(),
                      end_point->x(), 
                      end_point->y(), 
                      end_point->z(), 
                      color);

  GfxDebug::flush();
}
void CurveFacetEvalTool::draw_edges ( int  color = -1) [private]

Definition at line 1795 of file CurveFacetEvalTool.cpp.

{
  int ii;
  if ( color == -1 )
    color = CUBIT_BLUE_INDEX;
  for ( ii = myEdgeList.size(); ii > 0; ii-- )
  {
    CubitFacetEdge *edge = myEdgeList.get_and_step();
    CubitPoint *begin_point = edge->point(0);
    CubitPoint *end_point = edge->point(1);
    GfxDebug::draw_line(begin_point->x(), 
                        begin_point->y(), 
                        begin_point->z(),
                        end_point->x(), 
                        end_point->y(), 
                        end_point->z(), 
                        color);
  }
  GfxDebug::flush();
}
void CurveFacetEvalTool::draw_line ( CubitVector begin,
CubitVector end,
int  color = -1 
) [private]

Definition at line 1843 of file CurveFacetEvalTool.cpp.

{
  GfxDebug::draw_line(begin.x(), begin.y(), begin.z(),
                      end.x(), end.y(), end.z(), color);
  GfxDebug::flush();
}
void CurveFacetEvalTool::draw_location ( CubitVector loc,
int  color = -1 
) [private]

Definition at line 1855 of file CurveFacetEvalTool.cpp.

{
  if ( color == -1 )
    color = CUBIT_YELLOW_INDEX;
  GfxDebug::draw_point(loc, color);
  GfxDebug::flush();
}
CubitStatus CurveFacetEvalTool::evaluate_bezier_edge ( CubitFacetEdge edge,
int  index0,
int  index1,
double  fraction,
CubitVector location_on_curve,
double *  tangent 
) [private]

Definition at line 708 of file CurveFacetEvalTool.cpp.

{
CubitStatus status;
int numEdge, numVert, numLocs;
int edgeVert[2];
//int order;
double vert[6], edgeCtrlPts[9], location[3];
CubitVector *edge_ctrl_pts;
 double scaled_parameter;
 
  numEdge = 1;
  numVert = 2;
  numLocs = 1;
  edgeVert[0] = 0; edgeVert[1] = 1;
  vert[0] = edge->point(index0)->x();
  vert[1] = edge->point(index0)->y();
  vert[2] = edge->point(index0)->z();
  vert[3] = edge->point(index1)->x();
  vert[4] = edge->point(index1)->y();
  vert[5] = edge->point(index1)->z();
  
    edge_ctrl_pts = edge->control_points();
    edgeCtrlPts[0] = edge_ctrl_pts[0].x();  
    edgeCtrlPts[1] = edge_ctrl_pts[0].y();  
    edgeCtrlPts[2] = edge_ctrl_pts[0].z();  
    edgeCtrlPts[3] = edge_ctrl_pts[1].x();  
    edgeCtrlPts[4] = edge_ctrl_pts[1].y();  
    edgeCtrlPts[5] = edge_ctrl_pts[1].z();  
    edgeCtrlPts[6] = edge_ctrl_pts[2].x();  
    edgeCtrlPts[7] = edge_ctrl_pts[2].y();  
    edgeCtrlPts[8] = edge_ctrl_pts[2].z();  

      //evalBezierEdge takes a parameter in the range of -1 to 1.
      // evalBezierEdge calls functions which  convert back to
      // a range of 0 to 1,
      // but we must convert to -1 to 1, before sending it.
    scaled_parameter = (2.0 * fraction) - 1.0;
    
  //  static function in Cholla.cpp
    evalBezierEdge(numEdge,numVert,edgeVert,vert,edgeCtrlPts,numLocs,
                   &scaled_parameter, location,tangent);
  
  location_on_curve.x(location[0]); 
  location_on_curve.y(location[1]); 
  location_on_curve.z(location[2]); 
   
  status = CUBIT_SUCCESS;
  
  return status;
}

Definition at line 521 of file CurveFacetEvalTool.cpp.

{
  myEdgeList.reset();
  CubitFacetEdge *edge_ptr = myEdgeList.get();
  CubitPoint *pt0 = edge_ptr->point(0);
  CubitPoint *pt1 = edge_ptr->point(1);
  CubitSense sense;

  if (start_pt == pt0)
  {
    sense = CUBIT_FORWARD;
  }
  else if (start_pt == pt1)
  {
    sense = CUBIT_REVERSED;
  }
  else
  {
    sense = CUBIT_UNKNOWN;
  }
  return sense;
}

Definition at line 553 of file CurveFacetEvalTool.cpp.

{
  myEdgeList.reset();
  CubitFacetEdge* temp_edge = myEdgeList.get();
 
  CubitVector temp_vector = temp_edge->point(1)->coordinates() - 
                            temp_edge->point(0)->coordinates();
  
  double tol = temp_vector.length() / 100.0; 
  //if point(0) of first edge in list == start, it is CUBIT_FORWARD 
  if(start.within_tolerance(temp_edge->point(0)->coordinates(), tol ) )
    return CUBIT_FORWARD;
  //if point(1) of first edge in list == start, it is CUBIT_REVERSED 
  else if(start.within_tolerance(temp_edge->point(1)->coordinates(), tol ) )
    return CUBIT_REVERSED;
  else
    return CUBIT_UNKNOWN; 
}

Definition at line 2051 of file CurveFacetEvalTool.cpp.

{
  CubitFacetEdge* this_edge;
  CubitFacetEdge* next_edge;
  CubitPoint *this_pt1;
  CubitPoint *next_pt0, *next_pt1;
  
  if( myEdgeList.size() == 0 )
    return CUBIT_FAILURE;

  this_edge = myEdgeList.get_and_step();
  int ii;
  for( ii = myEdgeList.size() - 1; ii > 0; ii-- )
  {
    if( 0 != this_edge->num_adj_facets() )
       continue;
    
    next_edge = myEdgeList.get_and_step();

    this_pt1 = this_edge->point( 1 );
    next_pt0 = next_edge->point( 0 );
    next_pt1 = next_edge->point( 1 );

    if( this_pt1 != next_pt0 &&
        this_pt1 != next_pt1 )
    {
        //Swap direction of edge.  (mod. 3-7-06)  Now calling flip instead
        // of doing the flip manually.  The flip function also tracks
        // the orientation so that we can remember the original orientation
        // of the edge.
      this_edge->flip();
      
    }
    
    this_edge = next_edge;
  }
    //Handle last edge
  next_edge = myEdgeList.prev(2);
  if( 0 == this_edge->num_adj_facets() )
  {
    CubitPoint* this_pt0 = this_edge->point( 0 );
    next_pt0 = next_edge->point( 0 );
    next_pt1 = next_edge->point( 1 );

    if( this_pt0 != next_pt0 &&
        this_pt0 != next_pt1 )
    {
        //Swap direction of edge.(mod. 3-7-06)  Now calling flip instead
        // of doing the flip manually.  The flip function also tracks
        // the orientation so that we can remember the original orientation
        // of the edge.
      this_edge->flip();
      
    }
  }

  return CUBIT_SUCCESS;
}
void CurveFacetEvalTool::get_facets ( DLIList< CubitFacetEdge * > &  facet_list) [inline]

Definition at line 190 of file CurveFacetEvalTool.hpp.

    { facet_list +=  myEdgeList; }

Definition at line 152 of file CurveFacetEvalTool.hpp.

{ return output_id; }
void CurveFacetEvalTool::get_points ( DLIList< CubitPoint * > &  point_list) [inline]

Definition at line 193 of file CurveFacetEvalTool.hpp.

    { point_list +=  myPointList; }
CubitStatus CurveFacetEvalTool::get_segments_from_loops ( DLIList< DLIList< CubitFacetEdge * > * > *  facet_loop_list,
CubitVector start,
CubitVector end,
DLIList< CubitFacetEdge * > &  edge_list,
DLIList< CubitPoint * > &  point_list,
CubitSense  owrts 
) [private]

Definition at line 181 of file CurveFacetEvalTool.cpp.

{
  CubitStatus stat = CUBIT_SUCCESS;
  int ii, jj;
  int mydebug = 0;
  
  CubitBoolean done = CUBIT_FALSE;
  DLIList<CubitFacetEdge*> *facet_loop;
  CubitFacetEdge *edge, *startedge = NULL;
  CubitPoint *pt0, *pt1;
  CubitVector loc_pt0, loc_pt1;
  double edge_length;

  facetLength = 0.0e0;

  int tool_id = surfFacetEvalTool->tool_id();
    //loop over the "loops"
  for (ii=0; ii<facet_loop_list->size() && !done && stat == CUBIT_SUCCESS; ii++) {
      //get the next facet loop
    facet_loop = facet_loop_list->get_and_step();   

      // now loop over the edges in that loop
    for (jj=0; jj<facet_loop->size() && !done; jj++) {
        //get the start edge... we will 
        //traverse the list forwards, if the surface is oriented forward
        //otherwise, traverse it backwards
      startedge =
        (orientation_wrt_surf == CUBIT_FORWARD) ? facet_loop->get_and_step() :
        facet_loop->get_and_back();
      
      if (startedge->get_flag() == 0) {
        if (orientation_wrt_surf == CUBIT_FORWARD) {
          startedge->boundary_edge_points( pt0, pt1, tool_id );
        }
        else {
          startedge->boundary_edge_points( pt1, pt0, tool_id );
        }
        loc_pt0 = pt0->coordinates();
        loc_pt1 = pt1->coordinates();
        if (loc_pt0.within_tolerance( start, GEOMETRY_RESABS )) {
          startedge->set_flag( 1 );
          edge = startedge;
          if (mydebug) draw_edge( edge, CUBIT_GREEN_INDEX );
          while (!done) {
            edge_list.append( edge );
            point_list.append( pt0 );
            edge_length = loc_pt0.distance_between( loc_pt1 );
            facetLength += edge_length;
              //if the other end of the edge is at the begginning of the
              //loop, then we're done.
            if (loc_pt1.within_tolerance( end, GEOMETRY_RESABS )) {
              done = CUBIT_TRUE;
              point_list.append( pt1 );
            }
            else {//otherwise...
              if (orientation_wrt_surf == CUBIT_FORWARD) {
                edge = facet_loop->get_and_step();
                edge->boundary_edge_points( pt0, pt1, tool_id );
              }
              else {
                edge = facet_loop->get_and_back();
                edge->boundary_edge_points( pt1, pt0, tool_id );
              }
              loc_pt0 = pt0->coordinates();
              loc_pt1 = pt1->coordinates();
              if (mydebug) draw_edge( edge, CUBIT_BLUE_INDEX );
                //if we got back to the startedge without the
                // other end of an edge getting to the start vertex,
                // we have a problem....
              if (edge == startedge)
              {
                stat = CUBIT_FAILURE;  // this shouldn't happen
                done = CUBIT_TRUE;
              }//end edge == startedge
            }//end else not within tolerance
          }//end while not done
        }//end if within tolerance
      }//end if not marked
    }//end loop over edges in facet loop
  }//end loop over facet loops
  if(done!=CUBIT_TRUE)
  {
    PRINT_ERROR("Can't define curve representation in mesh-based geometry\n");
    stat = CUBIT_FAILURE;
  }
  return stat;
  
}
CubitStatus CurveFacetEvalTool::get_segments_from_loops ( DLIList< DLIList< CubitFacetEdge * > * > *  facet_loop_list,
CubitPoint start_pt,
CubitPoint end_pt,
DLIList< CubitFacetEdge * > &  edge_list,
DLIList< CubitPoint * > &  point_list,
CubitSense  owrts 
) [private]

Definition at line 285 of file CurveFacetEvalTool.cpp.

{
  CubitStatus stat = CUBIT_SUCCESS;
  int ii, jj;
  int mydebug = DEBUG_FLAG(181);  
  CubitBoolean done = CUBIT_FALSE;
  DLIList<CubitFacetEdge*> *facet_loop;
  CubitFacetEdge *edge, *startedge = NULL;
  CubitPoint *pt0, *pt1;
  CubitVector loc_pt0, loc_pt1;
  double edge_length;
  DLIList<CubitFacetEdge*> temp_edge_list;
  DLIList<CubitPoint*> temp_point_list;
  
  if (mydebug)
  {
    GfxDebug::draw_point( start_pt->x(),
                          start_pt->y(),
                          start_pt->z(),
                          CUBIT_RED_INDEX );
    GfxDebug::draw_point( end_pt->x(),
                          end_pt->y(),
                          end_pt->z(),
                          CUBIT_GREEN_INDEX );
    GfxDebug::flush();
  }

  int tool_id = surfFacetEvalTool->tool_id();
    //loop over the list of facet loops
  for (ii=0; ii<facet_loop_list->size() && !done && stat == CUBIT_SUCCESS; ii++) {
      //get the next facet loop
    facet_loop = facet_loop_list->get_and_step();
      //now loop over the edges in that facet loop
    for (jj=0; jj<facet_loop->size() && !done; jj++) {
        //get the start edge... we will 
        //traverse the list forwards, if the surface is oriented forward
        //otherwise, traverse it backwards
      startedge =
        (orientation_wrt_surf == CUBIT_FORWARD) ? facet_loop->get_and_step() :
        facet_loop->get_and_back();
        //if startedge isn't marked
      if (startedge->get_flag() == 0) {
          //get the points from the start edge in the appropriate order
        if (orientation_wrt_surf == CUBIT_FORWARD) {
          startedge->boundary_edge_points( pt0, pt1, tool_id );
        }
        else {
          startedge->boundary_edge_points( pt1, pt0, tool_id );
        }
          //convert to CubitVector
        loc_pt0 = pt0->coordinates();
        loc_pt1 = pt1->coordinates();
          //if the first point on the edge is the start_pt... otherwise step
        if (pt0 == start_pt) {
            //mark the startedge
          CubitFacetEdge* marked_edge = NULL;
          edge = startedge;
          if (mydebug) draw_edge( edge, CUBIT_GREEN_INDEX );//draw the start edge
            //loop until we have reached an end or no more choices
          while (!done) {
              //if the first point is at the start, we are either
              // just starting, or we have looped back onto the
              // start point.  The latter _may_ be ok.  In case
              // the latter is the case, clean out the temporary
              // lists and (re)initialize the length.  Also, unmark
              // the edge that we marked the last time we started,
              // if we previously marked an edge.
            if (pt0 == start_pt){
              temp_point_list.clean_out();
              temp_edge_list.clean_out();
              facetLength = 0.0;
              if(marked_edge)
                marked_edge->set_flag(0);
              marked_edge=edge;
              edge->set_flag(1);
            }
              //add the current edge to the edge list
            temp_edge_list.append( edge );
              //add the current start point to the point list
            temp_point_list.append( pt0 );
              //measure the edge... essentially
            edge_length = loc_pt0.distance_between( loc_pt1 );
              //keep a running tally of the curve length
            facetLength += edge_length;
              
              //if the second point is at the end, we're done
            if (pt1 == end_pt ) {
              done = CUBIT_TRUE;
              temp_point_list.append( pt1 );
            }
              //otherwise, we need to step forward
            else {
              if (orientation_wrt_surf == CUBIT_FORWARD) {
                edge = facet_loop->get_and_step();
                edge->boundary_edge_points( pt0, pt1, tool_id );
              }
              else {
                edge = facet_loop->get_and_back();
                edge->boundary_edge_points( pt1, pt0, tool_id );
              }
                //convert point to CubitVector, as above
              loc_pt0 = pt0->coordinates();
              loc_pt1 = pt1->coordinates();
              if (mydebug) draw_edge( edge, CUBIT_BLUE_INDEX );
              if (edge == startedge)
              {
                stat = CUBIT_FAILURE;  // this shouldn't happen
                done = CUBIT_TRUE;
              }
            }//end else (ie, if not pt1==end_pt)
          }//end while !done
        }//end if pt0 == start_pt
      }//end if start edge isn't marked
    }//end loop over edges in the loop
  }//end loop over facet loops

    //now put the temporary list entries onto the end of the list we return.
  point_list += temp_point_list;
  edge_list += temp_edge_list;
  
  if(done!=CUBIT_TRUE || stat == CUBIT_FAILURE)
  {
    stat = CUBIT_FAILURE;
    PRINT_WARNING("Can't define curve representation in mesh-based geometry\n");
    PRINT_INFO("  Hint: Try importing as a free mesh and examining nodes and attached\n");
    PRINT_INFO("        elements near the following locations:\n");
    PRINT_INFO("        Start curve = %f %f %f\n", start_pt->x(), start_pt->y(), start_pt->z());
    PRINT_INFO("        End curve = %f %f %f\n", end_pt->x(), end_pt->y(), end_pt->z());
    if (mydebug)
    {
      surfFacetEvalTool->debug_draw_facets( CUBIT_YELLOW_INDEX );
      int i, j;
      for (i=0; i<facet_loop_list->size(); i++)
      {
        DLIList<CubitFacetEdge*> *my_facet_loop = facet_loop_list->get_and_step();
        for (j=0; j<my_facet_loop->size(); j++)
        {
          draw_edge( my_facet_loop->get_and_step(), CUBIT_RED_INDEX );
        }
      }
      GfxDebug::mouse_xforms();
    }
  }
  return stat;
}
CubitStatus CurveFacetEvalTool::get_segments_from_positions ( std::vector< CubitVector > &  positions,
CubitVector start_pt,
DLIList< CubitFacetEdge * > &  edge_list,
DLIList< CubitPoint * > &  point_list 
) [private]

Definition at line 443 of file CurveFacetEvalTool.cpp.

{  
  DLIList<CubitPoint*> surface_pts;
  surfFacetEvalTool->get_points( surface_pts );  

  facetLength = 0;

  double smallest_dist = CUBIT_DBL_MAX;
  CubitPoint *start_pt = NULL;
  //find the closest point to 'start'
  for( int k=surface_pts.size(); k--; )
  {
    double tmp_dist = surface_pts.get()->coordinates().distance_between_squared( start );

    if( tmp_dist < smallest_dist )
    {
      smallest_dist = tmp_dist;
      start_pt = surface_pts.get();
    }
    surface_pts.get_and_step();
  }

  myPointList.append( start_pt );

  CubitPoint *current_pt = start_pt;
  CubitPoint *next_pt = NULL;
  for (size_t k = 1; k < positions.size(); k++ )
  {
    CubitVector current_pos = positions[k];

    //find the CubitPoint attached to this point via an edge
    double smallest_dist = CUBIT_DBL_MAX;    
    CubitFacetEdge *next_edge;

    DLIList<CubitFacetEdge*> adj_edges;
    current_pt->edges( adj_edges );

    for( int m=adj_edges.size(); m--; )
    {
      CubitFacetEdge *tmp_edge = adj_edges.get_and_step();
      CubitPoint *other_pt = tmp_edge->other_point( current_pt );

      double tmp_dist = current_pos.distance_between_squared(  other_pt->coordinates() );
      if( tmp_dist < smallest_dist )
      {
        smallest_dist = tmp_dist;
        next_pt = other_pt;
        next_edge = tmp_edge;
      }
    }

    current_pt = next_pt;
    
    facetLength += next_edge->length();

    myEdgeList.append( next_edge );
    myPointList.append( current_pt );    
  }

  if ((size_t)myPointList.size() != positions.size() ||
      (size_t)myEdgeList.size() != positions.size() - 1 )
    return CUBIT_FAILURE;

  return CUBIT_SUCCESS;
}
CubitStatus CurveFacetEvalTool::initialize ( DLIList< CubitFacetEdge * > &  edge_list,
DLIList< CubitPoint * > &  point_list,
FacetEvalTool surf_eval = NULL 
)

Definition at line 124 of file CurveFacetEvalTool.cpp.

{
//   static int counter = 0;
  output_id = -1;
  myBBox = NULL;
  curvSense = CUBIT_FORWARD;
  surfFacetEvalTool = surf_eval;
  myEdgeList = edge_list;
  myPointList = point_list;
  set_length();
  
  CubitStatus status = fix_point_edge_order();

  if( CUBIT_SUCCESS != status )
    return status;

  interpOrder = 0;
  if(surf_eval)
    interpOrder = surf_eval->interp_order();
  bounding_box();
  goodCurveData = CUBIT_TRUE;
  return CUBIT_SUCCESS;
}
CubitStatus CurveFacetEvalTool::initialize ( FacetEvalTool surf_eval_tool,
CubitPoint start_point,
CubitPoint end_point,
CubitSense  orientation 
)

Definition at line 91 of file CurveFacetEvalTool.cpp.

{
//   static int counter = 0;
  output_id = -1;

  myBBox = NULL;
  surfFacetEvalTool = surf_eval_tool;
  CubitStatus stat = get_segments_from_loops( surfFacetEvalTool->loops(), 
                                              start_pt, end_pt, 
                                              myEdgeList, myPointList,
                                              orientation_wrt_surf );
  goodCurveData = (stat == CUBIT_SUCCESS) ? CUBIT_TRUE : CUBIT_FALSE;
  if( !goodCurveData )
  {
    PRINT_ERROR( "Unable to initialize Curve Evaluation Tool for Faceted Geometry.\n" );
    return CUBIT_FAILURE;
  }
  interpOrder = surfFacetEvalTool->interp_order();
  curvSense = find_curv_sense( start_pt );
  bounding_box();
  return CUBIT_SUCCESS;
}
CubitStatus CurveFacetEvalTool::initialize ( FacetEvalTool surf_eval_tool,
CubitVector start,
CubitVector end,
CubitSense  orientation 
)

Definition at line 32 of file CurveFacetEvalTool.cpp.

{
//   static int counter = 0;
  output_id = -1;
  myBBox = NULL;

  surfFacetEvalTool = surf_eval_tool;  

  CubitStatus stat = get_segments_from_loops( surfFacetEvalTool->loops(), start, end, 
                           myEdgeList, myPointList, orientation_wrt_surface );
  goodCurveData = (stat == CUBIT_SUCCESS) ? CUBIT_TRUE : CUBIT_FALSE;
  if( !goodCurveData )
  {
    PRINT_ERROR( "Unable to initialize Curve Evaluation Tool for Faceted Geometry.\n" );
    return CUBIT_FAILURE;
  }

  interpOrder = surfFacetEvalTool->interp_order();
  curvSense = find_curv_sense( start );
  bounding_box();
  return CUBIT_SUCCESS;
}
CubitStatus CurveFacetEvalTool::initialize ( FacetEvalTool surf_eval_tool,
CubitVector start,
std::vector< CubitVector > &  positions 
)

Definition at line 58 of file CurveFacetEvalTool.cpp.

{
//   static int counter = 0;
  output_id = -1;
  myBBox = NULL;

  surfFacetEvalTool = surf_eval_tool;  
  
  CubitStatus stat = get_segments_from_positions( positions, start,
                           myEdgeList, myPointList ); 

  goodCurveData = (stat == CUBIT_SUCCESS) ? CUBIT_TRUE : CUBIT_FALSE;
  if( !goodCurveData )
  {
    PRINT_ERROR( "Unable to initialize Curve Evaluation Tool for Faceted Geometry.\n" );
    return CUBIT_FAILURE;
  }
  
  interpOrder = surfFacetEvalTool->interp_order();
  curvSense = find_curv_sense( start );
  bounding_box();
  return CUBIT_SUCCESS;
}
double CurveFacetEvalTool::length ( ) [inline]

Definition at line 184 of file CurveFacetEvalTool.hpp.

{ return facetLength; };
double CurveFacetEvalTool::length_from_u ( double  root_param,
double  end_param 
)

Definition at line 788 of file CurveFacetEvalTool.cpp.

{
  double length = (end_param - root_param) * facetLength;

  return length;
}
CubitStatus CurveFacetEvalTool::position_from_fraction ( double  fraction,
CubitVector location_on_curve 
)

Definition at line 621 of file CurveFacetEvalTool.cpp.

{
  CubitStatus status = CUBIT_SUCCESS;
  CubitBoolean done = CUBIT_FALSE;
  double length, curlength, targetlength, lastlength;
  CubitFacetEdge *edge = NULL;
  CubitPoint *pt0=NULL, *pt1=NULL;
  CubitVector loc_pt0, loc_pt1;
  CubitVector eval_location;
  myEdgeList.reset();

  myPointList.reset();
  pt0 = myPointList.get();
  if (fraction <= 0.0) {
    edge = myEdgeList.get_and_step();
    location_on_curve = pt0->coordinates();
    return status;
  }
  curlength = lastlength = 0.0e0;
  targetlength = fraction * facetLength;
  assert(myEdgeList.size() > 0);
  int ii = 0;
  for ( ; ii<myEdgeList.size() && !done; ii++) {
    edge = myEdgeList.get_and_step();
    loc_pt0 = edge->point( 0 )->coordinates();
    loc_pt1 = edge->point( 1 )->coordinates();
    length = loc_pt0.distance_between( loc_pt1 );
    curlength += length;
    if ( edge->point(0) == pt0 ){
      pt1 = edge->point(1);
    }
    else{
      pt1 = edge->point(0);
    }
    if (targetlength <= curlength) {
      done = CUBIT_TRUE;
      
      loc_pt0 = pt0->coordinates();
      loc_pt1 = pt1->coordinates();
      double local_fraction = (targetlength - lastlength) / length;
      eval_location = loc_pt0 + local_fraction * (loc_pt1 - loc_pt0); 
      if (interpOrder == 0 || !surfFacetEvalTool) {
        location_on_curve = eval_location;
      }
      else {
      //  evaluate Bezier edge
        int index0 = 0;        
        int index1 = 1;
        if ( pt1 == edge->point(0) ) {
            //switching the indices causes evaluate_bezier_edge to compute the 
            //wrong location, so I'm removing the switch (mbrewer)
          //index0 = 1;
          //index1 = 0;
          local_fraction = 1. - local_fraction;
        }
        status = evaluate_bezier_edge(edge,index0,index1,local_fraction,
                                        location_on_curve,0);
      }
    }
    else {
      lastlength = curlength;
    }
    if ( edge->point(0) == pt0 )
        pt0 = edge->point(1);
    else 
        pt0 = edge->point(0);
  }
  
  if (!done) {
    if(pt1 == NULL){
      PRINT_ERROR("Opposite point not found while evaluating a curve.\n");
      location_on_curve.set(0.0,0.0,0.0);
      return CUBIT_FAILURE;
    }
    location_on_curve = pt1->coordinates();
  }
  return status;
}
CubitStatus CurveFacetEvalTool::project_to_bezier_edge ( CubitFacetEdge edge,
CubitVector point,
CubitVector projected_point,
double *  tangent,
double *  tval 
) [private]

Definition at line 1025 of file CurveFacetEvalTool.cpp.

{
CubitStatus stat;
int numEdge, numVert, edgeVert[2], numLocs;
double vert[6], edgeCtrlPts[9], xyz[3], xyzOnEdge[3];
CubitVector *edge_ctrl_pts;

  stat = CUBIT_SUCCESS;

  numEdge = 1;
  numVert = 2;
  numLocs = 1;
  edgeVert[0] = 0; edgeVert[1] = 1;
  vert[0] = edge->point(0)->x();
  vert[1] = edge->point(0)->y();
  vert[2] = edge->point(0)->z();
  vert[3] = edge->point(1)->x();
  vert[4] = edge->point(1)->y();
  vert[5] = edge->point(1)->z();
  
    edge_ctrl_pts = edge->control_points();
    edgeCtrlPts[0] = edge_ctrl_pts[0].x();  
    edgeCtrlPts[1] = edge_ctrl_pts[0].y();  
    edgeCtrlPts[2] = edge_ctrl_pts[0].z();  
    edgeCtrlPts[3] = edge_ctrl_pts[1].x();  
    edgeCtrlPts[4] = edge_ctrl_pts[1].y();  
    edgeCtrlPts[5] = edge_ctrl_pts[1].z();  
    edgeCtrlPts[6] = edge_ctrl_pts[2].x();  
    edgeCtrlPts[7] = edge_ctrl_pts[2].y();  
    edgeCtrlPts[8] = edge_ctrl_pts[2].z();  
  xyz[0] = point.x();
  xyz[1] = point.y(); 
  xyz[2] = point.z();
  projToBezierEdge( numEdge,numVert,edgeVert,vert,edgeCtrlPts,
                       numLocs,xyz,xyzOnEdge,tangent,tval );

  projected_point.x(xyzOnEdge[0]);
  projected_point.y(xyzOnEdge[1]);
  projected_point.z(xyzOnEdge[2]);
  
  return stat;
}

Definition at line 2168 of file CurveFacetEvalTool.cpp.

Definition at line 2144 of file CurveFacetEvalTool.cpp.

{

  // replace edges 
  this->myEdgeList = curv_edges;

  // replace points
  DLIList<CubitPoint *> point_list;
  int i;
  // insert start point of every facet_edge
  curv_edges.reset();
  for( i = 0; i < curv_edges.size(); i++ )
  {
    point_list.append( CAST_TO( curv_edges.get_and_step(), CubitFacetEdge )->point(0) );
  }
  // insert end point of last facet_edge
  curv_edges.step( curv_edges.size() - 1 );
  point_list.append( CAST_TO( curv_edges.get(), CubitFacetEdge )->point(1) );
  this->myPointList = point_list;

  return CUBIT_TRUE;
}

Definition at line 2120 of file CurveFacetEvalTool.cpp.

{
  CubitPoint *point_ptr;
  int npoints = myPointList.size();
  myPointList.reset();
  CubitBoolean istat = CUBIT_FALSE;
  int i;
  for ( i = 0; i < npoints; i++ )
  {
    point_ptr = myPointList.get();
    
    if( point_ptr == del_pnt )
    {
      myPointList.remove();
      myPointList.insert( keep_pnt );
      istat = CUBIT_TRUE;
    }
    myPointList.step();
  }
  
  return istat;
}
CubitStatus CurveFacetEvalTool::restore ( FILE *  fp,
unsigned int  endian,
int  num_edges,
int  num_points,
CubitFacetEdge **  edges,
CubitPoint **  points,
int  num_fets,
FacetEvalTool **  fet_list 
)

Definition at line 1968 of file CurveFacetEvalTool.cpp.

{
  NCubitFile::CIOWrapper cio(endian, fp);
  typedef NCubitFile::UnsignedInt32 int32;

    // read stuff about this eval tool

  int ii;
  int int_data[4];
  cio.Read(reinterpret_cast<int32*>(int_data), 4);
  interpOrder = int_data[0];
  int surf_tool_id = int_data[1]; 

  if (int_data[2] == -1 )  
    curvSense = CUBIT_UNKNOWN;
  else
    curvSense= int_data[2] ? CUBIT_REVERSED : CUBIT_FORWARD;

  goodCurveData = (int_data[3]==0) ? CUBIT_FALSE : CUBIT_TRUE;

  if( surf_tool_id != -1 )
    surfFacetEvalTool = fet_array[ surf_tool_id ]; 
  else
    surfFacetEvalTool = NULL; 

  cio.Read(&facetLength, 1);

    // read the edges

  int nedges; 
  cio.Read(reinterpret_cast<int32*>(&nedges), 1);
  if (nedges > 0)
  {
    int32* edge_id = new int32 [nedges];
    cio.Read(edge_id, nedges);
    int id;
    for (ii=0; ii<nedges; ii++)
    {
      id = edge_id[ii];
      if (id <0 || id >= num_edges)
      {
        delete [] edge_id;
        return CUBIT_FAILURE;
      }
      myEdgeList.append(edges[id]);
    }
    delete [] edge_id;
  }
  
    // read the points

  int npoints; 
  cio.Read(reinterpret_cast<int32*>(&npoints), 1);
  int id;
  if (npoints > 0)
  {
    int32* point_id = new int32 [npoints];
    cio.Read(point_id, npoints);
    for (ii=0; ii<npoints; ii++)
    {
      id = point_id[ii];
      if (id <0 || id >= num_points)
      {
        delete [] point_id;
        return CUBIT_FAILURE;
      }
      myPointList.append(points[id]);
    }
    delete [] point_id;
  }

  bounding_box();

  return CUBIT_SUCCESS;
}

Definition at line 1893 of file CurveFacetEvalTool.cpp.

{
  NCubitFile::CIOWrapper cio(fp);
  typedef NCubitFile::UnsignedInt32 int32;

    // write out "interpOrder" 
  cio.Write(reinterpret_cast<int32*>(&interpOrder), 1);

   // write the associated facet eval tool id.  If there is none then write -1 
  int surf_tool_id = -1;
  if (surfFacetEvalTool != NULL)
    surf_tool_id = surfFacetEvalTool->get_output_id();
  cio.Write(reinterpret_cast<int32*>(&surf_tool_id), 1);

    // convert "curvSense" in an int
  int sense;
  if( curvSense == CUBIT_UNKNOWN )
    sense = -1;
  else 
    sense = (curvSense == CUBIT_REVERSED) ? 1 : 0; 

    // write "curveSense" and "goodCurveData"
  cio.Write(reinterpret_cast<int32*>(&sense), 1);
  int32 is_good = goodCurveData ? 1 : 0;
  cio.Write(&is_good, 1);
 
    // write "facetLength"
  cio.Write( &facetLength, 1 );

    // write ids of facet edges in "myEdgeList"
  int ii;
  CubitFacetEdge *edge_ptr;
  int nedges = myEdgeList.size();
  int32* edge_id = new int32 [nedges];
  myEdgeList.reset();
  for (ii=0; ii<nedges; ii++)
  {
    edge_ptr = myEdgeList.get_and_step();
    edge_id[ii] = edge_ptr->id();
  }
  cio.Write(reinterpret_cast<int32*>(&nedges), 1);
  if (nedges > 0)
  {
    cio.Write(edge_id, nedges);
  }
  delete [] edge_id;

    // write ids of points in "myPointList" 
  CubitPoint *point_ptr;
  int npoints = myPointList.size();
  int32* point_id = new int32 [npoints];
  myPointList.reset();
  for (ii=0; ii<npoints; ii++)
  {
    point_ptr = myPointList.get_and_step();
    point_id[ii] = point_ptr->id();
  }
  cio.Write(reinterpret_cast<int32*>(&npoints), 1);
  if (npoints > 0)
  {
    cio.Write(point_id, npoints);
  }
  delete [] point_id;

  return CUBIT_SUCCESS;
}

Definition at line 187 of file CurveFacetEvalTool.hpp.

{ return curvSense; };
void CurveFacetEvalTool::set_facet_eval_tool ( FacetEvalTool surf_eval_tool_ptr) [inline]

Definition at line 198 of file CurveFacetEvalTool.hpp.

   { surfFacetEvalTool = surf_eval_tool_ptr;} 

Definition at line 1870 of file CurveFacetEvalTool.cpp.

{
  int ii;
  CubitFacetEdge *cf_edge;

  facetLength = 0.0e0;

  for (ii=0; ii<myEdgeList.size(); ii++)
  {
    cf_edge = myEdgeList.get_and_step();
    facetLength += cf_edge->length();
  }

}
void CurveFacetEvalTool::set_output_id ( int  id) [inline]

Definition at line 153 of file CurveFacetEvalTool.hpp.

{ output_id = id; }
double CurveFacetEvalTool::u_from_arc_length ( double  root_param,
double  arc_length 
)

Definition at line 770 of file CurveFacetEvalTool.cpp.

{
  if( facetLength == 0 )
    return 0;

  double u = root_param + arc_length / facetLength;

  return u;

}
double CurveFacetEvalTool::u_on_facet_edge ( CubitFacetEdge edge_at_pt,
CubitVector  pt 
) [private]

Definition at line 1741 of file CurveFacetEvalTool.cpp.

{
  int ii;
  double cum_len = 0.0;
  CubitBoolean done = CUBIT_FALSE;
  myEdgeList.reset();
  for (ii=0; ii<myEdgeList.size() && !done; ii++) {
    CubitFacetEdge *edge = myEdgeList.get_and_step();
    if (edge != edge_at_pt)
    {
      cum_len += edge->length();
    }
    else
    {
      CubitVector pt0;
      if (curvSense == CUBIT_REVERSED)
      {
        pt0 = edge->point( 1 )->coordinates();
      }
      else
      {
        pt0 = edge->point( 0 )->coordinates();
      }
      cum_len += pt.distance_between( pt0 );
      done  = CUBIT_TRUE;
    }
  }
  if (!done)
  {
    PRINT_DEBUG_122( "Error in CurveFacetEvalTool::u_on_facet_edge" );
  }
  double u = cum_len / facetLength;
  return u;
}

Member Data Documentation

Definition at line 38 of file CurveFacetEvalTool.hpp.

Definition at line 37 of file CurveFacetEvalTool.hpp.

Definition at line 30 of file CurveFacetEvalTool.hpp.

Definition at line 35 of file CurveFacetEvalTool.hpp.

Definition at line 40 of file CurveFacetEvalTool.hpp.

Definition at line 29 of file CurveFacetEvalTool.hpp.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines