public void InvalidatePositionData() { PosX = Int32.MaxValue; PosY = Int32.MaxValue; Bounds = new EnclosedBounds(); TreeBounds = new EnclosedBounds(); }
public static float GetPositionOffsetInternal(float posY, Rect viewArea, EnclosedBounds bounds, EnclosedBounds treeBounds) { float overallOffset = 270; // this is just a "random" number which I had to apply, I dont know why this offset exists float effect = Mathf.Clamp01(treeBounds.Height / viewArea.height); float lowerDist = -viewArea.yMin + treeBounds.MaxY - overallOffset; float upperDist = viewArea.yMax - treeBounds.MinY - overallOffset; float lowerInterp = Mathf.Clamp01(upperDist / treeBounds.Height); float upperInterp = Mathf.Clamp01(lowerDist / treeBounds.Height); float totalInterp = lowerInterp + upperInterp; lowerInterp /= totalInterp; upperInterp /= totalInterp; float lower = treeBounds.MaxY - bounds.MaxY + posY; float upper = treeBounds.MinY - bounds.MinY + posY; float newY = lower * lowerInterp + upper * upperInterp; newY = newY * effect + posY * (1.0f - effect); return(newY - posY); }
public EnclosedBounds CopyTo(EnclosedBounds b) { b.MinX = MinX; b.MinY = MinY; b.MaxX = MaxX; b.MaxY = MaxY; return(b); }
public EnclosedBounds Enclose(EnclosedBounds b) { MinX = MinX < b.MinX ? MinX : b.MinX; MaxX = MaxX > b.MaxX ? MaxX : b.MaxX; MinY = MinY < b.MinY ? MinY : b.MinY; MaxY = MaxY > b.MaxY ? MaxY : b.MaxY; return(this); }
public void CalculateBounds(NodeDisplayData displayData, RelationType connectionType) { CalculateCachedDataInternal(); if (Bounds.IsInvalid) { Bounds = GetBoundsOwn(displayData); TreeBounds.Enclose(Bounds); } ExtendedNodeWidth = Bounds.Width; foreach (VisualizationConnection childConnection in GetRelations(connectionType)) { childConnection.VNode.CalculateBounds(displayData, connectionType); } }
public void UpdateAreaSize(VisualizationNode node, Rect _windowData) { EnclosedBounds oldArea = new EnclosedBounds(); Bounds.CopyTo(oldArea); EnclosedBounds bounds = node.TreeBounds; int edge = 1000; Bounds.Set(bounds.MinX - edge, bounds.MinY - edge, bounds.MaxX + edge, bounds.MaxY + edge); Bounds.Enclose(new EnclosedBounds(-(int)_windowData.width / 2, -(int)_windowData.height / 2, (int)_windowData.width / 2, (int)_windowData.height / 2)); if (!oldArea.IsInvalid) { ScrollPosition.x += (Bounds.Width - oldArea.Width) / 2; ScrollPosition.y += (Bounds.Height - oldArea.Height) / 2; } }
public static Vector2 GetPositionInternal(float posX, float posY, Rect viewArea, EnclosedBounds bounds, EnclosedBounds treeBounds) { float positionOffset = GetPositionOffsetInternal(posY, viewArea, bounds, treeBounds); return(new Vector2(posX, posY + positionOffset)); }