|
@@ -23,35 +23,32 @@
|
|
|
|
|
|
package com.sybotan.android.demo.activities
|
|
|
|
|
|
-import android.app.Activity
|
|
|
-import android.graphics.BitmapFactory
|
|
|
-import android.graphics.PointF
|
|
|
-import android.support.v7.app.AppCompatActivity
|
|
|
import android.os.Bundle
|
|
|
import android.util.Log
|
|
|
-import android.util.SizeF
|
|
|
import android.widget.Toast
|
|
|
import cn.sagacloud.android.cadengine.FloorScene
|
|
|
import cn.sagacloud.cadengine.HttpDownloadMap
|
|
|
-import com.fasterxml.jackson.databind.PropertyNamingStrategy
|
|
|
import com.sybotan.android.demo.R
|
|
|
-import com.sybotan.android.demo.R.id.graphyView
|
|
|
-import com.sybotan.android.demo.entitiies.Revit
|
|
|
-import com.sybotan.android.demo.graphy.GraphyWallItem
|
|
|
-import com.sybotan.android.graphy.SGraphyScene
|
|
|
import com.sybotan.android.graphy.events.SGraphyViewMoveEvent
|
|
|
-import com.sybotan.android.graphy.items.SGraphyClockItem
|
|
|
-import com.sybotan.base.utils.SJsonUtil
|
|
|
import kotlinx.android.synthetic.main.activity_graphy.*
|
|
|
import org.greenrobot.eventbus.EventBus
|
|
|
import org.greenrobot.eventbus.Subscribe
|
|
|
import org.jetbrains.anko.doAsync
|
|
|
import org.jetbrains.anko.uiThread
|
|
|
-import android.support.v4.app.ActivityCompat.startActivityForResult
|
|
|
|
|
|
import android.content.Intent
|
|
|
import android.view.View
|
|
|
import cn.sagacloud.android.cadengine.items.PointItem
|
|
|
+import cn.sagacloud.android.cadengine.items.QrcodeItem
|
|
|
+import cn.sagacloud.android.cadengine.items.SpaceNameItem
|
|
|
+import cn.sagacloud.android.cadengine.items.TunableSpaceItem
|
|
|
+import cn.sagacloud.android.cadengine.types.Point
|
|
|
+import cn.sagacloud.android.cadengine.types.Space
|
|
|
+import cn.sagacloud.android.cadengine.types.TunableSpace
|
|
|
+import com.google.gson.Gson
|
|
|
+import com.sybotan.android.demo.bean.result.Position
|
|
|
+import com.sybotan.android.demo.bean.result.ProblemsModel
|
|
|
+import com.sybotan.android.demo.bean.result.QrcodeModel
|
|
|
import com.sybotan.android.demo.bean.result.SpaceJobModel
|
|
|
import com.sybotan.android.demo.viewmodel.GraphyVM
|
|
|
import com.zbar.lib.CaptureActivity
|
|
@@ -63,6 +60,8 @@ class GraphyActivity : BaseActivity() {
|
|
|
private val REQUEST_CODE_SCAN = 0x0000 // 扫描二维码
|
|
|
}
|
|
|
|
|
|
+ lateinit var graphyVM: GraphyVM
|
|
|
+
|
|
|
//实际距离
|
|
|
val distance = 1800f
|
|
|
|
|
@@ -70,6 +69,7 @@ class GraphyActivity : BaseActivity() {
|
|
|
var realDistance = 0f
|
|
|
|
|
|
val scene = FloorScene()
|
|
|
+ val gson = Gson()
|
|
|
|
|
|
// val path = "base/cbde057b91e711eb9901557a780001bf.jsonz"
|
|
|
// val path = "base/ebd53bb00d3511eb9a1db95f725712e8.jsonz"
|
|
@@ -98,10 +98,7 @@ class GraphyActivity : BaseActivity() {
|
|
|
|
|
|
/** 开启异步 */
|
|
|
doAsync {
|
|
|
-// scene.loadUrl("http://adm.sagacloud.cn/image-service/common/file_get?systemId=revit&key=base/61a99fc1a66b11eb8f633d7605ae9def.jsonz")
|
|
|
-// scene.loadUrl("http://api.sagacloud.cn/dp-auxiliary/image-service/common/file_get?systemId=revit&key=Fl42010500018b580334dcf111e8a553db1eadfac99320190803114958bim.jsonz",false)
|
|
|
- val downloadGZIPMap =
|
|
|
- HttpDownloadMap.downloadGZIPMap(path)
|
|
|
+ val downloadGZIPMap = HttpDownloadMap.downloadGZIPMap(path)
|
|
|
if (downloadGZIPMap != null) {
|
|
|
scene.loadData(downloadGZIPMap!!)
|
|
|
}
|
|
@@ -119,35 +116,52 @@ class GraphyActivity : BaseActivity() {
|
|
|
Log.e("viewH", graphyView.measuredHeight.toString())
|
|
|
}
|
|
|
}
|
|
|
- nfc.setOnClickListener { Toast.makeText(this, "正在开发中,敬请期待", Toast.LENGTH_SHORT).show() }
|
|
|
- modelCheckBox.setOnCheckedChangeListener { buttonView, isChecked ->
|
|
|
- if (isChecked) {
|
|
|
- modelSubmit.isEnabled = true
|
|
|
- modelSubmit.alpha = 1f
|
|
|
- } else {
|
|
|
- modelSubmit.isEnabled = false
|
|
|
- modelSubmit.alpha = 0.3f
|
|
|
- }
|
|
|
- }
|
|
|
+ /** 点击监听 */
|
|
|
+ initListener()
|
|
|
+ /** 图形点击-poc业务 */
|
|
|
+ initSingleTopUp()
|
|
|
+ /** 网络请求回调处理 */
|
|
|
+ initViewModel()
|
|
|
|
|
|
- addDot.setOnClickListener {
|
|
|
- scene.type = "dot"
|
|
|
- addDot.alpha = 0.3f
|
|
|
- }
|
|
|
|
|
|
- qrcode.setOnClickListener {
|
|
|
- val intent = Intent(this@GraphyActivity, CaptureActivity::class.java)
|
|
|
- startActivityForResult(intent, REQUEST_CODE_SCAN)
|
|
|
- }
|
|
|
+ return
|
|
|
+ } // Function onCreate()
|
|
|
|
|
|
+ /**
|
|
|
+ * 图形点击事件
|
|
|
+ * */
|
|
|
+ private fun initSingleTopUp() {
|
|
|
scene.setOnSingleTopUp(object : FloorScene.OnSingleTopUp {
|
|
|
override fun onSingUp(x: Float, y: Float) {
|
|
|
+ //选中空间完毕界面逻辑
|
|
|
+ if (scene.mapType.equals("space")) {
|
|
|
+ spaceStructure.visibility = View.VISIBLE
|
|
|
+ spaceName.text = scene.choseSpace!!.data.localName
|
|
|
+ graphyVM.getProblem(scene.choseSpace)
|
|
|
+ graphyVM.getQrcode(scene.choseSpace)
|
|
|
+ //未选中空间
|
|
|
+ } else if (scene.mapType.equals("nothing")) {
|
|
|
+ spaceStructure.visibility = View.GONE
|
|
|
+ qrcodeLl.visibility = View.GONE
|
|
|
+ for (item in scene.pointItemList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ scene.pointItemList.clear()
|
|
|
+ for (item in scene.qrcodeItemList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ scene.qrcodeItemList.clear()
|
|
|
+ }
|
|
|
+
|
|
|
+ //打点业务
|
|
|
if ("dot".equals(scene.type)) {
|
|
|
scene.type = "normal"
|
|
|
addDot.alpha = 1f
|
|
|
+ graphyVM.addProblem(scene.choseSpace, x, y)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ //查看模式下,判断问题点选中逻辑
|
|
|
if ("normal".equals(scene.type)) {
|
|
|
realDistance = distance * scene.defaultPointScale / graphyView.scale
|
|
|
for (point in scene.pointItemList) {
|
|
@@ -158,33 +172,220 @@ class GraphyActivity : BaseActivity() {
|
|
|
) + Math.pow(Math.abs(y - point.data.mY).toDouble(), 2.0)
|
|
|
).toInt()
|
|
|
if (sqrt < realDistance) {
|
|
|
- Toast.makeText(this@GraphyActivity, "x=" + x, Toast.LENGTH_LONG).show()
|
|
|
showDotDetail(point)
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+ //绑定二位码业务
|
|
|
+ if ("qrcode".equals(scene.type)) {
|
|
|
+ qrcodeLl.visibility = View.VISIBLE
|
|
|
+ qrcodeLocation.setText("(${scene.point.mX},${scene.point.mY})")
|
|
|
+ spaceStructure.visibility = View.GONE
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
- initViewModel()
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 页面全部监听事件
|
|
|
+ */
|
|
|
+ private fun initListener() {
|
|
|
+ //nfc点击监听
|
|
|
+ nfc.setOnClickListener { Toast.makeText(this, "正在开发中,敬请期待", Toast.LENGTH_SHORT).show() }
|
|
|
|
|
|
- return
|
|
|
- } // Function onCreate()
|
|
|
+ //checkBox
|
|
|
+ modelCheckBox.setOnCheckedChangeListener { buttonView, isChecked ->
|
|
|
+ if (isChecked) {
|
|
|
+ modelSubmit.isEnabled = true
|
|
|
+ modelSubmit.alpha = 1f
|
|
|
+ } else {
|
|
|
+ modelSubmit.isEnabled = false
|
|
|
+ modelSubmit.alpha = 0.3f
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置空间的任务状态完成
|
|
|
+ modelSubmit.setOnClickListener {
|
|
|
+ graphyVM.setJob(scene.choseSpace, codeEdit.text.toString())
|
|
|
+ }
|
|
|
+
|
|
|
+ //打点按钮
|
|
|
+ addDot.setOnClickListener {
|
|
|
+ scene.type = "dot"
|
|
|
+ addDot.alpha = 0.3f
|
|
|
+ }
|
|
|
+
|
|
|
+ //绑定二维码按钮
|
|
|
+ qrcode.setOnClickListener {
|
|
|
+ scene.type = "qrcode"
|
|
|
+ qrcodeLl.visibility = View.VISIBLE
|
|
|
+ spaceStructure.visibility = View.GONE
|
|
|
+ }
|
|
|
+
|
|
|
+ //取消绑定二维码
|
|
|
+ qrcodeCancel.setOnClickListener {
|
|
|
+ qrcodeLl.visibility = View.GONE
|
|
|
+ spaceStructure.visibility = View.VISIBLE
|
|
|
+ scene.type = "normal"
|
|
|
+ scene.item?.let { it1 -> scene.removeItem(it1) }
|
|
|
+ }
|
|
|
+
|
|
|
+ //下一步
|
|
|
+ qrcodeNext.setOnClickListener {
|
|
|
+ val intent = Intent(this@GraphyActivity, CaptureActivity::class.java)
|
|
|
+ startActivityForResult(intent, REQUEST_CODE_SCAN)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 初始化viewModel
|
|
|
+ */
|
|
|
private fun initViewModel() {
|
|
|
- var graphyVM = GraphyVM({ name, params ->
|
|
|
+ graphyVM = GraphyVM({ name, params ->
|
|
|
when (name) {
|
|
|
+
|
|
|
+ /** 查询空间和任务 */
|
|
|
GraphyVM.SPACE_JOB -> {
|
|
|
+ for (item in scene.tunableSpaceList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ scene.tunableSpaceList.clear()
|
|
|
+
|
|
|
val list = params as (List<SpaceJobModel>)
|
|
|
+ for (model in list) {
|
|
|
+ if (!model.outline.isEmpty()) {
|
|
|
+ val space = Space()
|
|
|
+ space.outLine = model.outline.get(0)
|
|
|
+ space.name = model.name
|
|
|
+ val nameItem = SpaceNameItem(space)
|
|
|
+ nameItem.zOrder = 99999f
|
|
|
+ nameItem.isVisible = scene.isShowSpace
|
|
|
+ scene.spaceNameList.add(nameItem)
|
|
|
+ scene.addItem(nameItem)
|
|
|
+
|
|
|
+ val tunableSpace = TunableSpace()
|
|
|
+ tunableSpace.outLine = model.outline.get(0)
|
|
|
+ tunableSpace.name = model.name
|
|
|
+ tunableSpace.jobStatus = model.job
|
|
|
+ tunableSpace.id = model.id
|
|
|
+ tunableSpace.localName = model.localName
|
|
|
+ val item = TunableSpaceItem(tunableSpace, null)
|
|
|
+ item.isVisible = true
|
|
|
+ item.zOrder = 99996f
|
|
|
+ scene.tunableSpaceList.add(item)
|
|
|
+ scene.addItem(item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /** 添加空间核查问题 */
|
|
|
+ GraphyVM.ADD_PROBLEM -> {
|
|
|
+ Toast.makeText(this, "记录成功", Toast.LENGTH_SHORT).show()
|
|
|
+ graphyVM.getProblem(scene.choseSpace)
|
|
|
+ graphyVM.getSpaceJob()
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 查询空间核查问题 */
|
|
|
+ GraphyVM.GET_PROBLEM -> {
|
|
|
+ for (item in scene.pointItemList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ scene.pointItemList.clear()
|
|
|
+ var list = params as ArrayList<ProblemsModel>
|
|
|
+ for (model in list) {
|
|
|
+ val point = Point()
|
|
|
+ var position = gson.fromJson(model.position, Position::class.java)
|
|
|
+ point.mX = position.x.toFloat()
|
|
|
+ point.mY = position.y.toFloat()
|
|
|
+ point.id = model.id
|
|
|
+ var item = PointItem(point, null, scene.defaultPointScale)
|
|
|
+ item.isVisible = true
|
|
|
+ item.zOrder = 100000f
|
|
|
+ scene.pointItemList.add(item)
|
|
|
+ scene.addItem(item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 关闭空间核查问题 */
|
|
|
+ GraphyVM.CLOSE_PROBLEM -> {
|
|
|
+ graphyVM.getProblem(scene.choseSpace)
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 绑定二维码 */
|
|
|
+ GraphyVM.BIND_QECODE -> {
|
|
|
+ Toast.makeText(this, "绑定成功", Toast.LENGTH_SHORT).show()
|
|
|
+ scene.type = "normal"
|
|
|
+ qrcodeLl.visibility = View.GONE
|
|
|
+ spaceStructure.visibility = View.VISIBLE
|
|
|
+ scene.removeItem(scene.item!!)
|
|
|
+ scene.qrcodeItemList.clear()
|
|
|
+ graphyVM.getQrcode(scene.choseSpace)
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 查询对象绑定的二维码 */
|
|
|
+ GraphyVM.GET_QECODE -> {
|
|
|
+ val models = params as ArrayList<QrcodeModel>
|
|
|
+ for (model in models) {
|
|
|
+ val point = Point()
|
|
|
+ var position = gson.fromJson(model.position, Position::class.java)
|
|
|
+ point.mX = position.x.toFloat()
|
|
|
+ point.mY = position.y.toFloat()
|
|
|
+
|
|
|
+ var item = QrcodeItem(point, null, scene.defaultPointScale)
|
|
|
+ item.isVisible = true
|
|
|
+ item.zOrder = 100000f
|
|
|
+ scene.qrcodeItemList.add(item)
|
|
|
+ scene.addItem(item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 设置空间的任务状态(新建和修改) */
|
|
|
+ GraphyVM.SET_JOB -> {
|
|
|
+ Toast.makeText(this, "核查成功", Toast.LENGTH_SHORT).show()
|
|
|
+ refreshAll()
|
|
|
+ graphyVM.getSpaceJob()
|
|
|
+ }
|
|
|
|
|
|
+ /** 设置空间核查问题的信息和状态 */
|
|
|
+ GraphyVM.SET_PROBLEM -> {
|
|
|
+ graphyVM.getSpaceJob()
|
|
|
}
|
|
|
}
|
|
|
}, this)
|
|
|
graphyVM.getSpaceJob()
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 重置空间界面
|
|
|
+ */
|
|
|
+ private fun refreshAll() {
|
|
|
+ for (item in scene.pointItemList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ scene.pointItemList.clear()
|
|
|
+
|
|
|
+ for (item in scene.tunableSpaceList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ scene.tunableSpaceList.clear()
|
|
|
+
|
|
|
+ for (item in scene.qrcodeItemList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ scene.qrcodeItemList.clear()
|
|
|
+
|
|
|
+ spaceStructure.visibility = View.GONE
|
|
|
+ scene.type = "normal"
|
|
|
+ modelCheckBox.isChecked = false
|
|
|
+ codeEdit.setText("")
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 显示点位信息框
|
|
|
+ */
|
|
|
private fun showDotDetail(point: PointItem) {
|
|
|
spaceStructure.visibility = View.GONE
|
|
|
quesDetail.visibility = View.VISIBLE
|
|
@@ -194,14 +395,25 @@ class GraphyActivity : BaseActivity() {
|
|
|
"\ny轴:${point.data.mY}" +
|
|
|
"\n点击下方“问题已解决”按钮后可关闭该问题点。"
|
|
|
)
|
|
|
+ //问题已解决按钮
|
|
|
quesSubmit.setOnClickListener {
|
|
|
+ graphyVM.closeProblem(point, scene.choseSpace)
|
|
|
spaceStructure.visibility = View.VISIBLE
|
|
|
quesDetail.visibility = View.GONE
|
|
|
- scene.removeItem(point)
|
|
|
scene.pointItemList.remove(point)
|
|
|
+ scene.removeItem(point)
|
|
|
+ if (scene.pointItemList.isEmpty()) {
|
|
|
+ for (item in scene.tunableSpaceList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ graphyVM.getSpaceJob()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 扫码返回uuid
|
|
|
+ */
|
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
|
|
super.onActivityResult(requestCode, resultCode, data)
|
|
|
when (requestCode) {
|
|
@@ -212,6 +424,12 @@ class GraphyActivity : BaseActivity() {
|
|
|
val bundle = data.extras
|
|
|
val result = bundle.getString(CaptureActivity.EXTRA_STRING)
|
|
|
Log.e("tag", "扫描结果:$result")
|
|
|
+ graphyVM.bindQrcode(
|
|
|
+ scene.choseSpace,
|
|
|
+ result,
|
|
|
+ scene.point,
|
|
|
+ qrcodeEdit.text.toString()
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
else -> {
|