我正在WPF中創建一個可視化工具來顯示我正在編寫的遊戲的流場信息,並且遇到了一些標籤彼此非常接近的問題。如何處理動態放置標籤的重疊
在上面的屏幕截圖,扇區(0,0)是左上方。在部門(1,1)中,我突出顯示了兩個非常接近的箭頭標籤。在部門(2,1)中,我圈出了兩個完全重疊的標籤。我需要能夠以某種方式放置標籤,以便它們不重疊並具有距離邊距。我後面最好有一個簡單的算法,它允許我在競爭點上放置標籤。
藍色/黑色單元格是作爲ItemsPanel使用畫布在項目控件上虛擬化的項目。紅色的扇形正方形在一個裝飾者上,而綠色的線條,盒子,貝塞爾曲線和紅色的成本標籤則是第二個裝飾者。裝飾者都使用繪圖上下文和渲染時動態創建的所有東西。
var typeface = new Typeface(new FontFamily("Segoe UI"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
var formattedText = new FormattedText(curve.Cost.ToString(), CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeface, 12, Brushes.Red, null, TextFormattingMode.Display);
var textLocation = new Point(midPoint2.X - (formattedText.WidthIncludingTrailingWhitespace/2), midPoint2.Y - formattedText.Height);
drawingContext.DrawText(formattedText, textLocation);