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

C# Discussion :

Graphics.Drawline sans "cassures"


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Graphics.Drawline sans "cassures"
    Bonjour

    Je viens de constater que si on faisait un Drawline avec un trait un peu épais, les angles de flechisement n'etaint pas dessinés c'est donc comme si j'avais dessiné une suite de rectangles ayant pour mediane les lignes

    J'ai cru que le DrawPath allait résoudre le problème mais c'est la meme chose

    Existe-il une solution a ce probleme ?


    Merci pour vos suggestions
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Peut-être tracer un disque (avec FillEllipse) à chaque extrémité, le diamètre du disque étant égal à l'épaisseur du trait.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Graffito

    C'est la methode a laquelle j'avais déja pensé

    Mais j'imaginais quand meme que la classe Graphics offrait des solution mieux intégrées pour ce genre de choses
    En particulier le DrawPath

    Faire ce que tu dis n'est pas trivial car je travaille en semi-transparent. Donc pour eviter des effet de sur-exposition je devrais d'abord tracer un disque avec un brush eraser (pas évident) ensuite tracer le disque

    Bref ca rame encore !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Faire ce que tu dis n'est pas trivial car je travaille en semi-transparent.
    En effet, bon courage!
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci, cela étant

    Tu me confirme donc que la classe Graphics n'apporte aucune solution a ce problème ?

    Je trouve cela invraissemblable !

    A quoi ca sert d'avoir des DrawLines et DrawPath si ca ne traite pas des situations aussi évidentes !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Salut

    Que voudrais tu exactement ?


    Quand tu dessines un line (avec ou sans GraphicsPath), la ligne est une ligne de la taille de ton pinceau. Quand tu prends un stylo épais pour dessiner avec ta main, si tu dois relier 2 lignes, il faut que tu "modifies" la tenue de ton stylo
    si tu veux autre chose qu'un collage de 2 grosses lignes

    Avec GDI c'est la même chose. et je ne trouve pas cela "choquant"

    Maintenant, si tu pouvais montrer une image du résultat que tu souhaites obtenir (je dis cela car en matière de dessin, une image est souvent plus parlante que des termes), je verrais si je peux te donner des pistes ou des solutions

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    drawlines a une surcharge qui arrondi les lignes (courbe plutot que succession de lignes)
    dans certains cas il ne faut pas dénaturer le graph, si tu peux ca devrait t'ailler

    sinon il doit etre possible de coder un drawing.pen

    ou encore de déssiner les lignes en 2 fois, d'abord en fin en entier puis en épais avec 2 ou 3 pixels de moins à chaque extremité (avec 2 point on calcule facilement l'equation de droite et donc les autres points)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci a vous

    Merci theMonz31

    Je m'appretais a t'envoyer un exemple et je constate que c'est moi qui suis idiot !

    Drawline fait tres bien son travail !!

    Le probleme c'est que les data que j'utilise n'on pas toujours des suite de lignes continues

    Donc je fais des drawlines en boucles

    C'est donc la jointure de deux Drawlines différent qui pose probleme

    Et pour regler cela il n'y a pas d'autre methode que de gerer la logique exterieure

    Par contre ce qui m'aiderait beaucoup c'est de pouvoir fair une brush "erase"

    Est-ce possible ??

    NB : Je joint quand meme l'exemple
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    effacer n'est rien d'autre que mettre la couleur de fond ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    effacer n'est rien d'autre que mettre la couleur de fond ...
    Vraiment ?

    Et quand le fond est transparant ?

    Il faudrait avoir une couleur "NoColor"
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    la gestion de la transparence de microsoft dans le framework c'est du n'importe quoi, en fait la couleur transparente n'existe pas, ca regarde quelle est la couleur en dessous et ca le recopie en dessinant l'objet du dessus
    gdi ne peut que dessiner par dessus un dessin, pas retirer des morceaux, ni faire de la vraie transparence

    un control transparent demande à son parent de se peindre sur lui avant de faire son rendu, d'ailleurs si on superpose à moitié des controles, certains morceaux disparaissent car c'est la notion de parent qui l'emporte et non le fait que c'est transparent


    sinon tu peux sauvegarder les différentes étapes du dessin dans des variables graphics (ou bufferedgraphics) séparées afin de pouvoir revenir à un stade antérieur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    Toute ta problématique finalement, résume, me semble t-il, dans la définition d'un ensemble de point cohérent pour ton tracé.

    Ce que j'aurais tendance à faire serait peut-etre l'approche suivante.

    Dans Graphics, tu as la possibilité de faire un DrawLines() en passant un tableau de points. Donc, si cela peut suffire, autant utiliser cette fonction.

    Maintenant, tu peux aussi "compléter" la liste de tes points en insérant les points "manquant" pour avoir un tracer "continu".

    Et pour "l'eraser", tu dois pouvoir faire un Draw avec Color.Transparent. Je n'ai pas testé le résultat, mais à voir ce que cela donne

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tu dois pouvoir faire un Draw avec Color.Transparent
    je crois que ça dessine du noir ... mais à tester quand même
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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