2016-06-29 5 views
0

wpf 3d 오브젝트에 줌 기능을 구현하려고합니다. 그것은 내 객체에서 트리거 할 때 잘 동작합니다. 하지만 개체를 ​​포함하여 전체 공간에 대해이 기능을 수행하려고합니다. 어떻게하면 전체 창에 대해 확대/축소 기능을 구현할 수 있습니다. 따라서 마우스 휠을 창에서 드래그하면 내 개체가 확대되고 축소됩니다. ,Wpf3d 윈도우 확대/축소

private void Grid_MouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     TheCamera.Position = new Point3D((TheCamera.Position.X - e.Delta/360D), (TheCamera.Position.Y - e.Delta/360D), (TheCamera.Position.Z - e.Delta/360D)); 
    } 

여기 내 XAML 코드는,

`

<Viewport3D x:Name="MainViewport"> 
     <Viewport3D.Camera> 
      <PerspectiveCamera x:Name="TheCamera" Position="-40,40,40" LookDirection="40,-40,-40 " 
        UpDirection="0,0,1" /> 
     </Viewport3D.Camera> 
     <ModelVisual3D> 
      <ModelVisual3D.Content> 
       <Model3DGroup> 
        <DirectionalLight Color="White" Direction="-1,-1,-3" /> 
        <GeometryModel3D x:Name="mGeo"> 
         <GeometryModel3D.Geometry> 
          <MeshGeometry3D Positions="0,0,0 10,0,0 10,10,0 0,10,0 0,0,10 
        10,0,10 10,10,10 0,10,10" 
        TriangleIndices="0 1 3 1 2 3 0 4 3 4 7 3 4 6 7 4 5 6 
            0 4 1 1 4 5 1 2 6 6 5 1 2 3 7 7 6 2"/> 
         </GeometryModel3D.Geometry> 
         <GeometryModel3D.Material> 
          <DiffuseMaterial Brush="Red"/> 
         </GeometryModel3D.Material> 
        </GeometryModel3D> 
       </Model3DGroup> 
      </ModelVisual3D.Content> 
     </ModelVisual3D> 
    </Viewport3D> 

</Grid> 

`

+0

의 마우스 휠 이벤트에 이벤트를 후크 수 이벤트가 시작되지 않거나 확대/축소 동작이 예상 한 것과 다를 것이라고 말하고 있습니까? –

+0

확대/축소 동작이 예상과 다를 것이라고 말하고 있습니다. 마우스가 3d 객체 만 가리키고있는 동안 작동합니다. 마우스를 가리 키지 않고 확대/축소하려고합니다. 명백합니까 ? – Aarav

+0

윈도우의 예제 xaml을 게시 할 수 있습니까? –

답변

0

당신 그리드가 더 배경 브러시가 설정 없다 : 는 다음을 MouseWheel 이벤트에 대한 내 코드입니다 따라서 휠 이벤트는 적중 테스트 중에 감지되지 않기 때문에 실행되지 않습니다.

<Grid MouseWheel="Grid_MouseWheel" Background="#00000000"> 

는 위와 같은 배경으로 그리드를 설정하고 당신은

편집 작동하는 것을 발견한다 : 다른 방법으로 당신이 창 대신

<Window Title="MainWindow" Height="350" Width="525" MouseWheel="Grid_MouseWheel"> 
+0

감사합니다. 첫 번째 제안을 사용할 때 잘 작동합니다. – Aarav

+0

도움이되기를 기쁘게 생각합니다. 나중에 코드가 실행되고 있는지 확인하기 위해 중단 점을 지정하는 것이 좋습니다. 당신이 그 일을 완수했다면, 그 방법이 전혀 호출되지 않았 음을 알았을 것입니다. –

+0

예.하지만이 솔루션에 대해서는 결코 그렇게 생각하지 않았습니다. 나는 너의 요점을 다음에 기억할 것이다. 다시 한번 감사드립니다. – Aarav