X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fthreedee%2FTerrainHelper.java;h=0be2216cdf592384e95feb5c5ac34add99453b69;hp=71bc196a46dce7c8c4658dfb23490ab8f23fc323;hb=88f2c3647ed9e055090484f01a959d4581f85e7d;hpb=326f489e36aa7f235bc19409a57bf4955cd50f24 diff --git a/tim/prune/threedee/TerrainHelper.java b/tim/prune/threedee/TerrainHelper.java index 71bc196..0be2216 100644 --- a/tim/prune/threedee/TerrainHelper.java +++ b/tim/prune/threedee/TerrainHelper.java @@ -196,12 +196,13 @@ public class TerrainHelper { int numVoids = countVoids(inTerrainTrack); if (numVoids == 0) {return;} - // System.out.println("Starting to fix, num voids = " + numVoids); + //System.out.println("Starting to fix, num voids = " + numVoids); // Fix the holes which are surrounded on all four sides by non-holes fixSingleHoles(inTerrainTrack); - // System.out.println("Fixed single holes, now num voids = " + countVoids(inTerrainTrack)); + //System.out.println("Fixed single holes, now num voids = " + countVoids(inTerrainTrack)); // Maybe there is something to do in the corners? - fixCorners(inTerrainTrack); + fixCornersAndEdges(inTerrainTrack); + //System.out.println("Fixed corners, now num voids = " + countVoids(inTerrainTrack)); // Now fix the bigger holes, which should fix everything left fixBiggerHoles(inTerrainTrack); final int numHolesLeft = countVoids(inTerrainTrack); @@ -216,6 +217,21 @@ public class TerrainHelper */ private static int countVoids(Track inTerrainTrack) { + // DEBUG: Show state of voids first +// final int gridSize = (int) Math.sqrt(inTerrainTrack.getNumPoints()); +// StringBuilder sb = new StringBuilder(); +// for (int i=0; i= 0 && prevIndexWithAlt < (i-1)) + { + final int gapLen = i - prevIndexWithAlt; + final double alt1 = inTerrainTrack.getPoint(prevIndexWithAlt).getAltitude().getMetricValue(); + final double alt2 = inTerrainTrack.getPoint(i).getAltitude().getMetricValue(); + for (int j = 1; j < gapLen; j++) + { + // System.out.println("Fill in " + (prevIndexWithAlt + j) + " using " + prevIndexWithAlt + " and " + i); + final double alt = alt1 + (alt2-alt1) * j / gapLen; + final DataPoint p = inTerrainTrack.getPoint(inCornerIndex + (prevIndexWithAlt + j) * inInc); + p.setFieldValue(Field.ALTITUDE, "" + (int) alt, false); + } + } + prevIndexWithAlt = i; + } + } + } + /** * Try to fix bigger holes by interpolating between neighbours * @param inTerrainTrack terrain track