aboutsummaryrefslogtreecommitdiffhomepage
path: root/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java
diff options
context:
space:
mode:
authorGravatar ziadb <ziadb@google.com>2018-07-20 13:10:11 -0400
committerGravatar Ziad Ben Hadj-Alouane <ziadb@google.com>2018-07-26 15:29:41 +0000
commit897f256413c13d932a3c6f34eebe156c96defab8 (patch)
tree72471453374b96dced1817ad59a3eed4e0761414 /platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java
parentd26b4d865ac57d1b5ef810dd4408d8cc147b3460 (diff)
SkAR Java: smooth finger painting, planes draw with outlines
Bug: skia: Change-Id: I0e6f3c00f030f7a03c3829cd4ff22ac7459dc132 Reviewed-on: https://skia-review.googlesource.com/142685 Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java')
-rw-r--r--platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java67
1 files changed, 57 insertions, 10 deletions
diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java
index 5fc31e7ff8..c93a900f58 100644
--- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java
+++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/SkARFingerPainting.java
@@ -3,33 +3,80 @@ package com.google.skar;
import android.graphics.Path;
import android.graphics.PointF;
+import java.util.ArrayList;
+
public class SkARFingerPainting {
+ // Points obtained by touching the screen. The first point is always brough to (0,0).
+ // All subsequent points are translated by the same amount.
+ public ArrayList<PointF> points = new ArrayList<>();
+
public Path path = new Path();
// Previous point added to the path. This points belongs to the path in local space.
public PointF previousPoint;
- private int numberOfPoints = 0;
-
// Holds the model matrix of the first point added to such that the path can be drawn at the
// model location (i.e on the Plane)
private float[] modelMatrix;
- public SkARFingerPainting() {}
+ private boolean isSmooth;
+
+ public SkARFingerPainting(boolean smooth) {
+ this.isSmooth = smooth;
+ }
+
+ public boolean getSmoothness() {
+ return isSmooth;
+ }
+
+ public void setSmoothness(boolean smooth) {
+ isSmooth = smooth;
+ }
// Adds another point to the path in Local space
public void addPoint(PointF p) {
- if (numberOfPoints == 0) {
- path.moveTo(p.x, p.y);
+ points.add(p);
+ previousPoint = p;
+ }
+
+ // Used to build a path before rendering it
+ public void buildPath() {
+ if (points.size() < 1) {
+ return;
+ }
+
+ path = new Path();
+ if (isSmooth) {
+ // If less than 3 points, than draw a line between the two points
+ if (points.size() <= 2 && points.size() > 0) {
+ path.moveTo(points.get(0).x, points.get(0).y);
+ path.lineTo(points.get(1).x, points.get(1).y);
+ } else if (points.size() >= 3){
+ // Else, essentially run deCasteljau
+ path.moveTo(points.get(0).x, points.get(0).y);
+ PointF mid = new PointF((points.get(0).x + points.get(1).x) / 2,
+ (points.get(0).y + points.get(1).y) / 2);
+ path.lineTo(mid.x, mid.y);
+
+ for (int i = 1; i < points.size() - 1; i++) {
+ PointF p1 = points.get(i);
+ PointF p2 = points.get(i + 1);
+ PointF midP = new PointF((p1.x + p2.x) / 2,(p1.y + p2.y) / 2);
+ path.quadTo(p1.x, p1.y, midP.x, midP.y);
+ }
+
+ path.lineTo(points.get(points.size() - 1).x, points.get(points.size() - 1).y);
+ }
} else {
- path.lineTo(p.x, p.y);
+ path.moveTo(points.get(0).x, points.get(0).y);
+ for (int i = 1; i < points.size(); i++) {
+ path.lineTo(points.get(i).x, points.get(i).y);
+ }
}
- previousPoint = p;
- numberOfPoints++;
}
public boolean isEmpty() {
- return numberOfPoints == 0;
+ return path.isEmpty();
}
public float[] getModelMatrix() {
@@ -41,7 +88,7 @@ public class SkARFingerPainting {
}
public void reset() {
+ points = new ArrayList<>();
path = new Path();
- numberOfPoints = 0;
}
}