Hi Samuel,
In the meantime I have realized what you meant with 'You don't need to
block the console with a loop to make changes or actions on existing
graphics.' The following script is loopless. I share it with those who
perhaps can use it in presentations demonstrating a curve under
different aspects.
//show a 3D curve under selectable aspects
x=[1 1 0 0 0]; y=[0 0 0 0.5 1]; z=[1 0 0 1 0];
xdel()
param3d(x,y,z,-90,90,"$\huge x$@$\huge y$@$\huge z$",[4 3]), ce=gce(); ce.thickness=5;
ca=gca();
//
function !cb(c,C,cax)//callback for uimenu()
if c==C(1), cax.rotation_angles=[90 -90];
elseif c==C(2), cax.rotation_angles=[90, 0];
elseif c==C(3), cax.rotation_angles=[ 0,-90];
elseif c==C(4), cax.rotation_angles=[35, 45];
elseif c==C(5), cax.rotation_angles=cax.rotation_angles+[0 -10];
elseif c==C(6), cax.rotation_angles=cax.rotation_angles+[0 +10];
elseif c==C(7)
ca0=cax.rotation_angles;
for k=[0:100 99:-1: 0]
cax.rotation_angles=ca0+[-0.25*k k];
sleep(15)
end
elseif c==C(8), xdel(), abort
end
endfunction
//
C=["xz" "yz" "xy" "Perspec" "Turn10°Left" "Turn10°right" "Rotate"
"Finish"];//case name strings
for i=1:size(C,2),
uimenu('label',C(i),'callback','!cb(C('+string(i)+'),C,ca)'); end
Thanks again for your consultation.
Regards
Jens
--------------------------------------------------------------------------------------------------
Am 18.12.2016 18:04, schrieb Jens Simon Strom:
Hi Samuel,
what I really do is this:
xdel()
figure_size=[1800 900];
cf=figure(1,'position',[0 0
figure_size],'background',8,'immediate_drawing','off','visible','off');
//...
//plot3d and param3d commands
// ...
Rotation_Angles=[85 -64];
ca=gca();
ca.box='off';
xtitle('$\Huge{\text{Isometrisch}}$','','')
cf.immediate_drawing='on'; cf.visible='on';
m1= uimenu(cf,'label','Himmelspol','callback','ra=[0,0],xtitle(''$\Huge{\text{Himmelspol}}$'','','')');
m2=
uimenu(cf,'label','Ost','callback','ra=[90,90],xtitle(''$\Huge{\text{Ost}}$'','','')');
m3=
uimenu(cf,'label','Äquator','callback','ra=[90,0],xtitle(''$\Huge{\text{Äquator}}$'','','')');
m4=
uimenu(cf,'label','West','callback','ra=[90,-90],xtitle(''$\Huge{\text{West}}$'','','')');
m5=
uimenu(cf,'label','Isometrisch','callback','ra=Rotation_Angles,xtitle(''$\Huge{\text{Isometrisch}}$'','','')');
m6=
uimenu(cf,'label','Animation','callback','Case=1,xtitle(''$\Huge{\text{Rotierend}}$'','','')');
m7= uimenu(cf,'label', 'Aus', 'callback', "t=%f");
Case=0;//Initiierung für Anfangspassage, d.h.keine Animation
ra=Rotation_Angles;//Initiierung für Anfangspassage
t=%t;
while t==%t
if Case==1//m6
Case=0;
rota=ca.rotation_angles;
for k=[0:1:90 89:-1:0]
drawlater()
ca.rotation_angles=rota+[0 k];
sleep(10);
drawnow()
end//for k=[ .... ]
else
sleep(200)
ca.rotation_angles=ra;
end//if
end//while
This works satisfactorily. I could not get the result without the
infinite loop.
Kind regards
Jens
-----------------------------------------------------------------------
Am 18.12.2016 16:36, schrieb Samuel Gougeon:
Le 18/12/2016 16:20, Jens Simon Strom a écrit :
Hi Samuel,
Without the loop the script finishes and gives no chance to change
anything.
?
Have you tried? Since the figure and its menus are still here, you
can still use them, even if the script having generating them is
finished.
A callback is an asynchronous independent script that is performed
just when it is called, "at any time" (actually, its instructions are
queued when it is called, and performed ASAP).
You don't need to block the console with a loop to make changes or
actions on existing graphics.
But if you want to make it "modal", that is to say waiting for and
compelling the user to do something, yes, a loop is required.
BTW, the loop that you use is infinite: there is no way to escape it
smoothly, since
while 1
is always true.
SG
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users
_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users