diff --git a/.gitignore b/.gitignore
index aa724b7..8ccc4f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
*.iml
.gradle
/local.properties
+/.idea
/.idea/caches
/.idea/libraries
/.idea/modules.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..d010e37
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+AugmentedReality
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..8a3d936
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..a5f05cd
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fb0d77e..390c127 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/thecodework/augmentedreality/MainActivity.kt b/app/src/main/java/com/thecodework/augmentedreality/MainActivity.kt
index 64bd5d9..aead0a3 100644
--- a/app/src/main/java/com/thecodework/augmentedreality/MainActivity.kt
+++ b/app/src/main/java/com/thecodework/augmentedreality/MainActivity.kt
@@ -1,66 +1,176 @@
package com.thecodework.augmentedreality
+import android.annotation.SuppressLint
import android.os.Build
import android.os.Bundle
+import android.os.Handler
+import android.util.Log
+
+import android.view.GestureDetector
+import android.view.MotionEvent
+import android.view.ScaleGestureDetector
+import android.view.View
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.isVisible
import com.google.ar.sceneform.AnchorNode
import com.google.ar.sceneform.rendering.ModelRenderable
+import com.google.ar.sceneform.ux.*
import com.google.ar.sceneform.ux.ArFragment
import com.google.ar.sceneform.ux.TransformableNode
-class MainActivity : AppCompatActivity() {
- private var arFragment: ArFragment? = null
- private var modelRenderable: ModelRenderable? = null
-
- @RequiresApi(Build.VERSION_CODES.N)
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- init()
- }
- @RequiresApi(Build.VERSION_CODES.N)
- private fun init() {
- arFragment = supportFragmentManager.findFragmentById(R.id.fragment) as ArFragment?
- setUpModel()
- setUpPlane()
- }
-
-
-
- @RequiresApi(Build.VERSION_CODES.N)
- private fun setUpModel() {
- ModelRenderable.builder()
- .setSource(this, R.raw.astronaut)
- .build()
- .thenAccept { renderable: ModelRenderable ->
- modelRenderable = renderable
- }
- .exceptionally { throwable: Throwable? ->
- Toast.makeText(this@MainActivity, "Model can't be Loaded", Toast.LENGTH_SHORT).show()
- null
- }
- }
-
- private fun setUpPlane() {
- arFragment!!.setOnTapArPlaneListener { hitResult, plane, motionEvent ->
- val anchor = hitResult.createAnchor()
- val anchorNode = AnchorNode(anchor)
- anchorNode.setParent(arFragment!!.arSceneView.scene)
-// anchorNode.setParent(arFragment!!.arSceneView.scene)
- createModel(anchorNode)
-// createModel(anchorNode)
+class MainActivity : AppCompatActivity(), View.OnTouchListener {
+ private var view: View? = null
+ private var arFragment: ArFragment? = null
+ private var modelRenderable: ModelRenderable? = null
+ var objscale: ScaleGestureDetector? = null
+
+
+ @RequiresApi(Build.VERSION_CODES.N)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
+ init()
+ objscale = ScaleGestureDetector(this, PinzoomListener())
+ }
+
+
+ @RequiresApi(Build.VERSION_CODES.N)
+ private fun init() {
+ arFragment = supportFragmentManager.findFragmentById(R.id.fragment) as ArFragment?
+ setUpModel()
+ setUpPlane()
+
+ view = findViewById(R.id.view)
+ findViewById(R.id.view).setOnTouchListener(this)
}
- }
- private fun createModel(anchorNode: AnchorNode) {
- val node = TransformableNode(arFragment!!.transformationSystem)
- node.setParent(anchorNode)
- node.renderable = modelRenderable
- node.select()
- }
+ @RequiresApi(Build.VERSION_CODES.N)
+ private fun setUpModel() {
+ ModelRenderable.builder()
+ .setSource(this, R.raw.astronaut)
+ .build()
+ .thenAccept { renderable: ModelRenderable ->
+ modelRenderable = renderable
+ }
+ .exceptionally { throwable: Throwable? ->
+ Toast.makeText(this@MainActivity, "Model can't be Loaded", Toast.LENGTH_SHORT)
+ .show()
+ null
+ }
+ }
+
+ private fun setUpPlane() {
+ arFragment!!.setOnTapArPlaneListener { hitResult, plane, motionEvent ->
+ val anchor = hitResult.createAnchor()
+ val anchorNode = AnchorNode(anchor)
+ anchorNode.setParent(arFragment!!.arSceneView.scene)
+ createModel(anchorNode)
+ Log.d(
+ "PinchCheck",
+ "Motion Event "
+ + motionEvent.action + "x axis "
+ + motionEvent.getX().toString() + " y axis "
+ + motionEvent.getY().toString() + "down time"
+ + motionEvent.downTime + "event time"
+ + motionEvent.eventTime + "pressure"
+ + motionEvent.pressure + "size"
+ + motionEvent.size + "x precision"
+ + motionEvent.xPrecision + "y precision"
+ + motionEvent.yPrecision + "device id"
+ + motionEvent.deviceId + "meta state"
+ + motionEvent.metaState + "edge flag"
+ + motionEvent.edgeFlags
+ )
+ // objscale?.onTouchEvent(motionEvent)
+
+ }
+ }
+
+ private fun createModel(anchorNode: AnchorNode) {
+ val node = TransformableNode(arFragment!!.transformationSystem)
+ node.setParent(anchorNode)
+ node.renderable = modelRenderable
+// node.scaleController.onContinueTransformation(triggerPinch())
+// view?.isVisible = false
+ onScale(node)
+ node.select()
+
+
+ }
+
+ private fun onScale(node: TransformableNode) {
+ node.scaleController.maxScale = 1.0f
+ // node.scaleController.elasticity = 0.5f
+ node.scaleController.minScale = 0.25f
+ }
+
+ private fun triggerPinch(): PinchGesture {
+ val gesturePointersUtility = GesturePointersUtility(getResources().getDisplayMetrics())
+ val motionEvent =
+ MotionEvent.obtain(
+ 8387,
+ 8387,
+ MotionEvent.ACTION_UP,
+ 401.44f,
+ 780.45f,
+ 1.0f,
+ 0.0176f,
+ 0,
+ 1.001f,
+ 1.001f,
+ 6,
+ 0
+ )
+ val actionId = motionEvent.getPointerId(motionEvent.actionIndex)
+ return PinchGesture(gesturePointersUtility, motionEvent, actionId)
+ }
+
+ inner class PinzoomListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
+ override fun onScale(detector: ScaleGestureDetector): Boolean {
+ val scaleFactor = detector.scaleFactor
+ if (scaleFactor > 1) {
+ Log.d("PinchCheck", "Zoom out")
+ } else {
+ Log.d("PinchCheck", "Zoom in")
+ }
+ return true
+ }
+
+ override fun onScaleBegin(detector: ScaleGestureDetector): Boolean {
+ return true
+ }
+
+ override fun onScaleEnd(detector: ScaleGestureDetector) {
+ }
+ }
+
+
+ @SuppressLint("ClickableViewAccessibility")
+ override fun onTouch(p0: View?, motionEvent: MotionEvent?): Boolean {
+
+ if (motionEvent != null) {
+ Log.d(
+ "PinchCheck",
+ "Motion Event "
+ + motionEvent.action + "x axis "
+ + motionEvent.getX().toString() + " y axis "
+ + motionEvent.getY().toString() + "down time"
+ + motionEvent.downTime + "event time"
+ + motionEvent.eventTime + "pressure"
+ + motionEvent.pressure + "size"
+ + motionEvent.size + "x precision"
+ + motionEvent.xPrecision + "y precision"
+ + motionEvent.yPrecision + "device id"
+ + motionEvent.deviceId + "meta state"
+ + motionEvent.metaState + "edge flag"
+ + motionEvent.edgeFlags
+ )
+ }
+ return true
+ }
+}
-}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 1546175..202f5b2 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,6 +1,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/raw/astronaut.sfb b/app/src/main/res/raw/astronaut.sfb
index de45959..648b065 100644
Binary files a/app/src/main/res/raw/astronaut.sfb and b/app/src/main/res/raw/astronaut.sfb differ