[Scilab-users] Callback in checkbox for multiple figures

classic Classic list List threaded Threaded
4 messages Options
Iza Iza
Reply | Threaded
Open this post in threaded view
|

[Scilab-users] Callback in checkbox for multiple figures

Hello,

In my programme in Scilab I create a figure with one plot and a checkbox
which turns on/off the visibility of some parts of the plot. The
callback function of checkbox works fine when there is only one figure,
but when there are, for example, two figures the callback works on the
current figure not the one I want to change (because I use gca). Here is
the part with definition of the checkbox and callback function:

box_num_w=uicontrol(przel,"style","checkbox","backgroundcolor",..
[1 1 1],"value",1,"string","Numery
węzłów","callback","niewidoczne_num_w");

function niewidoczne_num_w()
      a=gca;
      if get(gcbo,"value")==0 then
          value=get(gcbo,"value")
          a.children(7).visible="off";
      else
          a.children(7).visible="on";
      end
endfunction


I was trying to change the definition of a by using gcbo but none of my
versions works.
I would appreciate any help.

Kind regards,
Iza
_______________________________________________
users mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users
mottelet mottelet
Reply | Threaded
Open this post in threaded view
|

Re: Callback in checkbox for multiple figures

Hello Iza,

If your uicontrol and your Axes are children of the same Figure, you can recover the Axes relatively, like in this small example:
function cbfun()
    h=gcbo();
    ax=h.parent.children(2);
    ax.children(1).visible=h.value;
endfunction 

scf(0)
clf
uicontrol("style","checkbox","backgroundcolor",..
[1 1 1],"value",1,"callback","cbfun");
t=linspace(0,2*%pi,100);
plot(t,sin(t))
plot(t,cos(t))

scf(1)
clf
uicontrol("style","checkbox","backgroundcolor",..
[1 1 1],"value",1,"callback","cbfun");
t=linspace(0,2*%pi,100);
plot(t,sin(t))
plot(t,cos(t))
S.

Le 19/04/2018 à 13:28, Izabela Wójcik-Grząba a écrit :
Hello,

In my programme in Scilab I create a figure with one plot and a checkbox which turns on/off the visibility of some parts of the plot. The callback function of checkbox works fine when there is only one figure, but when there are, for example, two figures the callback works on the current figure not the one I want to change (because I use gca). Here is the part with definition of the checkbox and callback function:

box_num_w=uicontrol(przel,"style","checkbox","backgroundcolor",..
[1 1 1],"value",1,"string","Numery węzłów","callback","niewidoczne_num_w");

function niewidoczne_num_w()
     a=gca;
     if get(gcbo,"value")==0 then
         value=get(gcbo,"value")
         a.children(7).visible="off";
     else
         a.children(7).visible="on";
     end
endfunction


I was trying to change the definition of a by using gcbo but none of my versions works.
I would appreciate any help.

Kind regards,
Iza
_______________________________________________
users mailing list
[hidden email]
https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users


-- 
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet

_______________________________________________
users mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users
Iza Iza
Reply | Threaded
Open this post in threaded view
|

Re: Callback in checkbox for multiple figures

Thank you for your reply. I am not sure why, but your solution doesn't
work in my example. Maybe it's because the plot and the checkbox are in
different frames?

Here is my example code (which is a part of my whole programme):

// Definition of figure

f=figure("dockable","off","infobar_visible","off","toolbar_visible","off",..
"toolbar","none","menubar_visible","on","default_axes",..
"off","layout","border","figure_size",[900,750],"background",-2);

// Definition of left frame with the controler of visibility

r_lewa=uicontrol(f,"style","frame","constraints",createConstraints("border",..
"left",[200,0]),"border",createBorder("titled",..
createBorder("line","lightGray",1),("Kontrola rysunku"),..
"center","top"),"backgroundcolor",[1 1 1],"layout_options",..
createLayoutOptions("grid",[2,1]),"layout","grid");

// Definition of right frame with plot

r_prawa=uicontrol(f,"style","frame","constraints",createConstraints("border",..
"center"),"backgroundcolor",[1 1 1]);

newaxes(r_prawa);
drawlater;

// Drawing a plot

x_fix=[1 2 3];y_fix=[2 3 1];z_fix=[1 2 1];
param3d1(x_fix,y_fix,z_fix);
h1=gce();

h1.line_mode="off";
h1.mark_mode="on";
h1.mark_style=9;
h1.mark_foreground=5;
h1.mark_background=5;

// Numbering of points

xstring(x_fix,y_fix,string([1:3]));
num_w=gca().children(1).children;
for i=1:3
     num_w(4-i).data(3)=z_fix(i);
     num_w(i).font_size=3;
end

// Settings of the plot

a=gca();
a.data_bounds=[min(x_fix)-1,min(y_fix)-1,min(z_fix)-1;max(x_fix)+1,max(y_fix)+1,max(z_fix)+1];
a.box="back_half";
a.isoview="on";
a.hidden_axis_color=12;
a.rotation_angles=[-110,245];
title("Siatka ciegnowa w rownowadze","fontsize",4);

// Creating a frame inside the left frame for the controller of
visibility

przel=uicontrol(r_lewa,"style","frame","constraints",..
createConstraints("gridbag",[1 1 1 1],[0,0],"both","upper"),"border",..
createBorder("titled",createBorder("line","lightGray",1),..
("Widocznosc"),"center","top"),"backgroundcolor",[1 1 1],..
"layout_options",createLayoutOptions("grid",[1,1]),"layout","grid");

// Definition of checkbox which turns on/off the visibility of point
numbers

box_num_w=uicontrol(przel,"style","checkbox","backgroundcolor",..
[1 1 1],"value",1,"string","Numery wezlow","callback","cbfun");

// Callback function definition

function cbfun()
     h=gcbo();
     ax=h.parent.children(1).children(1);
     ax.children(1).visible=h.value;
endfunction





W dniu 19.04.2018 14:35, Stéphane Mottelet napisał(a):

> Hello Iza,
>
> If your uicontrol and your Axes are children of the same Figure, you
> can recover the Axes relatively, like in this small example:
>
> function cbfun()
>     h=gcbo();
>     ax=h.parent.children(2);
>     ax.children(1).visible=h.value;
> endfunction
>
> scf(0)
> clf
> uicontrol("style","checkbox","backgroundcolor",..
> [1 1 1],"value",1,"callback","cbfun");
> t=linspace(0,2*%pi,100);
> plot(t,sin(t))
> plot(t,cos(t))
>
> scf(1)
> clf
> uicontrol("style","checkbox","backgroundcolor",..
> [1 1 1],"value",1,"callback","cbfun");
> t=linspace(0,2*%pi,100);
> plot(t,sin(t))
> plot(t,cos(t))
>  S.
>
> Le 19/04/2018 à 13:28, Izabela Wójcik-Grząba a écrit :
>
>> Hello,
>>
>> In my programme in Scilab I create a figure with one plot and a
>> checkbox which turns on/off the visibility of some parts of the
>> plot. The callback function of checkbox works fine when there is
>> only one figure, but when there are, for example, two figures the
>> callback works on the current figure not the one I want to change
>> (because I use gca). Here is the part with definition of the
>> checkbox and callback function:
>>
>> box_num_w=uicontrol(przel,"style","checkbox","backgroundcolor",..
>> [1 1 1],"value",1,"string","Numery
>> węzłów","callback","niewidoczne_num_w");
>>
>> function niewidoczne_num_w()
>> a=gca;
>> if get(gcbo,"value")==0 then
>> value=get(gcbo,"value")
>> a.children(7).visible="off";
>> else
>> a.children(7).visible="on";
>> end
>> endfunction
>>
>> I was trying to change the definition of a by using gcbo but none of
>> my versions works.
>> I would appreciate any help.
>>
>> Kind regards,
>> Iza
>> _______________________________________________
>> users mailing list
>> [hidden email]
>>
> https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users
>
> --
> Stéphane Mottelet
> Ingénieur de recherche
> EA 4297 Transformations Intégrées de la Matière Renouvelable
> Département Génie des Procédés Industriels
> Sorbonne Universités - Université de Technologie de Compiègne
> CS 60319, 60203 Compiègne cedex
> Tel : +33(0)344234688
> http://www.utc.fr/~mottelet
> _______________________________________________
> users mailing list
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/users
_______________________________________________
users mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users
Iza Iza
Reply | Threaded
Open this post in threaded view
|

Re: Callback in checkbox for multiple figures

In reply to this post by mottelet
Ok, I think I got it. In my example gcbo() is a handle of checkbox which
is in a frame which is in another frame, so I should recall different
level in a function cbfun().

Thanks a lot for your help.

Iza





W dniu 19.04.2018 14:35, Stéphane Mottelet napisał(a):

> Hello Iza,
>
> If your uicontrol and your Axes are children of the same Figure, you
> can recover the Axes relatively, like in this small example:
>
> function cbfun()
>     h=gcbo();
>     ax=h.parent.children(2);
>     ax.children(1).visible=h.value;
> endfunction
>
> scf(0)
> clf
> uicontrol("style","checkbox","backgroundcolor",..
> [1 1 1],"value",1,"callback","cbfun");
> t=linspace(0,2*%pi,100);
> plot(t,sin(t))
> plot(t,cos(t))
>
> scf(1)
> clf
> uicontrol("style","checkbox","backgroundcolor",..
> [1 1 1],"value",1,"callback","cbfun");
> t=linspace(0,2*%pi,100);
> plot(t,sin(t))
> plot(t,cos(t))
>  S.
>
> Le 19/04/2018 à 13:28, Izabela Wójcik-Grząba a écrit :
>
>> Hello,
>>
>> In my programme in Scilab I create a figure with one plot and a
>> checkbox which turns on/off the visibility of some parts of the
>> plot. The callback function of checkbox works fine when there is
>> only one figure, but when there are, for example, two figures the
>> callback works on the current figure not the one I want to change
>> (because I use gca). Here is the part with definition of the
>> checkbox and callback function:
>>
>> box_num_w=uicontrol(przel,"style","checkbox","backgroundcolor",..
>> [1 1 1],"value",1,"string","Numery
>> węzłów","callback","niewidoczne_num_w");
>>
>> function niewidoczne_num_w()
>> a=gca;
>> if get(gcbo,"value")==0 then
>> value=get(gcbo,"value")
>> a.children(7).visible="off";
>> else
>> a.children(7).visible="on";
>> end
>> endfunction
>>
>> I was trying to change the definition of a by using gcbo but none of
>> my versions works.
>> I would appreciate any help.
>>
>> Kind regards,
>> Iza
>> _______________________________________________
>> users mailing list
>> [hidden email]
>>
> https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users
>
> --
> Stéphane Mottelet
> Ingénieur de recherche
> EA 4297 Transformations Intégrées de la Matière Renouvelable
> Département Génie des Procédés Industriels
> Sorbonne Universités - Université de Technologie de Compiègne
> CS 60319, 60203 Compiègne cedex
> Tel : +33(0)344234688
> http://www.utc.fr/~mottelet
> _______________________________________________
> users mailing list
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/users
_______________________________________________
users mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/users