本文整理汇总了C++中FunctionSet::contains方法的典型用法代码示例。如果您正苦于以下问题:C++ FunctionSet::contains方法的具体用法?C++ FunctionSet::contains怎么用?C++ FunctionSet::contains使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FunctionSet
的用法示例。
在下文中一共展示了FunctionSet::contains方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Exception
/**
* Set the functions for the tasks. Functions are set based on the
* correspondence of the function and the task. For example,
* a task with the name "x" will search for a function or functions
* with the name "x". For tasks that require 3 functions, such
* as CMC_Point tasks, the assumption is that there will be three
* consecutive functions named "x" in the function set. If the correct
* number of functions is not found, the task is disabled.
*
* @param aFuncSet Function set.
* @return Pointer to the previous function set.
*/
void CMC_TaskSet::
setFunctions(FunctionSet &aFuncSet)
{
// LOOP THROUGH TRACK OBJECTS
int i,j,iFunc=0;
int nTrk;
string name;
Function *f[3];
for(i=0;i<getSize();i++) {
// OBJECT
TrackingTask& ttask = get(i);
if (dynamic_cast<StateTrackingTask*>(&ttask)!=NULL) {
StateTrackingTask& sTask = dynamic_cast<StateTrackingTask&>(ttask);
if (aFuncSet.contains(sTask.getName())){
sTask.setTaskFunctions(&aFuncSet.get(sTask.getName()));
}
else{
cout << "State tracking task " << sTask.getName()
<< "has no data to track and will be ignored" << std::endl;
}
continue;
}
// If CMC_Task process same way as pre 2.0.2
if (dynamic_cast<CMC_Task*>(&ttask)==NULL)
continue;
CMC_Task& task = dynamic_cast<CMC_Task&>(ttask);
// NAME
name = task.getName();
if(name.empty()) continue;
// FIND FUNCTION(S)
f[0] = f[1] = f[2] = NULL;
nTrk = task.getNumTaskFunctions();
iFunc = aFuncSet.getIndex(name,iFunc);
if (iFunc < 0){
const Coordinate& coord = _model->getCoordinateSet().get(name);
name = coord.getJoint().getName() + "/" + name + "/value";
iFunc = aFuncSet.getIndex(name, iFunc);
if (iFunc < 0){
string msg = "CMC_TaskSet::setFunctionsForVelocity: function for task '";
msg += name + " not found.";
throw Exception(msg);
}
}
for(j=0;j<nTrk;j++) {
try {
f[j] = &aFuncSet.get(iFunc);
} catch(const Exception& x) {
x.print(cout);
}
if(f[j]==NULL) break;
if(name == f[j]->getName()) {
iFunc++;
} else {
f[j] = NULL;
break;
}
}
task.setTaskFunctions(f[0],f[1],f[2]);
}
}
示例2: run
/**
* Run the inverse Dynamics tool.
*/
bool InverseDynamicsTool::run()
{
bool success = false;
bool modelFromFile=true;
try{
//Load and create the indicated model
if (!_model)
_model = new Model(_modelFileName);
else
modelFromFile = false;
_model->printBasicInfo(cout);
cout<<"Running tool " << getName() <<".\n"<<endl;
// Do the maneuver to change then restore working directory
// so that the parsing code behaves properly if called from a different directory.
string saveWorkingDirectory = IO::getCwd();
string directoryOfSetupFile = IO::getParentDirectory(getDocumentFileName());
IO::chDir(directoryOfSetupFile);
const CoordinateSet &coords = _model->getCoordinateSet();
int nq = _model->getNumCoordinates();
FunctionSet *coordFunctions = NULL;
//Storage *coordinateValues = NULL;
if(hasCoordinateValues()){
if(_lowpassCutoffFrequency>=0) {
cout<<"\n\nLow-pass filtering coordinates data with a cutoff frequency of "<<_lowpassCutoffFrequency<<"..."<<endl<<endl;
_coordinateValues->pad(_coordinateValues->getSize()/2);
_coordinateValues->lowpassIIR(_lowpassCutoffFrequency);
if (getVerboseLevel()==Debug) _coordinateValues->print("coordinateDataFiltered.sto");
}
// Convert degrees to radian if indicated
if(_coordinateValues->isInDegrees()){
_model->getSimbodyEngine().convertDegreesToRadians(*_coordinateValues);
}
// Create differentiable splines of the coordinate data
coordFunctions = new GCVSplineSet(5, _coordinateValues);
//Functions must correspond to model coordinates and their order for the solver
for(int i=0; i<nq; i++){
if(coordFunctions->contains(coords[i].getName())){
coordFunctions->insert(i,coordFunctions->get(coords[i].getName()));
}
else{
coordFunctions->insert(i,new Constant(coords[i].getDefaultValue()));
std::cout << "InverseDynamicsTool: coordinate file does not contain coordinate " << coords[i].getName() << " assuming default value" << std::endl;
}
}
if(coordFunctions->getSize() > nq){
coordFunctions->setSize(nq);
}
}
else{
IO::chDir(saveWorkingDirectory);
throw Exception("InverseDynamicsTool: no coordinate file found.");
}
bool externalLoads = createExternalLoads(_externalLoadsFileName, *_model, _coordinateValues);
// Initialize the the model's underlying computational system and get its default state.
SimTK::State& s = _model->initSystem();
// Exclude user-specified forces from the dynamics for this analysis
disableModelForces(*_model, s, _excludedForces);
double first_time = _coordinateValues->getFirstTime();
double last_time = _coordinateValues->getLastTime();
// Determine the starting and final time for the Tool by comparing to what data is available
double start_time = ( first_time > _timeRange[0]) ? first_time : _timeRange[0];
double final_time = ( last_time < _timeRange[1]) ? last_time : _timeRange[1];
int start_index = _coordinateValues->findIndex(start_time);
int final_index = _coordinateValues->findIndex(final_time);
// create the solver given the input data
InverseDynamicsSolver ivdSolver(*_model);
const clock_t start = clock();
int nt = final_index-start_index+1;
Array_<double> times(nt, 0.0);
for(int i=0; i<nt; i++){
times[i]=_coordinateValues->getStateVector(start_index+i)->getTime();
}
// Preallocate results
Array_<Vector> genForceTraj(nt, Vector(nq, 0.0));
// solve for the trajectory of generlized forces that correspond to the coordinate
// trajectories provided
ivdSolver.solve(s, *coordFunctions, times, genForceTraj);
success = true;
//.........这里部分代码省略.........