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

Delphi Discussion :

Déplacer des points d'une ligne


Sujet :

Delphi

  1. #1
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut Déplacer des points d'une ligne
    Bonjour à tous,

    Tout d'abord je tiens à vous remercie de votre patience et votre aide.

    Voilà, actuellement, j'ai un projet où je dois dessiner une ligne électrique sur le canvas d'une forme; la ligne est tracer avec cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    aForm.Canvas.Pen.Width := 4;
    aForm.Canvas.Pen.Color := aBlue;
    aForm.Canvas.MoveTo(lignes[0].XPosition,lignes[0].YPosition);
     for i:=1 to length(lignes)-1 do
      begin
       aForm.Canvas.LineTo(lignes[i].XPosition,lignes[i].YPosition);
      end;
    Ma structure lignes me permet de récupérer tous les points pour le tracer les segments de cette ligne.

    Mon problème c'est qu'on me demande maintenant la possibilité de modifier cette ligne, c'est à dire de prendre un point sur la ligne et de le déplacer afin d'ajouter un "virage" à cette ligne.

    J'aurais donc plusieurs questions:

    1) Existe-t-il une meilleur méthode pour créer cette ligne?

    2) Comment faire pour savoir si l'utilisateur à cliqué sur une portion de cette ligne, en sachant qu'on ne connait que les coordonnées des points?

    3) Comment calculer un déplacement de souris lorsque le clic gauche est maintenu enfoncé?

    Encore merci,

    @+.

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Différents problèmes dont certains ne sont pas triviaux

    1. Si j'ai bien compris, tu peux avoir 5 point au départ, et l'utilisateur peut "tirer un bout de ligne" de telle sorte qu'il y ait un 6eme point intermédiaire ? si c'est le cas, il faut d'abord résoudre tes question 2 et 3, puis insérer ce 6eme points dans ton tableau entre les 2, puis redessiner.

    2. Il doit y avoir plusieurs algo pour faire cela. Par exemple on peut considérer qu'un point P(x, y) se trouve sur la droite P1(x1, y1) , P2(x2, y2) si
    ( y2 - y1 ) / ( x2 - x1 ) = (y - y1 ) / ( x - x1 ) --> attention à gérer les effets de bord... style barre verticale (division par zero)...
    On peut inverser les rapports, selon une ligne "plutot horizontale ou non" pour éviter ces effets de bords.
    il se trouvent dans le segment avec la condition supplémentaire
    ( x > x1 ) et ( x < x2 ) et ( y > y1 ) et (y < y2 ).
    De plus, il serait judicieux d'ajouter à toute ces égalités, un delta, pour ne pas jouer au pixel près (à moins que le user soit particulierement dextre )

    Il y a surement d'autre solution pour voir si un point appartient à un segment, voir forum Algo

    3. il faut jouer avec MouseDown / MouseUp / MouseMove
    -Mettre un indicateur à True quand MouseDown et initialisation (sauvegarde position de départ par exemple)
    -Faire le traitement graphique/calcul sur MouseMove tant que l'indicateur est à True
    /Sur MouseUp, mettre l'indicateur à false et finaliser le traitement. (insertion de ton point dans le tableau par exemple...)


    Bon courage !

  3. #3
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Ok,

    Merci bocoup TicTacToe, ton aide va me permettre de résoudre la plupart de mes problèmes, il me reste plus qu'à trouver le bon algo.

    Je cherche et je vous tiens au courant.

    @+.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/03/2012, 13h59
  2. Récupérer l'ensemble des points d'une droite
    Par Psycho_Kwak dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 18/01/2006, 11h42
  3. Regrouper des colonnes dans une ligne
    Par aturlan dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2006, 21h05
  4. Chercher des mots dans une ligne
    Par chemouz dans le forum C++
    Réponses: 1
    Dernier message: 17/12/2005, 12h42
  5. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57

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