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

GTK+ avec C & C++ Discussion :

[Cairo] épaisseur de ligne


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut [Cairo] épaisseur de ligne
    Bonjour,

    J'aimerais dessiner une ligne d'un pixel d'épaisseur, mais je n'y arrive pas, quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cairo_set_line_width (cr, 1);
    la ligne ne fait pas tout à fait un pixel d'épaisseur, elle fait au moins un millimètre d'épaisseur.
    Si je mets 0.1 au lieu de 1, la ligne garde la même épaisseur, mais devient transparente

    Je n'arrive pas à comprendre pourquoi, alors si vous pouvez m'aider...
    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Je pense que c'est ce qui est traité dans http://www.cairographics.org/FAQ/#sharp_lines

  3. #3
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Désolé, de ne pas avoir pu répondre plus tôt, j'avais pas mal de boulot

    Donc, si je comprends bien, il faut que j'arrondisse à 0.5 ?
    (J'ai pas tout compris, j'ai un peu de mal avec l'anglais )

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    cairo_set_line_width (cr, dx);
    cairo_move_to (
            cr,
            0,
            -(HEIGHT/2) / y_scale - ABS_VAL(y_offset));
    cairo_line_to (
            cr,
            0,
            (HEIGHT/2) / y_scale + ABS_VAL(y_offset));
    cairo_stroke (cr);
    cairo_move_to (cr,
             -(WIDTH/2) / x_scale - ABS_VAL(x_offset),
             0);
     cairo_line_to (cr,
            (WIDTH/2) / x_scale + ABS_VAL(x_offset),
            0);
    cairo_stroke (cr);

    Voici ce qu cela donne:

    Avant:



    Après:


    Seulement, il y a un déréglage, ça fonctionne pas terriblement

  4. #4
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Ah, tant que j'y suis, je ne comprends pas bien la difference entre cairo_stroke (cr); et cairo_stroke_preserve (cr);

    Merci encore pour les réponses

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    cairo_stroke trace le chemin et l'enlève du contexte cairo où il est stocké. cairo_stroke_preserve conserve le chemin dans la pile (comme toutes les variantes *_preserve) après avoir effectué l'opération de dessin correspondante.

  6. #6
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Mais ça sert à quoi de le stocker dans une pile ? comment fait on pour y accéder après ?

    D'ailleurs, en fait, concrètement, sur le dessin, au final, je ne vois pas trop la différence

  7. #7
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Il n'y a pas de différence visible parce que le rendu est censé être identique. Pour illustrer l'intérêt, prenons un exemple :
    Mettons que tu veux tracer un cercle rempli en rouge avec un contour bleu.
    1. tu utilises cairo_arc pour créer un chemin de cercle
    2. tu utilises cairo_fill pour le remplir en rouge

    Et là... bin le chemin a été "consommé". Si tu veux tracer le contour du cercle, il te faudra recréer son chemin avec cairo_arc, puis tracer le contour avec cairo_stroke.

    La bonne méthode pour éviter cela :
    1. tu utilises cairo_arc pour créer un chemin de cercle
    2. tu utilises cairo_fill_preserve pour le remplir en rouge et conserver le chemin dans le contexte.
    3. tu utilises cairo_stroke pour tracer le contour et consommer le chemin.

  8. #8
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Ah, oui, d'accord, mais, j'aurais plutôt fait

    1)cairo_arc pour créer un chemin de cercle
    2)cairo_stroke_preserve pour tracer le chemin, et le preserver dans le contexte
    3)cairo_fill pour remplir en rouge

  9. #9
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    T'as pas l'esprit de contrariété toi .
    Dans mon cas, le contour fait sa vraie épaisseur, dans le tien, uniquement une demi épaisseur (puisque le reste a été couvert par le remplissage).

  10. #10
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Ca ressemble presque à une discussion de sourds!

    OK je sors =>

  11. #11
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Ah, désolé, c'était pas pour te contredire, je ne savais pas trop si ma methode était valable

Discussions similaires

  1. Problème épaisseur de ligne 2D
    Par kitsune dans le forum OpenGL
    Réponses: 6
    Dernier message: 26/08/2009, 00h22
  2. Graphics : épaisseur des lignes
    Par Atharendil dans le forum Java ME
    Réponses: 4
    Dernier message: 02/03/2009, 22h33
  3. Problème de positionnement d'une ligne suivant l'épaisseur
    Par bubulemaster dans le forum Débuter
    Réponses: 5
    Dernier message: 01/02/2008, 17h28
  4. Package "easytab" & épaisseur de ligne dans tableau
    Par Surikat14 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 27/08/2007, 13h53
  5. Réponses: 0
    Dernier message: 15/08/2007, 14h39

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