public void Render(IDoseObject doseObject, Camera camera, IRenderContext context, Rectd screenRect, LineType lineType) { if (doseObject == null || doseObject.Grid == null) { return; } if (doseObject.Grid.GetNormalisationAmount() == 0) { return; } //Translates screen to world points and vice versa var ms = new MarchingSquares(); List <PlanarPolygon> polygons = new List <PlanarPolygon>(); var interpolatedDoseGrid = new InterpolatedDoseGrid(doseObject, MaxNumberOfGridPoints, camera, screenRect); foreach (ContourInfo contourInfo in ContourInfo) { var contour = ms.GetContour(interpolatedDoseGrid.Data, interpolatedDoseGrid.Rows, interpolatedDoseGrid.Columns, interpolatedDoseGrid.Coords, contourInfo.Threshold, contourInfo.Color); //var polygon = contour.ToPlanarPolygon(camera); Point2d screenPoint1 = new Point2d(); Point2d screenPoint2 = new Point2d(); Point3d worldPoint1 = new Point3d(); Point3d worldPoint2 = new Point3d(); var screenVertices = getScreenVertices(contour.Vertices, camera); context.DrawLines(screenVertices, contourInfo.Color); } }
private void AddDoseObject(IDoseObject doseObject) { Doses.Add(doseObject); foreach (SelectableObject <RegionOfInterest, DoseVolumeHistogram> selectableRegionOfInterest in RegionOfInterests) { var dvh = new DoseVolumeHistogram(doseObject, selectableRegionOfInterest.Value); selectableRegionOfInterest.AddChild(new SelectableObject <DoseVolumeHistogram>(dvh)); } }
public async Task <DoseVolumeHistogram> Build(IDoseObject dose, RegionOfInterest roi) { var pi = ProgressService.CreateNew("Building DVH... ", false); DoseVolumeHistogram dvh = null; await Task.Run(() => { dvh = new DoseVolumeHistogram(dose, roi); dvh.Compute(); } ); ProgressService.End(pi); return(dvh); }
public DoseVolumeHistogram(IDoseObject dose, RegionOfInterest roi, int nbins) { DoseObject = dose; ROIObject = roi; NBins = nbins; Dose = new double[NBins]; for (int i = 0; i < Dose.Length; i++) { Dose[i] = i; } CumulativeVolume = new double[NBins]; for (int i = 0; i < Dose.Length; i++) { CumulativeVolume[i] = 1; } }
public InterpolatedDoseGrid(IDoseObject doseObject, int maxNumberOfGrids, Camera camera, Rectd normRect) { //Intersect the camera screen and cube surrounding the dose object to limit the rendering. var boundingRect = camera.GetBoundingScreenRect(doseObject.Grid.XRange, doseObject.Grid.YRange, doseObject.Grid.ZRange, normRect); if (boundingRect == null) { return; } Rows = maxNumberOfGrids; Columns = maxNumberOfGrids; var dy = boundingRect.Height / maxNumberOfGrids; var dx = boundingRect.Width / maxNumberOfGrids; Point2d screenPoint = new Point2d(boundingRect.X, boundingRect.Y); var normalisationAmount = doseObject.Grid.GetNormalisationAmount(); Point3d worldPoint = new Point3d(); Coords = new double[Rows][][]; Data = new float[Rows][]; Voxel voxel = new Voxel(); for (int row = 0; row < Rows; row++) { Coords[row] = new double[Columns][]; Data[row] = new float[Columns]; for (int col = 0; col < Columns; col++) { screenPoint.X = boundingRect.X + col * dx; screenPoint.Y = boundingRect.Y + row * dy; camera.ConvertScreenToWorldCoords(screenPoint.Y, screenPoint.X, worldPoint); Coords[row][col] = new double[3] { worldPoint.X, worldPoint.Y, worldPoint.Z }; doseObject.Grid.Interpolate(worldPoint, voxel); Data[row][col] = (voxel.Value * doseObject.Grid.Scaling) / normalisationAmount; } } }
public DoseVolumeHistogram(IDoseObject dose, RegionOfInterest roi) : this(dose, roi, 200) { }
public DoseObjectRenderMessage(IDoseObject doseObject, bool remove) { DoseObject = doseObject; RemoveDose = remove; }
private void RemoveDose(IDoseObject dose) { Doses.Remove(dose); }
private void AddDose(IDoseObject dose) { Doses.Add(dose); }