Dessiner un graphique

FloFlo Membre
16:39 modifié dans API AppKit #1
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. :D

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...



Réponses

  • Philippe49Philippe49 Membre
    16:39 modifié #2
    Cela fait beaucoup à  la fois ...

    NSBezierPath répond à  ce besoin.


  • NseaProtectorNseaProtector Membre
    16:39 modifié #3
    Je vais peut être dire une bêtise, mais tu as un framework (graphtool) sur le site qui pourrait peut être contenir une base de départ pour ce que tu recherches... :o
  • FloFlo Membre
    16:39 modifié #4
    Salut,

    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é...

    un framework (graphtool) sur le site qui pourrait peut être contenir une base de départ


    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... ;-)



  • Philippe49Philippe49 Membre
    16:39 modifié #5
    dans 1208369115:

    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.
     

    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

  • FloFlo Membre
    16:39 modifié #7
    Merci pour ta réponse. Il me semble que NSBezierPath soit asser optimisé du fait de son intégration dans cocoa et plutôt simple à  utiliser (le principe ressemble un peu à  du swing en java je trouve...).

    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 ?
  • Philippe49Philippe49 Membre
    16:39 modifié #8
    dans 1208554641:

    Merci pour ta réponse. Il me semble que NSBezierPath soit asser optimisé du fait de son intégration dans cocoa et plutôt simple à  utiliser (le principe ressemble un peu à  du swing en java je trouve...).

    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

    dans 1208554641:

    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... :))

    Sur Internet à  chercher.
    Sinon tout bouquin sur Cocoa présente un exemple de ce type.

    dans 1208554641:

    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 ?

    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.
  • Philippe49Philippe49 Membre
    16:39 modifié #9
    Le site Cocoacast propose des podcasts.
    Par exemple le n°18 sur les custom view peut t'intéresser. Mais peut-être d'autres ...
  • fouffouf Membre
    16:39 modifié #10
    J'avais fait un programme qui etait capable de faire ca :
    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 ... )
  • FloFlo Membre
    16:39 modifié #11
    Merci pour vos réponses :

    Le site Cocoacast propose des podcasts.


    Je le connaissais pas celui-la, ça mérite bien un petit bookmark sous safari.

    J'avais fait un programme qui etait capable de faire ça


    ça a l'air plutôt balèze B) , 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 :o

    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 ?
  • Philippe49Philippe49 Membre
    avril 2008 modifié #12
    dans 1208590487:



    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 , .... 

Connectez-vous ou Inscrivez-vous pour répondre.