📄 mgcbezierrectangle2.cpp
字号:
fDSqr*rkBP.m_akXstt[0]);
akXt[uiI0M] = 0.5*(akXt[rkBP.m_uiI00] + akXt[rkBP.m_uiI01]);
akXs[uiI1M] = 0.5*(akXs[rkBP.m_uiI10] + akXs[rkBP.m_uiI11] -
fDSqr*rkBP.m_akXstt[1]);
akXt[uiI1M] = 0.5*(akXt[rkBP.m_uiI10] + akXt[rkBP.m_uiI11]);
kXsst0M = 0.5*(rkBP.m_akXsst[0] + rkBP.m_akXsst[1]);
// center subdivision
akXs[uiIMM] = 0.5*(akXs[uiI0M] + akXs[uiI1M]);
akXt[uiIMM] = 0.5*(akXt[uiIM0] + akXt[uiIM1]);
}
// colors
MgcColor kCss0M, kCttM0;
if ( akColor )
{
// top and bottom s-edge subdivision
kCttM0 = 0.5*(rkBP.m_akCtt[0]+rkBP.m_akCtt[1]-fDSqr*rkCsstt);
akColor[uiIM0] = 0.5*(akColor[rkBP.m_uiI00] + akColor[rkBP.m_uiI10] -
fDSqr*rkBP.m_akCss[0]);
akColor[uiIM1] = 0.5*(akColor[rkBP.m_uiI01] + akColor[rkBP.m_uiI11] -
fDSqr*rkBP.m_akCss[1]);
// left and right t-edge subdivision
kCss0M = 0.5*(rkBP.m_akCss[0]+rkBP.m_akCss[1]-fDSqr*rkCsstt);
akColor[uiI0M] = 0.5*(akColor[rkBP.m_uiI00] + akColor[rkBP.m_uiI01] -
fDSqr*rkBP.m_akCtt[0]);
akColor[uiI1M] = 0.5*(akColor[rkBP.m_uiI10] + akColor[rkBP.m_uiI11] -
fDSqr*rkBP.m_akCtt[1]);
// center subdivision
akColor[uiIMM] = 0.5*(akColor[uiI0M] + akColor[uiI1M] - fDSqr*kCss0M);
}
// textures
MgcVector2 kTss0M, kTttM0;
if ( akTexture )
{
// top and bottom s-edge subdivision
kTttM0 = 0.5*(rkBP.m_akTtt[0]+rkBP.m_akTtt[1]-fDSqr*rkTsstt);
akTexture[uiIM0] = 0.5*(akTexture[rkBP.m_uiI00] +
akTexture[rkBP.m_uiI10] - fDSqr*rkBP.m_akTss[0]);
akTexture[uiIM1] = 0.5*(akTexture[rkBP.m_uiI01] +
akTexture[rkBP.m_uiI11] - fDSqr*rkBP.m_akTss[1]);
// left and right t-edge subdivision
kTss0M = 0.5*(rkBP.m_akTss[0]+rkBP.m_akTss[1]-fDSqr*rkTsstt);
akTexture[uiI0M] = 0.5*(akTexture[rkBP.m_uiI00] +
akTexture[rkBP.m_uiI01] - fDSqr*rkBP.m_akTtt[0]);
akTexture[uiI1M] = 0.5*(akTexture[rkBP.m_uiI10] +
akTexture[rkBP.m_uiI11] - fDSqr*rkBP.m_akTtt[1]);
// center subdivision
akTexture[uiIMM] = 0.5*(akTexture[uiI0M] + akTexture[uiI1M] -
fDSqr*kTss0M);
}
// recurse on four children
if ( uiLevel > 0 )
{
uiLevel--;
fDSqr *= 0.25;
BlockParameters kSubBP;
// subblock [s0,sM]x[t0,tM]
kSubBP.m_uiI00 = rkBP.m_uiI00;
kSubBP.m_uiI01 = uiI0M;
kSubBP.m_uiI10 = uiIM0;
kSubBP.m_uiI11 = uiIMM;
kSubBP.m_akXss[0] = rkBP.m_akXss[0];
kSubBP.m_akXss[1] = kXss0M;
kSubBP.m_akXtt[0] = rkBP.m_akXtt[0];
kSubBP.m_akXtt[1] = kXttM0;
if ( akXs )
{
kSubBP.m_akXsst[0] = rkBP.m_akXsst[0];
kSubBP.m_akXsst[1] = kXsst0M;
kSubBP.m_akXstt[0] = rkBP.m_akXstt[0];
kSubBP.m_akXstt[1] = kXsttM0;
}
if ( akColor )
{
kSubBP.m_akCss[0] = rkBP.m_akCss[0];
kSubBP.m_akCss[1] = kCss0M;
kSubBP.m_akCtt[0] = rkBP.m_akCtt[0];
kSubBP.m_akCtt[1] = kCttM0;
}
if ( akTexture )
{
kSubBP.m_akTss[0] = rkBP.m_akTss[0];
kSubBP.m_akTss[1] = kTss0M;
kSubBP.m_akTtt[0] = rkBP.m_akTtt[0];
kSubBP.m_akTtt[1] = kTttM0;
}
Subdivide(uiLevel,fDSqr,akX,akXs,akXt,akColor,akTexture,rkXsstt,
rkCsstt,rkTsstt,kSubBP);
// subblock [s0,sM]x[tM,t1]
kSubBP.m_uiI00 = uiI0M;
kSubBP.m_uiI01 = rkBP.m_uiI01;
kSubBP.m_uiI10 = uiIMM;
kSubBP.m_uiI11 = uiIM1;
kSubBP.m_akXss[0] = kXss0M;
kSubBP.m_akXss[1] = rkBP.m_akXss[1];
kSubBP.m_akXtt[0] = rkBP.m_akXtt[0];
kSubBP.m_akXtt[1] = kXttM0;
if ( akXs )
{
kSubBP.m_akXsst[0] = kXsst0M;
kSubBP.m_akXsst[1] = rkBP.m_akXsst[1];
kSubBP.m_akXstt[0] = rkBP.m_akXstt[0];
kSubBP.m_akXstt[1] = kXsttM0;
}
if ( akColor )
{
kSubBP.m_akCss[0] = kCss0M;
kSubBP.m_akCss[1] = rkBP.m_akCss[1];
kSubBP.m_akCtt[0] = rkBP.m_akCtt[0];
kSubBP.m_akCtt[1] = kCttM0;
}
if ( akTexture )
{
kSubBP.m_akTss[0] = kTss0M;
kSubBP.m_akTss[1] = rkBP.m_akTss[1];
kSubBP.m_akTtt[0] = rkBP.m_akTtt[0];
kSubBP.m_akTtt[1] = kTttM0;
}
Subdivide(uiLevel,fDSqr,akX,akXs,akXt,akColor,akTexture,rkXsstt,
rkCsstt,rkTsstt,kSubBP);
// subblock [sM,s1]x[t0,tM]
kSubBP.m_uiI00 = uiIM0;
kSubBP.m_uiI01 = uiIMM;
kSubBP.m_uiI10 = rkBP.m_uiI10;
kSubBP.m_uiI11 = uiI1M;
kSubBP.m_akXss[0] = rkBP.m_akXss[0];
kSubBP.m_akXss[1] = kXss0M;
kSubBP.m_akXtt[0] = kXttM0;
kSubBP.m_akXtt[1] = rkBP.m_akXtt[1];
if ( akXs )
{
kSubBP.m_akXsst[0] = rkBP.m_akXsst[0];
kSubBP.m_akXsst[1] = kXsst0M;
kSubBP.m_akXstt[0] = kXsttM0;
kSubBP.m_akXstt[1] = rkBP.m_akXstt[1];
}
if ( akColor )
{
kSubBP.m_akCss[0] = rkBP.m_akCss[0];
kSubBP.m_akCss[1] = kCss0M;
kSubBP.m_akCtt[0] = kCttM0;
kSubBP.m_akCtt[1] = rkBP.m_akCtt[1];
}
if ( akTexture )
{
kSubBP.m_akTss[0] = rkBP.m_akTss[0];
kSubBP.m_akTss[1] = kTss0M;
kSubBP.m_akTtt[0] = kTttM0;
kSubBP.m_akTtt[1] = rkBP.m_akTtt[1];
}
Subdivide(uiLevel,fDSqr,akX,akXs,akXt,akColor,akTexture,rkXsstt,
rkCsstt,rkTsstt,kSubBP);
// subblock [sM,s1]x[tM,t1]
kSubBP.m_uiI00 = uiIMM;
kSubBP.m_uiI01 = uiIM1;
kSubBP.m_uiI10 = uiI1M;
kSubBP.m_uiI11 = rkBP.m_uiI11;
kSubBP.m_akXss[0] = kXss0M;
kSubBP.m_akXss[1] = rkBP.m_akXss[1];
kSubBP.m_akXtt[0] = kXttM0;
kSubBP.m_akXtt[1] = rkBP.m_akXtt[1];
if ( akXs )
{
kSubBP.m_akXsst[0] = kXsst0M;
kSubBP.m_akXsst[1] = rkBP.m_akXsst[1];
kSubBP.m_akXstt[0] = kXsttM0;
kSubBP.m_akXstt[1] = rkBP.m_akXstt[1];
}
if ( akColor )
{
kSubBP.m_akCss[0] = kCss0M;
kSubBP.m_akCss[1] = rkBP.m_akCss[1];
kSubBP.m_akCtt[0] = kCttM0;
kSubBP.m_akCtt[1] = rkBP.m_akCtt[1];
}
if ( akTexture )
{
kSubBP.m_akTss[0] = kTss0M;
kSubBP.m_akTss[1] = rkBP.m_akTss[1];
kSubBP.m_akTtt[0] = kTttM0;
kSubBP.m_akTtt[1] = rkBP.m_akTtt[1];
}
Subdivide(uiLevel,fDSqr,akX,akXs,akXt,akColor,akTexture,rkXsstt,
rkCsstt,rkTsstt,kSubBP);
}
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
MgcObject* MgcBezierRectangle2::Factory (MgcStream& rkStream)
{
MgcBezierRectangle2* pkObject = new MgcBezierRectangle2;
MgcStream::Link* pkLink = new MgcStream::Link(pkObject);
pkObject->Load(rkStream,pkLink);
return pkObject;
}
//----------------------------------------------------------------------------
void MgcBezierRectangle2::Load (MgcStream& rkStream, MgcStream::Link* pkLink)
{
MgcBezierRectangle::Load(rkStream,pkLink);
}
//----------------------------------------------------------------------------
void MgcBezierRectangle2::Link (MgcStream& rkStream, MgcStream::Link* pkLink)
{
MgcBezierRectangle::Link(rkStream,pkLink);
}
//----------------------------------------------------------------------------
bool MgcBezierRectangle2::Register (MgcStream& rkStream)
{
return MgcBezierRectangle::Register(rkStream);
}
//----------------------------------------------------------------------------
void MgcBezierRectangle2::Save (MgcStream& rkStream)
{
MgcBezierRectangle::Save(rkStream);
}
//----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -