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

Interfaces Graphiques Discussion :

Copier un objet axes avec les data cursor


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut Copier un objet axes avec les data cursor
    Bonjour à tous,

    J'ai dans la GUI principale un graphe et des champs textes pour régler des paramètres. Je souhaite imprimer le tout. Pour que tout rentre dans un papier A4 joliment, je crée donc temporairement une nouvelle figure en recopiant les données intéressantes et en agençant le tout pour que ça soit imprimable.

    Pour copier le graphe, j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hNewAxe = copyobj(h.axes, hNewFig);
    Mon souci est que "copyobj" ne duplique strictement que l'axes, mais pas les Data Cursor si l'utilisateur en a ajoutés. J'aimerais pouvoir les récupérer. J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dcm_obj = datacursormode(h.figure);
    hNewDcm = copyobj(dcm_obj, hNewFig);
    avec l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> copyobj
    Conversion to double from graphics.datacursormanager is not possible.
    Du coup j'ai tenté un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hNewDcm = copyobj(findobj(dcm_obj), hNewFig);
    et là j'ai l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ??? Error using ==> copyobj
    Changing the 'Figure' property of graphics.datacursormanager is not allowed..
    Est-ce que quelqu'un saurait comment je peux récupérer les data cursor ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Je doute que cela soit faisable...

    Je chercherais plutôt à récupérer les coordonnées et les informations du texte affiché par le DataCursor, et j'utiliserais un simple objet Text (avec pourquoi pas un Rectangle en fond) sur l'autre graphique

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut
    aïe, c'est dommage si on ne peut pas les récupérer...

    j'ai essayé de récupérer les coordonnées et les infos affichées par le data cursor, mais je n'y arrive pas. Je n'arrive pas à comprendre vraiment ce que sont les Data Cursor, ni à trouver l'objet.. Les data cursor ne sont ni enfants de l'objet axes, ni de la figure, ni même de l'objet Data Cursor (dcm_obj=datacursormode(gcf)) !

    Quelqu'un sait où se cachent les Data Cursor ?

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut
    bon en fait bizarrement la solution se trouvait dans l'aide...

    On y trouve un paragraphe sur les méthodes des Data Cursor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info_struct = getCursorInfo(dcm_obj);
    et info_struct(i).Position donne la position du point.

    Par contre s'il y a bien une méthode pour retrouver les infos, on s'attendrait aussi à un setCursorInfo(dcm_obj, ...) pour pouvoir placer des points manuellement, mais là ça n'a vraiment pas l'air d'exister.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Je pense avoir suffisamment lu la documentation pour dire que ce n'est pas possible de copier directement ces objets.

    Je vais essayer d'illustrer l'idée que j'ai précédemment donnée.

    En prenant l'exemple de la documentation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fig = figure;
    z = peaks;
    plot(z(:,30:35))
    dcm_obj = datacursormode(fig);
    set(dcm_obj,'DisplayStyle','datatip',...
    'SnapToDataVertex','off','Enable','on')
    On clique ensuite sur une des courbes pour faire apparaître le curseur.

    On peut ensuite utiliser cette fonction pour cloner le curseur :
    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
    function copywithdcm(fig,dcm_obj)
     
    newfig = figure;
    ax(1) = findobj('type','axes','parent',fig);
    ax(2) = copyobj(ax(1),newfig);
     
    info_struct = getCursorInfo(dcm_obj);
     
    str{1} = sprintf('x : %.3f',info_struct.Position(1));
    str{2} = sprintf('y : %.3f',info_struct.Position(2));
     
    f = 1.01;
    text(f*info_struct.Position(1),f*info_struct.Position(2),str,'backgroundcolor',[1 1 .8],'edgecolor',[.8 .8 .8],...
        'verticalalignment','bottom')
    hold on
    plot(info_struct.Position(1),info_struct.Position(2),'sk','markerfacecolor','k')
    En tapant directement dans le Command Window :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copywithdcm(gcf,dcm_obj)
    Encore une fois c'est l'idée

  6. #6
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Par défaut
    Merci beaucoup pour l'aide ! Je vois bien comment il faut procéder, je vais retoucher un peu le code pour recopier plusieurs points d'un coup et affiner le placement des légendes.

    Juste par curiosité : Data Cursor échappe aux relations parents-enfants ; il n'est pas non plus descendant de root. Qu'est-ce que c'est ? Est-ce que c'est un quand même un objet graphique ? Pourtant en faisant findobj(dcm_obj), on a bien un pointer...

Discussions similaires

  1. Obtenir une date avec le data cursor
    Par yop3112 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 23/06/2015, 16h46
  2. Un tableau d'objets, direct avec les accolades
    Par TotorolePacha dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 17/05/2013, 15h06
  3. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31
  4. probleme avec "LOAD DATA INFILE" et les b
    Par Koo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/07/2004, 09h37

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