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();
	}
示例#2
0
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();
	}
示例#4
0
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;
}
示例#5
0
 /*! \brief Returns the initial geometry of this window on the screen, composed from initialPosition() and initialSize(). */
 QRect initialGeometry() const { return QRect(initialPosition(), initialSize()); }
示例#6
0
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();
}