Esempio n. 1
0
 public ThresholdScanner(IScanData scanData, ILookupTable lookupTable, Func<ILabelMap> labelMap, ICrossChecker crossCheck)
 {
     _scanData = scanData;
     _labelMap = labelMap;
     _lookupTable = lookupTable;
     _crossCheck = crossCheck;
 }
Esempio n. 2
0
        public static void CalculateVolume(ILabelMap label, IScanData scanData)
        {
            var volume = 0.0d;
            var guard  = new object();

            Parallel.ForEach(label.GetCenters(), d =>
            {
                var proj = label.GetProjection(Axis.Z, d.Z).ToList();
                proj.Add(proj.Last());

                var area = 0.0d;

                for (int v = 0; v < proj.Count - 1; v++)
                {
                    var a = Math.Sqrt(Math.Pow(proj[v].X - d.X, 2) + Math.Pow(proj[v].Y - d.Y, 2));
                    var b = Math.Sqrt(Math.Pow(proj[v + 1].X - d.X, 2) + Math.Pow(proj[v + 1].Y - d.Y, 2));
                    var c = Math.Sqrt(Math.Pow(proj[v + 1].X - proj[v].X, 2) + Math.Pow(proj[v + 1].Y - proj[v].Y, 2));

                    var s = (a + b + c) / 2;

                    area += Math.Sqrt(s * Math.Abs(s - a) * Math.Abs(s - b) * Math.Abs(s - c));
                }

                lock (guard)
                {
                    volume += area;
                }
            });

            double xres, yres, zres;

            scanData.Resolution(out xres, out yres, out zres);

            label.Volume = (int)(volume * xres * yres * zres);
        }
Esempio n. 3
0
        public LookupTable(IScanData scanData)
        {
            _scanData = scanData;

            _scanData.DataUpdated += () =>
            {
                _scanData.MinMaxDencity(out _winMin, out _winMax);

                Compute();
            };

            PropertyChanged += (sender, args) => Compute();
        }
Esempio n. 4
0
        public ProjectionView(Axis axis, IScanData scanData, ILookupTable lookupTable, LabelMapSet labelMapSet, IProbe probe)
        {
            _axis        = axis;
            _scanData    = scanData;
            _lookupTable = lookupTable;
            _labelMapSet = labelMapSet;
            _probe       = probe;

            _lookupTable.MapChanged       += () => this.Invoke(new MethodInvoker(Rebuild));
            _scanData.DataUpdated         += () => this.Invoke(new MethodInvoker(ScanDataOnDataUpdated));
            _labelMapSet.LabelMapUpdated  += LabelMapOnLabelDataChanged;
            _labelMapSet.LabelMapDeleted  += LabelMapOnLabelDataChanged;
            _labelMapSet.LabelMapSetReset += () => surface.Invalidate();
            _labelMapSet.LabelMapCurrentSelectionChanged += () =>
            {
                _labelMapSet.Current.Crop.CropChanged += () => surface.Invalidate();
                surface.Invalidate();
            };

            InitializeComponent();
        }
Esempio n. 5
0
        public static Probe GetStartingProbe(Point3D point, IScanData scanData, ILookupTable lookupTable, Method method, ushort thUp = 0, ushort thDown = 0)
        {
            var projection = scanData.GetProjection(Axis.Z, point[Axis.Z]);

            if (projection.Empty)
            {
                throw new ArgumentOutOfRangeException();
            }

            var scalarPoint = point.To2D(Axis.Z);

            switch (method)
            {
            case Method.Average:
                return(GetAverageProbe(scalarPoint, projection, lookupTable, thUp, thDown));

            case Method.MinMax:
                return(GetMinMaxProbe(scalarPoint, projection, lookupTable, thUp, thDown));

            default:
                throw new ArgumentOutOfRangeException(nameof(method), method, null);
            }
        }
Esempio n. 6
0
 public LabelMapSet(IScanData scanData, Action <Action> syncInvoker)
 {
     _scanData    = scanData;
     _syncInvoker = syncInvoker;
 }
Esempio n. 7
0
        public LookupTable(IScanData scanData)
        {
            _scanData = scanData;

            _scanData.DataUpdated += Compute;
        }