\hypertarget{pageMultiformatParser_introductionparser}{}\subsection{Introduction}\label{pageMultiformatParser_introductionparser}
A dedicated X\+M\+L-\/based language is used to define the rules needed to parse the Finite Element Model file format. The approach can be used with multiple formats and codes and has been successfully tested against L\+S-\/dyna and Pamcrash models. It was selected because it allows the user to implement additional rules for other codes or numerical features without recompiling the software. This is an alternative to a full templates (the only required rules are those needed to build the P\+I\+P\+E\+R model for a given transformation).

\hyperlink{pageMultiformatParser_genstruct}{Format rule file} \+: in this file (xml based with extension .pfr), general information and rules to parse the finite element format are defined. In the release, rule format files are provided for L\+S dyna (for both fixed sized and comma separated format) and Pamcrash. The files (with a pfr extension) are stored in the Piper/bin directory. In principle, it is possible to define Format rules file for other finite element formats and use them in the P\+I\+P\+E\+R application as long as\+:~\newline

\begin{DoxyItemize}
\item the finite format is keyword based
\item each component is identified by a id and/or a name.
\end{DoxyItemize}

This section describes how to define rules to add support for additional keywords in the provided files, or to develop new files for another Finite Element format.

Note\+: this rule file is not specific to a finite element Human Body Model. If a rule file already exists for the finite element format used by your H\+B\+M, it is likely not needed to modify it even if you develop new metadata.

~\newline


 \hypertarget{pageMultiformatParser_genstruct}{}\subsection{Format rule file}\label{pageMultiformatParser_genstruct}
The format rule file define rules to parse keywords for a specific Finite Element format. The xml file is organized under the root element \char`\"{}format\+\_\+description\char`\"{} as follows\+: \begin{DoxyItemize}
\item \hyperlink{pageMultiformatParser_formatinformation}{\char`\"{}format\+Information\char`\"{} element} \item \hyperlink{pageMultiformatParser_meshcomponent}{\char`\"{}mesh\+Component\char`\"{} element} \item \hyperlink{pageMultiformatParser_rule}{\char`\"{}rule\char`\"{} element}\end{DoxyItemize}
{\bfseries Description of the general structure of the parser file } (Text between $<$-- and --$>$ is comment)\+: 
\begin{DoxyCode}
1 <-- \textcolor{keyword}{XML} \textcolor{keyword}{declaration} -->
2 <?\textcolor{keyword}{xml} \textcolor{keyword}{version}=\textcolor{stringliteral}{"1.0"} \textcolor{keyword}{encoding}=\textcolor{stringliteral}{"UTF-8"}?>
3 <!\textcolor{keyword}{DOCTYPE} \textcolor{keyword}{format\_description} \textcolor{keyword}{SYSTEM} \textcolor{stringliteral}{"ParsingRules.dtd"}>
4 
5 <-- \textcolor{keyword}{Root} \textcolor{keyword}{element} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{parser} \textcolor{keyword}{document} -->
6 <\textcolor{keywordtype}{format\_description}>    
7     <-- \textcolor{keyword}{formatInformation} \textcolor{keyword}{element} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{parser} \textcolor{keyword}{document:} \textcolor{keyword}{Repetition} 1 -->
8     <-- \textcolor{keyword}{This} \textcolor{keyword}{element} \textcolor{keyword}{declares} \textcolor{keyword}{some} \textcolor{keyword}{basic} \textcolor{keyword}{information} \textcolor{keyword}{on} \textcolor{keyword}{the} \textcolor{keyword}{format} -->
9     <\textcolor{keywordtype}{formatInformation} \textcolor{keyword}{format}=\textcolor{stringliteral}{"FormatName"}>
10     \textcolor{keyword}{….}
11     </\textcolor{keywordtype}{formatInformation}>
12 
13     <-- \textcolor{keyword}{meshComponent} \textcolor{keyword}{element} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{parser} \textcolor{keyword}{document:} \textcolor{keyword}{Repetition} 1 -->
14     <-- \textcolor{keyword}{This} \textcolor{keyword}{element} \textcolor{keyword}{declares} \textcolor{keyword}{association} \textcolor{keyword}{between} \textcolor{keyword}{keyword} \textcolor{keyword}{and} \textcolor{keyword}{PIPER} \textcolor{keyword}{component} -->
15     <\textcolor{keywordtype}{meshComponent}>
16     \textcolor{keyword}{….}
17     </ \textcolor{keyword}{meshComponent} >
18 
19 
20     <-- \textcolor{keyword}{rule} \textcolor{keyword}{element} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{parser} \textcolor{keyword}{document:} \textcolor{keyword}{Repetition} \textcolor{keyword}{once} \textcolor{keyword}{per} \textcolor{keyword}{keyword} \textcolor{keyword}{to} \textcolor{keyword}{parse} -->
21     <\textcolor{keywordtype}{rule} \textcolor{keyword}{keyword}=\textcolor{stringliteral}{"kw "}>
22     </ \textcolor{keyword}{rule} >
23 </\textcolor{keywordtype}{format\_description}>
\end{DoxyCode}


The two first lines are mandatory. The first one is requested for the X\+M\+L format and the second one allows to check the syntax in the parser file.\hypertarget{pageMultiformatParser_formatinformation}{}\subsubsection{\char`\"{}format\+Information\char`\"{} element}\label{pageMultiformatParser_formatinformation}
The {\ttfamily format\+Information} element has an attribute used to declare a {\ttfamily name} describing the format (mandatory) and is composed of\+:~\newline
\begin{DoxyItemize}
\item {\bfseries \char`\"{}comment\char`\"{} element\+:} the character used in the F\+E format for comment line. Multiple characters can be defined (separated by whitespace). \item {\bfseries \char`\"{}include\char`\"{} element\+:} the keyword used to declare include files in the F\+E format. \item {\bfseries \char`\"{}separator\char`\"{} element\+:} the character used as a separator. If a whitespace is used as a separator in the F\+E format, it should be declared using \char`\"{}ws\char`\"{}.\end{DoxyItemize}
Example of {\ttfamily format\+Information} element for Pamcrash. In this format, two different characters can be placed at the beginning of comment line.~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{formatInformation} \textcolor{keyword}{format}=\textcolor{stringliteral}{"PamCrash"}>
2     <\textcolor{keywordtype}{comment}>$ #</\textcolor{keywordtype}{comment}>
3     <\textcolor{keywordtype}{include}>\textcolor{keyword}{INCLU}</\textcolor{keywordtype}{include}>
4 </\textcolor{keywordtype}{formatInformation}>
\end{DoxyCode}


Example of {\ttfamily format\+Information} element for L\+S-\/\+Dyna using comma as separator.~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{formatInformation} \textcolor{keyword}{format}=\textcolor{stringliteral}{"LSDyna\_separator"}>
2     <\textcolor{keywordtype}{comment}>$</\textcolor{keywordtype}{comment}>
3     <\textcolor{keywordtype}{include}>*\textcolor{keyword}{INCLUDE}</\textcolor{keywordtype}{include}>
4     <\textcolor{keywordtype}{separator}>,</\textcolor{keywordtype}{separator}>
5 </\textcolor{keywordtype}{formatInformation}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_meshcomponent}{}\subsubsection{\char`\"{}mesh\+Component\char`\"{} element}\label{pageMultiformatParser_meshcomponent}
The {\ttfamily mesh\+Component} element defines relation between keywords of the F\+E format and a P\+I\+P\+E\+R component. For each keyword defined in this element, a \hyperlink{pageMultiformatParser_rule}{\char`\"{}rule\char`\"{} element} must be defined.~\newline
Components defined in this element are\+: \begin{DoxyItemize}
\item {\bfseries \char`\"{}component\+Node\char`\"{} element\+:} Piper node \item {\bfseries \char`\"{}component\+Element1\+D\char`\"{} element\+:} Piper one-\/dimensional element \item {\bfseries \char`\"{}component\+Element2\+D\char`\"{} element\+:} Piper two-\/dimensional element \item {\bfseries \char`\"{}component\+Element3\+D\char`\"{} element\+:} Piper three-\/dimensional element \item {\bfseries \char`\"{}component\+G\+Node\char`\"{} element\+:} Piper group of nodes \item {\bfseries \char`\"{}component\+G\+Element1\+D\char`\"{} element\+:} Piper group of one-\/dimensional element \item {\bfseries \char`\"{}component\+G\+Element2\+D\char`\"{} element\+:} Piper group of two-\/dimensional element \item {\bfseries \char`\"{}component\+G\+Element3\+D\char`\"{} element\+:} Piper group of three-\/dimensional element \item {\bfseries \char`\"{}component\+G\+Group\char`\"{} element\+:} Piper group of group \item {\bfseries \char`\"{}component\+Frame\char`\"{} element\+:} Piper Frame \item {\bfseries \char`\"{}component\+Model\+Parameter\char`\"{} element\+:} Piper parameter\end{DoxyItemize}
In addition, the element ordering has to be specified in case the one in the considered F\+E format differs from the one chosen in Piper project (V\+T\+K definition adopted \href{http://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf}{\tt V\+T\+K documentation (http\+://www.\+vtk.\+org/wp-\/content/uploads/2015/04/file-\/formats.\+pdf)}). ~\newline
{\ttfamily element\+Ordering} element can be used for this purpose. It describes the sequence ordering used to convert F\+E element definition to the Piper one for the following types\+:~\newline
\begin{DoxyItemize}
\item tri\+: triangle element (2\+D) \item quad\+: quadrangle element (2\+D) \item tetra\+: tetra element (3\+D) \item pyra\+: pyramidal element (3\+D) \item penta\+: wedge element (3\+D) \item hexa\+: hexahedron element (3\+D)\end{DoxyItemize}
{\bfseries  Example of {\ttfamily mesh\+Component} element}\+:~\newline

\begin{DoxyCode}
1 <\textcolor{keywordtype}{meshComponent}>
2     <\textcolor{keywordtype}{componentNode}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentNode}>
3     <\textcolor{keywordtype}{componentElement1D}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentElement1D}>
4     <\textcolor{keywordtype}{componentElement2D}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentElement2D}>
5     <\textcolor{keywordtype}{componentElement3D}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentElement3D}>
6     <\textcolor{keywordtype}{componentGNode}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentGNode}>
7     <\textcolor{keywordtype}{componentGElement1D}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentGElement1D}>
8     <\textcolor{keywordtype}{componentGElement2D}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentGElement2D}>
9     <\textcolor{keywordtype}{componentGElement3D}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentGElement3D}>
10     <\textcolor{keywordtype}{componentGGroup}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentGGroup}>
11     <\textcolor{keywordtype}{componentFrame}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentFrame}>
12     <\textcolor{keywordtype}{componentModelParameter}>\textcolor{keyword}{kw} \textcolor{keyword}{kw}</\textcolor{keywordtype}{componentModelParameter}>
13     <\textcolor{keywordtype}{elementOrdering}>
14         <\textcolor{keywordtype}{penta}>...</\textcolor{keywordtype}{penta}>
15         <\textcolor{keywordtype}{hexa}>...</\textcolor{keywordtype}{hexa}>
16     </\textcolor{keywordtype}{elementOrdering}>
17 </\textcolor{keywordtype}{meshComponent}>
\end{DoxyCode}


{\bfseries  Example of {\ttfamily mesh\+Component} element for Pamcrash \copyright{} format}\+:~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{meshComponent}>
2     <\textcolor{keywordtype}{componentNode}>\textcolor{keyword}{NODE}</\textcolor{keywordtype}{componentNode}>
3     <\textcolor{keywordtype}{componentElement1D}>\textcolor{keyword}{BEAM} \textcolor{keyword}{SPRING}/</\textcolor{keywordtype}{componentElement1D}>
4     <\textcolor{keywordtype}{componentElement2D}>\textcolor{keyword}{SHELL}</\textcolor{keywordtype}{componentElement2D}>
5     <\textcolor{keywordtype}{componentElement3D}>\textcolor{keyword}{SOLID}</\textcolor{keywordtype}{componentElement3D}>
6     <\textcolor{keywordtype}{componentGNode}>\textcolor{keyword}{GROUP}</\textcolor{keywordtype}{componentGNode}>
7     <\textcolor{keywordtype}{componentGElement1D}>\textcolor{keyword}{GROUP}</\textcolor{keywordtype}{componentGElement1D}>
8     <\textcolor{keywordtype}{componentGElement2D}>\textcolor{keyword}{GROUP}</\textcolor{keywordtype}{componentGElement2D}>
9     <\textcolor{keywordtype}{componentGElement3D}>\textcolor{keyword}{GROUP}</\textcolor{keywordtype}{componentGElement3D}>
10     <\textcolor{keywordtype}{componentGGroup}>\textcolor{keyword}{GROUP}</\textcolor{keywordtype}{componentGGroup}>
11     <\textcolor{keywordtype}{componentFrame}>\textcolor{keyword}{FRAME}</\textcolor{keywordtype}{componentFrame}>
12     <\textcolor{keywordtype}{componentModelParameter}>\textcolor{keyword}{MATER} \textcolor{keyword}{PART}</\textcolor{keywordtype}{componentModelParameter}>
13     <\textcolor{keywordtype}{elementOrdering}>
14         <\textcolor{keywordtype}{penta}>1 2 5 4 3 6</\textcolor{keywordtype}{penta}>
15     </\textcolor{keywordtype}{elementOrdering}>
16 </\textcolor{keywordtype}{meshComponent}>
\end{DoxyCode}


{\bfseries  Example of {\ttfamily mesh\+Component} element for L\+S-\/\+D\+Y\+N\+A \copyright{} format}\+:~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{meshComponent}>
2     <\textcolor{keywordtype}{componentNode}>*\textcolor{keyword}{NODE}</\textcolor{keywordtype}{componentNode}>
3     <\textcolor{keywordtype}{componentElement1D}>*\textcolor{keyword}{ELEMENT\_BEAM} *\textcolor{keyword}{ELEMENT\_DISCRETE}</\textcolor{keywordtype}{componentElement1D}>
4     <\textcolor{keywordtype}{componentElement2D}>*\textcolor{keyword}{ELEMENT\_SHELL} *\textcolor{keyword}{ELEMENT\_SHELL\_THICKNESS} *\textcolor{keyword}{ELEMENT\_SHELL\_BETA}</\textcolor{keywordtype}{componentElement2D}>
5     <\textcolor{keywordtype}{componentElement3D}>*\textcolor{keyword}{ELEMENT\_SOLID}</\textcolor{keywordtype}{componentElement3D}>
6     <\textcolor{keywordtype}{componentGNode}>*\textcolor{keyword}{SET\_NODE\_LIST\_TITLE} *\textcolor{keyword}{PART}</\textcolor{keywordtype}{componentGNode}>
7     <\textcolor{keywordtype}{componentGElement1D}>*\textcolor{keyword}{SET\_BEAM\_TITLE} *\textcolor{keyword}{PART}</\textcolor{keywordtype}{componentGElement1D}>
8     <\textcolor{keywordtype}{componentGElement2D}>*\textcolor{keyword}{SET\_SHELL\_LIST\_TITLE} *\textcolor{keyword}{PART} *\textcolor{keyword}{SET\_SHELL\_LIST}</\textcolor{keywordtype}{componentGElement2D}>
9     <\textcolor{keywordtype}{componentGElement3D}>*\textcolor{keyword}{SET\_SOLID\_TITLE} *\textcolor{keyword}{PART}</\textcolor{keywordtype}{componentGElement3D}>
10     <\textcolor{keywordtype}{componentGGroup}>*\textcolor{keyword}{SET\_PART\_LIST\_TITLE} *\textcolor{keyword}{PART}</\textcolor{keywordtype}{componentGGroup}>
11     <\textcolor{keywordtype}{componentFrame}>*\textcolor{keyword}{DEFINE\_COORDINATE\_NODES} *\textcolor{keyword}{DEFINE\_COORDINATE\_SYSTEM\_TITLE} *\textcolor{keyword}{DEFINE\_COORDINATE\_NODES\_TITLE}
      </\textcolor{keywordtype}{componentFrame}>
12     <\textcolor{keywordtype}{componentModelParameter}>*\textcolor{keyword}{MAT\_ELASTIC\_TITLE} *\textcolor{keyword}{MAT\_PLASTIC\_KINEMATIC\_TITLE} *\textcolor{keyword}{
      MAT\_STRAIN\_RATE\_DEPENDENT\_PLASTICITY\_TITLE} *\textcolor{keyword}{ELEMENT\_SHELL\_THICKNESS} *\textcolor{keyword}{ELEMENT\_SHELL\_BETA}</\textcolor{keywordtype}{componentModelParameter}>
13     <\textcolor{keywordtype}{elementOrdering}>
14         <\textcolor{keywordtype}{penta}>1 2 5 4 3 6</\textcolor{keywordtype}{penta}>
15     </\textcolor{keywordtype}{elementOrdering}>  
16 </\textcolor{keywordtype}{meshComponent}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_rule}{}\subsubsection{\char`\"{}rule\char`\"{} element}\label{pageMultiformatParser_rule}
The \char`\"{}rule\char`\"{} element is used to define all operations to be performed when a previously registered {\ttfamily keyword} is found. For each keyword registered in \hyperlink{pageMultiformatParser_meshcomponent}{\char`\"{}mesh\+Component\char`\"{} element}, parsing actions are defined and parsed data are stored in variables (\hyperlink{pageMultiformatParser_varmanip}{Variable manipulation}). These variables are used to create and manipulate \hyperlink{pageMultiformatParser_meshcomponent}{P\+I\+P\+E\+R components} of the model with \hyperlink{pageMultiformatParser_pipercompop}{P\+I\+P\+E\+R Component operation}.


\begin{DoxyCode}
1 <\textcolor{keywordtype}{rule} \textcolor{keyword}{keyword}=\textcolor{stringliteral}{"kw"}>
2     ...                     
3 </\textcolor{keywordtype}{rule}> 
\end{DoxyCode}


~\newline


\hypertarget{pageMultiformatParser_defrule}{}\subsection{Define rules}\label{pageMultiformatParser_defrule}
\hypertarget{pageMultiformatParser_varmanip}{}\subsubsection{Variable manipulation}\label{pageMultiformatParser_varmanip}
The element \char`\"{}variable\+Assign\char`\"{} is used to assign the result of an operation to the variable identified by {\ttfamily name}. The element \char`\"{}variable\char`\"{} defines variable as an input of another element.

Usage of \char`\"{}variable\+Assign\char`\"{} and \char`\"{}variable\char`\"{} elements\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varname"}/>
2 
3 <\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varname"}/>
\end{DoxyCode}


The \char`\"{}append\char`\"{} element allows to add characters defined in {\ttfamily value} to a variable of type character.

Example of \char`\"{}append\char`\"{} usage\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{append} \textcolor{keyword}{value}=\textcolor{stringliteral}{"\_Node"}>
2     <\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"GroupName"}/>    
3     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"GroupName\_Node"}/>                         
4 </\textcolor{keywordtype}{append}>   
\end{DoxyCode}


the \char`\"{}clear\+Var\char`\"{} element clear variable(s).

Example of \char`\"{}clear\+Var\char`\"{} usage\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{clearVar}>
2     <\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"GroupName\_Node"}/>
3     <\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"GroupName\_E1D"}/>                        
4 </\textcolor{keywordtype}{clearVar}> 
\end{DoxyCode}


~\newline


 \hypertarget{pageMultiformatParser_parsingop}{}\subsubsection{Parsing operations}\label{pageMultiformatParser_parsingop}
\hypertarget{pageMultiformatParser_nextelement}{}\subsubsection{\char`\"{}next\+Line\char`\"{}\char`\"{} element}\label{pageMultiformatParser_nextelement}
This elements go to the next line of the current line (without considering comment line according to comment character defined in`\hyperlink{pageMultiformatParser_formatinformation}{\char`\"{}format\+Information\char`\"{} element}).\hypertarget{pageMultiformatParser_parselement}{}\subsubsection{\char`\"{}parse\char`\"{}\char`\"{} element}\label{pageMultiformatParser_parselement}
This element defines how to (1) parse the current line or variable of type character and (2) assign the result to a variable.

Options of the \char`\"{}parse\char`\"{} element\+:~\newline

\begin{DoxyItemize}
\item {\ttfamily format\+:} Type of data to be parsed. It can be C (characters), F (double), U\+I (integer), U\+Ipos (strictly positive integer).~\newline

\item {\ttfamily offset\+:} Offset in digit if no separator is defined either in {\ttfamily parse} element or “formatinformation” element. Number of separator if a separator is defined either in {\ttfamily parse} element or “formatinformation” element.~\newline

\item {\ttfamily length\+:} Number of digit to parse. It must be zero if a separator is defined~\newline

\item {\ttfamily separator\+:} Defines a local separator character specific to this {\ttfamily parse} element. Default is no local separator defined. If {\ttfamily length} equals 0 and a global separator is defined in \hyperlink{pageMultiformatParser_formatinformation}{\char`\"{}format\+Information\char`\"{} element}, the global separator is used for parsing if no local separator is defined.~\newline

\item {\ttfamily repeat\+:} repeat the parse operation considering the {\ttfamily offsetrepeat}. The result of parsing is accumulated in the variable as a vector.~\newline

\item {\ttfamily offsetrepeat\+:} Offset in digit between repeated parse operations in case no separator is defined neither in {\ttfamily parse} element nor in \hyperlink{pageMultiformatParser_formatinformation}{\char`\"{}format\+Information\char`\"{} element} . Default value is 0 if {\ttfamily length} is different from 0 and 1 if {\ttfamily length} equals 0. ~\newline
 Or Number of separator between repeated parse operations if a {\ttfamily separator} is defined either in {\ttfamily parse} element or \hyperlink{pageMultiformatParser_formatinformation}{\char`\"{}format\+Information\char`\"{} element} element.~\newline

\end{DoxyItemize}~\newline
{\bfseries Example 1\+:} Parse in fixed length format.~\newline
String to parse (blanks are replaced by dot for visibility and parsed values are in bold)~\newline
…….1.\+5{\bfseries ……0.06}……..-\/2………0~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"10"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"10"}>
2     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var1"}/>
3 </\textcolor{keywordtype}{parse}>
\end{DoxyCode}
 As a result, the value 0.\+06 is assigned to the variable var1 type F.

{\bfseries Example 2\+:} Parse with comma separator.~\newline
String to parse (parsed values are in bold)~\newline
 1.\+5,{\bfseries 0.\+06},-\/2,0~\newline
 \begin{DoxyItemize}
\item If the separator for this line is different from the separator defined in \hyperlink{pageMultiformatParser_formatinformation}{\char`\"{}format\+Information\char`\"{} element} element\+:~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{","} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"0"}>
2     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var1"}/>
3 </\textcolor{keywordtype}{parse}>
\end{DoxyCode}
\end{DoxyItemize}
\begin{DoxyItemize}
\item Otherwise\+:~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"0"}>
2     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var1"}/>
3 </\textcolor{keywordtype}{parse}>
\end{DoxyCode}
 As a result, the value 0.\+06 is assigned to the variable var1 type F.\end{DoxyItemize}
{\bfseries Example 3\+:} Parse in fixed length format with repetition.~\newline
String to parse (blanks are replaced by dot for visiblity and parsed values are in bold)~\newline
.7020553{\bfseries ……..0.\+546867……-\/93.736504………14.2672}~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"3"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"8"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"16"}>
2     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var1"}/>
3 </\textcolor{keywordtype}{parse}>
\end{DoxyCode}


The result is stored in var1 and var1 is a vector of 3 double numbers (0.\+546867,-\/93.\+736504,14.\+2672).~\newline


{\bfseries Example 4\+:} Same as example 3 with comma separator.~\newline
String to parse (parsed values are in bold)~\newline
7020553,{\bfseries 0.\+546867},{\bfseries -\/93.\+736504},{\bfseries 14.\+2672}~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"3"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"0"}>
2     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var1"}/>
3 </\textcolor{keywordtype}{parse}>
\end{DoxyCode}
 The result is stored in var1 and var1 is a vector of 3 double numbers (0.\+546867,-\/93.\+736504,14.\+2672).~\newline
 \hypertarget{pageMultiformatParser_parserulelement}{}\subsubsection{\char`\"{}parserule\char`\"{} element}\label{pageMultiformatParser_parserulelement}
This element is used to describe \hyperlink{pageMultiformatParser_parselement}{\char`\"{}parse\char`\"{}" element} to be performed on the current line or variable of type character.~\newline
 Example of a set of two parse actions on the current line\+:~\newline
line to parse (blanks are replaced by dot for visiblity)~\newline
.7020553……..0.\+546867……-\/93.736504………14.2672~\newline

\begin{DoxyCode}
1 <\textcolor{keywordtype}{parseRule}>
2     <\textcolor{keywordtype}{curLine}/>
3     <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"UI"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"8"}>
4         <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var1"}/>
5     </\textcolor{keywordtype}{parse}>
6     <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"2"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"24"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"16"}>
7         <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var2"}/>
8     </\textcolor{keywordtype}{parse}>
9 </\textcolor{keywordtype}{parseRule}>
\end{DoxyCode}
 As a result, value 7020553 is assigned to variable {\ttfamily var1} and {\ttfamily var2} is a vector with two elements (-\/93.\+736504,14.\+2672).

Example of a set of two parse actions on variable varstr (this variable must be a variable of type C)\+:~\newline
Content of variable varstr to parse (blanks are replaced by dot for visiblity)~\newline
.string\+\_\+1……..string\+\_\+2……-\/93.736504………14.2672~\newline

\begin{DoxyCode}
1 <\textcolor{keywordtype}{parseRule}>
2     <\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varstr"}/>
3     <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"UI"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"0"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"8"}>
4         <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var1"}/>
5     </\textcolor{keywordtype}{parse}>
6     <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"2"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"24"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"16"}>
7         <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"var2"}/>
8     </\textcolor{keywordtype}{parse}>
9 </\textcolor{keywordtype}{parseRule}>
\end{DoxyCode}
 As a result, string\+\_\+2 is assigned to variable {\ttfamily var1} and {\ttfamily var2} is a vector with two elements (-\/93.\+736504,14.\+2672).

~\newline


 \hypertarget{pageMultiformatParser_condstat}{}\subsubsection{Conditional Statement}\label{pageMultiformatParser_condstat}
\hypertarget{pageMultiformatParser_doifstat}{}\paragraph{\char`\"{}do\+If\char`\"{} statement}\label{pageMultiformatParser_doifstat}
The “if” statement is used for conditional execution\+:~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{doIf}>
2     <\textcolor{keywordtype}{condition}>
3         <-- \textcolor{keyword}{expression} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{condition:} \textcolor{keyword}{see} \textcolor{keyword}{Boolean} \textcolor{keyword}{operation-}>
4         \textcolor{keyword}{…..}
5     </\textcolor{keywordtype}{condition}>
6     <\textcolor{keywordtype}{body}>
7         <-- \textcolor{keyword}{expressions} \textcolor{keyword}{in} \textcolor{keyword}{body} \textcolor{keyword}{are} \textcolor{keyword}{executed} \textcolor{keyword}{if} \textcolor{keyword}{condition} \textcolor{keyword}{is} \textcolor{keyword}{true-}>
8         \textcolor{keyword}{…..}
9     </\textcolor{keywordtype}{body}>
10 </\textcolor{keywordtype}{doIf}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_whilestat}{}\paragraph{\char`\"{}while\char`\"{} statement}\label{pageMultiformatParser_whilestat}
The “while” statement is used to repeat execution as long as the condition is true\+:~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{doWhile}>
2     <\textcolor{keywordtype}{condition}>
3         <-- \textcolor{keyword}{expression} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{condition:} \textcolor{keyword}{see} \textcolor{keyword}{Boolean} \textcolor{keyword}{operation-}>
4         \textcolor{keyword}{…..}
5     </\textcolor{keywordtype}{condition}>
6     <\textcolor{keywordtype}{body}>
7         <-- \textcolor{keyword}{expressions} \textcolor{keyword}{in} \textcolor{keyword}{body} \textcolor{keyword}{are} \textcolor{keyword}{executed} \textcolor{keyword}{if} \textcolor{keyword}{condition} \textcolor{keyword}{is} \textcolor{keyword}{true-}>
8         \textcolor{keyword}{…..}
9     </\textcolor{keywordtype}{body}>
10 </\textcolor{keywordtype}{doWhile}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_foreachstat}{}\paragraph{\char`\"{}for\+Each\char`\"{} statement}\label{pageMultiformatParser_foreachstat}
The “for\+Each” statement is used to iterate over elements of a vector variable\+:~\newline
 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{forEach}>
2     <-- \textcolor{keyword}{variable} \textcolor{keyword}{name} \textcolor{keyword}{to} \textcolor{keyword}{iterate} \textcolor{keyword}{on-}>
3     <\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"iterable\_variable"}/>
4     <-- \textcolor{keyword}{variable} \textcolor{keyword}{name} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{iterator-}>
5     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"iterator\_variable"}/>
6     <\textcolor{keywordtype}{condition}>
7         <-- \textcolor{keyword}{expression} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{condition:} \textcolor{keyword}{see} \textcolor{keyword}{Boolean} \textcolor{keyword}{operation-}>
8         \textcolor{keyword}{…..}
9         </\textcolor{keywordtype}{condition}>
10     <\textcolor{keywordtype}{body}>
11     <-- \textcolor{keyword}{expressions} \textcolor{keyword}{in} \textcolor{keyword}{body} \textcolor{keyword}{are} \textcolor{keyword}{executed} \textcolor{keyword}{if} \textcolor{keyword}{condition} \textcolor{keyword}{is} \textcolor{keyword}{true-}>
12     \textcolor{keyword}{…..}
13     </\textcolor{keywordtype}{body}>
14 </ \textcolor{keyword}{forEach}>
\end{DoxyCode}


~\newline


 \hypertarget{pageMultiformatParser_boolstat}{}\subsubsection{Boolean Operation}\label{pageMultiformatParser_boolstat}
The following set of operations return a Boolean depending on the result of the evaluation.

\begin{DoxyItemize}
\item \hyperlink{pageMultiformatParser_findbool}{\char`\"{}find\char`\"{} operation} \item \hyperlink{pageMultiformatParser_notfindbool}{\char`\"{}notfind\char`\"{} operation} \item \hyperlink{pageMultiformatParser_equalbool}{\char`\"{}equal\char`\"{} operation}\end{DoxyItemize}
\hypertarget{pageMultiformatParser_findbool}{}\paragraph{\char`\"{}find\char`\"{} operation}\label{pageMultiformatParser_findbool}
This operation returns true if the set of characters defined in “value” is found either in the variable (variable must be a variable of type C) or in the current line being parsed. The option {\ttfamily pos} is used to specify if “value” can be at any position (pos=\char`\"{}any\char`\"{}) in the variable or only at the beginning (pos=”start”).~\newline
 
\begin{DoxyCode}
1 <-- \textcolor{keyword}{true} \textcolor{keyword}{if} \textcolor{keyword}{value} \textcolor{keyword}{“str”} \textcolor{keyword}{is} \textcolor{keyword}{found} \textcolor{keyword}{at} \textcolor{keyword}{the} \textcolor{keyword}{beginning} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{current} \textcolor{keyword}{parsed} \textcolor{keyword}{line-}>
2 <\textcolor{keywordtype}{find} \textcolor{keyword}{value}=\textcolor{stringliteral}{"str"} \textcolor{keyword}{pos}=\textcolor{stringliteral}{"start"}><\textcolor{keywordtype}{curLine}/></\textcolor{keywordtype}{find}>
3 
4 <-- \textcolor{keyword}{true} \textcolor{keyword}{if} \textcolor{keyword}{value} \textcolor{keyword}{“str”} \textcolor{keyword}{is} \textcolor{keyword}{found} \textcolor{keyword}{at} \textcolor{keyword}{any} \textcolor{keyword}{position} \textcolor{keyword}{in} \textcolor{keyword}{the} \textcolor{keyword}{variable} \textcolor{keyword}{varname-}>
5 <\textcolor{keywordtype}{find} \textcolor{keyword}{value}=\textcolor{stringliteral}{"str"} \textcolor{keyword}{pos}=\textcolor{stringliteral}{"any"}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varname"}/></\textcolor{keywordtype}{find}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_notfindbool}{}\paragraph{\char`\"{}notfind\char`\"{} operation}\label{pageMultiformatParser_notfindbool}
This operation returns true if the set of characters defined in “value” is not found either in the variable nor in the current line being parsed. Syntax and options are the same as for the “find” operation.~\newline

\begin{DoxyCode}
1 <-- \textcolor{keyword}{true} \textcolor{keyword}{if} \textcolor{keyword}{value} \textcolor{keyword}{“str”} \textcolor{keyword}{is} \textcolor{keyword}{not} \textcolor{keyword}{found} \textcolor{keyword}{at} \textcolor{keyword}{the} \textcolor{keyword}{beginning} \textcolor{keyword}{of} \textcolor{keyword}{the} \textcolor{keyword}{current} \textcolor{keyword}{parsed} \textcolor{keyword}{line-}>
2 <\textcolor{keywordtype}{notfind} \textcolor{keyword}{value}=\textcolor{stringliteral}{"str"} \textcolor{keyword}{pos}=\textcolor{stringliteral}{"start"}><\textcolor{keywordtype}{curLine}/></\textcolor{keywordtype}{notfind} >
3 
4 <-- \textcolor{keyword}{true} \textcolor{keyword}{if} \textcolor{keyword}{value} \textcolor{keyword}{“str”} \textcolor{keyword}{is} \textcolor{keyword}{not} \textcolor{keyword}{found} \textcolor{keyword}{at} \textcolor{keyword}{any} \textcolor{keyword}{position} \textcolor{keyword}{in} \textcolor{keyword}{the} \textcolor{keyword}{variable} \textcolor{keyword}{varname-}>
5 <\textcolor{keywordtype}{notfind} \textcolor{keyword}{value}=\textcolor{stringliteral}{" str "} \textcolor{keyword}{pos}=\textcolor{stringliteral}{"any"}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varname"}/></\textcolor{keywordtype}{notfind} >
\end{DoxyCode}
\hypertarget{pageMultiformatParser_equalbool}{}\subsubsection{\char`\"{}equal\char`\"{} operation}\label{pageMultiformatParser_equalbool}
This operation returns true if the set of characters \char`\"{}str\char`\"{} defined in value is equal to the current line being parsed or to the variable \char`\"{}varname\char`\"{} of type character.~\newline
 
\begin{DoxyCode}
1 <-- \textcolor{keyword}{true} \textcolor{keyword}{if} \textcolor{keyword}{value} \textcolor{keyword}{“str”} \textcolor{keyword}{is} \textcolor{keyword}{equal} \textcolor{keyword}{to} \textcolor{keyword}{the} \textcolor{keyword}{current} \textcolor{keyword}{parsed} \textcolor{keyword}{line-}>
2 <\textcolor{keywordtype}{equal} \textcolor{keyword}{value}=\textcolor{stringliteral}{"str"}><\textcolor{keywordtype}{curLine}/></\textcolor{keywordtype}{equal} >
3 
4 <-- \textcolor{keyword}{true} \textcolor{keyword}{if} \textcolor{keyword}{value} \textcolor{keyword}{“str”} \textcolor{keyword}{is} \textcolor{keyword}{to} \textcolor{keyword}{the} \textcolor{keyword}{variable} \textcolor{keyword}{varname-}>
5 <\textcolor{keywordtype}{equal} \textcolor{keyword}{value}=\textcolor{stringliteral}{" str "}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varname"}/></\textcolor{keywordtype}{equal} >
\end{DoxyCode}


~\newline


 \hypertarget{pageMultiformatParser_utilities}{}\subsubsection{Utilities operation}\label{pageMultiformatParser_utilities}
Utilities operations correspond to operations that can help to manipulate data stored in variables.\hypertarget{pageMultiformatParser_generateid}{}\paragraph{\char`\"{}generate\+Id\char`\"{} operation}\label{pageMultiformatParser_generateid}
the \char`\"{}generate\+Id\char`\"{} element generates an id comprised between a start and an end value stored in variables of type U\+I and store the result in a variable (vector of U\+I).


\begin{DoxyCode}
1 <\textcolor{keywordtype}{generateId}>
2     <\textcolor{keywordtype}{start}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"startvalue"}/></\textcolor{keywordtype}{start}>
3     <\textcolor{keywordtype}{end}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"endvalue"}/></\textcolor{keywordtype}{end}>
4     <\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"block\_id"}/>
5 </\textcolor{keywordtype}{generateId}>
\end{DoxyCode}


~\newline


 \hypertarget{pageMultiformatParser_pipercompop}{}\subsubsection{P\+I\+P\+E\+R Component operation}\label{pageMultiformatParser_pipercompop}
This section is related to the operations that can be performed on a \hyperlink{pageMultiformatParser_meshcomponent}{P\+I\+P\+E\+R component}. Each P\+I\+P\+E\+R component created during the parsing of files can be identified by its Id (or name) and the keyword defined in {\ttfamily keyword} defined in the \hyperlink{pageMultiformatParser_rule}{\char`\"{}rule\char`\"{} element} element used to create it. For each \hyperlink{pageMultiformatParser_meshcomponent}{P\+I\+P\+E\+R component}, methods are available to create it and assign to it parsed data stored in variables.

\begin{DoxyItemize}
\item \hyperlink{pageMultiformatParser_modelfile}{Model File assignement} \item \hyperlink{pageMultiformatParser_pipernode}{Piper Node operation} \item \hyperlink{pageMultiformatParser_piperelem}{Piper Element operation} \item \hyperlink{pageMultiformatParser_pipergroup}{Piper Group operation} \item \hyperlink{pageMultiformatParser_piperframe}{P\+I\+P\+E\+R Frame operation} \item \hyperlink{pageMultiformatParser_piperjoint}{P\+I\+P\+E\+R Joint operation (obsolete\+: not needed )} \item \hyperlink{pageMultiformatParser_piperparam}{P\+I\+P\+E\+R Parameter operation}\end{DoxyItemize}
\hypertarget{pageMultiformatParser_modelfile}{}\paragraph{Model File assignement}\label{pageMultiformatParser_modelfile}
The \char`\"{}object\+Model\+File\char`\"{} element defines a F\+E model file to be parsed. It includes only one methode element\+: \char`\"{}set\+File\char`\"{}.~\newline

\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectModelFile}>
2     <\textcolor{keywordtype}{setFile}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varname"}/></\textcolor{keywordtype}{setFile}>
3 </\textcolor{keywordtype}{objectModelFile}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_pipernode}{}\paragraph{Piper Node operation}\label{pageMultiformatParser_pipernode}
The \char`\"{}object\+Node\char`\"{} element adds a node in the Piper model. It includes two methods\+: \begin{DoxyItemize}
\item \char`\"{}set\+Id\char`\"{}\+: creates a new node or activates one. \item \char`\"{}set\+Coord\char`\"{}\+: sets coord for the active node. The variable use to assign coord must be a vector of three double.\end{DoxyItemize}

\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectNode}>
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{setCoord}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforcoord"}/></\textcolor{keywordtype}{setCoord}>
4 </\textcolor{keywordtype}{objectNode}>
\end{DoxyCode}


Example of \char`\"{}object\+Node\char`\"{} element usage\+: line that defined node in Pam-\/\+Crash format (blanks are replaced by dot for visiblity) N\+O\+D\+E../..7020551.......-\/0.\+869206......-\/92.\+601196.........9.\+03719 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{parseRule}> 
2     <\textcolor{keywordtype}{curLine}/>      
3     <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"UIpos"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"8"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"8"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"1"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"}><\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"NodeId"}/>
      </\textcolor{keywordtype}{parse}> 
4     <\textcolor{keywordtype}{parse} \textcolor{keyword}{format}=\textcolor{stringliteral}{"F"} \textcolor{keyword}{length}=\textcolor{stringliteral}{"16"} \textcolor{keyword}{repeat}=\textcolor{stringliteral}{"3"} \textcolor{keyword}{offset}=\textcolor{stringliteral}{"16"} \textcolor{keyword}{separator}=\textcolor{stringliteral}{"none"}><\textcolor{keywordtype}{variableAssign} \textcolor{keyword}{name}=\textcolor{stringliteral}{"coord"}/></\textcolor{keywordtype}{
      parse}>
5 </\textcolor{keywordtype}{parseRule}>
6 <\textcolor{keywordtype}{objectNode}>
7     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"NodeId"}/></\textcolor{keywordtype}{setId}>
8     <\textcolor{keywordtype}{setCoord}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"coord"}/></\textcolor{keywordtype}{setCoord}>
9 </\textcolor{keywordtype}{objectNode}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_piperelem}{}\paragraph{Piper Element operation}\label{pageMultiformatParser_piperelem}
\char`\"{}object\+Element1\+D\char`\"{}, \char`\"{}object\+Element2\+D\char`\"{} and \char`\"{}object\+Element3\+D\char`\"{} elements respectively add one-\/dimensional, two-\/dimensional and three-\/dimensional elements in the Piper model. It includes two methods\+: \begin{DoxyItemize}
\item \char`\"{}set\+Id\char`\"{}\+: creates a new Piper element or activates one. \item \char`\"{}set\+Elem\+Def\char`\"{}\+: sets the element definition for the active element. The variable use to assign coord must be a vector owhich dimension depends of element type.\end{DoxyItemize}
One-\/dimensional element\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectElement1D}>
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{setElemDef}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforelementdef"}/></\textcolor{keywordtype}{setElemDef}>
4 </\textcolor{keywordtype}{objectElement1D}>
\end{DoxyCode}


Two-\/dimensional element\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectElement2D}>
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{setElemDef}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforelementdef"}/></\textcolor{keywordtype}{setElemDef}>
4 </\textcolor{keywordtype}{objectElement2D}>
\end{DoxyCode}


Three-\/dimensional element\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectElement3D}>
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{setElemDef}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforelementdef"}/></\textcolor{keywordtype}{setElemDef}>
4 </\textcolor{keywordtype}{objectElement3D}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_pipergroup}{}\paragraph{Piper Group operation}\label{pageMultiformatParser_pipergroup}
This element defines the group in P\+I\+P\+E\+R model and adds content to it. {\ttfamily type\+:} defines type of group content (Node, Element3\+D, Element2\+D, Element1\+D, Group) \begin{DoxyItemize}
\item \char`\"{}set\+Id\char`\"{}\+: creates a new Piper group or activates an already created one. \item \char`\"{}set\+Name\char`\"{}\+: sets a name group. \item \char`\"{}set\+Part\char`\"{}\+: true/false, true to indicate that this group is a part of the finite element model \item \char`\"{}add\+In\+Group\char`\"{}\+: sets group content in the active group.\end{DoxyItemize}
Example of group of three-\/dimensional elements\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectGroup} \textcolor{keyword}{type}=\textcolor{stringliteral}{"Element3D"}> 
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{addInGroup}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforelementId"}/></\textcolor{keywordtype}{addInGroup}>     
4 </\textcolor{keywordtype}{objectGroup}> 
\end{DoxyCode}


In this example, Id stored in variable \char`\"{}varnameforelement\+Id\char`\"{} corresponds to Id associated with one of the keywords associated in \hyperlink{pageMultiformatParser_meshcomponent}{\char`\"{}mesh\+Component\char`\"{} element} with Piper component declared in {\ttfamily type} of the \char`\"{}object\+Group\char`\"{} element (Element3\+D in the example). If Id added is associated with another keyword(s), these keywords can be specified in the \char`\"{}source\+Id\char`\"{} element as in the following example. In the example, Id of groups are added in a Group of group P\+I\+P\+E\+R component and Id of group(s) to be added are associated with keywords defined in the \char`\"{}source\+Id\char`\"{} element.

Example of group of group using source\+Id\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectGroup} \textcolor{keyword}{type}=\textcolor{stringliteral}{"Group"}>
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"varnameforgroupId"}/></\textcolor{keywordtype}{setId}>     
3     <\textcolor{keywordtype}{addInGroup}>
4         <\textcolor{keywordtype}{sourceId}>\textcolor{keyword}{kw1} \textcolor{keyword}{kw2} \textcolor{keyword}{kw3}</\textcolor{keywordtype}{sourceId}>
5         <\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"GGroupId"}/>
6     </\textcolor{keywordtype}{addInGroup}>   
7 </\textcolor{keywordtype}{objectGroup}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_piperframe}{}\paragraph{P\+I\+P\+E\+R Frame operation}\label{pageMultiformatParser_piperframe}
The \char`\"{}object\+Frame\char`\"{} element adds a frame definition in the P\+I\+P\+E\+R model. Methods of the \char`\"{}object\+Frame\char`\"{} element are\+: \begin{DoxyItemize}
\item \char`\"{}set\+Id\char`\"{}\+: creates a new Frame or activates an already created one. \item \char`\"{}set\+Name\char`\"{}\+: sets a name frame. \item \char`\"{}set\+Origin\char`\"{}\+: sets the origin (node Id). \item \char`\"{}set\+First\+Direction\char`\"{}\+: sets the first direction (X, Y or Z). \item \char`\"{}set\+First\+Axis\char`\"{}\+: sets the node id that defined the first axis. \item \char`\"{}set\+Second\+Direction\char`\"{}\+: sets the second direction (X, Y or Z). \item \char`\"{}set\+Plane\char`\"{}\+: sets the node id to define the plane local x-\/y\end{DoxyItemize}

\begin{DoxyImage}
\includegraphics[width=0.6\textwidth]{Frame.png}
\caption{Frame Definition}
\end{DoxyImage}


Example of \char`\"{}object\+Frame\char`\"{} element usage\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectFrame}> 
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"FrameId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{setName}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"FrameName"}/></\textcolor{keywordtype}{setName}>
4     <\textcolor{keywordtype}{setOrigin} \textcolor{keyword}{type}=\textcolor{stringliteral}{"coord"}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"Org"}/></\textcolor{keywordtype}{setOrigin}>
5     <\textcolor{keywordtype}{setFirstDirection}>\textcolor{keyword}{X}</\textcolor{keywordtype}{setFirstDirection}>
6     <\textcolor{keywordtype}{setFirstAxis} \textcolor{keyword}{type}=\textcolor{stringliteral}{"coord"}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"First"}/></\textcolor{keywordtype}{setFirstAxis}>
7     <\textcolor{keywordtype}{setSecondDirection}>\textcolor{keyword}{Y}</\textcolor{keywordtype}{setSecondDirection}>
8     <\textcolor{keywordtype}{setPlane} \textcolor{keyword}{type}=\textcolor{stringliteral}{"coord"}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"Second"}/></\textcolor{keywordtype}{setPlane}>
9 </\textcolor{keywordtype}{objectFrame}> 
\end{DoxyCode}
\hypertarget{pageMultiformatParser_piperjoint}{}\paragraph{P\+I\+P\+E\+R Joint operation (obsolete\+: not needed )}\label{pageMultiformatParser_piperjoint}
The \char`\"{}object\+Joint\char`\"{} element adds a joint definition in the P\+I\+P\+E\+R model. Revolute and Spherical joints are the allowed type of joint. Methods of the \char`\"{}object\+Joint\char`\"{} element are\+: \begin{DoxyItemize}
\item \char`\"{}set\+Id\char`\"{}\+: creates a new joint or activates an already created one. \item \char`\"{}set\+Type\char`\"{}\+: sets the type of the joint (R\+E\+V\+O\+L\+U\+T\+E or S\+P\+H\+E\+R\+I\+C\+A\+L). \item \char`\"{}set\+Center\char`\"{}\+: sets the center of the joint (node\+Id). \item \char`\"{}set\+Axis\char`\"{}\+: sets a second node Id to define the axis of the R\+E\+V\+O\+L\+U\+T\+E joint. \item \char`\"{}set\+Dof\char`\"{}\+: sets the Degrees of Freedom of the joint. six boolean values (T\+X,T\+Y,T\+Z, R\+X, R\+Y,R\+Z with O\+: blocked; 1\+: free). Default for S\+P\+H\+E\+R\+I\+C\+A\+L joint (0 0 0 1 1 1). Default for R\+E\+V\+O\+L\+U\+T\+E joint (0 0 0 1 0 0).\end{DoxyItemize}
Example of \char`\"{}object\+Joint\char`\"{} element usage (R\+E\+V\+O\+L\+U\+T\+E joint)\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectJoint}> 
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"JointId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{setType}>\textcolor{keyword}{REVOLUTE}</\textcolor{keywordtype}{setType}>
4     <\textcolor{keywordtype}{setCenter}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"JointAxis1"}/></\textcolor{keywordtype}{setCenter}>
5     <\textcolor{keywordtype}{setAxis}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"JointAxis2"}/></\textcolor{keywordtype}{setAxis}>
6     <\textcolor{keywordtype}{setDof}>0 0 0 0 1 0</\textcolor{keywordtype}{setDof}>
7 </\textcolor{keywordtype}{objectJoint}>
\end{DoxyCode}
\hypertarget{pageMultiformatParser_piperparam}{}\paragraph{P\+I\+P\+E\+R Parameter operation}\label{pageMultiformatParser_piperparam}
The \char`\"{}object\+Parameter\char`\"{} element adds a parameter definition in the Piper model. A parameter allows to associate a parameter name with a value parsed in the file. Methods of the \char`\"{}object\+Parameter\char`\"{} element are\+: \begin{DoxyItemize}
\item \char`\"{}set\+Id\char`\"{}\+: creates a new parameter or activates an already created one. \item \char`\"{}set\+Value\char`\"{}\+: sets the value for a parameter with two members elements\+: \item \char`\"{}type\char`\"{}\+: sets the parameter name. \item \char`\"{}value\char`\"{}\+: sets the value of the parameter.\end{DoxyItemize}
Example of \char`\"{}object\+Parameter\char`\"{} element usage\+: 
\begin{DoxyCode}
1 <\textcolor{keywordtype}{objectParameter}>
2     <\textcolor{keywordtype}{setId}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"PropId"}/></\textcolor{keywordtype}{setId}>
3     <\textcolor{keywordtype}{setValue}>
4         <\textcolor{keywordtype}{type}>\textcolor{keyword}{ParameterName}</\textcolor{keywordtype}{type}>
5         <\textcolor{keywordtype}{value}><\textcolor{keywordtype}{variable} \textcolor{keyword}{name}=\textcolor{stringliteral}{"ValueVar"}/></\textcolor{keywordtype}{value}>
6     </\textcolor{keywordtype}{setValue}>
7 </\textcolor{keywordtype}{objectParameter}>
\end{DoxyCode}
 