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 :

(sans guide) Figure visible on/off


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 0
    Points
    0
    Par défaut (sans guide) Figure visible on/off
    Bonjour à tous,

    Je dois générer un grand nombre de figures et pour ne pas ralentir trop le PC (et surtout ne pas prendre la main à l'utilisateur), je génère lesdites figures avec la proprieté visible à off. Ensuite j'ai un petit saveas des familles pour la sauvegarde.

    Par contre, j'aimerais que l'utilisateur lambda puisse ouvrir lesdites figures sans devoir passer, en ligne de commande, un set(gcf, 'visible', 'on');

    Comment feriez vous ?



    De mon coté j'ai creusé un peu cette histoire de visible on/off et repasser en visible on juste avant la sauvegarde n'est pas une option. J'ai été regarder les callback des figures (fail) et les handles connexes (notamment CreateFcn). Ce dernier me semblait prometteur dans le sens ou :

    1- creation figure
    2- set(gcf, 'CreateFcn', 'mafonction()');
    3- saveas

    Me permettait de ne pas déclencher le CreateFcn et donc de ne pas lancer mafonction lors de la 1ere ouverture (création ; ma fonction faisant passer visible à on). Toutefois....il y a comme un problème de persistance : la figure passe momentanément en on puis redevient invisible (off).

    Quid de la persistance sur les uicontrols et autre.



    Pour le moment la seule solution qui semble aboutir est une réouverture de toute les figures créées afin de les passer en visible on avant réenregistrement (via saveas).


    Quelqu'un a-t'il déjà eu un cas de figure (private joke) similaire ?
    Si oui, quelle a été la résolution employée ?

    Merci d'avance,
    Ju

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Je ne peux pas mettre tout le code de génération des figures mais cet extrait devrait suffire :



    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    %%    CREATION des courbes pour 1 scenario
    %--------------------------------------------------------------------------
    function Template_test_scUnitaire(FichierMAT, FonctionsPath, ACTUAL_Scenario, Export_PDF)
     
    clc;
    %warning off;
     
    load(FichierMAT);
    addpath(FonctionsPath)
     
    ['Création de courbes pour ' ACTUAL_Scenario '_Template_test']
     
     
    %% Couleurs 
     
    color_1 = [0, 0, 0]/255;                                    % black - k
    color_1_TEX = '{\color[rgb]{0,0,0}';
     
    color_2 = [255, 0, 0]/255;                                  % red - r
    color_2_TEX = '{\color[rgb]{1,0,0}';                   
     
     
     
    %% Parametrage de la figure
     
        myfig = figure('Name',[ACTUAL_Scenario '_Template_test'], 'NumberTitle', 'off', 'Visible', 'off', 'toolbar', 'default','KeyPressFcn','ft_visible()'); 
     
        scrsz = get(0,'ScreenSize');                                                                    % Obtention de la taille de l'écran
        set(myfig,'Position',[scrsz(3)/100 scrsz(4)/15 scrsz(3)/1.02 scrsz(4)/1.2],'Color','w');        % Reglage de la taille de la figure (pour saveas)
     
        annotation('textbox', [0.45 0.99 0 0], 'FitBoxToText', 'OFF', 'String', ACTUAL_Scenario, 'interpreter', 'none');%, 'BackgroundColor', [0.7 0.7 0.7]);
        annotation('textbox', [0.5 0.04 0 0], 'FitBoxToText', 'OFF', 'String', 'Time(s)', 'interpreter', 'none');
     
        %name = ['C:\A320_simu\FichierCourbe\' ACTUAL_Scenario '_test.fig'];
        %set(myfig, 'CreateFcn', 'ft_visible()');
        %set(myfig, 'DeleteFcn', 'ft_visible()');
        %set(myfig, 'DeleteFcn', @ft_close);
     
     
     
    %% axe 1
     
        axe(1) = subplot('Position',[0.15, 0.6, 0.84, 0.35]);         %  subplot('Position',[left bottom width height]) 
        hold on;  
        grid on;
     
        set(axe(1), 'XMinorGrid','on', 'YMinorGrid','on');
        set(axe(1), 'Xcolor',[0.7 0.7 0.7], 'Ycolor',[0.7 0.7 0.7]);
     
        % titi ---- p110
        if(exist('titi', 'var') == 1) 
            p110 = plot(titi.time, titi.signals.values(:,1),'k', 'displayname', 'titi');
            set(p110,'Color',color_1 );
            set(p110, 'Visible', 'on');
        end
     
        annotation('textbox', [0.15 0.98 0 0], 'FitBoxToText', 'OFF', 'String', 'm/s', 'interpreter', 'none');
     
    %% axe 2
     
        axe(2) = subplot('Position',[0.15, 0.2, 0.84, 0.35]);         %  subplot('Position',[left bottom width height]) 
        hold on;
        grid on;
     
        set(axe(2), 'XMinorGrid','on', 'YMinorGrid','on');
        set(axe(2), 'Xcolor',[0.6 0.6 0.6], 'Ycolor',[0.6 0.6 0.6]);
     
        % tata_------------------------ p210
        if(exist('tata', 'var') == 1)
            p210 = plot(tata.time, tata.signals.values(:,1),'b', 'displayname','tata');
            set(p210,'Color',color_2 )
            set(p210, 'Visible', 'on');
        end
     
        annotation('textbox', [0.15 0.58 0 0], 'FitBoxToText', 'OFF', 'String', 'mA', 'interpreter', 'none');
     
     
    %% axe 3 : 
     
        axe(3) = subplot('Position',[0.15, 0.05, 0.84, 0.1]);         %  subplot('Position',[left bottom width height]) 
        hold on;
        grid on;
     
        set(axe(3), 'XMinorGrid','on', 'YMinorGrid','on');
        set(axe(3), 'Xcolor',[0.6 0.6 0.6], 'Ycolor',[0.6 0.6 0.6]);
     
        % toto------------------------ p310
        if(exist('toto', 'var') == 1)
            p310 = plot(toto.time, toto.signals.values(:,1),'k', 'displayname', 'toto');
            set(p310,'Color',color_2 )
            set(p310, 'Visible', 'on');
        end
     
        annotation('textbox', [0.15 0.18 0 0], 'FitBoxToText', 'OFF', 'String', 'bar', 'interpreter', 'none');
     
     
    %% UI Controls  AXE1
     
    %% UI Controls  AXE2
     
    %% UI Controls  AXE3
     
    %% Sauvegarde et Arret    
     
        set(myfig,'toolbar','figure');  % pour forcer la barre avec les zooms
        linkaxes(axe, 'x')      % zoom liés sur l'axe y uniquement pour les 3 axes
     
        name = ['C:\A320_simu\FichierCourbe\' ACTUAL_Scenario '_test.fig'];
        saveas(gcf, name);
     
        if (Export_PDF == 'y') 
                name_pdf =  ['C:\A320_simu\FichierCourbe\'  ACTUAL_Scenario '_test.pdf'];
     
                set(gcf,'PaperOrientation','landscape');
                set(gcf,'PaperPosition',[0 0 29.7 21]);
                saveas(gcf, name_pdf);
        end
     
        close all
     
    end   
    %% FIN
    Mes derniers tentatives portant sur les lignes 26, 35 à 37.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function  ft_visible()
     
        set(gcf, 'Visible', 'on');
     
    end

  3. #3
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Citation Envoyé par Julien12 Voir le message

    Par contre, j'aimerais que l'utilisateur lambda puisse ouvrir lesdites figures sans devoir passer, en ligne de commande, un set(gcf, 'visible', 'on');

    Comment feriez vous ?
    Pour récupérer les identifiants (handles) de toutes les fenêtres ouvertes, j'utiliserais FINDOBJ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mes_figs = findobj('Type', 'figure', 'Visible', 'off');
    Et pour simplifier la visualisation, tu peux spécifier pour chaque figure un nom "parlant" par exemple via la propriété Name et donner la liste à l'utilisateur via la fonction LISTDLG:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listdlg('ListString', get(mes_figs, 'Name'))
    D'où une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function afficher_fenetre
     
    mes_figs = findobj('Type', 'figure', 'Visible', 'off');
    choix = listdlg('ListString', get(mes_figs, 'Name'));
    if isempty(choix); return; end
     
    set(mes_figs(choix), 'Visible', 'on')
    Duf

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Hum...

    Je viens de tester et effectivement c'est plus robuste que le gcf
    et le coup de la listdlg est sympa !

    J'ai tout d'abord été tenté de dire que ça ne résoud pas mon problème
    mais je pense que c'est du à ce message la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ans =
     
    Création de courbes pour Test_base_0001_01_Template_test
     
    appel
    ??? Error using ==> struct2handle
    Undefined function or variable 'ft_visible'.
     
    ??? Error using ==> struct2handle
    Error while evaluating uicontrol CreateFcn
    Message dont la partie ??Error n'apparait qu'après la selection dans la listdlg.

    Pour info re-voici mon appel à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        set(myfig, 'CreateFcn', @ft_visible);
    Et la fonction elle-meme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %% Fonction permettant de mettre la figure en visible on
    function  ft_visible(obj,event)
     
        disp('appel');
     
        mes_figs = findobj('Type', 'figure', 'Visible', 'off');
        choix = listdlg('ListString', get(mes_figs, 'Name'));
     
        if isempty(choix); return; end
     
        set(mes_figs(choix), 'Visible', 'on')

    En faisant quelques tests voici ce qui se passe :
    1- creation visible off -> nickel
    2- appel#1
    2a- listdlg apparait : 1 choix possible (donc je le valide)
    2b- apparition de la figure (visible on)
    2c- message d'erreur
    2d- disparition de la figure (visible off)
    3- appel#2 (il faut bien tester ^^)
    3a- listdlg apparait : 2 choix possibles (je prend pas le premier qui semble etre le en cours mais le précédent)
    3b- apparition de la figure n-1
    3c- pas de soucis


    J'en déduis que le soucis vient du CreateFcn, la figure est EN TRAIN d'être créée ce qui veut dire qu'il doit avoir des soucis avec le nom (msg d'erreur ?) et qu'ensuite il la passe en visible off.

    Après je ne suis pas expert (hélas) donc si quelqu'un à une autre interpretation.... Je vais voir s'il y a un handle sur un ui qui se déclencherait genre après la création de la figure.

    En tout cas ça m'a permis d'y voir plus clair =)
    Merci !


    edit : même soucis si placé sur le CreateFcn d'une annotation.
    edit : un appel de la fonction AVANT l'initialisation de la figure semble problématique...

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    Je reposte carrement :

    le messagfe d'erreur était du à un artefact d'un précédent test.

    En reglant le soucis plus de message d'erreur mais la problématique
    reste la même. Le premier appel à figure me propose 1 choix qu'il
    passe momentannement en visible on avant que la figure disparaisse
    de nouveau.

    Le deuxieme appel en selectionnant la figure précédente la passe bien en visible (le CreateFcn n'étant en cours que pour la figure actuelle) et donc
    la pas de soucis.

    Bref, le CreateFcn m'embete...


    edit : l'idée serait donc de trouver un équivalent à un handle 'iscreated'

Discussions similaires

  1. Restauration WinRe sans partition WinRe visible
    Par leo2v2o dans le forum Windows Vista
    Réponses: 0
    Dernier message: 01/09/2011, 09h18
  2. Probleme onglet (proprieté visible on/off) superposition de courbe
    Par Robin-a dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 03/12/2009, 13h31
  3. Texshop: composer un pdf sans les figures
    Par timbrochier dans le forum Débuter
    Réponses: 8
    Dernier message: 31/07/2008, 11h01
  4. Popupmenu et callbacks (sans GUIDE)
    Par pwfsic dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 08/06/2007, 17h31
  5. Evolution: ToolBar Visibility On/Off
    Par Jeweller dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/06/2006, 14h09

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