![]() |
TAPs 0.7.7.3
|
#include "TAPsModelForSurgery.hpp"#include "HumanRelated/TAPsModelOrganHeart.hpp"#include "HumanRelated/TAPsModelOrganLeftKidney.hpp"#include "HumanRelated/TAPsModelOrganRightKidney.hpp"#include "HumanRelated/TAPsModelOrganLiver.hpp"#include "HumanRelated/TAPsModelOrganStomach.hpp"#include "SurgicalRelated/TAPsModelTissueBox01.hpp"#include "SurgicalRelated/TAPsModelTissueTwoTubes01.hpp"#include "SurgicalRelated/TAPsModelTissueHiatusHernia01.hpp"#include "SurgicalRelated/TAPsModelRigidTorus01.hpp"#include "TAPsListOfAvailableModelsForSurgery.cpp"
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. | |
| 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:| 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;
}