void CAnimatorOverlay::CumulativeEndTransform(/*[out, retval]*/ float *elements) { ISimpleOverlay2 *parent; get_Parent(&parent); Matrix m; if (parent) { float el[6]; parent->CumulativeTransform(el); Matrix cm(el[0], el[1], el[2], el[3], el[4], el[5]); m.Multiply(&cm); } m.Multiply(&getEndTransform()); m.GetElements(elements); }
STDMETHODIMP CAnimatorOverlay::CumulativeTransform(/*[out, retval]*/ float *elements) { if (elements == NULL) return E_POINTER; ISimpleOverlay2 *parent; get_Parent(&parent); Matrix m; if (parent) { float el[6]; parent->CumulativeTransform(el); Matrix cm(el[0], el[1], el[2], el[3], el[4], el[5]); m.Multiply(&cm); } m.Multiply(&getCurTransform()); m.GetElements(elements); return S_OK; }
STDMETHODIMP CGaugeOverlay::CumulativeTransform(/*[out, retval]*/ long size, long offset, REAL *elements) { if (elements == NULL) return E_POINTER; Matrix m; ISimpleOverlay2 *parent = NULL; get_Parent(&parent); if (parent) { REAL el[6]; parent->CumulativeTransform(el); Matrix cm(el[0], el[1], el[2], el[3], el[4], el[5]); m.Multiply(&cm); } PointF center((float)centerX, (float)centerY); m.Translate((float)(x-centerX), (float)(y-centerY)); m.RotateAt((float)span * offset / size + rotation, center); m.Scale((float)hScale, (float)vScale); m.GetElements(elements); return S_OK; }