MarkerInfoCallback.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using LitJson;
  5. using UnityEngine;
  6. using UnityEngine.XR;
  7. #if PICO_XR
  8. using Unity.XR.PXR;
  9. #else
  10. using Unity.XR.OpenXR.Features.PICOSupport;
  11. #endif
  12. namespace Unity.XR.PICO.TOBSupport
  13. {
  14. public class MarkerInfoCallback : AndroidJavaProxy
  15. {
  16. public Action<List<MarkerInfo>> mCallback;
  17. private List<MarkerInfo> mlist = new List<MarkerInfo>();
  18. private TrackingOriginModeFlags TrackingMode;
  19. private float YOffset;
  20. public MarkerInfoCallback(TrackingOriginModeFlags trackingMode, float cameraYOffset,
  21. Action<List<MarkerInfo>> callback) : base("com.picoxr.tobservice.interfaces.StringCallback")
  22. {
  23. TrackingMode = trackingMode;
  24. YOffset = cameraYOffset;
  25. mCallback = callback;
  26. mlist.Clear();
  27. #if PICO_XR
  28. #else
  29. OpenXRExtensions.SetMarkMode();
  30. #endif
  31. }
  32. public void CallBack(string var1)
  33. {
  34. Debug.Log("ToBService MarkerInfo Callback 回调:" + var1);
  35. List<MarkerInfo> tmp = JsonToMarkerInfos(var1);
  36. PXR_EnterpriseTools.QueueOnMainThread(() =>
  37. {
  38. if (mCallback != null)
  39. {
  40. mCallback(tmp);
  41. }
  42. });
  43. }
  44. public List<MarkerInfo> JsonToMarkerInfos(string json)
  45. {
  46. if (string.IsNullOrEmpty(json))
  47. {
  48. return null;
  49. }
  50. List<MarkerInfo> ModelList = new List<MarkerInfo>();
  51. JsonData jsonData = JsonMapper.ToObject(json);
  52. IDictionary dictionary = jsonData as IDictionary;
  53. for (int i = 0; i < dictionary.Count; i++)
  54. {
  55. Debug.Log("TOB TestDemo---- MarkerInfo Callback 回调:1");
  56. float OriginHeight = 0;
  57. if (TrackingMode == TrackingOriginModeFlags.Device || TrackingMode == TrackingOriginModeFlags.Floor)
  58. {
  59. #if PICO_XR
  60. OriginHeight = PXR_Plugin.System.UPxr_GetConfigFloat(ConfigType.ToDelaSensorY);
  61. #else
  62. float trackingorigin_height = PXR_EnterprisePlugin.oxr_get_trackingorigin_height();
  63. float locationheight = OpenXRExtensions.GetLocationHeight();
  64. if (TrackingMode == TrackingOriginModeFlags.Floor)
  65. {
  66. YOffset = 0;
  67. OriginHeight = -trackingorigin_height;
  68. }
  69. else
  70. {
  71. // OriginHeight = trackingorigin_height + locationheight;
  72. // OriginHeight = locationheight;
  73. OriginHeight = -trackingorigin_height;
  74. }
  75. #endif
  76. }
  77. else
  78. {
  79. OriginHeight = 0;
  80. YOffset = 0;
  81. }
  82. Debug.Log("TOB TestDemo---- MarkerInfo Callback 回调:OriginHeight:"+OriginHeight );
  83. MarkerInfo model = new MarkerInfo();
  84. model.posX = double.Parse(jsonData[i]["posX"].ToString());
  85. model.posY = double.Parse(jsonData[i]["posY"].ToString()) + OriginHeight + YOffset;
  86. model.posZ = -double.Parse(jsonData[i]["posZ"].ToString());
  87. model.rotationX = -double.Parse(jsonData[i]["rotationX"].ToString());
  88. model.rotationY = -double.Parse(jsonData[i]["rotationY"].ToString());
  89. model.rotationZ = double.Parse(jsonData[i]["rotationZ"].ToString());
  90. model.rotationW = double.Parse(jsonData[i]["rotationW"].ToString());
  91. model.validFlag = int.Parse(jsonData[i]["validFlag"].ToString());
  92. model.markerType = int.Parse(jsonData[i]["markerType"].ToString());
  93. model.iMarkerId = int.Parse(jsonData[i]["iMarkerId"].ToString());
  94. model.dTimestamp = double.Parse(jsonData[i]["dTimestamp"].ToString());
  95. IDictionary dictionaryReserve = jsonData[i]["reserve"] as IDictionary;
  96. model.reserve = new float[dictionaryReserve.Count];
  97. for (int j = 0; j < dictionaryReserve.Count; j++)
  98. {
  99. model.reserve[j] = float.Parse(jsonData[i]["reserve"][j].ToString());
  100. }
  101. ModelList.Add(model);
  102. }
  103. return ModelList;
  104. }
  105. }
  106. }