Hello,
Voila, j'aimerais simplement savoir si vous connaissiez un "paint" facon windows ou un whiteboard open source qui utiliserais WxWidgets ?
meeeerci![]()
Hello,
Voila, j'aimerais simplement savoir si vous connaissiez un "paint" facon windows ou un whiteboard open source qui utiliserais WxWidgets ?
meeeerci![]()
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 ?
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
salut,
ouais domaage qune soit pas open source.
En faite nan, je voulais juste voir comment il avait construit leur "paint" avec wxWIdgets.Un composant qui servirait de tableau blanc pour plusieurs applis wxWidgets réparties sur un réseau ?
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..
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
hello,
voici comment je procede:
dans mon onPaint (j utilse un double buffer)
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 void MyCanvas::OnPaint(wxPaintEvent& event) { //Prepare Context for Buffered Draw wxPaintDC dcc(this); wxBufferedDC dc(&dcc, c_size ); DrawAll(dc); }
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(); }
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
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 ¢re, 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)); } } } } };
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...
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); }
Deux ou trois petites améliorations :
(1) : ça ne change pas dans la boucle. Donc pourquoi le faire à chaque itération ?
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) } }
(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 ?
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Partager