| 1397 | } |
| 1398 | |
| 1399 | void |
| 1400 | RotoDrawableItem::getTransformAtTime(double time, |
| 1401 | Transform::Matrix3x3* matrix) const |
| 1402 | { |
| 1403 | double tx = _imp->translate->getValueAtTime(time, 0); |
| 1404 | double ty = _imp->translate->getValueAtTime(time, 1); |
| 1405 | double sx = _imp->scale->getValueAtTime(time, 0); |
| 1406 | double sy = _imp->scaleUniform->getValueAtTime(time) ? sx : _imp->scale->getValueAtTime(time, 1); |
| 1407 | double skewX = _imp->skewX->getValueAtTime(time, 0); |
| 1408 | double skewY = _imp->skewY->getValueAtTime(time, 0); |
| 1409 | double rot = _imp->rotate->getValueAtTime(time, 0); |
| 1410 | |
| 1411 | rot = Transform::toRadians(rot); |
| 1412 | double centerX = _imp->center->getValueAtTime(time, 0); |
| 1413 | double centerY = _imp->center->getValueAtTime(time, 1); |
| 1414 | bool skewOrderYX = _imp->skewOrder->getValueAtTime(time) == 1; |
| 1415 | *matrix = Transform::matTransformCanonical(tx, ty, sx, sy, skewX, skewY, skewOrderYX, rot, centerX, centerY); |
| 1416 | |
| 1417 | Transform::Matrix3x3 extraMat; |
| 1418 | extraMat.a = _imp->extraMatrix->getValueAtTime(time, 0); extraMat.b = _imp->extraMatrix->getValueAtTime(time, 1); extraMat.c = _imp->extraMatrix->getValueAtTime(time, 2); |
| 1419 | extraMat.d = _imp->extraMatrix->getValueAtTime(time, 3); extraMat.e = _imp->extraMatrix->getValueAtTime(time, 4); extraMat.f = _imp->extraMatrix->getValueAtTime(time, 5); |
| 1420 | extraMat.g = _imp->extraMatrix->getValueAtTime(time, 6); extraMat.h = _imp->extraMatrix->getValueAtTime(time, 7); extraMat.i = _imp->extraMatrix->getValueAtTime(time, 8); |
| 1421 | *matrix = Transform::matMul(*matrix, extraMat); |
| 1422 | } |
| 1423 | |
| 1424 | /** |
| 1425 | * @brief Set the transform at the given time |
no test coverage detected