/// <summary> /// Method to display data information (labels etc) within the UI. /// </summary> /// <param name="fpl">List of Frequency Points representing the data of the selected Time Slice in the 3D Radar Chart.</param> private void updateDisplayForFrequencyPointList(List <TDRCFrequencyPoint> fpl) { // clear UI foreach (Transform t in labelsRef) { GameObject.Destroy(t.gameObject); } // remove assistive guidance UI elements if (tdrcInterface.cnfgTmSlcRdrUI_isGuidanceDisplayed) { foreach (Transform t in guidanceAxesRef) { GameObject.Destroy(t.gameObject); } } // iterate through all data variables (= dimensions) of the 3D Radar Chart for (int i = 0; i < fpl.Count; i++) { // construct individual labels for each axis string itemText = fpl[i].dimension + ":\n" + fpl[i].value; // init label and display values Transform item = Instantiate(Resources.Load(timeSliceRadarUILabelPrefabRef) as GameObject).transform; item.gameObject.SetActive(true); item.gameObject.name = itemText; item.GetComponent <Text>().text = itemText; item.GetComponentInChildren <Image>().color = fpl[i].color; // assign parent GameObject item.SetParent(labelsRef, false); // reset position and scale (after attachment to parent GameObject) item.localPosition = Vector3.zero; item.localScale = Vector3.one; // set position float angle = (360.0f / fpl.Count * i * -1.0f) + 90.0f; Vector2 rotatedVector = TDRCTimeSliceRenderer.RotateVector(new Vector2(0.0f, 220.0f), angle); item.localPosition = rotatedVector; // display assistive guidance UI elements if (tdrcInterface.cnfgTmSlcRdrUI_isGuidanceDisplayed) { Transform axis = Instantiate(Resources.Load(individualAxisPrefabRef) as GameObject).transform; axis.name = "TimeSliceRadarUIGuidanceIndividualAxis_" + i; axis.gameObject.SetActive(true); axis.SetParent(guidanceAxesRef, false); axis.localEulerAngles = new Vector3(0.0f, 0.0f, angle); } } }
/// <summary> /// Method to initialize all graphical user interface components to represent an ongoing time range selection (i.e., (1) a copy of the 2D Radar Chart mesh inside the 3D Radar Chart indicating the first selected index, and (2) an axis element indicating the range between the first select index and the currently select time index). /// </summary> public void initiateVisualFeedback() { // make a copy of the current Time Slice selector GameObject visualFeedback_timeSliceRadarRendererCopyForRangeSelectionStart = GameObject.Instantiate(tdrcInterface.interact_timeSliceGO, tdrcInterface.interact_timeSliceGO.transform.parent); if (visualFeedback_timeSliceRadarRendererCopyForRangeSelectionStart != null) { // set appropriate name visualFeedback_timeSliceRadarRendererCopyForRangeSelectionStart.name = "temp-visualFeedback_timeSliceRadarRendererCopyForRangeSelectionStart"; // destroy its box collider (no interaction with hands needed) Destroy(visualFeedback_timeSliceRadarRendererCopyForRangeSelectionStart.GetComponent <BoxCollider>()); // create a new mesh for the canvas renderer TDRCTimeSliceRenderer tsr = visualFeedback_timeSliceRadarRendererCopyForRangeSelectionStart.GetComponentInChildren <TDRCTimeSliceRenderer>(); if (tsr != null) { tsr.setTDRCInterface(tdrcInterface); tsr.setTDRCFreqPolyManager(tdrcInterface.freqPolyManager); tsr.displayRadarWithColor(tdrcInterface.cnfgTmRngSlctr_visualFeedbackColor); } else { Debug.LogError("[TDRCTimeRangeSelector] Unable to acquire TDRCTimeSliceRenderer for temporary visual feedback."); } } // make a copy of the guidance axis GameObject visualFeedback_rangeSelectionAxis = GameObject.Instantiate(tdrcInterface.GetComponentInChildren <TDRCGuidanceAxis>().timeAxis.gameObject, tdrcInterface.interact_timeSliceGO.transform.parent); if (visualFeedback_rangeSelectionAxis != null) { // set appropriate name visualFeedback_rangeSelectionAxis.name = "temp-visualFeedback_rangeSelectionAxis"; // set render material and color Material vfrsaMat = visualFeedback_rangeSelectionAxis.GetComponent <Renderer>().material = new Material(Shader.Find("Standard")); vfrsaMat.color = tdrcInterface.cnfgTmRngSlctr_visualFeedbackColor; // set scale properties visualFeedback_rangeSelectionAxis.transform.localScale = new Vector3(tdrcInterface.cnfgTmRngSlctr_axisScale, visualFeedback_rangeSelectionAxis.transform.localScale.y * 0.5f, tdrcInterface.cnfgTmRngSlctr_axisScale); // update position updateVisualFeedback(visualFeedback_timeSliceRadarRendererCopyForRangeSelectionStart.transform.localPosition.y); } }