Drawable style point reduction / texture repeat options (#862)

This commit is contained in:
Emux 2021-07-25 13:59:01 +03:00 committed by GitHub
parent bd24ba12d5
commit b8983007d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 24 deletions

View File

@ -2,6 +2,8 @@
## New since 0.16.0 ## New since 0.16.0
- Drawable style point reduction option [#862](https://github.com/mapsforge/vtm/pull/862)
- Drawable style texture repeat option [#862](https://github.com/mapsforge/vtm/pull/862)
- Move cluster experiment in samples [#858](https://github.com/mapsforge/vtm/pull/858) - Move cluster experiment in samples [#858](https://github.com/mapsforge/vtm/pull/858)
- Many other minor improvements and bug fixes - Many other minor improvements and bug fixes
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.17.0) - [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.17.0)

View File

@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2020 marq24 * Copyright 2020 marq24
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@ -32,6 +32,7 @@ import org.oscim.layers.vector.geometries.PointDrawable;
import org.oscim.layers.vector.geometries.Style; import org.oscim.layers.vector.geometries.Style;
import org.oscim.map.Map; import org.oscim.map.Map;
import org.oscim.renderer.bucket.LineBucket; import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.LineTexBucket;
import org.oscim.renderer.bucket.MeshBucket; import org.oscim.renderer.bucket.MeshBucket;
import org.oscim.theme.styles.AreaStyle; import org.oscim.theme.styles.AreaStyle;
import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.LineStyle;
@ -235,6 +236,7 @@ public class VectorLayer extends AbstractVectorLayer<Drawable> implements Gestur
LineBucket ll = t.buckets.getLineBucket(level + 1); LineBucket ll = t.buckets.getLineBucket(level + 1);
if (ll.line == null) { if (ll.line == null) {
ll.line = new LineStyle(2, style.strokeColor, style.strokeWidth); ll.line = new LineStyle(2, style.strokeColor, style.strokeWidth);
ll.setDropDistance(style.pointReduction ? LineBucket.MIN_DIST : 0);
} }
for (int i = 0; i < points.getNumGeometries(); i++) { for (int i = 0; i < points.getNumGeometries(); i++) {
@ -273,6 +275,9 @@ public class VectorLayer extends AbstractVectorLayer<Drawable> implements Gestur
.strokeWidth(style.strokeWidth) .strokeWidth(style.strokeWidth)
.texture(style.texture) .texture(style.texture)
.build(); .build();
ll.setDropDistance(style.pointReduction ? LineBucket.MIN_DIST : 0);
if (ll instanceof LineTexBucket)
((LineTexBucket) ll).setTexRepeat(style.textureRepeat);
} }
if (!style.fixed && style.strokeIncrease > 1) if (!style.fixed && style.strokeIncrease > 1)
@ -304,6 +309,7 @@ public class VectorLayer extends AbstractVectorLayer<Drawable> implements Gestur
LineBucket ll = t.buckets.getLineBucket(level + 1); LineBucket ll = t.buckets.getLineBucket(level + 1);
if (ll.line == null) { if (ll.line == null) {
ll.line = new LineStyle(2, style.strokeColor, style.strokeWidth); ll.line = new LineStyle(2, style.strokeColor, style.strokeWidth);
ll.setDropDistance(style.pointReduction ? LineBucket.MIN_DIST : 0);
} }
if (style.generalization != Style.GENERALIZATION_NONE) { if (style.generalization != Style.GENERALIZATION_NONE) {

View File

@ -1,6 +1,6 @@
/* /*
* Copyright 2014 Hannes Janetzek * Copyright 2014 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2021 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@ -52,6 +52,8 @@ public class Style {
public final int stippleColor; public final int stippleColor;
public final float stippleWidth; public final float stippleWidth;
public final TextureItem texture; public final TextureItem texture;
public final boolean pointReduction;
public final boolean textureRepeat;
public final float heightOffset; public final float heightOffset;
public final boolean randomOffset; public final boolean randomOffset;
@ -76,6 +78,8 @@ public class Style {
stippleColor = builder.stippleColor; stippleColor = builder.stippleColor;
stippleWidth = builder.stippleWidth; stippleWidth = builder.stippleWidth;
texture = builder.texture; texture = builder.texture;
pointReduction = builder.pointReduction;
textureRepeat = builder.textureRepeat;
heightOffset = builder.heightOffset; heightOffset = builder.heightOffset;
randomOffset = builder.randomOffset; randomOffset = builder.randomOffset;
@ -111,6 +115,8 @@ public class Style {
public int stippleColor = Color.GRAY; public int stippleColor = Color.GRAY;
public float stippleWidth = 1; public float stippleWidth = 1;
public TextureItem texture = null; public TextureItem texture = null;
public boolean pointReduction = true;
public boolean textureRepeat = true;
public float heightOffset = 0; public float heightOffset = 0;
public boolean randomOffset = true; public boolean randomOffset = true;
@ -248,6 +254,16 @@ public class Style {
return this; return this;
} }
public Builder pointReduction(boolean pointReduction) {
this.pointReduction = pointReduction;
return this;
}
public Builder textureRepeat(boolean textureRepeat) {
this.textureRepeat = textureRepeat;
return this;
}
public Builder heightOffset(float heightOffset) { public Builder heightOffset(float heightOffset) {
this.heightOffset = heightOffset; this.heightOffset = heightOffset;
return this; return this;

View File

@ -1,6 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2019 devemux86 * Copyright 2016-2021 devemux86
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
* *
@ -50,13 +50,13 @@ public class LineBucket extends RenderBucket {
/** /**
* maximal resolution * maximal resolution
*/ */
private static final float MIN_DIST = 1 / 8f; public static final float MIN_DIST = 1 / 8f;
/** /**
* not quite right.. need to go back so that additional * not quite right.. need to go back so that additional
* bevel vertices are at least MIN_DIST apart * bevel vertices are at least MIN_DIST apart
*/ */
private static final float BEVEL_MIN = MIN_DIST * 4; private static final float MIN_BEVEL = MIN_DIST * 4;
/** /**
* mask for packing last two bits of extrusion vector with texture * mask for packing last two bits of extrusion vector with texture
@ -71,6 +71,7 @@ public class LineBucket extends RenderBucket {
public boolean roundCap; public boolean roundCap;
private float mMinDist = MIN_DIST; private float mMinDist = MIN_DIST;
private float mMinBevel = MIN_BEVEL;
public float heightOffset; public float heightOffset;
@ -103,7 +104,14 @@ public class LineBucket extends RenderBucket {
* For point reduction by minimal distance. Default is 1/8. * For point reduction by minimal distance. Default is 1/8.
*/ */
public void setDropDistance(float minDist) { public void setDropDistance(float minDist) {
mMinDist = Math.max(minDist, MIN_DIST); mMinDist = minDist;
}
/**
* Default is MIN_DIST * 4 = 1/8 * 4.
*/
public void setBevelDistance(float minBevel) {
mMinBevel = minBevel;
} }
public void addLine(GeometryBuffer geom) { public void addLine(GeometryBuffer geom) {
@ -395,18 +403,18 @@ public class LineBucket extends RenderBucket {
uy /= a; uy /= a;
} }
//log.debug("aside " + a + " " + ux + " " + uy); //log.debug("aside " + a + " " + ux + " " + uy);
px = curX - ux * BEVEL_MIN; px = curX - ux * mMinBevel;
py = curY - uy * BEVEL_MIN; py = curY - uy * mMinBevel;
curX = curX + ux * BEVEL_MIN; curX = curX + ux * mMinBevel;
curY = curY + uy * BEVEL_MIN; curY = curY + uy * mMinBevel;
} else { } else {
//log.debug("back"); //log.debug("back");
/* go back by min dist */ /* go back by min dist */
px = curX + vPrevX * BEVEL_MIN; px = curX + vPrevX * mMinBevel;
py = curY + vPrevY * BEVEL_MIN; py = curY + vPrevY * mMinBevel;
/* go forward by min dist */ /* go forward by min dist */
curX = curX + vNextX * BEVEL_MIN; curX = curX + vNextX * mMinBevel;
curY = curY + vNextY * BEVEL_MIN; curY = curY + vNextY * mMinBevel;
} }
/* unit vector pointing forward to next node */ /* unit vector pointing forward to next node */

View File

@ -1,6 +1,6 @@
/* /*
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2018 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2017 Longri * Copyright 2017 Longri
* Copyright 2018 Gustl22 * Copyright 2018 Gustl22
* *
@ -21,11 +21,7 @@ package org.oscim.renderer.bucket;
import org.oscim.backend.GL; import org.oscim.backend.GL;
import org.oscim.core.GeometryBuffer; import org.oscim.core.GeometryBuffer;
import org.oscim.renderer.GLShader; import org.oscim.renderer.*;
import org.oscim.renderer.GLState;
import org.oscim.renderer.GLUtils;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.LineStyle;
import org.oscim.utils.FastMath; import org.oscim.utils.FastMath;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -36,9 +32,7 @@ import java.nio.ByteOrder;
import java.nio.ShortBuffer; import java.nio.ShortBuffer;
import static org.oscim.backend.GLAdapter.gl; import static org.oscim.backend.GLAdapter.gl;
import static org.oscim.renderer.MapRenderer.COORD_SCALE; import static org.oscim.renderer.MapRenderer.*;
import static org.oscim.renderer.MapRenderer.MAX_INDICES;
import static org.oscim.renderer.MapRenderer.bindQuadIndicesVBO;
/** /**
* RenderElement for textured or stippled lines * RenderElement for textured or stippled lines
@ -93,6 +87,7 @@ public final class LineTexBucket extends LineBucket {
public int oddQuads; public int oddQuads;
private boolean evenSegment = true; private boolean evenSegment = true;
private boolean mTexRepeat = true;
LineTexBucket(int level) { LineTexBucket(int level) {
super(TEXLINE, false, true); super(TEXLINE, false, true);
@ -101,6 +96,10 @@ public final class LineTexBucket extends LineBucket {
this.evenSegment = true; this.evenSegment = true;
} }
public void setTexRepeat(boolean texRepeat) {
mTexRepeat = texRepeat;
}
@Override @Override
public void addLine(GeometryBuffer geom) { public void addLine(GeometryBuffer geom) {
addLine(geom.points, geom.index, -1, false); addLine(geom.points, geom.index, -1, false);
@ -185,7 +184,8 @@ public final class LineTexBucket extends LineBucket {
} else { } else {
addShortVertex(vi, (short) x, (short) y, (short) nx, (short) ny, addShortVertex(vi, (short) x, (short) y, (short) nx, (short) ny,
dx, dy, (short) lineLength, (int) dist); dx, dy, (short) lineLength, (int) dist);
lineLength += dist; if (mTexRepeat)
lineLength += dist;
} }
x = nx; x = nx;
y = ny; y = ny;