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); }
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(); } }