Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Selecting objects on a WPF canvas?
Message
De
26/02/2009 05:11:41
 
 
À
24/02/2009 15:16:38
Information générale
Forum:
ASP.NET
Catégorie:
Windows Presentation Foundation (WPF)
Divers
Thread ID:
01383557
Message ID:
01384247
Vues:
43
>>I think I've done this in the past by creating a region (say a rectangular one based on your four points) then using the .Union() method against each object of interest. If the result is null then the object is not within the region. (This can also be used for selecting muliple objects). It's possible that none of your four points will actually fall within the ellipse even though the initial point is very close to it..
>>Haven't access to .NET at the moment so I can't test it.....
>>Best,
>>Viv
>
>
>I like this idea. Could be helpful as I continue to work with shapes on a canvas.

Actually using Geometries rather than regions might be better. This works:
        private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //Circle around clicked point:
            double tolerance = 4;
            Point ClickedPoint = e.GetPosition(MainCanvas);
            EllipseGeometry eg = new EllipseGeometry();
            eg.RadiusX = tolerance; eg.RadiusY = tolerance;
            eg.Center = ClickedPoint;

            // Geometry of an ellipse object on the canvas:
            EllipseGeometry eg2 = new EllipseGeometry();

            foreach (Ellipse TargetEllipse in MainCanvas.Children)
            {
                eg2.RadiusX = TargetEllipse.Width / 2;
                eg2.RadiusY = TargetEllipse.Height / 2;
                eg2.Center = new Point(
                    ((double)TargetEllipse.GetValue(Canvas.LeftProperty)) + TargetEllipse.Width / 2,
                    ((double)TargetEllipse.GetValue(Canvas.TopProperty)) + TargetEllipse.Height / 2
                    );

                //Combine them
                CombinedGeometry cg = new CombinedGeometry(GeometryCombineMode.Intersect, eg, eg2);

                //Is there an overlap
                if (!cg.Bounds.IsEmpty)
                {
                    // Close enough - do something
                }
            }
        }
Rough code to work with ellipses only - better code would cope with any shape on the Canvas....
Best,
Viv
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform