예제 #1
0
        private static void AssertVolumeSlice(VolumeSlice actualSlice,
                                              int expectedRows, int expectedColumns,
                                              Vector3D expectedPositionPatient,
                                              Vector3D expectedRowOrientationPatient, Vector3D expectedColumnOrientationPatient,
                                              float expectedRowSpacing, float expectedColumnSpacing,
                                              float expectedSliceThickness, float?expectedSpacingBetweenSlices,
                                              string message = null, params object[] args)
        {
            const float tolerance = 1e-5f;
            var         msg       = !string.IsNullOrEmpty(message) ? "{0} (" + string.Format(message, args) + ")" : "{0}";

            Assert.AreEqual(expectedRows, actualSlice.Rows, msg, "Rows");
            Assert.AreEqual(expectedColumns, actualSlice.Columns, msg, "Columns");

            var imagePositionPatient = ImagePositionPatient.FromString(actualSlice.ImagePositionPatient);

            Assert.IsNotNull(imagePositionPatient, "ImagePositionPatient");

            var actualPositionPatient = new Vector3D((float)imagePositionPatient.X, (float)imagePositionPatient.Y, (float)imagePositionPatient.Z);

            if (!Vector3D.AreEqual(expectedPositionPatient, actualPositionPatient, tolerance))
            {
                Assert.AreEqual(expectedPositionPatient, actualPositionPatient, msg, "ImagePositionPatient");
            }

            var imageOrientationPatient = ImageOrientationPatient.FromString(actualSlice.ImageOrientationPatient);

            Assert.IsNotNull(imageOrientationPatient, "ImageOrientationPatient");

            var actualRowOrientationPatient    = new Vector3D((float)imageOrientationPatient.RowX, (float)imageOrientationPatient.RowY, (float)imageOrientationPatient.RowZ);
            var actualColumnOrientationPatient = new Vector3D((float)imageOrientationPatient.ColumnX, (float)imageOrientationPatient.ColumnY, (float)imageOrientationPatient.ColumnZ);

            if (!Vector3D.AreEqual(expectedRowOrientationPatient, actualRowOrientationPatient, tolerance))
            {
                Assert.AreEqual(expectedRowOrientationPatient, actualRowOrientationPatient, msg, "ImageOrientationPatient.Row");
            }
            if (!Vector3D.AreEqual(expectedColumnOrientationPatient, actualColumnOrientationPatient, tolerance))
            {
                Assert.AreEqual(expectedColumnOrientationPatient, actualColumnOrientationPatient, msg, "ImageOrientationPatient.Column");
            }

            var actualPixelSpacing = PixelSpacing.FromString(actualSlice.PixelSpacing);

            Assert.IsNotNull(actualPixelSpacing, "PixelSpacing");
            Assert.AreEqual(expectedRowSpacing, actualPixelSpacing.Row, tolerance, msg, "PixelSpacing.Row");
            Assert.AreEqual(expectedColumnSpacing, actualPixelSpacing.Column, tolerance, msg, "PixelSpacing.Column");

            Assert.AreEqual(expectedSliceThickness, float.Parse(actualSlice.SliceThickness), tolerance, msg, "SliceThickness");

            if (expectedSpacingBetweenSlices.HasValue)
            {
                Assert.AreEqual(expectedSpacingBetweenSlices.Value, float.Parse(actualSlice.SpacingBetweenSlices), tolerance, msg, "SpacingBetweenSlices");
            }
            else
            {
                Assert.IsEmpty(actualSlice.SpacingBetweenSlices, msg, "SpacingBetweenSlices");
            }
        }