📄 fcurve.cpp
字号:
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.ComputeRange(low,hi);
else
SCurve->m_seedCurve.ComputeRange(low,hi);
}
break;
default:
break;
}
}
void
gosFX::Curve::ExpensiveComputeRange(
Stuff::Scalar *low,
Stuff::Scalar *hi
)
{
Check_Object(this);
Check_Pointer(low);
Check_Pointer(hi);
switch(m_type)
{
case e_ConstantType:
{
ConstantCurve *SCurve=(ConstantCurve *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_LinearType:
{
LinearCurve *SCurve=(LinearCurve *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_SplineType:
{
SplineCurve *SCurve=(SplineCurve *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_ComplexType:
{
ComplexCurve *SCurve=(ComplexCurve *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
SCurve->ComputeRange(low,hi);
}
break;
default:
break;
}
}
Stuff::Scalar
gosFX::Curve::Mid(int curvenum)
{
Stuff::Scalar min,max;
ExpensiveComputeRange(&min,&max,curvenum);
return min+(max-min)*0.5f;
}
void
gosFX::Curve::TranslateTo(Stuff::Scalar pos,int curvenum)
{
Check_Object(this);
switch(m_type)
{
case e_ConstantType:
{
ConstantCurve *SCurve=(ConstantCurve *)this;
SCurve->SetCurve(pos);
}
break;
case e_LinearType:
{
LinearCurve *SCurve=(LinearCurve *)this;
Stuff::Scalar s;
s=SCurve->ComputeSlope(0.0f);
SCurve->SetCurve(pos,pos+s);
}
break;
case e_SplineType:
{
SplineCurve *SCurve=(SplineCurve *)this;
Stuff::Scalar v0,v1,s0,s1;
v0=SCurve->ComputeValue(0.0f,0.0f);
v1=SCurve->ComputeValue(1.0f,0.0f);
s0=SCurve->ComputeSlope(0.0f);
s1=SCurve->ComputeSlope(1.0f);
v1+=pos-v0;
v0=pos;
SCurve->SetCurve(v0,s0,v1,s1);
}
break;
case e_ComplexType:
{
ComplexCurve *SCurve=(ComplexCurve *)this;
Stuff::Scalar delta,x1,x2,y1,y2,slp;
delta=pos-SCurve->ComputeValue(0.0f,0.0f);
for(int key=0;key<SCurve->GetKeyCount()-1;key++)
{
x1=(*SCurve)[key].m_time;
x2=(*SCurve)[key+1].m_time;
y1=SCurve->ComputeValue(x1,0.0f);
y2=SCurve->ComputeValue(x2,0.0f);
y1+=delta;
y2+=delta;
(*SCurve)[key].SetLinearKey(x1,y1,y2,x2-x1);
}
x1=(*SCurve)[key].m_time;
y1=SCurve->ComputeValue(x1,0.0f);
y1+=delta;
slp=(*SCurve)[key].m_slope;
(*SCurve)[SCurve->GetKeyCount()-1].SetLinearKey(x1,y1,y1+slp*0.1f,0.1f);
}
break;
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateTo(pos,curvenum);
else
SCurve->m_seedCurve.TranslateTo(pos,curvenum);
}
break;
default:
break;
}
}
void
gosFX::Curve::TranslateBy(Stuff::Scalar delta,int curvenum)
{
Check_Object(this);
switch(m_type)
{
case e_ConstantType:
{
ConstantCurve *SCurve=(ConstantCurve *)this;
SCurve->SetCurve(SCurve->ComputeValue(0.0f,0.0f)+delta);
}
break;
case e_LinearType:
{
LinearCurve *SCurve=(LinearCurve *)this;
Stuff::Scalar s,v;
s=SCurve->ComputeSlope(0.0f);
v=SCurve->ComputeValue(0.0f,0.0f);
SCurve->SetCurve(v+delta,v+delta+s);
}
break;
case e_SplineType:
{
SplineCurve *SCurve=(SplineCurve *)this;
Stuff::Scalar v0,v1,s0,s1;
v0=SCurve->ComputeValue(0.0f,0.0f);
v1=SCurve->ComputeValue(1.0f,0.0f);
s0=SCurve->ComputeSlope(0.0f);
s1=SCurve->ComputeSlope(1.0f);
v1+=delta;
v0+=delta;
SCurve->SetCurve(v0,s0,v1,s1);
}
break;
case e_ComplexType:
{
ComplexCurve *SCurve=(ComplexCurve *)this;
Stuff::Scalar x1,x2,y1,y2;
for(int key=0;key<SCurve->GetKeyCount()-1;key++)
{
x1=(*SCurve)[key].m_time;
x2=(*SCurve)[key+1].m_time;
y1=SCurve->ComputeValue(x1,0.0f);
y2=SCurve->ComputeValue(x2,0.0f);
y1+=delta;
y2+=delta;
(*SCurve)[key].SetLinearKey(x1,y1,y2,x2-x1);
}
x1=(*SCurve)[key].m_time;
y1=SCurve->ComputeValue(x1,0.0f);
y1+=delta;
(*SCurve)[SCurve->GetKeyCount()-1].SetLinearKey(x1,y1,y1,1.0f);
}
break;
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateBy(delta,curvenum);
else
SCurve->m_seedCurve.TranslateBy(delta,curvenum);
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateBy(delta,curvenum);
else
SCurve->m_seedCurve.TranslateBy(delta,curvenum);
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateBy(delta,curvenum);
else
SCurve->m_seedCurve.TranslateBy(delta,curvenum);
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateBy(delta,curvenum);
else
SCurve->m_seedCurve.TranslateBy(delta,curvenum);
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateBy(delta,curvenum);
else
SCurve->m_seedCurve.TranslateBy(delta,curvenum);
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateBy(delta,curvenum);
else
SCurve->m_seedCurve.TranslateBy(delta,curvenum);
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
if(curvenum==0)
SCurve->m_ageCurve.TranslateBy(delta,curvenum);
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -