2016-12-27 106 views
0

我有一個帶點的多邊形。我需要在多邊形內的指定點繪製一個圓。我嘗試了橢圓的Clip屬性,但無法獲取多邊形的點。在多邊形內的指定點繪製圓形

XAML

<Border x:Name="boardDiagramBorder" BorderThickness="2.5" Margin="5" Background="Gray" > 
         <Grid x:Name="boardCanvas"> 
          <Polygon x:Name="polyOutLine" ClipToBounds="True" Fill="Black" 
             Stroke="White" 
             StrokeThickness="2"> 
          </Polygon> 

         </Grid> 
        </Border> 

代碼繪製多邊形

polyOutLine.Points.Add(new System.Windows.Point() { X = 0, Y = 0 }); 
      polyOutLine.Points.Add(new System.Windows.Point() { X = 118900, Y = 0 }); 
      polyOutLine.Points.Add(new System.Windows.Point() { X = 118900, Y = 62993 }); 
      polyOutLine.Points.Add(new System.Windows.Point() { X = 0, Y = 62993 }); 

我需要畫一個圓在點21004,-57874。

+0

更好用'EllipseGeometry'繪製'Path'而不是'Ellipse'。 – Clemens

回答

2

您無法在網格中使用精確座標進行繪製。您必須使用Canvas繪製形狀,包括使用座標的矩形,圓形和多邊形。

UPDATE:我根據你的問題在你的評論中擴展我的答案,我放在這裏。

取決於您的畫布的位置,因爲該圓形將始終具有基於畫布的相對座標。

例如,如果您的畫布位於距左上角0,0的座標處,那麼您的圓將相對於畫布位於相對於您的畫布的座標中,而不會有其他偏移。如果Canvas沒有定位在0,0,那麼您的繪圖將與Canvas的位置偏移。

+0

我將網格更改爲canvas.But如何在精確的座標中繪製一個圓圈? –

1

您可以使用Canvas.Top和Canvas.Left屬性來設置圓心,或者你可以使用margin屬性

<Grid> 
     <Canvas> 
      <Ellipse x:Name="innerCircle" Width="100" 
        Height="100" 
        Fill="#FFF4F4F5" 
        Stroke="Black" 
        Canvas.Left="50" 
        Canvas.Top="0" 
        /> 

      <Polygon x:Name="polyOutLine" 
        Stroke="Purple" 
        StrokeThickness="2"> 
       <Polygon.Fill> 
        <SolidColorBrush Opacity="0.4" Color="Blue" /> 
       </Polygon.Fill> 
      </Polygon> 
     </Canvas> 
    </Grid> 

從代碼中使用follwing設置圓心功能

private void SetCircleCenter(int x,int y) 
{ 
    double radius = innerCircle.Width/2; 
    innerCircle.Margin = new Thickness(x-radius, y-radius, 0, 0); 
}