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

Composants VCL Delphi Discussion :

TChart, récupérer les coordonnées XY de points (vs axis et non pixels)


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut TChart, récupérer les coordonnées XY de points (vs axis et non pixels)
    J'utilise le composant TChart proposé par RAD Studio, Delphi 2010, version professional.


    Pour un graphe 2D:
    Avec l'event OnMouseDown, on récupère aisément les coordonnées de la souris mais je souhaiterais récupérer les coordonnées [x,y] 'réelles' du point où l'event à eu lieu respectivement avec l'état du zoom, ...
    Y a t-il un moyen simple? actuellement j'utilise les valeurs min, max des axes, les % des marges left, top,.., les tailles des labels, du titre, ...
    C'est long , fastidieux et surtout, je ne suis pas sur d'avoir intégré tout ce qui pourrait déplacer les axes (comme visualisation ou non des titres des séries, titre général du graphe sur plusieurs lignes, longueur des ticks, ...).
    Être capable de récupérer ses coordonnées permettrait d'ajouter, déplacer,.. facilement des points et par exemple, améliorer la qualité de fits qui 'ondulent' trop dans des zones où on ne dispose pas de données expérimentales mais où le 'bon sens' permet d'intuiter raisonnablement la position de points intermédiaires.

    Merci pour vos réponses.

  2. #2
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    En utilisant le code ci-dessous il semble que je m'en sorte
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
     
    procedure Chart2MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
     
    var ii                                     : integer;
        Len,
        pct                                   : array[0..1] of integer;
        mima                                 : array[0..3] of double;
        Cx,Cy                                : double;
       begin
       ......
          //Longueur en pixel de l'axe de droite
          Len[1]:=Chart2.LeftAxis.IStartPos;
          ii:=Chart2.LeftAxis.IEndPos;
          Len[1]:=ii-Len[1];
          //longueur en pixel de l'axe du bas
          Len[0]:=Chart2.BottomAxis.IStartPos;
          ii:=Chart2.BottomAxis.IEndPos;
          Len[0]:=ii-Len[0];
          //Position en pixel ( relatif à Chart2) de lelftaxis
          pct[0]:= Chart2.LeftAxis.PosAxis;       // pixel
          //Position en pixel ( relatif à Chart2) de bottomaxis
          pct[1]:= Chart2.BottomAxis.PosAxis;     // pixel
          // X,y position de la souris au moment du click relatif à chart2
          // 'remettre' X,Y dans le système d'axe
          dec(X,pct[0]);
          y:= pct[1]-Y;
          // si on est dans la zone graphique alors
          if (X >= 0) and (X <= Len[0]) and
             (Y >= 0) and (Y <= len[1])
          then
             begin
             // recherche des mi, max actuels compte tenu de l'état de zoom actuel
             mima[0]:= Chart2.bottomaxis.Minimum;
             mima[1]:= Chart2.bottomaxis.Maximum;
             mima[2]:= Chart2.Leftaxis.Minimum;
             mima[3]:= Chart2.Leftaxis.Maximum;
             // sortir les coordonnées 'vraies' du point
             Cx:=mima[0] + X/Len[0] * (mima[1]-mima[0]);
             Cy:=mima[2] + Y/Len[1] * (mima[3]-mima[2]);
             end;
    ......

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

Discussions similaires

  1. [XL-2010] Récupérer les coordonnées d'un point sur un graphique d'un simple clic
    Par leblesois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/03/2014, 18h46
  2. Réponses: 3
    Dernier message: 31/12/2008, 14h39
  3. Récupérer les coordonnées d'un point 3D
    Par johnnyjohnny dans le forum MATLAB
    Réponses: 3
    Dernier message: 22/05/2007, 15h16
  4. [GRAPHIQUE] Récupérer les coordonnées d'un point
    Par freud dans le forum Composants VCL
    Réponses: 6
    Dernier message: 29/09/2005, 12h31

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