Пример #1
0
    void PaintLocalization::drawParticle(PF::LocalizationParticle particle, QImage& bitmap)
    {
      QPainter painter(&bitmap);

      QPoint particleCenter(particle.getLocation().x,
			    particle.getLocation().y);

      painter.drawEllipse(particleCenter,
			  5,
			  5);

      painter.drawLine(particle.getLocation().x,
		       particle.getLocation().y,
		       5 * std::cos(particle.getLocation().heading) + particle.getLocation().x,
		       5 * std::sin(particle.getLocation().heading) + particle.getLocation().y);
    }
Пример #2
0
void
Scene::InitFromJson(
    const char* filepath
    )
{
    // -- Parse JSON
    Json::Value root;
    bool success = ParseJson(filepath, root);
    if (!success) {
        // Failed parsing JSON
        return;
    }

    // -- Get container information
    const Json::Value containerDimJson = root["containerDim"];

    glm::vec3 containerDim(
        containerDimJson["scaleX"].asFloat(),
        containerDimJson["scaleY"].asFloat(),
        containerDimJson["scaleZ"].asFloat()
        );

    // Create geometry for the container
    m_fluidContainer = new Box(DrawMode_Wireframe);
    m_fluidContainer->Scale(containerDim.x, containerDim.y, containerDim.z);
    m_fluidContainer->Create();

    // -- Get particle information
    const Json::Value particleDimJson = root["particleDim"];
    glm::vec3 particleDim(
        particleDimJson["boundX"].asFloat(),
        particleDimJson["boundY"].asFloat(),
        particleDimJson["boundZ"].asFloat()
        );

    const Json::Value particleCenterJson = root["particleCenter"];
    glm::vec3 particleCenter(
        particleCenterJson["centerX"].asFloat(),
        particleCenterJson["centerY"].asFloat(),
        particleCenterJson["centerZ"].asFloat()
        );

    const float tankHeight = root["tankHeight"].asFloat();
    const float separation = root["particleSeparation"].asFloat();
    const float cellSize = root["cellSize"].asFloat();
    const float stiffness = root["stiffness"].asFloat();
    const float viscosity = root["viscosity"].asFloat();
    const float mass = root["mass"].asFloat();
    const float restDensity = root["restDensity"].asFloat();

    // -- Initialize fluid solvers
    m_fluidSolver = new SPHSolver(
        containerDim,
        particleDim,
        particleCenter,
        tankHeight,
        separation,
        cellSize,
        stiffness,
        viscosity,
        mass,
        restDensity
        );

    // -- Initialize fluid geo
    m_fluidGeo = new FluidGeo(
        m_fluidSolver->ParticlePositions(),
        m_fluidSolver->ParticleVelocities(),
        m_fluidSolver->ParticleSpawnTimes(),
        m_fluidSolver->ParticleColors()
        );
    m_fluidGeo->Create();

    // -- Solid object
    if (m_enableTestBox1) {
        CreateTestBoxOne();
    }

    if (m_enableTestBox2) {
        CreateTestBoxTwo();
    }
}