foreach (const TaskDescription& task, tasks) { // Keep only the slave PIDs where we run tasks so we can send // framework messages directly. savedSlavePids[task.slave_id()] = savedOffers[offerId][task.slave_id()]; message.add_tasks()->MergeFrom(task); }
void RandomQueueGenerator::createRandomApp(unsigned int numTasks) { Time now = Time::getCurrentTime(); int a = getRandomAppLength() / numTasks; Duration alreadyExecuted(0.0); double r; Time endtime = now; TaskDescription description; description.setNumTasks(numTasks); description.setLength(a); // TODO: memory and disk if (currentTasks.empty()) { // Get a release date so that the first task is still executing currentrfirst = -a / currentPower; currentrfirst = tsum = r = getRandomReleaseDelta(); alreadyExecuted -= Duration(r); } else { r = getRandomReleaseDelta(); endtime = currentTasks.back()->getDescription().getDeadline(); } Time creationTime = now + Duration(r); tsum += a * numTasks / currentPower; if (endtime < now + Duration(tsum)) endtime = now + Duration(tsum); description.setDeadline(endtime + Duration(getRandomAppLength() / numTasks / currentPower)); for (unsigned int taskid = 0; taskid < numTasks; ++taskid) { std::shared_ptr<TestTask> newTask(new TestTask(CommAddress(), appId, taskid, description, currentPower)); newTask->setCreationTime(creationTime); currentTasks.push_back(newTask); } ++appId; std::static_pointer_cast<TestTask>(currentTasks.front())->execute(alreadyExecuted); }
void MMPAvailabilityInformation::updateAvailability(const TaskDescription & req) { list<MDPTCluster *> clusters; getAvailability(clusters, req); for (list<MDPTCluster *>::iterator it = clusters.begin(); it != clusters.end(); it++) (*it)->maxT = stars::MaxParameter<Time, int64_t>(req.getDeadline()); if (!clusters.empty() && queueRange.getMax() < req.getDeadline()) queueRange.setMaximum(req.getDeadline()); }
TEST(ResourceOffersTest, TaskUsesNoResources) { ASSERT_TRUE(GTEST_IS_THREADSAFE); PID<Master> master = local::launch(1, 2, 1 * Gigabyte, false); MockScheduler sched; MesosSchedulerDriver driver(&sched, "", DEFAULT_EXECUTOR_INFO, master); vector<Offer> offers; trigger resourceOffersCall; EXPECT_CALL(sched, registered(&driver, _)) .Times(1); EXPECT_CALL(sched, resourceOffers(&driver, _)) .WillOnce(DoAll(SaveArg<1>(&offers), Trigger(&resourceOffersCall))) .WillRepeatedly(Return()); driver.start(); WAIT_UNTIL(resourceOffersCall); EXPECT_NE(0, offers.size()); TaskDescription task; task.set_name(""); task.mutable_task_id()->set_value("1"); task.mutable_slave_id()->MergeFrom(offers[0].slave_id()); vector<TaskDescription> tasks; tasks.push_back(task); TaskStatus status; trigger statusUpdateCall; EXPECT_CALL(sched, statusUpdate(&driver, _)) .WillOnce(DoAll(SaveArg<1>(&status), Trigger(&statusUpdateCall))); driver.launchTasks(offers[0].id(), tasks); WAIT_UNTIL(statusUpdateCall); EXPECT_EQ(task.task_id(), status.task_id()); EXPECT_EQ(TASK_LOST, status.state()); EXPECT_TRUE(status.has_message()); EXPECT_EQ("Task uses no resources", status.message()); driver.stop(); driver.join(); local::shutdown(); }
unsigned int MMPAvailabilityInformation::getAvailability(list<MDPTCluster *> & clusters, const TaskDescription & req) { unsigned int result = 0; Time now = Time::getCurrentTime(); for (auto & c : summary) { Time start = now; if (c.maxT.getValue() > start) start = c.maxT.getValue(); if (start < req.getDeadline() && c.fulfills(req)) { double time = (req.getDeadline() - start).seconds(); unsigned long int length = req.getLength() ? req.getLength() : 1000; // A minimum length unsigned long int t = (time * c.minP.getValue()) / length; if (t != 0) { clusters.push_back(&c); result += t; } } } return result; }
virtual void launchTask(ExecutorDriver* driver, const TaskDescription& task) { cout << "Starting task " << task.task_id().value() << endl; TaskStatus status; status.mutable_task_id()->MergeFrom(task.task_id()); status.set_state(TASK_RUNNING); driver->sendStatusUpdate(status); sleep(1); cout << "Finishing task " << task.task_id().value() << endl; status.mutable_task_id()->MergeFrom(task.task_id()); status.set_state(TASK_FINISHED); driver->sendStatusUpdate(status); }
virtual void resourceOffers(SchedulerDriver* driver, const vector<Offer>& offers) { cout << "." << flush; vector<Offer>::const_iterator iterator = offers.begin(); for (; iterator != offers.end(); ++iterator) { const Offer& offer = *iterator; // Lookup resources we care about. // TODO(benh): It would be nice to ultimately have some helper // functions for looking up resources. double cpus = 0; double mem = 0; for (int i = 0; i < offer.resources_size(); i++) { const Resource& resource = offer.resources(i); if (resource.name() == "cpus" && resource.type() == Value::SCALAR) { cpus = resource.scalar().value(); } else if (resource.name() == "mem" && resource.type() == Value::SCALAR) { mem = resource.scalar().value(); } } // Launch tasks (only one per offer). vector<TaskDescription> tasks; if (cpus >= CPUS_PER_TASK && mem >= MEM_PER_TASK) { int taskId = tasksLaunched++; cout << "Starting task " << taskId << " on " << offer.hostname() << endl; TaskDescription task; task.set_name("Task " + lexical_cast<string>(taskId)); task.mutable_task_id()->set_value(lexical_cast<string>(taskId)); task.mutable_slave_id()->MergeFrom(offer.slave_id()); Resource* resource; resource = task.add_resources(); resource->set_name("cpus"); resource->set_type(Value::SCALAR); resource->mutable_scalar()->set_value(CPUS_PER_TASK); resource = task.add_resources(); resource->set_name("mem"); resource->set_type(Value::SCALAR); resource->mutable_scalar()->set_value(MEM_PER_TASK); tasks.push_back(task); cpus -= CPUS_PER_TASK; mem -= MEM_PER_TASK; } driver->launchTasks(offer.id(), tasks); } }
virtual void launchTask(ExecutorDriver* driver, const TaskDescription& task) { cout << "Executor starting task " << task.task_id().value() << endl; int64_t memToHog; double duration; int numThreads; istringstream in(task.data()); in >> memToHog >> duration >> numThreads; memToHog *= 1024LL * 1024LL; // Convert from MB to bytes for (int i = 0; i < numThreads; i++) { ThreadArg* arg = new ThreadArg(this, task, i, memToHog, duration); pthread_t thread; pthread_create(&thread, 0, runTask, arg); pthread_detach(thread); TaskStatus status; status.mutable_task_id()->MergeFrom(task.task_id()); status.set_state(TASK_RUNNING); driver->sendStatusUpdate(status); } }
jobject convert(JNIEnv* env, const TaskDescription& task) { string data; task.SerializeToString(&data); // byte[] data = ..; jbyteArray jdata = env->NewByteArray(data.size()); env->SetByteArrayRegion(jdata, 0, data.size(), (jbyte*) data.data()); // TaskDescription task = TaskDescription.parseFrom(data); jclass clazz = FindMesosClass(env, "org/apache/mesos/Protos$TaskDescription"); jmethodID parseFrom = env->GetStaticMethodID(clazz, "parseFrom", "([B)Lorg/apache/mesos/Protos$TaskDescription;"); jobject jtask = env->CallStaticObjectMethod(clazz, parseFrom, jdata); return jtask; }
TEST(MasterTest, TaskRunning) { ASSERT_TRUE(GTEST_IS_THREADSAFE); SimpleAllocator a; Master m(&a); PID<Master> master = process::spawn(&m); MockExecutor exec; trigger shutdownCall; EXPECT_CALL(exec, registered(_, _, _, _, _, _)) .Times(1); EXPECT_CALL(exec, launchTask(_, _)) .WillOnce(SendStatusUpdate(TASK_RUNNING)); EXPECT_CALL(exec, shutdown(_)) .WillOnce(Trigger(&shutdownCall)); map<ExecutorID, Executor*> execs; execs[DEFAULT_EXECUTOR_ID] = &exec; TestingIsolationModule isolationModule(execs); Resources resources = Resources::parse("cpus:2;mem:1024"); Slave s(resources, true, &isolationModule); PID<Slave> slave = process::spawn(&s); BasicMasterDetector detector(master, slave, true); MockScheduler sched; MesosSchedulerDriver driver(&sched, "", DEFAULT_EXECUTOR_INFO, master); vector<Offer> offers; TaskStatus status; trigger resourceOffersCall, statusUpdateCall, resourcesChangedCall; EXPECT_CALL(sched, registered(&driver, _)) .Times(1); EXPECT_CALL(sched, resourceOffers(&driver, _)) .WillOnce(DoAll(SaveArg<1>(&offers), Trigger(&resourceOffersCall))) .WillRepeatedly(Return()); EXPECT_CALL(sched, statusUpdate(&driver, _)) .WillOnce(DoAll(SaveArg<1>(&status), Trigger(&statusUpdateCall))); driver.start(); WAIT_UNTIL(resourceOffersCall); EXPECT_NE(0, offers.size()); TaskDescription task; task.set_name(""); task.mutable_task_id()->set_value("1"); task.mutable_slave_id()->MergeFrom(offers[0].slave_id()); task.mutable_resources()->MergeFrom(offers[0].resources()); vector<TaskDescription> tasks; tasks.push_back(task); EXPECT_CALL(isolationModule, resourcesChanged(_, _, Resources(offers[0].resources()))) .WillOnce(Trigger(&resourcesChangedCall)); driver.launchTasks(offers[0].id(), tasks); WAIT_UNTIL(statusUpdateCall); EXPECT_EQ(TASK_RUNNING, status.state()); WAIT_UNTIL(resourcesChangedCall); driver.stop(); driver.join(); WAIT_UNTIL(shutdownCall); // To ensure can deallocate MockExecutor. process::terminate(slave); process::wait(slave); process::terminate(master); process::wait(master); }
TEST(MasterTest, FrameworkMessage) { ASSERT_TRUE(GTEST_IS_THREADSAFE); SimpleAllocator a; Master m(&a); PID<Master> master = process::spawn(&m); MockExecutor exec; ExecutorDriver* execDriver; string execData; trigger execFrameworkMessageCall, shutdownCall; EXPECT_CALL(exec, registered(_, _, _, _, _, _)) .WillOnce(SaveArg<0>(&execDriver)); EXPECT_CALL(exec, launchTask(_, _)) .WillOnce(SendStatusUpdate(TASK_RUNNING)); EXPECT_CALL(exec, frameworkMessage(_, _)) .WillOnce(DoAll(SaveArg<1>(&execData), Trigger(&execFrameworkMessageCall))); EXPECT_CALL(exec, shutdown(_)) .WillOnce(Trigger(&shutdownCall)); map<ExecutorID, Executor*> execs; execs[DEFAULT_EXECUTOR_ID] = &exec; TestingIsolationModule isolationModule(execs); Resources resources = Resources::parse("cpus:2;mem:1024"); Slave s(resources, true, &isolationModule); PID<Slave> slave = process::spawn(&s); BasicMasterDetector detector(master, slave, true); // Launch the first (i.e., failing) scheduler and wait until the // first status update message is sent to it (drop the message). MockScheduler sched; MesosSchedulerDriver schedDriver(&sched, "", DEFAULT_EXECUTOR_INFO, master); vector<Offer> offers; TaskStatus status; string schedData; trigger resourceOffersCall, statusUpdateCall, schedFrameworkMessageCall; EXPECT_CALL(sched, registered(&schedDriver, _)) .Times(1); EXPECT_CALL(sched, resourceOffers(&schedDriver, _)) .WillOnce(DoAll(SaveArg<1>(&offers), Trigger(&resourceOffersCall))) .WillRepeatedly(Return()); EXPECT_CALL(sched, statusUpdate(&schedDriver, _)) .WillOnce(DoAll(SaveArg<1>(&status), Trigger(&statusUpdateCall))); EXPECT_CALL(sched, frameworkMessage(&schedDriver, _, _, _)) .WillOnce(DoAll(SaveArg<3>(&schedData), Trigger(&schedFrameworkMessageCall))); schedDriver.start(); WAIT_UNTIL(resourceOffersCall); EXPECT_NE(0, offers.size()); TaskDescription task; task.set_name(""); task.mutable_task_id()->set_value("1"); task.mutable_slave_id()->MergeFrom(offers[0].slave_id()); task.mutable_resources()->MergeFrom(offers[0].resources()); vector<TaskDescription> tasks; tasks.push_back(task); schedDriver.launchTasks(offers[0].id(), tasks); WAIT_UNTIL(statusUpdateCall); EXPECT_EQ(TASK_RUNNING, status.state()); string hello = "hello"; schedDriver.sendFrameworkMessage(offers[0].slave_id(), DEFAULT_EXECUTOR_ID, hello); WAIT_UNTIL(execFrameworkMessageCall); EXPECT_EQ(hello, execData); string reply = "reply"; execDriver->sendFrameworkMessage(reply); WAIT_UNTIL(schedFrameworkMessageCall); EXPECT_EQ(reply, schedData); schedDriver.stop(); schedDriver.join(); WAIT_UNTIL(shutdownCall); // To ensure can deallocate MockExecutor. process::terminate(slave); process::wait(slave); process::terminate(master); process::wait(master); }
TEST(ResourceOffersTest, ResourcesGetReofferedAfterTaskDescriptionError) { ASSERT_TRUE(GTEST_IS_THREADSAFE); PID<Master> master = local::launch(1, 2, 1 * Gigabyte, false); MockScheduler sched1; MesosSchedulerDriver driver1(&sched1, "", DEFAULT_EXECUTOR_INFO, master); vector<Offer> offers; trigger sched1ResourceOffersCall; EXPECT_CALL(sched1, registered(&driver1, _)) .Times(1); EXPECT_CALL(sched1, resourceOffers(&driver1, _)) .WillOnce(DoAll(SaveArg<1>(&offers), Trigger(&sched1ResourceOffersCall))) .WillRepeatedly(Return()); driver1.start(); WAIT_UNTIL(sched1ResourceOffersCall); EXPECT_NE(0, offers.size()); TaskDescription task; task.set_name(""); task.mutable_task_id()->set_value("1"); task.mutable_slave_id()->MergeFrom(offers[0].slave_id()); Resource* cpus = task.add_resources(); cpus->set_name("cpus"); cpus->set_type(Value::SCALAR); cpus->mutable_scalar()->set_value(0); Resource* mem = task.add_resources(); mem->set_name("mem"); mem->set_type(Value::SCALAR); mem->mutable_scalar()->set_value(1 * Gigabyte); vector<TaskDescription> tasks; tasks.push_back(task); TaskStatus status; trigger sched1StatusUpdateCall; EXPECT_CALL(sched1, statusUpdate(&driver1, _)) .WillOnce(DoAll(SaveArg<1>(&status), Trigger(&sched1StatusUpdateCall))); driver1.launchTasks(offers[0].id(), tasks); WAIT_UNTIL(sched1StatusUpdateCall); EXPECT_EQ(task.task_id(), status.task_id()); EXPECT_EQ(TASK_LOST, status.state()); EXPECT_TRUE(status.has_message()); EXPECT_EQ("Task uses invalid resources", status.message()); driver1.stop(); driver1.join(); MockScheduler sched2; MesosSchedulerDriver driver2(&sched2, "", DEFAULT_EXECUTOR_INFO, master); trigger sched2ResourceOffersCall; EXPECT_CALL(sched2, registered(&driver2, _)) .Times(1); EXPECT_CALL(sched2, resourceOffers(&driver2, _)) .WillOnce(Trigger(&sched2ResourceOffersCall)) .WillRepeatedly(Return()); EXPECT_CALL(sched2, offerRescinded(&driver2, _)) .Times(AtMost(1)); driver2.start(); WAIT_UNTIL(sched2ResourceOffersCall); driver2.stop(); driver2.join(); local::shutdown(); }
virtual void resourceOffer(SchedulerDriver* driver, const OfferID& offerId, const vector<SlaveOffer>& offers) { time_t now = time(0); double curTime = difftime(now, startTime); vector<TaskDescription> toLaunch; vector<SlaveOffer>::const_iterator iterator = offers.begin(); for (; iterator != offers.end(); ++iterator) { const SlaveOffer& offer = *iterator; // Lookup resources we care about. // TODO(benh): It would be nice to ultimately have some helper // functions for looking up resources. double cpus = 0; double mem = 0; for (int i = 0; i < offer.resources_size(); i++) { const Resource& resource = offer.resources(i); if (resource.name() == "cpus" && resource.type() == Resource::SCALAR) { cpus = resource.scalar().value(); } else if (resource.name() == "mem" && resource.type() == Resource::SCALAR) { mem = resource.scalar().value(); } } // Launch tasks. if (tasksLaunched < tasks.size() && cpus >= 1 && curTime >= tasks[tasksLaunched].launchTime && mem >= tasks[tasksLaunched].memToRequest) { int taskId = tasksLaunched++; cout << "Starting task " << taskId << " on " << offer.hostname() << endl; TaskDescription task; task.set_name("Task " + lexical_cast<string>(taskId)); task.mutable_task_id()->set_value(lexical_cast<string>(taskId)); task.mutable_slave_id()->MergeFrom(offer.slave_id()); Resource* resource; resource = task.add_resources(); resource->set_name("cpus"); resource->set_type(Resource::SCALAR); resource->mutable_scalar()->set_value(1); resource = task.add_resources(); resource->set_name("mem"); resource->set_type(Resource::SCALAR); resource->mutable_scalar()->set_value(tasks[taskId].memToRequest); ostringstream data; data << tasks[taskId].memToHog << " " << tasks[taskId].duration << " " << threadsPerTask; task.set_data(data.str()); toLaunch.push_back(task); } } driver->replyToOffer(offerId, toLaunch); }
//------------------------------------- bool BatchFile::Process() { static const char lEndOfRecord = '#'; static const int lLineLength = 256; bool lOK = true; /// ARTHUR - commented due to string stream incompatability // Jtk - uncommented to bring back batch file functionality. // type cast the strings to (char*) which appeared to solve // the string stream incompatibility //attempt to open input file ifstream lInFile( mInFileName.c_str(), ios::in ); if( ! lInFile.is_open() ) { AfxMessageBox( "Unable to open batch input file." ); return false; } //make sure this is a batch file string lLine;//( lLineLength, "", ' ' ); lInFile >> lLine; //lInFile.getline( (char*)lLine, lLineLength, lEndOfRecord ); // JTK - Removed simplying setting lCommandName = lLine appears to work /* strstream lCore; lCore << lLine << endl;*/ string lCommandName;//( 20, "", ' ' ); // JTK - Removed because strstream no longer exists // lCore >> (char*)lCommandName; lCommandName = lLine; // added because of the removal of strstream // allow no space so we don't break peoples' workarounds if(lCommandName != "3DSSPPBATCHFILE#") { if(mCommands.find(lCommandName) == mCommands.end() || mCommands[lCommandName] != bch3DSSPPBatchFile) { AfxMessageBox("Batch file header missing. \nFile must begin with '3DSSPPBATCHFILE #'."); lInFile.close(); return false; } // make sure there's a # next lInFile >> lLine; if(lLine != "#") { AfxMessageBox("Batch file header missing. \nFile must begin with '3DSSPPBATCHFILE #'."); lInFile.close(); return false; } } //cMapType::iterator lIt = mCommands.find( lCommandName ); /* if(lIt != mCommands.end()) //match found { switch((*lIt).second) { case bch3DSSPPBatchFile : { //Header found as first command. OK to proceed. break; } default: { AfxMessageBox( "Batch file header missing. \nFile must begin with '3DSSPPBATCHFILE #'." ); lInFile.close(); return false; } } } else //match not found { AfxMessageBox( "3DSSPP batch file header missing. This is not a valid 3DSSPP batch file." ); lInFile.close(); return false; }*/ //attempt to open export file fstream lExportFile(mExportFileName.c_str(), ios::in | ios::out | ios::trunc | ios::ate ); if(!lExportFile.is_open()) { AfxMessageBox( "Unable to open batch export file." ); lInFile.close(); return false; } //attempt to open log file ofstream lLogFile(mLogFileName.c_str()); if(!lLogFile.is_open()) { AfxMessageBox("Unable to open batch log file."); lInFile.close(); lExportFile.close(); return false; } // prepare the progress dialog mProgressDialog.Create(IDD_BATCHFILE); mProgressDialog.ShowWindow(SW_SHOWNORMAL); // repeatedly get and decode lines int lRecordNumber = 1; bool lFirstCommand = true; while(lInFile.peek() != EOF) { //Get line string lLine;//( lLineLength, "", ' ' ); //lInFile.getline( (char*)lLine, lLineLength, lEndOfRecord ); lInFile >> lLine; //strstream lCore; //lCore << lLine << ends; //Get the command name //String lCommandName( 20, "", ' ' ); //lCore >> (char*)lCommandName; string lCommandName = lLine; cMapType::iterator lIt = mCommands.find( lCommandName ); if( lIt != mCommands.end() ) //match found { switch( (*lIt).second ) { case bchDescription : { TaskDescription lTaskDescription; lInFile >> lTaskDescription; if( lTaskDescription.Error() ) { LogError( lLogFile, lRecordNumber, "TaskDescription", (char*)lTaskDescription.LastErrorMessage() ); lOK = false; } else { mDocPtr->SetDescription( lTaskDescription ); //NOTE: Task description does not trigger automatic export. } break; } case bchAnthropomentry : { Anthropometry lAnthropometry; lInFile >> lAnthropometry; if( lAnthropometry.Error() ) { LogError( lLogFile, lRecordNumber, "Anthropometry", (char*)lAnthropometry.LastErrorMessage() ); lOK = false; } else { mDocPtr->setAnthropometry( lAnthropometry ); mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchJointAngles : { // JointAngles lJointAngles; // lInFile >> lJointAngles; // if(! lJointAngles.Validate() ) // { // LogError( lLogFile, lRecordNumber, "JointAngles", lJointAngles.getLastError().c_str() ); // lOK = false; // } // else // { //// make the frame a keyframe if it is currently unset //// TODO make keyframe as long as it is not a keyframe? //if(mDocPtr->getFrameType() == FT_Unset) { // mDocPtr->setFrameType(FT_Keyframe); //} //// Put the joint angles and clear the undoing queue // mDocPtr->clearUndoHistory(); // mDocPtr->GetSkeleton()->SetAngles(lJointAngles); //mDocPtr->MakeDirtyAndUpdateViews(true); //if (mAutoExport) // mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); // } // break; AfxMessageBox(_T("JOI not supported in 7.00 and later version."), MB_OK | MB_ICONSTOP); } case bchJointAnglesWithLegs : { //no longer needed in 7.0.0 //JointAngles lJointAngles; //// don't user operator when we're reading in with the leg angles //// we should actually get rid of the operator then, or have a better //// versioning system ////lInFile >> lJointAngles; //lJointAngles.ReadBatchFileWithLegs(lInFile); //if(! lJointAngles.Validate() ) //{ // LogError(lLogFile, lRecordNumber, "JointAngles", lJointAngles.getLastError().c_str()); // lOK = false; //} //else //{ // // make the frame a keyframe if it is currently unset // // TODO make keyframe as long as it is not a keyframe? // if(mDocPtr->getFrameType() == FT_Unset) { // mDocPtr->setFrameType(FT_Keyframe); // } // // Put the joint angles and clear the undoing queue // mDocPtr->clearUndoHistory(); // mDocPtr->GetSkeleton()->SetAngles(lJointAngles); // mDocPtr->MakeDirtyAndUpdateViews(true); // if(mAutoExport) // mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); //} //break; AfxMessageBox(_T("JO6 not supported in 7.00 and later version."), MB_OK | MB_ICONSTOP); } case bchJointAnglesAll : { JointAngles lJointAngles; // don't user operator when we're reading in with the leg angles // we should actually get rid of the operator then, or have a better // versioning system //lInFile >> lJointAngles; lJointAngles.ReadBatchFileAll(lInFile); /*if(! lJointAngles.Validate() ) { LogError(lLogFile, lRecordNumber, "JointAngles", lJointAngles.getLastError().c_str()); lOK = false; } else*/ { // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } // Put the joint angles and clear the undoing queue mDocPtr->clearUndoHistory(); mDocPtr->GetSkeleton()->SetAngles(lJointAngles); mDocPtr->MakeDirtyAndUpdateViews(true); if(mAutoExport) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchHandLoads : { HandLoads lHandLoads; lInFile >> lHandLoads; if(lHandLoads.Error()) { LogError( lLogFile, lRecordNumber, "HandLoads", (char*)lHandLoads.LastErrorMessage() ); lOK = false; } else { mDocPtr->GetSkeleton()->setExtForce(JT_LHAND, lHandLoads.GetLForceVector()); mDocPtr->GetSkeleton()->setExtForce(JT_RHAND, lHandLoads.GetRForceVector()); // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } // for hand component load case bchLeftHandComponentLoad : { HandLoads lHandLoads; lInFile >> lHandLoads; if(lHandLoads.Error()) { LogError( lLogFile, lRecordNumber, "HandComponentLoads", (char*)lHandLoads.LastErrorMessage() ); lOK = false; } else { Vector3 leftForceVec; leftForceVec[0] = lHandLoads.LeftMagnitude(); leftForceVec[1] = lHandLoads.LeftVerticalAngle(); leftForceVec[2] = lHandLoads.LeftHorizontalAngle(); Vector3 leftTorqueVec; leftTorqueVec[0] = lHandLoads.RightMagnitude(); leftTorqueVec[1] = lHandLoads.RightVerticalAngle(); leftTorqueVec[2] = lHandLoads.RightHorizontalAngle(); mDocPtr->GetSkeleton()->setExtForce(JT_LHAND, leftForceVec); mDocPtr->GetSkeleton()->setExtTorque(JT_LHAND, leftTorqueVec); // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchRightHandComponentLoad : { HandLoads lHandLoads; lInFile >> lHandLoads; if(lHandLoads.Error()) { LogError( lLogFile, lRecordNumber, "HandComponentLoads", (char*)lHandLoads.LastErrorMessage() ); lOK = false; } else { Vector3 rightForceVec; rightForceVec[0] = lHandLoads.LeftMagnitude(); rightForceVec[1] = lHandLoads.LeftVerticalAngle(); rightForceVec[2] = lHandLoads.LeftHorizontalAngle(); Vector3 rightTorqueVec; rightTorqueVec[0] = lHandLoads.RightMagnitude(); rightTorqueVec[1] = lHandLoads.RightVerticalAngle(); rightTorqueVec[2] = lHandLoads.RightHorizontalAngle(); mDocPtr->GetSkeleton()->setExtForce(JT_RHAND, rightForceVec); mDocPtr->GetSkeleton()->setExtTorque(JT_RHAND, rightTorqueVec); // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } //for multi-joint load case bchexternala: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[0],lJointLoads.GetForceVector()); skel.setExtTorque(order[0],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalb: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[1],lJointLoads.GetForceVector()); skel.setExtTorque(order[1],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalc: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[2],lJointLoads.GetForceVector()); skel.setExtTorque(order[2],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternald: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[3],lJointLoads.GetForceVector()); skel.setExtTorque(order[3],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternale: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[4],lJointLoads.GetForceVector()); skel.setExtTorque(order[4],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalf: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[5],lJointLoads.GetForceVector()); skel.setExtTorque(order[5],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalg: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[6],lJointLoads.GetForceVector()); skel.setExtTorque(order[6],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalh: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[7],lJointLoads.GetForceVector()); skel.setExtTorque(order[7],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternali: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[8],lJointLoads.GetForceVector()); skel.setExtTorque(order[8],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalj: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[9],lJointLoads.GetForceVector()); skel.setExtTorque(order[9],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalk: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[11] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[10],lJointLoads.GetForceVector()); skel.setExtTorque(order[10],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternall: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[14] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE, JT_RWRIST, JT_LWRIST,JT_TRAGION}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[11],lJointLoads.GetForceVector()); skel.setExtTorque(order[11],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternalm: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[14] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE, JT_RWRIST, JT_LWRIST, JT_TRAGION}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[12],lJointLoads.GetForceVector()); skel.setExtTorque(order[12],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchexternaln: { HandLoads lJointLoads; lInFile >> lJointLoads; if(lJointLoads.Error()) { LogError( lLogFile, lRecordNumber, "JointLoads", (char*)lJointLoads.LastErrorMessage() ); lOK = false; } else { const JointID order[14] = {JT_RELBOW,JT_RSHOULDER,JT_LELBOW,JT_LSHOULDER,JT_L5S1_TEMP, JT_RHIP,JT_RKNEE,JT_RANKLE,JT_LHIP,JT_LKNEE,JT_LANKLE, JT_RWRIST, JT_LWRIST, JT_TRAGION}; // make group undo event int left = Get_App_Ptr()->Get_Document_Ptr()->LeftSelect(); int right = Get_App_Ptr()->Get_Document_Ptr()->RightSelect(); GroupEvent* groupEvent = new GroupEvent(left, right); for(int frame = left; frame <= right; frame++) { //Skeleton &skel = *Get_App_Ptr()->Get_Document_Ptr()->GetSkeleton(); Skeleton& skel = *Get_App_Ptr()->Get_Document_Ptr()->getSkeletonAtFrame(frame); skel.setExtForce(order[13],lJointLoads.GetForceVector()); skel.setExtTorque(order[13],lJointLoads.GetTorqueVector()); } // make the frame a keyframe if it is currently unset // TODO make keyframe as long as it is not a keyframe? if(mDocPtr->getFrameType() == FT_Unset) { mDocPtr->setFrameType(FT_Keyframe); } mDocPtr->MakeDirtyAndUpdateViews(true); if( mAutoExport ) mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); } break; } case bchSupport : { Support_s tempsupport; InputAuxiliary inputcheck; //input checking class string temp; //temp string for the input int feetSupport, position; //temp int value for enum to support read lInFile >> temp; if (!inputcheck.isInteger(temp) | !inputcheck.CheckRange(inputcheck.StringtoInt(temp), 0,3)) { LogError(lLogFile, lRecordNumber, "Support Selection", string("The input feetsupport must be an integer from 0 to 3 \n")); lOK = false; break; } feetSupport = inputcheck.StringtoInt(temp); lInFile >> temp; if (!inputcheck.isInteger(temp) | !inputcheck.CheckRange(inputcheck.StringtoInt(temp), 0,1)) { LogError(lLogFile, lRecordNumber, "Support Selection", string("The input position must be an integer from 0 to 1 \n")); lOK = false; break; } position = (bool)inputcheck.StringtoInt(temp); lInFile >> temp; if (!inputcheck.isInteger(temp) | !inputcheck.CheckRange(inputcheck.StringtoInt(temp), 0,1)) { LogError(lLogFile, lRecordNumber, "Support Selection", string("The input frontSeatPanSuppor must be an integer from 0 to 1 \n")); lOK = false; break; } tempsupport.frontSeatPanSupport = (bool)inputcheck.StringtoInt(temp); lInFile >> temp; if (!inputcheck.isInteger(temp) | !inputcheck.CheckRange(inputcheck.StringtoInt(temp), 0,1)) { LogError(lLogFile, lRecordNumber, "Support Selection", string("The input seatHasBackRest must be an integer from 0 to 1 \n")); lOK = false; break; } tempsupport.seatHasBackRest = (bool)inputcheck.StringtoInt(temp); lInFile >> temp; if (!inputcheck.isDouble(temp) | !inputcheck.CheckLowBound(inputcheck.StringtoDouble(temp), 19.05)) { LogError(lLogFile, lRecordNumber, "Support Selection", string("The input backRestCenterHeight must be a number and it is bigger than 19.05 \n")); lOK = false; break; } tempsupport.backRestCenterHeight = inputcheck.StringtoDouble(temp); lInFile >> temp; if (!inputcheck.isInteger(temp) | !inputcheck.CheckRange(inputcheck.StringtoInt(temp), -360,360)) { LogError(lLogFile, lRecordNumber, "Support Selection", string("The input additionalPelvicTilt must be an integer from -360 to 360 \n")); lOK = false; break; } tempsupport.additionalPelvicTilt = inputcheck.StringtoInt(temp); tempsupport.feetSupport = FeetSupport_e(feetSupport); tempsupport.position = Position_e(position); //The following two line is due to the coodinate changing. tempsupport.additionalPelvicTilt = tempsupport.additionalPelvicTilt; tempsupport.displayAdditionalPelvicTilt = tempsupport.additionalPelvicTilt; if(lInFile.fail()) { LogError(lLogFile, lRecordNumber, "Support Selection", string("Support Selection parameters must be FeetSupport, Position, FrontSeatPanSupport,seatHasBackRest, backRestCenterHeight. additionalPelvicTilt, displayAdditionalPelvicTilt \n")); lOK = false; } else if (position && (feetSupport ==1|feetSupport ==2)){ LogError(lLogFile, lRecordNumber, "Support Selection", string("Two feet must be both on or not on the ground if seated \n")); lOK = false; } else if (!position && (feetSupport == 3)){ LogError(lLogFile, lRecordNumber, "Support Selection", string("Either or both feet needs to be on the ground if standing \n")); lOK = false; } else if (tempsupport.frontSeatPanSupport && (feetSupport !=3)){ LogError(lLogFile, lRecordNumber, "Support Selection", string("No frontPan is allowed \n")); lOK = false; } else { mDocPtr->setSupport(tempsupport); mDocPtr->MakeDirtyAndUpdateViews(true); } break; } case bchComment : { //do nothing break; } case bchExport : { mDocPtr->DoExportSummary(lExportFile, DM_COMMA, FM_APPEND); break; } case bchAutoExport : { int lAutoExport; lInFile >> lAutoExport; if( ! lInFile.fail() ) { if (lAutoExport) mAutoExport = true; else mAutoExport = false; } else { string lMsg( "Value not 0 (false) or 1 (true)." ); LogError( lLogFile, lRecordNumber, "AutoExport", lMsg ); lOK = false; } break; } case bchPause : { int pauseTime; string temp; //temp string for the input lInFile >> temp; InputAuxiliary inputcheck; //input checking class if (!inputcheck.isInteger(temp)) { LogError(lLogFile, lRecordNumber, "Pause", string("Must enter a positive integer number of milliseconds to pause, or 0 to be prompted to resume")); lOK = false; break; } pauseTime = inputcheck.StringtoInt(temp); if( ! lInFile.fail() && pauseTime >= 0) { //mDocPtr->RedrawViews(); mDocPtr->UpdateViews(); if(pauseTime == 0) { AfxMessageBox("Batch file processing paused. Press OK to continue", MB_OK); } else { Sleep(pauseTime); } } else { LogError( lLogFile, lRecordNumber, "Pause", string("Must enter a positive integer number of milliseconds to pause, or 0 to be prompted to resume")); lOK = false; } break; } case bchFrameChange: { string firstParam; lInFile >> firstParam; if(lInFile.fail()) { LogError(lLogFile, lRecordNumber, "Frame", string("Frame command parameters must be + <num> | - <num> | FIRST | LAST | <num>")); lOK = false; } else { // Go to first frame if(firstParam == "FIRST") { mDocPtr->setCurrentFrame(0); } else // Go to last frame if(firstParam == "LAST") { mDocPtr->setCurrentFrame(mDocPtr->getLastFrame()); } else // Advance a number of frames if(firstParam == "+") { // read number of frames int numFrames; lInFile >> numFrames; if(lInFile.fail()) { LogError(lLogFile, lRecordNumber, "Frame", string("Frame command parameters must be + <num> | - <num> | FIRST | LAST | <num>")); lOK = false; } else { mDocPtr->setCurrentFrame(mDocPtr->getCurrentFrame() + numFrames); } } else // Rewind a number of frames if(firstParam == "-") { // read number of frames int numFrames; lInFile >> numFrames; if(lInFile.fail()) { LogError(lLogFile, lRecordNumber, "Frame", string("Frame command parameters must be + <num> | - <num> | FIRST | LAST | <num>")); lOK = false; } else { mDocPtr->setCurrentFrame(mDocPtr->getCurrentFrame() - numFrames); } } else { // Go to numbered frame int frameNumber = atoi(firstParam.c_str()); mDocPtr->setCurrentFrame(frameNumber); } } // update views after frame change mDocPtr->UpdateViews(); break; }
TEST(MasterTest, ResourcesReofferedAfterBadResponse) { ASSERT_TRUE(GTEST_IS_THREADSAFE); PID<Master> master = local::launch(1, 2, 1 * Gigabyte, false, false); MockScheduler sched1; MesosSchedulerDriver driver1(&sched1, master); OfferID offerId; vector<SlaveOffer> offers; trigger sched1ResourceOfferCall; EXPECT_CALL(sched1, getFrameworkName(&driver1)) .WillOnce(Return("")); EXPECT_CALL(sched1, getExecutorInfo(&driver1)) .WillOnce(Return(DEFAULT_EXECUTOR_INFO)); EXPECT_CALL(sched1, registered(&driver1, _)) .Times(1); EXPECT_CALL(sched1, resourceOffer(&driver1, _, ElementsAre(_))) .WillOnce(DoAll(SaveArg<1>(&offerId), SaveArg<2>(&offers), Trigger(&sched1ResourceOfferCall))) .WillRepeatedly(Return()); driver1.start(); WAIT_UNTIL(sched1ResourceOfferCall); EXPECT_NE(0, offers.size()); TaskDescription task; task.set_name(""); task.mutable_task_id()->set_value("1"); task.mutable_slave_id()->MergeFrom(offers[0].slave_id()); Resource* cpus = task.add_resources(); cpus->set_name("cpus"); cpus->set_type(Resource::SCALAR); cpus->mutable_scalar()->set_value(0); Resource* mem = task.add_resources(); mem->set_name("mem"); mem->set_type(Resource::SCALAR); mem->mutable_scalar()->set_value(1 * Gigabyte); vector<TaskDescription> tasks; tasks.push_back(task); trigger sched1ErrorCall; EXPECT_CALL(sched1, error(&driver1, _, "Invalid resources for task")) .WillOnce(Trigger(&sched1ErrorCall)); EXPECT_CALL(sched1, offerRescinded(&driver1, offerId)) .Times(AtMost(1)); driver1.replyToOffer(offerId, tasks); WAIT_UNTIL(sched1ErrorCall); driver1.stop(); driver1.join(); MockScheduler sched2; MesosSchedulerDriver driver2(&sched2, master); trigger sched2ResourceOfferCall; EXPECT_CALL(sched2, getFrameworkName(&driver2)) .WillOnce(Return("")); EXPECT_CALL(sched2, getExecutorInfo(&driver2)) .WillOnce(Return(DEFAULT_EXECUTOR_INFO)); EXPECT_CALL(sched2, registered(&driver2, _)) .Times(1); EXPECT_CALL(sched2, resourceOffer(&driver2, _, _)) .WillOnce(Trigger(&sched2ResourceOfferCall)) .WillRepeatedly(Return()); EXPECT_CALL(sched2, offerRescinded(&driver2, _)) .Times(AtMost(1)); driver2.start(); WAIT_UNTIL(sched2ResourceOfferCall); driver2.stop(); driver2.join(); local::shutdown(); }