2010-11-27 2 views
1

J'essaye de faire pivoter une image dans un Viewport3D mais je ne peux pas voir à quel objet appliquer l'animation.Comment ajouter un BeginAnimation à un WPF Viewport3D?

Cela fonctionne dans le code

DoubleAnimation da = new DoubleAnimation(); 
da.From = 0; 
da.To = 100; 
da.Duration = new Duration(TimeSpan.FromSeconds(1)); 
Button1.BeginAnimation(Button.HeightProperty, da); 

et cela fonctionne aussi

RotateTransform3D myRotateTransform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), 30)); 
Model.Transform = myRotateTransform; 

Alors, pourquoi je ne peux pas le faire?

Rotation3DAnimation r3D = new Rotation3DAnimation(); 
r3D.From = new AxisAngleRotation3D(new Vector3D(1, 0, 0), 0); 
r3D.To = new AxisAngleRotation3D(new Vector3D(1, 0, 0), 45); 
r3D.Duration = new Duration(TimeSpan.FromSeconds(10)); 
Model.BeginAnimation(ModelVisual3D.TransformProperty, r3D, HandoffBehavior.SnapshotAndReplace); 

Je reçois une erreur sur la ligne Model.BeginAnimation. J'ai essayé un certain nombre d'objets à la place de ModelVisual3D mais j'ai chaque fois des erreurs différentes. Quel type d'objet dois-je utiliser?

Merci pour toute aide Richard

XAML

<ModelVisual3D x:Name="ModelContainer"> 
    <ModelVisual3D.Content> 
     <GeometryModel3D x:Name="Model" d:Bounds="-37.2388059701493,-10,0,74.4776119402985,20,0"> 
      <GeometryModel3D.Geometry> 
       <MeshGeometry3D Normals="0,0,1 ..." />      
      </GeometryModel3D.Geometry> 

      <GeometryModel3D.Material> 
       <DiffuseMaterial> 
        <DiffuseMaterial.Brush> 
         <ImageBrush ImageSource="pack://siteoforigin:,,,/Staff-4.tif" Stretch="Fill"/> 
        </DiffuseMaterial.Brush> 
       </DiffuseMaterial> 
      </GeometryModel3D.Material> 
     </GeometryModel3D> 
    </ModelVisual3D.Content> 

    <ModelVisual3D.Transform> 
     <Transform3DGroup> 
      <RotateTransform3D> 
       <RotateTransform3D.Rotation> 
        <AxisAngleRotation3D Axis="1,0,0" Angle="0"/> 
       </RotateTransform3D.Rotation> 
      </RotateTransform3D> 
     </Transform3DGroup> 
    </ModelVisual3D.Transform> 

</ModelVisual3D> 

<ModelVisual3D x:Name="AmbientContainer"> 
    <ModelVisual3D.Content> 
     <AmbientLight x:Name="Ambient" Color="Gray"/> 
    </ModelVisual3D.Content> 
</ModelVisual3D> 

<ModelVisual3D x:Name="DirectionalContainer"> 
    <ModelVisual3D.Content> 
     <DirectionalLight x:Name="Directional" Color="#FF7F7F7F" Direction="0,0,-1"> 
      <DirectionalLight.Transform> 
       <TranslateTransform3D OffsetZ="3" OffsetX="0" OffsetY="0"/> 
      </DirectionalLight.Transform> 
     </DirectionalLight> 
    </ModelVisual3D.Content> 
</ModelVisual3D> 

Répondre

1

La réponse est que vous ne pouvez pas utiliser le AxisAngleRotation3D dans une animation. Vous devez diviser c'est 2 composants de vecteur et d'angle et les animer indépendamment.

Questions connexes