void TransformTest::testEstimateNonIsometric() { // Scaling and translation PassPointList passpoints; passpoints.resize(3); passpoints[0].src_coords = MapCoordF { 128.0, 0.0 }; passpoints[0].dest_coords = MapCoordF { 64.0, 64.0 }; passpoints[1].src_coords = MapCoordF { 256.0, 0.0 }; passpoints[1].dest_coords = MapCoordF { 96.0, 64.0 }; passpoints[2].src_coords = MapCoordF { 128.0, 128.0 }; passpoints[2].dest_coords = MapCoordF { 64.0, 96.0 }; QTransform qt; QVERIFY(passpoints.estimateNonIsometricSimilarityTransform(&qt)); QVERIFY(qt.isTranslating()); QVERIFY(qt.isScaling()); QCOMPARE(int(qt.type()), int(QTransform::TxScale)); QCOMPARE(qt.map(passpoints[0].src_coords), QPointF{passpoints[0].dest_coords}); QCOMPARE(qt.map(passpoints[1].src_coords), QPointF{passpoints[1].dest_coords}); QCOMPARE(qt.map(passpoints[2].src_coords), QPointF{passpoints[2].dest_coords}); auto t = TemplateTransform::fromQTransform(qt); QCOMPARE(t.template_x, MapCoord(32,64).nativeX()); QCOMPARE(t.template_y, MapCoord(32,64).nativeY()); QCOMPARE(t.template_scale_x, 0.25); QCOMPARE(t.template_scale_y, 0.25); QVERIFY(qAbs(t.template_rotation) < 0.000001); // Rotation passpoints[0].src_coords = MapCoordF { 0.0, 0.0 }; passpoints[0].dest_coords = MapCoordF { 0.0, 0.0 }; passpoints[1].src_coords = MapCoordF { 5.0, 0.0 }; passpoints[1].dest_coords = MapCoordF { 4.0, -3.0 }; passpoints[2].src_coords = MapCoordF { 0.0, 5.0 }; passpoints[2].dest_coords = MapCoordF { 3.0, 4.0 }; QVERIFY(passpoints.estimateNonIsometricSimilarityTransform(&qt)); QVERIFY(qt.isRotating()); QCOMPARE(int(qt.type()), int(QTransform::TxRotate)); QCOMPARE(qt.map(passpoints[0].src_coords), QPointF{passpoints[0].dest_coords}); QCOMPARE(qt.map(passpoints[1].src_coords), QPointF{passpoints[1].dest_coords}); QCOMPARE(qt.map(passpoints[2].src_coords), QPointF{passpoints[2].dest_coords}); t = TemplateTransform::fromQTransform(qt); QCOMPARE(t.template_x, 0); QCOMPARE(t.template_y, 0); QCOMPARE(t.template_scale_x, 1.0); QCOMPARE(t.template_scale_y, 1.0); QCOMPARE(t.template_rotation, qAcos(passpoints[1].dest_coords.x() / passpoints[1].src_coords.x())); }
void TransformTest::testTransformTranslate() { MapCoord offset { 100.0, 100.0 }; QTransform qt; qt.translate(offset.x(), offset.y()); QVERIFY(qt.isTranslating()); QCOMPARE(int(qt.type()), int(QTransform::TxTranslate)); auto t = TemplateTransform::fromQTransform(qt); QCOMPARE(t.template_x, offset.nativeX()); QCOMPARE(t.template_y, offset.nativeY()); QCOMPARE(t.template_scale_x, 1.0); QCOMPARE(t.template_scale_y, 1.0); QCOMPARE(t.template_rotation, 0.0); }
void TransformTest::testTransformIdentity() { // Default QTransform: identity QTransform qt; QVERIFY(qt.isIdentity()); QCOMPARE(int(qt.type()), int(QTransform::TxNone)); // Default TemplateTransform: identity TemplateTransform t; // TemplateTransform list initialization, and assignment t = { 12, -3, 0.1, 2.0, 3.0 }; QCOMPARE(t.template_x, 12); QCOMPARE(t.template_y, -3); QCOMPARE(t.template_scale_x, 2.0); QCOMPARE(t.template_scale_y, 3.0); QCOMPARE(t.template_rotation, 0.1); // Now transfer the identity QTransform to the TemplateTransform t = TemplateTransform::fromQTransform(qt); QCOMPARE(t.template_x, 0); QCOMPARE(t.template_y, 0); QCOMPARE(t.template_scale_x, 1.0); QCOMPARE(t.template_scale_y, 1.0); QCOMPARE(t.template_rotation, 0.0); // Put something different in the QTransform qt.translate(4, 8); qt.rotate(1); qt.scale(2.0, 1.5); QVERIFY(qt.isAffine()); QVERIFY(!qt.isIdentity()); QVERIFY(qt.isTranslating()); QVERIFY(qt.isRotating()); QVERIFY(qt.isScaling()); }