Método IDCompositionAnimation::AddCubic (dcompanimation.h)
Adiciona um segmento polinomial cúbico à função de animação.
Sintaxe
HRESULT AddCubic(
[in] double beginOffset,
[in] float constantCoefficient,
[in] float linearCoefficient,
[in] float quadraticCoefficient,
[in] float cubicCoefficient
);
Parâmetros
[in] beginOffset
Tipo: duplo
O deslocamento, em segundos, desde o início da função de animação até o ponto em que esse segmento deve entrar em vigor.
[in] constantCoefficient
Tipo: float
O coeficiente constante do polinomial.
[in] linearCoefficient
Tipo: float
O coeficiente linear do polinomial.
[in] quadraticCoefficient
Tipo: float
O coeficiente quadrático do polinomial.
[in] cubicCoefficient
Tipo: float
O coeficiente cúbico do polinomial.
Valor retornado
Tipo: HRESULT
Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT. Consulte Códigos de Erro do DirectComposition para obter uma lista de códigos de erro.
Comentários
Um segmento cúbico faz a transição do tempo ao longo de um polinomial cúbico. Para uma determinada entrada de tempo (t), o valor de saída é fornecido pela equação a seguir.
x(t) = at Consigo + bt² + ct + d
Esse método falhará se qualquer um dos parâmetros for NaN, infinito positivo ou infinito negativo.
Como os segmentos de animação devem ser adicionados em ordem crescente, esse método falhará se o parâmetro beginOffset for menor ou igual ao parâmetro beginOffset do segmento anterior, se houver.
Esse segmento de animação permanece em vigor até a hora de início do próximo segmento na função de animação. Se a função de animação não contiver mais segmentos, esse segmento permanecerá em vigor indefinidamente.
Se todos os coeficientes, exceto constantCoefficient , forem zero, o valor desse segmento permanecerá constante ao longo do tempo e a animação não causará uma recomposição durante o segmento.
Exemplos
O exemplo a seguir cria uma função de animação com dois segmentos polinômios cúbicos.
HRESULT DoAnimatedRotation(IDCompositionDevice *pDevice,
IDCompositionRotateTransform *pRotateTransform,
IDCompositionVisual *pVisual,
float animationTime)
{
HRESULT hr = S_OK;
IDCompositionAnimation *pAnimation = nullptr;
// Create an animation object.
hr = pDevice->CreateAnimation(&pAnimation);
if (SUCCEEDED(hr))
{
// Create the animation function by adding cubic polynomial segments.
// For a given time input (t), the output value is
// a*t^3 + b* t^2 + c*t + d.
//
// The following segment will rotate the visual clockwise.
pAnimation->AddCubic(
0.0, // Begin offset
0.0, // Constant coefficient - d
(360.0f * 1.0f) / animationTime, // Linear coefficient - c
0.0, // Quadratic coefficient - b
0.0); // Cubic coefficient - a
// The following segment will rotate the visual counterclockwise.
pAnimation->AddCubic(
animationTime,
0.0,
-(360.0f * 1.0f) / animationTime,
0.0,
0.0);
// Set the end of the animation.
pAnimation->End(
2 * animationTime, // End offset
0.0); // End value
// Apply the animation to the Angle property of the
// rotate transform.
hr = pRotateTransform->SetAngle(pAnimation);
}
if (SUCCEEDED(hr))
{
// Apply the rotate transform object to a visual.
hr = pVisual->SetTransform(pRotateTransform);
}
if (SUCCEEDED(hr))
{
// Commit the changes to the composition.
hr = pDevice->Commit();
}
SafeRelease(&pAnimation);
return hr;
}
Requisitos
Cliente mínimo com suporte | Windows 8 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2012 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | dcompanimation.h |
Biblioteca | Dcomp.lib |
DLL | Dcomp.dll |