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

MATLAB Discussion :

Utilisation de datacursormode


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut Utilisation de datacursormode
    Bonjour,

    J'utilise le code provenant de cette discussion.

    De mon coté R2012a, la fonction ne retourne rien...

    J'ai a la place une belle erreur : "Attempt to reference field of non-structure array."

    Je ne trouve pas la fonction getCursorInfo dans la doc :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     datacursormode on
      dcmObj = datacursormode(fig);
      set(dcmObj,'Enable','on','DisplayStyle','datatip','SnapToDataVertex','on')
      point = [];
      while length(point) < 4
          btn = waitforbuttonpress;
          if (btn == 0)
              point = getCursorInfo(dcmObj) % Vide
          else
              break;
          end
      end
     
    x = point.Position(1) % Génère l'erreur

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Il faut indiquer "pause" entre set() et getCursorInfo.

    "waitforbuttonpress" ne suffit pas !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Je parviens à utiliser getCursorInfo() grace a l'instruction 'pause' (qui oblige a appuyer sur un bouton, ce qui est tres desagreable) mais je n'arrive pas a enregistrer les variable dans un array.

    je peux afficher le resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Target: 173.0057
        Position: [25.0161 44.8665 1.5930]
    Mais quand j'essaye de l'enregistrer, j'ai une erreur a chaque fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    data(k) = getCursorInfo(dcmObj) 
     
    data{k} = getCursorInfo(dcmObj) 
     
    data(k) = struct2cell(getCursorInfo(dcmObj))
     
    point = getCursorInfo(dcmObj)
    data(k) = [point.Position]
    je souhaiterais obtenir : [[x1,y1,z1], [x2,y2,z2]...]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Et si tu mets une valeur dans pause ?

    Sinon avec la fonction cat :

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé avec pause(1) mais rien n'y fait.

    J'ai remarqué autre chose avec mon code (voir-ci dessus) contenant pause, c'est qu'il y a un resultat seulement si :

    A l'ouverture de ma figure, je fais un click pour recuperer les coordonnés du curseur, puis j'appuie sur un bouton pour faire passer la pause. Ensuite, apres chaque click, getCursorInfo me donne la valeur initiale jusqu'a la boucle terminé...

    Je pense pas que matlab ne sache que prendre UNE coordonné ?

    EDIT : cat() n'a pas l'air de fonctionner

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Il faut donc inclure Set dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for k = 1 : val
              dcmObj = datacursormode(fig);
              set(dcmObj,'DisplayStyle','datatip','SnapToDataVertex','on','Enable','on')
              pause
              btn = waitforbuttonpress;
              if (btn == 0)
                  data(k) = getCursorInfo(dcmObj)
              end
    end
    Si vous connaissez une alternative a "pause" je suis preneur...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Pourrais-tu avoir des messages plus constructifs que
    Citation Envoyé par ocelote Voir le message
    J'ai essayé avec pause(1) mais rien n'y fait.

    cat() n'a pas l'air de fonctionner
    ?
    Citation Envoyé par ocelote Voir le message
    Je pense pas que matlab ne sache que prendre UNE coordonné ?
    Il prend les coordonnées des curseurs présents. S'il n'y en a qu'un, il n'en prendra qu'un
    Pour en avoir plusieurs, il faut appuyer sur la touche 'ALT' en même temps.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Et bien lorsque j'utilise pause(1), le programme se comporte comme si il n'y avait pas de pause. Autrement dit getCursorInfo ne retourne rien.

    De meme pour cat(), il y a toujours une erreur de dimmension.

    Je savais pas pour le bouton Alt, je vais tenter de faire une fonction plus facile d'utilisation...

    Mon dernier bout de code au moins parvient a enregistrer dans la variable data, plusieurs coordonnées. Le hic, c'est que je dois presser espace entre chaque prise de point.

    Pourais tu me montrer une facon d'enregistrer plusieurs points d'un coup dans une variable ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Merci pour la decouverte du bouton ALT

    j'ai reussi a faire quelque chose de propre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data = {};
            while length(data) < 4
               set(dcmObj,'DisplayStyle','datatip','SnapToDataVertex','on','Enable','on')
               warndlg('Select a minimum of 4 points (Alt for multiple selection) and validate by pressing a button !')
               pause
               data = getCursorInfo(dcmObj) 
            end

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

Discussions similaires

  1. [Débutant] Utilisation de datacursormode et ginput
    Par FunkyDidi dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 31/07/2014, 15h43
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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