public ThresholdScanner(IScanData scanData, ILookupTable lookupTable, Func<ILabelMap> labelMap, ICrossChecker crossCheck) { _scanData = scanData; _labelMap = labelMap; _lookupTable = lookupTable; _crossCheck = crossCheck; }
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); }
public LookupTable(IScanData scanData) { _scanData = scanData; _scanData.DataUpdated += () => { _scanData.MinMaxDencity(out _winMin, out _winMax); Compute(); }; PropertyChanged += (sender, args) => Compute(); }
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(); }
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); } }
public LabelMapSet(IScanData scanData, Action <Action> syncInvoker) { _scanData = scanData; _syncInvoker = syncInvoker; }
public LookupTable(IScanData scanData) { _scanData = scanData; _scanData.DataUpdated += Compute; }