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.core.Tag;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.layers.tile.MapTile;
|
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.map.Map;
|
||||||
import org.oscim.renderer.ExtrusionRenderer;
|
import org.oscim.renderer.ExtrusionRenderer;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
@ -31,7 +31,7 @@ import org.oscim.theme.styles.ExtrusionStyle;
|
|||||||
import org.oscim.theme.styles.RenderStyle;
|
import org.oscim.theme.styles.RenderStyle;
|
||||||
import org.oscim.utils.FastMath;
|
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);
|
//static final Logger log = LoggerFactory.getLogger(BuildingOverlay.class);
|
||||||
|
|
||||||
final ExtrusionRenderer mExtLayer;
|
final ExtrusionRenderer mExtLayer;
|
||||||
|
|||||||
@ -123,23 +123,37 @@ public class VectorTileLayer extends TileLayer {
|
|||||||
return mTheme;
|
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,
|
public boolean render(MapTile tile, ElementLayers layers,
|
||||||
MapElement element, RenderStyle style, int level);
|
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() {
|
public TileLoaderProcessHook[] loaderProcessHooks() {
|
||||||
return mLoaderHooks;
|
return mLoaderProcessHooks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addHook(TileLoaderHook h) {
|
public TileLoaderThemeHook[] loaderThemeHooks() {
|
||||||
int length = mLoaderHooks.length;
|
return mLoaderThemeHooks;
|
||||||
TileLoaderHook[] tmp = new TileLoaderHook[length + 1];
|
|
||||||
System.arraycopy(mLoaderHooks, 0, tmp, 0, length);
|
|
||||||
tmp[length] = h;
|
|
||||||
mLoaderHooks = tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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.core.TagSet;
|
||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.layers.tile.TileLoader;
|
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.ElementLayers;
|
||||||
import org.oscim.renderer.elements.LineLayer;
|
import org.oscim.renderer.elements.LineLayer;
|
||||||
import org.oscim.renderer.elements.LineTexLayer;
|
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
|
* E.g. to replace tags that should not be cached in Rendertheme
|
||||||
*/
|
*/
|
||||||
protected TagSet filterTags(TagSet tagSet) {
|
protected TagSet filterTags(TagSet tagSet) {
|
||||||
// if (filterHooks != null){
|
|
||||||
// tagSet =
|
|
||||||
// }
|
|
||||||
|
|
||||||
return tagSet;
|
return tagSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,6 +176,10 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
|||||||
if (isCanceled() || mTile.state(CANCEL))
|
if (isCanceled() || mTile.state(CANCEL))
|
||||||
throw new CancellationException();
|
throw new CancellationException();
|
||||||
|
|
||||||
|
for (TileLoaderProcessHook h : mTileLayer.loaderProcessHooks())
|
||||||
|
if (h.process(mTile, mLayers, element))
|
||||||
|
return;
|
||||||
|
|
||||||
TagSet tags = filterTags(element.tags);
|
TagSet tags = filterTags(element.tags);
|
||||||
if (tags == null)
|
if (tags == null)
|
||||||
return;
|
return;
|
||||||
@ -292,14 +293,16 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void renderSymbol(SymbolStyle symbol) {
|
public void renderSymbol(SymbolStyle symbol) {
|
||||||
for (TileLoaderHook h : mTileLayer.getLoaderHooks())
|
for (TileLoaderThemeHook h : mTileLayer.loaderThemeHooks())
|
||||||
if (h.render(mTile, mLayers, mElement, symbol, 0))
|
if (h.render(mTile, mLayers, mElement, symbol, 0))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void renderExtrusion(ExtrusionStyle extrusion, int level) {
|
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))
|
if (h.render(mTile, mLayers, mElement, extrusion, level))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -310,7 +313,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderText(TextStyle text) {
|
public void renderText(TextStyle text) {
|
||||||
for (TileLoaderHook h : mTileLayer.getLoaderHooks())
|
for (TileLoaderThemeHook h : mTileLayer.loaderThemeHooks())
|
||||||
if (h.render(mTile, mLayers, mElement, text, 0))
|
if (h.render(mTile, mLayers, mElement, text, 0))
|
||||||
break;
|
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.MapElement;
|
||||||
import org.oscim.core.PointF;
|
import org.oscim.core.PointF;
|
||||||
import org.oscim.layers.tile.MapTile;
|
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.ElementLayers;
|
||||||
import org.oscim.renderer.elements.SymbolItem;
|
import org.oscim.renderer.elements.SymbolItem;
|
||||||
import org.oscim.renderer.elements.TextItem;
|
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.SymbolStyle;
|
||||||
import org.oscim.theme.styles.TextStyle;
|
import org.oscim.theme.styles.TextStyle;
|
||||||
|
|
||||||
public class LabelTileLoaderHook implements TileLoaderHook {
|
public class LabelTileLoaderHook implements TileLoaderThemeHook {
|
||||||
|
|
||||||
//public final static LabelTileData EMPTY = new LabelTileData();
|
//public final static LabelTileData EMPTY = new LabelTileData();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user