cgma
VGLoopTool< SURFACE, LOOP, COEDGE, CURVE, POINT > Class Template Reference

#include <VGLoopTool.hpp>

List of all members.

Static Public Member Functions

static double loop_angle_metric (COEDGE *first_coedge)
static void get_loop_polyline (COEDGE *first_coedge, std::vector< CubitVector > &result_set)

Static Private Member Functions

static CubitStatus get_loop_polygon (COEDGE *first_coedge, DLIList< CubitVector * > &polygon_points)

Detailed Description

template<class SURFACE, class LOOP, class COEDGE, class CURVE, class POINT>
class VGLoopTool< SURFACE, LOOP, COEDGE, CURVE, POINT >

Definition at line 25 of file VGLoopTool.hpp.


Member Function Documentation

template<class SURFACE , class LOOP , class COEDGE , class CURVE , class POINT >
CubitStatus VGLoopTool< SURFACE, LOOP, COEDGE, CURVE, POINT >::get_loop_polygon ( COEDGE *  first_coedge,
DLIList< CubitVector * > &  polygon_points 
) [static, private]

Definition at line 594 of file VGLoopTool.cpp.

{
  if( !first_coedge )
    return CUBIT_FAILURE;
  
  DLIList<CubitVector*> interior;
  CubitSense sense;
  polygon.clean_out();

  COEDGE* coedge = first_coedge;
  do
  {
      polygon.append( new CubitVector( coedge->start_point()->coordinates() ) );

      interior.clean_out();
      if( !coedge->get_curve()->get_interior_extrema( interior, sense ) )
      {
        while( polygon.size() ) delete polygon.pop();
        return CUBIT_FAILURE;
      }

      if( sense != coedge->sense() )
        interior.reverse();
      polygon += interior;
       
    coedge = coedge->next();
  } while( coedge != first_coedge );
  
  return CUBIT_SUCCESS;
}
template<class SURFACE , class LOOP , class COEDGE , class CURVE , class POINT >
void VGLoopTool< SURFACE, LOOP, COEDGE, CURVE, POINT >::get_loop_polyline ( COEDGE *  first_coedge,
std::vector< CubitVector > &  result_set 
) [static]

Definition at line 676 of file VGLoopTool.cpp.

{
  COEDGE* coedge = first_coedge;
  GMem gmem;
  list.resize(0);
  
  do {
    coedge->get_curve()->get_geometry_query_engine()->
      get_graphics( coedge->get_curve(), &gmem );
    int num_pts = gmem.pointListCount;
    if ( num_pts > 1 ) {
    
      int start = list.size();
      list.resize( start + num_pts - 1 );
      std::vector<CubitVector>::iterator itor = list.begin() + start;
      if ( coedge->sense() == CUBIT_FORWARD ) {
        GPoint* pitor = gmem.point_list();
        GPoint* pend = pitor + num_pts - 1;
        for ( ; pitor != pend; ++pitor ) {
          itor->set( pitor->x, pitor->y, pitor->z );
          ++itor;
        }
      } else {
        GPoint* pend = gmem.point_list();
        GPoint* pitor = pend + num_pts - 1;
        for ( ; pitor != pend; --pitor ) {
          itor->set( pitor->x, pitor->y, pitor->z );
          ++itor;
        }
      }
   }
    
    coedge = coedge->next();
  } while ( coedge != first_coedge );
}
template<class SURFACE , class LOOP , class COEDGE , class CURVE , class POINT >
double VGLoopTool< SURFACE, LOOP, COEDGE, CURVE, POINT >::loop_angle_metric ( COEDGE *  first_coedge) [static]

Definition at line 637 of file VGLoopTool.cpp.

{
  if( !first_coedge )
    return 0.0;
    
  assert( first_coedge 
       && first_coedge->get_loop()
       && first_coedge->get_loop()->get_surface() );
  
  DLIList<CubitVector*> polygon;
  get_loop_polygon( first_coedge, polygon );
  
  double result = 0.0;
  CubitVector *point[3], segment[2], normal;
  point[0] = polygon.step_and_get();
  point[1] = polygon.step_and_get();
  segment[0] = *point[1] - *point[0];
  for( int i = polygon.size(); i--; )
  {
    point[2] = polygon.step_and_get();
    segment[1] = *point[1] - *point[2];
    first_coedge->get_loop()->get_surface()->closest_point( *point[1], 0, &normal );
    result += normal.vector_angle( segment[1], segment[0] );
    
    point[1] = point[2];
    segment[0] = -segment[1];
  }
  
  result /= CUBIT_PI;
  result -= polygon.size();
  
  while( polygon.size() )
    delete polygon.pop();
  
  return result;
}

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