在多边形

时间:2016-12-27 03:26:10

标签: wpf

我有一个带点的多边形。我需要在多边形内的指定点绘制一个圆。我尝试了椭圆的剪辑属性但无法获得多边形的点。

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画一个圆圈。

2 个答案:

答案 0 :(得分:2)

您无法在网格中使用精确坐标进行绘制。您必须使用Canvas使用坐标绘制形状,包括矩形,圆形和多边形。

更新:我在你的评论中根据你的问题扩展我的答案,我把它放在这里。

取决于画布的位置,因为圆圈始终具有基于画布的相对坐标。

例如,如果画布位于距离左上角0,0的坐标处,那么您的圆圈将位于相对于“画布”的坐标中,没有进一步的偏移。如果“画布”未定位于0,0,那么您的绘图将位于与“画布”位置的偏移位置。

答案 1 :(得分: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>

要从代码中设置圆心,请使用以下函数

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