2011-07-26 109 views
1

如何限制平面投影到特定尺寸?例如,我有以下幾點:平面投影的約束尺寸

<Canvas Width="720" Height="540" x:Name="Root" Background="Red" > 
     <Line Width="200" Height="5" X1="0" X2="200" 
      Y1="0" Y2="0" Stroke="LimeGreen" StrokeThickness="10" 
      Canvas.Left="260" Canvas.Top="70" /> 
     <Rectangle Width="200" Height="400" Stroke="Blue" StrokeThickness="6" 
      Fill="LightBlue" Opacity="0.5" Canvas.Left="260" Canvas.Top="70"> 
      <Rectangle.Projection> 
       <PlaneProjection x:Name="box" /> 
      </Rectangle.Projection> 
     </Rectangle> 
     <Line Width="200" Height="10" X1="0" X2="200" 
      Y1="0" Y2="0" Stroke="LimeGreen" StrokeThickness="10" 
      Canvas.Left="260" Canvas.Top="464" /> 
    </Canvas> 

我想通過360度繞Y軸旋轉這一點,但永遠不希望投射到超出矩形的高度的範圍 - 在這種情況下,400點。

故事板只是爲了簡單起見,在測試中觸發。

<UserControl.Triggers> 
    <EventTrigger> 
     <BeginStoryboard> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetName="box" 
           Storyboard.TargetProperty="RotationY" 
           By="360" Duration="0:0:15" 
           RepeatBehavior="Forever" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</UserControl.Triggers> 
+0

@HiTech魔術師:好吧,我不確定我明白你的意思。我已經更新了上面的代碼,以綠色顯示上部和下部Bounderies。投影不應超出或低於綠線。 –

+0

是的,當我意識到你的意思時做了類似的事情。測試答案如下。 –

回答

0

這是不完美的,因爲它是線性插值和高度,旋轉角度的實際關係是輕微的正弦曲線,但接近你想要什麼。

它基本上在總時間的四分之一範圍內將Y縮放到0.88(並且是AutoReversed)。

可以簡化元素命名爲您做了與「盒子」,如果你喜歡(我用的混合,以作者/測試的故事板,它總是產生長期的元素名稱):

  <Storyboard> 
       <DoubleAnimation Storyboard.TargetName="box" 
          Storyboard.TargetProperty="RotationY" 
          By="360" Duration="0:0:15" 
          RepeatBehavior="Forever" /> 
       <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" 
        Storyboard.TargetName="rectangle" 
        Duration="0:0:3.75" To="0.88" 
        RepeatBehavior="Forever" 
        AutoReverse="True" > 
       </DoubleAnimation> 

      </Storyboard> 


      <Rectangle x:Name="rectangle" 
         Stroke="Blue" 
         StrokeThickness="6" 
         Fill="LightBlue" 
         Opacity="0.5" 
         RenderTransformOrigin="0.5,0.5"> 
       <Rectangle.RenderTransform> 
        <CompositeTransform/> 
       </Rectangle.RenderTransform> 
       <Rectangle.Projection> 
        <PlaneProjection x:Name="box" /> 
       </Rectangle.Projection> 
      </Rectangle> 
+0

謝謝。我希望有某種內置的方式可以使這更容易。我會等待看看是否有其他答案進來。 –

+0

@Otaku:行爲(超越界限)在設計上是因爲所有透視變換在Z平面上大約爲0。另一種方法是使用不同的Z原點對矩陣變換進行動畫處理。 –