Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
*.iml
.gradle
/local.properties
/.idea
/.idea/caches
/.idea/libraries
/.idea/modules.xml
Expand Down
1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

208 changes: 159 additions & 49 deletions app/src/main/java/com/thecodework/augmentedreality/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -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<View>(R.id.view)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't you think it is redundant?

findViewById<View>(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
}

}

}
8 changes: 6 additions & 2 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
Expand All @@ -14,4 +13,9 @@
android:layout_height="match_parent"
tools:ignore="MissingClass" />

<View
android:id="@+id/view"
android:background="@color/purple_200"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Binary file modified app/src/main/res/raw/astronaut.sfb
Binary file not shown.