aboutsummaryrefslogtreecommitdiffhomepage
path: root/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java')
-rw-r--r--platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java47
1 files changed, 46 insertions, 1 deletions
diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java
index 7e5ac29384..020df5ea33 100644
--- a/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java
+++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/ar/core/examples/java/helloskar/DrawManager.java
@@ -1,12 +1,14 @@
package com.google.ar.core.examples.java.helloskar;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
+import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
@@ -15,10 +17,13 @@ import android.graphics.PorterDuffColorFilter;
import android.graphics.RectF;
import android.graphics.Shader;
import android.opengl.Matrix;
+import android.os.Build;
+
import com.google.ar.core.Plane;
import com.google.ar.core.PointCloud;
import com.google.ar.core.Pose;
import com.google.ar.core.TrackingState;
+import com.google.skar.SkARFingerPainting;
import com.google.skar.SkARMatrix;
import com.google.skar.SkARUtil;
import java.io.IOException;
@@ -40,6 +45,7 @@ public class DrawManager {
private ColorFilter lightFilter;
private BitmapShader planeShader;
public ArrayList<float[]> modelMatrices = new ArrayList<>();
+ public SkARFingerPainting fingerPainting = new SkARFingerPainting();
public void updateViewport(float width, float height) {
viewportWidth = width;
@@ -58,6 +64,10 @@ public class DrawManager {
lightFilter = SkARUtil.createLightCorrectionColorFilter(colorCorr);
}
+ public void updateFingerPainting(PointF p) {
+ fingerPainting.addPoint(p);
+ }
+
// Sample function for drawing a circle
public void drawCircle(Canvas canvas) {
if (modelMatrices.isEmpty()) {
@@ -129,6 +139,41 @@ public class DrawManager {
canvas.restore();
}
+ public void drawFingerPainting(Canvas canvas) {
+ if (fingerPainting.path.isEmpty()) {
+ return;
+ }
+
+ // Get finger painting model matrix
+ float[] m = fingerPainting.getModelMatrix();
+ float[] model = new float[16];
+ Matrix.setIdentityM(model, 0);
+ Matrix.translateM(model, 0, m[12], m[13], m[14]);
+
+ float[] initRot = SkARMatrix.createXYtoXZRotationMatrix();
+
+ // Matrix = mvpv
+ float[][] matrices = {initRot, model, viewMatrix, projectionMatrix, SkARMatrix.createViewportMatrix(viewportWidth, viewportHeight)};
+ android.graphics.Matrix mvpv = SkARMatrix.createMatrixFrom4x4(SkARMatrix.multiplyMatrices4x4(matrices));
+
+ // Set up paint
+ Paint p = new Paint();
+ p.setColor(Color.GREEN);
+ p.setStyle(Paint.Style.STROKE);
+ p.setStrokeWidth(10f);
+ p.setAlpha(120);
+
+ // Build destination path by transforming source path
+ Path pathDst = new Path();
+ fingerPainting.path.transform(mvpv, pathDst);
+
+ // Draw dest path
+ canvas.save();
+ canvas.setMatrix(new android.graphics.Matrix());
+ canvas.drawPath(pathDst, p);
+ canvas.restore();
+ }
+
// Sample function for drawing the AR point cloud
public void drawPointCloud(Canvas canvas, PointCloud cloud) {
FloatBuffer points = cloud.getPoints();
@@ -224,7 +269,7 @@ public class DrawManager {
// Shader local matrix
android.graphics.Matrix lm = new android.graphics.Matrix();
- lm.setScale(0.0005f, 0.0005f);
+ lm.setScale(0.00005f, 0.00005f);
lm.postConcat(mvpv);
planeShader.setLocalMatrix(lm);