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 :

Problème pour dessiner.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Par défaut Problème pour dessiner.
    Salut tout le monde,

    J'ai un petit problème, dans une picturebox géante, je mets dynamiquement plusieurs PictureBox que je peux déplacer grâce a l'attribut Picturebox.mousemove que j'ai implémenté.

    Je souhaite que en cliquant (long) sur les petites Pb et la touche CTRL dessiner un trait de manière dynamique afin de les relier.

    Comment pourrais je faire? en sachant que pour le moment je n'arrive qu'a tracer des lignes fixes (le mouvement de la souris n'a aucun effet de ssus.
    Images attachées Images attachées  

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    les winforms ne sont pas trop fait pour faire ca, ca risque de ramer pas mal
    si tu peux passe en wpf

    sinon la technique c'est d'utiliser un bufferedgraphics
    de déssiner l'image puis le trait en fonction de où est là souris
    et enfin render sur le picturebox

    le tout plusieurs fois par seconde, ce qui fera un joli saccadement je pense, mais ca reste à tester
    en diminuant artificiellement l'appel de l'evenement ca peut ptete passer
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    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
    Par défaut
    salut

    je ne prendrais pas le problème comme celà.

    Perso, j'ai déja fait ce genre d'application et la solution retenue était la suivante :

    1 / Un controle utilisateur dans lequel je peux ajouter des Images
    2 / Le controle gère chaque image sous forme de "Shape"..
    une shape ayant une méthode Render() et appartenant à la collection de Shape de l'UC.
    3/ Cet UC gère le mouseDown, etc... en le relayant eventuellement aux shapes pour qu'elles saches quoi faire.
    4/ Après, pour dessiner les lignes, j'utilise le MouseDown pour définir un mode de saisie et de mémorisation des points de la souris, et à chaque mouseMove de la souris de l'UC, j'ajoute un point que je trace dans la méthode OnPaint() de cet UC.

    Evidemment, je definis une Region pour chaque "Image" comme cela, quand je clique sur une image pour la déplacer, je peux facilement detecter sur quelle region je suis et donc quelle image déplacer...

    Tout le dessin est fait dans le OnPaint() de l'UC qui appelle une méthode Render(Graphics) de chaque Shape que j'ai crée (et qui contiendrait dans ton cas le rendu d'une image).

    Ainsi, Un seul GRAPHICS objet est utilisé (celui de l'UC) et passé à chaque Shape pour quelle fasse son Rendu..)

    Avantage : Performance au rendez-vous. Gestion de la transparence. Gestion du Z-Order facile à faire (suffit d'avoir une liste des objets et de changer l'ordre d'appel du Render() en fonction de ce Z-Order))

    Voila...

    Faut compter 1 journée pour réaliser un tel controle

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Par défaut
    Merci pour ton aide, mais entre temps j'avais pensé à autre chose qui fonctionne en deux temps:

    Le premier clik determine l'objet "composant" et recupère la position de la souris sur la grande PictureBox, ensuite le second clique determine l'objet "second composant" et sauve la position de la souris. Ensuite un alogorythme trace la liaision en ligne verticale et horizontale.


    Le problème avec ce que tu me proposes et que je dois modifier toutes la partie graphique de mon application.

    Vus que tout est cré dynamiquement je me seres d'un arraylist pour tout gérer. Chaque composant a une PB et un label affillié, ainsi qu'une Form modulable. Et à mon avis c'est pas un jour de travail qu'il va me falloir mais une bonne semaine...

    Mais si ma méthode plombe trop les performances, alors je me pencherais sur ta solution qui parait interessante meme si je n'ai pas tout compris.

Discussions similaires

  1. [CImg] Problème pour dessiner des cercles
    Par Bloodista dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 24/09/2012, 11h07
  2. Problème pour dessiner un rectangle
    Par acheo dans le forum C#
    Réponses: 2
    Dernier message: 15/06/2012, 12h11
  3. [Chemfig] Problème pour dessiner une liaison
    Par DozerSux dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 11/10/2010, 15h41
  4. [Débutant] Problème pour dessiner une courbe
    Par torNAdE dans le forum MATLAB
    Réponses: 6
    Dernier message: 16/07/2007, 22h25
  5. Réponses: 7
    Dernier message: 04/06/2006, 17h00

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