using System; using UnityEngine; using sam; [ExecuteInEditMode] public class SelectedDataPoint3DVisualizer : MonoBehaviour { public PointVariable3DVisualizer varViz; public float cylinderWidth = 0.01f; PointVariableSubsession pvls; Renderer rendr; void Awake() { pvls = GetComponentInParent(); rendr = GetComponent(); rendr.enabled = false; } public void OnTimeStampChanged(DateTime t) { Recompute(); } public void OnScaleFactorChanged(float s) { Recompute(); } public void Recompute() { if (pvls.selectedDP == null) { rendr.enabled = false; return; } float valscale = (pvls.scaleFactor * varViz.scaleFactor * varViz.distanceCoveredEstimate) / pvls.prodvar.scaledRange; float val = pvls.selectedDP.variables[pvls.variableIndex]; float scaledElevation = (val - pvls.prodvar.scaledMinValue) * valscale; Vector3 geoCoords = new Vector3(pvls.selectedDP.longitude, pvls.selectedDP.latitude, varViz.heightGap + scaledElevation); Vector3 xyzTop = Utils.DegLonLatHgtToXYZ(geoCoords, true); FitCylinder(transform, Vector3.zero, xyzTop, cylinderWidth); rendr.enabled = true; } void FitCylinder(Transform cylinder, Vector3 start, Vector3 end, float width) { Vector3 offset = end - start; Vector3 scale = new Vector3(width, offset.magnitude * 0.5f, width); var position = start + (offset * 0.5f); cylinder.transform.localPosition = position; cylinder.transform.up = offset; cylinder.transform.localScale = scale; } }