public void TestSagittalSource()
        {
            DataSetOrientation orientation = DataSetOrientation.CreateSagittal(false);

            // it doesn't really matter what function we use
            TestVolume(VolumeFunction.Void, orientation.Initialize, null);
        }
        public void Test330DegreeYAxialRotationCouchTiltedSource()
        {
            DataSetOrientation orientation = DataSetOrientation.CreateCouchTiltedAboutY(-30);

            // it doesn't really matter what function we use
            TestVolume(VolumeFunction.Void, orientation.Initialize, null);
        }
        public void Test030DegreeXAxialRotationGantryTiltedSource()
        {
            DataSetOrientation orientation = DataSetOrientation.CreateGantryTiltedAboutX(30);

            // it doesn't really matter what function we use
            TestVolume(VolumeFunction.Void, orientation.Initialize, null);
        }
        public void TestNegativeXAxialGantryTiltedSlicings()
        {
            DataSetOrientation orientation = DataSetOrientation.CreateGantryTiltedAboutX(-15);

            TestVolume(VolumeFunction.StarsTilted345X,
                       orientation.Initialize,
                       volume =>
            {
                foreach (IVolumeSlicerParams slicing in _slicings)
                {
                    ValidateVolumeSlicePoints(volume, slicing, StarsKnownSamples, -15, 0, true);
                }
            });
        }
        public void TestXAxialRotationGantryTiltedVoxelData()
        {
            const double       angle       = 30;
            DataSetOrientation orientation = DataSetOrientation.CreateGantryTiltedAboutX(angle);

            TestVolume(VolumeFunction.Stars,
                       orientation.Initialize,
                       volume =>
            {
                foreach (KnownSample sample in StarsKnownSamples)
                {
                    Vector3D realPoint   = sample.Point;
                    Vector3D paddedPoint = realPoint + new Vector3D(0, (float)(Math.Tan(angle * Math.PI / 180) * (100 - realPoint.Z)), 0);

                    int actual = volume[(int)paddedPoint.X, (int)paddedPoint.Y, (int)paddedPoint.Z];
                    Trace.WriteLine(string.Format("Sample {0} @{1} ({2} before padding)", actual, paddedPoint, realPoint));
                    Assert.AreEqual(sample.Value, actual, "Wrong colour sample @{0} ({1} before padding)", paddedPoint, realPoint);
                }
            });
        }
 public XAxialRotationGantryTiledTestVolume(VolumeFunction function, float tiltDegrees) : base(function)
 {
     _tiltDegrees        = tiltDegrees;
     _dataSetOrientation = DataSetOrientation.CreateGantryTiltedAboutX(tiltDegrees);
 }
        public void TestDifferentImageOrientationSource()
        {
            int n = 0;

            // it doesn't really matter what function we use
            TestVolume(VolumeFunction.Void, sopDataSource => sopDataSource[DicomTags.ImageOrientationPatient].SetStringValue(DataSetOrientation.CreateGantryTiltedAboutX(n++).ImageOrientationPatient), null);
        }