From 8f94fa7ac5b18040a032a5d7a58ab608f3baa6b5 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Mon, 10 Mar 2014 04:42:26 +0100 Subject: [PATCH] add TileLoaderProcessHook to intercept MapElement processing --- .../layers/tile/vector/BuildingLayer.java | 4 +-- .../layers/tile/vector/VectorTileLayer.java | 34 +++++++++++++------ .../layers/tile/vector/VectorTileLoader.java | 19 ++++++----- .../vector/labeling/LabelTileLoaderHook.java | 4 +-- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java b/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java index cfde79d4..ecb57917 100644 --- a/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java +++ b/vtm/src/org/oscim/layers/tile/vector/BuildingLayer.java @@ -21,7 +21,7 @@ import org.oscim.core.MercatorProjection; import org.oscim.core.Tag; import org.oscim.layers.Layer; import org.oscim.layers.tile.MapTile; -import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderHook; +import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderThemeHook; import org.oscim.map.Map; import org.oscim.renderer.ExtrusionRenderer; import org.oscim.renderer.GLViewport; @@ -31,7 +31,7 @@ import org.oscim.theme.styles.ExtrusionStyle; import org.oscim.theme.styles.RenderStyle; import org.oscim.utils.FastMath; -public class BuildingLayer extends Layer implements TileLoaderHook { +public class BuildingLayer extends Layer implements TileLoaderThemeHook { //static final Logger log = LoggerFactory.getLogger(BuildingOverlay.class); final ExtrusionRenderer mExtLayer; diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java index 657eb3ea..bbd8d51e 100644 --- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java +++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLayer.java @@ -123,23 +123,37 @@ public class VectorTileLayer extends TileLayer { return mTheme; } - public interface TileLoaderHook { + public interface TileLoaderProcessHook { + public boolean process(MapTile tile, ElementLayers layers, MapElement element); + } + + public interface TileLoaderThemeHook { public boolean render(MapTile tile, ElementLayers layers, MapElement element, RenderStyle style, int level); } - private TileLoaderHook[] mLoaderHooks = new TileLoaderHook[0]; + private TileLoaderProcessHook[] mLoaderProcessHooks = new TileLoaderProcessHook[0]; + private TileLoaderThemeHook[] mLoaderThemeHooks = new TileLoaderThemeHook[0]; - public TileLoaderHook[] getLoaderHooks() { - return mLoaderHooks; + public TileLoaderProcessHook[] loaderProcessHooks() { + return mLoaderProcessHooks; } - public void addHook(TileLoaderHook h) { - int length = mLoaderHooks.length; - TileLoaderHook[] tmp = new TileLoaderHook[length + 1]; - System.arraycopy(mLoaderHooks, 0, tmp, 0, length); - tmp[length] = h; - mLoaderHooks = tmp; + public TileLoaderThemeHook[] loaderThemeHooks() { + return mLoaderThemeHooks; } + public void addHook(TileLoaderProcessHook h) { + TileLoaderProcessHook[] tmp = mLoaderProcessHooks; + mLoaderProcessHooks = new TileLoaderProcessHook[tmp.length + 1]; + System.arraycopy(tmp, 0, mLoaderProcessHooks, 0, tmp.length); + mLoaderProcessHooks[tmp.length] = h; + } + + public void addHook(TileLoaderThemeHook h) { + TileLoaderThemeHook[] tmp = mLoaderThemeHooks; + mLoaderThemeHooks = new TileLoaderThemeHook[tmp.length + 1]; + System.arraycopy(tmp, 0, mLoaderThemeHooks, 0, tmp.length); + mLoaderThemeHooks[tmp.length] = h; + } } diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java index 74470d00..1b7ffa99 100644 --- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java @@ -27,7 +27,8 @@ import org.oscim.core.Tag; import org.oscim.core.TagSet; import org.oscim.layers.tile.MapTile; import org.oscim.layers.tile.TileLoader; -import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderHook; +import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderProcessHook; +import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderThemeHook; import org.oscim.renderer.elements.ElementLayers; import org.oscim.renderer.elements.LineLayer; import org.oscim.renderer.elements.LineTexLayer; @@ -166,10 +167,6 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac * E.g. to replace tags that should not be cached in Rendertheme */ protected TagSet filterTags(TagSet tagSet) { - // if (filterHooks != null){ - // tagSet = - // } - return tagSet; } @@ -179,6 +176,10 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac if (isCanceled() || mTile.state(CANCEL)) throw new CancellationException(); + for (TileLoaderProcessHook h : mTileLayer.loaderProcessHooks()) + if (h.process(mTile, mLayers, element)) + return; + TagSet tags = filterTags(element.tags); if (tags == null) return; @@ -292,14 +293,16 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac } } + @Override public void renderSymbol(SymbolStyle symbol) { - for (TileLoaderHook h : mTileLayer.getLoaderHooks()) + for (TileLoaderThemeHook h : mTileLayer.loaderThemeHooks()) if (h.render(mTile, mLayers, mElement, symbol, 0)) break; } + @Override public void renderExtrusion(ExtrusionStyle extrusion, int level) { - for (TileLoaderHook h : mTileLayer.getLoaderHooks()) + for (TileLoaderThemeHook h : mTileLayer.loaderThemeHooks()) if (h.render(mTile, mLayers, mElement, extrusion, level)) break; } @@ -310,7 +313,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac @Override public void renderText(TextStyle text) { - for (TileLoaderHook h : mTileLayer.getLoaderHooks()) + for (TileLoaderThemeHook h : mTileLayer.loaderThemeHooks()) if (h.render(mTile, mLayers, mElement, text, 0)) break; } diff --git a/vtm/src/org/oscim/layers/tile/vector/labeling/LabelTileLoaderHook.java b/vtm/src/org/oscim/layers/tile/vector/labeling/LabelTileLoaderHook.java index 276548d0..6a51a4ad 100644 --- a/vtm/src/org/oscim/layers/tile/vector/labeling/LabelTileLoaderHook.java +++ b/vtm/src/org/oscim/layers/tile/vector/labeling/LabelTileLoaderHook.java @@ -8,7 +8,7 @@ import static org.oscim.layers.tile.vector.labeling.LabelLayer.LABEL_DATA; import org.oscim.core.MapElement; import org.oscim.core.PointF; import org.oscim.layers.tile.MapTile; -import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderHook; +import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderThemeHook; import org.oscim.renderer.elements.ElementLayers; import org.oscim.renderer.elements.SymbolItem; import org.oscim.renderer.elements.TextItem; @@ -16,7 +16,7 @@ import org.oscim.theme.styles.RenderStyle; import org.oscim.theme.styles.SymbolStyle; import org.oscim.theme.styles.TextStyle; -public class LabelTileLoaderHook implements TileLoaderHook { +public class LabelTileLoaderHook implements TileLoaderThemeHook { //public final static LabelTileData EMPTY = new LabelTileData();