none
"Simuler" un zoom sur un canvas RRS feed

  • Question

  • Bonjour tout le monde,

    Je suis sur un prototype qui ouvre un .XAML présent sur un serveur. Ce .XAML est un fichier CAD (DWG, DXF...) converti.

    Je dois réaliser un zoom via un slider (ou molette de souris) sur le caneva. Le problème c'est que lors de l'affichage de mon .XAML je me rends compte que les traits (dans le cas présent des polylines) sont plus épais que dans la version d'origine (ouvert via AutoCad entre autre), en soit ce n'est pas trop génant même si cela m'intrigue. J'ai eu beau chercher je ne vois pas pourquoi il sont plus épais... enfin bref cela n'est pas spécialement le soucis (mais bon si quelqu'un à une idée je prends tout de même :p).

    Mon problème est que lorsque je zoom mes polylines grossisses, vous me direz c'est normal, sauf que sous les solutions comme Autocad lorsque je zoom le trait conserve toujours là même épaisseur à l'écran et plus je zoom et plus les polylines s'éloignent les uns des autres (c'est du moins l'effet que cela me donne). Je cherche donc à réaliser un effet similaire pour ne pas perdre en détail comme c'est le cas actuellement. Le fait nottament d'avoir des traits plus épais rend moins visible le texte présent.

    Mon zoom fonctionne comme cela actuellement :

    ScaleTransform st = new ScaleTransform();
    
    st.ScaleX = slider.Value;
    st.ScaleY = slider.Value;
    
    
    leCanevas.RenderTransform = st;
    
    //6000 et 8000 étant un taille fixe que je définis au chargement du XAML pour mes tests.
    leCanevas.Height = 6000 * slider.Value;
    leCanevas.Width = 8000 * slider.Value;

    Je pense que ce que je souhaite faire nécessite un nouveau calcul des points de coordonnées des polylines mais je n'en suis pas sur, cela étant ma première expérience dans le domaine et n'ayant aucune connaissance sur le fonctionnement des matrices qui compose le polyline.

    Je vous remercie d'avance pour votre aide !

    mercredi 25 juillet 2012 09:37

Réponses

  • En fait j'ai résolu mon problème, il suffisait juste de diviser le Thickness de chaque élément par le niveau de zoom...

    foreach (UIElement obj in leCanevas.Children)
    {
        try
        {
           Polyline objs = obj as Polyline;
           objs.StrokeThickness = 1 / st.ScaleX;
           liste.Add(objs);
        }
        catch(Exception){}
    }

    • Marqué comme réponse Sebastien.F jeudi 26 juillet 2012 12:56
    jeudi 26 juillet 2012 12:56