|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre émérite
![]() Inscription : juillet 2008 Messages : 1 095 ![]() |
hello (excusez la vanne sur matrix
)bon voila je reccup une MatrixTransform avec les valeurs suivante M11 0.571584699453553 M12 0.0 M21 0.0 M22 0.571584699453553 OffsetX 184.0 OffsetY 118.71256830601092 avec un coef de zoom de 57 % donc tout vas bien puisque M11 et M22 donne le zoom si j'applique une rotation de -45° sur l'element j'ai alors M11 0.404171417006082 M12 -0.40417141700608195 M21 0.40417141700608195 M22 0.404171417006082 OffsetX 166.69226289657158 OffsetY 228.39794001211757 le M11 et M22 changent alors que normalement ca correspond au ceof de zoom je comprend pas trop les offsets sont bon mais pas le zoom et on a une inclinaison qui a changé j'aimerais savoir si on peut a partir de M11 et M12 (eventuellement M21 et M22) determiner l"angle de rotation et le coeficient de zoom correcte
__________________
IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse... ---------------------------------------------------- Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!! |
|
|
00
|
|
|
#2 | ||||||||||
|
Membre Expert
![]() mebarek Inscription : avril 2008 Messages : 1 043 ![]() |
bonjour ikeas....
Vu la definition meme des operations matricielles(mul,add) on ne peut determiner à partir de la valeur d'un element de la matrice resultat,les valeurs des elements des matrices ayant servi dans les operations.... Exemple d'operations de produits matriciels generes par des transforms successives illustrant la difficulte du probleme(valeurs resultats M11,M12,M12,M22 sont entre crochets): S denote un scale,R(theta) une rotation,Sk(tanX,tanY) un skew 1/S(sx,sx)*R(θ) = [sx*cosθ,sx*sinθ,-sx*sinθ,sx*cosθ] 2/S(sx,sx)*Sk(tanX,tanY) = [0,sx*tanθX,sx*tanθY,0] 3/S(sx,sx)*R(θ) *Sk(tanX,tanY)= [sx*sinθ*tanθY,sx*cosθ*tanθY,sx*cosθ*tanθX,-sx*sinθ*tanθX] Ensuite au vu de ton besoin (qui n'est pas tres precis à mon avis) : 1/dans le post sur la rotation de l'adorner c'est "faire pivoter" l'Adorner dans la passe de .....Disposition(pas de Rendu) . 2/dans ce post c'est filtrer des "transformations indesirables" sur l'Adorner...... mais pas l'AdornedElement dans la passe de .....Disposition. Le 1er exemple repond au souci du 1/ et illustre comment le general "zapata"( GeneralTransformGroup) peut ajouter des transforms supplementaires au LayoutTransform de l'Adorner (scale,rotation)... code behind.cs du CustAdornerA(simple Rectangle en TopLeft de l'AdorneElement): Code :
[code] <Window x:Class="WpfUserControlAdorner.WinCustAdornerA" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns Title="CustAdornerA" Height="300" Width="300" Loaded="Window_Loaded"> <DockPanel > <Slider Name="sliderScale" Orientation="Vertical" DockPanel.Dock="Left" Minimum="0.25" Maximum="1.75" Value="1"> </Slider> <Separator DockPanel.Dock="Left" HorizontalAlignment="Center" Width="10"/> <Slider Name="sliderRotation" Orientation="Vertical" DockPanel.Dock="Left" Minimum="-180" Maximum="180" Value="0"> </Slider> <Slider Orientation="Vertical" DockPanel.Dock="Right" Name="sliderSkew" Minimum="-180" Maximum="180" Value="0"> </Slider> <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"> <Border DockPanel.Dock="Left" x:Name="elementBase" Background="Transparent" Width="450" Height="400" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="DarkBlue" BorderThickness="1"> <Border.LayoutTransform> <TransformGroup x:Name="myTransformGroup"> <ScaleTransform ScaleX="{Binding Value, ElementName=sliderScale}" ScaleY="{Binding Value, ElementName=sliderScale}" /> <SkewTransform CenterX="0.5" CenterY="0.5" AngleX="{Binding Value, ElementName=sliderSkew}" AngleY="{Binding Value, ElementName=sliderSkew}"> </SkewTransform> <RotateTransform CenterX="0.5" CenterY="0.5" Angle="{Binding Value, ElementName=sliderRotation}" > </RotateTransform> <TranslateTransform /> </TransformGroup> </Border.LayoutTransform> <Canvas x:Name="MyCanvas" Background="White" ClipToBounds="True"> <Ellipse Canvas.Left="100" Canvas.Top="100" Width="100" Height="50" Fill="Aquamarine"> </Ellipse> <Button Canvas.Left="150" Canvas.Top="200" Width="100" Content="MyButton"> </Button > </Canvas> </Border> </ScrollViewer> </DockPanel> </Window> [CODE] code .cs du winform: Code :
Ensuite on extrait chaque transform ,on l'inverse et on "refile" au layer en lieu et place un autre GeneralTransform modifie... code behind .cs du CustAdornerB : Code :
Code :
Code :
Il n'est pas necessaire d'ecrirce du code en plus dans measureoverride ou arrangeoverride .... bon code............. |
||||||||||
|
|
00
|
|
|
#3 | ||||||||||
|
Membre Expert
![]() mebarek Inscription : avril 2008 Messages : 1 043 ![]() |
bonjour ikeas....
Vu la definition meme des operations matricielles(mul,add) on ne peut determiner à partir de la valeur d'un element de la matrice resultat,les valeurs des elements des matrices ayant servi dans les operations.... Exemple d'operations de produits matriciels generes par des transforms successives illustrant la difficulte du probleme(valeurs resultats M11,M12,M12,M22 sont entre crochets): S denote un scale,R(theta) une rotation,Sk(tanX,tanY) un skew 1/S(sx,sx)*R(θ) = [sx*cosθ,sx*sinθ,-sx*sinθ,sx*cosθ] 2/S(sx,sx)*Sk(tanX,tanY) = [0,sx*tanθX,sx*tanθY,0] 3/S(sx,sx)*R(θ) *Sk(tanX,tanY)= [sx*sinθ*tanθY,sx*cosθ*tanθY,sx*cosθ*tanθX,-sx*sinθ*tanθX] Ensuite au vu de ton besoin (qui n'est pas tres precis à mon avis) : 1/dans le post sur la rotation de l'adorner c'est "faire pivoter" l'Adorner dans la passe de .....Disposition(pas de Rendu) . 2/dans ce post c'est filtrer des "transformations indesirables" sur l'Adorner...... mais pas l'AdornedElement dans la passe de .....Disposition. Le 1er exemple repond au souci du 1/ et illustre comment le general "zapata"( GeneralTransformGroup) peut ajouter des transforms supplementaires au LayoutTransform de l'Adorner (scale,rotation)... code behind.cs du CustAdornerA(simple Rectangle en TopLeft de l'AdorneElement): Code :
[code] <Window x:Class="WpfUserControlAdorner.WinCustAdornerA" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns Title="CustAdornerA" Height="300" Width="300" Loaded="Window_Loaded"> <DockPanel > <Slider Name="sliderScale" Orientation="Vertical" DockPanel.Dock="Left" Minimum="0.25" Maximum="1.75" Value="1"> </Slider> <Separator DockPanel.Dock="Left" HorizontalAlignment="Center" Width="10"/> <Slider Name="sliderRotation" Orientation="Vertical" DockPanel.Dock="Left" Minimum="-180" Maximum="180" Value="0"> </Slider> <Slider Orientation="Vertical" DockPanel.Dock="Right" Name="sliderSkew" Minimum="-180" Maximum="180" Value="0"> </Slider> <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" VerticalContentAlignment="Top" HorizontalContentAlignment="Left"> <Border DockPanel.Dock="Left" x:Name="elementBase" Background="Transparent" Width="450" Height="400" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="DarkBlue" BorderThickness="1"> <Border.LayoutTransform> <TransformGroup x:Name="myTransformGroup"> <ScaleTransform ScaleX="{Binding Value, ElementName=sliderScale}" ScaleY="{Binding Value, ElementName=sliderScale}" /> <SkewTransform CenterX="0.5" CenterY="0.5" AngleX="{Binding Value, ElementName=sliderSkew}" AngleY="{Binding Value, ElementName=sliderSkew}"> </SkewTransform> <RotateTransform CenterX="0.5" CenterY="0.5" Angle="{Binding Value, ElementName=sliderRotation}" > </RotateTransform> <TranslateTransform /> </TransformGroup> </Border.LayoutTransform> <Canvas x:Name="MyCanvas" Background="White" ClipToBounds="True"> <Ellipse Canvas.Left="100" Canvas.Top="100" Width="100" Height="50" Fill="Aquamarine"> </Ellipse> <Button Canvas.Left="150" Canvas.Top="200" Width="100" Content="MyButton"> </Button > </Canvas> </Border> </ScrollViewer> </DockPanel> </Window> [CODE] code .cs du winform: Code :
Ensuite on extrait chaque transform ,on l'inverse et on "refile" au layer en lieu et place un autre GeneralTransform modifie... code behind .cs du CustAdornerB : Code :
Code :
Code :
Il n'est pas necessaire d'ecrirce du code en plus dans measureoverride ou arrangeoverride .... bon code............. |
||||||||||
|
|
00
|
|
|
#4 | ||
|
Membre émérite
![]() Inscription : juillet 2008 Messages : 1 095 ![]() |
en fait j'ai trouvé bcp plus simple pour evaluer les bounds d'un objet en rotation
Code :
mais merci quand meme
__________________
IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse... ---------------------------------------------------- Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!! |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com