Gambas France BETA


Pas de compte ? Incription

2D et 3D

Ce sujet est résolu.

12
AuteurMessages
linuxos#16 Posté le 28/3/2024 à 00:39:05
Un peu de sel, de poivre et la crevette sera... Spheris,

Je vais essayer de faire cours pour te répondre.

1- Solution par copie brute

Copier la Classe Graph2D.class dans le nouveau projet + Projet/control/graph2d.png

Ainsi, tu verras apparaitre dans la liste des Widgets graphique l'icône de Graph2d.

2 - Solution du Package

Configurer le Projet Graph2d en tant que 'Composant' dans le panneau de Propriété -> Type: Composant

Créer le package DEB/RPM et l'installer comme n'importe quel package

Il est imperatif d'avoir une version de Gambas installé par packages pour cette solution, car lors de l'installation du nouveau Package Graph2D, il faudra resoudre les dépendances a Gambas intégrées dans le package.
Donc cette solution ne fonctionnera pas si Gambas a été compilé et installé à partir des sources.

Une fois le package Graph2D installé, le nouveau composant apparaitra normalement a la fin de la liste de composants dans l'IDE

3 - Solution manuelle (pas jolie) mais qui fonctionne

Si l'on part de fait que le package Graph2D, créer en tant que Composant, a été effectué comme décrit a la Solution 2, il est possible d'extraire les fichiers contenus dans le package afin de le copier manuellement dans votre distribution.

Ce n'est pas jolie, car il faut extraire et copier les fichiers dans /usr/share/gambas3 de ta distribution, en 'root', car pas de droit d'écriture pour un utilisateur normal.

Ex: dans mon cas j'ai créé le package 'gambas3-oliviercruilles-graph2d-0.1.1-1.fdr.noarch.rpm"
Je me sers de 'mc' (MidnightCommander - Gestionnaire de ficher en console) pour ouvrir simplement le package, car MidnightCommander reconnait automatiquement un package et le décompacte à la volée.



Il suffit d'ouvrir, dans le package le fichier 'CONTENS.cpio', et de copier les fichiers qu'il contient sur ta machine, dans les memes répertoires que ceux utilisés dans le package.

Au final, cette opération aura le même résultat, manuellement, que lors de l'installation du package, mais sans les dépendances aux packages Gambas.


J'ai ouvert un bugtracker pour avoir la possiblilité de créer les dis fichiers par l'IDE et de les placer dans le HOMEDIR de l'utilisation, ce qui semble correcte mais Benoit n'a toujours pas répondu a ce sujet.

Voila, j'espere ne pas avaoir été confus.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
spheris#17 Posté le 29/3/2024 à 10:18:16
Merci pour ces infos.
La solution 1 me parait la plus simple et la plus viable à utiliser.
;-)
jeanyvon#18 Posté le 2/4/2024 à 19:11:33
Gambas? Ma! Et gustobonsoir!
voilà deux jours que je m'amuse avec Graph2D et je n'arrive pas à trouver le code pour effacer le graphique déjà tracé. Le composant se contente de serrer les barres des graphiques et c'est tout!
Vieillir? On peut retarder mais pas y échapper!
linuxos#19 Posté le 3/4/2024 à 01:27:15
Un peu de sel, de poivre et la crevette sera... jeanyvon,

C'est ici: $drw.Refresh() => pour forcer de redessiner l'interieur du DrawingArea

En fait, comme c'est un objet DrawingArea, le fait de forcer de redessiner, cela efface et ça redessine tout, tout seul.
Ainsi, pas besoin non plus de détecter si quelque chose change au niveau des dimensions de DrawingArea ou bien si quelque chose se trouve au-dessus de lui, l'objet se rafraichira tout seul.


Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jeanyvon#20 Posté le 3/4/2024 à 08:49:32
Gambas? Ma! Et gustoMerci Olivier!
ça marche pour les graph camembert mais pas pour les graph colonne
dans le code du composant chaque changement de dimension est précédé d'un $drw.refresh. c'est très bien fait. Mais pour les graph colonnes ça bug!
Vieillir? On peut retarder mais pas y échapper!
linuxos#21 Posté le 3/4/2024 à 13:13:00
Un peu de sel, de poivre et la crevette sera... jeanyvon,

Pas de soucis de mon coté. Peux-tu m'envoyer une petite capture d'écran pour que je vois ce qui bug ?

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jeanyvon#22 Posté le 3/4/2024 à 18:55:34
Gambas? Ma! Et gustovos désirs sont des ordres!
le 1° bloc de graphe est celui du démarrage


si tu veux je te donne le code.
Vieillir? On peut retarder mais pas y échapper!
linuxos#23 Posté le 4/4/2024 à 20:47:13
Un peu de sel, de poivre et la crevette sera... jeanyvon,

Oui si possible donne moi le code que je regarde ça.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jeanyvon#24 Posté le 5/4/2024 à 13:25:17
Gambas? Ma! Et gustosalut
ça c'est mon code
celui de la class n'a pas changé.

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
PUBLIC $ListLegende AS String[]

PUBLIC $ListCouleur AS Integer[] = [Color.lighter(Color.blue), Color.Red, Color.Green, Color.Orange, Color.Violet, Color.cyan, Color.Darkblue, Color.Darkgreen, Color.violet, Color.DarkCyan, Color.Darkgreen, Color.Gray, Color.black]

PUBLIC repBdD AS STRING = User.home & "/nos-bases-de-données" '
PUBLIC $Donnees AS NEW Object[]
PUBLIC $DonneesText AS NEW String[]
PUBLIC triage AS STRING = "select * from ventilation order by nom"


PUBLIC SUB Form_Open()

recomence
END


PUBLIC SUB affichGraph()

DIM i AS INTEGER

Graph2d1.Values.Clear
Graph2d1.ValuesText.Clear
Graph2d1.Legende.Clear
Graph2d1.Couleur.Clear

FOR i = 0 TO $ListLegende.Max
Graph2d1.Legende.Add($ListLegende[i])
Graph2d1.Couleur.Add($ListCouleur[i])
NEXT
IF i > 0 THEN i = 0
FOR i = 0 TO $Donnees.Max
Graph2d1.Values.Add($Donnees[i])
Graph2d1.ValuesText.Add($DonneesText[i])
NEXT
' Message.Info($donnees[0])
END



PUBLIC SUB GroupeTypeGraph_Click()

' Evenement lors du Choix du Type de Graphique

SELECT CASE LAST.Tag
CASE "colonne"
Graph2d1.grType = Graph2D.GraphColonnes
CASE "camembert"
Graph2d1.grType = Graph2D.GraphCamenbert
CASE "camembertportion"
Graph2d1.grType = Graph2D.GraphCamenbertPortion
CASE "colonne3d"
Graph2d1.grType = Graph2D.GraphColonnes3D
END SELECT

affichGraph()

END

PUBLIC SUB CheckBox1_Click()

' Bouton Afficher les Legendes ou pas

Graph2d1.Legende_Visible = CheckBox1.Value

END

PUBLIC SUB Button1_Click()

ME.Close

END


PUBLIC SUB RadioButton2_Click()

triage = "Select * from ventilation order by nom"
recomence
END

PUBLIC SUB RadioButton3_Click()

triage = "Select * from ventilation order by montant desc"
recomence
END

PUBLIC SUB recomence()

DIM fItemDonnees AS Float[]
DIM iEchantillon AS INTEGER = 1
DIM maconnex AS NEW Connection, resu AS Result
DIM i AS INTEGER

IF RadioButton2.Value = TRUE THEN
triage = "select * from ventilation order by nom"
ELSE IF RadioButton3.Value = TRUE THEN
triage = "select * from ventilation order by montant desc"
ENDIF

WITH maconnex
.Host = repBdD
.Name = "noscomptes.sq3"
.Type = "sqlite3"
.Open
resu = .Exec(triage)
END WITH

' Initialisation des parametres du Graphique
Graph2d1.Etiquette = FALSE
Graph2d1.Legende_Visible = TRUE
Graph2d1.Symbole = "Mb/s"
Graph2d1.Background = Color.white


IF RadioButton1.Value = TRUE THEN
Graph2d1.grType = Graph2D.GraphColonnes
ELSE IF RadioButton6.Value = TRUE THEN
Graph2d1.grType = Graph2D.GraphCamenbert
ELSE IF RadioButton7.Value = TRUE THEN
Graph2d1.grType = Graph2D.GraphCamenbertPortion
ENDIF


Graph2d1.AnglZ = 30
Graph2d1.Profondeur = 15
Graph2d1.Titre = "Graphique de nos dépenses"

fItemDonnees = NEW FLOAT[13]
$ListLegende = NEW STRING[13]

FOR EACH resu
IF resu!nom <> "salaire" THEN
fItemDonnees[i] = resu!montant
$ListLegende[i] = resu!nom & " ... " & resu!montant & " €"
ENDIF
INC i
NEXT

$Donnees.Add(fItemDonnees)
$DonneesText.Add(iEchantillon)

affichGraph()

END
Vieillir? On peut retarder mais pas y échapper!
linuxos#25 Posté le 5/4/2024 à 15:05:28
Un peu de sel, de poivre et la crevette sera... jeanyvon,

Le code qui m'intéresse est surtout la fonction traceLegende(), drw_Draw()

C'est la que les légendes sont dessinées.

Il se peut que, de ce que je vois dans ton code, le codage du texte qui vient de SQlite ne soit pas le même que celui utilisé pour dessiner du texte dans le DrawingArea, ce qui peut créer ce décalage.

Peux-tu essayer de remplir les Legendes manuellement pour vérifier ma théorie stp ?

Genre:

$ListLegende[0] = "Economie...14520 Euros"
$ListLegende[1] = "Depenses...1205 Euros"
...
etc

Puis la meme chose mais en utilisant le symbole Euros a la place du mot "Euros"

Olivier


Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jeanyvon#26 Posté le 5/4/2024 à 19:01:16
Gambas? Ma! Et gustobonsoir Olivier!
Alors, revenir à des données fixes ne me plaisait pas.
J'ai choisi une autre solution. j'ouvre le projet par un message.question et j'utilise ce choix pour l'affichage. Comme je n’interviens pas durant le run, tous ce passe bien plus de doublon.
En tous cas je te remercie du temps que tu as passé sur mon projet.
Vieillir? On peut retarder mais pas y échapper!
linuxos#27 Posté le 5/4/2024 à 19:44:02
Un peu de sel, de poivre et la crevette sera... jeanyvon,

le test avec des données fixes n'est que pour identifier le problème. Apparemment, c'est bien les données fournies par SQLite qui posent un problème, si je comprends bien.

Il est possible de corriger cela simplement, je pense.

Peux-tu essayer de remplacer 'Paint.Text...' par 'Paint.DrawRichText' dans la fonction 'traceLegende', peut-etre cela arrangera les choses. A tester du moins.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jeanyvon#28 Posté le 6/4/2024 à 09:34:15
Gambas? Ma! Et gustobonjour Olivier!

gambas ne veux pas de Paint.drawrichtext : Pending path
je vais laisser comme ça.
Je vais l'intégrer dans mon soft en mettant les options dans le menu de lancement.

Vieillir? On peut retarder mais pas y échapper!
linuxos#29 Posté le 6/4/2024 à 17:17:23
Un peu de sel, de poivre et la crevette sera... jeanyvon,

Opus pardon, essaye plutot ça: Paint.Richtext(Legende)

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
jeanyvon#30 Posté le 7/4/2024 à 09:33:45
Gambas? Ma! Et gustomerci olivier ! Mais ça ne fonctionne toujours pas : Il y a toujours double affichage. Ce ne sont pas les légendes qui ne marchent pas mais l'effacement du graph précédent. Je vais donc poursuivre dans la voie de la fermeture de la forme contenant les graphs pour qu'elle soit ré-initialisée.
Avec le composant gb.chart, je faisait ce changement sans problème. Dommage, c'est un bon soft.
Vieillir? On peut retarder mais pas y échapper!
12