MCPcopy Create free account
hub / github.com/IppClub/Dora-SSR / getLocalWorld

Method getLocalWorld

Source/Node/Node.cpp:1066–1130  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1064}
1065
1066void Node::getLocalWorld(Matrix& localWorld) {
1067 if (!_transform) {
1068 localWorld = Matrix::Indentity;
1069 return;
1070 }
1071 auto& t = *_transform;
1072 if (t.z || t.angleX || t.angleY || t.scaleZ != 1.0f) {
1073 if (t.anchorPointX || t.anchorPointY) {
1074 /* scaleXYZ, rotateXYZ, translateXYZ */
1075 Matrix mtxBase;
1076 bx::mtxSRT(mtxBase.m,
1077 t.scaleX, t.scaleY, t.scaleZ,
1078 -bx::toRad(t.angleX), -bx::toRad(t.angleY), -bx::toRad(t.angle),
1079 t.x, t.y, t.z);
1080 if (t.skewX || t.skewY) {
1081 Matrix mtxTemp;
1082 {
1083 Matrix mtxSkew;
1084 /* skewXY */
1085 AffineTransform{
1086 1.0f, bx::tan(bx::toRad(t.skewY)),
1087 bx::tan(bx::toRad(t.skewX)), 1.0f,
1088 0.0f, 0.0f}
1089 .toMatrix(mtxSkew);
1090 Matrix::mulMtx(mtxTemp, mtxBase, mtxSkew);
1091 }
1092 /* translateAnchorXY */
1093 Matrix mtxAnchor;
1094 bx::mtxTranslate(mtxAnchor.m, -t.anchorPointX, -t.anchorPointY, 0.0f);
1095 Matrix::mulMtx(localWorld, mtxTemp, mtxAnchor);
1096 } else {
1097 /* translateAnchorXY */
1098 Matrix mtxAnchor;
1099 bx::mtxTranslate(mtxAnchor.m, -t.anchorPointX, -t.anchorPointY, 0.0f);
1100 Matrix::mulMtx(localWorld, mtxBase, mtxAnchor);
1101 }
1102 } else {
1103 if (t.skewX || t.skewY) {
1104 /* scaleXYZ, rotateXYZ, translateXYZ */
1105 Matrix mtxBase;
1106 bx::mtxSRT(mtxBase.m,
1107 t.scaleX, t.scaleY, t.scaleZ,
1108 -bx::toRad(t.angleX), -bx::toRad(t.angleY), -bx::toRad(t.angle),
1109 t.x, t.y, t.z);
1110 Matrix mtxSkew;
1111 /* skewXY */
1112 AffineTransform{
1113 1.0f, bx::tan(bx::toRad(t.skewY)),
1114 bx::tan(bx::toRad(t.skewX)), 1.0f,
1115 0.0f, 0.0f}
1116 .toMatrix(mtxSkew);
1117 Matrix::mulMtx(localWorld, mtxBase, mtxSkew);
1118 } else {
1119 /* translateXYZ, rotateXYZ, scaleXYZ */
1120 bx::mtxSRT(localWorld.m,
1121 t.scaleX, t.scaleY, t.scaleZ,
1122 -bx::toRad(t.angleX), -bx::toRad(t.angleY), -bx::toRad(t.angle),
1123 t.x, t.y, t.z);

Callers

nothing calls this directly

Calls 4

mtxSRTFunction · 0.85
toRadFunction · 0.85
toMatrixMethod · 0.80
tanFunction · 0.50

Tested by

no test coverage detected