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

wxWidgets Discussion :

Logiciel de dessin réalisé avec wxWidgets


Sujet :

wxWidgets

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Par défaut Logiciel de dessin réalisé avec wxWidgets
    Hello,

    Voila, j'aimerais simplement savoir si vous connaissiez un "paint" facon windows ou un whiteboard open source qui utiliserais WxWidgets ?

    meeeerci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    La seule chose que je connaisse est BitWise mais je ne crois pas que ce soit open source.
    Tu cherches quoi ? Un composant qui servirait de tableau blanc pour plusieurs applis wxWidgets réparties sur un réseau ?

  3. #3
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Par défaut
    salut,

    ouais domaage qune soit pas open source .

    Un composant qui servirait de tableau blanc pour plusieurs applis wxWidgets réparties sur un réseau ?
    En faite nan, je voulais juste voir comment il avait construit leur "paint" avec wxWIdgets.

    Car je suis en train de dev un ptit whiteboard tout simple en c++ avec wxWidgets que lorsque je clique gauche sur la souris ca me dessine des traits (d'epesseur differentes) tout en stockant les coordoonees dans une liste.. mais plus je dessine de traits plus ca dessine a tooooout lentement et ca rame..

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par bibi9 Voir le message
    Car je suis en train de dev un ptit whiteboard tout simple en c++ avec wxWidgets que lorsque je clique gauche sur la souris ca me dessine des traits (d'epesseur differentes) tout en stockant les coordoonees dans une liste.. mais plus je dessine de traits plus ca dessine a tooooout lentement et ca rame..
    Bah. A ce moment, essaie d'isoler un peu de code et de le poster ici. Peut-être qu'on pourra t'aider.
    Quelques pistes de ma boule de cristal : des GDI non relachés ? De la fuite mémoire ? Une liste à la mano mal construite ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Par défaut
    hello,

    voici comment je procede:

    dans mon onPaint (j utilse un double buffer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void MyCanvas::OnPaint(wxPaintEvent& event)
     
    {
    	//Prepare Context for Buffered Draw
    	wxPaintDC dcc(this);
    	wxBufferedDC dc(&dcc, c_size );
    	DrawAll(dc);
    }
    j ai event "OnMotion" qui execute du code quand la souris fait du dragging

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (event.Dragging())
     
    	{
     
                           // pour peindre avec un carre de differente taille
                           this->GeneratePointsAccordingToBrush(event.GetPosition(),10);
                           this->Refresh();
                   }

    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
    46
    47
    48
    49
     
    void MyCanvas::GeneratePointsAccordingToBrush (
        const wxPoint &centre, 
        unsigned int brushSize)
    {
     
     
            if (brushSize % 2 == 1) {
     
                unsigned int brushRadius = (brushSize - 1) / 2;
                for (int i = 0; i <= brushRadius; i++) {
     
                    for (int j = 0; j <= brushRadius; j++) {
     
                        if (i != 0 && j!= 0) {
                            mainPointList.push_back (wxPoint (centre.x + i, centre.y + j));
                            mainPointList.push_back (wxPoint (centre.x - i, centre.y - j));
                            mainPointList.push_back (wxPoint (centre.x + i, centre.y - j));
                            mainPointList.push_back (wxPoint (centre.x - i, centre.y + j));
     
                        } else if (j != 0) {
     
                            mainPointList.push_back (wxPoint (centre.x, centre.y + j));
                            mainPointList.push_back (wxPoint (centre.x, centre.y - j));
     
                        } else if (i != 0) {
     
                            mainPointList.push_back (wxPoint (centre.x + i, centre.y));
                            mainPointList.push_back (wxPoint (centre.x - i, centre.y));
                        }
                    }
                }
     
            } else {
                unsigned int offset = brushSize / 2 - 1;
                wxPoint lowerLeftCornerPoint = wxPoint (centre.x - offset, centre.y + offset);
     
                for (unsigned int i = 0; i < brushSize; i++) {
     
                    for (unsigned int j = 0; j < brushSize; j++) {
     
                        if (i != offset || j != offset) {
     
                            mainPointList.push_back (wxPoint (lowerLeftCornerPoint.x + i, lowerLeftCornerPoint.y - j));
                        }
                    }
                }
            }
    };
    Et la drawAll qui dessine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void MyCanvas::DrawAll(wxBufferedDC& bdc){
    bdc.Clear();
    PointList::iterator pointIt;
     
    for (pointIt = mainPointList.begin (); pointIt != mainPointList.end (); pointIt++) {
    wxPoint tempPoint = (*pointIt);
    	bdc.SetPen(*wxBLACK); 
    bdc.DrawPoint(tempPoint.x,tempPoint.y);
    }
    voici en gros comme je dessine, je met dans uen list tout le points que dessine et ensuite je boucle cette liste pour dessiner chaque points...

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Deux ou trois petites améliorations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void MyCanvas::DrawAll(wxBufferedDC& bdc){
       bdc.Clear();
       PointList::iterator pointIt;
     
       bdc.SetPen(*wxBLACK); // (1)
     
       for (
          pointIt = mainPointList.begin (); 
          pointIt != mainPointList.end (); 
          ++pointIt // (2)
       ) {
          bdc.DrawPoint(pointIt->x,(*pointIt).y); // (3)
       }
    }
    (1) : ça ne change pas dans la boucle. Donc pourquoi le faire à chaque itération ?
    (2) cf entrée de la F.A.Q.
    (3) Tu n'es pas obligé de créer un objet intermédiaire pour récupérer les valeurs. Un itérateur 'ressemble' à un pointeur. Tu le déréférences pour accéder aux membres. J'ai fais exprès de mettre les 2 écritures possibles.

    2 remarques :
    1/ Quelle est la taille de ton conteneur quand ça commence à ramer ?
    2/ Tu l'observes en debug ou en release ?

Discussions similaires

  1. Réponses: 50
    Dernier message: 26/04/2020, 21h44
  2. Réponses: 0
    Dernier message: 10/02/2011, 18h22
  3. Dessiner avec wxWidgets
    Par SuperPat dans le forum wxWidgets
    Réponses: 5
    Dernier message: 24/02/2009, 00h06
  4. Dessiner un graph avec wxwidget.
    Par EJekT4 dans le forum wxWidgets
    Réponses: 1
    Dernier message: 26/10/2006, 15h07
  5. dessiner avec wxWidgets
    Par [Hugo] dans le forum wxWidgets
    Réponses: 2
    Dernier message: 15/09/2006, 22h55

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