Débutant ZedGraph

Résolu
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009 - 30 janv. 2009 à 15:49
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009 - 6 févr. 2009 à 09:19
Bonjour tout le monde,

A partir de la librairie ZedGrah je voudrais créer trois courbes dans un même graphique.

Les coordonnées de ces courbes seront stockées dans un fichier en binaire avec l'ordonnée de la courbe 1 , ordonnée de la courbe 2 puis ordonnée de la courbe 3.

Chaque ordonnée est représenter sur 2 octets et cela dans tout le fichier.

Ma question est : comment je peut faire pour faire en sorte que ZedGraph par le moyen de ces coordonnées créer mes courbes.

Je sais comment faire pour créer manuellement des point pour une courbe mais mon problème ce situe au niveau de lecture binaire du fichier et de l'exploitation des données.

En vous remerciant par avance,

11 réponses

damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009
3 févr. 2009 à 17:38
Comme code pour arriver a quelque chose de provisoire j'ai fait ca :

int FinFichier = 0;

            while (FinFichier != -1 )
            {
               

                short i1 = br.ReadInt16();
                short i2 = br.ReadInt16();
                short i3 = br.ReadInt16();
               
                list1.Add((double)x, (double)i1);
                list2.Add((double)x, (double)i2);  
                list3.Add((double)x, (double)i3);
                try
                {

                    FinFichier = br.PeekChar();
                }
                catch (Exception excep) { }
                x++;
            }

J'ai utiliser le try catch car la méthode peekchar provoque des exceptions mais je n'arrive pas vraiment à m'en servir.

Est ce qu'il n'y aurait pas un autre moyen, une autre méthode que par le moyen de la méthode peekchar?

Merci
3
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
30 janv. 2009 à 17:21
C'est donc pas un probleme de Zedgraph non?

Si chaque point fait 2 octets, tu peux lire ca comme ca:
BinaryReader binReader = new BinaryReader(File.Open(@"C:\tonfichier.bin", FileMode.Open));
byte[] testArray = new byte[2];
binReader.Read(testArray, 0, 2);

int valeur = (int)(testArray[0] << 8 + testArray[1]);
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
30 janv. 2009 à 17:31
Voui...
M'enfin BinaryReader possède les méthodes nécessaires pour directement lire les int, les doubles, etc...

<hr />
-Blog-
-Site Perso-
0
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009
30 janv. 2009 à 23:22
Merci pour vos réponses.
Malheureusement mon niveau de programmation n'est pas très élevé c'est pourquoi j'aimerais avoir quelques explications au sujet de ce bout de code correspondant à créer mes courbes :

Ca c'est le code que je met pour créer manuellement mes deux courbes  (c'est à dire en rentrant les formules des deux sinusoides à la main) :

PointPairList list = new PointPairList();
            PointPairList list2 = new PointPairList();
            for ( int i = 0; i < 36; i++ )
            {
                double x = (double)i * 5.0;
                double y = Math.Sin( (double)i * Math.PI / 15.0 ) * 16.0;
                double y2 = y * 13.5;
                list.Add( x, y );
                list2.Add( x, y2 );
            }
//Création de la première courbe
LineItem myCurve = myPane.AddCurve( "Alpha",list, Color.Purple, SymbolType.Diamond );

//Création de la deuxieme courbe
myCurve = myPane.AddCurve( "Beta", list2 , Color.Blue, SymbolType.Circle );

Maintenant comme je l'ai dit auparavant je veut créer trois courbes à partir du fichier existant qui contient les ordonnées par paire de deux octets.

Alors comme vous m'avez dit je doit utiliser :
 BinaryReader br = new BinaryReader(File.Open("MonBeauTexte.txt", FileMode.Open));

Mais cette partie de code je n'arrive pas à saisir :
 byte[] testArray = new byte[2];
 br.Read(testArray, 0, 2);
 int valeur = (int)(testArray[0] << 8 + testArray[1]);

Comment je peut l'appliquer à mon cas présent ? 

Je doit passer en paramètre de la fonction mypane.addcurve des points en l'occurence cété list et list2 mais comment je peut faire dans mon cas présent, pour mettre dans list, list2 puis list3( si il me faut un troisieme graph), la paire d'octets qu'il faille bien c'est à dire
par exemple les deux premiers octets dans list puis les deux autres dans list2 puis dans list3 et ainsi dessuite...

Je suis désolé pour toute ces questions mais sa serait vraiment génial si vous m'éclairiez un petit peut.

Je vous remercie par avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
31 janv. 2009 à 15:59
Je savais pas Bidou j'ai jamais travaillé avec des BinaryReaders, j'ai juste pris la doc, l'exemple et zou ;o
Donc si tu peux lire directement des shorts (2 octets), effectivement ce sera plus propre.

Par contre si tu n'arrive meme pas à comprendre comment fonctionne l'exemple de base de ZedGraph, je crois pas qu'on va pv taider beaucoup... Dsl j'aurais bien ecris le ptit bout de code, mais j'ai pas Visual Studio sous la main là.
0
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009
31 janv. 2009 à 16:42
Bon tampis c'est gentil quand même, si quelq'un d'autre pourrait m'aider sa serait gentil.. enfin si c'est possible.. Merci beaucoup en tout cas
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
2 févr. 2009 à 13:39
bubbathemaster> De tête je dirais que ces méthodes existent oui... c'est quand même plus pratique que de manipuler un tableau et de faire des décalage...

<hr />
-Blog-
-Site Perso-
0
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009
2 févr. 2009 à 15:09
Je n'ai pas vraiment l'habitude du C# je vous explique ma méthode :
J'ouvre et je lit mon fichier texte avec binaryreader :
BinaryReader br = new BinaryReader(File.Open("MonBeauTexte.txt", FileMode.Open));

Je récupere dans une variable les deux premiers octets du fichier :
Int16 x = br.ReadInt16();

Je converti x en double :
double x1 = Convert.ToDouble(x);

Pour me servir de la méthode :
PointPairList list = new PointPairList();
list.Add(x1, y1);

Et ensuite pouvoir afficher ma courbe ou comme paramètre il y aura list :
LineItem myCurve = myPane.AddCurve( "Alpha",list, Color.Purple, SymbolType.Diamond );

Je veux récuperer les information de mon fichier qui seront disposées ainsi :
XXYYZZXXYYZZ
XX désignant les valeurs de la premiere courbe sur deux octets et ainsi de suite
YY deuxieme courbe
ZZ troisieme courbe
 et ensuite recommencer dans une boucle

Je veut savoir comment je peut me déplacer dans mon fichier c'est à  dire récupérer mes informations à tab[0], tab[2] puis a tab[4] pour créer mes points.

Merci pour vos réponses
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
2 févr. 2009 à 16:07
Si tu n'as pas d'information sur les absisses, il faut que tu les crées toi même. Bon c'est pas sur que ca compile car comme j'ai dit j'ai pas accès à Visual Studio, mais ca doit pas etre tres loin:

BinaryReader br = new BinaryReader(File.Open("MonBeauTexte.txt", FileMode.Open));

PointPairList list1 = new PointPairList();
PointPairList list2 = new PointPairList();
PointPairList list3 = new PointPairList();
int x = 0;

while(br.PeekChar() >= 0)
{
  short i1 = br.ReadInt16();
  short i2 = br.ReadInt16();
  short i3 = br.ReadInt16();

  list1.Add( (double)x, (double)i1);
  list2.Add( (double)x, (double)i2);
  list3.Add( (double)x, (double)i3);
   x++;
}

myPane.AddCurve( "A",list1, Color.Purple, SymbolType.Diamond );
myPane.AddCurve( "B",list2, Color.Purple, SymbolType.Diamond );
myPane.AddCurve( "C",list3, Color.Purple, SymbolType.Diamond );
0
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009
2 févr. 2009 à 16:44
Merci pour ton aide je vais essayer de tester tout ça en l'adaptant.
0
damsdu64 Messages postés 49 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 29 avril 2009
6 févr. 2009 à 09:19
C'est bon j'ai reussi à adapter ce que tu m'a donner.

Je te remercie cela m'a beaucoup aider :)
0
Rejoignez-nous