IEnumerator UploadJPGwithGPS(string filePath, string apiURL, float langitude, float latitude, Action <string> getJsonCameraObjects) { localizationStatus = LocalizationStatus.WaitForAPIAnswer; byte[] bytes = File.ReadAllBytes(filePath); Debug.Log("bytes = " + bytes.Length); List <IMultipartFormSection> form = new List <IMultipartFormSection>(); string jsona = "{\"gps\":{\"latitude\":" + langitude + ",\"longitude\":" + latitude + "},\"rotation\": 0,\"mirrored\": false}"; Debug.Log("" + jsona); form.Add(new MultipartFormFileSection("image", bytes, "test.jpg", "image/jpeg")); form.Add(new MultipartFormDataSection("description", jsona)); byte[] boundary = UnityWebRequest.GenerateBoundary(); var request = UnityWebRequest.Post(apiURL, form, boundary); request.SetRequestHeader("Accept-Encoding", "gzip, deflate, br"); request.SetRequestHeader("Accept", "application/vnd.myplace.v2+json"); Debug.Log("Uploading Screenshot started..."); yield return(request.SendWebRequest()); if (request.isNetworkError || request.isHttpError) { Debug.Log(request.error); localizationStatus = LocalizationStatus.ServerError; } else { Debug.Log("Finished Uploading Screenshot"); } Debug.Log(request.downloadHandler.text); getJsonCameraObjects(request.downloadHandler.text); }
private void SetLocalizationStatus(LocalizationStatus status) { if (status == statusToDisplay) { return; } statusToDisplay = status; FilterKeys(); }
IEnumerator Locate(Action <float, float, float, string, Action <string, Transform, StickerInfo[]> > getLocData) { Debug.Log("Started Locate GPS"); localizationStatus = LocalizationStatus.GetGPSData; // First, check if user has location service enabled if (!Input.location.isEnabledByUser) { Debug.Log("geo not enabled"); PlayerPrefs.SetInt("LocLoaded", -1); yield break; } // Start service before querying location Input.location.Start(); // Wait until service initializes int maxWait = 20; while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) { yield return(new WaitForSeconds(1)); maxWait--; } // Service didn't initialize in 20 seconds if (maxWait < 1) { Debug.Log("Timed out"); localizationStatus = LocalizationStatus.NoGPSData; yield break; } // Connection has failed if (Input.location.status == LocationServiceStatus.Failed) { Debug.Log("Unable to determine device location"); PlayerPrefs.SetInt("LocLoaded", -2); localizationStatus = LocalizationStatus.NoGPSData; yield break; } else { // Access granted and location value could be retrieved Debug.Log("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp); getLocData(Input.location.lastData.latitude, Input.location.lastData.longitude, Input.location.lastData.horizontalAccuracy, null, null); GPSlocation = true; longitude = Input.location.lastData.longitude; latitude = Input.location.lastData.latitude; hdop = Input.location.lastData.horizontalAccuracy; } // Stop service if there is no need to query location updates continuously // Input.location.Stop(); }
IEnumerator prepareC(float langitude, float latitude, Action <bool, string> getServerAnswer) { Debug.Log(apiURL + "/api/localizer/prepare?lat=" + latitude + "f&lon=" + langitude + "f"); var w = UnityWebRequest.Get(apiURL + "/api/localizer/prepare?lat=" + latitude + "f&lon=" + langitude + "f"); w.SetRequestHeader("Accept-Encoding", "gzip, deflate, br"); w.SetRequestHeader("Accept", "application/vnd.myplace.v2+json"); yield return(w.SendWebRequest()); if (w.isNetworkError || w.isHttpError) { Debug.Log(w.error); localizationStatus = LocalizationStatus.ServerError; getServerAnswer(false, w.downloadHandler.text); } else { Debug.Log("prepared API"); Debug.Log(w.downloadHandler.text); getServerAnswer(true, w.downloadHandler.text); } }
IEnumerator UploadJPGwithGPS(byte[] bytes, string apiURL, float langitude, float latitude, float hdop, Action <string, bool> getJsonCameraObjects) { localizationStatus = LocalizationStatus.WaitForAPIAnswer; Debug.Log("bytes = " + bytes.Length); List <IMultipartFormSection> form = new List <IMultipartFormSection>(); string rotationDevice = "90"; if (!editorTestMode) { if (Input.deviceOrientation == DeviceOrientation.Portrait) { rotationDevice = "0"; } if (Input.deviceOrientation == DeviceOrientation.LandscapeRight) { rotationDevice = "90"; } if (Input.deviceOrientation == DeviceOrientation.PortraitUpsideDown) { rotationDevice = "180"; } if (Input.deviceOrientation == DeviceOrientation.LandscapeLeft) { rotationDevice = "270"; } } string jsona = "{\"gps\":{\"latitude\":" + langitude + ",\"longitude\":" + latitude + ",\"hdop\":" + hdop + "},\"rotation\": " + rotationDevice + ",\"mirrored\": false}"; uim.gpsDebug(langitude, latitude, hdop); Debug.Log("" + jsona); form.Add(new MultipartFormFileSection("image", bytes, "test.jpg", "image/jpeg")); form.Add(new MultipartFormDataSection("description", jsona)); byte[] boundary = UnityWebRequest.GenerateBoundary(); Debug.Log(apiURL + "/api/localizer/localize"); var w = UnityWebRequest.Post(apiURL + "/api/localizer/localize", form, boundary); w.SetRequestHeader("Accept-Encoding", "gzip, deflate, br"); w.SetRequestHeader("Accept", "application/vnd.myplace.v2+json"); w.SetRequestHeader("user-agent", "Unity AC-viewer based app, name: " + Application.productName + ", Device: " + SystemInfo.deviceModel); Debug.Log("Uploading Screenshot started..."); yield return(w.SendWebRequest()); if (w.isNetworkError || w.isHttpError) { Debug.Log(w.error); localizationStatus = LocalizationStatus.ServerError; } else { Debug.Log("Finished Uploading Screenshot"); } Debug.Log(w.downloadHandler.text); var jsonParse = JSON.Parse(w.downloadHandler.text); string sid = null; if (jsonParse["camera"] != null) { sid = jsonParse["reconstruction_id"]; } tempScale3d = 1; getJsonCameraObjects(w.downloadHandler.text, false); }
IEnumerator UploadJPGwithGPSOSCP(byte[] bytes, string apiURL, float langitude, float latitude, float hdop, Action <string, bool> getJsonCameraObjects) { localizationStatus = LocalizationStatus.WaitForAPIAnswer; // byte[] bytes = File.ReadAllBytes(filePath); Debug.Log("bytes length = " + bytes.Length); string rotationDevice = "180"; if (!editorTestMode) { if (Input.deviceOrientation == DeviceOrientation.Portrait) { rotationDevice = "0"; } if (Input.deviceOrientation == DeviceOrientation.LandscapeRight) { rotationDevice = "90"; } if (Input.deviceOrientation == DeviceOrientation.PortraitUpsideDown) { rotationDevice = "180"; } if (Input.deviceOrientation == DeviceOrientation.LandscapeLeft) { rotationDevice = "270"; } } // string shot = System.Text.Encoding.UTF8.GetString(bytes); string shot = Convert.ToBase64String(bytes); // Debug.Log("Uploading Screenshot started..."); string finalJson = "{\"id\":\"9089876676575754\",\"timestamp\":\"2020-11-11T11:56:21+00:00\",\"type\":\"geopose\",\"sensors\":[{\"id\":\"0\",\"type\":\"camera\"},{\"id\":\"1\",\"type\":\"geolocation\"}],\"sensorReadings\":[{\"timestamp\":\"2020-11-11T11:56:21+00:00\",\"sensorId\":\"0\",\"reading\":{\"sequenceNumber\":0,\"imageFormat\":\"JPG\",\"imageOrientation\":{\"mirrored\":false,\"rotation\":" + rotationDevice + "},\"imageBytes\":\"" + shot + "\"}},{\"timestamp\":\"2020-11-11T11:56:21+00:00\",\"sensorId\":\"1\",\"reading\":{\"latitude\":" + langitude + ",\"longitude\":" + latitude + ",\"altitude\":0}}]}"; Debug.Log("finalJson OSCP = " + finalJson); Debug.Log(apiURL + "/scrs/geopose_objs_local"); /* string path = "request.json"; * // File.Create(path); * StreamWriter writer = new StreamWriter(path, true, Encoding.UTF8, 1000000); * writer.WriteLine(finalJson); * writer.Close();*/ var request = new UnityWebRequest(apiURL + "/scrs/geopose_objs_local", "POST"); byte[] bodyRaw = Encoding.UTF8.GetBytes(finalJson); request.uploadHandler = (UploadHandler) new UploadHandlerRaw(bodyRaw); request.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer(); request.SetRequestHeader("Accept-Encoding", "gzip, deflate, br"); request.SetRequestHeader("Accept", "application/vnd.myplace.v2+json"); request.SetRequestHeader("Content-Type", "application/json"); request.uploadHandler.contentType = "application/json"; request.timeout = 50; yield return(request.SendWebRequest()); if (request.isNetworkError || request.isHttpError) { Debug.Log(request.error); localizationStatus = LocalizationStatus.ServerError; } else { // Debug.Log("Finished Uploading Screenshot"); } Debug.Log(request.downloadHandler.text); var jsonParse = JSON.Parse(request.downloadHandler.text); string sid = null; if (jsonParse["camera"] != null) { sid = jsonParse["reconstruction_id"]; } tempScale3d = 1; getJsonCameraObjects(request.downloadHandler.text, true); }
public void camLocalize(string jsonanswer, bool geopose) { var jsonParse = JSON.Parse(jsonanswer); float px, py, pz, ox, oy, oz, ow; int objectsAmount = -1; string js, sessionId; if (!geopose) { if (jsonParse["camera"] != null) { sessionId = jsonParse["reconstruction_id"]; do { objectsAmount++; js = jsonParse["placeholders"][objectsAmount]["placeholder_id"]; } while (js != null); Debug.Log("nodeAmount = " + objectsAmount + ", RecoArray Length = " + recoList.Count); px = jsonParse["camera"]["pose"]["position"]["x"].AsFloat; py = jsonParse["camera"]["pose"]["position"]["y"].AsFloat; pz = jsonParse["camera"]["pose"]["position"]["z"].AsFloat; ox = jsonParse["camera"]["pose"]["orientation"]["x"].AsFloat; oy = jsonParse["camera"]["pose"]["orientation"]["y"].AsFloat; oz = jsonParse["camera"]["pose"]["orientation"]["z"].AsFloat; ow = jsonParse["camera"]["pose"]["orientation"]["w"].AsFloat; uim.setDebugPose(px, py, pz, ox, oy, oz, ow, sessionId); GameObject newCam = new GameObject("tempCam"); newCam.transform.localPosition = new Vector3(px, py, pz); newCam.transform.localRotation = new Quaternion(ox, oy, oz, ow); newCam.transform.localPosition = new Vector3(px, -newCam.transform.localPosition.y, pz); // Debug.Log("Camera new: " + newCam.transform.localPosition.x + ", " + newCam.transform.localPosition.y + ", " + newCam.transform.localPosition.z); newCam.transform.localRotation = Quaternion.Euler(-newCam.transform.localRotation.eulerAngles.x, newCam.transform.localRotation.eulerAngles.y, -newCam.transform.localRotation.eulerAngles.z); GameObject zeroCoord = new GameObject("Zero"); zeroCoord.transform.SetParent(newCam.transform); RecoInfo currentRi = checkRecoID(sessionId); StickerInfo[] stickers; stickers = null; if (currentRi == null) { currentRi = new RecoInfo(); currentRi.id = sessionId; if (objectsAmount > 0) { currentRi.scale3dcloud = tempScale3d; stickers = new StickerInfo[objectsAmount]; currentRi.stickerArray = new StickerInfo[objectsAmount]; GameObject[,] placeHolders = new GameObject[objectsAmount, 4]; for (int j = 0; j < objectsAmount; j++) { currentRi.stickerArray[j] = new StickerInfo(); stickers[j] = new StickerInfo(); currentRi.stickerArray[j].positions = new Vector3[4]; float positionObjX = jsonParse["placeholders"][j]["pose"]["position"]["x"].AsFloat; float positionObjY = jsonParse["placeholders"][j]["pose"]["position"]["y"].AsFloat; float positionObjZ = jsonParse["placeholders"][j]["pose"]["position"]["z"].AsFloat; currentRi.stickerArray[j].mainPositions = new Vector3(positionObjX, -positionObjY, positionObjZ); // Debug.Log("currentRi.stickerArray[j].mainPositions = " + currentRi.stickerArray[j].mainPositions); stickers[j].mainPositions = new Vector3(positionObjX, -positionObjY, positionObjZ); currentRi.stickerArray[j].orientations = new Vector4(jsonParse["placeholders"][j]["pose"]["orientation"]["x"].AsFloat, jsonParse["placeholders"][j]["pose"]["orientation"]["y"].AsFloat, jsonParse["placeholders"][j]["pose"]["orientation"]["z"].AsFloat, jsonParse["placeholders"][j]["pose"]["orientation"]["w"].AsFloat); stickers[j].orientations = currentRi.stickerArray[j].orientations; // Debug.Log("!!!!! currentRi.stickerArray[" + j + "].orientations" + currentRi.stickerArray[j].orientations); for (int i = 0; i < 4; i++) { px = jsonParse["placeholders"][j]["frame"][i]["x"].AsFloat + positionObjX; py = jsonParse["placeholders"][j]["frame"][i]["y"].AsFloat + positionObjY; pz = jsonParse["placeholders"][j]["frame"][i]["z"].AsFloat + positionObjZ; placeHolders[j, i] = new GameObject("Placeholder" + j + " " + i); placeHolders[j, i].transform.SetParent(newCam.transform); py = -py; placeHolders[j, i].transform.position = new Vector3(px, py, pz); currentRi.stickerArray[j].positions[i] = new Vector3(px, py, pz); } string idnode = "" + jsonParse["placeholders"][j]["placeholder_id"]; for (int x = 0; x < objectsAmount; x++) { string idobj = "" + jsonParse["objects"][x]["sticker"]["sticker_id"]; if (idobj.Contains(idnode)) { stickers[j].sPath = "" + jsonParse["objects"][x]["sticker"]["path"]; stickers[j].sText = "" + jsonParse["objects"][x]["sticker"]["sticker_text"]; stickers[j].sType = "" + jsonParse["objects"][x]["sticker"]["sticker_type"]; stickers[j].sSubType = "" + jsonParse["objects"][x]["sticker"]["sticker_subtype"]; stickers[j].sDescription = "" + jsonParse["objects"][x]["sticker"]["description"]; stickers[j].SModel_scale = "" + jsonParse["objects"][x]["sticker"]["model_scale"]; stickers[j].sId = "" + jsonParse["objects"][x]["sticker"]["sticker_id"]; stickers[j].objectId = "" + jsonParse["objects"][x]["placeholder"]["placeholder_id"]; stickers[j].sImage = "" + jsonParse["objects"][x]["sticker"]["Image"]; stickers[j].sAddress = "" + jsonParse["objects"][x]["sticker"]["Address"]; stickers[j].sFeedbackAmount = "" + jsonParse["objects"][x]["sticker"]["Feedback amount"]; stickers[j].sRating = "" + jsonParse["objects"][x]["sticker"]["Rating"]; stickers[j].sUrl_ta = "" + jsonParse["objects"][x]["sticker"]["url_ta"]; stickers[j].sTrajectoryPath = "" + jsonParse["objects"][x]["sticker"]["trajectory_path"]; stickers[j].sTrajectoryOffset = "" + jsonParse["objects"][x]["sticker"]["trajectory_time_offset"]; stickers[j].sTrajectoryPeriod = "" + jsonParse["objects"][x]["sticker"]["trajectory_time_period"]; currentRi.stickerArray[j].sPath = stickers[j].sPath; currentRi.stickerArray[j].sText = stickers[j].sText; currentRi.stickerArray[j].sType = stickers[j].sType; currentRi.stickerArray[j].sSubType = stickers[j].sSubType; currentRi.stickerArray[j].sDescription = stickers[j].sDescription; currentRi.stickerArray[j].SModel_scale = stickers[j].SModel_scale; currentRi.stickerArray[j].sId = stickers[j].sId; currentRi.stickerArray[j].sImage = stickers[j].sImage; currentRi.stickerArray[j].sAddress = stickers[j].sAddress; currentRi.stickerArray[j].sRating = stickers[j].sRating; currentRi.stickerArray[j].sUrl_ta = stickers[j].sUrl_ta; currentRi.stickerArray[j].sTrajectoryPath = stickers[j].sTrajectoryPath; currentRi.stickerArray[j].sTrajectoryOffset = stickers[j].sTrajectoryOffset; currentRi.stickerArray[j].sTrajectoryPeriod = stickers[j].sTrajectoryPeriod; } } } recoList.Add(currentRi); newCam.transform.position = cameraPositionInLocalization; newCam.transform.eulerAngles = cameraRotationInLocalization; newCam.transform.RotateAround(newCam.transform.position, newCam.transform.forward, 90); for (int j = 0; j < objectsAmount; j++) { stickers[j].positions = new Vector3[4]; for (int i = 0; i < 4; i++) { stickers[j].positions[i] = placeHolders[j, i].transform.position; } } } } else if (currentRi != null) { cameraDistance = Vector3.Magnitude(currentRi.lastCamCoordinate - new Vector3(px, py, pz)); tempScale3d = currentRi.scale3dcloud; int savedNodeLentgh = currentRi.stickerArray.Length; stickers = new StickerInfo[savedNodeLentgh]; GameObject[,] placeHolders = new GameObject[savedNodeLentgh, 4]; for (int j = 0; j < savedNodeLentgh; j++) { stickers[j] = new StickerInfo(); for (int i = 0; i < 4; i++) { placeHolders[j, i] = new GameObject("Placeholder" + j + " " + i); placeHolders[j, i].transform.SetParent(newCam.transform); placeHolders[j, i].transform.position = currentRi.stickerArray[j].positions[i]; } stickers[j].sPath = currentRi.stickerArray[j].sPath; stickers[j].sText = currentRi.stickerArray[j].sText; stickers[j].sType = currentRi.stickerArray[j].sType; stickers[j].sSubType = currentRi.stickerArray[j].sSubType; stickers[j].sDescription = currentRi.stickerArray[j].sDescription; stickers[j].sId = currentRi.stickerArray[j].sId; stickers[j].sImage = currentRi.stickerArray[j].sImage; currentRi.stickerArray[j].sAddress = stickers[j].sAddress; currentRi.stickerArray[j].sRating = stickers[j].sRating; currentRi.stickerArray[j].sUrl_ta = stickers[j].sUrl_ta; } newCam.transform.position = cameraPositionInLocalization; newCam.transform.eulerAngles = cameraRotationInLocalization; newCam.transform.RotateAround(newCam.transform.position, newCam.transform.forward, 90); for (int j = 0; j < savedNodeLentgh; j++) { stickers[j].positions = new Vector3[4]; for (int i = 0; i < 4; i++) { stickers[j].positions[i] = placeHolders[j, i].transform.position; } } } if (zeroCoord.transform.eulerAngles == Vector3.zero) { newCam.transform.position = cameraPositionInLocalization; newCam.transform.eulerAngles = cameraRotationInLocalization; newCam.transform.RotateAround(newCam.transform.position, newCam.transform.forward, 90); } currentRi.lastCamCoordinate = new Vector3(px, py, pz); localizationStatus = LocalizationStatus.Ready; getStickersAction(currentRi.id, zeroCoord.transform, stickers); Destroy(newCam); } else { Debug.Log("Cant localize"); localizationStatus = LocalizationStatus.CantLocalize; uim.setDebugPose(0, 0, 0, 0, 0, 0, 0, "cant loc"); getStickersAction(null, null, null); } } // -- if -- GEOPOSE else { if (jsonParse["geopose"] != null) { sessionId = jsonParse["geopose"]["reconstruction_id"]; Debug.Log("sessioID: " + sessionId); do { objectsAmount++; js = jsonParse["scrs"][objectsAmount]["type"]; // Debug.Log("js node [" + objectsAmount + "] - " + js); } while (js != null); Debug.Log("nodeAmount = " + objectsAmount + ", RecoArray Length = " + recoList.Count); px = jsonParse["geopose"]["local"]["position"]["x"].AsFloat; py = jsonParse["geopose"]["local"]["position"]["y"].AsFloat; pz = jsonParse["geopose"]["local"]["position"]["z"].AsFloat; ox = jsonParse["geopose"]["local"]["orientation"]["x"].AsFloat; oy = jsonParse["geopose"]["local"]["orientation"]["y"].AsFloat; oz = jsonParse["geopose"]["local"]["orientation"]["z"].AsFloat; ow = jsonParse["geopose"]["local"]["orientation"]["w"].AsFloat; uim.setDebugPose(px, py, pz, ox, oy, oz, ow, sessionId); GameObject newCam = new GameObject("tempCam"); newCam.transform.localPosition = new Vector3(px, py, pz); newCam.transform.localRotation = new Quaternion(ox, oy, oz, ow); newCam.transform.localPosition = new Vector3(px, -newCam.transform.localPosition.y, pz); // Debug.Log("Camera new: " + newCam.transform.localPosition.x + ", " + newCam.transform.localPosition.y + ", " + newCam.transform.localPosition.z); newCam.transform.localRotation = Quaternion.Euler(-newCam.transform.localRotation.eulerAngles.x, newCam.transform.localRotation.eulerAngles.y, -newCam.transform.localRotation.eulerAngles.z); GameObject zeroCoord = new GameObject("Zero"); zeroCoord.transform.SetParent(newCam.transform); RecoInfo currentRi = checkRecoID(sessionId); StickerInfo[] stickers; stickers = null; if (currentRi == null) { currentRi = new RecoInfo(); currentRi.id = sessionId; if (objectsAmount > 0) { currentRi.scale3dcloud = tempScale3d; stickers = new StickerInfo[objectsAmount]; currentRi.stickerArray = new StickerInfo[objectsAmount]; GameObject[,] placeHolders = new GameObject[objectsAmount, 4]; for (int j = 0; j < objectsAmount; j++) { currentRi.stickerArray[j] = new StickerInfo(); stickers[j] = new StickerInfo(); currentRi.stickerArray[j].positions = new Vector3[4]; float positionObjX = jsonParse["scrs"][j]["content"]["geopose"]["local"]["position"]["x"].AsFloat; float positionObjY = jsonParse["scrs"][j]["content"]["geopose"]["local"]["position"]["y"].AsFloat; float positionObjZ = jsonParse["scrs"][j]["content"]["geopose"]["local"]["position"]["z"].AsFloat; currentRi.stickerArray[j].mainPositions = new Vector3(positionObjX, -positionObjY, positionObjZ); // Debug.Log("currentRi.stickerArray[j].mainPositions = " + currentRi.stickerArray[j].mainPositions); stickers[j].mainPositions = new Vector3(positionObjX, -positionObjY, positionObjZ); currentRi.stickerArray[j].orientations = new Vector4(jsonParse["scrs"][j]["content"]["geopose"]["local"]["orientation"]["x"].AsFloat, jsonParse["scrs"][j]["content"]["geopose"]["local"]["orientation"]["y"].AsFloat, jsonParse["scrs"][j]["content"]["geopose"]["local"]["orientation"]["z"].AsFloat, jsonParse["scrs"][j]["content"]["geopose"]["local"]["orientation"]["w"].AsFloat); stickers[j].orientations = currentRi.stickerArray[j].orientations; Debug.Log("!!!!! currentRi.stickerArray[" + j + "].orientations x" + currentRi.stickerArray[j].orientations.x + " " + stickers[j].orientations.x); Debug.Log("!!!!! currentRi.stickerArray[" + j + "].orientations y" + currentRi.stickerArray[j].orientations.y + " " + stickers[j].orientations.y); Debug.Log("!!!!! currentRi.stickerArray[" + j + "].orientations z" + currentRi.stickerArray[j].orientations.z + " " + stickers[j].orientations.z); Debug.Log("!!!!! currentRi.stickerArray[" + j + "].orientations w" + currentRi.stickerArray[j].orientations.w + " " + stickers[j].orientations.w); for (int i = 0; i < 4; i++) { px = jsonParse["scrs"][j]["content"]["geopose"]["local"]["frame"][i]["x"].AsFloat + positionObjX; py = jsonParse["scrs"][j]["content"]["geopose"]["local"]["frame"][i]["y"].AsFloat + positionObjY; pz = jsonParse["scrs"][j]["content"]["geopose"]["local"]["frame"][i]["z"].AsFloat + positionObjZ; placeHolders[j, i] = new GameObject("Placeholder" + j + " " + i); placeHolders[j, i].transform.SetParent(newCam.transform); py = -py; placeHolders[j, i].transform.position = new Vector3(px, py, pz); currentRi.stickerArray[j].positions[i] = new Vector3(px, py, pz); } stickers[j].sPath = "" + jsonParse["scrs"][j]["content"]["custom_data"]["path"]; stickers[j].sText = "" + jsonParse["scrs"][j]["content"]["custom_data"]["sticker_text"]; stickers[j].sType = "" + jsonParse["scrs"][j]["content"]["custom_data"]["sticker_type"]; stickers[j].sSubType = "" + jsonParse["scrs"][j]["content"]["custom_data"]["sticker_subtype"]; stickers[j].sDescription = "" + jsonParse["scrs"][j]["content"]["custom_data"]["description"]; stickers[j].SModel_scale = "" + jsonParse["scrs"][j]["content"]["custom_data"]["model_scale"]; stickers[j].sId = "" + jsonParse["scrs"][j]["content"]["custom_data"]["sticker_id"]; stickers[j].objectId = "" + jsonParse["scrs"][j]["content"]["custom_data"]["placeholder_id"]; stickers[j].sImage = "" + jsonParse["scrs"][j]["content"]["custom_data"]["Image"]; stickers[j].sAddress = "" + jsonParse["scrs"][j]["content"]["custom_data"]["Address"]; stickers[j].sFeedbackAmount = "" + jsonParse["scrs"][j]["content"]["custom_data"]["Feedback amount"]; stickers[j].sRating = "" + jsonParse["scrs"][j]["content"]["custom_data"]["Rating"]; stickers[j].sUrl_ta = "" + jsonParse["scrs"][j]["content"]["custom_data"]["url_ta"]; stickers[j].sTrajectoryPath = "" + jsonParse["scrs"][j]["content"]["custom_data"]["trajectory_path"]; stickers[j].sTrajectoryOffset = "" + jsonParse["scrs"][j]["content"]["custom_data"]["trajectory_time_offset"]; stickers[j].sTrajectoryPeriod = "" + jsonParse["scrs"][j]["content"]["custom_data"]["trajectory_time_period"]; currentRi.stickerArray[j].sPath = stickers[j].sPath; currentRi.stickerArray[j].sText = stickers[j].sText; currentRi.stickerArray[j].sType = stickers[j].sType; currentRi.stickerArray[j].sSubType = stickers[j].sSubType; currentRi.stickerArray[j].sDescription = stickers[j].sDescription; currentRi.stickerArray[j].SModel_scale = stickers[j].SModel_scale; currentRi.stickerArray[j].sId = stickers[j].sId; currentRi.stickerArray[j].sImage = stickers[j].sImage; currentRi.stickerArray[j].sAddress = stickers[j].sAddress; currentRi.stickerArray[j].sRating = stickers[j].sRating; currentRi.stickerArray[j].sUrl_ta = stickers[j].sUrl_ta; currentRi.stickerArray[j].sTrajectoryPath = stickers[j].sTrajectoryPath; currentRi.stickerArray[j].sTrajectoryOffset = stickers[j].sTrajectoryOffset; currentRi.stickerArray[j].sTrajectoryPeriod = stickers[j].sTrajectoryPeriod; } recoList.Add(currentRi); newCam.transform.position = cameraPositionInLocalization; newCam.transform.eulerAngles = cameraRotationInLocalization; newCam.transform.RotateAround(newCam.transform.position, newCam.transform.forward, 90); for (int j = 0; j < objectsAmount; j++) { stickers[j].positions = new Vector3[4]; for (int i = 0; i < 4; i++) { stickers[j].positions[i] = placeHolders[j, i].transform.position; } } } } else if (currentRi != null) { cameraDistance = Vector3.Magnitude(currentRi.lastCamCoordinate - new Vector3(px, py, pz)); tempScale3d = currentRi.scale3dcloud; int savedNodeLentgh = currentRi.stickerArray.Length; stickers = new StickerInfo[savedNodeLentgh]; GameObject[,] placeHolders = new GameObject[savedNodeLentgh, 4]; for (int j = 0; j < savedNodeLentgh; j++) { stickers[j] = new StickerInfo(); for (int i = 0; i < 4; i++) { placeHolders[j, i] = new GameObject("Placeholder" + j + " " + i); placeHolders[j, i].transform.SetParent(newCam.transform); placeHolders[j, i].transform.position = currentRi.stickerArray[j].positions[i]; } stickers[j].sPath = currentRi.stickerArray[j].sPath; stickers[j].sText = currentRi.stickerArray[j].sText; stickers[j].sType = currentRi.stickerArray[j].sType; stickers[j].sSubType = currentRi.stickerArray[j].sSubType; stickers[j].sDescription = currentRi.stickerArray[j].sDescription; stickers[j].sId = currentRi.stickerArray[j].sId; stickers[j].sImage = currentRi.stickerArray[j].sImage; currentRi.stickerArray[j].sAddress = stickers[j].sAddress; currentRi.stickerArray[j].sRating = stickers[j].sRating; currentRi.stickerArray[j].sUrl_ta = stickers[j].sUrl_ta; } newCam.transform.position = cameraPositionInLocalization; newCam.transform.eulerAngles = cameraRotationInLocalization; newCam.transform.RotateAround(newCam.transform.position, newCam.transform.forward, 90); for (int j = 0; j < savedNodeLentgh; j++) { stickers[j].positions = new Vector3[4]; for (int i = 0; i < 4; i++) { stickers[j].positions[i] = placeHolders[j, i].transform.position; } } } if (zeroCoord.transform.eulerAngles == Vector3.zero) { newCam.transform.position = cameraPositionInLocalization; newCam.transform.eulerAngles = cameraRotationInLocalization; newCam.transform.RotateAround(newCam.transform.position, newCam.transform.forward, 90); } currentRi.lastCamCoordinate = new Vector3(px, py, pz); localizationStatus = LocalizationStatus.Ready; getStickersAction(currentRi.id, zeroCoord.transform, stickers); Destroy(newCam); } else { Debug.Log("Cant localize"); localizationStatus = LocalizationStatus.CantLocalize; uim.setDebugPose(0, 0, 0, 0, 0, 0, 0, "cant loc"); getStickersAction(null, null, null); } } }
private static void CheckForValidFiles() { string registryPath = Path.Combine(Application.streamingAssetsPath, LOCALIZATION_REGISTRY_FILE_NAME + ".json"); if (File.Exists(registryPath)) { string dataAsJson = File.ReadAllText(registryPath); try { m_FileRegistry = JsonUtility.FromJson <LocalizationFileRegistry>(dataAsJson); Debug.Log("Registry File exists and is readable"); LocalizationFileRegistry tempRegist = new LocalizationFileRegistry(new List <LocalizationFileEntry>()); for (int i = 0; i < m_FileRegistry.fileEntries.Count; i++) { string filePath = Path.Combine(Application.streamingAssetsPath, m_FileRegistry.fileEntries[i].fileName + ".json"); if (File.Exists(filePath)) { try { string langDataAsJson = File.ReadAllText(filePath); LocalizationData loadedData = JsonUtility.FromJson <LocalizationData>(langDataAsJson); localizedTextList.Add(new Dictionary <string, string>()); if (loadedData.font != null) { fontList.Add(loadedData.font); } else { fontList.Add(instance.defaultFont); } for (int j = 0; j < loadedData.items.Length; j++) { localizedTextList[localizedTextList.Count - 1].Add(loadedData.items[j].key, loadedData.items[j].value); } //Check to make sure that all other entries after the initial English file have the correct Count as well as the exact same keys. if (i > 0) { if (!FilesAreEqual(localizedTextList[0], localizedTextList[localizedTextList.Count - 1])) { Debug.Log("Error: Localization File " + filePath + " can not be used due to inconsistencies with the base Localization File."); } else { tempRegist.fileEntries.Add(m_FileRegistry.fileEntries[i]); } } else if (i == 0) { tempRegist.fileEntries.Add(m_FileRegistry.fileEntries[i]); } Debug.Log(filePath + " successfully loaded for localization. -- " + localizedTextList[localizedTextList.Count - 1].Count + " entries."); } catch { Debug.Log("Error: Localization File " + filePath + " found, but can not be read."); m_Status = LocalizationStatus.fail; } } else { Debug.Log("Error: Localization File " + filePath + " Not found"); } } if (localizedTextListCount == 0) { Debug.Log("Error: No localization text files could be found. Localization has failed"); m_Status = LocalizationStatus.fail; return; } //modify the registy with the correct list of valid localization options. m_FileRegistry = tempRegist; m_Status = LocalizationStatus.success; } catch { Debug.Log("Error: Registry File exists, but can not be read properly Localization has failed."); m_Status = LocalizationStatus.fail; } } else { Debug.Log("Error: No Registry File exists. Localization has failed"); m_Status = LocalizationStatus.fail; } }
public void camLocalize(string jsonanswer) { var jsonParse = JSON.Parse(jsonanswer); float px, py, pz, ox, oy, oz, ow; int objectsAmount = -1; string js; if (jsonParse["camera"] != null) { do { objectsAmount++; js = jsonParse["placeholders"][objectsAmount]["placeholder_id"]; Debug.Log("js node [" + objectsAmount + "] - " + js); } while (js != null); Debug.Log("Objects amount = " + objectsAmount); px = jsonParse["camera"]["pose"]["position"]["x"].AsFloat; py = jsonParse["camera"]["pose"]["position"]["y"].AsFloat; pz = jsonParse["camera"]["pose"]["position"]["z"].AsFloat; ox = jsonParse["camera"]["pose"]["orientation"]["x"].AsFloat; oy = jsonParse["camera"]["pose"]["orientation"]["y"].AsFloat; oz = jsonParse["camera"]["pose"]["orientation"]["z"].AsFloat; ow = jsonParse["camera"]["pose"]["orientation"]["w"].AsFloat; GameObject newCam = new GameObject("tempCam"); newCam.transform.localPosition = new Vector3(px, py, pz); newCam.transform.localRotation = new Quaternion(ox, oy, oz, ow); newCam.transform.localPosition = new Vector3(px, -newCam.transform.localPosition.y, pz); Debug.Log("Camera new: " + newCam.transform.localPosition.x + ", " + newCam.transform.localPosition.y + ", " + newCam.transform.localPosition.z); newCam.transform.localRotation = Quaternion.Euler(-newCam.transform.localRotation.eulerAngles.x, newCam.transform.localRotation.eulerAngles.y, -newCam.transform.localRotation.eulerAngles.z); GameObject[,] placeHolders = new GameObject[objectsAmount, 4]; StickerInfo[] stickers = new StickerInfo[objectsAmount]; for (int j = 0; j < objectsAmount; j++) { stickers[j] = new StickerInfo(); float positionObjX = jsonParse["placeholders"][j]["pose"]["position"]["x"].AsFloat; float positionObjY = jsonParse["placeholders"][j]["pose"]["position"]["y"].AsFloat; float positionObjZ = jsonParse["placeholders"][j]["pose"]["position"]["z"].AsFloat; for (int i = 0; i < 4; i++) { px = jsonParse["placeholders"][j]["frame"][i]["x"].AsFloat + positionObjX; py = jsonParse["placeholders"][j]["frame"][i]["y"].AsFloat + positionObjY; pz = jsonParse["placeholders"][j]["frame"][i]["z"].AsFloat + positionObjZ; placeHolders[j, i] = new GameObject("Placeholder" + j + " " + i); placeHolders[j, i].transform.SetParent(newCam.transform); py = -py; placeHolders[j, i].transform.position = new Vector3(px, py, pz); } string idnode = "" + jsonParse["placeholders"][j]["placeholder_id"]; for (int x = 0; x < objectsAmount; x++) { string idobj = "" + jsonParse["objects"][x]["sticker"]["sticker_id"]; if (idobj.Contains(idnode)) { stickers[j].sPath = "" + jsonParse["objects"][x]["sticker"]["path"]; stickers[j].sText = "" + jsonParse["objects"][x]["sticker"]["sticker_text"]; } } } newCam.transform.position = cameraPositionInLocalization; newCam.transform.eulerAngles = cameraRotationInLocalization; for (int j = 0; j < objectsAmount; j++) { stickers[j].positions = new Vector3[4]; for (int i = 0; i < 4; i++) { stickers[j].positions[i] = placeHolders[j, i].transform.position; } } localizationStatus = LocalizationStatus.Ready; Destroy(newCam); getStickersAction(stickers); } else { Debug.Log("Cant localize"); localizationStatus = LocalizationStatus.CantLocalize; getStickersAction(null); } }