2012-05-01 3 views
0

내가 원하는 것은 사용자가 내 조이스틱의 빨간색 버튼을 클릭했는지 확인하는 것입니다. (목적을 위해 우리의 그림을 비공개로 유지하기 위해 실제 조이스틱 그래픽을 그립니다.) Our XAML 3D joystickWPF에서 XAML 3D 객체를 테스트하는 방법

이 조이스틱은 XAML 3D입니다.

빨간색 단추는 x : 이름이 "Geo_Btn_CSS_TAKE"인 GeometryModel3D 개체입니다. 조이스틱을 클릭하면 HitTest를 할 수 있습니다. 그는 GeometryModel3D 객체를 모두 제공하지만 x : Name에 액세스 할 수 없으므로 마녀 하나가 좋은 객체라는 것을 알 수 없습니다.

Visual tree of my object

그리고 이것은 내가 그러나 hitTest을하는 방법입니다

private void OnTouchMouseDown(EventArgs e) 
{ 
    Viewport3D viewport3D = WtoHitTest((Grid)Parent, e) as Viewport3D; // My own HitTest works well, I get my viewport3D 

    Point mouseposition = WtoHelper.GetPositionFromEvent(e, viewport3D); // Get the point if it's a mouse event or touch event 
    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); 

    VisualTreeHelper.HitTest(viewport3D, null, HTResult, pointparams); 
} 

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; 

      **// HERE I NEED TO KNOW WHAT IS MY GEOMETRYMODEL3D'S X:NAME** 
      // ANY IDEA??? 
     } 
    } 
    return HitTestResultBehavior.Continue; 
} 

내가 알고있는 그 밖의 무엇 :

  • 내 3D 오브젝트 내가
  • 에 결합 할 수있는 위치 (x, y)가없는
  • 나는 Viewport3D
  • 나는 X에 액세스 할 수 없습니다 비 - 3D 요소를 삽입 할 수 없습니다 이름을 3D 개체
  • 3D 개체 또는하지 FrameworkElement 또는 Visual의. 그들은 Media3D이다

나는 그것을했다, 나는 구현을 완료하기 위해 x : 이름을 알아야한다. 누군가가 팁이나 다른 방법을 가지고 있다면 알려줘.

당신에게

편집 감사 :이 내 3D 객체의 속성입니다 : 이 enter image description here

+0

'라이파람'은 어디에 사용됩니까? – AgentFire

답변

1

내가 그 생각할 수있는 한 가지 작동하고 친절한 XAML이에 자신의 연결된 속성을 정의하는 것입니다 GeometryModel3D. 사용자 지정 연결 속성을 만드는 방법은 here을 참조하십시오.

+0

3D 개체에 태그 속성이 없습니다. 내가 방금 추가 한 나의 제 3의 그림을 보아주세요 – mlemay

+0

나의 나쁜, 위에 편집했다. – Ani

+0

나는 그것을 생각하지 않았다, 고마워, AP는 잘 작동한다. – mlemay

0

나는 이것이 오래된 게시물 인 것을 알고 있지만, 검색 순위가 높고 WPF 3D를 배우기 때문에 비틀 거렸다. 문제를 해결할 두 번째 방법은 Helix Toolkit을 사용하는 것입니다. GetName() 및 GetName() 메서드를 사용하여 GeometryModel3D를 확장합니다. 그래서 당신이 뭔가를 호출 할 수 있습니다 후 레이 검사를 수행 할 때이 이름을 얻을 수 있습니다 :

RayMeshGeometry3DHitTestResult rayHit = hr as RayMeshGeometry3DHitTestResult; //hr is of type HitTestResult 
MessageBox.Show("Model found: " + rayHit.ModelHit.GetName()); 

은 물론이 믹스에 나선 툴킷을 추가하는 것을 의미하지만 지금까지 여러 가지 방법으로 가치가있다.