// <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)); }
//dont hit test, these are just overlay graphics protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters) { if (IsHitTestVisible) { return(base.HitTestCore(hitTestParameters)); } return(null); }
// <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)); }
protected override GeometryHitTestResult HitTestCore (GeometryHitTestParameters hitTestParameters) { var geometry = new RectangleGeometry(VisualTreeHelper.GetDescendantBounds(this)); return(new GeometryHitTestResult (this, geometry.FillContainsWithDetail(hitTestParameters.HitGeometry))); }
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); }
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); }
protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters) { if (_content != null) { var result = _content.HitTest(hitTestParameters); } return(base.HitTestCore(hitTestParameters)); }
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); }
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); }
/// <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)); }
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); } }
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); }
public List <DrawingVisual> GetVisuals(Geometry region) { // Очистить результаты предыдущей проверки _hits.Clear(); // Подготовить параметры для операции проверки попадания (геометрию и обратный вызов). var parameters = new GeometryHitTestParameters(region); HitTestResultCallback callback = HitTestCallback; VisualTreeHelper.HitTest(this, null, callback, parameters); return(_hits); }
/// <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); }
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); }
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()); }
/// <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); }
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); }
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); }
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()); }
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)); }
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>()); }
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); }
protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters) { return(new GeometryHitTestResult(this, IntersectionDetail.FullyContains)); }
protected override GeometryHitTestResult HitTestCore(GeometryHitTestParameters hitTestParameters) { return(null); }
/// <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)); }
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)); }