Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
fix no hole crash and add triangle hole shape example
Browse files Browse the repository at this point in the history
  • Loading branch information
Guardiola31337 committed Mar 29, 2017
1 parent 9aa2518 commit e965a88
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public abstract class BasePointCollection extends Annotation {
protected BasePointCollection() {
super();
points = new ArrayList<>();
holePoints = new ArrayList<>();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.BLUE_COLOR;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.BROKEN_SHAPE_POINTS;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.FULL_ALPHA;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.HOLE_SHAPE_POINTS;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.NO_ALPHA;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.PARTIAL_ALPHA;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.RED_COLOR;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.STAR_SHAPE_POINTS;
import static com.mapbox.mapboxsdk.testapp.activity.annotation.PolygonActivity.Config.TRIANGLE_HOLE_SHAPE_POINTS;

/**
* Test activity to showcase the Polygon annotation API & programmatically creating a MapView.
Expand Down Expand Up @@ -136,7 +136,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
case R.id.action_id_points:
allPoints = !allPoints;
polygon.setPoints(allPoints ? STAR_SHAPE_POINTS : BROKEN_SHAPE_POINTS);
polygon.setHolePoints(HOLE_SHAPE_POINTS);
polygon.setHolePoints(TRIANGLE_HOLE_SHAPE_POINTS);
return true;
case R.id.action_id_color:
color = !color;
Expand Down Expand Up @@ -182,13 +182,12 @@ static final class Config {
static final List<LatLng> BROKEN_SHAPE_POINTS =
STAR_SHAPE_POINTS.subList(0, STAR_SHAPE_POINTS.size() - 3);

static final List<LatLng> HOLE_SHAPE_POINTS = new ArrayList<LatLng>() {
static final List<LatLng> TRIANGLE_HOLE_SHAPE_POINTS = new ArrayList<LatLng>() {
{
add(new LatLng(45.522584, -122.672653));
add(new LatLng(45.532584, -122.672653));
add(new LatLng(45.532584, -122.682653));
add(new LatLng(45.522584, -122.682653));
add(new LatLng(45.522584, -122.672653));
add(new LatLng(45.521743, -122.669091));
add(new LatLng(45.530483, -122.676833));
add(new LatLng(45.520483, -122.676833));
add(new LatLng(45.521743, -122.669091));
}
};
}
Expand Down
9 changes: 2 additions & 7 deletions platform/android/src/annotation/multi_point.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,9 @@ class MultiPoint : protected mbgl::util::noncopyable {
auto jarray = java::util::List::toArray<LatLng>(env, pointsList);
NullCheck(env, &jarray);

std::size_t jsize = 0;
std::size_t ksize = 0;
std::size_t jsize = jarray.Length(env);
auto karray = java::util::List::toArray<LatLng>(env, holePointsList);
if (holePointsList) {
ksize = karray.Length(env);
} else {
jsize = jarray.Length(env);
}
std::size_t ksize = karray.Length(env);

Geometry geometry;
geometry.reserve(jsize + ksize);
Expand Down
11 changes: 8 additions & 3 deletions platform/android/src/annotation/polyline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ jni::Class<Polyline> Polyline::javaClass;

mbgl::LineAnnotation Polyline::toAnnotation(jni::JNIEnv& env, jni::Object<Polyline> polyline) {
auto points = Polyline::getPoints(env, polyline);

// TODO Pass an empty hole points list
auto holePoints = Polyline::getHolePoints(env, polyline);
mbgl::LineAnnotation annotation { MultiPoint::toGeometry<mbgl::LineString<double>>(env, points,
points) };
holePoints) };
annotation.opacity = { Polyline::getOpacity(env, polyline) };
annotation.color = { Polyline::getColor(env, polyline) };
annotation.width = { Polyline::getWidth(env, polyline) };

jni::DeleteLocalRef(env, points);
jni::DeleteLocalRef(env, holePoints);

return annotation;
}
Expand All @@ -27,6 +27,11 @@ jni::Object<java::util::List> Polyline::getPoints(jni::JNIEnv& env, jni::Object<
return polyline.Get(env, field);
}

jni::Object<java::util::List> Polyline::getHolePoints(jni::JNIEnv& env, jni::Object<Polyline> polyline) {
static auto field = Polyline::javaClass.GetField<jni::Object<java::util::List>>(env, "holePoints");
return polyline.Get(env, field);
}

float Polyline::getOpacity(jni::JNIEnv& env, jni::Object<Polyline> polyline) {
static auto field = Polyline::javaClass.GetField<float>(env, "alpha");
return polyline.Get(env, field);
Expand Down
2 changes: 2 additions & 0 deletions platform/android/src/annotation/polyline.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ class Polyline : private MultiPoint {

static jni::Object<java::util::List> getPoints(jni::JNIEnv&, jni::Object<Polyline>);

static jni::Object<java::util::List> getHolePoints(jni::JNIEnv&, jni::Object<Polyline>);

static float getOpacity(jni::JNIEnv&, jni::Object<Polyline>);

static mbgl::Color getColor(jni::JNIEnv&, jni::Object<Polyline>);
Expand Down

0 comments on commit e965a88

Please sign in to comment.