📄 fcurve.cpp
字号:
//===========================================================================//
// File: fcurve.cpp //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved. //
//===========================================================================//
#include "gosFXHeaders.hpp"
//##########################################################################
//######################## Curve #############################
//##########################################################################
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
bool
gosFX::Curve::IsComplex()
{
Check_Object(this);
return
m_type==e_ComplexLinearType ||
m_type==e_ComplexComplexType ||
m_type==e_ComplexSplineType ||
m_type==e_ConstantComplexType ||
m_type==e_ConstantLinearType ||
m_type==e_ConstantSplineType ||
m_type==e_SplineSplineType ||
m_type==e_SplineLinearType;
}
void
gosFX::Curve::Save(Stuff::MemoryStream *stream)
{
Check_Object(this);
switch(m_type)
{
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
SCurve->Save(stream);
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
SCurve->Save(stream);
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
SCurve->Save(stream);
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
SCurve->Save(stream);
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
SCurve->Save(stream);
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
SCurve->Save(stream);
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
SCurve->Save(stream);
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
SCurve->Save(stream);
}
break;
default:
break;
}
}
void
gosFX::Curve::Load(
Stuff::MemoryStream *stream,
int gfx_version
)
{
Check_Object(this);
switch(m_type)
{
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
SCurve->Load(stream, gfx_version);
}
break;
default:
break;
}
}
void
gosFX::Curve::SetSeedFlagIfComplex(bool vflag)
{
Check_Object(this);
switch(m_type)
{
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
SCurve->m_seeded=vflag;
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
SCurve->m_seeded=vflag;
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
SCurve->m_seeded=vflag;
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
SCurve->m_seeded=vflag;
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
SCurve->m_seeded=vflag;
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
SCurve->m_seeded=vflag;
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
SCurve->m_seeded=vflag;
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
SCurve->m_seeded=vflag;
}
break;
default:
break;
}
}
int
gosFX::Curve::GetSeedFlagIfComplex()
{
Check_Object(this);
switch(m_type)
{
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
return SCurve->m_seeded?1:0;
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
return SCurve->m_seeded?1:0;
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
return SCurve->m_seeded?1:0;
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
return SCurve->m_seeded?1:0;
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
return SCurve->m_seeded?1:0;
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
return SCurve->m_seeded?1:0;
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
return SCurve->m_seeded?1:0;
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
return SCurve->m_seeded?1:0;
}
break;
default:
break;
}
return -1;
}
Stuff::Scalar
gosFX::Curve::ExpensiveCompute(Stuff::Scalar tme,int curvenum)
{
Check_Object(this);
switch(m_type)
{
case e_ConstantType:
{
ConstantCurve *SCurve=(ConstantCurve *)this;
return SCurve->ComputeValue(tme,0.0f);
}
break;
case e_LinearType:
{
LinearCurve *SCurve=(LinearCurve *)this;
return SCurve->ComputeValue(tme,0.0f);
}
break;
case e_SplineType:
{
SplineCurve *SCurve=(SplineCurve *)this;
return SCurve->ComputeValue(tme,0.0f);
}
break;
case e_ComplexType:
{
ComplexCurve *SCurve=(ComplexCurve *)this;
return SCurve->ComputeValue(tme,0.0f);
}
break;
case e_ComplexLinearType:
{
SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *SCurve=(SeededCurveOf<ComplexCurve, LinearCurve,Curve::e_ComplexLinearType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
case e_ComplexComplexType:
{
SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *SCurve=(SeededCurveOf<ComplexCurve, ComplexCurve,e_ComplexComplexType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
case e_ComplexSplineType:
{
SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *SCurve=(SeededCurveOf<ComplexCurve, SplineCurve,e_ComplexSplineType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
case e_ConstantComplexType:
{
SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *SCurve=(SeededCurveOf<ConstantCurve,ComplexCurve,e_ConstantComplexType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
case e_ConstantLinearType:
{
SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *SCurve=(SeededCurveOf<ConstantCurve,LinearCurve,e_ConstantLinearType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
case e_ConstantSplineType:
{
SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *SCurve=(SeededCurveOf<ConstantCurve,SplineCurve,e_ConstantSplineType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
case e_SplineLinearType:
{
SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *SCurve=(SeededCurveOf<SplineCurve,LinearCurve,e_SplineLinearType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
case e_SplineSplineType:
{
SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *SCurve=(SeededCurveOf<SplineCurve,SplineCurve,e_SplineSplineType> *)this;
if(curvenum==0)
return SCurve->m_ageCurve.ExpensiveCompute(tme,curvenum);
else
return SCurve->m_seedCurve.ExpensiveCompute(tme,curvenum);
}
break;
default:
break;
}
return 0.0f;
}
void
gosFX::Curve::ExpensiveComputeRange(
Stuff::Scalar *low,
Stuff::Scalar *hi,
int curvenum
)
{
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -