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 :

Région d'intérêt point à point


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut Région d'intérêt point à point
    Bonjour,

    Je souhaite faire une région d'intérêt sous matlab mais pas avec la méthode des polygones de la fonction impoly mais en sélectionnant les points un à un.
    il faut en effet que je sélectionne quelque chose de très précis, pour cela je fais un zoom puis je souhaite choisir pixel à pixel à l'aide de la souris la région d'intérêt.

    Connaissez-vous une méthode pour faire ça ?
    j'essaye avec ginput mais je ne vois pas comment gérer facilement le zoom (remonter aux indices des pixels sur la matrice d'origine), et j'aurais bien aimer que ça marque, color, les pixels déjà choisis

    Merci

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

    Tu trouveras un début de solution dans ce message;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    merci,

    je vais regarder ça.

    si je comprend bien, ça fait ce que je veux, sauf la gestion du zoom c'est ça ?

    a+

  4. #4
    Invité
    Invité(e)
    Par défaut
    À toi de voir selon ton cas si cela correspond, mais tu as tout à fait la possibilité d'utiliser le zoom de MATLAB.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    J'ai un problème avec les nested function.

    message d'erreur
    functions are nested to deeply.
    Illegal use of reserved keyword "end".
    comment on fait dans ce cas ?

    Parce que si je comprends bien je n'en ai pas d'autre que celles proposées dans le code sur le lien que tu donnes Winjerome.
    Toutes mes autres fonctions sont des fonctions "classiques" séparées normalement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Pourrais-tu poster la structure de ton code (avec essentiellement les function nomFonction et les "end")?
    Je t'invite (si ce n'est déjà fait) à regarder le tutoriel Développement efficace des interfaces graphiques (GUI) ainsi que ce message.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    Alors le premier code, c'est ce que j'utilise pour le moment
    une fonction freehand pour faire ma roi :

    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
     
    function measure_arterial_input_Callback(hObject, eventdata, handles)
    % hObject    handle to measure_arterial_input (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    global images
    global signal_artere
     
    scans_choisis=get(handles.soft_list_box,'Value');
     
    zoom off
     
    bolusim.image = images.image(scans_choisis)
    soft_image = findobj(allchild(0),'Tag','soft_image');
    soft_axes = get(soft_image,'Parent');
    %axes(soft_axes);
    axes(handles.soft_axes);
    str = get(findobj(allchild(0),'Tag','soft_list_box'),'string');
    selected_scan = [num2str(bolusim.image.scan_number) ':' num2str(bolusim.image.reco_number) ' ' bolusim.image.acq.ppl_name];
    for k=1:numel(str)
        if ~isempty(strfind(selected_scan,str{k}))
            k_save = k;
        end
    end
     
    h = imfreehand(handles.soft_axes);
    position = wait(h);
    delete(h);
    temp=get(soft_image,'CData');
    [dummy bw]=roifill(zeros(size(temp)),round(position(:,1)),round(position(:,2)));
    mask = logical(repmat(cast(bw,'double'),[1 1]));
     
    signal_artere = zeros(size(bolusim.image.reco.data,5),3);
    image_temp = squeeze(bolusim.image.reco.data(:,:,bolusim.image.reco.displayedecho,bolusim.image.reco.displayedslice,:));
    signal_artere(:,1) = [1:1:size(bolusim.image.reco.data,5)].*bolusim.image.acq.tr;
    for i = 1:size(bolusim.image.reco.data,5)
        image_tempi = image_temp(:,:,i);
        signal_artere(i,2) = mean(image_tempi( mask~= 0));
        signal_artere(i,3) = std(image_tempi( mask~= 0));
    end
     
    zoom out
    set(handles.zoom_toggle,'String','Zoom on','Value',0);
     
    figure;
    errorbar(signal_artere(:,1),signal_artere(:,2),signal_artere(:,3));
    et du coup quand j'ai voulu intégrer les fonction que tu proposes j'ai fait ça pour le moment :

    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
    function measure_arterial_input_Callback(hObject, eventdata, handles)
    % hObject    handle to measure_arterial_input (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    global images
    global signal_artere
     
    scans_choisis=get(handles.soft_list_box,'Value');
     
    zoom off
     
    index = 1;
    coordonnees = [];
     
    soft_image = findobj(allchild(0),'Tag','soft_image');
    soft_axes = get(soft_image,'Parent');
    axes(handles.soft_axes);
    h = gcf;
     
    cmenu = uicontextmenu;
    uimenu(cmenu, 'Label', 'Red', 'Callback',@(obj,evnt)FillColor('r'));
    uimenu(cmenu, 'Label', 'Blue','Callback',@(obj,evnt)FillColor('b'));
    set(handles.soft_axes,'UIContextMenu',cmenu);
    set(handles.soft_axes,'ButtonDownFcn',@begin_dessiner);
    set(h,'WindowButtonUpFcn',@end_dessiner);
     
    hold on
     
         function begin_dessiner(src,evnt)
                set(gcbf,'pointer','circle')
                set(gcbf,'WindowButtonMotionFcn',@dessiner)
         end
     
         function end_dessiner(src,evnt)
              set(gcbf,'WindowButtonMotionFcn',[])
              set(gcbf,'pointer','default')
         end
     
         function dessiner(src,evnt)
              cp = get(gca,'CurrentPoint');
              coordonnees(index,:) = cp(1,1:2);
              plot(coordonnees(index,1),coordonnees(index,2),'r.');
              index = index +1;
         end
     
     
         function FillColor(color)
              delete(findobj('type','line','color','r')); % efface les points rouges tracés pendant le %traçage du contour
              fill(coordonnees(:,1),coordonnees(:,2),color)
              coordonnees = [];
              index = 1;
          end
    end
    mais il me fait les erreurs mentionner plus haut et je suis bloqué pour le moment

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par svagrim Voir le message
    Illegal use of reserved keyword "end".
    Il y a un END en trop à la fin (ligne 57) du second code que tu nous montres.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    ce end vient d'une erreur de copier coller,
    désolé.

    si j'enlève les end à chaque sous fonctions il ne plante plus, mais il ne fait plus rien ... il va jusqu'au hold on ligne 28 mais ne rentre pas dans les fonctions imbriquées.
    je ne comprend pas bien les end dans les nested functions.
    je vois des exemples sur le forum où il n'y en a pas et des exemples où il y en a.
    ça dépend de la version de matlab ?

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    En simplifiant un peu, pour créer une fonction à l'intérieur d'une autre fonction il y a deux méthodes.

    La première consiste à utiliser des sous-fonctions. Dans ce cas, les variables sont transmises uniquement par arguments d'entrée et/ou de sortie (comme pour une simple fonction). Il n'y a pas de END à la fin des fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function E = fun(A,B)
     
    C = subfun1(A);
    D = subfun2(A,B);
     
    E = C+D ;
     
       function C = subfun1(A)
     
       C = ...;
     
       function D = subfun2(A,B)
     
       D = ...;
    L'autre solution consiste à utiliser des fonctions imbriquées. Dans ce cas, si les variables sont définies avant l'appel de chaque fonction, elles deviennent en quelque sorte "globale" à l'intérieur de la fonction mère. Chaque fonction imbriquée doit se terminer par un END ainsi que la fonction mère englobante.

    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
    function E = fun(A,B)
     
    C = [];
    D = [];
     
    nestedfun1;
    nestedfun2;
     
    E = C+D ;
     
       function nestedfun1
     
       C = ...;
     
       end
     
       function nestedfun2
     
       D = ...;
     
       end
     
    end
    Les fonctions imbriquées ont été introduites avec les versions R14 de MATLAB si je ne me trompe pas.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    alors j'utilise matlab R2009b.
    (je ne connais pas R14, c'est une autre notation des versions ?)

    pour les fonctions imbriquées (nested), il en veut pas.
    erreurs citées plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Illegal use of reserved keyword "end"
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Functions are nested too deeply
    quand je passe à des sous fonctions, il ne plante pas mais ne fait rien.
    il s'arrête au hold on et ne rentre pas dans les sous fonctions.
    d'ailleurs ne faudrait-il pas plutôt utiliser une fonction wait pour détecter les ButtonDownFcn?

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par svagrim Voir le message
    alors j'utilise matlab R2009b.
    (je ne connais pas R14, c'est une autre notation des versions ?)
    Voir la : Quelles sont les différentes versions de MATLAB ?

    La R14 est bien plus ancienne que la R2009b qui elle supporte parfaitement les fonctions imbriquées.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Essaie ceci :

    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
    function measure_arterial_input_Callback(hObject, eventdata, handles)
    % hObject    handle to measure_arterial_input (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % global images
    % global signal_artere
    % 
    % scans_choisis=get(handles.soft_list_box,'Value');
     
    zoom off
     
    handles.index = 1;
    handles.coordonnees = [];
     
    % soft_image = findobj(allchild(0),'Tag','soft_image');
    % soft_axes = get(soft_image,'Parent');
    axes(handles.soft_axes);
    hold on
     
    cmenu = uicontextmenu;
    uimenu(cmenu, 'Label', 'Red', 'Callback',{@FillColor,'r'});
    uimenu(cmenu, 'Label', 'Blue','Callback',{@FillColor,'b'});
    set(handles.soft_axes,'UIContextMenu',cmenu);
    set(handles.soft_axes,'ButtonDownFcn',@begin_dessiner);
    set(gcf,'WindowButtonUpFcn',@end_dessiner);
     
    guidata(gcf,handles);
     
    function begin_dessiner(src,evnt)
    set(gcbf,'pointer','circle')
    set(gcbf,'WindowButtonMotionFcn',@dessiner)
     
    function end_dessiner(src,evnt)
    set(gcbf,'WindowButtonMotionFcn',[])
    set(gcbf,'pointer','default')
     
    function dessiner(src,evnt)
     
    handles = guidata(gcf);
     
    cp = get(handles.soft_axes,'CurrentPoint');
    handles.coordonnees(handles.index,:) = cp(1,1:2);
    plot(handles.coordonnees(handles.index,1),handles.coordonnees(handles.index,2),'r.');
    handles.index = handles.index +1;
     
    guidata(h,handles);
     
    function FillColor(src,evnt,color)
     
    delete(findobj('type','line','color','r')); % efface les points rouges tracés pendant le %traçage du contour
     
    handles = guidata(gcf);
     
    fill(handles.coordonnees(:,1),handles.coordonnees(:,2),color)
    handles.coordonnees = [];
    handles.index = 1;
     
    guidata(h,handles);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    avec ce code quand je clique sur l'image je rentre dans la sous fonction end_dessiner
    mais je ne rentre jamais dans begin_dessiner

    j'ai essayer en mettant gcf pour begin_dessiner aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(gcf,'ButtonDownFcn',@begin_dessiner);
    mais ça n'a rien changé.
    je n'arrive toujours pas à rentrer dans begin_dessiner.

  15. #15
    Invité
    Invité(e)
    Par défaut
    En fait à l'origine, ce code a été fait pour ajouter les points lorsque l'utilisateur bouge la souris avec le bouton enfoncé.
    En fait tu y rentres, mais il faut que tu bouges la souris (WindowButtonMotionFcn) pour que "ça compte".

    Si tu veux que tes points soient comptabilisés lors de l'appui, il te faut mettre le code du WindowButtonMotionFcn dans le ButtonDownFcn.

    Un condition du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if strcmp(get(handleZoom,'Enable'),'off')
        % ...
    end
    te sera alors je pense utile.

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Il faut mettre la propriété Hittest de l'objet Image à Off au début du Callback.

    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
    function measure_arterial_input_Callback(hObject, eventdata, handles)
    % hObject    handle to measure_arterial_input (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
     
    soft_image = findobj(allchild(0),'Tag','soft_image');
    set(soft_image,'hittest','off')
     
    ....
     
    function end_dessiner(src,evnt)
    set(gcbf,'WindowButtonMotionFcn',[])
    set(gcbf,'pointer','default')
    soft_image = findobj(allchild(0),'Tag','soft_image');
    set(soft_image,'hittest','on')
     
    ....
    Tu peux sans doute utiliser la structure Handles à la place de FINDOBJ
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    si je change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.soft_axes,'ButtonDownFcn',@begin_dessiner);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(gcf,'WindowButtonDownFcn',@begin_dessiner);
    alors je rentre dans la fonction begin_dessiner,
    qui me renvoie lorsque je bouge à la fonction dessiner.

    une fois dedans j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Error in ==> soft>dessiner at 9310
    handles.coordonnees(handles.index,:) = cp(1,1:2);
     
    ??? Error while evaluating figure WindowButtonMotionFcn
     
    ??? Attempt to reference field of non-structure array.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    en ajoutant les codes hittest on et off
    j'arrive à colorier

    par contre pas du tout au bon endroit ....
    quand je veux colorier juste au dessus de l'oeil droit par exemple je colorie en haut à gauche ...

    je précise que la fonction zoom utilisé ou pas, ça ne change rien au problème et que la figure se trouve au milieu d'un gui qui a une fenetre d'affichage indépendante de la taille d'image. il echelonne automatiquement.
    Images attachées Images attachées  

  19. #19
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Y-a-t-il plusieurs objets Axes ?

    Quel est la propriété NextPlot de l'objet handles.soft_axes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get(handles.soft_axes,'NextPlot')
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 245
    Points : 110
    Points
    110
    Par défaut
    ah désolé,

    le problème de localisation vient de moi, dans la fonction dessiner j'avais mis set(gcbf, ...)
    au lieu de set(hangles.soft_axes, ....)

    donc de ce coté là c'est bon.

    maintenant je vais modifier pour que je clique sur chaque pixel eu lieu de devoir bouger la souris, et faire que quand je clique à nouveau sur un pixel il l'efface.

    par contre je ne rentre jamais dans la fonction FillColor, c'est normal ?

    et même si ça "marche" j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Error in ==> soft>dessiner at 9318
    guidata(h,handles);
     
    ??? Error while evaluating figure WindowButtonMotionFcn
     
    ??? Undefined function or variable 'h'.
    et je suis pas sur que les sousfonctions soient compris comme des sousfonctions.

    c'est à dire que même si je ne suis plus dans la fonction principale,
    lorsque je bouge la souris avec le bouton appuyer, il rentre dans les sousfonctions.
    et du coup plante puisque il ne connait plus les variables.

    et du coup j'ai un conflit sur les actions de souris.
    c'est à dire que normalement (quand je suis pas dans la fonction principale) si je bouge la souris il y a une fonction me donnant la valeur et la localisation du pixel et si je clique il trace un profil.
    là par moment il veut me faire tout à la fois

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 11
    Dernier message: 25/07/2012, 18h56
  2. Réponses: 4
    Dernier message: 08/09/2010, 01h35
  3. Réponses: 10
    Dernier message: 25/05/2007, 10h54
  4. Réponses: 1
    Dernier message: 08/11/2006, 21h14
  5. [Cfont] Caractère point à point
    Par dje41 dans le forum MFC
    Réponses: 4
    Dernier message: 22/04/2005, 16h06

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