1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
%%
%% This file is part of the ViTE project.
%%
%% This software is governed by the CeCILL-A license under French law
%% and abiding by the rules of distribution of free software. You can
%% use, modify and/or redistribute the software under the terms of the
%% CeCILL-A license as circulated by CEA, CNRS and INRIA at the following
%% URL: "http://www.cecill.info".
%%
%% As a counterpart to the access to the source code and rights to copy,
%% modify and redistribute granted by the license, users are provided
%% only with a limited warranty and the software's author, the holder of
%% the economic rights, and the successive licensors have only limited
%% liability.
%%
%% In this respect, the user's attention is drawn to the risks associated
%% with loading, using, modifying and/or developing or reproducing the
%% software by the user in light of its specific status of free software,
%% that may mean that it is complicated to manipulate, and that also
%% therefore means that it is reserved for developers and experienced
%% professionals having in-depth computer knowledge. Users are therefore
%% encouraged to load and test the software's suitability as regards
%% their requirements in conditions enabling the security of their
%% systems and/or data to be ensured and, more generally, to use and
%% operate it in the same conditions as regards security.
%%
%% The fact that you are presently reading this means that you have had
%% knowledge of the CeCILL-A license and that you accept its terms.
%%
%%
%% ViTE developers are:
%%
%% - COULOMB Kevin
%% - FAVERGE Mathieu
%% - JAZEIX Johnny
%% - LAGRASSE Olivier
%% - MARCOUEILLE Jule
%% - NOISETTE Pascal
%% - REDONDY Arthur
%% - VUCHENER Clément
%%
\subsubsection{Introduction}
As render\_opengl, render\_svg must implements the drawing functions. It consists in outputting data in a svg file.
Data to be printed in the file, are buffered in differents \verb?std::ostringstream? buffer. Main elements are stored in \verb?_buffer?, flushed regularly by print(). In a svg viewer, the last element in the file are displayed in the front : the thinnest element must be printed as latest as possible : these are stored in \verb?_thin_element_buffer?. Counter are stored in \verb?_chronogramme?, and the scale is stored in \verb?_time_scale?.
\subsubsection{Required settings}
Render in svg may produce a high weight file due to numbered elements and default scale setting may hide some relevant events. That is why render\_svg allows user to set the width, heigth and accurracy of the render. These are set by default with the following static functions ~:
\begin{itemize}
\item Svg::set\_height\_factor(double)
\item Svg::set\_wide\_factor(double)
\item Svg::set\_interval(double, double)
\item Svg::set\_accuracy(double)
\item Svg::set\_scale\_frequency(double).
\end{itemize}
\subsubsection{Initialisation}
render\_svg opens the file specified by \verb?Svg::init(const char *path)? and output the header. Css embedded stylesheet reduces style attributes in each elements.
\subsubsection{drawing}
The procedure to implement functions such as \verb?draw_arrow?, \verb?draw_container? or \verb?draw_state? is the same.
render\_svg controls that the elements to be displayed are in the appropriate range, set by \verb?Svg::set_interval(double,double)?. In this release, the render reshapes itself too tall elements, but in the next version of Vite, the reshapement can be replaced by warnings (a correct draw\_trace function doesn't need this control).
Then, render\_svg computes positions and colors according to parameters. Any elements are widen by \_wide\_factor to convert time in ms to pixel, heights are grown by \_height\_factor for the same reason.
Positions are translated to \_container\_width\_max : the left region occuppied by containers and MARGINTOP the upper region reserved for scale. Color are converted from floats to RGB.
Whenever a time selection is set, are translated to (-) \_start\_interval\_time (in ms, ie -\_start\_interval\_time*\_wide\_factor pixel).
The computed position allows the call to basic shape painting functions such as
\begin{verbatim}
Svg::rectangle(const char* name, Element_pos w, Element_pos h,
Element_pos x1, Element_pos y1, unsigned int r,
unsigned int g, unsigned int b)
\end{verbatim}
which corresponds to write in the svg output~:
\begin{verbatim}<rect class='name' title='name' width='w' height='h'
x='x1' y='y1' fill='rgb(r,g,b)'/>
\end{verbatim}
\subsubsection{drawing counter}
Drawing counter is an automaton. See the schema for details. Svg paths are used to display counter.
\subsubsection{drawing scale}
Each element position corresponds to a time. The latest element indicates the total time. The total time multiplies by width factor equals the total width. The scale consists in drawing a time value regulary.
\subsubsection{ending function}
\verb?Svg::end()? flushes left buffered informations, writes the scale, the cursor and ends the svg file.
The cursor is only available on javascript enabled svg viewers (e.g. firefox).
|