Question HitTest in 3D

quddusaliquddus

Active member
Joined
Nov 20, 2007
Messages
25
Programming Experience
Beginner
Hi :). I am trying to modify the following code such that it continuously dispalys the distance between two ModelVisual3D's in the same Viewport while one of the 3D object is moving towards the other.

ANY help/tips etc ... is appreciated.

VB.NET:
Imports System
Imports System.IO
Imports System.Net
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Navigation

Imports System.Windows.Media.Media3D
Imports System.Windows.Markup
Imports System.Windows.Resources
Imports System.Timers

Partial Public Class Window1

    Dim Distance As Double

    Public Sub New()

        MyBase.New()

        Me.InitializeComponent()

        ' Insert code required on object creation below this point.

    End Sub

    Private Sub V_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles V.MouseDown

        Dim viewPort As Viewport3D = TryCast(sender, Viewport3D)

        Dim mousePosition As Point = e.GetPosition(viewPort)

        Dim result As HitTestResult = VisualTreeHelper.HitTest(viewPort, mousePosition)

        Dim extraCube As New ModelVisual3D()

        'MessageBox.Show(result.VisualHit.ToString)

        Dim rayResult As RayHitTestResult = TryCast(result, RayHitTestResult)
        Dim intIndice As Integer
        Dim rayMeshResult As RayMeshGeometry3DHitTestResult

        If rayResult IsNot Nothing Then

            rayMeshResult = TryCast(rayResult, RayMeshGeometry3DHitTestResult)

            If rayMeshResult IsNot Nothing Then

                extraCube = TryCast(rayMeshResult.VisualHit, ModelVisual3D)

                intIndice = V.Children.IndexOf(extraCube)

            End If

        End If

        'MessageBox.Show(intIndice)

        Dim Px As Double = rayResult.PointHit.X
        Dim Py As Double = rayResult.PointHit.Y
        Dim Pz As Double = rayResult.PointHit.Z

        Dim X As Double = DefaultGroup.Transform.Value.OffsetX
        Dim Y As Double = DefaultGroup.Transform.Value.OffsetY
        Dim Z As Double = DefaultGroup.Transform.Value.OffsetZ

        Dim TT3DVector = New Vector3D(X, Y, Z)
        Dim TT3D As New TranslateTransform3D(TT3DVector)

        Dim daX As New DoubleAnimation(extraCube.Transform.Value.OffsetX + Px / 2, New Duration(TimeSpan.FromSeconds(0.5 * rayResult.DistanceToRayOrigin)))
        TT3D.BeginAnimation(TranslateTransform3D.OffsetXProperty, daX)

        Dim daY As New DoubleAnimation(extraCube.Transform.Value.OffsetY + Py / 2, New Duration(TimeSpan.FromSeconds(0.5 * rayResult.DistanceToRayOrigin)))
        TT3D.BeginAnimation(TranslateTransform3D.OffsetYProperty, daY)

        Dim daZ As New DoubleAnimation(extraCube.Transform.Value.OffsetZ + Pz / 2, New Duration(TimeSpan.FromSeconds(0.5 * rayResult.DistanceToRayOrigin)))
        TT3D.BeginAnimation(TranslateTransform3D.OffsetZProperty, daZ)

        Dim tgroup As New Transform3DGroup()
        tgroup.Children.Add(TT3D)

        DefaultGroup.Transform = tgroup

    End Sub

End Class
 
Back
Top