This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
ARPlusSystem/ARPlusSystem-250418/Assets/Scripts/ARPlus/ARDataManager.cs

348 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ARLocation;
using System.Collections;
using System.Collections.Generic;
using ARPlus;
using UnityEngine;
using Util;
public class ARDataManager : MonoBehaviour
{
// Start is called before the first frame update
private ARSceneManager arscenemgr_ = null;
private GameObject goCL_;
private GameObject[] goMax_;
private GameObject[] goBW_;
void Start()
{
var go = GameObject.Find("/ARSceneManager");
arscenemgr_ = go.GetComponent<ARSceneManager>();
}
public void AddClToScene()
{
if (goCL_ != null)
return;
double[][] rcdata = GetCLData();
LocationPath locPath = BuildCLLocationPath(rcdata);
GameObject renderClGameObject = arscenemgr_.GetRenderCL();
goCL_ = new GameObject("RendCLInstance");
MoveAlongPath moveAlongPath = goCL_.AddComponent<MoveAlongPath>();
moveAlongPath.PathSettings = renderClGameObject.GetComponent<RenderOption>().pathSettings;
moveAlongPath.PathSettings.LineRenderer = renderClGameObject.GetComponent<LineRenderer>();
moveAlongPath.PlacementSettings = renderClGameObject.GetComponent<RenderOption>().placementSettings;
moveAlongPath.SetLocationPath(locPath);
}
public void AddBwToScene()
{
if (goBW_ != null)
return;
List<double[][]> bwdata = GetBWData();
goBW_ = new GameObject[bwdata.Count];
for (int i = 0; i < bwdata.Count; i++)
{
LocationPath locPath = BuildBWLocationPath(bwdata[i]);
GameObject renderBwGameObject = arscenemgr_.GetRenderBW();
GameObject goBWItem_ = new GameObject("RendBWInstance-" + (i + 1).ToString());
goBW_[i] = goBWItem_;
MoveAlongPath moveAlongPath = goBWItem_.AddComponent<MoveAlongPath>();
moveAlongPath.PathSettings = renderBwGameObject.GetComponent<RenderOption>().pathSettings;
moveAlongPath.PathSettings.LineRenderer = renderBwGameObject.GetComponent<LineRenderer>();
moveAlongPath.PathSettings.LineRenderer.loop = true;
moveAlongPath.PlacementSettings = renderBwGameObject.GetComponent<RenderOption>().placementSettings;
moveAlongPath.SetLocationPath(locPath);
}
}
public void AddMaxToScene()
{
if (goMax_ != null)
return;
// double[][] rcdata = GetMaxData();
var rcdata = GetGeoData("Max");
goMax_ = new GameObject[rcdata.Count];
for (int i = 0; i < rcdata.Count; i++)
{
LocationPath locPath = BuildLocationPath(rcdata[i]);
GameObject renderMaxMaGameObject = arscenemgr_.GetRenderMax();
GameObject goMaxItem_ = new GameObject("RendMaxInstance-" + (i + 1).ToString());
goMax_[i] = goMaxItem_;
MoveAlongPath moveAlongPath = goMaxItem_.AddComponent<MoveAlongPath>();
moveAlongPath.PathSettings = renderMaxMaGameObject.GetComponent<RenderOption>().pathSettings;
moveAlongPath.PathSettings.LineRenderer = renderMaxMaGameObject.GetComponent<LineRenderer>();
// <20><><EFBFBD><EFBFBD><EFBFBD>߶ζ<DFB6><CEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B9B9>һ<EFBFBD><D2BB>ֱ<EFBFBD>ߣ<EFBFBD>
moveAlongPath.PathSettings.LineRenderer.positionCount = 2;
// // <20><><EFBFBD>ÿ<EFBFBD><C3BF>ȣ<EFBFBD><C8A3><EFBFBD>ʼ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>
moveAlongPath.PathSettings.LineRenderer.startWidth = 0.1f;
moveAlongPath.PathSettings.LineRenderer.endWidth = 0.1f;
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>֧<EFBFBD>ֽ<EFBFBD><D6BD>
moveAlongPath.PathSettings.LineRenderer.startColor = Color.red;
moveAlongPath.PathSettings.LineRenderer.endColor = Color.blue;
// // <20><><EFBFBD>ò<EFBFBD><C3B2>ʣ<EFBFBD><CAA3><EFBFBD>ָ<EFBFBD><D6B8>Shader<65><72>
moveAlongPath.PathSettings.LineRenderer.material = new Material(Shader.Find("Sprites/Default"));
moveAlongPath.PlacementSettings = renderMaxMaGameObject.GetComponent<RenderOption>().placementSettings;
}
// GameObject renderMaxMaGameObject = arscenemgr_.GetRenderMax();
// goMax_ = new GameObject("RendMaxInstance");
// MoveAlongPath moveAlongPath = goMax_.AddComponent<MoveAlongPath>();
// moveAlongPath.PathSettings = renderMaxMaGameObject.GetComponent<RenderOption>().pathSettings;
// moveAlongPath.PathSettings.LineRenderer = renderMaxMaGameObject.GetComponent<LineRenderer>();
// // <20><><EFBFBD><EFBFBD><EFBFBD>߶ζ<DFB6><CEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B9B9>һ<EFBFBD><D2BB>ֱ<EFBFBD>ߣ<EFBFBD>
// moveAlongPath.PathSettings.LineRenderer.positionCount = 2;
// // // <20><><EFBFBD>ÿ<EFBFBD><C3BF>ȣ<EFBFBD><C8A3><EFBFBD>ʼ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>
// moveAlongPath.PathSettings.LineRenderer.startWidth = 0.1f;
// moveAlongPath.PathSettings.LineRenderer.endWidth = 0.1f;
// // // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>֧<EFBFBD>ֽ<EFBFBD><D6BD>
// moveAlongPath.PathSettings.LineRenderer.startColor = Color.red;
// moveAlongPath.PathSettings.LineRenderer.endColor = Color.blue;
// // // <20><><EFBFBD>ò<EFBFBD><C3B2>ʣ<EFBFBD><CAA3><EFBFBD>ָ<EFBFBD><D6B8>Shader<65><72>
// moveAlongPath.PathSettings.LineRenderer.material = new Material(Shader.Find("Sprites/Default"));
// moveAlongPath.PlacementSettings = renderMaxMaGameObject.GetComponent<RenderOption>().placementSettings;
// moveAlongPath.SetLocationPath(locPath);
}
IReadOnlyList<Coords> GetGeoData(string name)
{
var data = DataManager.geoDataDictionary[name];
return data;
}
List<double[][]> GetBWData()
{
List<double[][]> listCoords = new List<double[][]>();
double[][] lineCoords1 = new double[4][];
double[] coord11 = new double[3];
coord11[0] = 31.8494395;
coord11[1] = 117.3096992;
coord11[2] = 10;
double[] coord12 = new double[3];
coord12[0] = 31.8493477;
coord12[1] = 117.3099519;
coord12[2] = 10;
double[] coord13 = new double[3];
coord13[0] = 31.8492647;
coord13[1] = 117.3099106;
coord13[2] = 10;
double[] coord14 = new double[3];
coord14[0] = 31.8493563;
coord14[1] = 117.3096577;
coord14[2] = 10;
lineCoords1[0] = coord11;
lineCoords1[1] = coord12;
lineCoords1[2] = coord13;
lineCoords1[3] = coord14;
listCoords.Add(lineCoords1);
double[][] lineCoords2 = new double[4][];
double[] coord21 = new double[3];
coord21[0] = 31.849531;
coord21[1] = 117.3094462;
coord21[2] = 10;
double[] coord22 = new double[3];
coord22[0] = 31.8494394;
coord22[1] = 117.309699;
coord22[2] = 10;
double[] coord23 = new double[3];
coord23[0] = 31.8493563;
coord23[1] = 117.3096577;
coord23[2] = 10;
double[] coord24 = new double[3];
coord24[0] = 31.849448;
coord24[1] = 117.3094049;
coord24[2] = 10;
lineCoords2[0] = coord21;
lineCoords2[1] = coord22;
lineCoords2[2] = coord23;
lineCoords2[3] = coord24;
listCoords.Add(lineCoords2);
return listCoords;
}
LocationPath BuildBWLocationPath(double[][] data)
{
//MoveAlongPath.PathSettingsData psData = new MoveAlongPath.PathSettingsData();
LocationPath locPath = ScriptableObject.CreateInstance<LocationPath>();
Location[] locs = new Location[4];
for (int i = 0; i < 4; i++)
{
locs[i] = new Location(data[i][0], data[i][1], data[i][2])
{
AltitudeMode = AltitudeMode.Absolute
};
}
locPath.Locations = locs;
locPath.SplineType = SplineType.LinearSpline;
locPath.Alpha = 0.5f;
locPath.SceneViewScale = 1.0f;
//psData.LocationPath = locPath;
return locPath;
}
double[][] GetCLData() //RiverCenterline
{
double[][] lineCoords = new double[6][];
double[] coord1 = new double[3];
coord1[0] = 31.8498255;
coord1[1] = 117.306568;
coord1[2] = 10;
double[] coord2 = new double[3];
coord2[0] = 31.8493595;
coord2[1] = 117.3083875;
coord2[2] = 10;
double[] coord3 = new double[3];
coord3[0] = 31.8490076;
coord3[1] = 117.3097962;
coord3[2] = 10;
double[] coord4 = new double[3];
coord4[0] = 31.8489553;
coord4[1] = 117.3100114;
coord4[2] = 10;
double[] coord5 = new double[3];
coord5[0] = 31.8479532;
coord5[1] = 117.3123266;
coord5[2] = 10;
double[] coord6 = new double[3];
coord5[0] = 31.8474537;
coord5[1] = 117.3130791;
coord5[2] = 10;
lineCoords[0] = coord1;
lineCoords[1] = coord2;
lineCoords[2] = coord3;
lineCoords[3] = coord4;
lineCoords[4] = coord5;
lineCoords[5] = coord6;
return lineCoords;
}
LocationPath BuildCLLocationPath(double[][] data)
{
//MoveAlongPath.PathSettingsData psData = new MoveAlongPath.PathSettingsData();
LocationPath locPath = ScriptableObject.CreateInstance<LocationPath>();
Location[] locs = new Location[6];
for (int i = 0; i < 6; i++)
{
locs[i] = new Location(data[i][0], data[i][1], data[i][2])
{
AltitudeMode = AltitudeMode.Absolute
};
}
locPath.Locations = locs;
locPath.SplineType = SplineType.LinearSpline;
locPath.Alpha = 0.5f;
locPath.SceneViewScale = 1.0f;
//psData.LocationPath = locPath;
return locPath;
}
double[][] GetMaxData() //RiverCenterline
{
double[][] lineCoords = new double[2][];
double[] coord1 = new double[3];
coord1[0] = 31.8732576897494;
coord1[1] = 117.13843113088807;
coord1[2] = 10;
double[] coord2 = new double[3];
coord2[0] = 31.873258780793716;
coord2[1] = 117.1380031964643;
coord2[2] = 10;
lineCoords[0] = coord1;
lineCoords[1] = coord2;
return lineCoords;
}
LocationPath BuildLocationPath(Coords data)
{
// Debug.Log(data.coords.Count);
var _data = data.coords;
MoveAlongPath.PathSettingsData psData = new MoveAlongPath.PathSettingsData();
LocationPath locPath = ScriptableObject.CreateInstance<LocationPath>();
Location[] locs = new Location[_data.Count];
for (int i = 0; i < _data.Count; i++)
{
locs[i] = new Location(_data[i].x, _data[i].y, _data[i].z)
{
AltitudeMode = AltitudeMode.Absolute
};
}
//
locPath.Locations = locs;
locPath.SplineType = SplineType.LinearSpline;
locPath.Alpha = 0.5f;
locPath.SceneViewScale = 1.0f;
return locPath;
}
}