|
@@ -0,0 +1,271 @@
|
|
|
+/*
|
|
|
+ * ********************************************************************************************************************
|
|
|
+ *
|
|
|
+ * iFHS7.
|
|
|
+ * ;BBMBMBMc rZMBMBR BMB
|
|
|
+ * MBEr:;PBM, 7MBMMEOBB: BBB RBW
|
|
|
+ * XK: BO SB. :SZ MBM. c;; ir BBM :FFr :SSF: ;xBMB:r iuGXv. i:. iF2;
|
|
|
+ * DBBM0r. :D S7 ;XMBMB GMBMu. MBM: BMB MBMBBBMBMS WMBMBMBBK MBMBMBM BMBRBMBW .MBMBMBMBB
|
|
|
+ * :JMRMMD .. , 1MMRM1; ;MBMBBR: MBM ;MB: BMB: MBM. RMBr sBMH BM0 UMB, BMB. KMBv
|
|
|
+ * ;. XOW B1; :uM: 1RE, i .2BMBs rMB. MBO MBO JMB; MBB MBM BBS 7MBMBOBM: MBW :BMc
|
|
|
+ * OBRJ.SEE MRDOWOR, 3DE:7OBM . ;BMB RMR7BM BMB MBB. BMB ,BMR .BBZ MMB rMB, BMM rMB7
|
|
|
+ * :FBRO0D0 RKXSXPR. JOKOOMPi BMBSSWBMB; BMBB: MBMB0ZMBMS .BMBOXRBMB MBMDE RBM2;SMBM; MBB xBM2
|
|
|
+ * iZGE O0SHSPO. uGZ7. sBMBMBDL :BMO OZu:BMBK, rRBMB0; ,EBMB xBMBr:ER. RDU :OO;
|
|
|
+ * ,BZ, 1D0 RPSFHXR. xWZ .SMr . .BBB
|
|
|
+ * :0BMRDG RESSSKR. 2WOMBW; BMBMR
|
|
|
+ * i0BM: SWKHKGO MBDv
|
|
|
+ * .UB OOGDM. MK, Copyright (c) 2015-2019. 斯伯坦机器人
|
|
|
+ * , XMW ..
|
|
|
+ * r All rights reserved.
|
|
|
+ *
|
|
|
+ * ********************************************************************************************************************
|
|
|
+ */
|
|
|
+
|
|
|
+package com.sybotan.android.demo.activities
|
|
|
+
|
|
|
+import android.annotation.SuppressLint
|
|
|
+import android.graphics.Color
|
|
|
+import android.graphics.PointF
|
|
|
+import android.os.Bundle
|
|
|
+import android.widget.TextView
|
|
|
+import android.widget.Toast
|
|
|
+import android.widget.*
|
|
|
+import androidx.appcompat.widget.AppCompatEditText
|
|
|
+import androidx.appcompat.widget.LinearLayoutCompat
|
|
|
+import androidx.core.content.ContextCompat
|
|
|
+import androidx.recyclerview.widget.GridLayoutManager
|
|
|
+import cn.sagacloud.android.cadengine.FloorScene
|
|
|
+import cn.sagacloud.android.cadengine.Lasso
|
|
|
+import cn.sagacloud.android.cadengine.Opt
|
|
|
+import cn.sagacloud.android.cadengine.items.*
|
|
|
+import cn.sagacloud.android.cadengine.types.*
|
|
|
+import cn.sagacloud.android.cadengine.types.Space
|
|
|
+import com.bumptech.glide.Glide
|
|
|
+import com.google.gson.Gson
|
|
|
+import com.google.gson.JsonArray
|
|
|
+import com.google.gson.JsonElement
|
|
|
+import com.google.gson.JsonObject
|
|
|
+import com.google.gson.reflect.TypeToken
|
|
|
+import com.sybotan.android.demo.R
|
|
|
+import com.sybotan.android.demo.adapter.PictureAdapter
|
|
|
+import com.sybotan.android.demo.bean.result.*
|
|
|
+import com.sybotan.android.demo.graphy.GraphyHelper
|
|
|
+import com.sybotan.android.demo.retrofit.Constant
|
|
|
+import com.sybotan.android.demo.tools.*
|
|
|
+import com.sybotan.android.demo.view.MaxHeightRecyclerView
|
|
|
+import com.sybotan.android.demo.viewmodel.GraphyVM
|
|
|
+import com.sybotan.android.demo.viewmodel.SpaceMapVM
|
|
|
+import com.sybotan.android.graphy.SGraphyView
|
|
|
+import com.yuyh.library.imgsel.ImageLoader
|
|
|
+import com.yuyh.library.imgsel.ImgSelConfig
|
|
|
+import com.zbar.lib.CaptureActivity
|
|
|
+import io.reactivex.ObservableEmitter
|
|
|
+import org.jetbrains.anko.doAsync
|
|
|
+import org.jetbrains.anko.uiThread
|
|
|
+import org.json.JSONException
|
|
|
+import org.json.JSONObject
|
|
|
+import org.kodein.di.DI
|
|
|
+import org.kodein.di.DIAware
|
|
|
+import org.kodein.di.android.closestDI
|
|
|
+import java.io.*
|
|
|
+import java.util.*
|
|
|
+import kotlin.collections.ArrayList
|
|
|
+import kotlin.math.abs
|
|
|
+import kotlin.math.pow
|
|
|
+import kotlin.math.sqrt
|
|
|
+
|
|
|
+/**
|
|
|
+ * 设备服务区域绘制
|
|
|
+ */
|
|
|
+class ServeAreaActivity : BaseActivity(), DIAware {
|
|
|
+
|
|
|
+ override val di: DI by closestDI()
|
|
|
+
|
|
|
+ /** viewModel */
|
|
|
+ lateinit var spaceMapVM: SpaceMapVM
|
|
|
+
|
|
|
+ /** 建筑Id */
|
|
|
+ private lateinit var buildingId: String
|
|
|
+
|
|
|
+ /** 楼层Id */
|
|
|
+ private lateinit var floorId: String
|
|
|
+ private lateinit var projectId: String
|
|
|
+ private lateinit var deviceId: String
|
|
|
+ private var scale: Float = 0f
|
|
|
+ private lateinit var area: ServeAreaItem
|
|
|
+ private lateinit var centerPoint: PointF
|
|
|
+
|
|
|
+ /** 楼层地图 */
|
|
|
+ private lateinit var floorMap: String
|
|
|
+
|
|
|
+ val scene = FloorScene()
|
|
|
+ private val gson = Gson()
|
|
|
+ private var hasMove = false
|
|
|
+ private val points = ArrayList<PointF>()
|
|
|
+ private val items = ArrayList<AreaNodeItem>()
|
|
|
+
|
|
|
+ private lateinit var graphyView: SGraphyView
|
|
|
+ private lateinit var close: TextView
|
|
|
+ private lateinit var save: TextView
|
|
|
+ val graphyHelper: GraphyHelper = GraphyHelper(scene, this)
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建Activity时的回调函数
|
|
|
+ *
|
|
|
+ * @param savedInstanceState
|
|
|
+ */
|
|
|
+ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
+ super.onCreate(savedInstanceState)
|
|
|
+ setContentView(R.layout.activity_serve_area)
|
|
|
+ initView()
|
|
|
+
|
|
|
+ /** 初始化数据 */
|
|
|
+ initData()
|
|
|
+ graphyView.scene = scene
|
|
|
+
|
|
|
+ /** 点击监听 */
|
|
|
+ initListener()
|
|
|
+ /** 图形点击-poc业务 */
|
|
|
+ initSingleTopUp()
|
|
|
+ /** 网络请求回调处理 */
|
|
|
+ initViewModel()
|
|
|
+
|
|
|
+ return
|
|
|
+ } // Function onCreate()
|
|
|
+
|
|
|
+
|
|
|
+ private fun initView() {
|
|
|
+ graphyView = findViewById(R.id.graphyView)
|
|
|
+ close = findViewById(R.id.close)
|
|
|
+ save = findViewById(R.id.save)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化数据
|
|
|
+ */
|
|
|
+ private fun initData() {
|
|
|
+ val floor = intent.getBundleExtra("params")!!
|
|
|
+ buildingId = floor.getString("buildingId", "")!!
|
|
|
+ floorId = floor.getString("floorId", "")!!
|
|
|
+ floorMap = floor.getString("floorMap", "")!!
|
|
|
+ projectId = floor.getString("projectId", "")!!
|
|
|
+ deviceId = floor.getString("deviceId", "")!!
|
|
|
+ scale = floor.getFloat("scale")!!
|
|
|
+ centerPoint = floor.getParcelable("centerPoint")!!
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 图形点击事件
|
|
|
+ * */
|
|
|
+ private fun initSingleTopUp() {
|
|
|
+ scene.setOnSingleTopUp(object : FloorScene.OnSingleTopUp {
|
|
|
+ @SuppressLint("SetJavaScriptEnabled")
|
|
|
+ override fun onSingUp(x: Float, y: Float) {
|
|
|
+ if (points.size < 2) {
|
|
|
+ val point = PointF(x, -y)
|
|
|
+ points.add(point)
|
|
|
+ val item = AreaNodeItem(point)
|
|
|
+ item.zOrder = 100000f
|
|
|
+ scene.addItem(item)
|
|
|
+ items.add(item)
|
|
|
+ item.setOnScrollListener(object : AreaNodeItem.OnScroll {
|
|
|
+ override fun onScroll(x: Float, y: Float) {
|
|
|
+ hasMove = true
|
|
|
+ scene.removeItem(area)
|
|
|
+ val newData = ArrayList<PointF>()
|
|
|
+ for (it in items) {
|
|
|
+ newData.add(PointF(it.x, it.y))
|
|
|
+ }
|
|
|
+ area = ServeAreaItem(newData)
|
|
|
+ area.zOrder = 100000f
|
|
|
+ scene.addItem(area)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (points.size == 2 && !hasMove) {
|
|
|
+ area = ServeAreaItem(points)
|
|
|
+ area.zOrder = 100000f
|
|
|
+ scene.addItem(area)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面全部监听事件
|
|
|
+ */
|
|
|
+ private fun initListener() {
|
|
|
+ close.setOnClickListener { finish() }
|
|
|
+ save.setOnClickListener { spaceMapVM.insServeArea() }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化viewModel
|
|
|
+ */
|
|
|
+ private fun initViewModel() {
|
|
|
+ spaceMapVM = SpaceMapVM(this.application, { name, params ->
|
|
|
+ when (name) {
|
|
|
+ /** 加载地图 */
|
|
|
+ SpaceMapVM.MAP_LOAD -> {
|
|
|
+ val floorOfflineData = gson.fromJson(params.toString(), FloorData::class.java)
|
|
|
+ doAsync {
|
|
|
+ scene.loadData(floorOfflineData)
|
|
|
+ uiThread {
|
|
|
+ graphyView.setCenterPoint(centerPoint, scale)
|
|
|
+// graphyView.setCenterPoint(PointF(1f,1f), 0f)
|
|
|
+ }
|
|
|
+ }
|
|
|
+// graphyView.fitSceneToView()
|
|
|
+ }
|
|
|
+ /** 查询空间和任务 */
|
|
|
+ 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 != null && !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.apply {
|
|
|
+ outLine = model.outline.get(0)
|
|
|
+ objectEntity = gson.toJson(model.objectEntity)
|
|
|
+ this.name = model.name
|
|
|
+ jobStatus = model.job
|
|
|
+ id = model.id
|
|
|
+ localName = model.localName
|
|
|
+ }
|
|
|
+ val item = TunableSpaceItem(tunableSpace, null)
|
|
|
+ scene.choseSpace?.let {
|
|
|
+ if (tunableSpace.id.equals(scene.choseSpace!!.data.id)) {
|
|
|
+ item.paint.color = Opt.spaceChoseColor
|
|
|
+ item.outPaint.color = Color.rgb(0xbd, 0xe8, 0xfe)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.isVisible = true
|
|
|
+ item.zOrder = 99996f
|
|
|
+ scene.tunableSpaceList.add(item)
|
|
|
+ scene.addItem(item)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }, this, buildingId, floorId, projectId)
|
|
|
+ spaceMapVM.getMap()
|
|
|
+// spaceMapVM.getSpaceJob()
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+} // Class GraphyActivity
|