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 Normal View History

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;
}
}