protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParams) { Point hitPoint = hitTestParams.HitPoint; if (Tolerances.AreClose(hitPoint, this.lastPoint)) { return(base.HitTestCore(hitTestParams)); } this.lastPoint = hitPoint; double num; if (((LayoutBehavior)this.AdornerSet.Behavior).IsNewGridlineEnabled && Mouse.LeftButton != MouseButtonState.Pressed && Mouse.RightButton != MouseButtonState.Pressed) { Matrix inverseMatrix = ElementUtilities.GetInverseMatrix(this.AdornerSet.Matrix); Point point = hitPoint * inverseMatrix; Point pointBegin; Point pointEnd; this.GetPoints(out pointBegin, out pointEnd, this.AdornerSet.Matrix); num = !new Rect(pointBegin, pointEnd).Contains(point) ? double.NaN : (!this.IsX ? point.Y : point.X); } else { num = double.NaN; } if (!this.position.Equals(num)) { this.position = num; if (this.isMouseOver) { this.InvalidateRender(); this.AdornerSet.Update(); } } return(base.HitTestCore(hitTestParams)); }
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { var source = new FormatConvertedBitmap((BitmapSource)Source, PixelFormats.Bgra32, null, 0); // Get the pixel of the source that was hit var x = (int)(hitTestParameters.HitPoint.X / ActualWidth * source.PixelWidth); var y = (int)(hitTestParameters.HitPoint.Y / ActualHeight * source.PixelHeight); if (x == source.PixelWidth) { x--; } if (y == source.PixelHeight) { y--; } var pixelxy = new Int32Rect(x, y, 1, 1); var pixelbgra = new byte[4]; source.CopyPixels(pixelxy, pixelbgra, source.PixelWidth * 4, 0); if (pixelbgra[3] < 5) { return(null); } return(new PointHitTestResult(this, hitTestParameters.HitPoint)); }
void HandleMouseMove(object sender, MouseEventArgs e) { var currentPosition = e.GetPosition(CaptureBorder); var hitParams = new PointHitTestParameters(currentPosition); VisualTreeHelper.HitTest(viewport, null, ResultCallback, hitParams); }
private ModelVisual3D GetHitObject(Point mousePosition) { ModelVisual3D hitModelVisual3D = null; // We will use VisualTreeHelper.HitTest with a BeginHitTestResultHandler // because we need to filter out the helper 3D objects (3D lines, wire grid, etc) - so objects that are not children of ObjectsVisual. // If we would not need that filter, we could simply use: //var hitTestResult = VisualTreeHelper.HitTest(MainViewport, mousePosition) as RayMeshGeometry3DHitTestResult; _lastHitTestResult = null; // This field will be set in the BeginHitTestResultHandler var pointParams = new PointHitTestParameters(mousePosition); VisualTreeHelper.HitTest(MainViewport, null, BeginHitTestResultHandler, pointParams); if (_lastHitTestResult != null) { hitModelVisual3D = _lastHitTestResult.VisualHit as ModelVisual3D; // proceed only if we hit an object from ObjectsVisual (and not wire grid or some other helper object) if (!ObjectsVisual.Children.Contains(hitModelVisual3D)) { hitModelVisual3D = null; } } return(hitModelVisual3D); }
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { var source = (BitmapSource)Source; // Get the pixel of the source that was hit var x = (int)(hitTestParameters.HitPoint.X * (source.PixelWidth - 1) / ActualWidth); var y = (int)(hitTestParameters.HitPoint.Y * (source.PixelHeight - 1) / ActualHeight); // Copy the single pixel into a new byte array representing RGBA var pixel = new byte[4]; source.CopyPixels(new Int32Rect(x, y, 1, 1), pixel, 4, 0); if (false) { Debug.WriteLine("x={0}, y={1}, pixel={{{2},{3},{4},{5}}}, Format={6}", x, y, pixel[0], pixel[1], pixel[2], pixel[3], source.Format); } if (source.Format == PixelFormats.Bgra32 && pixel[3] == 0) { return(null); } else if (source.Format == PixelFormats.Indexed8 && pixel[0] == 0) { return(null); } return(new PointHitTestResult(this, hitTestParameters.HitPoint)); }
internal List <DrawingVisual> GetVisuals(Point point) { hits.Clear(); //Rect rect = new Rect(new Point(point.X - 2, point.Y - 2), new Point(point.X + 2, point.Y + 2)); //RectangleGeometry rectGeo = new RectangleGeometry(rect); //GeometryHitTestParameters parameters = new GeometryHitTestParameters(rectGeo); PointHitTestParameters parameters = new PointHitTestParameters(point); HitTestResultCallback callback = new HitTestResultCallback(this.HitTestCallback); VisualTreeHelper.HitTest(this, null, callback, parameters); try { if (hits.Count == 0) { return(null); } else { return(hits); } } catch { return(null); } }
private void viewport_MouseDown(object sender, MouseButtonEventArgs e) { var mousePos = e.GetPosition(viewport); PointHitTestParameters pointparams = new PointHitTestParameters(mousePos); VisualTreeHelper.HitTest(viewport, null, HTResult, pointparams); }
private void Grid_MouseMove(object sender, MouseEventArgs e) { Point mouseposition = e.GetPosition(myViewport); PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition); VisualTreeHelper.HitTest(myViewport, null, HTResult, pointparams); }
internal UIElement GetHitElement(double x, double y) { UIElement element; var gazePointD = new Point(x, y); var window = Application.Current.MainWindow; if (window != null) { var pointFromScreen = window.PointFromScreen(new Point(x, y)); var hitTestParameters = new PointHitTestParameters(pointFromScreen); element = null; var pointHit = new Point(); VisualTreeHelper.HitTest(window, null, OnResultCallback, hitTestParameters); HitTestResultBehavior OnResultCallback(HitTestResult result) { HitTestResultBehavior value; if (result is PointHitTestResult hitTestResult && hitTestResult.VisualHit is UIElement elementHit && elementHit.IsHitTestVisible) { element = elementHit; pointHit = hitTestResult.PointHit; value = HitTestResultBehavior.Stop; } else { value = HitTestResultBehavior.Continue; } return(value); }
//Image.HitTestCoreメソッドの上書き protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { var source = (BitmapSource)Source; //get the pixel of the source that was hit var x = (int)(hitTestParameters.HitPoint.X / ActualWidth * source.PixelWidth); var y = (int)(hitTestParameters.HitPoint.Y / ActualHeight * source.PixelHeight); //copy the single pixel in to a new byte array representing RGBA var pixel = new byte[4]; source.CopyPixels(new Int32Rect(x, y, 1, 1), pixel, 4, 0); //check the alpha (transparency) of the pixel //- threshold can be adjusted from 0 to 255 if (pixel[0] == 0) { //MessageBox.Show(pixel[0].ToString());//test return(null); } //不透明な場合のみマウスが上にありますよと返す return(new PointHitTestResult(this, hitTestParameters.HitPoint)); }
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { BitmapSource source = (BitmapSource)Source; //画像中の位置を取得 int x = (int)(hitTestParameters.HitPoint.X / ActualWidth * source.PixelWidth); int y = (int)(hitTestParameters.HitPoint.Y / ActualHeight * source.PixelHeight); //画像の外なら明らかにヒットしないのでnull返す…拡大時にPixelWidthかPixelHeightに一致してしまうのか?(未確認,負になるかも不明) if (x < 0 || source.PixelWidth <= x || y < 0 || source.PixelHeight <= y) { return(null); } //byte配列にそのピクセルをコピー byte[] pixel = new byte[4]; source.CopyPixels(new System.Windows.Int32Rect(x, y, 1, 1), pixel, 4, 0); //透過しているかをチェック(閾値は変えれる) if (pixel[3] < 1) { return(null); } return(new PointHitTestResult(this, hitTestParameters.HitPoint)); }
internal Adorner3D GetHitAdorner3D(AdornerSet3DContainer layer, Point point) { this.hitTestParameters3D = new PointHitTestParameters(point); this.hitObject = (RectangleHitTestResult)null; VisualTreeHelper.HitTest((Visual)layer, new HitTestFilterCallback(this.FilterPotentialHit), new HitTestResultCallback(this.ProcessHitTestResult3D), (HitTestParameters)this.hitTestParameters3D); if (this.hitObject != null) { ModelVisual3D modelVisual3D1 = (ModelVisual3D)null; foreach (DependencyObject dependencyObject in this.hitObject.HitPath) { ModelVisual3D modelVisual3D2 = dependencyObject as ModelVisual3D; if (modelVisual3D2 != null) { modelVisual3D1 = modelVisual3D2; break; } } Adorner3D associatedAdorner = layer.GetAssociatedAdorner(modelVisual3D1); if (associatedAdorner != null) { return(associatedAdorner); } } return((Adorner3D)null); }
private void ViewPort3D_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Point mousePos = e.GetPosition(viewPort3d); PointHitTestParameters hitParams = new PointHitTestParameters(mousePos); VisualTreeHelper.HitTest(viewPort3d, null, ResultCallback, hitParams); }
private void Grid_MouseDown(object sender, MouseButtonEventArgs e) { if (this.CanMoveCamera) { if (e.MiddleButton == MouseButtonState.Pressed) { mouseDownLM = 2; mouseDown = true; centerOfViewport = viewport.PointToScreen(new Point(viewport.ActualWidth / 2, viewport.ActualHeight / 2)); MouseUtilities.SetPosition(centerOfViewport); this.Cursor = Cursors.None; } else if (e.LeftButton == MouseButtonState.Pressed) { mouseDownLM = 1; mouseDown = true; diffOffset.X = translacija0.OffsetX; diffOffset.Y = translacija0.OffsetY; start = e.GetPosition(this); // oblacic Point pozicijaMisa = e.GetPosition(viewport); Point3D point3D = new Point3D(pozicijaMisa.X, pozicijaMisa.Y, 0); Vector3D pravac = new Vector3D(pozicijaMisa.X, pozicijaMisa.Y, 10); PointHitTestParameters pointParameters = new PointHitTestParameters(pozicijaMisa); RayHitTestParameters rayParameters = new RayHitTestParameters(point3D, pravac); VisualTreeHelper.HitTest(viewport, null, HTResult, pointParameters); } } }
private Adorner GetHitAdorner(Visual visual, Point point, Type[] adornerFilterTypes) { PointHitTestResult hitTestResult = (PointHitTestResult)null; HitTestFilterCallback filterCallback = (HitTestFilterCallback)(testObject => { foreach (Type type in adornerFilterTypes) { if (type.IsInstanceOfType((object)testObject)) { return(HitTestFilterBehavior.Continue); } } return(HitTestFilterBehavior.ContinueSkipSelf); }); HitTestResultCallback resultCallback = (HitTestResultCallback)(hitItemsResult => { hitTestResult = (PointHitTestResult)hitItemsResult; return(HitTestResultBehavior.Stop); }); PointHitTestParameters hitTestParameters = new PointHitTestParameters(point); VisualTreeHelper.HitTest(visual, filterCallback, resultCallback, (HitTestParameters)hitTestParameters); Adorner adorner = (Adorner)null; if (hitTestResult != null) { adorner = hitTestResult.VisualHit as Adorner; } return(adorner); }
private void mainViewport_MouseDown(object sender, MouseButtonEventArgs e) { Point mousePos = e.GetPosition(mainViewport); PointHitTestParameters hitParams = new PointHitTestParameters(mousePos); VisualTreeHelper.HitTest(mainViewport, null, HTResultCallback, hitParams); }
private void rotacijaWheel(object sender, MouseButtonEventArgs e) { if (e.MiddleButton == MouseButtonState.Pressed) { vjuport.CaptureMouse(); start = e.GetPosition(this); diffOffset.X = translacija.OffsetX; diffOffset.Y = translacija.OffsetY; ugaoPoX = mapaPoX.Angle; ugaoPoZ = mapaPoZ.Angle; } else { System.Windows.Point mouseposition = e.GetPosition(vjuport); Point3D testpoint3D = new Point3D(mouseposition.X, mouseposition.Y, 0); //dodali z kao trecu koordinatu da bi bilo 3d Vector3D testdirection = new Vector3D(mouseposition.X, mouseposition.Y, 10); PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition); RayHitTestParameters rayparams = new RayHitTestParameters(testpoint3D, testdirection); //test for a result in the Viewport3D hitgeo = null; //tu se smesta kvadar koji som pogodili VisualTreeHelper.HitTest(vjuport, null, HTResult, pointparams); } }
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { // Hit if within bounding box var pt = hitTestParameters.HitPoint; return(new PointHitTestResult(this, pt)); }
private void HitTesting(Point p) { var element = (srcPin.Parent as ControlAdorner).AdornedElement; VisualTreeHelper.HitTest(designCanvas, null, new HitTestResultCallback(HitTestResultCB1), new PointHitTestParameters(p)); DependencyObject selectedObj = result == null ? null : result.VisualHit; while (selectedObj != null && selectedObj != designCanvas) { if (selectedObj is LinkableControl && selectedObj != element) { HitLinkableControl = selectedObj as LinkableControl; AdornerLayer layer = AdornerLayer.GetAdornerLayer(HitLinkableControl); PointHitTestParameters param = new PointHitTestParameters(designCanvas.TranslatePoint(p, layer)); VisualTreeHelper.HitTest(layer, null, new HitTestResultCallback(HitTestResultCB1), param); selectedObj = result == null ? null : result.VisualHit; while (selectedObj != null && selectedObj != designCanvas) { if (selectedObj is LinkPin) { HitPin = (LinkPin)selectedObj; return; } selectedObj = VisualTreeHelper.GetParent(selectedObj); } return; } selectedObj = VisualTreeHelper.GetParent(selectedObj); } HitLinkableControl = null; HitPin = null; }
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { var source = (BitmapSource)Source; // Get the pixel of the source that was hit var x = (int)(hitTestParameters.HitPoint.X / ActualWidth * source.PixelWidth); var y = (int)(hitTestParameters.HitPoint.Y / ActualHeight * source.PixelHeight); if (x < 0 || x >= source.PixelWidth || y < 0 || y >= source.PixelHeight) { return(null); } // Copy the single pixel into a new byte array representing RGBA var pixel = new byte[4]; source.CopyPixels(new Int32Rect(x, y, 1, 1), pixel, 4, 0); // Check the alpha (transparency) of the pixel // - threshold can be adjusted from 0 to 255 if (pixel[3] == 0) { return(null); } return(new PointHitTestResult(this, hitTestParameters.HitPoint)); }
private void viewPortDisplay_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Middle) { middleMouseDown = true; middleClickPoint = e.GetPosition(this); Console.WriteLine(middleMouseDown); return; } //hit testing if (e.ChangedButton != MouseButton.Left) { return; } Point mouseposition = e.GetPosition(this); Point3D testpoint3D = new Point3D(mouseposition.X, mouseposition.Y, 0); Vector3D testdirection = new Vector3D(mouseposition.X, mouseposition.Y, 10); PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition); RayHitTestParameters rayparams = new RayHitTestParameters(testpoint3D, testdirection); //test for a result in the Viewport3D hitgeo = null; VisualTreeHelper.HitTest(viewPortDisplay, null, HTResult, pointparams); }
public override void OnApplyTemplate() { base.OnApplyTemplate(); this._navigation = Template.FindName("PART_NAVIGATION", this) as ListBox; this._scrollviewer = Template.FindName("PART_SCROLLVIEWER", this) as ScrollViewer; this._navigation.SelectionChanged += (l, k) => { int index = Math.Min(this._navigation.SelectedIndex, this.Items.Count - 1); this.ScrollIntoView(this.Items[index]); }; // Do :设置滚动到指定位置后导航跟着改变 this._scrollviewer.ScrollChanged += (l, k) => { var point = this._scrollviewer.TranslatePoint(new Point(10, 10), this); PointHitTestParameters parameters = new PointHitTestParameters(point); VisualTreeHelper.HitTest(this, HitTestFilter, HitTestCallBack, parameters); }; }
private void InputHitTest(Point pt, out IInputElement enabledHit, out IInputElement rawHit, out PointHitTestResult rawHitResult) { var hitTestParameters = new PointHitTestParameters(pt); var inputHitTestResult = new InputHitTestResult(); VisualTreeHelper.HitTest(this, hitTestParameters, InputHitTestFilterCallback, inputHitTestResult.InputHitTestResultCallback); var visualHit = inputHitTestResult.Result; rawHit = (visualHit as IInputElement); rawHitResult = inputHitTestResult.HitTestResult; enabledHit = null; while (visualHit != null) { var uIElement = visualHit as UIElement; if (uIElement != null) { if (rawHit == null) { rawHit = uIElement; rawHitResult = null; } if (uIElement.IsEnabled) { enabledHit = uIElement; return; } } if (visualHit == this) { break; } visualHit = visualHit.Parent; } }
private static DependencyObject HitTest <T>(Point p, UIElement container) { PointHitTestParameters parameter = new PointHitTestParameters(p); DependencyObject hitTestResult = null; HitTestResultCallback resultCallback = (result) => { UIElement elemCandidateResult = result.VisualHit as UIElement; // result can be collapsed! Even though documentation indicates otherwise if (null != elemCandidateResult && elemCandidateResult.Visibility == Visibility.Visible) { hitTestResult = result.VisualHit; return(HitTestResultBehavior.Stop); } return(HitTestResultBehavior.Continue); }; HitTestFilterCallback filterCallBack = (potentialHitTestTarget) => { if (potentialHitTestTarget is T) { hitTestResult = potentialHitTestTarget; return(HitTestFilterBehavior.Stop); } return(HitTestFilterBehavior.Continue); }; VisualTreeHelper.HitTest(container, filterCallBack, resultCallback, parameter); return(hitTestResult); }
/// <summary> /// Performs a hit test to determine whether the specified /// points are within the bounds of this ScrollViewer /// </summary> /// <returns>The result of the hit test</returns> /// <param name="hitTestParameters">The parameters for hit testing within a visual object</param> protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { if (VisualChildrenCount > 0) { return(VisualTreeHelper.HitTest(GetVisualChild(0), hitTestParameters.HitPoint)); } return(base.HitTestCore(hitTestParameters)); }
public void HitTest(Viewport3D viewport3D, Point mouseposition) { InitHitValues(); PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition); VisualTreeHelper.HitTest(viewport3D, null, HitResultCallback, pointparams); }
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters) { if (this.HullGeometry.FillContains(hitTestParameters.HitPoint)) { return(new PointHitTestResult(this, hitTestParameters.HitPoint)); } return(null); }
private void ViewPort3D_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Point mousePos = e.GetPosition(viewPort3d); PointHitTestParameters hitParams = new PointHitTestParameters(mousePos); VisualTreeHelper.HitTest(viewPort3d, null, ResultCallback, hitParams); // System.Diagnostics.Debug.WriteLine("测试打印信息"); }
InspectTreeNode3D HitTest(Point position) { var hitParams = new PointHitTestParameters(position); HitNode = null; VisualTreeHelper.HitTest(viewport, null, ResultCallback, hitParams); return(HitNode); }
private void Watch_view_OnMouseDown(object sender, MouseButtonEventArgs e) { Point mousePos = e.GetPosition(watch_view); PointHitTestParameters hitParams = new PointHitTestParameters(mousePos); VisualTreeHelper.HitTest(watch_view, null, ResultCallback, hitParams); e.Handled = true; }
protected override HitTestResult HitTestCore (PointHitTestParameters hitTestParameters) { throw new NotImplementedException (); }