Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        void HandleMouseMove(object sender, MouseEventArgs e)
        {
            var currentPosition = e.GetPosition(CaptureBorder);
            var hitParams       = new PointHitTestParameters(currentPosition);

            VisualTreeHelper.HitTest(viewport, null, ResultCallback, hitParams);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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));
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        private void viewport_MouseDown(object sender, MouseButtonEventArgs e)
        {
            var mousePos = e.GetPosition(viewport);
            PointHitTestParameters pointparams = new PointHitTestParameters(mousePos);

            VisualTreeHelper.HitTest(viewport, null, HTResult, pointparams);
        }
Пример #8
0
        private void Grid_MouseMove(object sender, MouseEventArgs e)
        {
            Point mouseposition = e.GetPosition(myViewport);
            PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition);

            VisualTreeHelper.HitTest(myViewport, null, HTResult, pointparams);
        }
Пример #9
0
        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);
                }
Пример #10
0
        //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));
        }
Пример #12
0
 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);
        }
Пример #14
0
        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);
                }
            }
        }
Пример #15
0
        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);
        }
Пример #16
0
        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));
        }
Пример #19
0
        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));
        }
Пример #21
0
        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);
            };
        }
Пример #23
0
        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);
        }
Пример #25
0
 /// <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));
 }
Пример #26
0
        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);
 }
Пример #28
0
        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);
        }
Пример #30
0
        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;
        }
Пример #31
0
		protected override HitTestResult HitTestCore (PointHitTestParameters hitTestParameters)
		{
			throw new NotImplementedException ();
		}