1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2012 - DIGITEO - Antoine ELIAS
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution. The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 //called by save function, transform handle in tlist and save result
11 function [] = %_save(filename, varargin)
14 for i = 1:size(varargin)
15 temp = evstr(varargin(i));
19 value = inspectList(temp);
21 execstr(varargin(i) + " = value");
22 elseif typeof(temp) == "handle" then
23 //convert handle to tlist
24 value = extractMatrixHandle(temp);
26 execstr(varargin(i) + " = value");
30 result = export_to_hdf5(filename, varargin(:));
34 function result = isList(var)
39 if or(type(var) == [15, 16, 17]) then
46 function result = inspectList(l)
47 if typeof(l)=="list" then
49 for i = definedfields(l)
50 if typeof(l(i)) == "handle" then
51 result(i) = extractMatrixHandle(l(i));
52 elseif isList(l(i)) then
53 result(i) = inspectList(l(i));
59 fieldNb = size(getfield(1, l), "*");
60 for kField = 2:fieldNb // Do not inspect first field (field names)
61 fieldValue = getfield(kField, l);
62 if typeof(fieldValue) == "handle" then
63 fieldValue = extractMatrixHandle(fieldValue);
64 elseif isList(fieldValue) then
65 fieldValue = inspectList(fieldValue);
67 setfield(kField, fieldValue, l);
73 function matrixHandle = extractMatrixHandle(h)
75 if typeof(h) <> "handle" then
80 matrixHandle = tlist(["ScilabMatrixHandle", "dims", "values"]);
81 matrixHandle.dims = size(h);
82 matrixHandle.values = list();
83 for i = 1:size(h, "*")
84 matrixHandle.values($+1) = extractSingleHandle(h(i));
85 if or(fieldnames(matrixHandle.values($))=="user_data") then // TODO Remove after graphic branch merge
86 if isList(matrixHandle.values($).user_data) then
87 matrixHandle.values($).user_data = inspectList(matrixHandle.values($).user_data)
88 elseif typeof(matrixHandle.values($).user_data) == "handle" then
89 matrixHandle.values($).user_data = extractMatrixHandle(matrixHandle.values($).user_data)
96 function item = extractSingleHandle(h)
100 item = extractFigure(h);
102 item = extractAxes(h);
104 item = extractPolyline(h);
106 item = extractPlot3d(h);
108 item = extractFac3d(h);
110 item = extractCompound(h);
112 item = extractRectangle(h);
114 item = extractArc(h);
116 item = extractChamp(h);
118 item = extractSegs(h);
120 item = extractGrayplot(h);
122 item = extractMatplot(h);
124 item = extractFec(h);
126 item = extractLegend(h);
128 item = extractText(h);
130 item = extractAxis(h);
132 item = extractuimenu(h);
134 item = extractuicontextmenu(h);
136 item = extractuicontrol(h);
138 error("handle of type " + h.type + " unhandled");
146 function returnedFigure = extractFigure(h)
147 returnedFigure = tlist([
148 "ScilabSingleHandle", ...
151 "figure_position", ...
162 "pixel_drawing_mode", ...
164 "immediate_drawing", ...
166 "rotation_style", ...
168 "event_handler_enable", ...
172 fields = fieldnames(returnedFigure);
174 for i = 1:size(fields, "*")
175 if fields(i) == "children" then
176 returnedFigure(fields(i)) = extractMatrixHandle(h(fields(i)));
178 returnedFigure(fields(i)) = h(fields(i));
186 function returnedLabel = extractLabel(h)
187 returnedLabel = tlist([
188 "ScilabSingleHandle", ...
192 "font_foreground", ...
198 "fractional_font", ...
204 fields = fieldnames(returnedLabel);
206 for i = 1:size(fields, "*")
207 returnedLabel(fields(i)) = h(fields(i));
214 function returnedTicks = extractTicks(ticks)
215 returnedTicks = tlist([
220 fields = fieldnames(returnedTicks);
222 for i = 1:size(fields, "*")
223 returnedTicks(fields(i)) = ticks(fields(i));
230 function returnedAxes = extractAxes(h)
231 returnedAxes = tlist([
232 "ScilabSingleHandle", ...
256 "fractional_font", ...
259 "rotation_angles", ...
268 "hidden_axis_color", ...
269 "arc_drawing_method", ...
277 "mark_size_unit", ...
278 "mark_foreground", ...
279 "mark_background", ...
287 fields = fieldnames(returnedAxes);
289 for i = 1:size(fields, "*")
290 if or(fields(i) == ["title","x_label","y_label","z_label"]) then
291 returnedAxes(fields(i)) = extractLabel(h(fields(i)));
292 elseif or(fields(i) == ["x_ticks", "y_ticks", "z_ticks"]) then
293 returnedAxes(fields(i)) = extractTicks(h(fields(i)));
294 elseif fields(i) == "children" then
295 returnedAxes(fields(i)) = extractMatrixHandle(h(fields(i)));
297 returnedAxes(fields(i)) = h(fields(i));
305 function returnedPolyline = extractPolyline(h)
306 returnedPolyline = tlist([
307 "ScilabSingleHandle", ...
316 "arrow_size_factor", ...
317 "polyline_style", ...
318 "interp_color_vector", ...
319 "interp_color_mode", ...
323 "mark_size_unit", ...
326 "mark_foreground", ...
327 "mark_background", ...
336 fields = fieldnames(returnedPolyline);
338 for i = 1:size(fields, "*")
339 returnedPolyline(fields(i)) = h(fields(i));
346 function returnedPlot3d = extractPlot3d(h)
347 returnedPlot3d = extractSurface(h);
353 function returnedFac3d = extractFac3d(h)
354 returnedFac3d = extractSurface(h);
360 function returnedSurface = extractSurface(h)
361 returnedSurface = tlist([
362 "ScilabSingleHandle", ...
371 "mark_size_unit", ...
372 "mark_foreground", ...
373 "mark_background", ...
384 fields = fieldnames(returnedSurface);
386 for i = 1:size(fields, "*")
387 if fields(i)=="cdata_mapping" then
388 if h.type=="Fac3d" then
389 returnedSurface(fields(i)) = h(fields(i));
392 returnedSurface(fields(i)) = h(fields(i));
400 function returnedCompound = extractCompound(h)
401 returnedCompound = tlist([
402 "ScilabSingleHandle", ...
408 fields = fieldnames(returnedCompound);
410 for i = 1:size(fields, "*")
411 if fields(i) == "children" then
412 returnedCompound(fields(i)) = extractMatrixHandle(h(fields(i)));
414 returnedCompound(fields(i)) = h(fields(i));
422 function returnedRectangle = extractRectangle(h)
423 returnedRectangle = tlist([
424 "ScilabSingleHandle", ...
431 "mark_size_unit", ...
432 "mark_foreground", ...
433 "mark_background", ...
444 fields = fieldnames(returnedRectangle);
446 for i = 1:size(fields, "*")
447 returnedRectangle(fields(i)) = h(fields(i));
454 function returnedArc = extractArc(h)
455 returnedArc = tlist([
456 "ScilabSingleHandle", ...
466 "arc_drawing_method", ...
471 fields = fieldnames(returnedArc);
473 for i = 1:size(fields, "*")
474 returnedArc(fields(i)) = h(fields(i));
481 function returnedChamp = extractChamp(h)
482 returnedChamp = tlist([
483 "ScilabSingleHandle", ...
495 fields = fieldnames(returnedChamp);
497 for i = 1:size(fields, "*")
498 returnedChamp(fields(i)) = h(fields(i));
505 function returnedSeg = extractSegs(h)
506 returnedSeg = tlist([
507 "ScilabSingleHandle", ...
518 "mark_size_unit", ...
519 "mark_foreground", ...
520 "mark_background", ...
525 fields = fieldnames(returnedSeg);
527 for i = 1:size(fields, "*")
528 returnedSeg(fields(i)) = h(fields(i));
535 function returnedGrayplot = extractGrayplot(h)
536 returnedGrayplot = tlist([
537 "ScilabSingleHandle", ...
546 fields = fieldnames(returnedGrayplot);
548 for i = 1:size(fields, "*")
549 returnedGrayplot(fields(i)) = h(fields(i));
556 function returnedMatplot = extractMatplot(h)
557 returnedMatplot = tlist([
558 "ScilabSingleHandle", ...
566 fields = fieldnames(returnedMatplot);
568 for i = 1:size(fields, "*")
569 returnedMatplot(fields(i)) = h(fields(i));
576 function returnedFec = extractFec(h)
577 returnedFec = tlist([
578 "ScilabSingleHandle", ...
585 "outside_colors", ...
592 fields = fieldnames(returnedFec);
594 for i = 1:size(fields, "*")
595 returnedFec(fields(i)) = h(fields(i));
602 function returnedLegend = extractLegend(h)
603 returnedLegend = tlist([
604 "ScilabSingleHandle", ...
611 "fractional_font", ...
613 "legend_location", ...
625 fields = fieldnames(returnedLegend);
627 for i = 1:size(fields, "*")
628 if fields(i) == "links" then
629 returnedLegend(fields(i)) = extractMatrixHandle(h(fields(i)));
630 elseif fields(i) == "paths" then
632 for kl=1:size(h.links,'*');
633 p($+1) = get_entity_path(h.links(kl));
635 returnedLegend(fields(i)) = p;
637 returnedLegend(fields(i)) = h(fields(i));
645 function returnedText = extractText(h)
646 returnedText = tlist([
647 "ScilabSingleHandle", ...
661 "font_foreground", ...
664 "fractional_font", ...
669 fields = fieldnames(returnedText);
671 for i = 1:size(fields, "*")
672 returnedText(fields(i)) = h(fields(i));
679 function returnedAxis = extractAxis(h)
680 returnedAxis = tlist([
681 "ScilabSingleHandle", ...
684 "tics_direction", ...
692 "labels_font_size", ...
693 "labels_font_color", ...
694 "fractional_font", ...
699 fields = fieldnames(returnedAxis);
701 for i = 1:size(fields, "*")
702 returnedAxis(fields(i)) = h(fields(i));
709 function returneduimenu = extractuimenu(h)
710 returneduimenu = tlist([
711 "ScilabSingleHandle", ...
714 "foregroundcolor", ...
724 fields = fieldnames(returneduimenu);
726 for i = 1:size(fields, "*")
727 if fields(i) == "children" then
728 returneduimenu(fields(i)) = extractMatrixHandle(h(fields(i))($:-1:1));
730 returneduimenu(fields(i)) = h(fields(i));
738 function returneduicontextmenu = extractuicontextmenu(h)
739 returneduicontextmenu = tlist([
740 "ScilabSingleHandle", ...
744 fields = fieldnames(returneduicontextmenu);
746 for i = 1:size(fields, "*")
747 if fields(i) == "children" then
748 returneduicontextmenu(fields(i)) = extractMatrixHandle(h(fields(i))($:-1:1));
750 returneduicontextmenu(fields(i)) = h(fields(i));
758 function returneduicontrol = extractuicontrol(h)
759 returneduicontrol = tlist([
760 "ScilabSingleHandle", ...
763 "backgroundcolor", ...
770 "foregroundcolor", ...
771 "horizontalalignment", ...
781 "verticalalignment", ...
789 fields = fieldnames(returneduicontrol);
791 for i = 1:size(fields, "*")
792 if fields(i) == "children" then
793 returneduicontrol(fields(i)) = extractMatrixHandle(h(fields(i))($:-1:1));
795 returneduicontrol(fields(i)) = h(fields(i));
800 // Utility function for legends, copy/paste from %h_load
801 function p=get_entity_path(e)
802 // given a handle e on an entity this function returns its path relative
803 // to its parent axes.
804 // the path is a vector of child index.
809 pos=find(parent.children==e,1)
811 error(msprintf(_("%s : Invalid entity %s\n"),"save","Legend"))
814 if parent.type=='Axes' then