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)
16 if varargin(i) == "-append" then
20 temp = evstr(varargin(i));
24 value = inspectList(temp);
26 execstr(varargin(i) + " = value");
27 elseif typeof(temp) == "handle" then
28 //convert handle to tlist
29 value = extractMatrixHandle(temp);
31 execstr(varargin(i) + " = value");
35 result = export_to_hdf5(filename, varargin(:));
39 function result = isList(var)
44 if or(type(var) == [15, 16, 17]) then
51 function result = inspectList(l)
52 if typeof(l)=="list" then
54 for i = definedfields(l)
55 if typeof(l(i)) == "handle" then
56 result(i) = extractMatrixHandle(l(i));
57 elseif isList(l(i)) then
58 result(i) = inspectList(l(i));
64 fieldNb = size(getfield(1, l), "*");
65 for kField = 2:fieldNb // Do not inspect first field (field names)
66 fieldValue = getfield(kField, l);
67 if typeof(fieldValue) == "handle" then
68 fieldValue = extractMatrixHandle(fieldValue);
69 elseif isList(fieldValue) then
70 fieldValue = inspectList(fieldValue);
72 setfield(kField, fieldValue, l);
78 function matrixHandle = extractMatrixHandle(h)
80 if typeof(h) <> "handle" then
85 matrixHandle = tlist(["ScilabMatrixHandle", "dims", "values"]);
86 matrixHandle.dims = size(h);
87 matrixHandle.values = list();
88 for i = 1:size(h, "*")
89 matrixHandle.values($+1) = extractSingleHandle(h(i));
90 if or(fieldnames(matrixHandle.values($))=="user_data") then // TODO Remove after graphic branch merge
91 if isList(matrixHandle.values($).user_data) then
92 matrixHandle.values($).user_data = inspectList(matrixHandle.values($).user_data)
93 elseif typeof(matrixHandle.values($).user_data) == "handle" then
94 matrixHandle.values($).user_data = extractMatrixHandle(matrixHandle.values($).user_data)
101 function item = extractSingleHandle(h)
105 item = extractFigure(h);
107 item = extractAxes(h);
109 item = extractPolyline(h);
111 item = extractPlot3d(h);
113 item = extractFac3d(h);
115 item = extractCompound(h);
117 item = extractRectangle(h);
119 item = extractArc(h);
121 item = extractChamp(h);
123 item = extractSegs(h);
125 item = extractGrayplot(h);
127 item = extractMatplot(h);
129 item = extractFec(h);
131 item = extractLegend(h);
133 item = extractText(h);
135 item = extractAxis(h);
137 item = extractuimenu(h);
139 item = extractuicontextmenu(h);
141 item = extractuicontrol(h);
143 error("handle of type " + h.type + " unhandled");
151 function returnedFigure = extractFigure(h)
152 returnedFigure = tlist([
153 "ScilabSingleHandle", ...
156 "figure_position", ...
167 "pixel_drawing_mode", ...
169 "immediate_drawing", ...
171 "rotation_style", ...
173 "event_handler_enable", ...
177 fields = fieldnames(returnedFigure);
179 for i = 1:size(fields, "*")
180 if fields(i) == "children" then
181 returnedFigure(fields(i)) = extractMatrixHandle(h(fields(i)));
183 returnedFigure(fields(i)) = h(fields(i));
191 function returnedLabel = extractLabel(h)
192 returnedLabel = tlist([
193 "ScilabSingleHandle", ...
197 "font_foreground", ...
203 "fractional_font", ...
209 fields = fieldnames(returnedLabel);
211 for i = 1:size(fields, "*")
212 returnedLabel(fields(i)) = h(fields(i));
219 function returnedTicks = extractTicks(ticks)
220 returnedTicks = tlist([
225 fields = fieldnames(returnedTicks);
227 for i = 1:size(fields, "*")
228 returnedTicks(fields(i)) = ticks(fields(i));
235 function returnedAxes = extractAxes(h)
236 returnedAxes = tlist([
237 "ScilabSingleHandle", ...
261 "fractional_font", ...
264 "rotation_angles", ...
273 "hidden_axis_color", ...
274 "arc_drawing_method", ...
282 "mark_size_unit", ...
283 "mark_foreground", ...
284 "mark_background", ...
292 fields = fieldnames(returnedAxes);
294 for i = 1:size(fields, "*")
295 if or(fields(i) == ["title","x_label","y_label","z_label"]) then
296 returnedAxes(fields(i)) = extractLabel(h(fields(i)));
297 elseif or(fields(i) == ["x_ticks", "y_ticks", "z_ticks"]) then
298 returnedAxes(fields(i)) = extractTicks(h(fields(i)));
299 elseif fields(i) == "children" then
300 returnedAxes(fields(i)) = extractMatrixHandle(h(fields(i)));
302 returnedAxes(fields(i)) = h(fields(i));
310 function returnedPolyline = extractPolyline(h)
311 returnedPolyline = tlist([
312 "ScilabSingleHandle", ...
321 "arrow_size_factor", ...
322 "polyline_style", ...
323 "interp_color_vector", ...
324 "interp_color_mode", ...
328 "mark_size_unit", ...
331 "mark_foreground", ...
332 "mark_background", ...
341 fields = fieldnames(returnedPolyline);
343 for i = 1:size(fields, "*")
344 returnedPolyline(fields(i)) = h(fields(i));
351 function returnedPlot3d = extractPlot3d(h)
352 returnedPlot3d = extractSurface(h);
358 function returnedFac3d = extractFac3d(h)
359 returnedFac3d = extractSurface(h);
365 function returnedSurface = extractSurface(h)
366 returnedSurface = tlist([
367 "ScilabSingleHandle", ...
376 "mark_size_unit", ...
377 "mark_foreground", ...
378 "mark_background", ...
389 fields = fieldnames(returnedSurface);
391 for i = 1:size(fields, "*")
392 if fields(i)=="cdata_mapping" then
393 if h.type=="Fac3d" then
394 returnedSurface(fields(i)) = h(fields(i));
397 returnedSurface(fields(i)) = h(fields(i));
405 function returnedCompound = extractCompound(h)
406 returnedCompound = tlist([
407 "ScilabSingleHandle", ...
413 fields = fieldnames(returnedCompound);
415 for i = 1:size(fields, "*")
416 if fields(i) == "children" then
417 returnedCompound(fields(i)) = extractMatrixHandle(h(fields(i)));
419 returnedCompound(fields(i)) = h(fields(i));
427 function returnedRectangle = extractRectangle(h)
428 returnedRectangle = tlist([
429 "ScilabSingleHandle", ...
436 "mark_size_unit", ...
437 "mark_foreground", ...
438 "mark_background", ...
449 fields = fieldnames(returnedRectangle);
451 for i = 1:size(fields, "*")
452 returnedRectangle(fields(i)) = h(fields(i));
459 function returnedArc = extractArc(h)
460 returnedArc = tlist([
461 "ScilabSingleHandle", ...
471 "arc_drawing_method", ...
476 fields = fieldnames(returnedArc);
478 for i = 1:size(fields, "*")
479 returnedArc(fields(i)) = h(fields(i));
486 function returnedChamp = extractChamp(h)
487 returnedChamp = tlist([
488 "ScilabSingleHandle", ...
500 fields = fieldnames(returnedChamp);
502 for i = 1:size(fields, "*")
503 returnedChamp(fields(i)) = h(fields(i));
510 function returnedSeg = extractSegs(h)
511 returnedSeg = tlist([
512 "ScilabSingleHandle", ...
523 "mark_size_unit", ...
524 "mark_foreground", ...
525 "mark_background", ...
530 fields = fieldnames(returnedSeg);
532 for i = 1:size(fields, "*")
533 returnedSeg(fields(i)) = h(fields(i));
540 function returnedGrayplot = extractGrayplot(h)
541 returnedGrayplot = tlist([
542 "ScilabSingleHandle", ...
551 fields = fieldnames(returnedGrayplot);
553 for i = 1:size(fields, "*")
554 returnedGrayplot(fields(i)) = h(fields(i));
561 function returnedMatplot = extractMatplot(h)
562 returnedMatplot = tlist([
563 "ScilabSingleHandle", ...
571 fields = fieldnames(returnedMatplot);
573 for i = 1:size(fields, "*")
574 returnedMatplot(fields(i)) = h(fields(i));
581 function returnedFec = extractFec(h)
582 returnedFec = tlist([
583 "ScilabSingleHandle", ...
590 "outside_colors", ...
597 fields = fieldnames(returnedFec);
599 for i = 1:size(fields, "*")
600 returnedFec(fields(i)) = h(fields(i));
607 function returnedLegend = extractLegend(h)
608 returnedLegend = tlist([
609 "ScilabSingleHandle", ...
616 "fractional_font", ...
618 "legend_location", ...
630 fields = fieldnames(returnedLegend);
632 for i = 1:size(fields, "*")
633 if fields(i) == "links" then
634 returnedLegend(fields(i)) = extractMatrixHandle(h(fields(i)));
635 elseif fields(i) == "paths" then
637 for kl=1:size(h.links,'*');
638 p($+1) = get_entity_path(h.links(kl));
640 returnedLegend(fields(i)) = p;
642 returnedLegend(fields(i)) = h(fields(i));
650 function returnedText = extractText(h)
651 returnedText = tlist([
652 "ScilabSingleHandle", ...
666 "font_foreground", ...
669 "fractional_font", ...
674 fields = fieldnames(returnedText);
676 for i = 1:size(fields, "*")
677 returnedText(fields(i)) = h(fields(i));
684 function returnedAxis = extractAxis(h)
685 returnedAxis = tlist([
686 "ScilabSingleHandle", ...
689 "tics_direction", ...
697 "labels_font_size", ...
698 "labels_font_color", ...
699 "fractional_font", ...
704 fields = fieldnames(returnedAxis);
706 for i = 1:size(fields, "*")
707 returnedAxis(fields(i)) = h(fields(i));
714 function returneduimenu = extractuimenu(h)
715 returneduimenu = tlist([
716 "ScilabSingleHandle", ...
719 "foregroundcolor", ...
729 fields = fieldnames(returneduimenu);
731 for i = 1:size(fields, "*")
732 if fields(i) == "children" then
733 returneduimenu(fields(i)) = extractMatrixHandle(h(fields(i))($:-1:1));
735 returneduimenu(fields(i)) = h(fields(i));
743 function returneduicontextmenu = extractuicontextmenu(h)
744 returneduicontextmenu = tlist([
745 "ScilabSingleHandle", ...
749 fields = fieldnames(returneduicontextmenu);
751 for i = 1:size(fields, "*")
752 if fields(i) == "children" then
753 returneduicontextmenu(fields(i)) = extractMatrixHandle(h(fields(i))($:-1:1));
755 returneduicontextmenu(fields(i)) = h(fields(i));
763 function returneduicontrol = extractuicontrol(h)
764 returneduicontrol = tlist([
765 "ScilabSingleHandle", ...
768 "backgroundcolor", ...
775 "foregroundcolor", ...
776 "horizontalalignment", ...
786 "verticalalignment", ...
794 fields = fieldnames(returneduicontrol);
796 for i = 1:size(fields, "*")
797 if fields(i) == "children" then
798 returneduicontrol(fields(i)) = extractMatrixHandle(h(fields(i))($:-1:1));
800 returneduicontrol(fields(i)) = h(fields(i));
805 // Utility function for legends, copy/paste from %h_load
806 function p=get_entity_path(e)
807 // given a handle e on an entity this function returns its path relative
808 // to its parent axes.
809 // the path is a vector of child index.
814 pos=find(parent.children==e,1)
816 error(msprintf(_("%s : Invalid entity %s\n"),"save","Legend"))
819 if parent.type=='Axes' then