l'image subit donc un transformgroup, contenant les classique scale, rotation et translation.
Dans le code c#, j'ai codé les données bindées comme ceci:
public double scaleX
{
get { return (double)GetValue(scaleXProperty); }
set { SetValue(scaleXProperty, value); }
}
public static readonly DependencyProperty scaleXProperty =
DependencyProperty.Register("scaleX", typeof(double), typeof(Building), new UIPropertyMetadata(1.0));
problème : dans mon code, quand je modifie mes attributs X, Y, ou angle, aucun problème, ça se répercute sur le visuel. MAIS ça ne marche pas pour le scale. Mon image reste desespérément à la même taille.
Deuxième question: j'utilise des events de manipulation sur ces controles, et je voudrais, à la fin de ma manip, récupérer leurs valeurs de position, l'angle, ainsi que les dimensions.
Sauf que dans tous les exemples que j'ai vu, tout le monde utilise une matrice pour coder les transformation de manipulation. ce qui donne un code comme ça
private void Manip_delta(object sender, ManipulationDeltaEventArgs e)
{
var element = e.OriginalSource as UIElement;
var transformation = element.RenderTransform
as MatrixTransform;
var matrix transformation null ? Matrix.Identity :
transformation.Matrix;
matrix.ScaleAt(e.DeltaManipulation.Scale.X,
e.DeltaManipulation.Scale.Y,
e.ManipulationOrigin.X,
e.ManipulationOrigin.Y);
matrix.RotateAt(e.DeltaManipulation.Rotation,
e.ManipulationOrigin.X,
e.ManipulationOrigin.Y);
matrix.Translate(e.DeltaManipulation.Translation.X,
e.DeltaManipulation.Translation.Y);
element.RenderTransform = new MatrixTransform(matrix);
e.Handled = true;
}
question2: à l'heure actuelle, dans mon event manip_completed, je récupère les transformations issues de la matrice "à la main". Mais n'y a t il pas une méthode plus directe? Suis-je obligé de passer par cette satanée matrice? (d'autant que ma méthode actuelle ne marche qu'à moitié, puisque la gestion du centre des transformation me pose quelque problèmes)
voilà, désolé d'avoir écrit un roman, mais tout ça me semble un peu obscur :)
Jmix90
Messages postés11Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention23 mars 2010 1 mars 2010 à 00:36
Hello,
Pour la première question, si le code que tu fournis est exactement celui que tu utilises, l'erreur est la suivante :
dans ton XAML tu bindes sur ScaleX (avec un S majuscule) et dans ton code tu déclare scaleX (avec un s minuscule)...
NobrainNobrain59
Messages postés2Date d'inscriptionvendredi 12 février 2010StatutMembreDernière intervention 1 mars 2010 1 mars 2010 à 01:25
rôôôh la honte, j'avais rien vu
Super Jmix, merci de ton aide
je vais de ce pas me cacher derrière un petit rocher
sinon, pour ma deuxième question, à priori, j'ai pas trouvé mieux, donc je suis resté sur la matrice. J'ai pas besoin d'un code haute performance, donc ça fera l'affaire.
Tiens, tant que je t'ai sous la main, j'ai une nouvelle question si tu veux bien (une question plus conceptuelle que concrète)
dans mon canvas principal, j'ajoute dynamiquement des disques, en les plaçant à la souris (enfin au doigt en l'occurrence)
Maintenant, je voudrais pouvoir déplacer mes disques à la main, pour ajuster leur position.
J'envisage donc de leur assigner un évènement touchmove, et de modifier leur position en fonction du mouvement detecté (un drag&drop en somme)
Est-ce que c'est cohérent de faire ça comme ça, ou il y a un système "tout fait" pour draguer mes contrôles sur mon canvas?
(j'ai vaguement entendu parler d'un contrôle thumb, mais j'ai pas bien saisi à quoi ça servait)
j'essaie de perdre ma vilaine habitude de réinventer la roue à chaque fois, et avec wpf, ça arrive souvent :)
Jmix90
Messages postés11Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention23 mars 2010 1 mars 2010 à 09:11
Hello,
Pour ma part j'utiliserai l'évent StylusMove en .Net 3.5 et ContactMove en .Net 4.0...
Mais sinon, cela se fait comme avec une souris, pas de choses toute faite.
Après, l'algo peut changer un peu si c'est du multitouch mais globalement c'est la même chose...
MrFoXx
Messages postés1Date d'inscriptionmercredi 27 juillet 2011StatutMembreDernière intervention27 juillet 2011 27 juil. 2011 à 15:51
Salut,
je bosse actuellement sur une appication multi-touch en WPF (je débute). J'ai cependant un problème, je souhaiterai pouvoir récupérer les informations relatives aux Canvas présents dans mon application et qui ont subi des translations, rotation et autres joies tactile :D .
Par "information" j'entends les valeurs des Margin left, top, right, bottom ainsi que width et height du canvas. J'utilise une méthode similaire à la Manip_delta de NobrainNobrain59 pour ce qui est du travail sur la matrice de mon canvas.
Les canvas crées sont rudimentaires et ne comprennent que la mise à true de la propriété IsManipulationEnabled.