예제 #1
0
            // <SnippetHitTestingOverviewSnippet13>
            // Override default hit test support in visual object.
            protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
            {
                IntersectionDetail intersectionDetail = IntersectionDetail.NotCalculated;

                // Perform custom actions during the hit test processing.

                return(new GeometryHitTestResult(this, intersectionDetail));
            }
예제 #2
0
 //dont hit test, these are just overlay graphics
 protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
 {
     if (IsHitTestVisible)
     {
         return(base.HitTestCore(hitTestParameters));
     }
     return(null);
 }
예제 #3
0
            // <SnippetHitTestingOverviewSnippet14>
            // Override default hit test support in visual object.
            protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
            {
                // Perform actions based on hit test of bounding rectangle.

                // Return results of base class hit testing,
                // which only returns hit on the geometry of visual objects.
                return(base.HitTestCore(hitTestParameters));
            }
예제 #4
0
        protected override GeometryHitTestResult HitTestCore
            (GeometryHitTestParameters hitTestParameters)
        {
            var geometry = new RectangleGeometry(VisualTreeHelper.GetDescendantBounds(this));

            return(new GeometryHitTestResult
                       (this, geometry.FillContainsWithDetail(hitTestParameters.HitGeometry)));
        }
예제 #5
0
        public List <DrawingVisual> GetVisuals(System.Windows.Media.Geometry region)
        {
            hits.Clear();
            GeometryHitTestParameters parameters = new GeometryHitTestParameters(region);
            HitTestResultCallback     callback   = HitTestCallback;

            VisualTreeHelper.HitTest(this, null, callback, parameters);
            return(hits);
        }
예제 #6
0
        public List <DrawingVisual> GetVisuals(Geometry region)
        {
            hits.Clear();
            GeometryHitTestParameters parameters = new GeometryHitTestParameters(region);
            HitTestResultCallback     callback   = new HitTestResultCallback(this.HitTestCallback);

            VisualTreeHelper.HitTest(this, null, callback, parameters);
            return(hits);
        }
예제 #7
0
        protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
        {
            if (_content != null)
            {
                var result = _content.HitTest(hitTestParameters);
            }

            return(base.HitTestCore(hitTestParameters));
        }
예제 #8
0
        public List <DrawingVisual> GetVisuals(Geometry region) //region对象用于命中测试
        {
            hits.Clear();                                       //情况命中测试结果的集合
            GeometryHitTestParameters parameters = new GeometryHitTestParameters(region);
            HitTestResultCallback     callback   = new HitTestResultCallback(this.HitTestCallback);

            //通过调用VisualTreeHelper.HitTest()方法启动命中测试过程
            VisualTreeHelper.HitTest(this, null, callback, parameters);
            //当该过程结束时,该方法返回包含所有找到的可视化对象的集合
            return(hits);
        }
예제 #9
0
        public IEnumerable <DrawingVisual> GetVisuals(Geometry region)
        {
            // Очистить результаты предыдущего поиска
            _hits.Clear();
            // Подготовить параметры для операции проверки попадания (геометрию и обратный вызов)
            var parameters = new GeometryHitTestParameters(region);
            var callback   = new HitTestResultCallback(HitTestCallback);

            // Поиск попаданий
            VisualTreeHelper.HitTest(this, null, callback, parameters);
            return(_hits);
        }
예제 #10
0
        /// <summary>
        /// The base wire control attempts to do manhattan hit testing.  This is a bug and the default should
        /// rely on WPF.  Once that is corrected this can be removed.
        /// </summary>
        protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
        {
            List <DependencyObject> results = new List <DependencyObject>();

            VisualTreeHelper.HitTest(InnerWire, null,
                                     r =>
            {
                results.Add(r.VisualHit);
                return(HitTestResultBehavior.Stop);
            }, new GeometryHitTestParameters(hitTestParameters.HitGeometry));
            return(new GeometryHitTestResult(results.FirstOrDefault() as Visual, IntersectionDetail.NotCalculated));
        }
예제 #11
0
        private void NodeGraphView_OnMouseMove(object sender, MouseEventArgs e)
        {
            if (m_isDrawinSelectionRect)
            {
                Point mousePos = e.GetPosition(NodeCanvas);
                if (mousePos.X > m_selectionStartPoint.X)
                {
                    Canvas.SetLeft(SelectionRect, m_selectionStartPoint.X);
                    SelectionRect.Width = mousePos.X - m_selectionStartPoint.X;
                }
                else
                {
                    Canvas.SetLeft(SelectionRect, mousePos.X);
                    SelectionRect.Width = m_selectionStartPoint.X - mousePos.X;
                }

                if (mousePos.Y > m_selectionStartPoint.Y)
                {
                    Canvas.SetTop(SelectionRect, m_selectionStartPoint.Y);
                    SelectionRect.Height = mousePos.Y - m_selectionStartPoint.Y;
                }
                else
                {
                    Canvas.SetTop(SelectionRect, mousePos.Y);
                    SelectionRect.Height = m_selectionStartPoint.Y - mousePos.Y;
                }

                var rect          = new RectangleGeometry(new Rect(m_selectionStartPoint, mousePos));
                var hitTestParams = new GeometryHitTestParameters(rect);
                HashSet <CScriptNodeViewmodel> containedNodes = new HashSet <CScriptNodeViewmodel>();
                var resultCallback = new HitTestResultCallback(element =>
                {
                    return(HitTestResultBehavior.Continue);
                });

                var filterCallback = new HitTestFilterCallback(element =>
                {
                    if (element is FrameworkElement uiElement)
                    {
                        if (uiElement.DataContext is CScriptNodeViewmodel vm)
                        {
                            containedNodes.Add(vm);
                            return(HitTestFilterBehavior.ContinueSkipSelfAndChildren);
                        }
                    }

                    return(HitTestFilterBehavior.Continue);
                });

                VisualTreeHelper.HitTest(NodeCanvas, filterCallback, resultCallback, hitTestParams);
                ((CNodeGraphViewModel)DataContext).SelectNodes(containedNodes);
            }
        }
예제 #12
0
        private static List <T> GetShapesHit <T>(Visual surface, Point p, Func <List <T>, Point, HitTestResultCallback> target)
        {
            var shapesHit = new List <T>();

            var callback = new HitTestResultCallback(target(shapesHit, p));
            // Specify that the hit test should search for every shape within 2 pixels of the mouse click.
            var rect       = new Rect(new Point(p.X - 2, p.Y - 2), new Size(5, 5));
            var parameters = new GeometryHitTestParameters(new RectangleGeometry(rect));

            // Perform the hit test
            VisualTreeHelper.HitTest(surface, null, callback, parameters);
            return(shapesHit);
        }
예제 #13
0
        public List <DrawingVisual> GetVisuals(Geometry region)
        {
            // Очистить результаты предыдущей проверки
            _hits.Clear();

            // Подготовить параметры для операции проверки попадания (геометрию и обратный вызов).
            var parameters = new GeometryHitTestParameters(region);
            HitTestResultCallback callback = HitTestCallback;

            VisualTreeHelper.HitTest(this, null, callback, parameters);

            return(_hits);
        }
예제 #14
0
        /// <summary>
        /// Initiates a hit test on the specified Visual object, with called-defined HitTestFilterCallback and HitTestResultCallback methods.
        /// </summary>
        /// <param name="region">The region to hit test against.</param>
        /// <returns></returns>
        public List <DrawingVisual> GetVisuals(Geometry region)
        {
            // Remove matches from the previous search.
            hits.Clear();

            // Prepare the parameters for the hit test operation.
            // The geometry and callback.
            GeometryHitTestParameters parameters = new GeometryHitTestParameters(region);
            HitTestResultCallback     callback   = new HitTestResultCallback(this.HitTestCallback);

            // Search for hits.
            VisualTreeHelper.HitTest(this, null, callback, parameters);
            return(hits);
        }
            private FrameworkElement FindNearbyCurve(Point point)
            {
                var vec      = new Vector(5, 5);
                var geometry = new RectangleGeometry(new Rect(point - vec, point + vec));
                var htParams = new GeometryHitTestParameters(geometry);

                var curve = (FrameworkElement)primitiveCurvesRoot.HitTestFirst(
                    htParams,
                    dp =>
                {
                    var fwElement = dp as FrameworkElement;
                    return(fwElement != null && NewPrimitiveCurvesControl.GetPrimitiveCurve(fwElement) != null);
                });

                return(curve);
            }
예제 #16
0
        public static T AreaHitTest <T>(this FrameworkElement element, Point center, double radius)
            where T : DependencyObject
        {
            T   hitTestResult  = null;
            var hitTestParams  = new GeometryHitTestParameters(new EllipseGeometry(center, radius, radius));
            var resultCallback = new HitTestResultCallback(t => HitTestResultBehavior.Continue);
            var filterCallback = new HitTestFilterCallback(t =>
            {
                hitTestResult = GetParent <T>(t as FrameworkElement);
                return(HitTestFilterBehavior.Continue);
            });

            VisualTreeHelper.HitTest(element, filterCallback, resultCallback, hitTestParams);

            return(hitTestResult);
        }
예제 #17
0
        public static IList <T> AreaHitTest <T>(this FrameworkElement element, Point startPoint, double width, double height)
            where T : DependencyObject
        {
            var result = new List <T>();

            var hitTestParams  = new GeometryHitTestParameters(new RectangleGeometry(new Rect(startPoint, new Size(width, height))));
            var resultCallback = new HitTestResultCallback(t => HitTestResultBehavior.Continue);
            var filterCallback = new HitTestFilterCallback(t =>
            {
                result.Add(GetParent <T>(t as FrameworkElement));
                return(HitTestFilterBehavior.Continue);
            });

            VisualTreeHelper.HitTest(element, filterCallback, resultCallback, hitTestParams);

            return(result.Where(c => c != null).Distinct().ToList());
        }
예제 #18
0
        /// <summary>
        ///     Runs a hit test on children of the container within the rectangle matching all elements that have a data context of
        ///     T
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="container"></param>
        /// <param name="rectangleGeometry"></param>
        /// <returns></returns>
        public static List <T> GetHitViewModels <T>(Visual container, RectangleGeometry rectangleGeometry)
        {
            List <T> result = new List <T>();
            GeometryHitTestParameters hitTestParams  = new GeometryHitTestParameters(rectangleGeometry);
            HitTestResultCallback     resultCallback = new HitTestResultCallback(r => HitTestResultBehavior.Continue);
            HitTestFilterCallback     filterCallback = new HitTestFilterCallback(e =>
            {
                if (e is FrameworkElement fe && fe.DataContext is T context && !result.Contains(context))
                {
                    result.Add(context);
                }
                return(HitTestFilterBehavior.Continue);
            });

            VisualTreeHelper.HitTest(container, filterCallback, resultCallback, hitTestParams);

            return(result);
        }
예제 #19
0
        public static List <T> GetItemAt <T>(this ListView listview, Rect areaOfInterest)
        {
            var list           = new List <T>();
            var rect           = new RectangleGeometry(areaOfInterest);
            var hitTestParams  = new GeometryHitTestParameters(rect);
            var resultCallback = new HitTestResultCallback(x => HitTestResultBehavior.Continue);
            var filterCallback = new HitTestFilterCallback(x =>
            {
                if (x is ListViewItem)
                {
                    var item = (T)((ListViewItem)x).Content;
                    list.Add(item);
                }
                return(HitTestFilterBehavior.Continue);
            });

            VisualTreeHelper.HitTest(listview, filterCallback, resultCallback, hitTestParams);
            return(list);
        }
예제 #20
0
        public static bool IsWithinElementBounds(Visual visual, Geometry geometry)
        {
            bool result = false;
            GeometryHitTestParameters hitTestParameters = new GeometryHitTestParameters(geometry);

            VisualTreeHelper.HitTest(visual, null, delegate(HitTestResult candidate)
            {
                switch (((GeometryHitTestResult)candidate).IntersectionDetail)
                {
                case IntersectionDetail.FullyInside:
                case IntersectionDetail.FullyContains:
                case IntersectionDetail.Intersects:
                    result = true;
                    break;
                }
                return(HitTestResultBehavior.Stop);
            }, hitTestParameters);
            return(result);
        }
예제 #21
0
        public static DependencyObject[] HitTestRange(this FrameworkElement container, Rect range)
        {
            var selectedElements = new List <DependencyObject>();

            var rect           = new RectangleGeometry(range);
            var hitTestParams  = new GeometryHitTestParameters(rect);
            var resultCallback = new HitTestResultCallback(result => HitTestResultBehavior.Continue);
            var filterCallback = new HitTestFilterCallback(element =>
            {
                if (VisualTreeHelper.GetParent(element) == container)
                {
                    selectedElements.Add(element);
                }
                return(HitTestFilterBehavior.Continue);
            });

            VisualTreeHelper.HitTest(container, filterCallback, resultCallback, hitTestParams);

            return(selectedElements.ToArray());
        }
예제 #22
0
        protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
        {
            var source = (BitmapSource)Source;

            var rect = new Int32Rect((int)hitTestParameters.HitGeometry.Bounds.Left, (int)hitTestParameters.HitGeometry.Bounds.Top, (int)hitTestParameters.HitGeometry.Bounds.Width, (int)hitTestParameters.HitGeometry.Bounds.Height);

            int stride = (int)source.PixelWidth * (source.Format.BitsPerPixel / 8);

            byte[] pixels = new byte[(int)rect.Height * stride];
            source.CopyPixels(rect, pixels, stride, 0);

            if (!pixels.Contains((byte)0))
            {
            }

            IntersectionDetail intersectionDetail = IntersectionDetail.NotCalculated;

            // Perform custom actions during the hit test processing.

            return(new GeometryHitTestResult(this, intersectionDetail));
        }
예제 #23
0
        public List <DrawingVisual> GetVisuals(Geometry region)
        {
            var hits = new List <DrawingVisual>();

            var paramters = new GeometryHitTestParameters(region);
            var callback  = new HitTestResultCallback(
                (HitTestResult result) =>
            {
                var geometryResult = result as GeometryHitTestResult;
                var visual         = geometryResult.VisualHit as DrawingVisual;

                if (visual != null && geometryResult.IntersectionDetail == IntersectionDetail.FullyInside)
                {
                    hits.Add(visual);
                }
                return(HitTestResultBehavior.Continue);
            });

            VisualTreeHelper.HitTest(this, null, callback, paramters);
            return(hits);
        }
            private void EmphasizeSketchCurves(Point point)
            {
                if (lastEmphasizedSketchCurve != null)
                {
                    lastEmphasizedSketchCurve.IsEmphasized = false;
                }

                var vec      = new Vector(5, 5);
                var geometry = new RectangleGeometry(new Rect(point - vec, point + vec));
                var htParams = new GeometryHitTestParameters(geometry);

                lastEmphasizedSketchCurve = sketchImageView
                                            .HitTestAll(htParams, dp => dp is Path)
                                            .Cast <Path>()
                                            .Select(x => x.DataContext)
                                            .OfType <PointsSequence>()
                                            .FirstOrDefault();

                if (lastEmphasizedSketchCurve != null)
                {
                    lastEmphasizedSketchCurve.IsEmphasized = true;
                }
            }
        public IEnumerable <IElement> HitTest(IRect rect)
        {
            var canvas           = this;
            var r                = new Rect(new Point(rect.X1, rect.Y1), new Point(rect.X2, rect.Y2));
            var selectedElements = new List <DependencyObject>();
            var rectangle        = new RectangleGeometry(r, 0.0, 0.0);
            var hitTestParams    = new GeometryHitTestParameters(rectangle);
            var resultCallback   = new HitTestResultCallback(result => HitTestResultBehavior.Continue);

            var filterCallback = new HitTestFilterCallback(
                element =>
            {
                if (VisualTreeHelper.GetParent(element) == canvas)
                {
                    selectedElements.Add(element);
                }

                return(HitTestFilterBehavior.Continue);
            });

            VisualTreeHelper.HitTest(canvas, filterCallback, resultCallback, hitTestParams);

            return(selectedElements.Cast <IElement>());
        }
예제 #26
0
        public List <DependencyObject> HitTest(Visual visual, IPoint point, double radius)
        {
            var elements = new List <DependencyObject>();
            var elippse  = new EllipseGeometry()
            {
                RadiusX = radius,
                RadiusY = radius,
                Center  = new Point(point.X, point.Y),
            };

            var hitTestParams  = new GeometryHitTestParameters(elippse);
            var resultCallback = new HitTestResultCallback(result => HitTestResultBehavior.Continue);

            var filterCallback = new HitTestFilterCallback(
                element =>
            {
                elements.Add(element);
                return(HitTestFilterBehavior.Continue);
            });

            VisualTreeHelper.HitTest(visual, filterCallback, resultCallback, hitTestParams);

            return(elements);
        }
예제 #27
0
 protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
 {
     return(new GeometryHitTestResult(this, IntersectionDetail.FullyContains));
 }
예제 #28
0
 protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
 {
     return(null);
 }
예제 #29
0
 /// <summary>
 ///     Viewport3DVisual does not yet support Geometry hit testing.
 /// </summary>
 protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
 {
     throw new NotSupportedException(SR.Get(SRID.HitTest_Invalid, typeof(GeometryHitTestParameters).Name, this.GetType().Name));
 }
예제 #30
0
		protected override GeometryHitTestResult HitTestCore (GeometryHitTestParameters hitTestParameters)
		{
			throw new NotImplementedException ();
		}
 protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters)
 {
     // Do something similar here, possibly checking every pixel within
     // the hitTestParameters.HitGeometry.Bounds rectangle
     return(base.HitTestCore(hitTestParameters));
 }