Автоматизированное редактирование частиц в компьютерной графике

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

UCCESS)

data.pMaxCount = EXPL_MAX;

 

//read all version parameters (obligatory)

QueryIntAttribute(START_COUNT_ATTR,&data.pCountOnStart)!=TIXML_SUCCESS||">if(next_element_ptr->QueryIntAttribute(START_COUNT_ATTR, &data.pCountOnStart) != TIXML_SUCCESS ||

QueryDoubleAttribute(LIFE_TIME_ATTR,&data.pLifeTime)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(LIFE_TIME_ATTR, &data.pLifeTime) != TIXML_SUCCESS ||

QueryDoubleAttribute(APPEAR_DELAY_ATTR,&data.pAppearDelay)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(APPEAR_DELAY_ATTR, &data.pAppearDelay) != TIXML_SUCCESS ||

QueryDoubleAttribute(PARTICLE_SPEED_X_ATTR,&data.pMoveSpeedX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PARTICLE_SPEED_X_ATTR, &data.pMoveSpeedX) != TIXML_SUCCESS ||

QueryDoubleAttribute(PARTICLE_SPEED_Y_ATTR,&data.pMoveSpeedY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PARTICLE_SPEED_Y_ATTR, &data.pMoveSpeedY) != TIXML_SUCCESS ||

QueryDoubleAttribute(GRAVITY_X_ATTR,&data.pGravityX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GRAVITY_X_ATTR, &data.pGravityX) != TIXML_SUCCESS ||

QueryDoubleAttribute(GRAVITY_Y_ATTR,&data.pGravityY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GRAVITY_Y_ATTR, &data.pGravityY) != TIXML_SUCCESS ||

QueryDoubleAttribute(APPEAR_BOX_W_ATTR,&data.pAppearBoxSize.width)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(APPEAR_BOX_W_ATTR, &data.pAppearBoxSize.width) != TIXML_SUCCESS ||

QueryDoubleAttribute(APPEAR_BOX_H_ATTR,&data.pAppearBoxSize.height)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(APPEAR_BOX_H_ATTR, &data.pAppearBoxSize.height) != TIXML_SUCCESS ||

QueryDoubleAttribute(RED_BEGIN_ATTR,&data.pRedBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(RED_BEGIN_ATTR, &data.pRedBegin) != TIXML_SUCCESS ||

QueryDoubleAttribute(RED_END_ATTR,&data.pRedEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(RED_END_ATTR, &data.pRedEnd) != TIXML_SUCCESS ||

QueryDoubleAttribute(GREEN_BEGIN_ATTR,&data.pGreenBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GREEN_BEGIN_ATTR, &data.pGreenBegin) != TIXML_SUCCESS ||

QueryDoubleAttribute(GREEN_END_ATTR,&data.pGreenEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(GREEN_END_ATTR, &data.pGreenEnd) != TIXML_SUCCESS ||

QueryDoubleAttribute(BLUE_BEGIN_ATTR,&data.pBlueBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(BLUE_BEGIN_ATTR, &data.pBlueBegin) != TIXML_SUCCESS ||

QueryDoubleAttribute(BLUE_END_ATTR,&data.pBlueEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(BLUE_END_ATTR, &data.pBlueEnd) != TIXML_SUCCESS ||

QueryDoubleAttribute(ALPHA_BEGIN_ATTR,&data.pAlphaBegin)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(ALPHA_BEGIN_ATTR, &data.pAlphaBegin) != TIXML_SUCCESS ||

QueryDoubleAttribute(ALPHA_END_ATTR,&data.pAlphaEnd)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(ALPHA_END_ATTR, &data.pAlphaEnd) != TIXML_SUCCESS ||

QueryDoubleAttribute(SCALE_BEGIN_W_ATTR,&data.pKFScaleBeginW)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_BEGIN_W_ATTR, &data.pKFScaleBeginW) != TIXML_SUCCESS ||

QueryDoubleAttribute(SCALE_BEGIN_H_ATTR,&data.pKFScaleBeginH)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_BEGIN_H_ATTR, &data.pKFScaleBeginH) != TIXML_SUCCESS ||

QueryDoubleAttribute(SCALE_END_W_ATTR,&data.pKFScaleEndW)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_END_W_ATTR, &data.pKFScaleEndW) != TIXML_SUCCESS ||

QueryDoubleAttribute(SCALE_END_H_ATTR,&data.pKFScaleEndH)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(SCALE_END_H_ATTR, &data.pKFScaleEndH) != TIXML_SUCCESS ||

QueryDoubleAttribute(DISPERSION_X_ATTR,&data.pKFDispersionX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(DISPERSION_X_ATTR, &data.pKFDispersionX) != TIXML_SUCCESS ||

QueryDoubleAttribute(DISPERSION_Y_ATTR,&data.pKFDispersionY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(DISPERSION_Y_ATTR, &data.pKFDispersionY) != TIXML_SUCCESS ||

QueryDoubleAttribute(PS_X_ATTR,&data.initialX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_X_ATTR, &data.initialX) != TIXML_SUCCESS ||

QueryDoubleAttribute(PS_Y_ATTR,&data.initialY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_Y_ATTR, &data.initialY) != TIXML_SUCCESS ||

QueryDoubleAttribute(PS_SPEED_X_ATTR,&data.speedChangeX)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_SPEED_X_ATTR, &data.speedChangeX) != TIXML_SUCCESS ||

QueryDoubleAttribute(PS_SPEED_Y_ATTR,&data.speedChangeY)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(PS_SPEED_Y_ATTR, &data.speedChangeY) != TIXML_SUCCESS ||

QueryDoubleAttribute(START_DELAY_ATTR,&data.startDelay)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(START_DELAY_ATTR, &data.startDelay) != TIXML_SUCCESS ||

QueryDoubleAttribute(STOP_DELAY_ATTR,&data.stopDelay)!=TIXML_SUCCESS||"> next_element_ptr->QueryDoubleAttribute(STOP_DELAY_ATTR, &data.stopDelay) != TIXML_SUCCESS ||

QueryDoubleAttribute(ROTATE_ATTR,&data.pAngleRotate)!=TIXML_SUCCESS)"> next_element_ptr->QueryDoubleAttribute(ROTATE_ATTR, &data.pAngleRotate) != TIXML_SUCCESS)

return false;

 

currentX = data.initialX;

currentY = data.initialY;

setParticleTex(next_element_ptr->Attribute(TEXTURE_ATTR));

element_ptr = next_element_ptr;

return true;

}

 

void ParticleSystem::callback(double sec_interval)

{

if(isFinishedb)

return;

 

//check for startInTime

startInTime -= sec_interval;

//if (((int)startInTime*maj_kof) > 0)

if(startInTime > 0.0)

return;

else

startInTime = 0.0;

 

//change DX DY

currentX += data.speedChangeX* sec_interval;

currentY += data.speedChangeY* sec_interval;

 

//check for the next particle

timeForNextParticle -= sec_interval;

double addParticleTime = 1.0;

if (timeForNextParticle <= 0.0)

{

addParticleTime = timeForNextParticle;

timeForNextParticle = data.pAppearDelay;

}

 

bool need_to_finish = true;

if(isRunb)

{

need_to_finish = false;

stopInTime -= sec_interval;

//if (((int)stopInTime*maj_kof) <= 0)

if(stopInTime <= 0.0)

stop();

}

 

//calculate entire number of particles alive

int curr_numof_particles = 0;

for(int i=0; i<EXPL_MAX; i++)

if(pTM[i] > 0.0)

++curr_numof_particles;

 

//process particles

for (int i=0; i<EXPL_MAX; i++)

{

pTM[i] -= sec_interval;

if (pTM[i] <= 0.0)

{

if (addParticleTime <= 0.0 && curr_numof_particles < data.pMaxCount && isRunb)

{

//add new particle

addParticleTime += data.pAppearDelay;

++curr_numof_particles;

initParticleAtIndex(i);

}

}

else

{

need_to_finish = false;

 

pX[i] += sec_interval * pDx[i];

pY[i] += sec_interval * pDy[i];

pDx[i] += sec_interval * data.pGravityX;

pDy[i] += sec_interval * data.pGravityY;

}

}

if(need_to_finish)

finish();

}

 

void ParticleSystem::setBoundColor(wxColour color)

{

boundColor = color;

}

 

wxColour ParticleSystem::getBoundColor()

{

return boundColor;

}