IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

[Lablgtk2 + Ocaml] Tracé de points


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut [Lablgtk2 + Ocaml] Tracé de points
    Bonjour,


    j'utilise Ocaml depuis quelques temps pour représenter un nuage de points avec son maillage par triangulation de Delaunay.

    Pour cela, j'utilise les classiques lineto, moveto, plot, etc.

    J'utilise depuis peu Lablgtk2 et malgré les tutoriaux, je n'ai pas bien compris comment je pourrais faire la même chose avec lablgtk2, à savoir placer des points, tracer des traits, effacer une partie de l'écran, etc.

    J'aurais pensé utiliser GMisc.drawing_area, mais si c'est le cas, comment ensuite placer des points et segments dessus?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Par défaut
    regarde dans les exemples de code fournis avec LablGtk.

    voir aussi introduction_to_gtk

    à l'aide de ce code
    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let da = GMisc.drawing_area ~packing:vbox#add () in
    let drawable = new GDraw.drawable da#misc#window in
    ...
    tu obtiens un objet GDraw.drawable, tu trace points et lignes à l'aide des méthodes drawable#point et drawable#line.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut
    Encore désolé, mais après avoir lu les tutoriaux en question, je n'ai toujours pas bien compris.

    Je dois d'abord créer un GDraw.drawing_area, qui contiendra un GDraw.drawable, et c'est dans le drawable que je finirai par tracer?

  4. #4
    Membre émérite
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Par défaut
    Bonjour !

    Le widget GMisc.drawing_area n'est qu'une zone de dessin (comparable à la fenêtre qui s'affiche avec Graphics.open_graph). En général on effectue tous les tracés en arrière-plan dans un widget GDraw.pixmap (double buffering) grâce à GDraw.drawable qui est la boîte à outils pour les dessins. Il faut ensuite ajouter les événements adéquats pour maintenir l'affichage propre en cas de superposition de fenêtres. Voici deux liens qui devraient t'aider :


    N'hésite pas à demander si tu as des questions précises.

    Cordialement,
    Cacophrène

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 20
    Par défaut
    Je suis vraiment désolé hein c'est nouveau pour moi...

    Donc si je récapitule, en tentant de comparer par rapport à Ocaml

    On a le GMisc.drawing_area qui est à peu près comme la fenêtre d'open_graph.

    On a ensuite GDraw.pixmap qui permet de tracer comme dans ocaml avant de faire syncronize ();

    La commande plot est remplacée par la méthode point et lineto est remplacée par la méthode line et il faut les utiliser avec un GDraw.drawable?

    Si oui, j'aimerais tracer un point rouge, et tracer une ligne rouge aussi.

    Voici ce que j'ai mis dans mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      let graphique = GMisc.drawing_area ~packing: content#add () ~width:700 ~height:700 in
    	let fenetre = new GDraw.drawable graphique#misc#window in
    	let buffer = ref (GDraw.pixmap ~width:700 ~height:700 ()) in
    	!buffer#set_foreground (`NAME "red");
    	!buffer#line ~x:300 ~y:300 ~x:600 ~y:600;
    	!buffer#point ~x:400 ~y:400;
    J'ai pas encore compris comment faire l'équivalent d'un syncronize, mais si j'ai pigé le reste, là j'ai placé un point et une ligne dans mon écran en attente d'être tracé?

    Seul bémol, quand je lance mon programme après l'avoir compilé, j'ai une FATAL ERROR:
    exception Gpointer.Null

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Je te conseille de te renseigner sur le projet plplot.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tracé de points
    Par sinchi sinchi dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 16/04/2014, 21h16
  2. Tracé de points dans l'espace
    Par bendesarts dans le forum MATLAB
    Réponses: 3
    Dernier message: 25/03/2013, 09h25
  3. [Débutant] tracé de points et couleur
    Par tenderstoune dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/07/2010, 21h45
  4. Tracé de points
    Par sebmord dans le forum Débuter
    Réponses: 3
    Dernier message: 05/03/2009, 10h27
  5. [OCaml] Points sur une colonne
    Par desert_fenec dans le forum Caml
    Réponses: 4
    Dernier message: 05/02/2007, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo