/****************************************************************************** * Modifies the particle object. ******************************************************************************/ PipelineStatus SliceModifier::modifyParticles(TimePoint time, TimeInterval& validityInterval) { QString statusMessage = tr("%n input particles", 0, inputParticleCount()); // Compute filter mask. boost::dynamic_bitset<> mask(inputParticleCount()); size_t numRejected = filterParticles(mask, time, validityInterval); size_t numKept = inputParticleCount() - numRejected; if(createSelection() == false) { statusMessage += tr("\n%n particles deleted", 0, numRejected); statusMessage += tr("\n%n particles remaining", 0, numKept); if(numRejected == 0) return PipelineStatus(PipelineStatus::Success, statusMessage); // Delete the rejected particles. deleteParticles(mask, numRejected); } else { statusMessage += tr("\n%n particles selected", 0, numRejected); statusMessage += tr("\n%n particles unselected", 0, numKept); ParticlePropertyObject* selProperty = outputStandardProperty(ParticleProperty::SelectionProperty); OVITO_ASSERT(mask.size() == selProperty->size()); boost::dynamic_bitset<>::size_type i = 0; for(int& s : selProperty->intRange()) s = mask.test(i++); selProperty->changed(); } return PipelineStatus(PipelineStatus::Success, statusMessage); }
void GvParticle::update(float dt) { updateParticles(dt); createParticles(dt*rate); if (getNumParticles() > maxCount) { deleteParticles(getNumParticles() - maxCount); } }
bool ModuleParticle::CleanUp(){ deleteParticles(); return true; }