TVerdict CTSmallWindowsTest::doTestStepPreambleL() { CTe_graphicsperformanceSuiteStepBase::doTestStepPreambleL(); iScreenSize = CTWindow::GetDisplaySizeInPixels(); TBool preload = EFalse; GetBoolFromConfig(_L("FlowTests"), _L("Preload"), preload); TPtrC fileNameList; TEST(GetStringFromConfig(_L("FlowTests"), _L("Files"), fileNameList)); ExtractListL(fileNameList, iFileNames); ComputeSmallWindows(); TPoint initialPosition(0, 0); RArray<TPoint> initialPositions; RArray<pTWindowCreatorFunction> windowCreatorFunctions; CleanupClosePushL(initialPositions); CleanupClosePushL(windowCreatorFunctions); for (TInt i = 0; i < iWindowsAcross; i++) { initialPosition.iY = 0; for (TInt j = 0; j < iWindowsAcross; j++) { windowCreatorFunctions.AppendL(CTSmallWindowRaster::NewL); initialPositions.AppendL(initialPosition); initialPosition.iY += iWindowSize.iHeight; } initialPosition.iX += iWindowSize.iWidth; } iFlowWindowsController = CTFlowWindowsController::NewL(preload, iFileNames, iWindowSize, windowCreatorFunctions, initialPositions, ETrue); CleanupStack::PopAndDestroy(2, &initialPositions); return TestStepResult(); }
WagonMovMass::WagonMovMass(const std::string& name, double sFactor_): WagonSimple(name), splitFactor(sFactor_) { movingMass = new RigidBody("Moving mass"); movingMass->setFrameOfReference(wagonbox->getFrame("C")); movingMass->setFrameForKinematics( movingMass->getFrame("C") ); movingMass->setTranslation( new LinearTranslation<fmatvec::VecV> ( ( "[1,0;0,1;0,0]" ) ) ); fmatvec::Vec initialPosition(3,fmatvec::INIT,0.0); initialPosition(0) = 1e-4; movingMass->setGeneralizedInitialPosition(initialPosition); addObject(movingMass); #ifdef HAVE_OPENMBVCPPINTERFACE movingMass->getFrame("C")->enableOpenMBV(); #endif /** * Definition of the spring connecting the moving mass to the wagon's body */ spring = new MBSim::SpringDamper("Moving mass spring"); // added small initial deformation to correct initialization error: // the initial direction of the force could not be calculated spring->connect(wagonbox->getFrame("C"),movingMass->getFrame("C")); spring->setForceFunction(new MBSim::LinearSpringDamperForce(10e3,0.01)); spring->setUnloadedLength(0.00001); addLink(spring); //#ifdef HAVE_OPENMBVCPPINTERFACE // OpenMBV::CoilSpring *openMBVSpringM = new OpenMBV::CoilSpring(); // openMBVSpringM->setCrossSectionRadius ( .005 ); // openMBVSpringM->setNumberOfCoils ( 5 ); // openMBVSpringM->setSpringRadius ( 0.01 ); // spring->setOpenMBVSpring ( openMBVSpringM ); //#endif /** * Definition of the translational joint with wagon's body */ translational = new MBSim::Joint("Joint: Wagon to moving mass"); translational->setForceDirection( fmatvec::Mat("[0;1;0]") ); translational->setForceLaw( new MBSim::BilateralConstraint() ); translational->connect(wagonbox->getFrame("C"),movingMass->getFrame("C")); addLink(translational); }
TVerdict CTSmallWindowsTestOpenGL::doTestStepPreambleL() { CTe_graphicsperformanceSuiteStepBase::doTestStepPreambleL(); TSize screenSize = CTWindow::GetDisplaySizeInPixels(); // set window size to create required grid iWindowSize.iHeight = screenSize.iHeight / KWindowsDown; iWindowSize.iWidth = screenSize.iWidth / KWindowsAcross; // adjust window size to maintain image aspect ratio if (iWindowSize.iWidth > iWindowSize.iHeight) { iWindowSize.iWidth = iWindowSize.iHeight; } else { iWindowSize.iHeight = iWindowSize.iWidth; } TPoint initialPosition(0, 0); RArray<TPoint> initialPositions; RArray<pTWindowCreatorFunction> windowCreatorFunctions; CleanupClosePushL(initialPositions); CleanupClosePushL(windowCreatorFunctions); for (TInt i = 0; i < KWindowsAcross; i++) { initialPosition.iY = 0; for (TInt j = 0; j < KWindowsDown; j++) { windowCreatorFunctions.AppendL(CTSmallWindowOpenGL::NewL); initialPositions.AppendL(initialPosition); iFileNames.AppendL(KDummy()); initialPosition.iY += iWindowSize.iHeight; } initialPosition.iX += iWindowSize.iWidth; } iFlowWindowsController = CTFlowWindowsController::NewL(ETrue, iFileNames, iWindowSize, windowCreatorFunctions, initialPositions, ETrue); CleanupStack::PopAndDestroy(2, &initialPositions); // run the test enough frames to see move the grid across the screen if (screenSize.iHeight > screenSize.iWidth) { iIterationsToTest = KNumberOfBounces * (screenSize.iHeight - iWindowSize.iHeight * KWindowsDown); } else { iIterationsToTest = KNumberOfBounces * (screenSize.iWidth - iWindowSize.iWidth * KWindowsAcross); } return TestStepResult(); }
HDCallbackCode HDCALLBACK touchScene(void *pUserData){ static const HDdouble stiffness = 0.05; hduVector3Dd position; hduVector3Dd initialPosition(0, 0, 0); hduVector3Dd force((double) g_force.x, (double) g_force.y, (double) g_force.z); int button; // Get Haptic Arm State hdGetIntegerv(HD_CURRENT_BUTTONS,&button); g_button1 = (button & HD_DEVICE_BUTTON_1); g_button2 = (button & HD_DEVICE_BUTTON_2); g_button3 = (button & HD_DEVICE_BUTTON_3); printf("\t%i\t%i %i %i\r",button,g_button1,g_button2,g_button3); if(g_button2) g_doExit = true; hdBeginFrame(ghHD); hdGetDoublev(HD_CURRENT_POSITION, position); switch(g_selecMode){ case MOVE: { hduVector3Dd tempForce = shakeBaby(); hduVecSubtract(force, initialPosition, position); hduVecScaleInPlace(force, stiffness); force += tempForce; hdSetDoublev(HD_CURRENT_FORCE, force); g_position_out.v[0] = (float)position[0]; g_position_out.v[1] = 0.f; g_position_out.v[2] = (float)position[2]; break; } case CAM: { hduVecSubtract(force, initialPosition, position); hduVecScaleInPlace(force, stiffness); hdSetDoublev(HD_CURRENT_FORCE, force); g_position_out.v[0] = (float)position[0]; g_position_out.v[1] = (float)position[1]; g_position_out.v[2] = 0.f; break; } case ARM : { g_position_out.v[0] = (float)position[0]; g_position_out.v[1] = (float)position[1]; g_position_out.v[2] = (float)position[2]; hduVecScaleInPlace(force, stiffness); hdSetDoublev(HD_CURRENT_FORCE, force); break; } } hdEndFrame(ghHD); return HD_CALLBACK_CONTINUE; }
/*! \brief Returns the initial geometry of this window on the screen, composed from initialPosition() and initialSize(). */ QRect initialGeometry() const { return QRect(initialPosition(), initialSize()); }
void PyParticleTracing::solve(const vector<vector<double> > &initialPositions, const vector<vector<double> > &initialVelocities, const vector<double> &particleCharges, const vector<double> &particleMasses) { if (!Agros2D::problem()->isSolved()) throw invalid_argument(QObject::tr("Problem is not solved.").toStdString()); int numberOfParticles = Agros2D::problem()->setting()->value(ProblemSetting::View_ParticleNumberOfParticles).toInt(); // initial position QList<Point3> initialPositionsList; if (initialPositions.empty()) { Point3 initialPosition(Agros2D::problem()->setting()->value(ProblemSetting::View_ParticleStartX).toDouble(), Agros2D::problem()->setting()->value(ProblemSetting::View_ParticleStartY).toDouble(), 0.0); for (int i = 0; i < numberOfParticles; i++) initialPositionsList.append(initialPosition); } else { if (numberOfParticles != initialPositions.size()) throw invalid_argument(QObject::tr("Number of initial positions is not equal to number of particles.").toStdString()); for (int i = 0; i < initialPositions.size(); i++) initialPositionsList.append(Point3(initialPositions.at(i).at(0), initialPositions.at(i).at(1), 0.0)); } // initial velocity QList<Point3> initialVelocitiesList; if (initialVelocities.empty()) { Point3 initialVelocity(Agros2D::problem()->setting()->value(ProblemSetting::View_ParticleStartVelocityX).toDouble(), Agros2D::problem()->setting()->value(ProblemSetting::View_ParticleStartVelocityY).toDouble(), 0.0); for (int i = 0; i < numberOfParticles; i++) initialVelocitiesList.append(initialVelocity); } else { if (numberOfParticles != initialVelocities.size()) throw invalid_argument(QObject::tr("Number of initial velocities is not equal to number of particles.").toStdString()); for (int i = 0; i < initialVelocities.size(); i++) initialVelocitiesList.append(Point3(initialVelocities.at(i).at(0), initialVelocities.at(i).at(1), 0.0)); } // particle charges QList<double> particleChargesList; if (particleCharges.empty()) { for (int i = 0; i < numberOfParticles; i++) particleChargesList.append(Agros2D::problem()->setting()->value(ProblemSetting::View_ParticleConstant).toDouble()); } else { if (numberOfParticles != particleCharges.size()) throw invalid_argument(QObject::tr("Number of particle charges is not equal to number of particles.").toStdString()); particleChargesList = QList<double>::fromVector(QVector<double>::fromStdVector(particleCharges)); } // particle masses QList<double> particleMassesList; if (particleMasses.empty()) { for (int i = 0; i < numberOfParticles; i++) particleMassesList.append(Agros2D::problem()->setting()->value(ProblemSetting::View_ParticleMass).toDouble()); } else { if (numberOfParticles != particleMasses.size()) throw invalid_argument(QObject::tr("Number of partical masses is not equal to number of particles.").toStdString()); particleMassesList = QList<double>::fromVector(QVector<double>::fromStdVector(particleMasses)); } ParticleTracing particleTracing; particleTracing.computeTrajectoryParticles(initialPositionsList, initialVelocitiesList, particleChargesList, particleMassesList); m_positions = particleTracing.positions(); m_velocities = particleTracing.velocities(); m_times = particleTracing.times(); }