IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

Création Zone de Dessin 2D


Sujet :

SWT/JFace Java

  1. #21
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Ah oui effectivement je m'étais tromper d'import. Cela marche, mais cela clignote tout le temps quand je bouge ma souris sur le canvas, même quand je ne fait pas de trait, cela est assez embêtant au niveau de la lisibilité. J'ai l'impression qu'il rentre tout le temps dans le mouseMove et donc il redraw() tout le temps, à chaque moindre mouvement de la souris. Je pense que l'on pourrait se passer de redraw() dans la fonction mouseMove et ne le laisser que dans MouseUp() non ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  2. #22
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, modifie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @Override
    		public void mouseUp(MouseEvent e) {
    			if ( currentDrawable !=null ) {
    				drawables.add(currentDrawable);
    				currentDrawable=null;
    				redraw();
    			}
    		}
     
    		@Override
    		public void mouseMove(MouseEvent e) { 
    			if ( currentDrawable instanceof LineDrawable ) {
    				LineDrawable lineDrawable = (LineDrawable) currentDrawable;
    				Point point = inverseTransform(e.x, e.y);
    				lineDrawable.setPoint2(point.x, point.y); 
    				redraw();
    			} 
    		}
    Par contre, ça n'empêchera pas le clignotement pendant le dessin d'une ligne : pour l'éviter, il faut utiliser du double-buffering (voir ma classe de démo).

    Au final, tu pourras optimiser le redessin pour limiter ce genre d'effet : c'est plus compliqué, mais tu peux utiliser redraw(int x, int y, int width, int height, boolean all); pour ne redessiner qu'une partie du canvas (dont il faut calculer les bounds).


    Citation Envoyé par maelstrom Voir le message
    Je pense que l'on pourrait se passer de redraw() dans la fonction mouseMove et ne le laisser que dans MouseUp() non ?
    Si j'ai fait ça, c'est pour voir la ligne se dessiner au fur et à mesure qu'on bouge la souris : ainsi on peut ajuster de visu, voir ce que donnera la ligne au final, et pas seulement imaginer au juger en fonction du point d'arrivée.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #23
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Au final, tu pourras optimiser le redessin pour limiter ce genre d'effet : c'est plus compliqué, mais tu peux utiliser redraw(int x, int y, int width, int height, boolean all); pour ne redessiner qu'une partie du canvas (dont il faut calculer les bounds).
    Je pense que j'essaierais de gérer cela plus tard pour l'instant je vais me focaliser sur l'essentiel.

    Il me reste deux ou trois petits bugs. Si l'on zoom beaucoup lorsque je trace un trait on peut remarquer que celui-ci est en décalé avec ma souris, il ne la suit pas exactement.

    Aurais-tu une idée d'où pourrait venir le problème ?

    Ensuite, j'ai mis mon canvas dans un ScrolledComposite de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ScrolledComposite scrolledComposite = new ScrolledComposite(tabFolder, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    tbtmDesign.setControl(scrolledComposite);
    scrolledComposite.setExpandHorizontal(true);
    scrolledComposite.setExpandVertical(true);
     
    MyCanvas canvas = new MyCanvas(scrolledComposite, SWT.NONE);
    scrolledComposite.setContent(canvas);
    Mais je n'ai aucune idée pour gérer sa taille en fonction du zoom, en fait je ne sais même pas si c'est bien comme cela qu'il faut faire pour commencer ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si on zoom beaucoup, on se heurte à des problèmes d'approximation des calculs : comme toutes les coordonnées sont en int. Passe tout en double, et ça ira mieux (par contre, il faudra caster pour dessiner, et éventuellement gérer l'intervalle de valeurs). Mais tu auras toujours une limite de niveau de zoom.
    Pour le Point, tu as la classe PrecisionPoint.

    Pour le scrolledcomposite, il va falloir que tu soit capable de calculer la taille du canvas (la bounding box) : chaque fois que tu ajouteras un élément, il faudra recalculer la bounding box en coordonnées standard,, pour la transformer pour avoir la bounding box en pixels et ajuster le ScrollComposite.

    (Là, je repense à ce que j'ai dit au sujet d'utiliser une bibliothèque : à force de rajouter des fonctions, tu vas finir par réinventer la roue).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #25
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Alors, une fois que j'aurais réglé l'histoire du scrolledComposite, du zoom et de la sélection des Drawable, il ne me restera plus qu'un truc à gérer ce sera qu'au moment de tracer une ligne, s'il n'y en a pas d'autres dans le canvas il peut la créer où il veut (je crée les points aux extrémités automatiquement et ça je le gère déjà), et s'il existe déjà au moins une ligne on est obligé de repartir d'un des points des lignes déjà existantes (afin de créer des réseaux, on ne veut pas de ligne seule qui se balade). Et là ça sera tout. Alors, à ton avis est-ce que tout cela serait plus facile à gérer avec une bibliothèque ou non ? Car, là j'ai déjà bien avancé dans un sens donc je ne voudrais pas me retrouver à changer de solution plus loin. C'est vrai que j'ai un peu l'impression de réinventer la roue, mais ai-je tellement le choix ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  6. #26
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En te lisant, j'ai l'impression que tu essayes de faire un dessin de graphe.

    Citation Envoyé par maelstrom Voir le message
    C'est vrai que j'ai un peu l'impression de réinventer la roue, mais ai-je tellement le choix ?
    Oui, je vois pas pourquoi tu n'aurais pas le choix... je t'ai dis que j'utilisais moi-même un bibliothèque AWT sous SWT.
    Il existe d'ailleurs des bibliothèques spécialisés dans le dessin de graphes, comme Jung par exemple, que j'utilise également sous SWT.

    Nom : CaptureJung.PNG
Affichages : 152
Taille : 27,2 Ko
    ça ressemble un peu quand même à ce que tu cherches à faire, non ? (y'a le zoom, le dessin interactif, tout ça, avec les exemples de code sur le site)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #27
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Pas tout à fait, voilà plus à quoi sa ressemblerais (je te montre avec deux de mes maquettes :

    Pièce jointe 174264 Pièce jointe 174262

    Et voilà à quoi cela ressemble actuellement :

    Pièce jointe 174265

    Donc on se rapproche petit à petit, les lignes représente des distances et les images des éléments poser à certains endroits sur ces distances. (Sachant que les images que j'ai mis sont juste des tests, mais ce seront des icônes dans ce style).
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  8. #28
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ouais bon les images ne sont pas sur les sommets mais sur les arcs. Jung gère ça aussi.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #29
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Après avoir consulter la doc et avoir regarder avec attention deux tuto (https://www.vainolo.com/2011/02/14/l...aph-framework/ et http://www.grotto-networking.com/JUN...2-Tutorial.pdf).

    J'ai trouvé cela super complexe à première vue (après c'est peut être une idée que je me fais) et aussi c'est du swing (awt) et j'aimerais, maitenant, si possible rester en swt autant que possible.

    EDIT : Après plusieurs autres recherches et relectures de tes anciens messages, je trouve cela plus qu’intéressant (comme quoi ), je pense donc que je vais partir là-dessus donc on efface tout et on recommence depuis le début. J'ai vu qu'il y avait une version spécial pour inclure cette bibliothèque avec SWT http://jung.sourceforge.net/faq.html#specific (question 12)
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. création zone de texte
    Par yousron dans le forum Access
    Réponses: 1
    Dernier message: 05/02/2007, 11h47
  2. Problème d'affichage dans une zone de "dessin"
    Par jason69 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 28/08/2006, 17h12
  3. Réponses: 1
    Dernier message: 06/06/2006, 18h52
  4. [débutant] Une zone de dessin et des boutons
    Par mavina dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/02/2006, 13h51
  5. [MFC] zone de dessin
    Par meli0207 dans le forum MFC
    Réponses: 3
    Dernier message: 04/07/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo