| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using o0._9Axis;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using MathNet.Numerics.LinearAlgebra;
- public class MagJsonConvert
- {
- public static MagnetometerAutoCalibrater Parse(string jsonStr)
- {
- JObject jo = JObject.Parse(jsonStr);
- jo.Remove("Complete");
- JToken jt_e = jo.GetValue("EllipsoidFitting");
- jo.Remove("EllipsoidFitting");
- JToken jt_v = jo.GetValue("VectorByBlock");
- jo.Remove("VectorByBlock");
- int FitCountLeft = jo.GetValue("FitCountLeft").Value<int>();
- jo.Remove("FitCountLeft");
- MagnetometerAutoCalibrater calibrater = jo.ToObject<MagnetometerAutoCalibrater>();
- calibrater.FitCountLeft = FitCountLeft;
- calibrater.EllipsoidFitting = ToEllipsoidFitting(jt_e);
- foreach (JProperty item in jt_v)
- {
- calibrater.VectorByBlock[ToVectorInt(JArray.Parse(item.Name))] = ToVectorDouble(item.Value as JArray);
- }
- return calibrater;
- }
- public static string ToJson(MagnetometerAutoCalibrater calibrater)
- {
- return JsonConvert.SerializeObject(calibrater);
- }
- private static EllipsoidFitting ToEllipsoidFitting(JToken jToken)
- {
- var Center = ToVectorDouble(jToken["Center"] as JArray);
- var CorrectMatrix = ToMatrixDouble(jToken["CorrectMatrixArray"] as JArray);
- var Radius = ToVectorDouble(jToken["Radius"] as JArray);
- return new EllipsoidFitting(Center, CorrectMatrix, Radius);
- }
- private static Matrix<double> ToMatrixDouble(JArray arr)
- {
- int rcCount = arr.Count;
- Matrix<double> matrix = CreateMatrix.Dense<double>(rcCount, rcCount);
- for (var i = 0; i < rcCount; ++i)
- for (var j = 0; j < rcCount; ++j)
- matrix[i, j] = arr[i][j].Value<double>();
- return matrix;
- }
- private static o0.Geometry.Vector<double> ToVectorDouble(JArray arr)
- {
- return new o0.Geometry.Vector<double>(
- arr[0].Value<double>(), arr[1].Value<double>(), arr[2].Value<double>());
- }
- private static o0.Geometry.Vector<int> ToVectorInt(JArray arr)
- {
- return new o0.Geometry.Vector<int>(
- arr[0].Value<int>(), arr[1].Value<int>(), arr[2].Value<int>());
- }
- }
|