2016-06-29 17 views
0

Ich versuche, Zoom-Funktionalität zu meinem wpf 3D-Objekt zu implementieren. Es funktioniert gut, wenn ich es von meinem Objekt aus trigge. Aber ich möchte diese Funktionalität für meinen gesamten Raum einschließlich des Objekts tun. Wie kann ich diese Zoomfunktion für das gesamte Fenster implementieren? Wenn ich mit dem Mausrad von einem beliebigen Fensterfenster aus wechsle, wird mein Objekt vergrößert und verkleinert. Hier ist mein Code für Mousewheel-Ereignis:Wpf3d Zoomen für Fenster

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

Hier ist mein XAML-Code,

`

<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

Fenster Haken Sagen Sie, dass das Ereignis nicht ausgelöst wird oder sagen Sie, dass das Zoom-Verhalten nicht Ihren Erwartungen entspricht? –

+0

Ich sage Zoom-Verhalten ist nicht mein erwartet. Es funktioniert, während meine Maus nur auf das 3D-Objekt zeigt. Ich möchte zoomen, ohne die Maus zu zeigen. Ist das klar ? – Aarav

+0

Könnten Sie ein Beispiel für xaml Ihres Fensters posten? –

Antwort

0

Sie Raster auf es keinen Hintergrund Pinsel festgelegt hat, Daher wird das Rad-Ereignis nicht ausgelöst, da es während des Treffertests nicht erkannt wird.

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

Stellen Sie Ihr Gitter mit einem Hintergrund wie die oben und Sie sollten feststellen, dass es

EDIT funktioniert: Alternativ können Sie das Ereignis an dem Mousewheel-Ereignisse der anstelle

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

Danke. Es funktioniert gut, wenn ich Ihren ersten Vorschlag verwende. – Aarav

+0

Ich bin froh, Ihnen helfen zu können. In Zukunft kann es praktisch sein, einen Haltepunkt anzubringen, um sicherzustellen, dass der Code läuft. Hätten Sie das getan, hätten Sie gesehen, dass die Methode gar nicht aufgerufen wurde –

+0

Ja, aber für diese Lösung habe ich nie so gedacht. Ich werde mich an deinen nächsten Punkt erinnern. Danke noch einmal. – Aarav