#include "vtkResliceCursorRepresentation.h" #include "vtkMathUtilities.h" #include bool areEquals(double p1[3], double p2[3]) { return vtkMathUtilities::FuzzyCompare(p1[0], p2[0]) && vtkMathUtilities::FuzzyCompare(p1[1], p2[1]) && vtkMathUtilities::FuzzyCompare(p1[2], p2[2]); } bool areEquals(double p1[3], double p2[3], double epsilon) { return vtkMathUtilities::FuzzyCompare(p1[0], p2[0], epsilon) && vtkMathUtilities::FuzzyCompare(p1[1], p2[1], epsilon) && vtkMathUtilities::FuzzyCompare(p1[2], p2[2], epsilon); } int vtkResliceCursorRepresentationTest1(int, char*[]) { // BoundPlane natural basis simple std::array origin = { -1, -1, 0 }; std::array point1 = { 2, -1, 0 }; std::array point2 = { -1, 2, 0 }; std::array bounds = { 0, 1, 0, 1, -1, 1 }; int intersect = vtkResliceCursorRepresentation::BoundPlane( bounds.data(), origin.data(), point1.data(), point2.data()); std::array originExpected = { 0, 0, 0 }; std::array point1Expected = { 1, 0, 0 }; std::array point2Expected = { 0, 1, 0 }; if (intersect != 1 || !areEquals(origin.data(), originExpected.data()) || !areEquals(point1.data(), point1Expected.data()) || !areEquals(point2.data(), point2Expected.data())) { std::cerr << "Error during boundPlane natural basis simple" << std::endl; return EXIT_FAILURE; } // BoundPlane natural basis with offset origin = std::array({ -1, -1, -1.5 }); point1 = std::array({ 2, -1, -1.5 }); point2 = std::array({ -1, 2, -1.5 }); bounds = std::array({ 0, 1, 1, 2, -2, -1 }); intersect = vtkResliceCursorRepresentation::BoundPlane( bounds.data(), origin.data(), point1.data(), point2.data()); originExpected = std::array({ 0, 1, -1.5 }); point1Expected = std::array({ 1, 1, -1.5 }); point2Expected = std::array({ 0, 2, -1.5 }); if (intersect != 1 || !areEquals(origin.data(), originExpected.data()) || !areEquals(point1.data(), point1Expected.data()) || !areEquals(point2.data(), point2Expected.data())) { std::cerr << "Error during boundPlane natural basis with offset" << std::endl; return EXIT_FAILURE; } // BoundPlane oriented origin = std::array({ 0, 0, 0 }); point1 = std::array({ 1, 1, 0 }); point2 = std::array({ 0, 0, 1 }); bounds = std::array({ 0, 1, 0, 1, 0, 1 }); intersect = vtkResliceCursorRepresentation::BoundPlane( bounds.data(), origin.data(), point1.data(), point2.data()); originExpected = std::array({ 0, 0, 0 }); point1Expected = std::array({ 1, 1, 0 }); point2Expected = std::array({ 0, 0, 1 }); double epsilon = 0.000000001; if (intersect != 1 || !areEquals(origin.data(), originExpected.data(), epsilon) || !areEquals(point1.data(), point1Expected.data(), epsilon) || !areEquals(point2.data(), point2Expected.data(), epsilon)) { std::cerr << "Error during boundPlane oriented" << std::endl; return EXIT_FAILURE; } // BoundPlane no intersection origin = std::array({ 0, 0, 0 }); point1 = std::array({ 2, 0, 0 }); point2 = std::array({ 0, 2, 0 }); bounds = std::array({ 0, 1, 0, 1, 1, 2 }); intersect = vtkResliceCursorRepresentation::BoundPlane( bounds.data(), origin.data(), point1.data(), point2.data()); originExpected = std::array({ 0, 0, 0 }); point1Expected = std::array({ 2, 0, 0 }); point2Expected = std::array({ 0, 2, 0 }); if (intersect == 1 || !areEquals(origin.data(), originExpected.data()) || !areEquals(point1.data(), point1Expected.data()) || !areEquals(point2.data(), point2Expected.data())) { std::cerr << "Error during boundPlane oriented" << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }