public synchronized VolumeGrid getVolumeGrid() { if (this.volumeGrid == null) { final Morphology morph = this.getMorphology(); final TreePoint[] tpa = morph.getTreePoints(); final Discretization disc = this.getDiscretization(); double d = disc.getDefaultMaxElementSide(); double deltaX = disc.spineDeltaX != null ? disc.spineDeltaX : d; // <--WK 6 22 2007 // (1) iterate through all endpoints and their associated radii. // (2) divide each radius by successively increasing odd numbers until // the divided value becomes less than the defaultMaxElementSide. // (3) select the smallest among the divided radii values as d. double[] diameters = new double[tpa.length]; double[] candidate_grid_sizes = new double[tpa.length]; for (int i = 0; i < tpa.length; i++) { double diameter = tpa[i].getRadius() * 2; diameters[i] = diameter; double denominator = 1; while (diameter / denominator > d) denominator += 2; // divide by successive odd numbers candidate_grid_sizes[i] = diameter / denominator; } d = Math.min(d, ArrayUtil.min(candidate_grid_sizes)); log.info( "Subvolume grid size is: {} (from radii {}, candidates {}, default {})", d, diameters, candidate_grid_sizes, disc.getDefaultMaxElementSide()); if (disc.curvedElements()) { TreeCurvedElementDiscretizer tced = new TreeCurvedElementDiscretizer(tpa); volumeGrid = tced.buildGrid( d, disc.getResolutionHM(), disc.getSurfaceLayers(), disc.getMaxAspectRatio()); } else volumeGrid = TreeBoxDiscretizer.buildGrid( tpa, d, disc.getResolutionHM(), disc.getSurfaceLayers(), this.getGeometry(), this.depth2D); SpineLocator.locate(this.spineSeed, morph.getSpineDistribution(), deltaX, volumeGrid); volumeGrid.fix(); log.info("{} subvolumes", volumeGrid.size()); } return this.volumeGrid; }
public List<HoldingResult> OneOnOneRepassRun(FWL lane1, FWL lane2, Patterns Shape, int ScanStep) { List<HoldingResult> HS = Collections.synchronizedList(new ArrayList<HoldingResult>()); Discretization dis1 = new Discretization(); MinAndMax templane1 = new MinAndMax(); MinAndMax templane2 = new MinAndMax(); SetOfPatternsForALane patternslane1 = new SetOfPatternsForALane(); SetOfPatternsForALane patternslane2 = new SetOfPatternsForALane(); Patterns nesto = patternslane2.PatternsForOneLane(Shape, lane2); float test = templane1.TheXminOfAllPatterns(patternslane1.PatternsForOneLane(Shape, lane1)); int X2min = (int) (templane2.TheXminOfAllPatterns(patternslane2.PatternsForOneLane(Shape, lane2)) - lane2.getStart()); int X2max = (int) (templane2.TheXmaxOfAllPatterns(nesto) - lane2.getStart()); int Y2min = (int) (templane2.TheYminOfAllPatterns(patternslane2.PatternsForOneLane(Shape, lane2))); int Y2max = (int) (templane2.TheYmaxOfAllPatterns(patternslane2.PatternsForOneLane(Shape, lane2))); int X1min = (int) (templane1.TheXminOfAllPatterns(patternslane1.PatternsForOneLane(Shape, lane1)) - lane1.getStart()); int X1max = (int) (templane1.TheXmaxOfAllPatterns(patternslane1.PatternsForOneLane(Shape, lane1)) - lane1.getStart()); int Y1min = (int) (templane1.TheYminOfAllPatterns(patternslane1.PatternsForOneLane(Shape, lane1))); int Y1max = (int) (templane1.TheYmaxOfAllPatterns(patternslane1.PatternsForOneLane(Shape, lane1))); int[][] matrixdis2 = dis1.DiscretizationOfLane(lane2, Shape); int[][] matrixdis1 = dis1.DiscretizationOfLaneAddingScanStep(lane1, Shape, ScanStep); ThreadHoldingConstraint11 thc11 = new ThreadHoldingConstraint11(HS); ThreadHoldingConstraint21 thc21 = new ThreadHoldingConstraint21(HS); ThreadHoldingConstraint31 thc31 = new ThreadHoldingConstraint31(HS); ThreadHoldingConstraint41 thc41 = new ThreadHoldingConstraint41(HS); ThreadHoldingConstraint51 thc51 = new ThreadHoldingConstraint51(HS); ThreadHoldingConstraint61 thc61 = new ThreadHoldingConstraint61(HS); ThreadHoldingConstraint71 thc71 = new ThreadHoldingConstraint71(HS); ThreadHoldingConstraint81 thc81 = new ThreadHoldingConstraint81(HS); // sada moram da napravim nove bez embedinga if (X1min - ScanStep < 0) X1min = 0; else X1min = X1min - ScanStep; if (X1max + ScanStep > lane1.getWidth() - 1) X1max = (int) lane1.getWidth() - 1; else X1max = X1max + ScanStep; if (Y1min - ScanStep < 0) Y1min = 0; else Y1min = Y1min - ScanStep; if (Y1max + ScanStep > lane1.getLength() - 1) Y1max = (int) lane1.getLength() - 1; else Y1max = Y1max + ScanStep; thc11.setDiscreteLane1(matrixdis1); thc11.setDiscreteLane2(matrixdis2); thc11.setX1min(X1min); thc11.setX1max(X1max); thc11.setX2min(X2min); thc11.setX2max(X2max); thc11.setY1min(Y1min); thc11.setY1max(Y1max); thc11.setY2min(Y2min); thc11.setY2max(Y2max); thc11.setN1((int) lane1.getWidth()); thc11.setN2((int) lane2.getWidth()); thc11.setM((int) lane1.getLength()); thc11.setScanStep(ScanStep); thc21.setDiscreteLane1(matrixdis1); thc21.setDiscreteLane2(matrixdis2); thc21.setX1min(X1min); thc21.setX1max(X1max); thc21.setX2min(X2min); thc21.setX2max(X2max); thc21.setY1min(Y1min); thc21.setY1max(Y1max); thc21.setY2min(Y2min); thc21.setY2max(Y2max); thc21.setN1((int) lane1.getWidth()); thc21.setN2((int) lane2.getWidth()); thc21.setM((int) lane1.getLength()); thc21.setScanStep(ScanStep); thc31.setDiscreteLane1(matrixdis1); thc31.setDiscreteLane2(matrixdis2); thc31.setX1min(X1min); thc31.setX1max(X1max); thc31.setX2min(X2min); thc31.setX2max(X2max); thc31.setY1min(Y1min); thc31.setY1max(Y1max); thc31.setY2min(Y2min); thc31.setY2max(Y2max); thc31.setN1((int) lane1.getWidth()); thc31.setN2((int) lane2.getWidth()); thc31.setM((int) lane1.getLength()); thc31.setScanStep(ScanStep); thc41.setDiscreteLane1(matrixdis1); thc41.setDiscreteLane2(matrixdis2); thc41.setX1min(X1min); thc41.setX1max(X1max); thc41.setX2min(X2min); thc41.setX2max(X2max); thc41.setY1min(Y1min); thc41.setY1max(Y1max); thc41.setY2min(Y2min); thc41.setY2max(Y2max); thc41.setN1((int) lane1.getWidth()); thc41.setN2((int) lane2.getWidth()); thc41.setM((int) lane1.getLength()); thc41.setScanStep(ScanStep); thc51.setDiscreteLane1(matrixdis1); thc51.setDiscreteLane2(matrixdis2); thc51.setX1min(X1min); thc51.setX1max(X1max); thc51.setX2min(X2min); thc51.setX2max(X2max); thc51.setY1min(Y1min); thc51.setY1max(Y1max); thc51.setY2min(Y2min); thc51.setY2max(Y2max); thc51.setN1((int) lane1.getWidth()); thc51.setN2((int) lane2.getWidth()); thc51.setM((int) lane1.getLength()); thc51.setScanStep(ScanStep); thc61.setDiscreteLane1(matrixdis1); thc61.setDiscreteLane2(matrixdis2); thc61.setX1min(X1min); thc61.setX1max(X1max); thc61.setX2min(X2min); thc61.setX2max(X2max); thc61.setY1min(Y1min); thc61.setY1max(Y1max); thc61.setY2min(Y2min); thc61.setY2max(Y2max); thc61.setN1((int) lane1.getWidth()); thc61.setN2((int) lane2.getWidth()); thc61.setM((int) lane1.getLength()); thc61.setScanStep(ScanStep); thc71.setDiscreteLane1(matrixdis1); thc71.setDiscreteLane2(matrixdis2); thc71.setX1min(X1min); thc71.setX1max(X1max); thc71.setX2min(X2min); thc71.setX2max(X2max); thc71.setY1min(Y1min); thc71.setY1max(Y1max); thc71.setY2min(Y2min); thc71.setY2max(Y2max); thc71.setN1((int) lane1.getWidth()); thc71.setN2((int) lane2.getWidth()); thc71.setM((int) lane1.getLength()); thc71.setScanStep(ScanStep); thc81.setDiscreteLane1(matrixdis1); thc81.setDiscreteLane2(matrixdis2); thc81.setX1min(X1min); thc81.setX1max(X1max); thc81.setX2min(X2min); thc81.setX2max(X2max); thc81.setY1min(Y1min); thc81.setY1max(Y1max); thc81.setY2min(Y2min); thc81.setY2max(Y2max); thc81.setN1((int) lane1.getWidth()); thc81.setN2((int) lane2.getWidth()); thc81.setM((int) lane1.getLength()); thc81.setScanStep(ScanStep); thc11.start(); thc21.start(); thc31.start(); thc41.start(); thc51.start(); thc61.start(); thc71.start(); thc81.start(); // uniting results return HS; }