cgma
SubSurface Class Reference

#include <SubSurface.hpp>

Inheritance diagram for SubSurface:
PartitionSurface Surface PartitionEntity GeometryEntity TopologyBridge

List of all members.

Public Member Functions

 SubSurface (Surface *real_surf)
CubitStatus combine (PartitionSurface *dead_surface)
virtual ~SubSurface ()
Surfacepartitioned_surface () const
virtual CubitStatus save (CubitSimpleAttrib &)
double measure ()
GeometryType geometry_type ()
CubitStatus get_point_normal (CubitVector &point, CubitVector &normal)
virtual CubitStatus closest_point_uv_guess (CubitVector const &location, double &u, double &v, CubitVector *closest_location=NULL, CubitVector *unit_normal=NULL)
virtual CubitStatus evaluate (double u, double v, CubitVector *position, CubitVector *unit_normal, CubitVector *curvature1, CubitVector *curvature2)
CubitStatus closest_point (CubitVector const &pos, CubitVector *close=0, CubitVector *norm=0, CubitVector *curv1=0, CubitVector *curv2=0)
void closest_point_trimmed (CubitVector from, CubitVector &result)
CubitStatus closest_point_along_vector (CubitVector &from_point, CubitVector &along_vector, CubitVector &point_on_surface)
CubitStatus principal_curvatures (CubitVector const &loc, double &curv1, double &curv2, CubitVector *closest_location=0)
CubitVector position_from_u_v (double u, double v)
CubitStatus u_v_from_position (CubitVector const &location, double &u, double &v, CubitVector *closest_location=NULL)
CubitBoolean is_periodic ()
CubitBoolean is_periodic_in_U (double &period)
CubitBoolean is_periodic_in_V (double &period)
CubitBoolean is_singular_in_U (double u_param)
CubitBoolean is_singular_in_V (double v_param)
CubitBoolean is_closed_in_U ()
CubitBoolean is_closed_in_V ()
CubitStatus uv_derivitives (double u, double v, CubitVector &du, CubitVector &dv)
CubitBoolean is_parametric ()
CubitBoolean get_param_range_U (double &lo, double &hi)
CubitBoolean get_param_range_V (double &lo, double &hi)
CubitBoolean is_position_on (CubitVector &test_position)
CubitSense get_geometry_sense ()
CubitStatus get_sphere_params (CubitVector &center, double &radius) const
CubitStatus get_cone_params (CubitVector &center, CubitVector &normal, CubitVector &major_axis, double &radius_ratio, double &sine_angle, double &cos_angle) const
virtual CubitStatus get_torus_params (CubitVector &center, CubitVector &normal, double &major_radius, double &minor_radius) const
virtual CubitStatus get_nurb_params (bool &rational, int &degree_u, int &degree_v, int &num_cntrl_pts_u, int &num_cntrl_pts_v, DLIList< CubitVector > &cntrl_pts, DLIList< double > &weights, DLIList< double > &u_knots, DLIList< double > &v_knots) const
void reverse_sense ()

Protected Member Functions

virtual PartitionSurfacecopy ()

Private Member Functions

 SubSurface (SubSurface *split_from)

Detailed Description

Definition at line 18 of file SubSurface.hpp.


Constructor & Destructor Documentation

SubSurface::SubSurface ( Surface real_surf)

Definition at line 32 of file SubSurface.cpp.

{
  assert( dynamic_cast<SubEntitySet*>(real_surf->owner()) == 0 );
  new SubEntitySet( real_surf, this );

  // ensure that the sense is the same on both entities
  //if( real_surf->bridge_sense() != this->bridge_sense() )
  //  reverse_bridge_sense();

  geometry_sense = CUBIT_FORWARD;
}
SubSurface::~SubSurface ( ) [virtual]

Definition at line 64 of file SubSurface.cpp.

  { }
SubSurface::SubSurface ( SubSurface split_from) [private]

Definition at line 44 of file SubSurface.cpp.


Member Function Documentation

CubitStatus SubSurface::closest_point ( CubitVector const &  pos,
CubitVector close = 0,
CubitVector norm = 0,
CubitVector curv1 = 0,
CubitVector curv2 = 0 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 133 of file SubSurface.cpp.

{ 
  CubitStatus ret = partitioned_surface()->closest_point( a, b, c, d, e ); 

  if(c && geometry_sense == CUBIT_REVERSED)
    *c = -(*c);

  return ret;
}
CubitStatus SubSurface::closest_point_along_vector ( CubitVector from_point,
CubitVector along_vector,
CubitVector point_on_surface 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 174 of file SubSurface.cpp.

{
  return partitioned_surface()->closest_point_along_vector( from_point, along_vector, point_on_surface );
}
void SubSurface::closest_point_trimmed ( CubitVector  from,
CubitVector result 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 156 of file SubSurface.cpp.

{
  PartitionCurve* curve = 0;
  if ( point_containment( from, curve ) == CUBIT_PNT_INSIDE )
    partitioned_surface()->closest_point( from, &result );
  else
    curve->closest_point_trimmed( from, result );
}
CubitStatus SubSurface::closest_point_uv_guess ( CubitVector const &  location,
double &  u,
double &  v,
CubitVector closest_location = NULL,
CubitVector unit_normal = NULL 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 108 of file SubSurface.cpp.

{
  CubitStatus ret = partitioned_surface()->
    closest_point_uv_guess(location, u, v, closest_location, unit_normal);

  if(unit_normal && geometry_sense == CUBIT_REVERSED)
    *unit_normal = -(*unit_normal);

  return ret;
}
CubitStatus SubSurface::combine ( PartitionSurface dead_surface) [virtual]

Reimplemented from PartitionSurface.

Definition at line 396 of file SubSurface.cpp.

{
  SubSurface* dead = dynamic_cast<SubSurface*>(dead_surface );
  if( !dead )
  {
    assert(0);
    return CUBIT_FAILURE;
  }
  
  return PartitionSurface::combine(dead_surface);
}
PartitionSurface * SubSurface::copy ( ) [protected, virtual]

Reimplemented from PartitionSurface.

Definition at line 50 of file SubSurface.cpp.

{
  return new SubSurface(this);
}
CubitStatus SubSurface::evaluate ( double  u,
double  v,
CubitVector position,
CubitVector unit_normal,
CubitVector curvature1,
CubitVector curvature2 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 448 of file SubSurface.cpp.

{
  CubitStatus ret = partitioned_surface()->evaluate(u, v, position, unit_normal, curvature1, curvature2 ); 

  if(unit_normal && geometry_sense == CUBIT_REVERSED)
    *unit_normal = -(*unit_normal);

  return ret;
}

Reimplemented from PartitionSurface.

Definition at line 100 of file SubSurface.cpp.

CubitStatus SubSurface::get_cone_params ( CubitVector center,
CubitVector normal,
CubitVector major_axis,
double &  radius_ratio,
double &  sine_angle,
double &  cos_angle 
) const [virtual]

Reimplemented from PartitionSurface.

Definition at line 473 of file SubSurface.cpp.

{
  PRINT_ERROR("Currently, Cubit is unable to determine cone parameters for SubSurfaces.\n");
  return CUBIT_FAILURE;
}

Reimplemented from PartitionSurface.

Definition at line 408 of file SubSurface.cpp.

{
  /*
#ifdef ALPHA_TREADSWEEP
  return geometry_sense;
#else
  */
  return CUBIT_FORWARD;
  /*
#endif
  */
}
CubitStatus SubSurface::get_nurb_params ( bool &  rational,
int &  degree_u,
int &  degree_v,
int &  num_cntrl_pts_u,
int &  num_cntrl_pts_v,
DLIList< CubitVector > &  cntrl_pts,
DLIList< double > &  weights,
DLIList< double > &  u_knots,
DLIList< double > &  v_knots 
) const [virtual]

Reimplemented from PartitionSurface.

Definition at line 499 of file SubSurface.cpp.

{
  PRINT_ERROR("Currently, Cubit is unable to determine nurbs parameters for SubSurface.\n");
  return CUBIT_FAILURE;
}
CubitBoolean SubSurface::get_param_range_U ( double &  lo,
double &  hi 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 376 of file SubSurface.cpp.

  { return partitioned_surface()->get_param_range_U(lower,upper); }
CubitBoolean SubSurface::get_param_range_V ( double &  lo,
double &  hi 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 378 of file SubSurface.cpp.

  { return partitioned_surface()->get_param_range_V(lower,upper); }
CubitStatus SubSurface::get_point_normal ( CubitVector point,
CubitVector normal 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 104 of file SubSurface.cpp.

  { return partitioned_surface()->get_point_normal( origin, normal ); }
CubitStatus SubSurface::get_sphere_params ( CubitVector center,
double &  radius 
) const [virtual]

Reimplemented from PartitionSurface.

Definition at line 463 of file SubSurface.cpp.

{
  PRINT_ERROR("Currently, Cubit is unable to determine sphere parameters for a SubSurface.\n");
  return CUBIT_FAILURE;
}
CubitStatus SubSurface::get_torus_params ( CubitVector center,
CubitVector normal,
double &  major_radius,
double &  minor_radius 
) const [virtual]

Reimplemented from PartitionSurface.

Definition at line 487 of file SubSurface.cpp.

{
  PRINT_ERROR("Currently, Cubit is unable to determine torus parameters for SubSurface.\n");
  return CUBIT_FAILURE;
}

Reimplemented from PartitionSurface.

Definition at line 337 of file SubSurface.cpp.

  { return CUBIT_FALSE; }

Reimplemented from PartitionSurface.

Definition at line 339 of file SubSurface.cpp.

  { return CUBIT_FALSE; }

Reimplemented from PartitionSurface.

Definition at line 364 of file SubSurface.cpp.

Reimplemented from PartitionSurface.

Definition at line 232 of file SubSurface.cpp.

{ 
  double u_period = 0.0, v_period = 0.0;
  bool u_periodic = is_periodic_in_U(u_period);
  bool v_periodic = is_periodic_in_V(v_period);
  if( !u_periodic && !v_periodic )
    return CUBIT_FALSE;
    
  if ( !next_loop(0) ) // sphere
    return CUBIT_TRUE; 
    
  if( u_period < 0.0 )
    u_period = -u_period;
  if( v_period < 0.0 )
    v_period = -v_period; 
    
    // If a single step exceeds this delta of the parameter
    // range, assume the step crossed the "international date
    // line" of the parameterization.  Could probably safely
    // use a smaller value.
  double u_wrap = 0.75 * u_period;
  double v_wrap = 0.75 * v_period;
  
  int num_periodic_loops = 0;
  std::vector<CubitVector> loop_polyline;
  PartitionLoop* loop = 0;
  while( (loop = next_loop(loop) ) != NULL )
  {
      // Get a polyline representation of the loop
    VGLoopTool<PartitionSurface,PartitionLoop,PartitionCoEdge,PartitionCurve,PartitionPoint>
      ::get_loop_polyline( loop->first_coedge(), loop_polyline );
    
    if ( loop_polyline.size() < 2 )
      continue;
    
      // Sum steps (in parameter space) between points in polyline
    std::vector<CubitVector>::iterator itor = loop_polyline.begin(),
                                       end = loop_polyline.end();
    double u_sum = 0, v_sum = 0;
    double u_prev, v_prev;
    u_v_from_position( loop_polyline[loop_polyline.size()-1], u_prev, v_prev );
    for ( ; itor != end; ++itor )
    {
      double u, v;
      u_v_from_position( *itor, u, v );
      
      double u_step = u - u_prev;
      if ( u_step > u_wrap )
        u_step = u_period - u_step;
      else if ( u_step < -u_wrap )
        u_step = -u_period - u_step;
      
      double v_step = v - v_prev;
      if ( v_step > v_wrap )
        v_step = v_period - v_step;
      else if ( v_step < -v_wrap )
        v_step = -v_period - v_step;
        
      u_sum += u_step;
      v_sum += v_step;
      u_prev = u;
      v_prev = v;
    }

      // Sum should be either zero or +/-period if loop
      // is non-periodic or periodic respectively.
    if ( (u_periodic && fabs(u_sum) > 0.5*u_period) ||
         (v_periodic && fabs(v_sum) > 0.5*v_period) )
      num_periodic_loops++;
  }
  
  return CubitBoolean(num_periodic_loops > 0);
}
CubitBoolean SubSurface::is_periodic_in_U ( double &  period) [virtual]

Reimplemented from PartitionSurface.

Definition at line 309 of file SubSurface.cpp.

  { return partitioned_surface()->is_periodic_in_U(period); }
CubitBoolean SubSurface::is_periodic_in_V ( double &  period) [virtual]

Reimplemented from PartitionSurface.

Definition at line 311 of file SubSurface.cpp.

  { return partitioned_surface()->is_periodic_in_V(period); }
CubitBoolean SubSurface::is_position_on ( CubitVector test_position) [virtual]

Reimplemented from PartitionSurface.

Definition at line 391 of file SubSurface.cpp.

  { return partitioned_surface()->is_position_on( position ); }
CubitBoolean SubSurface::is_singular_in_U ( double  u_param) [virtual]

Reimplemented from PartitionSurface.

Definition at line 323 of file SubSurface.cpp.

  {  return partitioned_surface()->is_singular_in_U(u_param); }
CubitBoolean SubSurface::is_singular_in_V ( double  v_param) [virtual]

Reimplemented from PartitionSurface.

Definition at line 325 of file SubSurface.cpp.

  {  return partitioned_surface()->is_singular_in_V(v_param); }
double SubSurface::measure ( ) [virtual]

Reimplemented from PartitionSurface.

Definition at line 91 of file SubSurface.cpp.

{
  if( ! sub_entity_set().has_multiple_sub_entities() )
    return partitioned_surface()->measure();
  else
    return PartitionSurface::measure();
}

Definition at line 181 of file SubSurface.hpp.

  { return dynamic_cast<Surface*>(partitioned_entity()); }
CubitVector SubSurface::position_from_u_v ( double  u,
double  v 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 206 of file SubSurface.cpp.

  { return partitioned_surface()->position_from_u_v( u, v ); }
CubitStatus SubSurface::principal_curvatures ( CubitVector const &  loc,
double &  curv1,
double &  curv2,
CubitVector closest_location = 0 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 191 of file SubSurface.cpp.

  { return partitioned_surface()->principal_curvatures(a,b,c,d); }
void SubSurface::reverse_sense ( ) [virtual]

Reimplemented from PartitionSurface.

Definition at line 421 of file SubSurface.cpp.

{
  reverse_loops();
  if( owner() )
    owner()->notify_reversed(this);

  if(geometry_sense == CUBIT_FORWARD)
    geometry_sense = CUBIT_REVERSED;
  else
    geometry_sense = CUBIT_FORWARD;

  int j;
  DLIList<CubitFacetData*> surf_facets;
  this->get_facet_data( surf_facets );
  for(j=surf_facets.size(); j--;)
    surf_facets.get_and_step()->flip();
}

Reimplemented from PartitionSurface.

Definition at line 439 of file SubSurface.cpp.

{
  DLIList<int> curves;
  get_save_topology(curves);
  int id = sub_entity_set().get_id(this);
  return sub_entity_set().save_geometry( id, 2, 0, 0, &curves, 0, attrib );
}
CubitStatus SubSurface::u_v_from_position ( CubitVector const &  location,
double &  u,
double &  v,
CubitVector closest_location = NULL 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 218 of file SubSurface.cpp.

  { return partitioned_surface()->u_v_from_position(location,u,v,closest); }
CubitStatus SubSurface::uv_derivitives ( double  u,
double  v,
CubitVector du,
CubitVector dv 
) [virtual]

Reimplemented from PartitionSurface.

Definition at line 351 of file SubSurface.cpp.

  { return partitioned_surface()->uv_derivitives(u,v,du,dv); }

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