TAPs 0.7.7.3
TAPsListOfAvailableModelsForSurgery.hpp File Reference
Include dependency graph for TAPsListOfAvailableModelsForSurgery.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

template<typename T >
BEGIN_NAMESPACE_TAPs
std::vector< ModelForSurgery
< T > * > 
SetupModelsForSurgery (std::string setupFile)
 List of available models for surgery.
template<typename T >
ModelForSurgery< T > * ProcessSetupModelForSurgery (std::ifstream &ifs, bool bModelInclusionList[256], std::string path)
 Process setting up models for surgery.

Function Documentation

template<typename T >
ModelForSurgery<T>* ProcessSetupModelForSurgery ( std::ifstream &  ifs,
bool  bModelInclusionList[256],
std::string  path 
)

Process setting up models for surgery.

< predefined time step in sec

< number of simulation sub-steps

Definition at line 247 of file TAPsListOfAvailableModelsForSurgery.cpp.

References TransformationSupport< T >::ApplyRotationAxisAndAngle(), TransformationSupport< T >::ApplyScale(), TransformationSupport< T >::ApplyTranslation(), ModelForSurgery< T >::ClearOperationFlag(), ModelForSurgery< T >::GetTransform(), ModelForSurgery< T >::SetName(), and ModelForSurgery< T >::SetOperationFlag().

{
    //---------------------------------------------------------------
    // For Handling Transformations
    enum ModelForSurgery<T>::ModelType  model_type;
    std::string                     name( "" );
    std::string                     data_location( "" );
    bool                            bSimOn          = true;
    bool                            bColDetOn       = true;
    bool                            bRenderOn       = true;
    bool                            bTransformOn    = false;
    std::vector< std::string >      vTransformName;
    std::vector< T >                vTransformValue;
    T   tPointMass  = 1.0;
    T   tKstiffness = 500.0;
    T   tKdamper    = 100.0;
    T   tHomeKstiffness = 2500.0;
    T   tHomeKdamper    = 250.0;
    int iRigidity   = 1;

    T predefinedTimeStep = 0.01;    
    int numSimSubSteps   = 10;      

    // Read the setup file
    const std::string delims( " ,\t" );
    std::string::size_type begIdx, endIdx;
    std::string strName, strValue;
    char line[256];

    // The first line
    ifs.getline( line, 256 );
    while ( line[0] != '}' ) {
        std::string parameter( line );

        // Search beginning of the first word
        begIdx = parameter.find_first_not_of( delims );
        // While beginning of a word found
        while ( begIdx != std::string::npos ) {
            // Search end of the actual word
            endIdx = parameter.find_first_of( delims, begIdx );
            if ( endIdx == std::string::npos ) {
                // End of word is end of line
                endIdx = parameter.length();
            }

            // Treat # as comment
            if ( !(parameter[begIdx] == '#') ) {
                strName = parameter.substr( begIdx, endIdx-begIdx );

                //std::cout << strName << "\n";
                
                // Process Model Type -- ORGAN
                if ( strName.compare( "*ORGAN_TYPE" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        if      ( parameter.substr( begIdx, endIdx-begIdx ).compare( "HEART" ) == 0 )           model_type = ModelForSurgery<T>::HEART;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "LEFT_KIDNEY" ) == 0 )     model_type = ModelForSurgery<T>::LEFT_KIDNEY;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "RIGHT_KIDNEY" ) == 0 )    model_type = ModelForSurgery<T>::RIGHT_KIDNEY;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "LIVER" ) == 0 )           model_type = ModelForSurgery<T>::LIVER;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "LEFT_LUNG" ) == 0 )       model_type = ModelForSurgery<T>::LEFT_LUNG;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "RIGHT_LUNG" ) == 0 )      model_type = ModelForSurgery<T>::RIGHT_LUNG;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "STOMACH" ) == 0 )         model_type = ModelForSurgery<T>::STOMACH;
                        else {
                            std::cout << "ERROR: *ORGAN_TYPE is not supported! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                        if ( bModelInclusionList[ model_type ] == false ) {
                            std::cout << "*ORGAN_TYPE is not included! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                    }
                    else {
                        std::cout << "ERROR: *ORGAN_TYPE is not specified! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                    //std::cout << parameter.substr( begIdx, endIdx-begIdx ) << " -- " << model_type << "\n";
                }

                // Process Model Type -- TISSUE
                else if ( strName.compare( "*TISSUE_TYPE" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        if      ( parameter.substr( begIdx, endIdx-begIdx ).compare( "TISSUE_BOX_01" ) == 0 )       model_type = ModelForSurgery<T>::TISSUE_BOX_01;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "TISSUE_TWO_TUBES_01" ) == 0 ) model_type = ModelForSurgery<T>::TISSUE_TWO_TUBES_01;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "TISSUE_HIATUS_HERNIA_01" ) == 0 ) model_type = ModelForSurgery<T>::TISSUE_HIATUS_HERNIA_01;
                        // ADD A MODEL HERE
                        //else if   ( parameter.substr( begIdx, endIdx-begIdx ).compare( "MODEL_CALL_NAME" ) == 0 ) model_type = ModelForSurgery<T>::MODEL_CALL_NAME;
                        else {
                            std::cout << "ERROR: *TISSUE_TYPE is not supported! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                        if ( bModelInclusionList[ model_type ] == false ) {
                            std::cout << "*TISSUE_TYPE is not included! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                    }
                    else {
                        std::cout << "ERROR: *TISSUE_TYPE is not specified! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                    //std::cout << parameter.substr( begIdx, endIdx-begIdx ) << " -- " << model_type << "\n";
                }

                // Process Model Type -- RIGID
                else if ( strName.compare( "*RIGID_TYPE" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        if  ( parameter.substr( begIdx, endIdx-begIdx ).compare( "RIGID_TORUS_01" ) == 0 )  model_type = ModelForSurgery<T>::RIGID_TORUS_01;
                        // ADD A MODEL HERE
                        //else if   ( parameter.substr( begIdx, endIdx-begIdx ).compare( "MODEL_CALL_NAME" ) == 0 ) model_type = ModelForSurgery<T>::MODEL_CALL_NAME;
                        else {
                            std::cout << "ERROR: *RIGID_TYPE is not supported! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                        if ( bModelInclusionList[ model_type ] == false ) {
                            std::cout << "*RIGID_TYPE is not included! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                    }
                    else {
                        std::cout << "ERROR: *RIGID_TYPE is not specified! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                    //std::cout << parameter.substr( begIdx, endIdx-begIdx ) << " -- " << model_type << "\n";
                }

                // Process Model Name
                else if ( strName.compare( "*NAME" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    //endIdx = parameter.find_first_of( delims, begIdx );
                    endIdx = parameter.size();
                    if ( begIdx != std::string::npos ) {
                        name = parameter.substr( begIdx, endIdx-begIdx );
                        if ( name.compare( "\"\"" ) == 0 )  name = "";
                    }
                    else {
                        std::cout << "ERROR: *NAME is not specified! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                    //std::cout << "Name: " << " -- " << name << "\n";
                }

                // Process Model Data Location
                else if ( strName.compare( "*DATA_LOCATION" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        data_location = parameter.substr( begIdx, endIdx-begIdx );
                        if ( data_location.compare( "\"\"" ) == 0 ) data_location = "";
                    }
                    else {
                        std::cout << "ERROR: *DATA_LOCATION is not specified! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                    //std::cout << "Data Location: " << " -- " << data_location << "\n";
                }

                // Process Model Simulation ON/OFF
                else if ( strName.compare( "*SIMULATION" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        if      ( parameter.substr( begIdx, endIdx-begIdx ).compare( "ON" ) == 0 )  bSimOn = true;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "OFF" ) == 0 ) bSimOn = false;
                        else {
                            std::cout << "ERROR: *SIMULATION has to be set to either ON or OFF! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                    }
                    else {
                        std::cout << "ERROR: *SIMULATION has to be set to either ON or OFF! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }

                // Process Model Collision Detection ON/OFF
                else if ( strName.compare( "*COLLISION" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        if      ( parameter.substr( begIdx, endIdx-begIdx ).compare( "ON" ) == 0 )  bColDetOn = true;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "OFF" ) == 0 ) bColDetOn = false;
                        else {
                            std::cout << "ERROR: *COLLISION has to be set to either ON or OFF! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                    }
                    else {
                        std::cout << "ERROR: *COLLISION has to be set to either ON or OFF! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }

                // Process Model Render ON/OFF
                else if ( strName.compare( "*RENDER" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        if      ( parameter.substr( begIdx, endIdx-begIdx ).compare( "ON" ) == 0 )  bRenderOn = true;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "OFF" ) == 0 ) bRenderOn = false;
                        else {
                            std::cout << "ERROR: *RENDER has to be set to either ON or OFF! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                    }
                    else {
                        std::cout << "ERROR: *RENDER has to be set to either ON or OFF! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }

                // Process Model Transformation ON/OFF
                else if ( strName.compare( "*TRANSFORMATION" ) == 0 ) {
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        if      ( parameter.substr( begIdx, endIdx-begIdx ).compare( "ON" ) == 0 )  bTransformOn = true;
                        else if ( parameter.substr( begIdx, endIdx-begIdx ).compare( "OFF" ) == 0 ) bTransformOn = false;
                        else {
                            std::cout << "ERROR: *TRANSFORMATION has to be set to either ON or OFF! -- " << parameter << "\n";
                            while ( line[0] != '}' )    ifs.getline( line, 256 );
                            return NULL;
                        }
                    }
                    else {
                        std::cout << "ERROR: *TRANSFORMATION has to be set to either ON or OFF! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }

                // Process Model Translation
                else if ( strName.compare( "*TRANSLATION" ) == 0 ) {
                    vTransformName.push_back( "TRANSLATION" );
                    bool isOK = true;
                    // x
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // y
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // z
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // error
                    if ( !isOK ) {
                        std::cout << "ERROR: *TRANSLATION does not contain three values for xyz! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }

                // Process Model Rotation
                else if ( strName.compare( "*ROTATION_AXIS_AND_ANGLE" ) == 0 ) {
                    vTransformName.push_back( "ROTATION_AXIS_AND_ANGLE" );
                    bool isOK = true;
                    // x
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // y
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // z
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // angle in degree
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // error
                    if ( !isOK ) {
                        std::cout << "ERROR: *ROTATION_AXIS_AND_ANGLE does not contain four values for xyz and angle (in degree)! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }

                // Process Model Scale
                else if ( strName.compare( "*SCALE" ) == 0 ) {
                    vTransformName.push_back( "SCALE" );
                    bool isOK = true;
                    // x
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // y
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // z
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx == std::string::npos )  isOK = false;
                    if ( isOK ) vTransformValue.push_back( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    // error
                    if ( !isOK ) {
                        std::cout << "ERROR: *SCALE does not contain three values for xyz! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }

                // Process Model Point Mass
                else if ( strName.compare( "*POINT_MASS" ) == 0 ) {
                    vTransformName.push_back( "POINT_MASS" );
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        tPointMass = atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() );
                    }
                    else {
                        std::cout << "ERROR: *POINT_MASS does not contain a value! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }
                // Process Model Spring Stiffness
                else if ( strName.compare( "*K_STIFFNESS" ) == 0 ) {
                    vTransformName.push_back( "K_STIFFNESS" );
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        tKstiffness = atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() );
                    }
                    else {
                        std::cout << "ERROR: *K_STIFFNESS does not contain a value! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }
                // Process Model Spring Damper
                else if ( strName.compare( "*K_DAMPER" ) == 0 ) {
                    vTransformName.push_back( "K_DAMPER" );
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        tKdamper = atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() );
                    }
                    else {
                        std::cout << "ERROR: *K_DAMPER does not contain a value! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }
                // Process Model Home Spring Stiffness
                else if ( strName.compare( "*HOME_K_STIFFNESS" ) == 0 ) {
                    vTransformName.push_back( "HOME_K_STIFFNESS" );
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        tHomeKstiffness = atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() );
                    }
                    else {
                        std::cout << "ERROR: *HOME_K_STIFFNESS does not contain a value! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }
                // Process Model Home Spring Damper
                else if ( strName.compare( "*HOME_K_DAMPER" ) == 0 ) {
                    vTransformName.push_back( "HOME_K_DAMPER" );
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        tHomeKdamper = atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() );
                    }
                    else {
                        std::cout << "ERROR: *HOME_K_DAMPER does not contain a value! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }


                // Process Model Predefined Time Step
                else if ( strName.compare( "*PREDEFINED_TIME_STEP" ) == 0 ) {
                    vTransformName.push_back( "PREDEFINED_TIME_STEP" );
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        predefinedTimeStep = atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() );
                    }
                    else {
                        std::cout << "ERROR: *PREDEFINED_TIME_STEP does not contain a value! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }
                // Process Model Number of Simulation Sub-Steps
                else if ( strName.compare( "*NUM_SIM_SUB_STEPS" ) == 0 ) {
                    vTransformName.push_back( "NUM_SIM_SUB_STEPS" );
                    begIdx = parameter.find_first_not_of( delims, endIdx );
                    endIdx = parameter.find_first_of( delims, begIdx );
                    if ( begIdx != std::string::npos ) {
                        numSimSubSteps = static_cast<int>( atof( parameter.substr( begIdx, endIdx-begIdx ).c_str() ) );
                    }
                    else {
                        std::cout << "ERROR: *NUM_SIM_SUB_STEPS does not contain a value! -- " << parameter << "\n";
                        while ( line[0] != '}' )    ifs.getline( line, 256 );
                        return NULL;
                    }
                }
            }

            // Set the beginning index to the last position in the input line
            begIdx = std::string::npos;
        }
        // Next line
        ifs.getline( line, 256 );
    }

    std::cout << "tPointMass: " << tPointMass << "\n";
    std::cout << "tKstiffness: " << tKstiffness << "\n";
    std::cout << "tKdamper: " << tKdamper << "\n";
    std::cout << "tHomeKstiffness: " << tHomeKstiffness << "\n";
    std::cout << "tHomeKdamper: " << tHomeKdamper << "\n";

    ModelForSurgery<T> * pModelForSurgery = NULL;
    data_location = path + data_location;
    //std::cout << "PATH: " << data_location + path << "\n";
    switch ( model_type ) {

        // Organs
        case ModelForSurgery<T>::HEART:
            pModelForSurgery = new ModelOrganHeart<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;
        case ModelForSurgery<T>::LEFT_KIDNEY:
            pModelForSurgery = new ModelOrganLeftKidney<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;
        case ModelForSurgery<T>::RIGHT_KIDNEY:
            pModelForSurgery = new ModelOrganRightKidney<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;
        case ModelForSurgery<T>::LIVER:
            pModelForSurgery = new ModelOrganLiver<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;
        //case ModelForSurgery<T>::LEFT_LUNG:   pModelForSurgery = new ModelOrganLeftLung<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );     break;
        //case ModelForSurgery<T>::RIGHT_LUNG:  pModelForSurgery = new ModelOrganRightLung<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );    break;
        case ModelForSurgery<T>::STOMACH:
            pModelForSurgery = new ModelOrganStomach<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;

        // For Practice
        case ModelForSurgery<T>::TISSUE_BOX_01:
            pModelForSurgery = new ModelTissueBox01<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;
        case ModelForSurgery<T>::TISSUE_TWO_TUBES_01:
            pModelForSurgery = new ModelTissueTwoTubes01<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;
        case ModelForSurgery<T>::TISSUE_HIATUS_HERNIA_01:
            pModelForSurgery = new ModelTissueHiatusHernia01<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;

        case ModelForSurgery<T>::RIGID_TORUS_01:
            pModelForSurgery = new ModelRigidTorus01<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;

        // ADD A MODEL HERE
        /*
        case ModelForSurgery<T>::MODEL_CALL_NAME:
            pModelForSurgery = new Model_NAME<T>( data_location, tPointMass, tKstiffness, tKdamper, tHomeKstiffness, tHomeKdamper, iRigidity, predefinedTimeStep, numSimSubSteps );
            break;
        */
    }

    if ( !pModelForSurgery )    std::cout << "A model of type " << model_type << "is NOT successfully set!\n";

    //---------------------------------------------------------------
    // Set properties
    pModelForSurgery->SetName( name );
    if ( bSimOn )       pModelForSurgery->SetOperationFlag( ModelForSurgery<T>::SIMULATION_ON );
    else                pModelForSurgery->ClearOperationFlag( ModelForSurgery<T>::SIMULATION_ON );
    if ( bColDetOn )    pModelForSurgery->SetOperationFlag( ModelForSurgery<T>::COLLISION_ON );
    else                pModelForSurgery->ClearOperationFlag( ModelForSurgery<T>::COLLISION_ON );
    if ( bRenderOn )    pModelForSurgery->SetOperationFlag( ModelForSurgery<T>::RENDER_ON );
    else                pModelForSurgery->ClearOperationFlag( ModelForSurgery<T>::RENDER_ON );

    //---------------------------------------------------------------
    // Apply Transformations
    TransformationSupport<T> * transform = &(pModelForSurgery->GetTransform());
    int nextPos = 0;
    for ( int i = 0; i < static_cast<int>( vTransformName.size() ); ++i ) {
        if      ( vTransformName[i].compare( "TRANSLATION" ) == 0 ) {
            transform->ApplyTranslation( vTransformValue[nextPos], vTransformValue[nextPos+1], vTransformValue[nextPos+2] );
            nextPos += 3;
        }
        else if ( vTransformName[i].compare( "ROTATION_AXIS_AND_ANGLE" ) == 0 ) {
            transform->ApplyRotationAxisAndAngle( vTransformValue[nextPos], vTransformValue[nextPos+1], vTransformValue[nextPos+2], vTransformValue[nextPos+3] );
            nextPos += 4;
        }
        else if ( vTransformName[i].compare( "SCALE" ) == 0 ) {
            transform->ApplyScale( vTransformValue[nextPos], vTransformValue[nextPos+1], vTransformValue[nextPos+2] );
            nextPos += 3;
        }
    }
    //---------------------------------------------------------------

    std::cout << *pModelForSurgery << " is successfully set.\n";

    return pModelForSurgery;
}

Here is the call graph for this function:

template<typename T >
BEGIN_NAMESPACE_TAPs std::vector< ModelForSurgery<T> * > SetupModelsForSurgery ( std::string  setupFile)

List of available models for surgery.

Setup models for surgery from file

Definition at line 17 of file TAPsListOfAvailableModelsForSurgery.cpp.

{
    // Get current directory
    std::string strPath( "" );
#if defined (_WINDOWS) || !defined (__WINDOWS__)
    size_t found = setupFile.find_last_of( "/\\" );
    if ( found != std::string::npos ) {
        char path[256];
        _getcwd( path, 256 );
        // If a drive letter is not included
        if ( setupFile.find_last_of( ":" ) == std::string::npos ) {
            strPath += std::string( path ) + "/";
        }
        strPath += setupFile.substr(0,found) + "/";
        // Example output: 
        //std::cout << "Current Directory: " << path << std::endl;
        //  Current Directory: G:\spunak_xp\Works\TAPs\Applications\SutureApp
    }
#endif

    //---------------------------------------------------------------
    // List of Models for Surgery

    /*
    // Organs
    ModelForSurgery<T> *    pOrgan_Heart            = NULL;
    ModelForSurgery<T> *    pOrgan_LeftKidney       = NULL;
    ModelForSurgery<T> *    pOrgan_RightKidney      = NULL;
    ModelForSurgery<T> *    pOrgan_Liver            = NULL;
    ModelForSurgery<T> *    pOrgan_LeftLung         = NULL;
    ModelForSurgery<T> *    pOrgan_RightLung        = NULL;
    ModelForSurgery<T> *    pOrgan_Stomach          = NULL;

    // For Practice
    ModelForSurgery<T> *    pTissueBox01            = NULL;
    ModelForSurgery<T> *    pTissueTwoTubes01       = NULL;
    //*/

    //---------------------------------------------------------------

    //
    bool bModelInclusionList[256];
    for ( int i = 0; i < 256; ++i ) {
        bModelInclusionList[i] = false;
    }
    std::vector< ModelForSurgery<T> * > pModels;

    // Open the setup file
    std::ifstream   ifs( setupFile.c_str(), std::ifstream::in );
    if ( !ifs.is_open() ) {
        std::cout << "Error opening the setup file (\"" << setupFile << "\") for Models for Surgery!" << std::endl;
        return pModels;
    }
    else {
        std::cout << "Open the setup file (\"" << setupFile << "\") for Models for Surgery!" << std::endl;
    }

    //*
    // Read the setup file
    const std::string delims( " ,\t" );
    std::string::size_type begIdx, endIdx;
    std::string strName;
    char line[256];

    // The first line
    ifs.getline( line, 256 );
    while ( !ifs.eof() ) {
        std::string parameter( line );

        //std::cout << "READ LINE: " << parameter << "\n";

        // Search beginning of the first word
        begIdx = parameter.find_first_not_of( delims );
        // While beginning of a word found
        while ( begIdx != std::string::npos ) {
            // Search end of the actual word
            endIdx = parameter.find_first_of( delims, begIdx );
            if ( endIdx == std::string::npos ) {
                // End of word is end of line
                endIdx = parameter.length();
            }

            // Treat # as comment
            if ( !(parameter[begIdx] == '#') ) {
                strName = parameter.substr( begIdx, endIdx );

                // Check for an model inclusion

                // START: List of Organs
                if ( strName.substr( begIdx, strlen("ORGAN_") ).compare( "ORGAN_" ) == 0 ) {

                    if ( strName.compare( "ORGAN_HEART" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::HEART ] = true;
                        }
                    }
                    else if ( strName.compare( "ORGAN_LEFT_KIDNEY" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::LEFT_KIDNEY ] = true;
                        }
                    }
                    else if ( strName.compare( "ORGAN_RIGHT_KIDNEY" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::RIGHT_KIDNEY ] = true;
                        }
                    }
                    else if ( strName.compare( "ORGAN_LIVER" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::LIVER ] = true;
                        }
                    }
                    else if ( strName.compare( "ORGAN_LEFT_LUNG" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::LEFT_LUNG ] = true;
                        }
                    }
                    else if ( strName.compare( "ORGAN_RIGHT_LUNG" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::RIGHT_LUNG ] = true;
                        }
                    }
                    else if ( strName.compare( "ORGAN_STOMACH" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::STOMACH ] = true;
                        }
                    }

                } // END: List of Organs

                //*
                // START: List of Tissues for Practice
                else if ( strName.substr( begIdx, strlen("TISSUE_") ).compare( "TISSUE_" ) == 0 ) {
                    if ( strName.compare( "TISSUE_BOX_01" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::TISSUE_BOX_01 ] = true;
                        }
                    }
                    else if ( strName.compare( "TISSUE_TWO_TUBES_01" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::TISSUE_TWO_TUBES_01 ] = true;
                        }
                    }
                    else if ( strName.compare( "TISSUE_HIATUS_HERNIA_01" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::TISSUE_HIATUS_HERNIA_01 ] = true;
                        }
                    }
                    //ADD A MODEL HERE
                    /*
                    else if ( strName.compare( "MODEL_CALL_NAME" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::MODEL_CALL_NAME ] = true;
                        }
                    }
                    */

                } // END: List of Tissues for Practice
                //*/

                //*
                // START: List of Rigid Objects for Practice
                else if ( strName.substr( begIdx, strlen("RIGID_") ).compare( "RIGID_" ) == 0 ) {
                    if ( strName.compare( "RIGID_TORUS_01" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::RIGID_TORUS_01 ] = true;
                        }
                    }
                    //ADD A MODEL HERE
                    /*
                    else if ( strName.compare( "MODEL_CALL_NAME" ) == 0 ) {
                        begIdx = parameter.find_first_not_of( delims, endIdx );
                        endIdx = parameter.find_first_of( delims, begIdx );
                        if ( parameter.substr( begIdx, endIdx ).compare( "ON" ) == 0 ) {
                            bModelInclusionList[ ModelForSurgery<T>::MODEL_CALL_NAME ] = true;
                        }
                    }
                    */

                } // END: List of Rigid Objects for Practice
                //*/

                // Check for a model inclusion
                else if ( strName.compare( "*MODEL" ) == 0 ) {
                    ModelForSurgery<T> * pModelForSurgery = ProcessSetupModelForSurgery<T>( ifs, bModelInclusionList, strPath );
                    if ( pModelForSurgery ) {
                        pModels.push_back( pModelForSurgery );
                    }
                }
            }
            // Set the beginning index to the last position in the input line
            begIdx = std::string::npos;
        }

        // Next line
        ifs.getline( line, 256 );
    }

    // Close the setup file
    ifs.close();
    //*/

    return pModels;
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines