add TileLoaderProcessHook to intercept MapElement processing
This commit is contained in:
parent
402e4c3cd6
commit
8f94fa7ac5
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user