Dessiner un graphique
Flo
Membre
Bonjour,
Je souhaiterais savoir quelle(s) technologie(s) utiliser pour créer un graphique style courbe lissée à parti d'un ensemble de points et non d'une équation.
Il serait également sympa de pouvoir dessiner une ligne partant de l'abscisse et allant vers l'image en fonction de la position de la souris sur le graphique. Il faudrait également que l'on puisse changer facilement d'unité de mesure (mois, jours, heures...). Enfin, le must serait d'afficher plusieurs courbes sur le même graphique en changeant de couleur par exemple.
J'ai entendu parler de la méthode made in cocoa basée sur : NSBezierPath, de la couche de fenêtrage Quartz ou encore de core animation. Seulement, je suis un peu perdu et je ne sais pas trop lequel correspond à mes besoins. Je souhaite réaliser l'outil moi même afin d'en apprendre un maximum (même si graph tool ou le framework de psychoh13 ont l'air tentants)
Merci d'avance pour vos réponses...
Je souhaiterais savoir quelle(s) technologie(s) utiliser pour créer un graphique style courbe lissée à parti d'un ensemble de points et non d'une équation.
Il serait également sympa de pouvoir dessiner une ligne partant de l'abscisse et allant vers l'image en fonction de la position de la souris sur le graphique. Il faudrait également que l'on puisse changer facilement d'unité de mesure (mois, jours, heures...). Enfin, le must serait d'afficher plusieurs courbes sur le même graphique en changeant de couleur par exemple.
J'ai entendu parler de la méthode made in cocoa basée sur : NSBezierPath, de la couche de fenêtrage Quartz ou encore de core animation. Seulement, je suis un peu perdu et je ne sais pas trop lequel correspond à mes besoins. Je souhaite réaliser l'outil moi même afin d'en apprendre un maximum (même si graph tool ou le framework de psychoh13 ont l'air tentants)
Merci d'avance pour vos réponses...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
NSBezierPath répond à ce besoin.
En fait, je pense que toutes les technos que j'ai évoqué correspondent à mes besoins seulement j'aimerais savoir laquelle serait la plus adapté en terme d'optimisation ou encore de facilité...
Oui certainement, je l'ai évoqué dans le premier post mais je suppose que l'on à pas accès au code de ce dernier et je souhaite réaliser l'outil moi-même... ;-)
Les NSBezierPath permettent de faire cela et c'est la base du dessin sous Cocoa.
On crée une custom view et on dessine dans la méthode
- (void)drawRect:(NSRect)aRect
de cette sous-classe de NSView
Voici une introduction Apple
A tout hasard, quelqu'un connaà®trait-il un exemple de ce genre de fonctionnalité ou le code serait accessible pour me fournir une ligne directrice ? (je sais que j'en demande beaucoup mais bon, qui ne tente rien n'a rien... )
Sinon, si c'est ce que je pense, quand on souhaite dessiner une courbe supplémentaire et qu'il y en a déjà une... il faut tout re-dessiner non ?
Toutes les méthodes de dessin se ressemblent : tracer des liges, des rectangles, des ovales, des Beziers.
Le principe Cocoa c'est d'unifier en Bezier
Sur Internet à chercher.
Sinon tout bouquin sur Cocoa présente un exemple de ce type.
Oui les vues présentes dans la fenêtre se redessinent elles-mêmes, et pour forcer le rafraà®chissement dû au programme (les rafraichissements dus aux événements "écrans" : déplacements de fenêtres, clics, etc..) on l'indique par
[maVue setNeedsDisplay:YES]
ce qui veut dire en gros au programme, dès que t'as un moment occupe-toi de refaire le dessin avec les nouvelles données.
Par exemple le n°18 sur les custom view peut t'intéresser. Mais peut-être d'autres ...
http://geodes.svn.sourceforge.net/viewvc/geodes/trunk/Geodes/src/GGraph.m?revision=237&view=markup
(voir la méthode "draw" - et non "drawGL" - elle est ecrite avec des instructions CoreGraphics mais je pense que tu n'auras aucun mal à traduire tout ca. Si tu as des questions/problèmes, n'hésite pas ... )
Je le connaissais pas celui-la, ça mérite bien un petit bookmark sous safari.
ça a l'air plutôt balèze , je sais pas trop par où commencer... Je pense qu'il va dabord falloir que je me forme mieux sur NSBezierPath avant de me lancer dans une lecture attentive de ton code
Sinon j'ai trouvé un genre de tuto sur NSBezierPath (si ça peut intéresser quelqu'un):
http://cocoadevcentral.com/d/intro_to_quartz_two/
Il utilise massivement des méthodes de NSBezierPath mais intitule son tuto "Learn Quartz", les deux seraient-ils intimement liés ?
Très bon tuto. C'est exactement ce qu'il faut pour débuter.
Avec Learn Quartz, il en fait un peu trop. Les classes Cocoa sont en fait la couche "sur le dessus de la pile" pour le graphisme.Â
Par derrière ou en dessous (comme tu préfères), ce sont des appels à des fonctions Core Graphics qui sont en général faites, qui elle-même appellent des routines , ....Â