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

2D Java Discussion :

Dessiner à l'envers ?


Sujet :

2D Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut Dessiner à l'envers ?
    Bonjour, je suis en train de faire un mini Paint en java et j'arrive a dessiner des figures en temps réels mais seulement en déplaçant la souris vers le bas et la droite....

    Je voudrais maintenant desiner une fiigure dans l'autre sens (cad vers le haut et la gauche...) j'aimerais savoir si c'est possible et coment faire ?

    J'ai essayé de mettre des "-" à mes largeur et longueur de figure mais ca me desine la figure vers le bas et la droite seulement si je déplace la souris vers le haut et la gauche...

    Bref merci pour votre aide

  2. #2
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Un peu de code serait le bienvenu

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par remika
    Un peu de code serait le bienvenu
    oui oui tout de suite désolé

    je met ca dans mon mousedragged après avoir instancier ma Collection dans le mousePressed() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monDessin.getCollection().get(0).setDimension( (e.getX()-posXdeb) , (e.getY()-posYdeb) );
    Là je modifier juste la largeur et et la longueur grace a une fonction que j'ai crée
    posXdeb et posYdeb correspond à l'endroit ou je clique.
    Ca me permet de dessiner en temps réel

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    tu peux dessiner uniquement avec des valeurs positives, tu l'as remarqué.

    ce que tu dois faire c'est une condition :

    le point de depart de ta figure doit etre le point le plus en haut a gauche.

    si ta souris (au moment mousedragged) se trouve au dessus du point de depart(au moment mousePressed) tu dois dessinner a partir du point ou est la souris et mettre en taille la valeur absolue entre les deux.


    J'ai deja fait ce genre de travail :
    voila un logiciel complet qui traite ce genre de cas "ClubTypon", le source est avec le logiciel, tu peux y puisser de l'inspiration (si tu arrives a te depatouiller du code).
    http://jsorel.developpez.com/
    La page web date d'aujourd'hui , je fournis les sources pour 4 logiciels. (dont 2 de "dessin") j'espere que ca t'aidera.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Pas mal du tout tes petits progs, t plutot douée!!

    Sinon, je pense avoir saisie, en faite, il faut bouger la position de départ au point de la souris, et faire en sorte que le coin qui bouge pas correspond aux valeurs de la longueur et de la largeur,

    J'ai encore du mal à stabiliser mon dessin (car il remonte tout seul) maus y'a déjà des bribes de dessins à l'envers...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Bon c bon pour les rectangles et les éllipses, maintenant je galère comme pas possible pour les carrés vers le heut et gauche seulement !!!

    je fais ca pour la position :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (e.getX()<posXdeb&&e.getY()<posYdeb) 
    getDes().setPosition(e.getX(),e.getY());
         else if (e.getX()<posXdeb&&e.getY()>posYdeb) 
         getDes().setPosition(e.getX(),posYdeb);
    	    else if(e.getX()>posXdeb&&e.getY()<posYdeb) 
                getDes().setPosition(posXdeb,e.getY());
    		          else getDes().setPosition(posXdeb, posYdeb);

    et pour les longueur et largeur si je fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getDes().setDimension( Math.abs(e.getX()-posXdeb) ,  Math.abs(e.getX()-posXdeb) );
    le carré se déplace sur l'axe des ordonnée


    et si je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getDes().setDimension( Math.abs(e.getY()-posYdeb) ,  Math.abs(e.getY()-posYdeb) );
    le carré se déplace sur l'axe des abscisses


    C'est la partie en rouge qui coince (enfin à mon avis)

    Bref qu'est ce que je dois rajouter à mon code pour créer le carré vers le haut et la gauche ! (le reste marche).

  7. #7
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    simplificationons(je fais expres) tout ca deja :

    CA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (e.getX()<posXdeb&&e.getY()<posYdeb) 
    getDes().setPosition(e.getX(),e.getY());
         else if (e.getX()<posXdeb&&e.getY()>posYdeb) 
         getDes().setPosition(e.getX(),posYdeb);
    	    else if(e.getX()>posXdeb&&e.getY()<posYdeb) 
                getDes().setPosition(posXdeb,e.getY());
    		          else getDes().setPosition(posXdeb, posYdeb);
    tu admet que c'est pas tres digeste.

    On va faire pareil mais plus lisible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    getDes().setPosition( 
            ( e.getX()<posXdeb ) ? e.getX() : posXdeb ,  
            ( e.getY()<posYdeb ) ? e.getY() : posYdeb		
            );
    c'est pas un peu mieux?

    quand a tes carrées, ca me parait logique qu'ils prennent comme côté (j'entend pas là dimension) soit la valeur en abscisse soit en ordonné. ou est le problème?

  8. #8
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Je crois je viens de comprendre.

    tu cherche a ce que le carré quetu dessine soit contenu dans le rectangle que fait le e.getX() e.getY() et le point de depart?
    c'est bien ca?

    si c'est ca, il suffit de recuperer la plus petite valeur entre les deux valeurs absolues que tu calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double cx = Math.abs(e.getX()-posXdeb);
    double cy = Math.abs(e.getY()-posYdeb);
    double c = ( cx<cy ) ? cx : cy ;
     
    getDes().setDimension( c , c );

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Bonjour, déjà merci pour la simplification, c'est vrai que c'est beaucoup plus clair comme ça (je ne connais pas encore très bien cette forme de if même si elle est très simple)

    Ensuite, pour ta solution, ce n'est encore ça... LE carré continue à se déplacer depuis le même point de départ, et ce, cette fois ci dans tous les sens (sauf vers le bas et la droite)

    petites images d'illustrations :





    ici je monte le carré vers le haut et la gauche, le point de clic du début est le même !!! et pourtant, le carré s'est déplacer sur l'axe des abcisses vers la gauche...

    Bref, ce n'est toujours pas la solution :'(

  10. #10
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Bon aller je te consacre un quart d'heure, c'est bien parceque j'aime ce genre de case tete

    (je reprends du code qui vient du projet CLubTypon classe : jstyp.prog.Dessin (dans le fichier jstyp.prog.Typon )
    alors :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public void mousePressed (MouseEvent m){	
     
    		val.mouseBeginX = m.getX();
    		val.mouseBeginY = m.getY();
    		val.mouseEndX = m.getX();
    		val.mouseEndY = m.getY();
    ....
     
    public void mouseDragged (MouseEvent m){
     
    		val.mouseEndX = m.getX();
    		val.mouseEndY = m.getY();
    ....
     
    public void paint(Graphics G){
    /*utilise  PaintComponent ou je vais me faire incendier pour avoir donné un mauvaise exemple*/
     
    Graphics2D g = (Graphics2D)G;
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    /* avec antialiasing c'est plus jolie */
     
    int x1,x2,y1,y2;
    if( val.mouseBeginX<=val.mouseEndX ){ 
        x1 = val.mouseBeginX; 
       x2 = val.mouseEndX; }
    else{ 
        x2 = val.mouseBeginX; 
        x1 = val.mouseEndX;}
    if( val.mouseBeginY<=val.mouseEndY ){
        y1 = val.mouseBeginY; 
        y2 = val.mouseEndY; }
    else{ 
        y2 = val.mouseBeginY; 
        y1 = val.mouseEndY;}
     
    g.drawRect( x1, y1, x2-x1, y2-y1);
     
    public void mouseReleased (MouseEvent m){
     
    /* la tu créé ton objet graphique avec  
    val.mouseBeginX
    val.mouseBeginY
    val.mouseEndX
    val.mouseEndY*/
    Et c'est SEULEMENT au moment ou la personne lache le bouton de la souris que tu créé ton objet.
    A mon avis tu devais le créer au moment du click et redimensionner la figure par la suite, ce qui doit creer de petits problemes.

    pfiuu, j'espere que ca va etre bon ce coup ci

Discussions similaires

  1. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  2. [ALGO] dessiner un triangle dans le bon sens
    Par lefait dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 05/02/2005, 14h38
  3. moteur de particules :Dessiner un point
    Par houssa dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/06/2003, 22h13
  4. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

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