Discussion:
[Scilab-users] Exporting figures containing uicontrols to any format
Antoine Monmayrant
9 years ago
Permalink
Hi everyone,

After a long fight to build fancy graphics with uicontrols to demo some physics, I am now stuck because of bug 14502 ( https://bugzilla.scilab.org/show_bug.cgi?id=14502 ).
Basically, I have no way to export my figure to any format (ie no exportUI(gcf()) and no xs2something).
As any of you ever managed to export a figure with uicontrols where both the plots and the uicontrols are well rendered?

Antoine

PS: for a bit of context, try the following:

1) Demos->GUI->Uicontrols 2 //(or any with uicontrols)
2) h=gcf();xs2svg(h, 'h.svg'); // or any other format
3) open h.svg, it's empty
Rafael Guerra
9 years ago
Permalink
Hi Antoine,

I do not have an answer but a question, if you will.
Why is it important for you to export the whole shebang from Scilab?

For the regular figures the export functions work fine and generate high-resolution post-script files.
For the GUI figures, using external screen capture software does not seem to me to be a big handicap, but I might be wrong and I therefore raise the question.

Thanks and regards,
Rafael


-----Original Message-----
From: users [mailto:users-***@lists.scilab.org] On Behalf Of Antoine Monmayrant
Sent: Tuesday, November 01, 2016 9:41 PM
To: Users mailing list for Scilab <***@lists.scilab.org>
Subject: [Scilab-users] Exporting figures containing uicontrols to any format

Hi everyone,

After a long fight to build fancy graphics with uicontrols to demo some physics, I am now stuck because of bug 14502 ( https://bugzilla.scilab.org/show_bug.cgi?id=14502 ).
Basically, I have no way to export my figure to any format (ie no exportUI(gcf()) and no xs2something).
As any of you ever managed to export a figure with uicontrols where both the plots and the uicontrols are well rendered?

Antoine

PS: for a bit of context, try the following:

1) Demos->GUI->Uicontrols 2 //(or any with uicontrols)
2) h=gcf();xs2svg(h, 'h.svg'); // or any other format
3) open h.svg, it's empty
Philipp Mühlmann
9 years ago
Permalink
Dear all,

searching a little how GUI's can be "screenshotted" in Matlab gave me
following:

Request on a Matlab forum, see:

https://de.mathworks.com/matlabcentral/newsreader/view_thread/146264

[...] " In order to show users without atlab on their desktop the output, i
want to create a export function."

This could be the reason for having the oppertunity of screenshotting a GUI.

Anyways:

to me it seems that following is needed to do the trick:

[name,path,index] = uiputfile
saveas(guifigurehandle,[path name]);

while "saveas" calls "print"
see "ocatave" code:
https://fossies.org/dox/octave-4.0.3/saveas_8m_source.html

The print.m code is than way beyond my code understanding.
see "ocatave" code:
https://fossies.org/dox/octave-4.0.3/print_8m_source.html


best regards,
Phil
...
--
In Kanada is' ka' na' da. Sonst wÀr' Kanada Jemanda.

There we have the salad.
Philipp Mühlmann
9 years ago
Permalink
it seems that:

exportUI() only recognizes figure handles (and axes) for the export.

since pushbuttons etc. are not figure handles they are not exported?


e.g.: handles.mypushbotton.style = "pushbutton"

...should be maybe "figure", "frame" or "axes" to be recognized by
exportUI().

Seems to be the same with "printfigure()"




sidequestion:

Is it possible to export content of a xml-file to an figure/image?

If so one could maybe use:

saveGui(gcf(), 'screenshot.xml');

and than convert the content of the xml file into an image?
...
--
In Kanada is' ka' na' da. Sonst wÀr' Kanada Jemanda.

There we have the salad.
Philipp Mühlmann
9 years ago
Permalink
pittywise driver() does also not brings the solution

interstingly playing with usecanvas() made it possible to only show
pushbuttons in a figure.

e.g.:
usecanvas(%T);

f=figure();plot2d();h=uicontrol(f,'unit','normalized',"style","pushbutton","string","pushbutton",
'Position',[0.1, 0.7, 0.2,
0.1]);h=uicontrol(f,'unit','normalized',"style","frame","string","frame",
'Position',[0.1, 0.5, 0.2, 0.1]);


but expoting this figure as a image file resulted in having the know style.
no pushbuttons rendered, only the figure of plot2d().....(also not the
frame)
...
--
In Kanada is' ka' na' da. Sonst wÀr' Kanada Jemanda.

There we have the salad.
a***@laas.fr
9 years ago
Permalink
Hi all,

Just in case it can help someone else, here is the code I hacked this
morning to get a proper export menu on my figures.
It really is a hack and should probably work only on my machine (linux
64 bits, X window, ImageMagick) and with my current figure layout:

//////////////////////////////////////////////////////////

// New menu
h = uimenu(demo_fp, ...
"label" , gettext("File"));

// Export entry
uimenu(h, ...
"label" , gettext("Export Figure (Hack)"), ...
"callback" , "exportHack();", ...
"tag" , "export_menu");


function exportHack()
// Export figure with uicontrols to png using X server & import
(imagemagick)
// Horrible hack the should only work on my machine (linux 64bits.
// get around bug http://bugzilla.scilab.org/show_bug.cgi?id=14836
https://bugzilla.scilab.org/show_bug.cgi?id=14502
h=gcbo;
//current figure name
figname=h.parent.parent.figure_name;
//getting X server id for current window
ret=unix_g("xwininfo -int -name " +""""+figname+"""");
//hackish, depends directly on the syntax of xwininfo outputs
tok=tokens(ret(2),':');
tok=tokens(tok(3)," ")
winid=tok(1);//X server windows id, as a string

// File save dialog parameters
file_mask=["*.png"];
boxTitle="Export";
//If previous filename is present, use it to start the dialog in the
corresponding directory
if h.userdata~="" then
dir=h.userdata;
else
dir=pwd();
end
dir
PathFileName=uiputfile(file_mask,dir,boxTitle);
// LD_LIBRARY_PATH required to get around bug:
http://bugzilla.scilab.org/show_bug.cgi?id=14143
unix_s("LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH ;
import -window "+winid +" "+PathFileName)
// keep savec filename for future reference.
h.userdata=PathFileName;
endfunction

//////////////////////////////////////////////////////////


Hope it helps,

Antoine
...
--
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

Antoine Monmayrant LAAS - CNRS
7 avenue du Colonel Roche
BP 54200
31031 TOULOUSE Cedex 4
FRANCE

Tel:+33 5 61 33 64 59

email : ***@laas.fr
permanent email : ***@polytechnique.org

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Loading...