cgma
FaceterFacetData Class Reference

#include <FaceterFacetData.hpp>

Inheritance diagram for FaceterFacetData:
CubitFacet FacetEntity ToolDataUser

List of all members.

Public Member Functions

 FaceterFacetData (CubitPoint *p1, CubitPoint *p2, CubitPoint *p3)
 ~FaceterFacetData ()
virtual int id ()
virtual void set_id (int ii)
void owner (RefEntity *owner)
RefEntityowner ()
 SetDynamicMemoryAllocation (memoryManager) CubitStatus closest_point(const CubitVector &point
CubitPointpoint (int index)
void set_point (CubitPoint *the_point, int index)
CubitFacetEdgeedge (int index)
void edge (CubitFacetEdge *the_edge, int index)
void edge_use (int direction, int index)
int edge_use (int index)
CubitPointsplit_edge (CubitPoint *edge_pt1, CubitPoint *edge_pt2, const CubitVector &position)
CubitPointinsert_point (const CubitVector &position, CubitFacet *&new_tri1, CubitFacet *&new_tri2)
void flip ()

Public Attributes

CubitVectorclosest_point

Private Attributes

CubitPointpointArray [3]
CubitFacetEdgeedgeArray [3]
int edgeUse [3]
int entityId
RefEntitymyOwner

Static Private Attributes

static MemoryManager memoryManager

Detailed Description

Definition at line 17 of file FaceterFacetData.hpp.


Constructor & Destructor Documentation

Definition at line 30 of file FaceterFacetData.cpp.

{
  assert( p1 && p2 && p3 );
  assert( p1 != p2 && p1 != p3 && p2 != p3 );
  myOwner = NULL;
  pointArray[0] = p1;
  pointArray[1] = p2;
  pointArray[2] = p3;
  p1->add_facet(this);
  p2->add_facet(this);
  p3->add_facet(this);

  edgeArray[0] = NULL;
  edgeArray[1] = NULL;
  edgeArray[2] = NULL;
  edgeUse[0] = edgeUse[1] = edgeUse[2] = 0;
  patchCtrlPts = NULL;

  //CubitVector temp = normal();
  //cachedNormal = new CubitVector(temp);
  plane();
  counter_id++;
  entityId = counter_id;

  // define the bounding box

  CubitVector bbox_min, bbox_max;
  bbox_min.x(min3(p1->x(),p2->x(),p3->x()));
  bbox_min.y(min3(p1->y(),p2->y(),p3->y()));
  bbox_min.z(min3(p1->z(),p2->z(),p3->z()));
  bbox_max.x(max3(p1->x(),p2->x(),p3->x()));
  bbox_max.y(max3(p1->y(),p2->y(),p3->y()));
  bbox_max.z(max3(p1->z(),p2->z(),p3->z()));
  bBox.reset(bbox_min,bbox_max);

}

Definition at line 74 of file FaceterFacetData.cpp.

{
}

Member Function Documentation

CubitFacetEdge * FaceterFacetData::edge ( int  index) [inline, virtual]

Implements CubitFacet.

Definition at line 123 of file FaceterFacetData.hpp.

{
  assert( (index >= 0) && (index < 3) );
  if (!is_backwards())
    return edgeArray[index];
  else
  {
    switch(index)
    {
    case 0: return edgeArray[0];
    case 1: return edgeArray[2];
    case 2: return edgeArray[1];
    }
  }
  return NULL;
}
void FaceterFacetData::edge ( CubitFacetEdge the_edge,
int  index 
) [inline, virtual]

Implements CubitFacet.

Definition at line 58 of file FaceterFacetData.hpp.

    { edgeArray[index] = the_edge; };
void FaceterFacetData::edge_use ( int  direction,
int  index 
) [inline, virtual]

Implements CubitFacet.

Definition at line 62 of file FaceterFacetData.hpp.

{ edgeUse[index] = direction; };
int FaceterFacetData::edge_use ( int  index) [inline, virtual]

Implements CubitFacet.

Definition at line 140 of file FaceterFacetData.hpp.

{ 
  assert( (index >= 0) && (index < 3) );
  if (!is_backwards())
    return edgeUse[index]; 
  else
  {
    switch(index)
    {
    case 0: return -edgeUse[0];
    case 1: return -edgeUse[2];
    case 2: return -edgeUse[1];
    }
  }
  return 0;
}
void FaceterFacetData::flip ( ) [virtual]

Implements CubitFacet.

Definition at line 239 of file FaceterFacetData.cpp.

{
  CubitPoint *pt_tmp = pointArray[1];
  pointArray[1] = pointArray[2];
  pointArray[2] = pt_tmp;

  CubitFacetEdge *ed_tmp = edgeArray[1];
  edgeArray[1] = edgeArray[2];
  edgeArray[2] = ed_tmp;

  for (int ii=0; ii<3; ii++)
  {
    if (edgeUse[ii] == -1)
      edgeUse[ii] = 1;
    else if(edgeUse[ii] == 1)
      edgeUse[ii] = -1;
  }
  if (cachedPlane)
  {
    CubitVector normal = cachedPlane->normal();
    normal = -normal;
    cachedPlane->normal( normal );
  }
}
virtual int FaceterFacetData::id ( void  ) [inline, virtual]

Implements CubitFacet.

Definition at line 33 of file FaceterFacetData.hpp.

{return entityId;}
CubitPoint * FaceterFacetData::insert_point ( const CubitVector position,
CubitFacet *&  new_tri1,
CubitFacet *&  new_tri2 
) [virtual]

Reimplemented from CubitFacet.

Definition at line 174 of file FaceterFacetData.cpp.

{
  if( DEBUG_FLAG(110 ) ) 
  {
    GfxDebug::draw_facet(this, CUBIT_WHITE_INDEX);
    GfxDebug::flush();
  }
  CubitPoint* new_point = (CubitPoint *) new CubitPointData( position );
  
  new_tri1 = (CubitFacet *)
    new FaceterFacetData( pointArray[1], pointArray[2], new_point );
  new_tri2 = (CubitFacet *)
    new FaceterFacetData( pointArray[2], pointArray[0], new_point );
  
  pointArray[2]->remove_facet( this );
  pointArray[2] = new_point;
  new_point->add_facet( this );

  if( DEBUG_FLAG(110) )
  {
    CubitVector temp_vector = new_point->coordinates();
    GfxDebug::draw_facet(this, CUBIT_MAGENTA_INDEX);
    GfxDebug::flush();
    GfxDebug::draw_facet(new_tri1, CUBIT_MAGENTA_INDEX);
    GfxDebug::flush();
    GfxDebug::draw_facet(new_tri2, CUBIT_MAGENTA_INDEX);
    GfxDebug::flush();
    GfxDebug::draw_point(temp_vector, CUBIT_CYAN_INDEX);
    GfxDebug::flush();
  }
  
  if( cachedPlane && 
      (cachedPlane->distance(position) > CUBIT_RESABS) )
  {
    delete cachedPlane;
    cachedPlane = 0;
  }
  
  if (isBackwards)
  {
    new_tri1->is_backwards( 1 );
    new_tri2->is_backwards( 1 );
  }
  return new_point;
}
void FaceterFacetData::owner ( RefEntity owner) [inline]

Definition at line 36 of file FaceterFacetData.hpp.

    {myOwner = owner;}

Definition at line 38 of file FaceterFacetData.hpp.

    {return myOwner;}
CubitPoint * FaceterFacetData::point ( int  index) [inline, virtual]

Implements CubitFacet.

Definition at line 106 of file FaceterFacetData.hpp.

{
  assert( (index >= 0) && (index < 3) );
  if (!is_backwards())
    return pointArray[index];
  else
  {
    switch(index)
    {
    case 0: return pointArray[0];
    case 1: return pointArray[2];
    case 2: return pointArray[1];
    }
  }
  return NULL;
}
virtual void FaceterFacetData::set_id ( int  ii) [inline, virtual]

Implements CubitFacet.

Definition at line 34 of file FaceterFacetData.hpp.

{entityId = ii;}
void FaceterFacetData::set_point ( CubitPoint the_point,
int  index 
) [inline]

Definition at line 54 of file FaceterFacetData.hpp.

{ pointArray[index] = the_point; } 
CubitPoint * FaceterFacetData::split_edge ( CubitPoint edge_pt1,
CubitPoint edge_pt2,
const CubitVector position 
) [virtual]

Reimplemented from CubitFacet.

Definition at line 122 of file FaceterFacetData.cpp.

{
  CubitPointData* new_pt = new CubitPointData(position);
  
    // split triangles
  
  DLIList<CubitFacet*> facets;
  edge1_pt->shared_facets( edge2_pt, facets );
  
  facets.reset();
  for ( int i = facets.size(); i--; ) {

    CubitFacet* facet = facets.get_and_step();
    FaceterFacetData* facet_d = dynamic_cast<FaceterFacetData*>(facet);
    assert(!!facet_d);
   
 
      // fix up existing facet
    
    int pt2_index = facet->point_index( edge2_pt );
    bool edge_reversed = ( edge1_pt == facet->point( (pt2_index+1) % 3 ) );
    int edge_index = (pt2_index + 2 - edge_reversed) % 3;
    
    facet->update_plane();
    edge2_pt->remove_facet( facet );
    facet_d->set_point( new_pt, pt2_index );
    new_pt->add_facet( facet );
    

      // make new facet
      
    CubitPoint* other_pt = facet->point( edge_index );
    if ( edge_reversed )
      new FaceterFacetData( other_pt, edge2_pt, new_pt );
    else
      new FaceterFacetData( other_pt, new_pt, edge2_pt );
  }
       
  return new_pt; 
}

Member Data Documentation

Definition at line 21 of file FaceterFacetData.hpp.

int FaceterFacetData::edgeUse[3] [private]

Definition at line 22 of file FaceterFacetData.hpp.

Definition at line 25 of file FaceterFacetData.hpp.

Definition at line 23 of file FaceterFacetData.hpp.

Definition at line 26 of file FaceterFacetData.hpp.

Definition at line 20 of file FaceterFacetData.hpp.


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