add TileLoaderProcessHook to intercept MapElement processing

This commit is contained in:
Hannes Janetzek 2014-03-10 04:42:26 +01:00
parent 402e4c3cd6
commit 8f94fa7ac5
4 changed files with 39 additions and 22 deletions

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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();