Beispiel #1
0
        private RaycastMapResult RayCastToMap(Point startPoint)
        {
            RayHitTestResult rayHitTestResult = VisualTreeHelper.HitTest(viewport, startPoint) as RayHitTestResult;

            if (rayHitTestResult != null)
            {
                Point3D hitPoint = rayHitTestResult.PointHit;
                // Convert to tile coords
                var hitPointOnTile = new Vector2 <double>(hitPoint.X - rayHitTestResult.ModelHit.Bounds.X, -(rayHitTestResult.ModelHit.Bounds.Y - hitPoint.Y));
                hitPointOnTile.X = 4096 - hitPointOnTile.X;
                hitPointOnTile   = hitPointOnTile.Multiply(2);

                Projection projection = CalculateProjection();
                var        hitTile    = new Vector2 <double>(hitPoint.X, hitPoint.Y).Divide(4096).ToVectorInt().Multiply(4096);

                double startPosX = (int)Math.Floor((hitTile.X - (projection.Bottom / 2)) / 4096) + 1;
                double startPosY = (int)Math.Floor((hitTile.Y - (projection.Left / 2)) / 4096) + 1;

                double           cZoom = dataController.ConvertToMapZoom(zoom);
                Vector2 <double> startTileCoordinations = MercatorProjection.LatLngToTile(Settings.startPosition, cZoom);
                LatLng           tileLatLng             = MercatorProjection.TileToLatLng(new Vector2 <double>(startTileCoordinations.X - startPosX, startTileCoordinations.Y + startPosY), cZoom);
                //LatLng pointLatLng = MercatorProjection.TileToLatLng(, cZoom);

                Vector2 <double> tile  = MercatorProjection.LatLngToTile(tileLatLng, cZoom).Floor();
                Graph            graph = dataController.GetRoads(new Vector3 <double>(tile.X, tile.Y, cZoom));
                help.Content = graph.FindNearest(hitPointOnTile);

                return(new RaycastMapResult(tileLatLng, hitPointOnTile, hitPoint));
            }

            return(null);
        }
        private HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                bool gasit = false;
                for (int i = 0; i < geometryAndEntyty.Keys.Count(); i++)
                {
                    if ((GeometryModel3D)geometryAndEntyty.Keys.ToList()[i] == rayResult.ModelHit)
                    {
                        hitgeo = (GeometryModel3D)rayResult.ModelHit;
                        gasit  = true;
                        var entity = geometryAndEntyty[hitgeo];

                        toolTip         = new ToolTip();
                        toolTip.Content = "\tPOWER ENTITY:\nID: " + entity.Id.ToString() + "\nName: " + entity.Name + "\nType: " + entity.GetType().Name;
                        //toolTip.Margin = new Thickness(mousePositionForToolTip.X, mousePositionForToolTip.Y, 0, 0);
                        toolTip.Height = 80;
                        toolTip.IsOpen = true;
                        ToolTipService.SetPlacement(ViewPort, System.Windows.Controls.Primitives.PlacementMode.Mouse);
                        break;
                    }
                    else
                    {
                        toolTip.IsOpen = false;
                    }
                }
                if (!gasit)
                {
                    hitgeo = null;
                }
            }
            return(HitTestResultBehavior.Stop);
        }
Beispiel #3
0
        /// <summary>
        /// If the ray from the eye through the mouse-click meets the interaction
        /// sphere, returns the first intersection. If not, returns the sphere
        /// point closest to that ray.
        /// </summary>
        /// <param name="mousePoint"></param>
        /// <returns></returns>
        private Point3D spherePointFromMousePosition(Point mousePoint)
        {
            HitTestResult result = VisualTreeHelper.HitTest(_viewport3D, mousePoint);

            if (result.VisualHit == _sphere)
            {
                RayHitTestResult rayResult = result as RayHitTestResult;
                if (rayResult != null)
                {
                    RayMeshGeometry3DHitTestResult rayMeshResult =
                        rayResult as RayMeshGeometry3DHitTestResult;
                    return(rayMeshResult.PointHit);
                }
                else
                {
                    throw new Exception("hit sphere but missed sphere somehow");
                }
            }
            else // ray misses sphere
            {
                Point3D eye = ((PerspectiveCamera)_viewport3D.Camera).Position;

                return(new Point3D(0, 0.5, 0));
            }
        }
        /// <summary>
        /// Returns the intersection info for the given rayHitResult.  Intersection info
        /// only exists for an InteractiveModelVisual3D, so if an InteractiveModelVisual3D
        /// is not hit, then the return value is null.
        /// </summary>
        /// <param name="rayHitResult"></param>
        /// <returns>
        /// Returns ClosestIntersectionInfo if an InteractiveModelVisual3D is hit, otherwise
        /// returns null.
        /// </returns>
        private ClosestIntersectionInfo GetIntersectionInfo(RayHitTestResult rayHitResult)
        {
            ClosestIntersectionInfo isectInfo = null;

            // try to cast to a RaymeshGeometry3DHitTestResult
            RayMeshGeometry3DHitTestResult rayMeshResult = rayHitResult as RayMeshGeometry3DHitTestResult;

            if (rayMeshResult != null)
            {
                // see if we hit an InteractiveVisual3D
                InteractiveVisual3D imv3D = rayMeshResult.VisualHit as InteractiveVisual3D;
                if (imv3D != null)
                {
                    // we can now extract the mesh and visual for the object we hit
                    MeshGeometry3D geom   = rayMeshResult.MeshHit;
                    UIElement      uiElem = imv3D.InternalVisual;

                    if (uiElem != null)
                    {
                        // pull the barycentric coordinates of the intersection point
                        double vertexWeight1 = rayMeshResult.VertexWeight1;
                        double vertexWeight2 = rayMeshResult.VertexWeight2;
                        double vertexWeight3 = rayMeshResult.VertexWeight3;

                        // the indices in to where the actual intersection occurred
                        int index1 = rayMeshResult.VertexIndex1;
                        int index2 = rayMeshResult.VertexIndex2;
                        int index3 = rayMeshResult.VertexIndex3;

                        // texture coordinates of the three vertices hit
                        // in the case that no texture coordinates are supplied we will simply
                        // treat it as if no intersection occurred
                        if (geom.TextureCoordinates != null &&
                            index1 < geom.TextureCoordinates.Count &&
                            index2 < geom.TextureCoordinates.Count &&
                            index3 < geom.TextureCoordinates.Count)
                        {
                            Point texCoord1 = geom.TextureCoordinates[index1];
                            Point texCoord2 = geom.TextureCoordinates[index2];
                            Point texCoord3 = geom.TextureCoordinates[index3];

                            // get the final uv values based on the barycentric coordinates
                            Point finalPoint = new Point(texCoord1.X * vertexWeight1 +
                                                         texCoord2.X * vertexWeight2 +
                                                         texCoord3.X * vertexWeight3,
                                                         texCoord1.Y * vertexWeight1 +
                                                         texCoord2.Y * vertexWeight2 +
                                                         texCoord3.Y * vertexWeight3);

                            // create and return a valid intersection info
                            isectInfo = new ClosestIntersectionInfo(finalPoint,
                                                                    uiElem,
                                                                    imv3D);
                        }
                    }
                }
            }

            return(isectInfo);
        }
Beispiel #5
0
        private HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;
            ToolTip          tt        = new ToolTip();

            if (f1 != null || f2 != null)
            {
                map.Children.Remove(f1);
                map.Children.Remove(f2);
                map.Children.Add(models[id1].Item1);
                map.Children.Add(models[id2].Item1);
            }
            if (rayResult != null)
            {
                bool gasit = false;
                foreach (var gm in models.Values)
                {
                    if (gm.Item1 == rayResult.ModelHit)
                    {
                        hitgeo = (GeometryModel3D)rayResult.ModelHit;
                        gasit  = true;
                        tt     = GetIsToolTip(gm.Item1);
                        MessageBox.Show(tt.Content.ToString());
                    }
                }
                foreach (var gm in linesmodel)
                {
                    if (gm == rayResult.ModelHit)
                    {
                        hitgeo = (GeometryModel3D)rayResult.ModelHit;
                        gasit  = true;
                        tt     = GetIsToolTip(gm);
                        MessageBox.Show(tt.Content.ToString());
                        string id = tt.Content.ToString().Split(',')[0].Split(':')[1].Substring(1);
                        foreach (var item in lines)
                        {
                            long idd = long.Parse(id);
                            if (item.ID == idd)
                            {
                                id1 = (long)item.FirstEnd;
                                id2 = (long)item.SecondEnd;
                                map.Children.Remove(models[(long)item.FirstEnd].Item1);
                                map.Children.Remove(models[(long)item.SecondEnd].Item1);
                                f1          = new GeometryModel3D(models[(long)item.FirstEnd].Item1.Geometry, models[(long)item.FirstEnd].Item1.Material);
                                f1.Material = new DiffuseMaterial(Brushes.Pink);
                                f2          = new GeometryModel3D(models[(long)item.SecondEnd].Item1.Geometry, models[(long)item.SecondEnd].Item1.Material);
                                f2.Material = new DiffuseMaterial(Brushes.Pink);
                                map.Children.Add(f1);
                                map.Children.Add(f2);
                            }
                        }
                    }
                }
                if (!gasit)
                {
                    hitgeo = null;
                }
            }
            return(HitTestResultBehavior.Stop);
        }
Beispiel #6
0
        public HitTestResultBehavior ResultCallback_Click(HitTestResult result)
        {
            try
            {
                var tempModel = result.VisualHit as ModelVisual3D;
                if (tempModel != null)
                {
                }
                RayHitTestResult rayHitTest = result as RayHitTestResult;
                if (rayHitTest != null)
                {
                    RayMeshGeometry3DHitTestResult rayMeshGeometry3DHitTestResult = rayHitTest as RayMeshGeometry3DHitTestResult;
                    if (rayMeshGeometry3DHitTestResult != null)
                    {
                        foreach (var temp in product_Info.Values)
                        {
                            if (temp.Model.Content == rayMeshGeometry3DHitTestResult.ModelHit)
                            {
                                ChangeAppearance(temp.ShelfNo);
                                GetProductmsg(temp.ShelfNo, temp.ShelfState.ToString(), temp.ProductName, temp.ProductId, temp.LastUpTime);
                                return(HitTestResultBehavior.Stop);
                            }
                        }
                        SetNotSelectedAppearance(pervSelectedShelfNo);
                    }
                }
            }
            catch (Exception ex)
            {
                HintEvent(string.Format("ResultCallback_Click" + ex.ToString()));
            }

            return(HitTestResultBehavior.Continue);
        }
Beispiel #7
0
        private HitTestResultBehavior HTResult(HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                DiffuseMaterial darkSide = new DiffuseMaterial(new SolidColorBrush(Colors.Purple));
                bool            gasit    = false;
                foreach (var obj in instantiatedObject)
                {
                    if (obj.Model != rayResult.ModelHit)
                    {
                        continue;
                    }
                    if (obj.IsSelected)
                    {
                        continue;
                    }
                    gasit           = true;
                    tooltip.Content = ToolTipHelper.Serialize(new List <PowerEntity>()
                    {
                        obj.Entity
                    });
                    tooltip.IsOpen = true;
                    hitGeometry    = (GeometryModel3D)rayResult.ModelHit;
                    ScheduleColorReset(obj);
                    hitGeometry.Material = darkSide;
                }
                foreach (var obj in lines.Values)
                {
                    if (obj.Model != rayResult.ModelHit)
                    {
                        continue;
                    }
                    if (obj.IsSelected || obj.FirstEnd.IsSelected || obj.SecondEnd.IsSelected)
                    {
                        continue;
                    }
                    gasit          = true;
                    tooltip.IsOpen = true;

                    tooltip.Content = $"Type: Line Entity\nId: {obj.Entity.Id}\nName: {obj.Entity.Name}\nIsUnderground: {obj.Entity.IsUnderground}";
                    hitGeometry     = (GeometryModel3D)rayResult.ModelHit;
                    ScheduleColorReset(obj);
                    ScheduleColorReset(obj.FirstEnd);
                    ScheduleColorReset(obj.SecondEnd);
                    hitGeometry.Material         = darkSide;
                    obj.FirstEnd.Model.Material  = darkSide;
                    obj.SecondEnd.Model.Material = darkSide;
                }
                if (!gasit)
                {
                    hitGeometry = null;
                }
            }

            return(HitTestResultBehavior.Stop);
        }
Beispiel #8
0
        /// <summary>
        ///     Converts the given point or ray hit test result into a PointHitTestResult.
        ///     In the case of a RayHitTestResult this is done by walking up the
        ///     transforming the 3D intersection into the coordinate space of the
        ///     Viewport3DVisual which contains the Visual3D subtree.
        /// </summary>
        internal static PointHitTestResult AsNearestPointHitTestResult(HitTestResult result)
        {
            if (result == null)
            {
                return(null);
            }

            PointHitTestResult resultAsPointHitTestResult = result as PointHitTestResult;

            if (resultAsPointHitTestResult != null)
            {
                return(resultAsPointHitTestResult);
            }

            RayHitTestResult resultAsRayHitTestResult = result as RayHitTestResult;

            if (resultAsRayHitTestResult != null)
            {
                Visual3D current        = (Visual3D)resultAsRayHitTestResult.VisualHit;
                Matrix3D worldTransform = Matrix3D.Identity;

                while (true)
                {
                    if (current.Transform != null)
                    {
                        worldTransform.Append(current.Transform.Value);
                    }

                    Visual3D parent3D = current.InternalVisualParent as Visual3D;

                    if (parent3D == null)
                    {
                        break;
                    }

                    current = parent3D;
                }

                Viewport3DVisual viewport = current.InternalVisualParent as Viewport3DVisual;

                if (viewport != null)
                {
                    Point4D worldPoint    = ((Point4D)resultAsRayHitTestResult.PointHit) * worldTransform;
                    Point   viewportPoint = viewport.WorldToViewport(worldPoint);

                    return(new PointHitTestResult(viewport, viewportPoint));
                }

                Debug.Fail("How did a ray hit a Visual3D not parented to a Viewport3DVisual?");

                return(null);
            }

            Debug.Fail(String.Format("Unhandled HitTestResult type '{0}'", result.GetType().Name));

            return(null);
        }
Beispiel #9
0
        void _CheckMouseInModel(object sender, MouseEventArgs e)
        {
            // don't bother checking the mouse position if we are dragging
            if (e.LeftButton == MouseButtonState.Pressed || e.RightButton == MouseButtonState.Pressed)
            {
                return;
            }

            // see if the the mouse is over a cube
            // N.B we are looking at the border as it is superimposed over the viewPort
            Cube             foundCube = null;
            SearchResult     correspondingSearchResult = null;
            HitTestResult    result    = VisualTreeHelper.HitTest(viewPort, e.GetPosition(viewPort));
            RayHitTestResult rayResult = result as RayHitTestResult;

            if (rayResult != null)
            {
                RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;
                if (rayMeshResult != null)
                {
                    GeometryModel3D model = rayMeshResult.ModelHit as GeometryModel3D;
                    for (int i = 0, len = _cube.Length; i < len; i++)
                    {
                        var item = _cube[i];
                        if (item.Content == model)
                        {
                            foundCube = item;
                            correspondingSearchResult = _searchResult[i];
                            break;
                        }
                    }
                }
            }

            // update the selection as appropriate
            if (foundCube != _currentHilightedCube)
            {
                if (_currentHilightedCube != null)
                {
                    _currentHilightedCube.Reset();
                }
                if (foundCube != null)
                {
                    correspondingSearchResult.BringIntoView();

                    SolidColorBrush brush     = new SolidColorBrush(Colors.Red);
                    ColorAnimation  animation = new ColorAnimation(Colors.Red, Color.FromRgb(0xff, 0xff, 0xff), new Duration(TimeSpan.FromMilliseconds(750)));
                    brush.BeginAnimation(SolidColorBrush.ColorProperty, animation);
                    correspondingSearchResult.Background = brush;
                    foundCube.Ping();
                }
                _currentHilightedCube = foundCube;
            }
        }
        /// <summary>
        /// 采用命中测试得到三维场景中选中的商品
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void viewport3D_MouseLeftButtonDown(object sender, MouseButtonEventArgs args)
        {
            Point mousePosition = args.GetPosition(viewport3D);
            PointHitTestParameters pointparams = new PointHitTestParameters(mousePosition);

            //测试 Viewport3D 中的结果
            VisualTreeHelper.HitTest(viewport3D, null, rawresult =>
            {
                RayHitTestResult rayResult = rawresult as RayHitTestResult;
                if (rayResult != null)
                {
                    RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;
                    if (rayMeshResult != null)
                    {
                        GeometryModel3D hitgeo         = rayMeshResult.ModelHit as GeometryModel3D;
                        MaterialGroup priorMaterial    = hitgeo.Material as MaterialGroup;
                        DiffuseMaterial difuseMaterial = priorMaterial.Children[0] as DiffuseMaterial;
                        if (difuseMaterial != null && difuseMaterial.Brush is ImageBrush)
                        {
                            ImageBrush imgBrush = difuseMaterial.Brush as ImageBrush;
                            try
                            {
                                string imagesource = imgBrush.ImageSource.ToString();
                                string imageName   = System.IO.Path.GetFileName(imagesource);
                                int selIndex       = 0;
                                for (int i = 0; i < Global.ProductDemoImages.Count; i++)
                                {
                                    if (System.IO.Path.GetFileName(Global.ProductDemoImages[i]) == imageName)
                                    {
                                        selIndex = i;
                                    }
                                }
                                ProductBiz selPruduct = HomeProductDic[selIndex];
                                if (selPruduct != null)
                                {
                                    Grid.SetRowSpan(Global.MainFrame, 1);
                                    if (Global.UserInterface == UserInterface.FittingRoom)
                                    {
                                        Global.MainFrame.Navigate(new Uri("/Views/ProductTryingOnControl.xaml", UriKind.Relative), selPruduct);
                                    }
                                    else
                                    {
                                        Global.MainFrame.Navigate(new Uri("/Views/ProductDetailControl.xaml", UriKind.Relative), selPruduct);
                                    }
                                    Global.MainFrame.Navigated += MainFrame_Navigated;
                                }
                            }
                            catch { }
                        }
                    }
                }
                return(HitTestResultBehavior.Stop);
            }, pointparams);
        }
Beispiel #11
0
        public HitTestResultBehavior resultCallback(HitTestResult result)
        {
            rayResult = result as RayHitTestResult;
            if (rayResult != null)
            {
                // Did we hit a MeshGeometry3D?
                RayMeshGeometry3DHitTestResult rayMeshResult =
                    rayResult as RayMeshGeometry3DHitTestResult;
            }

            return(HitTestResultBehavior.Stop);
        }
Beispiel #12
0
        public HitTestResultBehavior ResultCallback_DoubleClick(HitTestResult result)//双击货架展示某一排货物  可以旋转 展示
        {
            try
            {
                var tempModel = result.VisualHit as ModelVisual3D;
                if (tempModel != null)
                {
                }
                RayHitTestResult rayHitTest = result as RayHitTestResult;
                if (rayHitTest != null)
                {
                    RayMeshGeometry3DHitTestResult rayMeshGeometry3DHitTestResult = rayHitTest as RayMeshGeometry3DHitTestResult;
                    if (rayMeshGeometry3DHitTestResult != null)
                    {
                        foreach (var temp in shelf_Info.Values)
                        {
                            if (temp.Model.Content == rayMeshGeometry3DHitTestResult.ModelHit)
                            {
                                selected_shelfInfo.Clear();
                                selected_productInfo.Clear();
                                string[] strs = temp.ModelName.Split('_');
                                string   selectedShelfLineNo = strs[1];
                                foreach (var shelfInfo in shelf_Info.Keys)
                                {
                                    strs = shelfInfo.Split('_');
                                    if (strs[1].Equals(selectedShelfLineNo))
                                    {
                                        selected_shelfInfo.Add(shelfInfo, shelf_Info[shelfInfo]);
                                    }
                                }
                                foreach (var productInfo in product_Info.Keys)
                                {
                                    strs = productInfo.Split('.');
                                    if (strs[0].Equals(selectedShelfLineNo.PadLeft(2, '0')))
                                    {
                                        selected_productInfo.Add(productInfo, (ProductInfo)product_Info[productInfo]);
                                    }
                                }
                                SetNotSelectedAppearance(pervSelectedShelfNo);
                                ShowShelf(selected_shelfInfo, selected_productInfo);
                                return(HitTestResultBehavior.Stop);;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                HintEvent(string.Format("ResultCallback" + ex.ToString()));
            }

            return(HitTestResultBehavior.Continue);
        }
Beispiel #13
0
        private HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                if (rayResult.VisualHit is Disk)
                {
                    MessageBox.Show(((Disk)(rayResult.VisualHit)).AppName);
                }

                if (scene.Models[0] == rayResult.VisualHit)
                {
                    if (!((Sphere)scene.Models[0]).Children.Contains(pokeable_modelvisual_3d))
                    {
                        //System.Diagnostics.Process.Start("Notepad.exe");
                        scene.ToggleTimer();
                        //scene.Models.Add(new TextVisual3D() {Text="Hello",  Position= new Point3D (0,0,3) });
                        old = scene.Camera.Position;
                        scene.Camera.Position = new Point3D(15, -6, 12);
                        scene.Camera.Rotate(new Vector3D(2, 1, 1), -70);
                        ((Sphere)scene.Models[0]).Children.Add(pokeable_modelvisual_3d);
                        tb.Focus();
                        tb.TextChanged += Tb_TextChanged;
                        //tb.Text = angle.ToString();
                    }
                    else
                    {
                        scene.ToggleTimer();
                        //scene.Models.Add(new TextVisual3D() {Text="Hello",  Position= new Point3D (0,0,3) });
                        //scene.Camera.Position = new Point3D(25, -15, 8);
                        //scene.Camera.Rotate(new Vector3D(2, 1, 1), 100);
                        ((Sphere)scene.Models[0]).Children.Remove(pokeable_modelvisual_3d);
                        scene.Camera.Position = old;
                    }
                }

                //if (cross == rayResult.ModelHit)
                //{
                //    this.Close();
                //}

                //if (pyramid == rayResult.ModelHit)
                //{

                //    DragMove();
                //}
            }


            return(HitTestResultBehavior.Stop);
        }
        private HitTestResultBehavior HitTestCallback(HitTestResult result)
        {
            RayHitTestResult htResult = result as RayHitTestResult;

            if (htResult != null)
            {
                if (nodeModels.ContainsKey(htResult.ModelHit))
                {
                    tooltip           = new ToolTip();
                    tooltip.Content   = nodeModels[htResult.ModelHit].ToolTip;
                    tooltip.IsOpen    = true;
                    tooltip.Placement = System.Windows.Controls.Primitives.PlacementMode.Mouse;

                    return(HitTestResultBehavior.Stop);
                }

                if (selectedModel1 != null)
                {
                    Material mat = new DiffuseMaterial(Brushes.Red);
                    selectedModel1.Material = oldMaterial1;
                    selectedModel2.Material = oldMaterial2;
                }

                if (lineModels.ContainsKey(htResult.ModelHit))
                {
                    PowerLine line = lineModels[htResult.ModelHit];
                    PowerNode pn1  = nodeMap.IdToNodeDictionary[line.FirstEnd];
                    PowerNode pn2  = nodeMap.IdToNodeDictionary[line.SecondEnd];

                    GeometryModel3D pn1Model = nodeModels.FirstOrDefault(n => n.Value == pn1).Key as GeometryModel3D;
                    GeometryModel3D pn2Model = nodeModels.FirstOrDefault(n => n.Value == pn2).Key as GeometryModel3D;

                    // Save old materials to restore on deselect
                    selectedModel1 = pn1Model;
                    selectedModel2 = pn2Model;
                    oldMaterial1   = pn1Model.Material;
                    oldMaterial2   = pn2Model.Material;

                    Material mat = new DiffuseMaterial(Brushes.GreenYellow);
                    pn1Model.Material = mat;
                    pn2Model.Material = mat;

                    // Show tooltip
                    tooltip           = new ToolTip();
                    tooltip.Content   = lineModels[htResult.ModelHit].ToolTip;
                    tooltip.IsOpen    = true;
                    tooltip.Placement = System.Windows.Controls.Primitives.PlacementMode.Mouse;
                }
            }

            return(HitTestResultBehavior.Stop);
        }
        /// <summary>
        /// The HTResult function simply takes the intersection closest to the origin and
        /// and stores the intersection info for that closest intersection point.
        /// </summary>
        /// <param name="rawresult"></param>
        /// <returns></returns>
        private HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult      rayResult             = rawresult as RayHitTestResult;
            HitTestResultBehavior hitTestResultBehavior = HitTestResultBehavior.Continue;

            // since we're hit testing a viewport3D we should be getting the ray hit test result back
            if (rayResult != null)
            {
                _closestIntersectInfo = GetIntersectionInfo(rayResult);
                hitTestResultBehavior = HitTestResultBehavior.Stop;
            }

            return(hitTestResultBehavior);
        }
Beispiel #16
0
        public HitTestResultBehavior ResultCallback(HitTestResult result)
        {
            RayHitTestResult rayResult = result as RayHitTestResult;

            if (rayResult != null)
            {
                RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;

                if (rayMeshResult != null)
                {
                }
            }

            return(HitTestResultBehavior.Continue);
        }
        /// <summary>
        /// Gets the hit position transformed to global (viewport) coordinates.
        /// </summary>
        /// <param name="rayHit">
        /// The hit structure.
        /// </param>
        /// <param name="viewport">
        /// The viewport.
        /// </param>
        /// <returns>
        /// The 3D position of the hit.
        /// </returns>
        private static Point3D GetGlobalHitPosition(RayHitTestResult rayHit, Viewport3D viewport)
        {
            // PointHit is in Visual3D space
            var p = rayHit.PointHit;

            // transform the Visual3D hierarchy up to the Viewport3D ancestor
            var t = GetTransform(viewport, rayHit.VisualHit);

            if (t != null)
            {
                p = t.Transform(p);
            }

            return(p);
        }
        HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                DiffuseMaterial darkSide =
                    new DiffuseMaterial(new SolidColorBrush(
                                            System.Windows.Media.Colors.Red));
                bool gasit = false;
                for (int i = 1; i < grupica.Children.Count; i++)
                {
                    if ((GeometryModel3D)grupica.Children[i] == rayResult.ModelHit)
                    {
                        hitgeo = (GeometryModel3D)rayResult.ModelHit; //tu se nalazi kvadar koji smo pogopdili
                        gasit  = true;

                        MeshGeometry3D hitMesh = (MeshGeometry3D)hitgeo.Geometry;
                        double         xMin    = 45.2325;   //19.72727  19.793909
                        double         xMax    = 45.277031; //19.95094  19.894459
                        double         yMin    = 19.793909; //45.18972  45.2325
                        double         yMax    = 19.894459; //45.32873  45.277031
                        double         stopaX  = 200 / (xMax - xMin);
                        double         stopaY  = 200 / (yMax - yMin);

                        Point3D p = hitMesh.Positions[0];
                        double  x = p.X;
                        double  y = p.Z;

                        foreach (CvorMape cm in sviCvorovi)
                        {
                            if (x == (stopaX * (cm.X - xMin)) && y == (stopaY * (cm.Y - yMin)))
                            {
                                MessageBox.Show("name: " + cm.Name + " id: " + cm.Id + " type: " + cm.Type);
                            }
                        }
                    }
                }
                if (!gasit)
                {
                    hitgeo = null;
                }
            }

            return(HitTestResultBehavior.Stop); //enumeracija, to znaci da hocemo da zaustavimo zrak, a ne da se nastavlja
        }
        public HitTestResultBehavior ResultCallback(HitTestResult result)
        {
            // Did we hit 3D?
            RayHitTestResult rayResult = result as RayHitTestResult;

            if (rayResult != null)
            {
                // Did we hit a MeshGeometry3D?
                RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;
                geom.Transform = new TranslateTransform3D(new Vector3D(rayResult.PointHit.X, rayResult.PointHit.Y, rayResult.PointHit.Z));

                if (rayMeshResult != null)
                {
                    // Yes we did!
                }
            }

            return(HitTestResultBehavior.Continue);
        }
Beispiel #20
0
        private HitTestResultBehavior HTResultCallback(HitTestResult result)
        {
            // Did we hit 3D?
            RayHitTestResult rayResult = result as RayHitTestResult;

            if (rayResult != null)
            {
                // Did we hit a MeshGeometry3D?
                RayMeshGeometry3DHitTestResult rayMeshResult =
                    rayResult as RayMeshGeometry3DHitTestResult;

                if (rayMeshResult != null)
                {
                    // Yes we did!
                }
            }

            return(HitTestResultBehavior.Continue);
        }
Beispiel #21
0
        private void MouseLeftButtonPressed(object Sender, MouseButtonEventArgs e)
        {
            // do not allow any modifications to the game board during a move animation
            if (IsAnimating)
            {
                return;
            }

            // process hit test results
            PointHitTestParameters hitParameters = new PointHitTestParameters(e.GetPosition(viewport));

            viewableHitResult = null;
            VisualTreeHelper.HitTest(viewport, hitTestExcludeSelectionFilter, mousePressedHitTestResultCallback, hitParameters);

            isDragging = true;

            // stores the initial rotation
            AxisAngleRotation3D viewableRotation = (viewableGroup.Transform as RotateTransform3D).Rotation as AxisAngleRotation3D;

            initialQuaternion      = new Quaternion(viewableRotation.Axis, viewableRotation.Angle);
            initialSphereHitVector = ProjectToTrackball(e.GetPosition(this));

            if (viewableHitResult != null)
            {
                if (viewableHitResult.VisualHit == board)
                {
                    // board is hit
                    Select(((int)Math.Floor(viewableHitResult.PointHit.Z / SquareSize) + (Board.SideSquareNo / 2)) * Board.SideSquareNo + ((int)Math.Floor(viewableHitResult.PointHit.X / SquareSize) + (Board.SideSquareNo / 2)));
                }
                else if (viewableHitResult.VisualHit == boardExtra)
                {
                }
                else
                {
                    // a piece has been hit
                    Select(((int?)viewableHitResult.VisualHit.GetValue(position)).Value);
                }
            }

            // set the focus on this control to receive keyboard events
            Focus();
        }
Beispiel #22
0
        private HitTestResultBehavior HTResult(HitTestResult result)
        {
            var isHorizantal           = true;
            RayHitTestResult rayResult = result as RayHitTestResult;

            ApplyRotation(rayResult.PointHit);
            if (rayResult != null)
            {
                RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;
                if (rayMeshResult != null)
                {
                    GeometryModel3D hitgeo = rayMeshResult.ModelHit as GeometryModel3D;
                    MeshGeometry3D  geom   = rayMeshResult.MeshHit;
                    isHorizantal = IsHorizantal(rayResult.PointHit, geom.Bounds);
                    Model3DGroup group = ((Model3DGroup)((System.Windows.Media.Media3D.ModelVisual3D)viewport.Children[0]).Content);
                    ReproductionBox(group, hitgeo, rayResult.PointHit, isHorizantal);
                }
            }
            return(HitTestResultBehavior.Continue);
        }
Beispiel #23
0
        //<SnippetHitTest3D3DN5>
        public HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            //MessageBox.Show(rawresult.ToString());
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;

                if (rayMeshResult != null)
                {
                    GeometryModel3D hitgeo = rayMeshResult.ModelHit as GeometryModel3D;

                    UpdateResultInfo(rayMeshResult);
                    UpdateMaterial(hitgeo, (side1GeometryModel3D.Material as MaterialGroup));
                }
            }

            return(HitTestResultBehavior.Continue);
        }
        public HitTestResultBehavior HTResult(HitTestResult rawresult)
        {
            // MessageBox.Show(rawresult.ToString());
            //  RayHitTestResult rayResult = rawresult as RayHitTestResult;
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                // RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;
                RayHitTestResult rayMeshResultrayResult = rayResult as RayHitTestResult;
                if (rayMeshResultrayResult != null)
                {
                    //   GeometryModel3D hitgeo = rayMeshResult.ModelHit as GeometryModel3D;
                    var visual3D = rawresult.VisualHit as ModelVisual3D;

                    //    do something
                }
            }

            return(HitTestResultBehavior.Continue);
        }
        public HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult == null)
            {
                return(HitTestResultBehavior.Continue);
            }
            RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;

            if (rayMeshResult == null)
            {
                return(HitTestResultBehavior.Continue);
            }
            GeometryModel3D hitgeo = rayMeshResult.ModelHit as GeometryModel3D;

            if (!(hitgeo == planeOdd || hitgeo == planeEven))
            {
                return(HitTestResultBehavior.Continue);
            }

            //World.TargetPosition = new Vector(rayResult.PointHit.X, rayResult.PointHit.Z);

            var unit = new Unit {
                World = World.Model
            };

            unit.Position = new Vector(rayResult.PointHit.X, rayResult.PointHit.Z);;
            unit.Selected = false;
            unit.Type     = UnitsEditor.UnitType;
            unit.Behavior = BehaviortreesEditor.Current?.Model;

            World.Model.PendingActions.Add((world) => {
                world.Units.Add(unit);
            });

            return(HitTestResultBehavior.Stop);
        }
Beispiel #26
0
        /// <summary>
        /// 获取鼠标在场景中的3D坐标
        /// </summary>
        public HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;
                if (rayMeshResult != null)
                {
                    GeometryModel3D hitgeo   = rayMeshResult.ModelHit as GeometryModel3D;
                    MeshGeometry3D  hitmesh  = hitgeo.Geometry as MeshGeometry3D;
                    Point3D         p1       = hitmesh.Positions.ElementAt(rayMeshResult.VertexIndex1);
                    double          weight1  = rayMeshResult.VertexWeight1;
                    Point3D         p2       = hitmesh.Positions.ElementAt(rayMeshResult.VertexIndex2);
                    double          weight2  = rayMeshResult.VertexWeight2;
                    Point3D         p3       = hitmesh.Positions.ElementAt(rayMeshResult.VertexIndex3);
                    double          weight3  = rayMeshResult.VertexWeight3;
                    Point3D         prePoint = new Point3D(p1.X * weight1 + p2.X * weight2 + p3.X * weight3, p1.Y * weight1 + p2.Y * weight2 + p3.Y * weight3, p1.Z * weight1 + p2.Z * weight2 + p3.Z * weight3);
                    pMouse = new Point(prePoint.X, prePoint.Y);
                }
            }
            return(HitTestResultBehavior.Continue);
        }
Beispiel #27
0
        public HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            //MessageBox.Show(rawresult.ToString());
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;

                if (rayMeshResult != null)
                {
                    GeometryModel3D hitgeo = rayMeshResult.ModelHit as GeometryModel3D;
                    var             id     = (Guid)hitgeo.GetValue(File3dmProperties.IdKey.DependencyProperty);

                    lB_PickedObjectProps.ItemsSource = _file.Objects.FindId(id).GetObjectProperties();

                    //UpdateResultInfo(rayMeshResult);
                    //UpdateMaterial(hitgeo, (side1GeometryModel3D.Material as MaterialGroup));
                }
            }

            return(HitTestResultBehavior.Continue);
        }
        private HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                foreach (SubstationEntity s in substationEntities)
                {
                    if (s.Obj == rayResult.ModelHit)
                    {
                        MessageBox.Show("SubstationEntity\n\nId: " + s.Id + "\nName: " + s.Name, "System Element Info", MessageBoxButton.OK, MessageBoxImage.Information);
                        mouseDown = false;
                    }
                }

                foreach (NodeEntity s in nodeEntities)
                {
                    if (s.Obj == rayResult.ModelHit)
                    {
                        MessageBox.Show("NodeEntity\n\nId: " + s.Id + "\nName: " + s.Name, "System Element Info", MessageBoxButton.OK, MessageBoxImage.Information);
                        mouseDown = false;
                    }
                }

                foreach (SwitchEntity s in switchEntities)
                {
                    if (s.Obj == rayResult.ModelHit)
                    {
                        MessageBox.Show("SwitchEntity\n\nId: " + s.Id + "\nName: " + s.Name, "System Element Info", MessageBoxButton.OK, MessageBoxImage.Information);
                        mouseDown = false;
                    }
                }
            }


            return(HitTestResultBehavior.Stop);
        }
Beispiel #29
0
        private HitTestResultBehavior HitResultCallback(HitTestResult rawresult)
        {
            HitVisual3D = rawresult.VisualHit as Visual3D;
            if (HitVisual3D == null)
            {
                return(HitTestResultBehavior.Continue);
            }

            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult == null)
            {
                return(HitTestResultBehavior.Continue);
            }

            RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;

            if (rayMeshResult == null)
            {
                return(HitTestResultBehavior.Continue);
            }

            HitGeometry3D = rayMeshResult.ModelHit as GeometryModel3D;
            if (HitGeometry3D == null)
            {
                return(HitTestResultBehavior.Continue);
            }

            HitMesh3D = HitGeometry3D.Geometry as MeshGeometry3D;
            if (HitMesh3D == null)
            {
                return(HitTestResultBehavior.Continue);
            }

            HitPoint3D = GetHitPoint3DOnMeshGeometry(rayMeshResult, HitMesh3D);
            return(HitTestResultBehavior.Stop);
        }
Beispiel #30
0
        HTResult(HitTestResult rawresult)
        {
            RayHitTestResult rayResult = rawresult as RayHitTestResult;

            if (rayResult != null)
            {
                bool gasit = false;

                try
                {
                    for (int i = 1; i < Map.Children.Count; i++)
                    {
                        GeometryModel3D model = (GeometryModel3D)Map.Children[i];

                        if (model == rayResult.ModelHit)
                        {
                            hitGeo = (GeometryModel3D)rayResult.ModelHit;
                            gasit  = true;

                            string text = toolTips[model];
                            TooltipText.Visibility = Visibility.Visible;
                            TooltipText.Text       = text;
                        }
                    }
                } catch (Exception) { }

                if (!gasit)
                {
                    hitGeo = null;

                    TooltipText.Visibility = Visibility.Hidden;
                    TooltipText.Text       = "";
                }
            }

            return(HitTestResultBehavior.Stop);
        }