Metodo IDCompositionAnimation::AddCubic (dcompanimation.h)
Aggiunge un segmento polinomiale cubico alla funzione di animazione.
Sintassi
HRESULT AddCubic(
[in] double beginOffset,
[in] float constantCoefficient,
[in] float linearCoefficient,
[in] float quadraticCoefficient,
[in] float cubicCoefficient
);
Parametri
[in] beginOffset
Tipo: double
Offset, espresso in secondi, dall'inizio della funzione di animazione al punto in cui questo segmento deve avere effetto.
[in] constantCoefficient
Tipo: float
Coefficiente costante del polinomio.
[in] linearCoefficient
Tipo: float
Coefficiente lineare del polinomio.
[in] quadraticCoefficient
Tipo: float
Coefficiente quadratico del polinomio.
[in] cubicCoefficient
Tipo: float
Coefficiente cubico del polinomio.
Valore restituito
Tipo: HRESULT
Se la funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT . Per un elenco di codici di errore, vedere Codici di errore directComposition .
Commenti
Un segmento cubico passa il tempo lungo un polinomio cubico. Per un determinato input temporale (t), il valore di output viene assegnato dall'equazione seguente.
x(t) = at² + bt² + ct + d
Questo metodo ha esito negativo se uno dei parametri è NaN, infinito positivo o infinito negativo.
Poiché i segmenti di animazione devono essere aggiunti in ordine crescente, questo metodo ha esito negativo se il parametro beginOffset è minore o uguale al parametro beginOffset del segmento precedente, se presente.
Questo segmento di animazione rimane attivo fino all'ora di inizio del segmento successivo nella funzione di animazione. Se la funzione di animazione non contiene più segmenti, questo segmento rimane attivo per un periodo illimitato.
Se tutti i coefficienti tranne constantCoefficient sono zero, il valore di questo segmento rimane costante nel tempo e l'animazione non causa una ricomposizione per la durata del segmento.
Esempio
L'esempio seguente crea una funzione di animazione con due segmenti polinomiali cubici.
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;
}
Requisiti
Client minimo supportato | Windows 8 [solo app desktop] |
Server minimo supportato | Windows Server 2012 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | dcompanimation.h |
Libreria | Dcomp.lib |
DLL | Dcomp.dll |