using System.Collections.Generic; using UnityEngine; using sam; public class AreaVariable3DVisualizer : MonoBehaviour { MeshFilter meshFilter; public float planeElevation; public float tileWidth = 0.5f; protected AreaVariableSubsession avs; void Awake() { meshFilter = GetComponent(); avs = GetComponentInParent(); } public void OnProductSelected(ProductData data) { } public void OnVariableSelected(int vi) { GenerateMeshes(); } void GenerateMeshes() { var mesh = new Mesh(); mesh.name = avs.prodvar.name; float htw = tileWidth * 0.5f; List verts = new List(); List colors = new List(); List inds = new List(); foreach (var dp in avs.latLonDictionaries[0].Values) { float lon = dp.longitude; float lat = dp.latitude; float w = lon - htw; float e = lon + htw; float s = lat - htw; float n = lat + htw; Vector3 bl = new Vector3(w, s, planeElevation); Vector3 br = new Vector3(e, s, planeElevation); Vector3 tl = new Vector3(w, n, planeElevation); Vector3 tr = new Vector3(e, n, planeElevation); bl = Utils.DegLonLatHgtToXYZ(bl, true); br = Utils.DegLonLatHgtToXYZ(br, true); tl = Utils.DegLonLatHgtToXYZ(tl, true); tr = Utils.DegLonLatHgtToXYZ(tr, true); Color col = avs.GetDataPointColor(dp); int vi = verts.Count; verts.Add(tl); verts.Add(tr); verts.Add(bl); verts.Add(br); colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col); inds.Add(vi); inds.Add(vi + 1); inds.Add(vi + 2); inds.Add(vi + 2); inds.Add(vi + 1); inds.Add(vi + 3); } mesh.vertices = verts.ToArray(); mesh.colors = colors.ToArray(); mesh.SetIndices(inds.ToArray(), MeshTopology.Triangles, 0, true); meshFilter.sharedMesh = mesh; } }