fix for RenderTheme commit
This commit is contained in:
parent
93a4910fb5
commit
64da69e5cf
@ -47,7 +47,6 @@ import android.graphics.Paint;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Hannes Janetzek
|
|
||||||
* @note
|
* @note
|
||||||
* 1. The MapWorkers call TileGenerator.execute() to load a tile.
|
* 1. The MapWorkers call TileGenerator.execute() to load a tile.
|
||||||
* 2. The tile data will be loaded from current MapDatabase
|
* 2. The tile data will be loaded from current MapDatabase
|
||||||
@ -89,23 +88,19 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
private float[] mCoords;
|
private float[] mCoords;
|
||||||
private short[] mIndices;
|
private short[] mIndices;
|
||||||
|
|
||||||
|
private boolean mClosed;
|
||||||
|
|
||||||
|
private float mPoiX, mPoiY;
|
||||||
|
private int mPriority;
|
||||||
|
|
||||||
// current line layer, will be added to outline layers
|
// current line layer, will be added to outline layers
|
||||||
private LineLayer mCurLineLayer;
|
private LineLayer mCurLineLayer;
|
||||||
|
|
||||||
// layer data prepared for rendering
|
|
||||||
private Layers mLayers;
|
|
||||||
|
|
||||||
private TextItem mLabels;
|
|
||||||
|
|
||||||
private int mDrawingLayer;
|
private int mDrawingLayer;
|
||||||
|
|
||||||
private float mStrokeScale = 1.0f;
|
private float mStrokeScale = 1.0f;
|
||||||
|
|
||||||
private float mLatScaleFactor;
|
private float mLatScaleFactor;
|
||||||
|
|
||||||
private float mPoiX, mPoiY;
|
|
||||||
private int mPriority;
|
|
||||||
|
|
||||||
// replacement for variable value tags that should not be matched by RenderTheme
|
// replacement for variable value tags that should not be matched by RenderTheme
|
||||||
private final static Tag mTagEmptyName = new Tag(Tag.TAG_KEY_NAME, null, false);
|
private final static Tag mTagEmptyName = new Tag(Tag.TAG_KEY_NAME, null, false);
|
||||||
private final static Tag mTagEmptyHouseNr = new Tag(Tag.TAG_KEY_HOUSE_NUMBER, null, false);
|
private final static Tag mTagEmptyHouseNr = new Tag(Tag.TAG_KEY_HOUSE_NUMBER, null, false);
|
||||||
@ -159,13 +154,13 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
(float) Math.sin(Math.abs(MercatorProjection
|
(float) Math.sin(Math.abs(MercatorProjection
|
||||||
.pixelYToLatitude(tile.pixelY, tile.zoomLevel)) * (Math.PI / 180)));
|
.pixelYToLatitude(tile.pixelY, tile.zoomLevel)) * (Math.PI / 180)));
|
||||||
|
|
||||||
mLayers = new Layers();
|
tile.layers = new Layers();
|
||||||
if (mMapDatabase.executeQuery(tile, this) != QueryResult.SUCCESS) {
|
if (mMapDatabase.executeQuery(tile, this) != QueryResult.SUCCESS) {
|
||||||
//Log.d(TAG, "Failed loading: " + tile);
|
//Log.d(TAG, "Failed loading: " + tile);
|
||||||
mLayers.clear();
|
tile.layers.clear();
|
||||||
mLayers = null;
|
tile.layers = null;
|
||||||
TextItem.release(mLabels);
|
TextItem.release(tile.labels);
|
||||||
mLabels = null;
|
tile.labels = null;
|
||||||
|
|
||||||
// FIXME add STATE_FAILED?
|
// FIXME add STATE_FAILED?
|
||||||
tile.state = STATE_NONE;
|
tile.state = STATE_NONE;
|
||||||
@ -173,11 +168,16 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (debug.drawTileFrames) {
|
if (debug.drawTileFrames) {
|
||||||
|
// draw tile coordinate
|
||||||
mTagName = new Tag("name", tile.toString(), false);
|
mTagName = new Tag("name", tile.toString(), false);
|
||||||
mPoiX = Tile.TILE_SIZE >> 1;
|
mPoiX = Tile.TILE_SIZE >> 1;
|
||||||
mPoiY = 10;
|
mPoiY = 10;
|
||||||
TileGenerator.renderTheme.matchNode(this, debugTagWay, (byte) 0);
|
|
||||||
|
|
||||||
|
RenderInstruction[] ri;
|
||||||
|
ri = renderTheme.matchNode(debugTagWay, (byte) 0);
|
||||||
|
renderNode(ri, debugTagWay);
|
||||||
|
|
||||||
|
// draw tile box
|
||||||
mIndices = debugBoxIndex;
|
mIndices = debugBoxIndex;
|
||||||
if (MapView.enableClosePolygons)
|
if (MapView.enableClosePolygons)
|
||||||
mIndices[0] = 8;
|
mIndices[0] = 8;
|
||||||
@ -186,17 +186,15 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
|
|
||||||
mCoords = debugBoxCoords;
|
mCoords = debugBoxCoords;
|
||||||
mDrawingLayer = 10 * renderLevels;
|
mDrawingLayer = 10 * renderLevels;
|
||||||
TileGenerator.renderTheme.matchWay(this, debugTagBox, (byte) 0, false, true);
|
ri = renderTheme.matchWay(debugTagBox, (byte) 0, false);
|
||||||
|
renderWay(ri, debugTagBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
tile.layers = mLayers;
|
|
||||||
tile.labels = mLabels;
|
|
||||||
mLayers = null;
|
|
||||||
mLabels = null;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tag[] mFilterTags = new Tag[1];
|
||||||
|
|
||||||
private static byte getValidLayer(byte layer) {
|
private static byte getValidLayer(byte layer) {
|
||||||
if (layer < 0) {
|
if (layer < 0) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -265,6 +263,7 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------- MapDatabaseCallback -----------------
|
// ---------------- MapDatabaseCallback -----------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderPointOfInterest(byte layer, Tag[] tags,
|
public void renderPointOfInterest(byte layer, Tag[] tags,
|
||||||
float latitude, float longitude) {
|
float latitude, float longitude) {
|
||||||
@ -279,10 +278,13 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
// remove tags that should not be cached in Rendertheme
|
// remove tags that should not be cached in Rendertheme
|
||||||
filterTags(tags);
|
filterTags(tags);
|
||||||
|
|
||||||
TileGenerator.renderTheme.matchNode(this, tags, mTile.zoomLevel);
|
RenderInstruction[] ri = renderTheme.matchNode(tags, mTile.zoomLevel);
|
||||||
}
|
|
||||||
|
|
||||||
private boolean mClosed;
|
if (ri == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
renderNode(ri, tags);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderWay(byte layer, Tag[] tags, float[] coords, short[] indices,
|
public void renderWay(byte layer, Tag[] tags, float[] coords, short[] indices,
|
||||||
@ -304,30 +306,42 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
mCoords = coords;
|
mCoords = coords;
|
||||||
mIndices = indices;
|
mIndices = indices;
|
||||||
|
|
||||||
RenderInstruction[] ri = TileGenerator.renderTheme.matchWay(this, tags,
|
RenderInstruction[] ri = renderTheme.matchWay(tags,
|
||||||
(byte) (mTile.zoomLevel + 0), closed, false);
|
(byte) (mTile.zoomLevel + 0), closed);
|
||||||
|
|
||||||
|
renderWay(ri, tags);
|
||||||
|
|
||||||
|
if (mDebugDrawUnmatched && ri == null)
|
||||||
|
debugUnmatched(closed, tags);
|
||||||
|
|
||||||
if (ri != null) {
|
|
||||||
for (int i = 0, n = ri.length; i < n; i++)
|
|
||||||
ri[i].renderWay(this, tags);
|
|
||||||
} else {
|
|
||||||
if (mDebugDrawUnmatched)
|
|
||||||
debugUnmatched(closed, tags);
|
|
||||||
}
|
|
||||||
mCurLineLayer = null;
|
mCurLineLayer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void debugUnmatched(boolean closed, Tag[] tags) {
|
private void debugUnmatched(boolean closed, Tag[] tags) {
|
||||||
|
|
||||||
Log.d(TAG, "DBG way not matched: " + closed + " " + Arrays.deepToString(tags));
|
Log.d(TAG, "DBG way not matched: " + closed + " " + Arrays.deepToString(tags));
|
||||||
|
|
||||||
mTagName = new Tag("name", tags[0].key + ":" + tags[0].value, false);
|
mTagName = new Tag("name", tags[0].key + ":" + tags[0].value, false);
|
||||||
|
|
||||||
if (closed) {
|
RenderInstruction[] ri;
|
||||||
TileGenerator.renderTheme.matchWay(this, debugTagArea, (byte) 0, true, true);
|
ri = renderTheme.matchWay(closed ? debugTagArea : debugTagWay, (byte) 0, true);
|
||||||
} else {
|
|
||||||
TileGenerator.renderTheme.matchWay(this, debugTagWay, (byte) 0, true, true);
|
renderWay(ri, tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void renderWay(RenderInstruction[] ri, Tag[] tags) {
|
||||||
|
if (ri == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int i = 0, n = ri.length; i < n; i++)
|
||||||
|
ri[i].renderWay(this, tags);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renderNode(RenderInstruction[] ri, Tag[] tags) {
|
||||||
|
if (ri == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (int i = 0, n = ri.length; i < n; i++)
|
||||||
|
ri[i].renderNode(this, tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -349,7 +363,7 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LineLayer lineLayer = (LineLayer)
|
LineLayer lineLayer = (LineLayer)
|
||||||
mLayers.getLayer(numLayer, Layer.LINE);
|
mTile.layers.getLayer(numLayer, Layer.LINE);
|
||||||
|
|
||||||
if (lineLayer == null)
|
if (lineLayer == null)
|
||||||
return;
|
return;
|
||||||
@ -374,7 +388,7 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
mCurLineLayer = lineLayer;
|
mCurLineLayer = lineLayer;
|
||||||
} else {
|
} else {
|
||||||
LineTexLayer lineLayer = (LineTexLayer)
|
LineTexLayer lineLayer = (LineTexLayer)
|
||||||
mLayers.getLayer(numLayer, Layer.TEXLINE);
|
mTile.layers.getLayer(numLayer, Layer.TEXLINE);
|
||||||
|
|
||||||
if (lineLayer == null)
|
if (lineLayer == null)
|
||||||
return;
|
return;
|
||||||
@ -400,10 +414,11 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
|
|
||||||
if (mRenderBuildingModel) {
|
if (mRenderBuildingModel) {
|
||||||
//Log.d(TAG, "add buildings: " + mTile + " " + mPriority);
|
//Log.d(TAG, "add buildings: " + mTile + " " + mPriority);
|
||||||
if (mLayers.extrusionLayers == null)
|
if (mTile.layers.extrusionLayers == null)
|
||||||
mLayers.extrusionLayers = new ExtrusionLayer(0);
|
mTile.layers.extrusionLayers = new ExtrusionLayer(0);
|
||||||
|
|
||||||
((ExtrusionLayer) mLayers.extrusionLayers).addBuildings(mCoords, mIndices, mPriority);
|
((ExtrusionLayer) mTile.layers.extrusionLayers).addBuildings(mCoords, mIndices,
|
||||||
|
mPriority);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -414,7 +429,7 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
// if (!mProjected && !projectToTile())
|
// if (!mProjected && !projectToTile())
|
||||||
// return;
|
// return;
|
||||||
|
|
||||||
PolygonLayer layer = (PolygonLayer) mLayers.getLayer(numLayer, Layer.POLYGON);
|
PolygonLayer layer = (PolygonLayer) mTile.layers.getLayer(numLayer, Layer.POLYGON);
|
||||||
if (layer == null)
|
if (layer == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -433,16 +448,16 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
TextItem t = TextItem.get().set(mCoords[0], mCoords[1], mTagName.value, text);
|
TextItem t = TextItem.get().set(mCoords[0], mCoords[1], mTagName.value, text);
|
||||||
t.next = mLabels;
|
t.next = mTile.labels;
|
||||||
mLabels = t;
|
mTile.labels = t;
|
||||||
}
|
}
|
||||||
else if (text.textKey == Tag.TAG_KEY_HOUSE_NUMBER) {
|
else if (text.textKey == Tag.TAG_KEY_HOUSE_NUMBER) {
|
||||||
if (mTagHouseNr == null)
|
if (mTagHouseNr == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TextItem t = TextItem.get().set(mCoords[0], mCoords[1], mTagHouseNr.value, text);
|
TextItem t = TextItem.get().set(mCoords[0], mCoords[1], mTagHouseNr.value, text);
|
||||||
t.next = mLabels;
|
t.next = mTile.labels;
|
||||||
mLabels = t;
|
mTile.labels = t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,8 +472,8 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
if (text.textKey == mTagEmptyName.key) {
|
if (text.textKey == mTagEmptyName.key) {
|
||||||
TextItem t = TextItem.get().set(mPoiX, mPoiY, mTagName.value, text);
|
TextItem t = TextItem.get().set(mPoiX, mPoiY, mTagName.value, text);
|
||||||
// TextItem t = new TextItem(mPoiX, mPoiY, mTagName.value, text);
|
// TextItem t = new TextItem(mPoiX, mPoiY, mTagName.value, text);
|
||||||
t.next = mLabels;
|
t.next = mTile.labels;
|
||||||
mLabels = t;
|
mTile.labels = t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,8 +490,8 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
|
|||||||
int length = mIndices[i];
|
int length = mIndices[i];
|
||||||
if (length < 4)
|
if (length < 4)
|
||||||
break;
|
break;
|
||||||
mLabels = WayDecorator.renderText(mClipper, mCoords, mTagName.value, text,
|
mTile.labels = WayDecorator.renderText(mClipper, mCoords, mTagName.value, text,
|
||||||
offset, length, mLabels);
|
offset, length, mTile.labels);
|
||||||
offset += length;
|
offset += length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user