public override bool TryGetPosForItemIndex(int itemIndex, out Vector3 pos) { pos = Vector3.zero; if (itemIndex < _presenter.SelectedMinItem || itemIndex >= _presenter.SelectedMaxItem) { return(false); } int dimNum = _presenter.NumberOfDimensions; var zoomArea = _zoomMax - ZoomMin; float valueX = VisViewHelper.GetItemValue(_presenter, 0, itemIndex, true, _displayRelativeValues); float valueY = VisViewHelper.GetItemValue(_presenter, 1, itemIndex, true, _displayRelativeValues); float valueZ = dimNum < 3 ? 0 : VisViewHelper.GetItemValue(_presenter, 2, itemIndex, true, _displayRelativeValues); if (valueX < _zoomMin.x || valueX > _zoomMax.x || valueY < _zoomMin.y || valueY > _zoomMax.y || (dimNum > 2 && (valueZ < _zoomMin.z || valueZ > _zoomMax.z)) ) { return(false); } pos = new Vector3( (valueX - _zoomMin.x) / zoomArea.x * _size.x, (valueY - _zoomMin.y) / zoomArea.y * _size.y, (valueZ - _zoomMin.z) / zoomArea.z * _size.z ); return(true); }
protected override void RebuildVisualization() { if (_presenter == null || _presenter.NumberOfDimensions < 2) { Debug.LogError("Presenter is either null or has not enough dimensions to represent this visualization"); return; } List <Vector3> vertices = new List <Vector3>(); List <int> indices = new List <int>(); List <Color> colors = new List <Color>(); //int offset = (int)_presenter.SelectedMinItem; //int length = (int)_presenter.SelectedMaxItem - offset; int dimNum = _presenter.NumberOfDimensions; var zoomArea = _zoomMax - ZoomMin; for (int itemIndex = _presenter.SelectedMinItem; itemIndex < _presenter.SelectedMaxItem; itemIndex++) { float valueX = VisViewHelper.GetItemValue(_presenter, 0, itemIndex, true, _displayRelativeValues); float valueY = VisViewHelper.GetItemValue(_presenter, 1, itemIndex, true, _displayRelativeValues); float valueZ = dimNum < 3 ? 0 : VisViewHelper.GetItemValue(_presenter, 2, itemIndex, true, _displayRelativeValues); if (valueX < _zoomMin.x || valueX > _zoomMax.x || valueY < _zoomMin.y || valueY > _zoomMax.y || (dimNum > 2 && (valueZ < _zoomMin.z || valueZ > _zoomMax.z)) ) { continue; } vertices.Add(new Vector3( (valueX - _zoomMin.x) / zoomArea.x * _size.x, (valueY - _zoomMin.y) / zoomArea.y * _size.y, (valueZ - _zoomMin.z) / zoomArea.z * _size.z )); colors.Add(_style.GetColorContinous(_presenter.IsItemHighlighted(itemIndex), valueX, valueY, valueZ)); indices.Add(vertices.Count - 1); } var mesh = new Mesh(); mesh.name = "ScatterplotMesh"; mesh.vertices = vertices.ToArray(); mesh.colors = colors.ToArray(); mesh.SetIndices(indices.ToArray(), MeshTopology.Points, 0); var meshFilter = GetComponent <MeshFilter>(); Destroy(meshFilter.sharedMesh); meshFilter.sharedMesh = mesh; }