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); }
/// <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); }
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); }
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); }
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); }
/// <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); }
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); }
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); }
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); }
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); }
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); }
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); }
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(); }
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); }
//<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); }
/// <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); }
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); }
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); }
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); }