/******************************************************************************
* 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);
}
Example #2
0
void GvParticle::update(float dt) 
{

	updateParticles(dt);
 	createParticles(dt*rate);
	if (getNumParticles() > maxCount) 
	{
		deleteParticles(getNumParticles() - maxCount);
	}

}
Example #3
0
bool ModuleParticle::CleanUp(){
	deleteParticles();
	return true;
}