cgma
CAActuateSet Class Reference

#include <CAActuateSet.hpp>

Inheritance diagram for CAActuateSet:
CubitObserver

List of all members.

Public Member Functions

 CAActuateSet (DLIList< RefEntity * > &actuate_list)
 ~CAActuateSet ()
void set_current_dimension (int dimension)
RefEntityremove_next ()
virtual void notify_observer (const CubitEvent *observer_event)

Private Member Functions

void append_to_current (DLIList< RefEntity * > &query_results)

Static Private Member Functions

static DagType get_type_id (int dimension)

Private Attributes

DLIList< RefEntity * > typeList [5]
DLIList< RefEntity * > currentList
int currentDimension

Detailed Description

Definition at line 26 of file CAActuateSet.hpp.


Constructor & Destructor Documentation

CAActuateSet::CAActuateSet ( DLIList< RefEntity * > &  actuate_list)

Definition at line 39 of file CAActuateSet.cpp.

  : currentDimension(-1)
{
    // register this as a static observer so that we can
    // remove entities from the lists as they are destroyed
  AppUtil::instance()->event_dispatcher().add_observer(this);
  
    // put all entities in the actuate_list into the typeList
    // for the appropriate dimension of entity.
  for( int i = actuate_list.size(); i--; )
  {
    RefEntity* entity_ptr = actuate_list.get_and_step();
    int dimension = entity_ptr->dimension();
    if( dimension < 0 ) // body
      dimension = 4;
    typeList[dimension].append( entity_ptr );
  }
}

Definition at line 67 of file CAActuateSet.cpp.

{
    // remove from static observer list

  AppUtil::instance()->event_dispatcher().remove_observer(this);
}

Member Function Documentation

void CAActuateSet::append_to_current ( DLIList< RefEntity * > &  query_results) [private]

Definition at line 130 of file CAActuateSet.cpp.

{
  int i;
  
    // Set marks on all new entities
  for( i = list.size(); i--; )
    list.get_and_step()->marked(1);
  
    // Clear marks on entities in current list, 
    // including those also in the new list.
  for( i = currentList.size(); i--; )
    currentList.get_and_step()->marked(0);
  
    // Any entities in the new list that are still
    // marked are not already in the current list.
    // Add them.
  for( i = list.size(); i--; )
  {
    RefEntity* entity_ptr = list.get_and_step();
    if( entity_ptr->marked() )
    {
      currentList.append( entity_ptr );
      entity_ptr->marked(0);
    }
  }
}
DagType CAActuateSet::get_type_id ( int  dimension) [static, private]

Definition at line 203 of file CAActuateSet.cpp.

{
  switch( dimension )
  {
    case 4:  return DagType::body_type();     
    case 3:  return DagType::ref_volume_type();
    case 2:  return DagType::ref_face_type();  
    case 1:  return DagType::ref_edge_type();  
    case 0:  return DagType::ref_vertex_type();
    default: assert(0); 
             return DagType::invalid_type();
  }
}
void CAActuateSet::notify_observer ( const CubitEvent observer_event) [virtual]

Implements CubitObserver.

Definition at line 166 of file CAActuateSet.cpp.

{
  RefEntity* entity_ptr;
  int dimension;

  const GeometryEvent* geom_event = dynamic_cast<const GeometryEvent*>(observer_event);
  
    // only care about entities that are destroyed
  if(!geom_event || geom_event->get_type() != GeometryEvent::TOPOLOGY_ENTITY_DESTRUCTED)
    return;


    // is it a body?
  if( (entity_ptr = dynamic_cast<Body*>(geom_event->get_entity()) ) != NULL )
    dimension = 4;

    // is it some other topology entity
  else if( (entity_ptr = dynamic_cast<BasicTopologyEntity*>(geom_event->get_entity()) )
           != NULL )
    dimension = entity_ptr->dimension();

    // otherwise we don't care about it
  else
    return;
  

    // if it exists in the type list, remove it
  if( typeList[dimension].move_to( entity_ptr ) )
    typeList[dimension].extract();
  
    // if it exists in the current list, remove it.
  if( dimension == currentDimension && 
      currentList.move_to( entity_ptr ) )
    currentList.extract();
    
}

Definition at line 84 of file CAActuateSet.hpp.

{
  return currentList.size() ? currentList.pop() : 0;
}
void CAActuateSet::set_current_dimension ( int  dimension)

Definition at line 86 of file CAActuateSet.cpp.

{
  int i;
  DLIList<TopologyEntity*> query_source, query_target;
  DLIList<RefEntity*> temp_list;
  
    // Clean out current list before adding new entities
  currentList.clean_out();
  
    // Get the target type to query for.
  DagType type = get_type_id( dimension );

    // Get children of higher-order entities
  for( i = 4; i > dimension; i-- )
  {
    query_source.clean_out();
    query_target.clean_out();
    
    CAST_LIST( typeList[i], query_source, TopologyEntity );
    ModelQueryEngine::instance()
      ->query_model( query_source, type, query_target );
    
    temp_list.clean_out();
    CAST_LIST( query_target, temp_list, RefEntity );
    
    append_to_current( temp_list );
  }
  
    // Add lcoal entities of current dimension
  append_to_current( typeList[dimension] );

    // Save current dimension
  currentDimension = dimension;
}

Member Data Documentation

Definition at line 71 of file CAActuateSet.hpp.

Definition at line 65 of file CAActuateSet.hpp.

Definition at line 61 of file CAActuateSet.hpp.


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