下面的代码有什么问题? [英] What is wrong with the following code?

查看:124
本文介绍了下面的代码有什么问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到一个完整的椭圆而不是两者之间的交集。什么是错的?

 < Canvas x:Name =mainCnavs> 
< / Canvas>






  public部分类MainWindow:窗口
{
CombinedGeometry g;
路径p;
public MainWindow()
{
InitializeComponent();
mainWindow.Loaded + = new RoutedEventHandler(mainWindow_Loaded);


$ b void mainWindow_Loaded(object sender,RoutedEventArgs e)
{
g = new CombinedGeometry(ellipse.RenderedGeometry,ellipse1.RenderedGeometry);
g.GeometryCombineMode = GeometryCombineMode.Intersect;
statusBar.Text =top left+ g.Bounds.TopLeft.ToString()+bounds.size+ g.Bounds.Size +bounds+ g.Bounds.ToString();
p = new Path();
p.Data = g;
p.Fill = Brushes.Green;
mainCnavs.Children.Add(p);
}


}






如果我将椭圆更改为矩形,并且联合使两个形状重叠。它的行为就好像两个几何图形没有定位一样,是因为我正在使用渲染的几何图形,并且它没有与之相关的位置?那么获得形状几何的另一种方法是什么?

解决方案

是的问题是使用RenderedGeometry,因为它不包含相对于Canvas的位置。



尝试使用您自己的EllipseGeometry构建的EllipseGeometry。

  Rect r1 = new Rect(Canvas.GetLeft(ellipse),Canvas.GetTop(ellipse),ellipse.Width,ellipse.Height); 
Rect r2 = new Rect(Canvas.GetLeft(ellipse1),Canvas.GetTop(ellipse1),ellipse1.Width,ellipse1.Height);
EllipseGeometry eg1 =新的EllipseGeometry(r1);
EllipseGeometry eg2 =新的EllipseGeometry(r2);

组合几何g =新的组合几何(eg1,eg2);
g.GeometryCombineMode = GeometryCombineMode.Intersect;
//statusBar.Text =top left+ g.Bounds.TopLeft.ToString()+bounds.size+ g.Bounds.Size +bounds+ g.Bounds.ToString();
Path p = new Path();
p.Data = g;
p.Fill = Brushes.Green;
mainCnavs.Children.Add(p);


I get a full ellipse not the intersection between the two. What is wrong?

<Canvas x:Name="mainCnavs">
<Ellipse x:Name="ellipse" Width="100" Height="50" Canvas.Top="100" Canvas.Left="300" Fill="Transparent" Stroke="Red" StrokeThickness="3"/>
<Ellipse x:Name="ellipse1" Width="100" Height="50" Canvas.Top="100" Canvas.Left="250" Fill="Transparent" Stroke="Red" StrokeThickness="3"/>
</Canvas>


 public partial class MainWindow : Window
    {
        CombinedGeometry g;
        Path p;
        public MainWindow()
        {
            InitializeComponent();
            mainWindow.Loaded += new RoutedEventHandler(mainWindow_Loaded);

        }

        void mainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            g = new CombinedGeometry(ellipse.RenderedGeometry, ellipse1.RenderedGeometry);
            g.GeometryCombineMode = GeometryCombineMode.Intersect;
            statusBar.Text = "top left " + g.Bounds.TopLeft.ToString() +"   bounds.size   " + g.Bounds.Size + "    bounds " + g.Bounds.ToString();
            p = new Path();
            p.Data = g;
            p.Fill = Brushes.Green;
            mainCnavs.Children.Add(p);
        }


}


If I change the ellipse to a rectangle, and do a union is giving the two shapes overlapped. It behaves as if the two geometries have no positioning, is this because I am using the rendered geometry and it has no position associated with it? Then what is another way then to get the geometry of the shape?

解决方案

Yes the problem is with using the RenderedGeometry, as it does not contain the position relative to the Canvas.

Try making use of your own EllipseGeometry built from the positions of the Ellipses.

        Rect r1 = new Rect(Canvas.GetLeft(ellipse), Canvas.GetTop(ellipse), ellipse.Width, ellipse.Height);
        Rect r2 = new Rect(Canvas.GetLeft(ellipse1), Canvas.GetTop(ellipse1), ellipse1.Width, ellipse1.Height);
        EllipseGeometry eg1 = new EllipseGeometry(r1);
        EllipseGeometry eg2 = new EllipseGeometry(r2);

        CombinedGeometry g = new CombinedGeometry(eg1, eg2);
        g.GeometryCombineMode = GeometryCombineMode.Intersect;
        //statusBar.Text = "top left " + g.Bounds.TopLeft.ToString() + "   bounds.size   " + g.Bounds.Size + "    bounds " + g.Bounds.ToString();
        Path p = new Path();
        p.Data = g;
        p.Fill = Brushes.Green;
        mainCnavs.Children.Add(p);

这篇关于下面的代码有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆