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 :

Handle d'un axe non reconnu


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut Handle d'un axe non reconnu
    bonjour à tous

    Après une longue absence (parce que j'ai été un bon élève et j'ai bien retenu les leçons de ce forum ) et beaucoup de dévloppement, me revoilà avec un petit soucis avec des handle sur un GUI... Je m'explique:


    J'ai une zone axes qui me permet d'afficher une image. Cette image doit changer selon le choix d'un utilisateur. Dans ma fonction principale, j'ai donc le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ax = axes('Units','pixels',... 
            'position',[415 255 535 125],...
            'tag','representation_CSB');
     
        img = imread('CSB_vis.bmp', 'bmp');  % lecture du fichier image
        image(img,'Parent',ax)  % Mise en place de l'image
        axis off    % Retrait des axes
    A la fin de cette première fonction, j'utilise le classique
    data = guihandles(gcf);
    puis
    guidata(gcf,data)


    Dans la fonction du bouton qui me modifie l'image, j'ai le code suivant
    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
     
    data = guidata(gcbf);
     
    delete (data.representation_CSB);
        switch type
            case 'Vis'
                % Mis à jour de la représentation des cotes sur billes
                data.representation_CSB = axes('Units','pixels',... 
                    'position',[415 255 535 125],...
                    'tag','representation_CSB');
     
                    img = imread('CSB_vis.bmp', 'bmp');  % lecture du fichier image
                    image(img,'Parent',data.representation_CSB)  % Mise en place de l'image
                    axis off    % Retrait des axes
     
            case 'Ecrou'
                data.representation_CSB = axes('Units','pixels',... 
                    'position',[415 255 535 125],...
                    'tag','representation_CSB');
     
                    img = imread('CSB_ecrou.bmp', 'bmp');  % lecture du fichier image
                    image(img,'Parent',data.representation_CSB)  % Mise en place de l'image
                    axis off    % Retrait des axes
        end
    Mon soucis surviens avec le message d'erreur suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Reference to non-existent field 'representation_CSB'.
     
    Error in ==> GUI_Nouveau_Releve>choix_piece at 453
        delete (data.representation_CSB);

    Après vérification (via un points d'arrêt), je m'appercois qu'à la fin de ma fonction principale, le champs representation_CSB de ma strucutre data n'apparait pas
    Or les handle des autres objets définis avant et après cet axe apparaissent normalement

    J'ai déjà appliqué cette technique ailleur, dans un autre programme qui fonctionnait très bien... Mais la, je bloque

    Si vous avez une petite idée, je vous en serais très reconnaissant
    En attendant, j'ai une solution paliative (mais pas esthétique ) qui consiste à ne pas afficher d'image 'par défaut'. Il y a donc un espace vide qui ne se remplis que lorsque que l'utilisateur active un bouton...

    Je vous remercie d'avance

    Bonne journée à vous.
    Cordialement,
    Ursamajor

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    D'après ce que je vois dans le callback, je dirais que le code de début serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ax = axes('Units','pixels',... 
            'position',[415 255 535 125],...
            'tag','representation_CSB');
        
        img = imread('CSB_vis.bmp', 'bmp');  % lecture du fichier image
        image(img,'Parent',ax)  % Mise en place de l'image
        axis off    % Retrait des axes 
    data = guihandles(gcf);
    data.representation_CSB =ax;
    guidata(gcf,data)
    Par contre pour le callback, je ne vois pas pourquoi tu fais un delete sur l'Axes pour le recréer. Ceci devrait suffir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data = guidata(gcbf);
    switch type
        case 'Vis'
            % Mis à jour de la représentation des cotes sur billes
            img = imread('CSB_vis.bmp', 'bmp');  % lecture du fichier image
        case 'Ecrou'
            img = imread('CSB_ecrou.bmp', 'bmp');  % lecture du fichier image
    end
    image(img,'Parent',data.representation_CSB)  % Mise en place de l'image

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    Ah oui, en effet, ça marche tout seul

    Pour ce qui est de la suppressions de l'image, j'avais fais cela pour un autre code (mais qui comportait des courbes). En effet, les courbes se suppreposaient au courbes déjà existantes, ce qui faisait un gros pâté

    Bon, je vais peut-être revoir ça (pour l'autre code), vu que tu m'as donnée une bonne idée!

    Merci et @ bientôt,
    Ursamajor


    EDIT: Le code 'tag','representation_CSB' n'est donc plus nécessaire

    Une explication serait-elle possible pour comprendre pouquoi l'utilisation de 'tag','representation_CSB' puis de guidata ne permet pas d'obtenir le handle de cet axe?

  4. #4
    Invité
    Invité(e)
    Par défaut
    La méthode que tu emploies est bonne: renseigner le Tag et l'utiliser par la suite... sauf que les fonctions imshow/image ont le vilain effet d'effacer ce Tag sous certaines conditions
    Why is the Tag property of the parent axes not retained when using the IMSHOW function?

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur mécanique
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    Ceci explique donc cela

    Je te remercie pour ces réponses et surtout pour la rapidité de celles-ci!
    Merci beaucoup

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

Discussions similaires

  1. [Lomboz] [JBoss] JBoss 3.2.6 non reconnu par Lomboz ?
    Par romain3395 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 17/12/2004, 16h35
  2. Commandes non reconnues.
    Par Manu' dans le forum Administration système
    Réponses: 3
    Dernier message: 07/10/2004, 17h09
  3. [EJB] [JSP] Méthode EJB non reconnue dans jsp
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/07/2004, 09h52
  4. Creation de table, caractère non reconnu
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/02/2004, 13h28
  5. xslt_create() non reconnu
    Par BRAUKRIS dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 11/12/2003, 14h43

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