0032137: Coding Rules - merge redundant .lxx files into header files within Package gp
[occt.git] / dox / specification / brep_format.md
1 BRep Format {#specification__brep_format}
2 ========================
3
4 @tableofcontents
5
6 @section specification__brep_format_1 Introduction
7
8   BREP format is used to store 3D models and allows to store a model which consists 
9   of vertices, edges, wires, faces, shells, solids,  compsolids, compounds, edge triangulations, 
10   face triangulations, polylines on  triangulations, space location and orientation. 
11   Any set of such models may be  stored as a single model which is a compound of the models.  
12    
13   The format is described in an order which is convenient for understanding 
14   rather than in the order the format parts follow each other. 
15   BNF-like definitions are used in this document. 
16   Most of the chapters contain BREP format descriptions in the following order:  
17   
18   * format file fragment to illustrate the part;  
19   * BNF-like definition of the part;  
20   * detailed description of the part.  
21   
22 **Note** that the format is a part of Open CASCADE Technology (OCCT).
23
24 Some data fields of the format have additional values, which are used in OCCT. 
25
26 Some data fields of the format are specific for OCCT. 
27
28 @section specification__brep_format_2 Storage of shapes
29
30 *BRepTools* and *BinTools* packages contain methods *Read* and *Write* allowing to read and write a Shape to/from a stream or a file.
31 The methods provided by *BRepTools* package use ASCII storage format; *BinTools* package uses binary format.
32 Each of these methods has two arguments:
33 - a *TopoDS_Shape* object to be read/written;
34 - a stream object or a file name to read from/write to.
35
36 The following sample code reads a shape from ASCII file and writes it to a binary one:
37
38 ~~~~{.cpp}
39   TopoDS_Shape aShape;
40   if (BRepTools::Read (aShape, "source_file.txt")) {
41     BinTools::Write (aShape, "result_file.bin");
42   }
43 ~~~~
44  
45 @section specification__brep_format_3 Format Common Structure
46  
47   ASCII encoding is used to read/write BREP format from/to  file. The format data are stored in a file as text data.  
48    
49   BREP format uses the following BNF terms:
50
51   * \<\\n\>: It is the operating-system-dependent ASCII  character sequence which separates ASCII text strings in the operating system used;
52   * \<_\\n\>: = " "*\<\\n\>;
53   * \<_\>: = " "+; It is a not empty sequence of space characters  with ASCII code 21h;
54   * \<flag\>: = "0" | "1";
55   * \<int\>: It is an integer number from -2<sup>31</sup> to 2<sup>31</sup>-1 which is written in  denary system;  
56   * \<real\>: It is a real from -1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> to 1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> which is written in decimal or E form with base 10.The point is used as a delimiter of the integer and  fractional parts;
57   * \<short real\>: It is a real from -3.402823 @f$\cdot@f$ 10<sup>38</sup> to 3.402823 @f$\cdot@f$ 10<sup>38</sup> which is written in decimal or E form with base 10.The point is used as a delimiter of the integer and  fractional parts;
58   * \<2D point\>: = \<real\>\<_\>\<real\>;  
59   * \<3D point\>: = \<real\>(\<_\>\<real)\><sup>2</sup>;  
60   * \<2D direction\>: It is a \<2D point\> *x y* so that *x<sup>2</sup> + y<sup>2</sup>* = 1;  
61   * \<3D direction\>: It is a \<3D point\> *x y z* so that *x<sup>2</sup> + y<sup>2</sup> + z<sup>2</sup>* = 1;  
62   * \<+\>: It is an arithmetic operation of addition.
63   
64   The format consists of the following sections:  
65
66   * \<content type\>;  
67   * \<version\>;  
68   * \<locations\>;  
69   * \<geometry\>;  
70   * \<shapes\>.  
71  
72   \<content type\> = "DBRep_DrawableShape" \<_\\n\>\<_\\n\>;  
73   \<content type\> have other values [1].  
74  
75   \<version\> = ("CASCADE Topology V1, (c)  Matra-Datavision" | "CASCADE Topology V2, (c) Matra-Datavision" | "CASCADE Topology V3, (c) Open Cascade")\<_\\n\>;
76   The difference of the versions is described in the  document.  
77  
78   Sections \<locations\>, \<geometry\> and \<shapes\> are described below in separate chapters of the document.  
79  
80 @section specification__brep_format_4 Locations
81  
82 **Example**  
83
84 @verbatim 
85     Locations  3  
86     1  
87                    0               0               1               0   
88                    1               0               0               0   
89                    0               1               0               0   
90     1  
91                    1               0               0               4   
92                    0               1               0               5   
93                    0               0               1               6   
94     2   1 1 2 1 0  
95 @endverbatim
96  
97 **BNF-like Definition**
98
99 @verbatim
100     <locations> = <location header> <_\n> <location records>;  
101     <location header> = "Locations" <_> <location record count>;  
102     <location record count> = <int>;  
103     <location records> = <location record> ^ <location record count>;  
104     <location record> = <location record 1> | <location record 2>;  
105     <location record 1> = "1" <_\n> <location  data 1>;  
106     <location record 2> = "2" <_> <location  data 2>;  
107     <location data 1> = ((<_> <real>) ^ 4 <_\n>) ^ 3;  
108     <location data 2> = (<int> <_> <int> <_>)* "0" <_\n>;  
109 @endverbatim
110
111 **Description**
112
113 \<location data 1\> is interpreted as a 3 x 4 matrix
114 @f$Q =
115 \begin{pmatrix}
116 {q}_{1,1} &{q}_{1,2} &{q}_{1,3} &{q}_{1,4}\\
117 {q}_{2,1} &{q}_{2,2} &{q}_{2,3} &{q}_{2,4}\\
118 {q}_{3,1} &{q}_{3,2} &{q}_{3,3} &{q}_{3,4}
119 \end{pmatrix}@f$ 
120 which describes transformation of 3 dimensional space and satisfies the following constraints:  
121   * @f$ d \neq 0@f$ where @f$d = |Q_{2}|@f$ where
122     @f$ Q_{2} = \begin{pmatrix}
123     {q}_{1,1} &{q}_{1,2} &{q}_{1,3} &{q}_{1,4}\\
124     {q}_{2,1} &{q}_{2,2} &{q}_{2,3} &{q}_{2,4}\\
125     {q}_{3,1} &{q}_{3,2} &{q}_{3,3} &{q}_{3,4}
126     \end{pmatrix}; @f$  
127   * @f$ Q_{3}^{T} = Q_{3}^{-1}@f$ where @f$Q_{3} = Q_{2}/d^{1/3}. @f$  
128  
129 The transformation transforms a point (x, y, z) to another point (u, v, w) by the rule:
130 @f[ \begin{pmatrix}
131 u \\ v \\ w
132 \end{pmatrix} = 
133 Q\cdot(x\;y\;z\;1)^{T} =
134 \begin{pmatrix}
135 {q}_{1,1}\cdot x +{q}_{1,2}\cdot y +{q}_{1,3}\cdot z +{q}_{1,4}\\
136 {q}_{2,1}\cdot x +{q}_{2,2}\cdot y +{q}_{2,3}\cdot z +{q}_{2,4}\\
137 {q}_{3,1}\cdot x +{q}_{3,2}\cdot y +{q}_{3,3}\cdot z +{q}_{3,4}
138 \end{pmatrix} . @f]
139
140 *Q* may be a composition of matrices for the following elementary transformations:  
141  
142   *  parallel translation --
143      @f$ \begin{pmatrix}
144      1 &0 &0 &{q}_{1,4}\\ 
145          0 &1 &0 &{q}_{2,4}\\ 
146          0 &0 &1 &{q}_{3,4}
147          \end{pmatrix}; @f$  
148   *  rotation around an axis with a direction *D(D<sub>x</sub>, D<sub>y</sub>, D<sub>z</sub>)* by an angle @f$ \varphi @f$ --  
149
150         @f[ \begin{pmatrix}
151         D_{x}^{2} \cdot (1-cos(\varphi)) + cos(\varphi) &D_{x} \cdot D_{y} \cdot (1-cos(\varphi)) - D_{z} \cdot sin(\varphi) &D_{x} \cdot D_{z} \cdot (1-cos(\varphi)) + D_{y} \cdot sin(\varphi) &0\\
152         D_{x} \cdot D_{y} \cdot (1-cos(\varphi)) + D_{z} \cdot sin(\varphi) &D_{y}^{2} \cdot (1-cos(\varphi)) + cos(\varphi) &D_{y} \cdot D_{z} \cdot (1-cos(\varphi)) - D_{x} \cdot sin(\varphi) &0\\
153         D_{x} \cdot D_{z} \cdot (1-cos(\varphi)) - D_{y} \cdot sin(\varphi) &D_{y} \cdot D_{z} \cdot (1-cos(\varphi)) + D_{x} \cdot sin(\varphi) &D_{z}^{2} \cdot (1-cos(\varphi)) + cos(\varphi) &0
154         \end{pmatrix}; @f]  
155  
156   *  scaling -- @f$ \begin{pmatrix} s &0 &0 &0\\ 0 &s &0 &0\\ 0 &0 &s &0 \end{pmatrix} @f$ where @f$ S \in (-\infty,\; \infty)/\left \{ 0 \right \}; @f$ 
157   *  central symmetry -- @f$ \begin{pmatrix} -1 &0 &0 &0\\ 0 &-1 &0 &0\\ 0 &0 &-1 &0 \end{pmatrix}; @f$  
158   *  axis symmetry -- @f$ \begin{pmatrix} -1 &0 &0 &0\\ 0 &-1 &0 &0\\ 0 &0 &1 &0 \end{pmatrix}; @f$  
159   *  plane symmetry -- @f$ \begin{pmatrix} 1 &0 &0 &0\\ 0 &1 &0 &0\\ 0 &0 &-1 &0 \end{pmatrix}. @f$ 
160  
161 \<location data 2\> is interpreted as a composition of locations raised to a power and placed above this \<location data 2\> in  the section \<locations\>. \<location data 2\> is a sequence @f$l_{1}p_{1} ... l_{n}p_{n}@f$ of @f$ n \geq 0 @f$ integer pairs @f$ l_{i}p_{i} \; (1 \leq i \leq n) @f$. \<flag\> 0 is the indicator  of the sequence end. The sequence is interpreted as a composition @f$ L_{l_{1}}^{p_{1}} \cdot ... \cdot L_{l_{n}}^{p_{n}} @f$ where @f$ L_{l_{i}} @f$ is a location from @f$ l_{i} @f$-th \<location  record\> in the section locations. \<location record\> numbering  starts from 1.  
162  
163  
164 @section specification__brep_format_5  Geometry
165
166 @verbatim
167     <geometry> =  
168     <2D curves>  
169     <3D curves>  
170     <3D polygons> 
171     <polygons on triangulations>  
172     <surfaces>  
173     <triangulations>;  
174 @endverbatim 
175  
176 @subsection specification__brep_format_5_1  3D curves
177  
178 **Example**
179
180 @verbatim
181     Curves 13  
182     1 0 0 0 0 0 1   
183     1 0 0 3 -0 1 0   
184     1 0 2 0 0 0 1   
185     1 0 0 0 -0 1 0   
186     1 1 0 0 0 0 1   
187     1 1 0 3 0 1 0   
188     1 1 2 0 0 0 1   
189     1 1 0 0 -0 1 0   
190     1 0 0 0 1 0 -0   
191     1 0 0 3 1 0 -0   
192     1 0 2 0 1 0 -0   
193     1 0 2 3 1 0 -0   
194     1 1 0 0 1 0 0   
195 @endverbatim 
196  
197 **BNF-like Definition**
198
199 @verbatim
200     <3D curves> = <3D curve header> <_\n> <3D curve records>;  
201      
202     <3D curve header> = "Curves" <_> <3D curve count>;  
203      
204     <3D curve count> = <int>;  
205      
206     <3D curve records> = <3D curve record> ^ <3D curve count>;  
207      
208     <3D curve record> =  
209     <3D curve record 1> |  
210     <3D curve record 2> |  
211     <3D curve record 3> |  
212     <3D curve record 4> |  
213     <3D curve record 5> |  
214     <3D curve record 6> |  
215     <3D curve record 7> |  
216     <3D curve record 8> |  
217     <3D curve record 9>;  
218  @endverbatim
219  
220 @subsubsection specification__brep_format_5_1_1 Line - \<3D curve record 1\>
221  
222 **Example**  
223
224 @verbatim
225     1 1 0 3 0 1 0   
226 @endverbatim
227  
228 **BNF-like Definition**
229
230 @verbatim
231     <3D curve record 1> = "1" <_> <3D point> <_> <3D direction> <_\n>;  
232 @endverbatim
233  
234 **Description**  
235  
236 \<3D curve record 1\> describes a line. The line data consist of a 3D point *P* and a 3D direction *D*. The line passes through the  point *P*, has  the direction *D* and  is defined by the following parametric equation:  
237  
238 @f[ C(u)=P+u \cdot D, \; u \in (-\infty,\; \infty). @f]
239  
240 The example record is interpreted as a line which  passes through a point *P*=(1, 0, 3), has a direction *D*=(0, 1, 0) and is defined by the  following parametric equation: @f$ C(u)=(1,0,3)+u \cdot (0,1,0) @f$.  
241  
242  
243 @subsubsection specification__brep_format_5_1_2 Circle - \<3D curve record 2\>
244  
245 **Example**  
246
247 @verbatim 
248     2 1 2 3 0 0 1 1 0 -0 -0 1 0 4  
249 @endverbatim 
250  
251 **BNF-like Definition**
252  
253 ~~~~{.cpp}
254     <3D curve record 2> = "2" <_> <3D circle center> <_> <3D circle N> <_> <3D circle Dx> <_> <3D circle Dy> <_> <3D circle radius> <_\n>;  
255      
256     <3D circle center> = <3D point>;  
257      
258     <3D circle N> = <3D direction>;  
259      
260     <3D circle Dx> = <3D direction>;  
261      
262     <3D circle Dy> = <3D direction>;  
263      
264     <3D circle radius> = <real>;  
265 ~~~~
266  
267 **Description**  
268  
269 \<3D curve record 2\> describes a circle. The  circle data consist of a 3D point *P*, pairwise orthogonal 3D directions *N*, *D<sub>x</sub>* and *D<sub>y</sub>* and a non-negative real *r*. The circle has a center *P* and is located in a plane with a normal *N*. The circle has a radius *r* and is defined by the following parametric equation:  
270  
271 @f[ C(u)=P+r \cdot (cos(u) \cdot D_{x} + sin(u) \cdot D_{y}), \; u \in [o,\;2 \cdot \pi). @f]  
272  
273 The  example record is interpreted as a circle which has its center *P*=(1, 2, 3), is located in plane  with a normal *N*=(0, 0 ,1).  Directions for the circle are *D<sub>x</sub>*=(1, 0 ,0) and *D<sub>y</sub>*=(0, 1 ,0). The circle has a radius *r*=4 and is defined by  the following parametric equation: @f$ C(u) = (1,2,3) + 4 \cdot ( cos(u) \cdot(1,0,0) + sin(u) \cdot (0,1,0) ) @f$.  
274  
275  
276 @subsubsection specification__brep_format_5_1_3 Ellipse - \<3D curve record 3\> 
277  
278 **Example**  
279
280 @verbatim
281     3 1 2 3 0 0 1 1 0 -0 -0 1 0 5  4  
282 @endverbatim
283  
284 **BNF-like Definition**
285
286 ~~~~{.cpp}
287     <3D curve record 3> = "3" <_> <3D ellipse center> <_> <3D ellipse N> <_> <3D ellipse Dmaj> <_> <3D ellipse Dmin> <_> <3D ellipse Rmaj> <_> <3D ellipse Rmin> <_\n>;  
288      
289     <3D ellipse center> = <3D point>;  
290      
291     <3D ellipse N> = <3D direction>;  
292      
293     <3D ellipse Dmaj> = <3D direction>;  
294      
295     <3D ellipse Dmin> = <3D direction>;  
296      
297     <3D ellipse Rmaj> = <real>;  
298      
299     <3D ellipse Rmin> = <real>;  
300 ~~~~
301  
302 **Description**  
303  
304 \<3D curve record 3\> describes an ellipse. The  ellipse data consist of a 3D point *P*, pairwise orthogonal 3D directions *N*, *D<sub>maj</sub>* and *D<sub>min</sub>* and non-negative reals *r<sub>maj</sub>* and *r<sub>min</sub>* so that *r<sub>min</sub>* @f$ \leq @f$ *r<sub>maj</sub>*. The ellipse has its  center *P*, is  located in plane with the normal *N*, has major and minor axis directions *D<sub>maj</sub>* and *D<sub>min</sub>*, major and minor radii *r<sub>maj</sub>* and *r<sub>min</sub>* and is defined by the following parametric equation:  
305  
306 @f[ C(u)=P+r_{maj} \cdot cos(u) \cdot D_{maj} + r_{min} \cdot sin(u) \cdot D_{min}, u \in [0, 2 \cdot \pi). @f]
307  
308 The  example record is interpreted as an ellipse which has its center *P*=(1, 2, 3), is located in plane with a normal *N*=(0, 0, 1), has major and minor axis directions *D<sub>maj</sub>*=(1, 0, 0) and *D<sub>min</sub>*=(0, 1, 0), major and minor radii *r<sub>maj</sub>*=5 and *r<sub>min</sub>*=4 and is defined by  the following parametric equation: @f$ C(u) = (1,2,3) + 5 \cdot cos(u) \cdot(1,0,0) + 4 \cdot sin(u) \cdot (0,1,0) @f$.  
309  
310  
311 @subsubsection specification__brep_format_5_1_4 Parabola - \<3D curve record 4\> 
312  
313 **Example**  
314
315 @verbatim 
316     4 1 2 3 0 0 1 1 0 -0 -0 1 0  16  
317 @endverbatim 
318  
319 **BNF-like Definition**  
320
321 ~~~~{.cpp}
322     <3D curve record 4> = "4" <_> <3D parabola origin> <_> <3D parabola N> <_> <3D parabola Dx> <_> <3D parabola Dy> <_> <3D parabola focal length> <_\n>;  
323      
324     <3D parabola origin> = <3D point>;  
325      
326     <3D parabola N> = <3D direction>;  
327      
328     <3D parabola Dx> = <3D direction>;  
329      
330     <3D parabola Dy> = <3D direction>;  
331      
332     <3D parabola focal length> = <real>;  
333 ~~~~
334  
335 **Description**  
336  
337 \<3D curve record 4\> describes a parabola. The  parabola data consist of a 3D point *P*, pairwise orthogonal 3D directions *N*, *D<sub>x</sub>* and *D<sub>y</sub>* and a non-negative real *f*. The parabola is located in plane which passes through the point *P* and has the normal *N*. The parabola has a focus length *f* and is defined by the following parametric equation:  
338  
339 @f[ C(u)=P+\frac{u^{2}}{4 \cdot f} \cdot D_{x} + u \cdot D_{y}, u \in (-\infty,\; \infty) \Leftarrow f \neq 0; @f]
340 @f[ C(u)=P+u \cdot D_{x}, u \in (-\infty,\; \infty) \Leftarrow f = 0\;(degenerated\;case). @f] 
341  
342 The  example record is interpreted as a parabola in plane which passes through a point *P*=(1, 2, 3) and has a normal *N*=(0, 0, 1). Directions for the parabola are *D<sub>x</sub>*=(1, 0, 0) and *D<sub>y</sub>*=(0, 1, 0). The parabola has a focus length *f*=16 and is defined by the following parametric equation: @f$ C(u) = (1,2,3) + \frac{u^{2}}{64} \cdot (1,0,0) + u \cdot (0,1,0) @f$.  
343  
344  
345 @subsubsection specification__brep_format_5_1_5 Hyperbola - \<3D curve record 5\> 
346  
347 **Example**  
348
349 @verbatim
350     5 1 2 3 0 0 1 1 0 -0 -0 1 0 5  4  
351 @endverbatim
352  
353 **BNF-like Definition**  
354
355 ~~~~{.cpp}
356     <3D curve record 5> = "5" <_> <3D hyperbola origin> <_> <3D hyperbola N> <_> <3D hyperbola Dx> <_> <3D hyperbola Dy> <_> <3D hyperbola Kx> <_> <3D hyperbola Ky> <_\n>;  
357      
358     <3D hyperbola origin> = <3D point>;  
359      
360     <3D hyperbola N> = <3D direction>;  
361      
362     <3D hyperbola Dx> = <3D direction>;  
363      
364     <3D hyperbola Dy> = <3D direction>;  
365      
366     <3D hyperbola Kx> = <real>;  
367      
368     <3D hyperbola Ky> = <real>;  
369 ~~~~
370  
371 **Description**
372  
373 \<3D curve record 5\> describes a hyperbola. The  hyperbola data consist of a 3D point *P*, pairwise orthogonal 3D directions *N*, *D<sub>x</sub>* and *D<sub>y</sub>* and non-negative reals *k<sub>x</sub>* and *k<sub>y</sub>*. The hyperbola is  located in plane which passes through the point *P* and has the normal *N*. The hyperbola is defined by  the following parametric equation:  
374  
375 @f[ C(u)=P+k_{x} \cdot cosh(u) \cdot D_{x}+k_{y} \cdot sinh(u) \cdot D_{y} , u \in (-\infty,\; \infty). @f]  
376  
377 The  example record is interpreted as a hyperbola in plane which passes through a point *P*=(1, 2, 3) and has a normal *N*=(0, 0, 1). Other hyperbola data are *D<sub>x</sub>*=(1, 0, 0), *D<sub>y</sub>*=(0, 1, 0), *k<sub>x</sub>*=5 and *k<sub>y</sub>*=4. The hyperbola is defined by the following parametric equation: @f$ C(u) = (1,2,3) + 5 \cdot cosh(u) \cdot (1,0,0) +4 \cdot sinh(u) \cdot (0,1,0) @f$.  
378  
379  
380 @subsubsection specification__brep_format_5_1_6 Bezier Curve - \<3D curve record 6\> 
381  
382 **Example**  
383
384 @verbatim
385     6 1 2 0 1 0  4 1 -2 0  5 2 3  0  6   
386 @endverbatim
387  
388 **BNF-like Definition**
389
390 @verbatim
391         <3D curve record 6> = "6" <_> <3D Bezier rational flag> <_> <3D Bezier degree> 
392         <3D Bezier weight poles> <_\n>;
393                 
394         <3D Bezier rational flag> = <flag>;
395                 
396         <3D Bezier degree> = <int>;
397
398         3D Bezier weight poles> = (<_> <3D Bezier weight pole>) ^ (<3D Bezier degree> <+> "1");
399
400         <3D Bezier weight pole> = <3D point> [<_> <real>];
401 @endverbatim
402  
403 **Description**  
404  
405 \<3D curve record 6\> describes a Bezier curve. The curve data consist of a rational *r*, a degree @f$ m \leq 25 @f$ and weight poles.  
406  
407 The weight poles are *m*+1 3D points *B<sub>0</sub> ... B<sub>m</sub>* if the flag *r* is 0. The weight poles are *m*+1 pairs *B<sub>0</sub>h<sub>0</sub> ... B<sub>m</sub>h<sub>m</sub>* if flag *r* is 1. Here *B<sub>i</sub>* is a 3D point and *h<sub>i</sub>* is a positive real @f$ (0 \leq i \leq m) @f$. @f$ h_{i}=1\; (0 \leq i \leq m) @f$ if the flag *r* is 0.  
408  
409 The Bezier curve is defined by the following  parametric equation:  
410  
411 @f[ C(u) = \frac{\sum_{i=0}^{m}B_{i} \cdot h_{i} \cdot C_{m}^{i} \cdot u^{i} \cdot (1-u)^{m-i}}{\sum_{i=0}^{m}h_{i} \cdot C_{m}^{i} \cdot u^{i} \cdot (1-u)^{m-i}},\;u \in [0,\; 1] @f]
412  
413 where @f$ 0^{0} \equiv 1 @f$.  
414  
415 The example record is interpreted as a Bezier curve with a rational flag *r*=1, degree *m*=2 and weight poles *B<sub>0</sub>*=(0, 1, 0), *h<sub>0</sub>*=4, *B<sub>1</sub>*=(1, -2, 0), *h<sub>1</sub>*=5 and *B<sub>2</sub>*=(2, 3, 0), *h<sub>2</sub>*=6. The Bezier curve is defined  by the following parametric equation:  
416  
417 @f[ C(u)=\frac{(0,1,0) \cdot 4 \cdot (1-u)^{2}+(1,-2,0) \cdot 5 \cdot 2 \cdot u \cdot (1-u) + (2,3,0) \cdot 6 \cdot u^{2} )}{4 \cdot (1-u)^{2}+5 \cdot 2 \cdot u \cdot (1-u)+6 \cdot u^{2}}. @f]  
418  
419  
420 @subsubsection specification__brep_format_5_1_7 B-Spline Curve - \<3D curve record 7\>
421  
422 **Example**  
423
424 @verbatim
425     7 1 0  1 3 5  0 1 0  4 1 -2  0  5 2 3 0  6  
426      0 1 0.25 1 0.5 1 0.75 1 1 1  
427 @endverbatim
428  
429 **BNF-like Definition**
430
431 ~~~~{.cpp}
432         <3D curve record 7> = "7" <_> <3D B-spline rational flag> <_> "0" <_> <3D B-spline degree> <_> 
433         <3D B-spline pole count> <_> <3D B-spline multiplicity knot count> <3D B-spline weight poles> 
434         <_\n> <3D B-spline multiplicity knots> <_\n>;
435
436         <3D B-spline rational flag> = <flag>;
437
438         <3D B-spline degree> = <int>;
439
440         <3D B-spline pole count> = <int>;
441
442         <3D B-spline multiplicity knot count> = <int>;
443
444         <3D B-spline weight poles> = (<_> <3D B-spline weight pole>) ^ <3D B-spline pole count>;
445
446         <3D B-spline weight pole> = <3D point> [<_> <real>];
447
448         <3D B-spline multiplicity knots> = (<_> <3D B-spline multiplicity knot>) ^ <3D B-spline multiplicity knot count>;
449
450         <3D B-spline multiplicity knot> = <real> <_> <int>;  
451 ~~~~
452  
453 **Description**  
454  
455 \<3D curve record 7\> describes a B-spline curve.  The curve data consist of a rational flag *r*, a degree @f$ m \leq 25 @f$, pole count @f$ n \geq 2 @f$, multiplicity knot count *k*, weight poles and  multiplicity knots.  
456  
457 The weight poles are *n* 3D points *B<sub>1</sub> ... B<sub>n</sub>* if the flag *r* is 0. The weight poles are *n* pairs *B<sub>1</sub>h<sub>1</sub> ... B<sub>n</sub>h<sub>n</sub>* if the flag *r* is 1. Here *B<sub>i</sub>* is a 3D point and *h<sub>i</sub>* is a positive real @f$ (1 \leq i \leq n) @f$.  @f$ h_{i}=1\; (1 \leq i \leq n) @f$ if the flag *r* is 0.  
458  
459 The multiplicity knots are *k* pairs *u<sub>1</sub>q<sub>1</sub> ... u<sub>k</sub>q<sub>k</sub>*. Here *u<sub>i</sub>* is a knot with a multiplicity @f$ q_{i} \geq 1 \; (1 \leq i \leq k) @f$ so that  
460  
461 @f[ u_{i} < u_{i+1} (1 \leq i \leq k-1),@f]
462 @f[ q_{1} \leq m+1,\; q_{k} \leq m+1,\; q_{i} \leq m\; (2 \leq i \leq k-1), \sum_{i=1}^{k}q_{i}=m+n+1. @f]  
463  
464 The B-spline curve is defined by the following  parametric equation:  
465  
466 @f[ C(u) = \frac{\sum_{i=1}^{n}B_{i} \cdot h_{i} \cdot N_{i,m+1}(u)}{\sum_{i=1}^{n}h_{i} \cdot N_{i,m+1}(u)},\;u \in [u_{1},\; u_{k}] @f] 
467  
468 where functions @f$ N_{i,j} @f$ have the following recursion definition  by *j*:  
469
470 @f[ N_{i,1}(u)=\left\{\begin{matrix}
471 1\Leftarrow \bar{u}_{i} \leq u \leq \bar{u}_{i+1}\\ 
472 0\Leftarrow u < \bar{u}_{i} \vee  \bar{u}_{i+1} \leq u \end{matrix} \right.,\;
473 N_{i,j}(u)=\frac{(u-\bar{u}_{i}) \cdot N_{i,j-1}(u) }{\bar{u}_{i+j-1}-\bar{u}_{i}}+ \frac{(\bar{u}_{i+j}-u) \cdot N_{i+1,j-1}(u)}{\bar{u}_{i+j}-\bar{u}_{i+1}},\;(2 \leq j \leq m+1) @f] 
474  
475 where 
476  
477 @f[ \bar{u}_{i} = u_{j},\; (1 \leq j \leq k,\; \sum_{l=1}^{j-1}q_{l}+1 \leq i \leq \sum_{l=1}^{j}q_{l} ). @f]  
478  
479 The example record is interpreted as a B-spline curve  with a rational flag *r*=1, a degree *m*=1, pole count *n*=3, multiplicity knot count *k*=5, weight poles *B<sub>1</sub>*=(0,1,0), *h<sub>1</sub>*=4, *B<sub>2</sub>*=(1,-2,0), *h<sub>2</sub>*=5 and *B<sub>3</sub>*=(2,3,0), *h<sub>3</sub>*=6, multiplicity knots *u<sub>1</sub>*=0, *q<sub>1</sub>*=1, *u<sub>2</sub>*=0.25, *q<sub>2</sub>*=1, *u<sub>3</sub>*=0.5, *q<sub>3</sub>*=1, *u<sub>4</sub>*=0.75, *q<sub>4</sub>*=1 and *u<sub>5</sub>*=1, *q<sub>5</sub>*=1. The B-spline curve is defined  by the following parametric equation:  
480  
481 @f[ C(u)=\frac{(0,1,0) \cdot 4 \cdot N_{1,2}(u) + (1,-2,0) \cdot 5 \cdot N_{2,2}(u)+(2,3,0) \cdot 6 \cdot N_{3,2}(u)}{4 \cdot N_{1,2}(u)+5 \cdot N_{2,2}(u)+6 \cdot N_{3,2}(u)}. @f]  
482  
483  
484 @subsubsection specification__brep_format_5_1_8 Trimmed Curve - \<3D curve record 8\>
485  
486 **Example**  
487
488 @verbatim
489     8  -4 5  
490     1 1 2 3 1 0 0   
491 @endverbatim
492  
493 **BNF-like Definition**  
494
495 ~~~~{.cpp}
496         <3D curve record 8> = "8" <_> <3D trimmed curve u min> <_> <3D trimmed curve u max> <_\n> <3D curve record>;
497
498         <3D trimmed curve u min> = <real>;
499
500         <3D trimmed curve u max> = <real>;  
501 ~~~~
502  
503 **Description**  
504  
505 \<3D curve record 8\> describes a trimmed curve.  The trimmed curve data consist of reals *u<sub>min</sub>* and *u<sub>max</sub>* and \<3D curve record\> so that *u<sub>min</sub>* < *u<sub>max</sub>*. The trimmed curve is a restriction of the base curve *B* described in the record to the segment @f$ [u_{min},\;u_{max}]\subseteq domain(B) @f$. The trimmed curve is  defined by the following parametric equation:  
506  
507 @f[ C(u)=B(u),\; u \in [u_{min},\;u_{max}]. @f]  
508  
509 The  example record is interpreted as a trimmed curve with *u<sub>min</sub>*=-4 and *u<sub>max</sub>*=5 for the base curve @f$ B(u)=(1,2,3)+u \cdot (1,0,0) @f$. The trimmed curve is  defined by the following parametric equation: @f$ C(u)=(1,2,3)+u \cdot (1,0,0),\; u \in [-4,\; 5] @f$.  
510  
511  
512 @subsubsection specification__brep_format_5_1_9 Offset Curve - \<3D curve record 9\> 
513  
514 **Example**  
515
516 @verbatim
517     9 2  
518     0 1 0   
519     1 1 2 3 1 0 0   
520 @endverbatim
521  
522 **BNF-like Definition**  
523
524 @verbatim
525         <3D curve record 9> = "9" <_> <3D offset curve distance> <_\n>;
526         <3D offset curve direction> <_\n>;
527         <3D curve record>;
528
529         <3D offset curve distance> = <real>;
530
531         <3D offset curve direction> = <3D direction>;  
532 @endverbatim
533  
534 **Description**  
535  
536 \<3D curve record 9\> describes an offset curve. The offset curve data consist of a distance *d*, a 3D direction *D* and a \<3D curve record\>. The offset curve is the result of offsetting the base curve *B* described in the record to the distance *d* along the vector @f$ [B'(u),\; D] \neq \vec{0} @f$. The offset curve is defined  by the following parametric equation:  
537  
538 @f[ C(u)=B(u)+d \cdot \frac{[B'(u),\; D]}{|[B'(u),\; D]|},\; u \in domain(B) . @f]   
539  
540 The example record is interpreted as an offset curve with a distance *d*=2, direction *D*=(0, 1, 0), base curve @f$ B(u)=(1,2,3)+u \cdot (1,0,0) @f$ and defined by the  following parametric equation: @f$ C(u)=(1,2,3)+u \cdot (1,0,0)+2 \cdot (0,0,1) @f$.  
541  
542 @subsection specification__brep_format_5_2  Surfaces
543  
544 **Example**  
545
546 @verbatim
547     Surfaces 6  
548     1 0 0 0 1 0 -0 0 0 1 0 -1 0   
549     1 0 0 0 -0 1 0 0 0 1 1 0 -0   
550     1 0 0 3 0 0 1 1 0 -0 -0 1 0   
551     1 0 2 0 -0 1 0 0 0 1 1 0 -0   
552     1 0 0 0 0 0 1 1 0 -0 -0 1 0   
553     1 1 0 0 1 0 -0 0 0 1 0 -1 0   
554 @endverbatim
555  
556 **BNF-like Definition**  
557
558 @verbatim
559         <surfaces> = <surface header> <_\n> <surface records>;
560
561         <surface header> = “Surfaces” <_> <surface count>;
562
563         <surface records> = <surface record> ^ <surface count>;
564
565         <surface record> =
566         <surface record 1> |
567         <surface record 2> |
568         <surface record 3> |
569         <surface record 4> |
570         <surface record 5> |
571         <surface record 6> |
572         <surface record 7> |
573         <surface record 8> |
574         <surface record 9> |
575         <surface record 10> |
576         <surface record 11>;  
577 @endverbatim
578  
579 @subsubsection specification__brep_format_5_2_1 Plane - \< surface record 1 \>
580
581 **Example**  
582
583 @verbatim
584     1 0 0 3 0 0 1 1 0 -0 -0 1 0   
585 @endverbatim
586  
587 **BNF-like Definition**
588
589 @verbatim
590         <surface record 1> = "1" <_> <3D point> (<_> <3D direction>) ^ 3 <_\n>;
591 @endverbatim
592  
593 **Description**  
594  
595 \<surface record 1\> describes a plane. The plane  data consist of a 3D point *P* and pairwise orthogonal 3D directions *N*, *D<sub>u</sub>* and *D<sub>v</sub>*. The plane passes through the  point *P*, has  the normal *N* and  is defined by the following parametric equation:  
596  
597 @f[ S(u,v)=P+u \cdot D_{u}+v \cdot D_{v},\; (u,\;v) \in (-\infty,\; \infty) \times (-\infty,\; \infty). @f]  
598  
599 The example record is interpreted as a plane which  passes through a point *P*=(0, 0, 3), has a normal *N*=(0, 0, 1) and is defined by the  following parametric equation: @f$ S(u,v)=(0,0,3)+u \cdot (1,0,0) + v \cdot (0,1,0) @f$.  
600  
601  
602 @subsubsection specification__brep_format_5_2_2 Cylinder - \< surface record 2 \> 
603  
604 **Example**  
605
606 @verbatim
607     2 1 2 3 0 0 1 1 0 -0 -0 1 0 4  
608 @endverbatim
609  
610 **BNF-like Definition**  
611
612 @verbatim
613     <surface record 2> = "2" <_> <3D point> (<_> <3D direction>) ^ 3 <_> <real> <_\n>;
614 @endverbatim
615  
616 **Description**  
617  
618 \<surface record 2\> describes a cylinder. The  cylinder data consist of a 3D point *P*, pairwise orthogonal 3D directions *D<sub>v</sub>*, *D<sub>X</sub>* and *D<sub>Y</sub>* and a non-negative real *r*. The cylinder axis  passes through the point *P* and has the direction *D<sub>v</sub>*. The cylinder has  the radius *r* and  is defined by the following parametric equation:  
619  
620 @f[ S(u,v)=P+r \cdot (cos(u) \cdot D_{x}+sin(u) \cdot D_{y} )+v \cdot D_{v},\; (u,v) \in [0,\; 2 \cdot \pi) \times (-\infty,\; \infty) . @f]  
621  
622 The  example record is interpreted as a cylinder which axis passes through a point *P*=(1, 2, 3) and has a direction *D<sub>v</sub>*=(0, 0, 1). Directions for the  cylinder are *D<sub>X</sub>*=(1,0,0) and *D<sub>Y</sub>*=(0,1,0). The cylinder has a radius *r*=4 and is defined by the following  parametric equation: @f$ S(u,v)=(1,2,3)+4 \cdot ( cos(u) \cdot D_{X} + sin(u) \cdot D_{Y} ) + v \cdot D_{v}. @f$  
623  
624  
625 @subsubsection specification__brep_format_5_2_3 Cone - \< surface record 3 \> 
626  
627 **Example**  
628
629 @verbatim
630     3 1 2 3 0 0 1 1 0 -0 -0 1 0 4  
631     0.75
632 @endverbatim
633  
634  
635 **BNF-like Definition**
636
637 @verbatim
638     <surface record 3> = "3" <_> <3D point> (<_> <3D direction>) ^ 3 (<_> <real>) ^ 2 <_\n>;  
639 @endverbatim
640  
641 **Description**  
642  
643 \<surface record 3\> describes a cone. The cone  data consist of a 3D point *P*, pairwise orthogonal 3D directions *D<sub>Z</sub>*, *D<sub>X</sub>* and *D<sub>Y</sub>*, a non-negative real *r* and a real @f$ \varphi \in (-\pi /2,\; \pi/2)/\left \{ 0 \right \} @f$. The cone axis passes  through the point *P* and  has the direction *D<sub>Z</sub>*. The plane which passes through the point *P* and is parallel to directions *D<sub>X</sub>* and *D<sub>Y</sub>* is the cone referenced  plane. The cone section by the plane is a circle with the radius *r*. The direction from  the point *P* to  the cone apex is @f$ -sgn(\varphi) \cdot D_{Z} @f$.  The cone has a half-angle @f$| \varphi | @f$ and is defined by the following  parametric equation:  
644  
645 @f[ S(u,v)=P+(r+v \cdot sin(\varphi)) \cdot (cos(u) \cdot D_{X}+sin(u) \cdot D_{Y})+v \cdot cos(\varphi) \cdot D_{Z}, (u,v) \in [0,\; 2 \cdot \pi) \times (-\infty,\; \infty) . @f]  
646  
647 The example record is interpreted as a cone with an axis  which passes through a point *P*=(1, 2, 3) and has a direction *D<sub>Z</sub>*=(0, 0, 1). Other cone data are *D<sub>X</sub>*=(1, 0, 0), *D<sub>Y</sub>*=(0, 1, 0), *r*=4 and @f$ \varphi = 0.75 @f$. The cone is defined by the  following parametric equation:  
648 @f[ S(u,v)=(1,2,3)+( 4 + v \cdot sin(0.75)) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + v \cdot cos(0.75) \cdot (0,0,1) . @f]  
649  
650
651 @subsubsection specification__brep_format_5_2_4 Sphere - \< surface record 4 \> 
652  
653 **Example**  
654
655 @verbatim
656     4 1 2 3 0 0 1 1 0 -0 -0 1 0 4  
657 @endverbatim
658  
659 **BNF-like Definition**
660
661 @verbatim
662     <surface record 4> = "4" <_> <3D point> (<_> <3D direction>) ^ 3 <_> <real> <_\n>;  
663 @endverbatim
664  
665 **Description**  
666  
667 \<surface record 4\> describes a sphere. The  sphere data consist of a 3D point *P*, pairwise orthogonal 3D directions *D<sub>Z</sub>*, *D<sub>X</sub>* and *D<sub>Y</sub>* and a non-negative real *r*. The sphere has the center *P*, radius *r* and  is defined by the following parametric equation:  
668  
669 @f[ S(u,v)=P+r \cdot cos(v) \cdot (cos(u) \cdot D_{x}+sin(u) \cdot D_{y} ) +r \cdot sin(v) \cdot D_{Z},\; (u,v) \in [0,\;2 \cdot \pi) \times [-\pi /2,\; \pi /2] . @f]  
670  
671 The  example record is interpreted as a sphere with its center *P*=(1, 2, 3). Directions for the sphere are  *D<sub>Z</sub>*=(0, 0, 1), *D<sub>X</sub>*=(1, 0, 0) and *D<sub>Y</sub>*=(0, 1, 0). The sphere has a radius  *r*=4 and is  defined by the following parametric equation:  
672 @f[ S(u,v)=(1,2,3)+ 4 \cdot cos(v) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + 4 \cdot sin(v) \cdot (0,0,1) . @f]   
673  
674  
675 @subsubsection specification__brep_format_5_2_5 Torus - \< surface record 5 \> 
676  
677 **Example**  
678
679 @verbatim
680     5 1 2 3 0 0 1 1 0 -0 -0 1 0 8  4  
681 @endverbatim
682  
683 **BNF-like Definition**
684
685 @verbatim
686     <surface record 5> = "5" <_> <3D point> (<_> <3D direction>) ^ 3 (<_> <real>) ^ 2 <_\n>;  
687 @endverbatim
688  
689 **Description**  
690  
691 \<surface record 5\> describes a torus. The torus  data consist of a 3D point *P*, pairwise orthogonal 3D directions *D<sub>Z</sub>*, *D<sub>X</sub>* and *D<sub>Y</sub>* and non-negative reals *r<sub>1</sub>* and *r<sub>2</sub>*. The torus axis  passes through the point *P* and has the direction *D<sub>Z</sub>*. *r<sub>1</sub>* is the distance from the  torus circle center to the axis. The torus circle has the radius *r<sub>2</sub>*. The torus is defined  by the following parametric equation:  
692  
693 @f[ S(u,v)=P+(r_{1}+r_{2} \cdot cos(v)) \cdot (cos(u) \cdot D_{x}+sin(u) \cdot D_{y} ) +r_{2} \cdot sin(v) \cdot D_{Z},\; (u,v) \in [0,\;2 \cdot \pi) \times [0,\; 2 \cdot \pi) . @f]    
694  
695 The example record is interpreted as a torus with an axis which passes through a point *P*=(1, 2, 3) and has a direction *D<sub>Z</sub>*=(0, 0, 1). *D<sub>X</sub>*=(1, 0, 0), *D<sub>Y</sub>*=(0, 1, 0), *r<sub>1</sub>*=8 and *r<sub>2</sub>*=4 for the torus. The torus is defined  by the following parametric equation:  
696 @f[ S(u,v)=(1,2,3)+ (8+4 \cdot cos(v)) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + 4 \cdot sin(v) \cdot (0,0,1) . @f]   
697  
698  
699 @subsubsection specification__brep_format_5_2_6 Linear Extrusion - \< surface record 6 \> 
700  
701 **Example**  
702
703 @verbatim
704     6 0 0.6 0.8   
705     2 1 2 3 0 0 1 1 0 -0 -0 1 0 4  
706 @endverbatim
707  
708 **BNF-like Definition**
709
710 @verbatim
711     <surface record 6> = "6" <_> <3D direction> <_\n> <3D curve record>;  
712 @endverbatim
713  
714 **Description**  
715  
716 \<surface record 6\> describes a linear extrusion  surface. The surface data consist of a 3D direction *D<sub>v</sub>* and a \<3D curve  record\>. The linear extrusion surface has the direction *D<sub>v</sub>*, the base curve *C* described in the  record and is defined by the following parametric equation:  
717  
718 @f[ S(u,v)=C(u)+v \cdot D_{v},\; (u,v) \in domain(C) \times (-\infty,\; \infty) . @f]     
719  
720 The example record is interpreted as a linear  extrusion surface with a direction *D<sub>v</sub>*=(0, 0.6, 0.8). The base curve is a circle for the  surface. The surface is defined by the following parametric equation:
721
722 @f[ S(u,v)=(1,2,3)+4 \cdot (cos(u) \cdot (1,0,0)+sin(u) \cdot (0,1,0))+v \cdot (0, 0.6, 0.8),\; (u,v) \in [0,\; 2 \cdot \pi) \times (-\infty,\; \infty). @f]  
723  
724  
725 @subsubsection specification__brep_format_5_2_7 Revolution Surface - \< surface record 7 \> 
726  
727 **Example**  
728
729 @verbatim
730     7 -4 0 3 0 1 0   
731     2 1 2 3 0 0 1 1 0 -0 -0 1 0 4  
732 @endverbatim
733  
734 **BNF-like Definition**
735
736 @verbatim
737     <surface record 7> = "7" <_> <3D point> <_> <3D direction> <_\n> <3D curve record>;  
738 @endverbatim
739  
740 **Description**  
741  
742 \<surface record 7\> describes a revolution  surface. The surface data consist of a 3D point *P*, a 3D direction *D* and a \<3D curve  record\>. The surface axis passes through the point *P* and has the direction *D*. The base curve *C* described by the  record and the axis are coplanar. The surface is defined by the following  parametric equation:  
743  
744 @f[ S(u,v)= P+V_{D}(v)+cos(u) \cdot (V(v)-V_{D}(v))+sin(u) \cdot [D,V(v)],\;(u,v) \in [0,\; 2 \cdot \pi)\times domain(C) @f] 
745  
746 where @f$ V(v)=C(v)-P, V_{D}(v)=(D,V(v)) \cdot D @f$.  
747  
748 The example record is interpreted as a revolution surface with an axis which passes through a point *P*=(-4, 0, 3) and has a direction *D*=(0, 1, 0). The base curve is a circle  for the surface. The surface is defined by the following parametric equation:  
749
750 @f[ S(u,v)= (-4,0,3)+V_{D}(v)+cos(u) \cdot (V(v)-V_{D}(v))+sin(u) \cdot [(0,1,0),V(v)],\;(u,v) \in [0,\; 2 \cdot \pi)\times [0,\; 2 \cdot \pi) @f] 
751  
752 where @f$ V(v)=(5,2,0)+4 \cdot (cos(v) \cdot (1,0,0)+sin(v) \cdot (0,1,0)), V_{D}(v)=((0,1,0),V(v)) \cdot (0,1,0) @f$.  
753  
754  
755 @subsubsection specification__brep_format_5_2_8 Bezier Surface - \< surface record 8 \> 
756  
757 **Example**  
758
759 @verbatim
760     8 1 1 2 1 0 0 1  7 1 0 -4  10    
761     0 1 -2  8 1 1 5  11   
762     0 2 3  9 1 2 6  12   
763 @endverbatim
764  
765 **BNF-like Definition**
766
767 ~~~~{.cpp}
768         <surface record 8> = "8" <_> <Bezier surface u rational flag> <_> <Bezier surface v rational flag> <_> <Bezier surface u degree> <_> <Bezier surface v degree> <_> 
769         <Bezier surface weight poles>;
770
771         <Bezier surface u rational flag> = <flag>;
772
773         <Bezier surface v rational flag> = <flag>;
774
775         <Bezier surface u degree> = <int>;
776
777         <Bezier surface v degree> = <int>;
778
779         <Bezier surface weight poles> =
780         (<Bezier surface weight pole group> <_\n>) ^ (<Bezier surface u degree> <+> "1");
781
782         <Bezier surface weight pole group> = <Bezier surface weight pole>
783         (<_> <Bezier surface weight pole>) ^ <Bezier surface v degree>;
784
785         <Bezier surface weight pole> = <3D point> [<_> <real>];  
786 ~~~~
787  
788 **Description**  
789  
790 \<surface record 8\> describes a Bezier surface.  The surface data consist of a u rational flag *r<sub>u</sub>*, v rational flag *r<sub>v</sub>*, u degree @f$ m_{u} \leq 25 @f$, v degree @f$ m_{v} \leq 25 @f$ and weight poles.  
791  
792 The weight poles are @f$ (m_{u}+1) \cdot (m_{v}+1) @f$ 3D points @f$ B_{i,j}\; ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$ if @f$ r_{u}+r_{v}=0 @f$. The weight poles are @f$ (m_{u}+1) \cdot (m_{v}+1) @f$ pairs @f$ B_{i,j}h_{i,j}\; ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$ if @f$ r_{u}+r_{v} \neq 0 @f$. Here @f$ B_{i,j} @f$ is a 3D point and @f$ h_{i,j} @f$ is a positive real @f$ ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$. @f$ h_{i,j}=1\; ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$ if @f$ r_{u}+r_{v} = 0 @f$.  
793  
794 The Bezier surface is defined by the following  parametric equation:  
795  
796 @f[ S(u,v)=\frac{\sum_{i=0}^{m_{u}} \sum_{j=0}^{m_{v}} B_{i,j} \cdot h_{i,j} \cdot C_{m_{u}}^{i} \cdot u^{i} \cdot (1-u)^{m_{u}-i} \cdot C_{m_{v}}^{j} \cdot v^{j} \cdot (1-v)^{m_{v}-j}}{\sum_{i=0}^{m_{u}} \sum_{j=0}^{m_{v}} h_{i,j} \cdot C_{m_{u}}^{i} \cdot u^{i} \cdot (1-u)^{m_{u}-i} \cdot C_{m_{v}}^{j} \cdot v^{j} \cdot (1-v)^{m_{v}-j}}, (u,v) \in [0,1] \times [0,1] @f]   
797  
798 where @f$ 0^{0} \equiv 1 @f$.  
799  
800 The example record is interpreted as a Bezier surface  with a u rational flag *r<sub>u</sub>*=1, v rational flag *r<sub>v</sub>*=1, u degree *m<sub>u</sub>*=2, v degree *m<sub>v</sub>*=1, weight poles *B<sub>0,0</sub>*=(0, 0, 1), *h<sub>0,0</sub>*=7, *B<sub>0,1</sub>*=(1, 0, -4), *h<sub>0,1</sub>*=10, *B<sub>1,0</sub>*=(0, 1, -2), *h<sub>1,0</sub>*=8, *B<sub>1,1</sub>*=(1, 1, 5), *h<sub>1,1</sub>*=11, *B<sub>2,0</sub>*=(0, 2, 3), *h<sub>2,0</sub>*=9 and *B<sub>2,1</sub>*=(1, 2, 6), *h<sub>2,1</sub>*=12. The surface is defined by  the following parametric equation:  
801  
802 @f[
803 \begin{align}
804 S(u,v)= [ (0,0,1) \cdot 7 \cdot (1-u)^{2} \cdot (1-v)+(1,0,-4) \cdot 10 \cdot (1-u)^{2} \cdot v+ (0,1,-2) \cdot 8 \cdot 2 \cdot u \cdot (1-u) \cdot (1-v) + \\
805 (1,1,5) \cdot 11 \cdot 2 \cdot u \cdot (1-u)  \cdot v+ (0,2,3) \cdot 9 \cdot u^{2} \cdot (1-v)+(1,2,6) \cdot 12 \cdot u^{2} \cdot v] \div [7 \cdot (1-u)^{2} \cdot (1-v)+ \\
806 10 \cdot (1-u)^{2} \cdot v+ 8 \cdot 2 \cdot u \cdot (1-u) \cdot (1-v)+ 11 \cdot 2 \cdot u \cdot (1-u) \cdot v+ 9 \cdot u^{2} \cdot (1-v)+12 \cdot u^{2} \cdot v ]
807 \end{align}
808 @f]
809  
810  
811 @subsubsection specification__brep_format_5_2_9 B-spline Surface - \< surface record 9 \> 
812  
813 **Example**  
814
815 @verbatim
816     9  1 1 0 0 1 1 3 2 5 4 0 0 1  7 1 0 -4  10   
817     0  1 -2  8 1 1 5  11   
818     0  2 3  9 1 2 6  12   
819      
820     0  1  
821     0.25  1  
822     0.5  1  
823     0.75  1  
824     1  1  
825      
826     0  1  
827     0.3  1  
828     0.7  1  
829     1 1  
830 @endverbatim
831  
832 **BNF-like Definition**
833
834 @verbatim
835         <surface record 9> = "9" <_> <B-spline surface u rational flag> <_> 
836         <B-spline surface v rational flag> <_> "0" <_> "0" <_> <B-spline surface u degree> <_> 
837         <B-spline surface v degree> <_> <B-spline surface u pole count> <_> 
838         <B-spline surface v pole count> <_> <B-spline surface u multiplicity knot count> <_> 
839         <B-spline surface v multiplicity knot count> <_> <B-spline surface weight poles> <_\n> 
840         <B-spline surface u multiplicity knots> <_\n> <B-spline surface v multiplicity knots>;
841
842         <B-spline surface u rational flag> = <flag>;
843
844         <B-spline surface v rational flag> = <flag>;
845
846         <B-spline surface u degree> = <int>;
847
848         <B-spline surface v degree> = <int>;
849
850         <B-spline surface u pole count> = <int>;
851
852         <B-spline surface v pole count> = <int>;
853
854         <B-spline surface u multiplicity knot count> = <int>;
855
856         <B-spline surface v multiplicity knot count> = <int>;
857
858         <B-spline surface weight poles> =
859         (<B-spline surface weight pole group> <_\n>) ^ <B-spline surface u pole count>;
860
861         <B-spline surface weight pole group> =
862         (<B-spline surface weight pole> <_>) ^ <B-spline surface v pole count>;
863
864         <B-spline surface weight pole> = <3D point> [<_> <real>];
865
866         <B-spline surface u multiplicity knots> =
867         (<B-spline surface u multiplicity knot> <_\n>) ^ <B-spline surface u multiplicity knot count>;
868
869         <B-spline surface u multiplicity knot> = <real> <_> <int>;
870
871         <B-spline surface v multiplicity knots> =
872         (<B-spline surface v multiplicity knot> <_\n>) ^ <B-spline surface v multiplicity knot count>;
873
874         <B-spline surface v multiplicity knot> = <real> <_> <int>;
875 @endverbatim
876  
877 **Description**  
878  
879 \<surface record 9\> describes a B-spline surface.  The surface data consist of a u rational flag *r<sub>u</sub>*, v rational flag *r<sub>v</sub>*, u degree @f$ m_{u} \leq 25 @f$, v degree @f$ m_{v} \leq 25 @f$, u pole count @f$ n_{u} \geq 2 @f$, v pole count @f$ n_{v} \geq 2 @f$, u multiplicity knot count *k<sub>u</sub>*, v multiplicity knot count *k<sub>v</sub>*, weight poles, u multiplicity  knots, v multiplicity knots.  
880  
881 The weight poles are @f$ n_{u} \cdot n_{v} @f$ 3D points @f$ B_{i,j}\; ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$ if @f$ r_{u}+r_{v}=0 @f$. The weight poles are @f$ n_{u} \cdot n_{v} @f$ pairs @f$ B_{i,j}h_{i,j}\; ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$ if @f$ r_{u}+r_{v} \neq 0 @f$. Here @f$ B_{i,j} @f$ is a 3D point and @f$ h_{i,j} @f$ is a positive real @f$ ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$. @f$ h_{i,j}=1\; ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$ if @f$ r_{u}+r_{v} = 0 @f$.  
882  
883 The u multiplicity knots are *k<sub>u</sub>* pairs @f$ u_{1}q_{1} ... u_{k_{u}}q_{k_{u}} @f$. Here @f$ u_{i} @f$ is a knot with multiplicity @f$ q_{i} \geq 1 \;(1\leq i\leq k_{u}) @f$ so that  
884  
885 @f[ u_{i} < u_{i+1} \; (1\leq i\leq k_{u}-1), \\
886 q_{1} \leq m_{u}+1,\; q_{k_{u}} \leq m_{u}+1,\; q_{i} \leq m_{u}\; (2\leq i\leq k_{u}-1),\; \sum_{i=1}^{k_{u}}q_{i}=m_{u}+n_{u}+1. @f]  
887  
888 The v multiplicity knots are *k<sub>v</sub>* pairs @f$ v_{1}t_{1} ... v_{k_{v}}t_{k_{v}} @f$. Here @f$ v_{j} @f$ is a knot with multiplicity @f$ t_{i} \geq  1\;(1\leq i\leq k_{v}) @f$ so that  
889  
890 @f[ v_{j} < v_{j+1} \; (1\leq j\leq k_{v}-1), \\
891 t_{1} \leq m_{v}+1,\; t_{k_{v}} \leq m_{v}+1,\; t_{j} \leq m_{v}\; (2\leq j\leq k_{v}-1),\; \sum_{j=1}^{k_{v}}t_{j}=m_{v}+n_{v}+1. @f] 
892  
893 The B-spline surface is defined by the following  parametric equation:  
894  
895 @f[ S(u,v)=\frac{\sum_{i=1}^{n_{u}} \sum_{j=1}^{n_{v}} B_{i,j} \cdot h_{i,j} \cdot N_{i,m_{u}+1}(u) \cdot M_{j,m_{v}+1}(v)}{\sum_{i=1}^{n_{u}} \sum_{j=1}^{n_{v}} h_{i,j} \cdot N_{i,m_{u}+1}(u) \cdot M_{j,m_{v}+1}(v)}, (u,v) \in [u_{1},u_{k_{u}}] \times [v_{1},v_{k_{v}}] @f]     
896  
897 where functions *N<sub>i,j</sub>* and *M<sub>i,j</sub>* have the following recursion definition by *j*:  
898  
899 @f[
900 \begin{align}
901 N_{i,1}(u)= \left\{\begin{matrix}
902 1\Leftarrow \bar{u}_{i} \leq u \leq \bar{u}_{i+1}
903 0\Leftarrow u < \bar{u}_{i} \vee  \bar{u}_{i+1} \leq u \end{matrix}  \right.,\; \\
904 N_{i,j}(u)=\frac{(u-\bar{u}_{i}) \cdot N_{i,j-1}(u) }{\bar{u}_{i+j-1}-\bar{u}_{i}}+  
905 \frac{(\bar{u}_{i+j}-u) \cdot N_{i+1,j-1}(u)}{\bar{u}_{i+j}-\bar{u}_{i+1}},\;(2 \leq j \leq m_{u}+1), \; \\
906 M_{i,1}(v)=\left\{\begin{matrix}
907 1\Leftarrow \bar{v}_{i} \leq v \leq \bar{v}_{i+1}\\ 
908 0\Leftarrow v < \bar{v}_{i} \vee  \bar{v}_{i+1} \leq v \end{matrix} \right.,\; \\
909 M_{i,j}(v)=\frac{(v-\bar{v}_{i}) \cdot M_{i,j-1}(v) }{\bar{v}_{i+j-1}-\bar{v}_{i}}+ \frac{(\bar{v}_{i+j}-v) \cdot M_{i+1,j-1}(v)}{\bar{v}_{i+j}-\bar{v}_{i+1}},\;(2 \leq j \leq m_{v}+1); 
910 \end{align}
911 @f]  
912
913 where   
914 @f[ \bar{u}_{i}=u_{j}\; (1 \leq j \leq k_{u},\; \sum_{l=1}^{j-1}q_{l} \leq i \leq \sum_{l=1}^{j}q_{l}), \\
915  \bar{v}_{i}=v_{j}\; (1 \leq j \leq k_{v},\; \sum_{l=1}^{j-1}t_{l} \leq i \leq \sum_{l=1}^{j}t_{l}); @f]  
916  
917 The example record is interpreted as a B-spline  surface with a u rational flag *r<sub>u</sub>*=1, v rational flag *r<sub>v</sub>*=1, u degree *m<sub>u</sub>*=1, v degree *m<sub>v</sub>*=1, u pole count *n<sub>u</sub>*=3, v pole count *n<sub>v</sub>*=2, u multiplicity knot count *k<sub>u</sub>*=5, v multiplicity knot count *k<sub>v</sub>*=4, weight poles *B<sub>1,1</sub>*=(0, 0, 1), *h<sub>1,1</sub>*=7, *B<sub>1,2</sub>*=(1, 0, -4), *h<sub>1,2</sub>*=10, *B<sub>2,1</sub>*=(0, 1, -2), *h<sub>2,1</sub>*=8, *B<sub>2,2</sub>*=(1, 1, 5), *h<sub>2,2</sub>*=11, *B<sub>3,1</sub>*=(0, 2, 3), *h<sub>3,1</sub>*=9 and *B<sub>3,2</sub>*=(1, 2, 6), *h<sub>3,2</sub>*=12, u multiplicity knots *u<sub>1</sub>*=0, *q<sub>1</sub>*=1, *u<sub>2</sub>*=0.25, *q<sub>2</sub>*=1, *u<sub>3</sub>*=0.5, *q<sub>3</sub>*=1, *u<sub>4</sub>*=0.75, *q<sub>4</sub>*=1 and *u<sub>5</sub>*=1, *q<sub>5</sub>*=1, v multiplicity  knots *v<sub>1</sub>*=0, *r<sub>1</sub>*=1, *v<sub>2</sub>*=0.3, *r<sub>2</sub>*=1, *v<sub>3</sub>*=0.7, *r<sub>3</sub>*=1 and *v<sub>4</sub>*=1, *r<sub>4</sub>*=1. The B-spline surface is defined  by the following parametric equation:  
918  
919 @f[ 
920 \begin{align} 
921 S(u,v)= [ (0,0,1) \cdot 7 \cdot N_{1,2}(u) \cdot M_{1,2}(v)+(1,0,-4) \cdot 10 \cdot N_{1,2}(u) \cdot M_{2,2}(v)+ \\
922 (0,1,-2) \cdot 8 \cdot N_{2,2}(u) \cdot M_{1,2}(v)+(1,1,5) \cdot 11 \cdot N_{2,2}(u) \cdot M_{2,2}(v)+ \\
923 (0,2,3) \cdot 9 \cdot N_{3,2}(u) \cdot M_{1,2}(v)+(1,2,6) \cdot 12 \cdot N_{3,2}(u) \cdot M_{2,2}(v)] \div \\
924 [7 \cdot N_{1,2}(u) \cdot M_{1,2}(v)+10 \cdot N_{1,2}(u) \cdot M_{2,2}(v)+ 8 \cdot N_{2,2}(u) \cdot M_{1,2}(v)+ \\ 
925 11 \cdot N_{2,2}(u) \cdot M_{2,2}(v)+ 9 \cdot N_{3,2}(u) \cdot M_{1,2}(v)+12 \cdot N_{3,2}(u) \cdot M_{2,2}(v) ] 
926 \end{align} 
927 @f]
928  
929 @subsubsection specification__brep_format_5_2_10 Rectangular Trim Surface - \< surface  record 10 \>
930  
931 **Example**  
932
933 @verbatim
934     10 -1 2 -3 4  
935     1 1 2 3 0 0 1 1 0 -0 -0 1 0   
936 @endverbatim
937  
938 **BNF-like Definition**
939
940 @verbatim
941         <surface record 10> = "10" <_> <trim surface u min> <_> <trim surface u max> <_> 
942         <trim surface v min> <_> <trim surface v max> <_\n> <surface record>;
943
944         <trim surface u min> = <real>;
945
946         <trim surface u max> = <real>;
947
948         <trim surface v min> = <real>;
949
950         <trim surface v max> = <real>;  
951 @endverbatim
952  
953 **Description**  
954  
955 \<surface  record 10\> describes a rectangular trim  surface. The surface data consist of reals *u<sub>min</sub>*, *u<sub>max</sub>*, *v<sub>min</sub>* and *v<sub>max</sub>* and a \<surface record\> so that *u<sub>min</sub>* < *u<sub>max</sub>* and *v<sub>min</sub>* < *v<sub>max</sub>*. The rectangular  trim surface is a restriction of the base surface *B* described in the record to the set @f$ [u_{min},u_{max}] \times [v_{min},v_{max}] \subseteq domain(B) @f$. The rectangular  trim surface is defined by the following parametric equation:  
956  
957 @f[ S(u,v)=B(u,v),\; (u,v) \in [u_{min},u_{max}] \times [v_{min},v_{max}] . @f]  
958  
959 The example record is interpreted as a rectangular  trim surface to the set [-1, 2]x[-3, 4] for the base surface @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0) @f$. The rectangular  trim surface is defined by the following parametric equation: @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+ v \cdot (0,1,0),\; (u,v) \in [-1,2] \times [-3,4] @f$. 
960  
961  
962 @subsubsection specification__brep_format_5_2_11 Offset Surface - \< surface record 11 \> 
963  
964 **Example**  
965  
966 @verbatim
967     11 -2  
968     1 1 2 3 0 0 1 1 0 -0 -0 1 0   
969 @endverbatim
970  
971 **BNF-like Definition**
972
973 @verbatim
974         <surface record 11> = "11" <_> <surface record distance> <_\n> <surface record>;
975
976         <surface record distance> = <real>;  
977 @endverbatim
978  
979 **Description**  
980  
981 \<surface record 11\> describes an offset surface.  
982 The offset surface data consist of a distance *d* and a \<surface record\>. The  offset surface is the result of offsetting the base surface *B* described in the record to the distance *d* along the normal *N* of  surface *B*.  The offset surface is defined by the following parametric equation:  
983  
984 @f[ S(u,v)=B(u,v)+d \cdot N(u,v),\; (u,v) \in domain(B) . \\
985 N(u,v) = [S'_{u}(u,v),S'_{v}(u,v)] @f]  
986 if @f$ [S'_{u}(u,v),S'_{v}(u,v)] \neq \vec{0} @f$.  
987  
988 The example record is interpreted as an offset surface  with a distance *d*=-2 and  base surface @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0)  @f$.  The offset surface is defined by the following parametric equation: @f$ S(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0)-2 \cdot (0,0,1) @f$.  
989  
990  
991 @subsection specification__brep_format_5_3 2D curves
992  
993 **Example**  
994
995 @verbatim
996     Curve2ds 24  
997     1 0 0 1 0   
998     1 0 0 1 0   
999     1 3 0 0 -1   
1000     1 0 0 0 1   
1001     1 0 -2 1 0   
1002     1 0 0 1 0   
1003     1 0 0 0 -1   
1004     1 0 0 0 1   
1005     1 0 0 1 0   
1006     1 0 1 1 0   
1007     1 3 0 0 -1   
1008     1 1 0 0 1   
1009     1 0 -2 1 0   
1010     1 0 1 1 0   
1011     1 0 0 0 -1   
1012     1 1 0 0 1   
1013     1 0 0 0 1   
1014     1 0 0 1 0   
1015     1 3 0 0 1   
1016     1 0 0 1 0   
1017     1 0 0 0 1   
1018     1 0 2 1 0   
1019     1 3 0 0 1   
1020     1 0 2 1 0   
1021 @endverbatim
1022  
1023 **BNF-like Definition**
1024
1025 @verbatim
1026         <2D curves> = <2D curve header> <_\n> <2D curve records>;
1027
1028         <2D curve header> = "Curve2ds" <_> <2D curve count>;
1029
1030         <2D curve count> = <int>;
1031
1032         <2D curve records> = <2D curve record> ^ <2D curve count>;
1033
1034         <2D curve record> =
1035         <2D curve record 1> |
1036         <2D curve record 2> |
1037         <2D curve record 3> |
1038         <2D curve record 4> |
1039         <2D curve record 5> |
1040         <2D curve record 6> |
1041         <2D curve record 7> |
1042         <2D curve record 8> |
1043         <2D curve record 9>;  
1044 @endverbatim
1045  
1046 @subsubsection specification__brep_format_5_3_1 Line - \<2D curve record 1\> 
1047  
1048 **Example**  
1049
1050 @verbatim
1051     1 3 0 0 -1   
1052 @endverbatim
1053  
1054 **BNF-like Definition**
1055
1056 @verbatim
1057     <2D curve record 1> = "1" <_> <2D point> <_> <2D direction> <_\n>;  
1058 @endverbatim
1059  
1060 **Description**  
1061  
1062 \<2D curve record 1\> describes a line. The line  data consist of a 2D point *P* and a 2D direction *D*. The line passes through the point  *P*, has the  direction *D* and  is defined by the following parametric equation:  
1063  
1064 @f[ C(u)=P+u \cdot D, \; u \in (-\infty,\; \infty). @f]  
1065  
1066 The example record is interpreted as a line which  passes through a point *P*=(3,0), has a direction *D*=(0,-1) and is defined by the  following parametric equation: @f$ C(u)=(3,0)+ u \cdot (0,-1) @f$.  
1067  
1068  
1069 @subsubsection specification__brep_format_5_3_2 Circle - \<2D curve record 2\> 
1070  
1071 **Example**  
1072
1073 @verbatim
1074     2 1 2 1 0 -0 1 3  
1075 @endverbatim
1076  
1077 **BNF-like Definition**
1078
1079 ~~~~{.cpp}
1080         <2D curve record 2> = "2" <_> <2D circle center> <_> <2D circle Dx> <_> <2D circle Dy> <_> <2D circle radius> <_\n>;
1081
1082         <2D circle center> = <2D point>;
1083
1084         <2D circle Dx> = <2D direction>;
1085
1086         <2D circle Dy> = <2D direction>;
1087
1088         <2D circle radius> = <real>;  
1089 ~~~~
1090  
1091 **Description**  
1092  
1093 \<2D curve record 2\> describes a circle. The  circle data consist of a 2D point *P*, orthogonal 2D directions *D<sub>x</sub>* and *D<sub>y</sub>* and a non-negative  real *r*. The circle has a center *P*. The circle plane is parallel to directions *D<sub>x</sub>* and *D<sub>y</sub>*. The  circle has a radius *r* and is defined by the following  parametric equation:  
1094  
1095 @f[ C(u)=P+r \cdot (cos(u) \cdot D_{x} + sin(u) \cdot D_{y}),\; u \in [0,\; 2 \cdot \pi) . @f] 
1096  
1097 The example record is interpreted as a circle which  has a center *P*=(1,2).  The circle plane is parallel to directions *D<sub>x</sub>*=(1,0) and *D<sub>y</sub>*=(0,1). The circle has a radius *r*=3 and is defined by  the following parametric equation: @f$ C(u)=(1,2)+3 \cdot (cos(u) \cdot (1,0) + sin(u) \cdot (0,1)) @f$.  
1098  
1099  
1100 @subsubsection specification__brep_format_5_3_3 Ellipse - \<2D curve record 3\> 
1101  
1102 **Example**  
1103
1104 @verbatim
1105     3 1 2 1 0 -0 1 4 3  
1106 @endverbatim
1107  
1108 **BNF-like Definition**
1109
1110 @verbatim
1111         <2D curve record 3> = "3" <_> <2D ellipse center> <_> <2D ellipse Dmaj> <_> 
1112         <2D ellipse Dmin> <_> <2D ellipse Rmaj> <_> <2D ellipse Rmin> <_\n>;
1113
1114         <2D ellipse center> = <2D point>;
1115
1116         <2D ellipse Dmaj> = <2D direction>;
1117
1118         <2D ellipse Dmin> = <2D direction>;
1119
1120         <2D ellipse Rmaj> = <real>;
1121
1122         <2D ellipse Rmin> = <real>; 
1123 @endverbatim
1124  
1125 **Description**  
1126  
1127 \<2D curve record 3\> describes an ellipse. The  ellipse data are 2D point *P*, orthogonal 2D directions *D<sub>maj</sub>* and *D<sub>min</sub>* and non-negative reals *r<sub>maj</sub>* and *r<sub>min</sub>* that *r<sub>maj</sub>* @f$ \leq @f$ *r<sub>min</sub>*. The ellipse has a center *P*, major and  minor axis directions *D<sub>maj</sub>* and *D<sub>min</sub>*, major and minor radii *r<sub>maj</sub>* and *r<sub>min</sub>* and is defined by  the following parametric equation:  
1128  
1129 @f[ C(u)=P+r_{maj} \cdot cos(u) \cdot D_{maj}+r_{min} \cdot sin(u) \cdot D_{min},\; u \in [0,\; 2 \cdot \pi) . @f]  
1130  
1131 The example record is interpreted as an ellipse which  has a center *P*=(1,2),  major and minor axis directions *D<sub>maj</sub>*=(1,0) and *D<sub>min</sub>*=(0,1), major and minor radii *r<sub>maj</sub>*=4 and *r<sub>min</sub>*=3 and is defined by  the following parametric equation: @f$ C(u)=(1,2)+4 \cdot cos(u) \cdot (1,0)+3 \cdot sin(u) \cdot (0,1) @f$.  
1132  
1133  
1134 @subsubsection specification__brep_format_5_3_4 Parabola - \<2D curve record 4\> 
1135  
1136 **Example**  
1137
1138 @verbatim
1139     4 1 2 1 0 -0 1 16  
1140 @endverbatim
1141  
1142 **BNF-like Definition**
1143
1144 @verbatim
1145         <2D curve record 4> = "4" <_> <2D parabola origin> <_> <2D parabola Dx> <_> 
1146         <2D parabola Dy> <_> <2D parabola focal length> <_\n>;
1147
1148         <2D parabola origin> = <2D point>;
1149
1150         <2D parabola Dx> = <2D direction>;
1151
1152         <2D parabola Dy> = <2D direction>;
1153
1154         <2D parabola focal length> = <real>;  
1155 @endverbatim
1156  
1157 **Description**  
1158  
1159 \<2D curve record 4\> describes a parabola. The  parabola data consist of a 2D point *P*, orthogonal 2D directions *D<sub>x</sub>* and *D<sub>y</sub>* and a non-negative  real *f*. The parabola coordinate system has its origin *P* and axis directions *D<sub>x</sub>* and *D<sub>y</sub>*. The parabola has a focus  length *f* and  is defined by the following parametric equation:  
1160  
1161 @f[ C(u)=P+\frac{u^{2}}{4 \cdot f} \cdot D_{x}+u \cdot D_{y},\; u \in (-\infty,\; \infty) \Leftarrow f \neq 0;\\
1162 C(u)=P+u \cdot D_{x},\; u \in (-\infty,\; \infty) \Leftarrow f = 0\; (degenerated\;case). @f] 
1163  
1164 The example record is interpreted as a parabola in plane which passes through a point *P*=(1,2) and is parallel to directions *D<sub>x</sub>*=(1,0) and *D<sub>y</sub>*=(0,1). The parabola has a focus length *f*=16 and  is defined by the following parametric equation: @f$ C(u)=(1,2)+ \frac{u^{2}}{64} \cdot (1,0)+u \cdot (0,1) @f$.  
1165  
1166  
1167 @subsubsection specification__brep_format_5_3_5 Hyperbola - \<2D curve record 5\> 
1168 **Example**  
1169  
1170 5 1 2 1 0 -0 1 3 4  
1171  
1172
1173 **BNF-like Definition**
1174
1175 @verbatim
1176         <2D curve record 5> = "5" <_> <2D hyperbola origin> <_> <2D hyperbola Dx> <_> 
1177         <2D hyperbola Dy> <_> <2D hyperbola Kx> <_> <2D hyperbola Ky> <_\n>;
1178
1179         <2D hyperbola origin> = <2D point>;
1180
1181         <2D hyperbola Dx> = <2D direction>;
1182
1183         <2D hyperbola Dy> = <2D direction>;
1184
1185         <2D hyperbola Kx> = <real>;
1186
1187         <2D hyperbola Ky> = <real>;  
1188 @endverbatim
1189  
1190 **Description**  
1191  
1192 \<2D curve record 5\> describes a hyperbola. The  hyperbola data consist of a 2D point *P*, orthogonal 2D directions *D<sub>x</sub>* and *D<sub>y</sub>* and non-negative reals *k<sub>x</sub>* and *k<sub>y</sub>*. The hyperbola coordinate system has origin *P* and axis directions *D<sub>x</sub>* and *D<sub>y</sub>*. The hyperbola is defined by  the following parametric equation:  
1193  
1194 @f[ C(u)=P+k_{x} \cdot cosh(u) D_{x}+k_{y} \cdot sinh(u) \cdot D_{y},\; u \in (-\infty,\; \infty). @f]  
1195  
1196 The example record is interpreted as a hyperbola with  coordinate system which has origin *P*=(1,2) and axis directions *D<sub>x</sub>*=(1,0) and *D<sub>y</sub>*=(0,1). Other data for the hyperbola are *k<sub>x</sub>*=5 and *k<sub>y</sub>*=4. The hyperbola is defined  by the following parametric equation: @f$ C(u)=(1,2)+3 \cdot cosh(u) \cdot (1,0)+4 \cdot sinh(u) \cdot (0,1) @f$.  
1197  
1198  
1199 @subsubsection specification__brep_format_5_3_6 Bezier Curve - \<2D curve record 6\>
1200  
1201 **Example**  
1202
1203 @verbatim
1204 6 1 2 0 1  4 1 -2  5 2 3  6   
1205 @endverbatim
1206  
1207 **BNF-like Definition**
1208
1209 @verbatim
1210         <2D curve record 6> = "6" <_> <2D Bezier rational flag> <_> <2D Bezier degree> 
1211         <2D Bezier weight poles> <_\n>;
1212
1213         <2D Bezier rational flag> = <flag>;
1214
1215         <2D Bezier degree> = <int>;
1216
1217         <2D Bezier weight poles> = (<_> <2D Bezier weight pole>) ^ (<2D Bezier degree> <+> “1”);
1218
1219         <2D Bezier weight pole> = <2D point> [<_> <real>];
1220 @endverbatim
1221  
1222 **Description**  
1223  
1224 \<2D curve record 6\> describes a Bezier curve.  The curve data consist of a rational flag *r*, a degree @f$ m \leq 25 @f$ and weight poles.  
1225  
1226 The weight poles are *m*+1 2D points *B<sub>0</sub> ... B<sub>m</sub>* if the flag *r* is 0. The weight poles are *m*+1 pairs *B<sub>0</sub>h<sub>0</sub> ... B<sub>m</sub>h<sub>m</sub>* if the flag *r* is 1. Here *B<sub>i</sub>* is a 2D point and *h<sub>i</sub>* is a positive real @f$ (0\leq i\leq m) @f$. *h<sub>i</sub>*=1 @f$(0\leq i\leq m) @f$ if the flag *r* is 0.  
1227  
1228 The Bezier curve is defined by the following  parametric equation:  
1229  
1230 @f[ C(u)= \frac{\sum_{i=0}^{m} B_{i} \cdot h_{i} \cdot C_{m}^{i} \cdot u^{i} \cdot (1-u)^{m-i}}{\sum_{i=0}^{m} h_{i} \cdot C_{m}^{i} \cdot u^{i} \cdot (1-u)^{m-i}},\; u \in [0,1] @f]  
1231  
1232 where @f$ 0^{0} \equiv 1 @f$.  
1233  
1234 The example record is interpreted as a Bezier curve  with a rational flag *r*=1, a degree *m*=2 and weight poles *B<sub>0</sub>*=(0,1), *h<sub>0</sub>*=4, *B<sub>1</sub>*=(1,-2), *h<sub>1</sub>*=5 and *B<sub>2</sub>*=(2,3), *h<sub>2</sub>*=6. The Bezier curve is defined  by the following parametric equation:  
1235  
1236 @f[ C(u)= \frac{(0,1) \cdot 4 \cdot (1-u)^{2}+(1,-2) \cdot 5 \cdot 2 \cdot u \cdot (1-u)+(2,3) \cdot 6 \cdot u^{2}}{ 4 \cdot (1-u)^{2}+5 \cdot 2 \cdot u \cdot (1-u)+6 \cdot u^{2}} . @f]  
1237  
1238  
1239 @subsubsection specification__brep_format_5_3_7 B-spline Curve -  \<2D curve record 7\>
1240  
1241 **Example**  
1242
1243 @verbatim
1244 7 1 0  1 3 5  0 1  4 1 -2  5  2 3  6  
1245  0 1 0.25 1 0.5 1 0.75 1 1 1  
1246 @endverbatim
1247  
1248 **BNF-like Definition**
1249
1250 ~~~~{.cpp}
1251         <2D curve record 7> = "7" <_> <2D B-spline rational flag> <_> "0" <_> <2D B-spline degree> <_> <2D B-spline pole count> <_> <2D B-spline multiplicity knot count> <2D B-spline weight poles> <_\n> <2D B-spline multiplicity knots> <_\n>;
1252
1253         <2D B-spline rational flag> = <flag>;
1254
1255         <2D B-spline degree> = <int>;
1256
1257         <2D B-spline pole count> = <int>;
1258
1259         <2D B-spline multiplicity knot count> = <int>;
1260
1261         <2D B-spline weight poles> = <2D B-spline weight pole> ^ <2D B-spline pole count>;
1262
1263         <2D B-spline weight pole> = <_> <2D point> [<_> <real>];
1264
1265         <2D B-spline multiplicity knots> =
1266         <2D B-spline multiplicity knot> ^ <2D B-spline multiplicity knot count>;
1267
1268         <2D B-spline multiplicity knot> = <_> <real> <_> <int>;
1269 ~~~~
1270  
1271 **Description**  
1272  
1273 \<2D curve record 7\> describes a B-spline curve.  The curve data consist of a rational flag *r*, a degree @f$ m \leq 25 @f$, a pole count @f$ n \geq 2 @f$, a multiplicity knot count *k*, weight poles and  multiplicity knots.  
1274  
1275 The weight poles are *n* 2D points *B<sub>1</sub> ... B<sub>n</sub>* if the flag *r* is 0. The weight  poles are *n* pairs  *B<sub>1</sub>h<sub>1</sub> ... B<sub>n</sub>h<sub>n</sub>* if the flag  *r* is 1. Here *B<sub>i</sub>* is a 2D point and *h<sub>i</sub>* is a positive real @f$ (1\leq i\leq n) @f$. *h<sub>i</sub>*=1 @f$(1\leq i\leq n) @f$ if the flag *r* is 0.  
1276  
1277 The multiplicity knots are *k* pairs *u<sub>1</sub>q<sub>1</sub> ... u<sub>k</sub>q<sub>k</sub>*. Here *u<sub>i</sub>* is a knot with multiplicity @f$ q_{i} \geq 1\; (1 \leq i \leq k) @f$ so that  
1278  
1279 @f[ u_{i} < u_{i+1}\; (1 \leq i \leq k-1), \\
1280 q_{1} \leq m+1,\; q_{k} \leq m+1,\; q_{i} \leq m\; (2 \leq i \leq k-1),\; \sum_{i=1}^{k}q_{i}=m+n+1 . @f]  
1281  
1282 The B-spline curve is defined by the following  parametric equation:  
1283  
1284 @f[ C(u)= \frac{\sum_{i=1}^{n} B_{i} \cdot h_{i} \cdot N_{i,m+1}(u) }{\sum_{i=1}^{n} h_{i} \cdot N_{i,m+1}(u)},\; u \in [u_{1},\; u_{k}] @f]
1285  
1286 where functions *N<sub>i,j</sub>* have the following recursion definition  by *j*
1287  
1288 @f[ N_{i,1}(u)=\left\{\begin{matrix}
1289 1\Leftarrow \bar{u}_{i} \leq u \leq \bar{u}_{i+1}\\ 
1290 0\Leftarrow u < \bar{u}_{i} \vee  \bar{u}_{i+1} \leq u \end{matrix} \right.,\;
1291 N_{i,j}(u)=\frac{(u-\bar{u}_{i}) \cdot N_{i,j-1}(u) }{\bar{u}_{i+j-1}-\bar{u}_{i}}+ \frac{(\bar{u}_{i+j}-u) \cdot N_{i+1,j-1}(u)}{\bar{u}_{i+j}-\bar{u}_{i+1}},\;(2 \leq j \leq m+1) @f] 
1292  
1293 where  
1294  
1295 @f[ \bar{u}_{i}=u_{j}\; (1\leq j\leq k,\; \sum_{l=1}^{j-1}q_{l}+1 \leq i \leq \sum_{l=1}^{j}q_{l}) . @f] 
1296  
1297 The example record is interpreted as a B-spline curve with a rational flag *r*=1, a degree *m*=1, a pole count *n*=3, a multiplicity knot count *k*=5, weight poles *B<sub>1</sub>*=(0,1), *h<sub>1</sub>*=4, *B<sub>2</sub>*=(1,-2), *h<sub>2</sub>*=5 and *B<sub>3</sub>*=(2,3), *h<sub>3</sub>*=6 and multiplicity knots *u<sub>1</sub>*=0, *q<sub>1</sub>*=1, *u<sub>2</sub>*=0.25, *q<sub>2</sub>*=1, *u<sub>3</sub>*=0.5, *q<sub>3</sub>*=1, *u<sub>4</sub>*=0.75, *q<sub>4</sub>*=1 and *u<sub>5</sub>*=1, *q<sub>5</sub>*=1. The B-spline curve is defined  by the following parametric equation:  
1298  
1299 @f[ C(u)= \frac{(0,1) \cdot 4 \cdot N_{1,2}(u)+(1,-2) \cdot 5 \cdot N_{2,2}(u)+(2,3) \cdot 6 \cdot N_{3,2}(u)}{ 4 \cdot N_{1,2}(u)+5 \cdot N_{2,2}(u)+6 \cdot N_{3,2}(u)} . @f] 
1300  
1301  
1302 @subsubsection specification__brep_format_5_3_8 Trimmed Curve - \<2D curve record 8\> 
1303  
1304 **Example**  
1305
1306 @verbatim
1307     8 -4 5  
1308     1 1 2 1 0   
1309 @endverbatim
1310  
1311 **BNF-like Definition**
1312
1313 @verbatim
1314         <2D curve record 8> = "8" <_> <2D trimmed curve u min> <_> <2D trimmed curve u max> <_\n> 
1315         <2D curve record>;
1316
1317         <2D trimmed curve u min> = <real>;
1318
1319         <2D trimmed curve u max> = <real>;
1320 @endverbatim
1321  
1322 **Description**
1323  
1324 \<2D curve record 8\> describes a trimmed curve. The trimmed curve data consist of reals *u<sub>min</sub>* and *u<sub>max</sub>* and a \<2D curve record\> so that *u<sub>min</sub>* < *u<sub>max</sub>*. The trimmed curve  is a restriction of the base curve *B* described in the record to the segment @f$ [u_{min},\;u_{max}]\subseteq domain(B) @f$. The trimmed curve is  defined by the following parametric equation:  
1325  
1326 @f[ C(u)=B(u),\; u \in [u_{min},\;u_{max}] . @f] 
1327  
1328 The example record is interpreted as a trimmed curve with *u<sub>min</sub>*=-4, *u<sub>max</sub>*=5 and base curve @f$ B(u)=(1,2)+u \cdot (1,0) @f$. The trimmed curve is defined by the following parametric equation: @f$ C(u)=(1,2)+u \cdot (1,0),\; u \in [-4,5] @f$.  
1329  
1330  
1331 @subsubsection specification__brep_format_5_3_9 Offset Curve - \<2D curve record 9\> 
1332  
1333 **Example**  
1334
1335 @verbatim
1336     9 2  
1337     1 1 2 1 0   
1338 @endverbatim
1339  
1340 **BNF-like Definition**
1341  
1342 @verbatim
1343 <2D curve record 9> = "9" <_> <2D offset curve distance> <_\n> <2D curve record>;
1344
1345 <2D offset curve distance> = <real>;
1346 @endverbatim
1347  
1348 **Description**  
1349  
1350 \<2D curve record 9\> describes an offset curve. The offset curve data consist of a distance *d* and a \<2D curve record\>. The offset curve is the result of offsetting the base curve *B* described in the record to the distance *d* along  the vector @f$ (B'_{Y}(u),\; -B'_{X}(u)) \neq \vec{0} @f$ where @f$ B(u)=(B'_{X}(u),\; B'_{Y}(u)) @f$. The offset curve is defined by the following parametric equation:  
1351  
1352 @f[ C(u)=B(u)+d \cdot (B'_{Y}(u),\; -B'_{X}(u)),\; u \in domain(B) . @f]  
1353  
1354 The example record is interpreted as an offset curve  with a distance *d*=2 and  base curve @f$ B(u)=(1,2)+u \cdot (1,0) @f$ and is defined by the following parametric equation: @f$ C(u)=(1,2)+u \cdot (1,0)+2 \cdot (0,-1) @f$.  
1355  
1356 @subsection specification__brep_format_5_4 3D polygons
1357  
1358 **Example**  
1359
1360 @verbatim
1361     Polygon3D 1  
1362     2 1  
1363     0.1  
1364     1 0 0 2 0 0   
1365     0 1   
1366 @endverbatim
1367  
1368 **BNF-like Definition**
1369
1370 @verbatim
1371         <3D polygons> = <3D polygon header> <_\n> <3D polygon records>;
1372
1373         <3D polygon header> = "Polygon3D" <_> <3D polygon record count>;
1374
1375         <3D polygon records> = <3D polygon record> ^ <3D polygon record count>;
1376
1377         <3D polygon record> =
1378         <3D polygon node count> <_> <3D polygon flag of parameter presence> <_\n>
1379         <3D polygon deflection> <_\n>
1380         <3D polygon nodes> <_\n>
1381         [<3D polygon parameters> <_\n>];
1382
1383         <3D polygon node count> = <int>;
1384
1385         <3D polygon flag of parameter presence> = <flag>;
1386
1387         <3D polygon deflection> = <real>;
1388
1389         <3D polygon nodes> = (<3D polygon node> <_>) ^ <3D polygon node count>;
1390
1391         <3D polygon node> = <3D point>;
1392
1393         <3D polygon u parameters> = (<3D polygon u parameter> <_>) ^ <3D polygon node count>;
1394
1395         <3D polygon u parameter> = <real>;
1396 @endverbatim
1397  
1398 **Description**  
1399  
1400 \<3D polygons\> record describes a 3D polyline *L* which approximates a 3D curve *C*.  The polyline data consist of a node count @f$ m \geq 2 @f$, a parameter presence flag *p*, a deflection @f$ d \geq 0 @f$, nodes @f$ N_{i}\; (1\leq i \leq m) @f$ and parameters @f$ u_{i}\; (1\leq i \leq m) @f$. The parameters are present only if *p*=1. The polyline *L* passes  through the nodes. The deflection *d* describes the deflection of polyline *L* from the curve *C*:  
1401  
1402 @f[ \underset{P \in C}{max}\; \underset{Q \in L}{min}|Q-P| \leq d . @f]  
1403  
1404 The parameter @f$ u_{i}\; (1\leq i \leq m) @f$ is the parameter of the node *N<sub>i</sub>* on the curve *C*:  
1405  
1406 @f[ C(u_{i})=N_{i} . @f]  
1407  
1408 The example record describes a polyline from *m*=2 nodes with a parameter presence flag *p*=1, a deflection *d*=0.1, nodes *N<sub>1</sub>*=(1,0,0) and *N<sub>2</sub>*=(2,0,0) and parameters *u<sub>1</sub>*=0 and *u<sub>2</sub>*=1.  
1409  
1410  
1411 @subsection specification__brep_format_6_4 Triangulations
1412  
1413 **Example**  
1414
1415 @verbatim
1416     Triangulations 6  
1417     4 2 1 0  
1418     0 0 0 0 0 3 0 2 3 0 2 0 0 0 3  0 3 -2 0 -2 2 4 3 2 1 4   
1419     4 2 1 0  
1420     0 0 0 1 0 0 1 0 3 0 0 3 0 0 0  1 3 1 3 0 3 2 1 3 1 4   
1421     4 2 1 0  
1422     0 0 3 0 2 3 1 2 3 1 0 3 0 0 0  2 1 2 1 0 3 2 1 3 1 4   
1423     4 2 1 0  
1424     0 2 0 1 2 0 1 2 3 0 2 3 0 0 0  1 3 1 3 0 3 2 1 3 1 4   
1425     4 2 1 0  
1426     0 0 0 0 2 0 1 2 0 1 0 0 0 0 0  2 1 2 1 0 3 2 1 3 1 4   
1427     4 2 1 0  
1428     1 0 0 1 0 3 1 2 3 1 2 0 0 0 3  0 3 -2 0 -2 2 4 3 2 1 4   
1429 @endverbatim
1430  
1431 **BNF-like Definition**
1432
1433 ~~~~{.cpp}
1434         <triangulations> = <triangulation header> <_\n> <triangulation records>;
1435
1436         <triangulation header> = "Triangulations" <_> <triangulation count>;
1437
1438         <triangulation records> = <triangulation record> ^ <triangulation count>;
1439
1440         <triangulation record> = <triangulation node count> <_> <triangulation triangle count> <_> <triangulation parameter presence flag> [<_> <need to write normals flag>] <_> <triangulation deflection> <_\n>
1441         <triangulation nodes> [<_> <triangulation u v parameters>] <_> <triangulation triangles> [<_> <triangulation normals>] <_\n>;
1442
1443         <triangulation node count> = <int>;
1444
1445         <triangulation triangle count> = <int>;
1446
1447         <triangulation parameter presence flag> = <flag>;
1448
1449         <need to write normals flag> = <flag>;
1450
1451         <triangulation deflection> = <real>;
1452
1453         <triangulation nodes> = (<triangulation node> <_>) ^ <triangulation node count>;
1454
1455         <triangulation node> = <3D point>;
1456
1457         <triangulation u v parameters> =        
1458         (<triangulation u v parameter pair> <_>) ^ <triangulation node count>;
1459
1460         <triangulation u v parameter pair> = <real> <_> <real>;
1461
1462         <triangulation triangles> = (<triangulation triangle> <_>) ^ <triangulation triangle count>;
1463
1464         <triangulation triangle> = <int> <_> <int> <_> <int>;
1465
1466         <triangulation normals> = (<triangulation normal> <_>) ^ <triangulation node count> ^ 3;
1467
1468         <triangulation normal> = <short real>.
1469 ~~~~
1470  
1471 **Description**  
1472
1473 \<triangulation u v parameters\> are used in version 2 or later.
1474 \<need to write normals flag\> and \<triangulation normals\> are used in version 3.
1475  
1476 \<triangulation record\> describes a triangulation  *T* which  approximates a surface *S*. The triangulation data consist of a node  count @f$ m \geq 3 @f$, a triangle count @f$ k \geq 1 @f$, a parameter  presence flag *p*, a deflection @f$ d \geq 0 @f$, nodes @f$ N_{i}\; (1\leq i \leq m) @f$, parameter pairs @f$ u_{i}\; v_{i}\; (1\leq i \leq m) @f$, triangles @f$ n_{j,1}\; n_{j,2}\; n_{j,3}\; (1\leq j \leq k,\; n_{j,l} \in \left \{1,...,m \right \}\; (1\leq l\leq 3)) @f$. The parameters are present  only if *p*=1. The deflection describes the triangulation deflection from the surface:  
1477  
1478 @f[ \underset{P \in S}{max}\; \underset{Q \in T}{min}|Q-P| \leq d . @f]  
1479  
1480 The parameter pair @f$ u_{i}\; v_{i}\; (1\leq i \leq m) @f$ describes the parameters of node *N<sub>i</sub>* on the surface:  
1481  
1482 @f[ S(u_{i},v_{i})=N_{i} . @f]  
1483  
1484 The triangle @f$ n_{j,1}\; n_{j,2}\; n_{j,3}\; (1\leq j \leq k) @f$ is interpreted as a triangle of nodes @f$ N_{n_{j},1}\; N_{n_{j},2}@f$ and @f$ N_{n_{j},3} @f$ with circular traversal of the nodes in the order @f$ N_{n_{j},1}\;  N_{n_{j},2}@f$ and @f$ N_{n_{j},3} @f$. From any side of the triangulation *T* all its triangles  have the same direction of the node circular traversal: either clockwise or  counterclockwise.  
1485  
1486 Triangulation record  
1487
1488 @verbatim 
1489     4 2 1 0  
1490     0 0 0 0 0 3 0 2 3 0 2 0 0 0 3  0 3 -2 0 -2 2 4 3 2 1 4   
1491 @endverbatim
1492
1493 describes a triangulation with *m*=4 nodes, *k*=2 triangles, parameter presence flag *p*=1, deflection *d*=0, nodes *N<sub>1</sub>*=(0,0,0), *N<sub>2</sub>*=(0,0,3), *N<sub>3</sub>*=(0,2,3) and *N<sub>4</sub>*=(0,2,0), parameters (*u<sub>1</sub>*, *v<sub>1</sub>*)=(0,0), (*u<sub>2</sub>*, *v<sub>2</sub>*)=(3,0), (*u<sub>3</sub>*, *v<sub>3</sub>*)=(3,-2) and (*u<sub>4</sub>*, *v<sub>4</sub>*)=(0,-2), and triangles (*n<sub>1,1</sub>*, *n<sub>1,2</sub>*, *n<sub>1,3</sub>*)=(2,4,3) and (*n<sub>2,1</sub>*, *n<sub>2,2</sub>*, *n<sub>2,3</sub>*)=(2,1,4). From the point (1,0,0) ((-1,0,0)) the triangles have clockwise (counterclockwise) direction of the node circular traversal.  
1494  
1495  
1496 @subsection specification__brep_format_6_5 Polygons on triangulations
1497  
1498 **Example**  
1499
1500 @verbatim
1501     PolygonOnTriangulations 24  
1502     2 1 2   
1503     p 0.1 1 0 3   
1504     2 1 4   
1505     p 0.1 1 0 3   
1506     2 2 3   
1507     p 0.1 1 0 2   
1508     2 1 2   
1509     p 0.1 1 0 2   
1510     2 4 3   
1511     p 0.1 1 0 3   
1512     2 1 4   
1513     p 0.1 1 0 3   
1514     2 1 4   
1515     p 0.1 1 0 2   
1516     2 1 2   
1517     p 0.1 1 0 2   
1518     2 1 2   
1519     p 0.1 1 0 3   
1520     2 2 3   
1521     p 0.1 1 0 3   
1522     2 2 3   
1523     p 0.1 1 0 2   
1524     2 4 3   
1525     p 0.1 1 0 2   
1526     2 4 3   
1527     p 0.1 1 0 3   
1528     2 2 3   
1529     p 0.1 1 0 3   
1530     2 1 4   
1531     p 0.1 1 0 2   
1532     2 4 3   
1533     p 0.1 1 0 2   
1534     2 1 2   
1535     p 0.1 1 0 1   
1536     2 1 4   
1537     p 0.1 1 0 1   
1538     2 4 3   
1539     p 0.1 1 0 1   
1540     2 1 4   
1541     p 0.1 1 0 1   
1542     2 1 2   
1543     p 0.1 1 0 1   
1544     2 2 3   
1545     p 0.1 1 0 1   
1546     2 4 3   
1547     p 0.1 1 0 1   
1548     2 2 3   
1549     p 0.1 1 0 1   
1550 @endverbatim
1551  
1552 **BNF-like Definition**
1553
1554 @verbatim
1555         <polygons on triangulations> = <polygons on triangulations header> <_\n>
1556         <polygons on triangulations records>;
1557
1558         <polygons on triangulations header> =
1559         "PolygonOnTriangulations" <_> <polygons on triangulations record count>;
1560
1561         <polygons on triangulations record count> = <int>;
1562
1563         <polygons on triangulations records> =
1564         <polygons on triangulations record> ^ <polygons on triangulations record count>;
1565
1566         <polygons on triangulations record> =
1567         <polygons on triangulations node count> <_> <polygons on triangulations node numbers> <_\n>
1568         "p" <_> <polygons on triangulations deflection> <_>
1569         <polygons on triangulations parameter presence flag>
1570         [<_> <polygons on triangulations u parameters>] <_\n>;
1571
1572         <polygons on triangulations node count> = <int>;
1573
1574         <polygons on triangulations node numbers> =
1575         <polygons on triangulations node number> ^ <polygons on triangulations node count>;
1576
1577         <polygons on triangulations node number> = <int>;
1578
1579         <polygons on triangulations deflection> = <real>;
1580
1581         <polygons on triangulations parameter presence flag> = <flag>;
1582
1583         <polygons on triangulations u parameters> =
1584         (<polygons on triangulations u parameter> <_>) ^ <polygons on triangulations node count>;
1585
1586         <polygons on triangulations u parameter> = <real>;
1587 @endverbatim
1588  
1589 **Description**  
1590  
1591 \<polygons on triangulations\> describes a polyline  *L* on a triangulation  which approximates a curve *C*. The polyline data consist of a node  count @f$ m \geq 2 @f$,  node numbers @f$ n_{i} \geq 1 @f$,  deflection @f$ d \geq 0 @f$, a parameter presence flag *p* and parameters @f$ u_{i}\; (1\leq i\leq m) @f$. The parameters are present only if *p*=1. The  deflection *d* describes  the deflection of polyline *L* from the curve *C*:  
1592  
1593 @f[ \underset{P \in C}{max}\; \underset{Q \in L}{min}|Q-P| \leq d . @f]  
1594  
1595 Parameter @f$ u_{i}\; (1\leq i\leq m) @f$ is *n<sub>i</sub>*-th node *C(u<sub>i</sub>)* parameter on curve *C*.  
1596  
1597  
1598 @subsection specification__brep_format_6_6 Geometric Sense of a Curve
1599  
1600 Geometric sense of curve *C* described above is determined by the direction  of parameter *u* increasing.  
1601  
1602  
1603 @section specification__brep_format_7 Shapes
1604  
1605 An example of section shapes and a whole  *.brep file are given in chapter 7 @ref specification__brep_format_8 "Appendix".  
1606  
1607  
1608 **BNF-like Definition**
1609
1610 @verbatim
1611         <shapes> = <shape header> <_\n> <shape records> <_\n> <shape final record>;
1612
1613         <shape header> = "TShapes" <_> <shape count>;
1614
1615         <shape count> = <int>;
1616
1617         <shape records> = <shape record> ^ <shape count>;
1618
1619         <shape record> = <shape subrecord> <_\n> <shape flag word> <_\n> <shape subshapes> <_\n>;
1620
1621         <shape flag word> = <flag> ^ 7;
1622
1623         <shape subshapes> = (<shape subshape> <_>)* "*";
1624
1625         <shape subshape> =
1626         <shape subshape orientation> <shape subshape number> <_> <shape location number>;
1627
1628         <shape subshape orientation> = "+" | "-" | "i" | "e";
1629
1630         <shape subshape number> = <int>;
1631
1632         <shape location number> = <int>;
1633
1634         <shape final record> = <shape subshape>;
1635
1636         <shape subrecord> =
1637         ("Ve" <_\n> <vertex data> <_\n>) |
1638         ("Ed" <_\n> <edge data> <_\n>) |
1639         ("Wi" <_\n> <_\n>) |
1640         ("Fa" <_\n> <face data>) |
1641         ("Sh" <_\n> <_\n>) |
1642         ("So" <_\n> <_\n>) |
1643         ("CS" <_\n> <_\n>) |
1644         ("Co" <_\n> <_\n>);
1645 @endverbatim
1646  
1647 **Description**  
1648  
1649 \<shape flag word\> @f$ f_{1}\; f_{2}\; f_{3}\; f_{4}\; f_{5}\; f_{6}\; f_{7} @f$ \<flag\>s @f$ f_{i}\;(1\leq i \leq 7) @f$ are interpreted as shape  flags in the following way:  
1650
1651   *  @f$ f_{1} @f$ -- free;  
1652   *  @f$ f_{2} @f$ -- modified;  
1653   *  @f$ f_{3} @f$ -- IGNORED(version 1 only) \\ checked (version 2 or later);  
1654   *  @f$ f_{4} @f$ -- orientable;  
1655   *  @f$ f_{5} @f$ -- closed;  
1656   *  @f$ f_{6} @f$ -- infinite;  
1657   *  @f$ f_{7} @f$ -- convex.  
1658   
1659 The flags are used in a special way [1].  
1660  
1661 \<shape subshape orientation\> is interpreted in  the following way:  
1662
1663   *  + -- forward;  
1664   *  - -- reversed;  
1665   *  i -- internal;  
1666   *  e -- external.  
1667   
1668 \<shape subshape orientation\> is used in a special  way [1].  
1669  
1670 \<shape subshape number\> is the number of a \<shape record\> which is located in this section above the \<shape subshape  number\>. \<shape record\> numbering is backward and starts from 1.  
1671  
1672 \<shape subrecord\> types are interpreted in the  following way: 
1673  
1674   *  "Ve" -- vertex;  
1675   *  "Ed" -- edge;  
1676   *  "Wi" -- wire;  
1677   *  "Fa" -- face;  
1678   *  "Sh" -- shell;  
1679   *  "So" -- solid;  
1680   *  "CS" -- compsolid;  
1681   *  "Co" -- compound.  
1682  
1683 \<shape final record\> determines the orientation  and location for the whole model.  
1684  
1685 @subsection specification__brep_format_7_1 Common Terms
1686  
1687 The terms below are used by \<vertex data\>, \<edge data\> and \<face data\>.  
1688  
1689  
1690 **BNF-like Definition**
1691
1692 @verbatim
1693         <location number> = <int>;
1694
1695         <3D curve number> = <int>;
1696
1697         <surface number> = <int>;
1698
1699         <2D curve number> = <int>;
1700
1701         <3D polygon number> = <int>;
1702
1703         <triangulation number> = <int>;
1704
1705         <polygon on triangulation number> = <int>;
1706
1707         <curve parameter minimal and maximal values> = <real> <_> <real>;
1708
1709         <curve values for parameter minimal and maximal values> =
1710         real> <_> <real> <_> <real> <_> <real>;
1711 @endverbatim
1712  
1713 **Description**  
1714  
1715 \<location number\> is the number of \<location record\> from section locations. \<location record\> numbering  starts from 1. \<location number\> 0 is interpreted  as the identity location.  
1716  
1717 \<3D curve number\> is the number of a \<3D curve record\> from subsection \<3D curves\> of section \<geometry\>. \<3D curve record\> numbering starts from 1.  
1718  
1719 \<surface number\> is the number of a \<surface record\> from subsection \<surfaces\> of section \<geometry\>. \<surface record\> numbering starts from 1.  
1720  
1721 \<2D curve number\> is the number of a \<2D curve record\> from subsection \<2D curves\> of section \<geometry\>. \<2D curve record\> numbering starts from 1.  
1722  
1723 \<3D polygon number\> is the number of a \<3D polygon record\> from subsection \<3D polygons\> of section \<geometry\>.  \<3D polygon record\> numbering starts from 1.  
1724  
1725 \<triangulation number\> is the number of a \<triangulation record\> from subsection \<triangulations\> of section \<geometry\>. \<triangulation record\> numbering starts from 1.  
1726  
1727 \<polygon on triangulation\> number is the number of a \<polygons on triangulations record\> from subsection \<polygons on  triangulations\> of section \<geometry\>.  
1728 \<polygons on triangulations record\> numbering  starts from 1.  
1729  
1730 \<curve parameter minimal and maximal values\> *u<sub>min</sub>* and *u<sub>max</sub>* are the curve parameter *u* bounds: *u<sub>min</sub>* @f$ \leq @f$ *u* @f$ \leq @f$ *u<sub>max</sub>*.  
1731  
1732 \<curve  values for parameter minimal and maximal values\> *u<sub>min</sub>* and *u<sub>max</sub>* are real pairs *x<sub>min</sub> y<sub>min</sub>* and *x<sub>max</sub> y<sub>max</sub>* that (*x<sub>min</sub>*, *y<sub>min</sub>*)= *C* (*u<sub>min</sub>*) and (*x<sub>max</sub>*, *y<sub>max</sub>*)= *C* (*u<sub>max</sub>*) where *C* is a parametric  equation of the curve.  
1733  
1734  
1735 @subsection specification__brep_format_7_2 Vertex data
1736  
1737 **BNF-like Definition**
1738
1739 @verbatim
1740         <vertex data> = <vertex data tolerance> <_\n> <vertex data 3D representation> <_\n> 
1741         <vertex data representations>;
1742
1743         <vertex data tolerance> = <real>;
1744
1745         <vertex data 3D representation> = <3D point>;
1746
1747         <vertex data representations> = (<vertex data representation> <_\n>)* "0 0";
1748
1749         <vertex data representation> = <vertex data representation u parameter> <_>
1750         <vertex data representation data> <_> <location number>;
1751
1752         <vertex data representation u parameter> = <real>;
1753
1754         <vertex data representation data> =
1755         ("1" <_> <vertex data representation data 1>) |
1756         ("2" <_> <vertex data representation data 2>) |
1757         ("3" <_> <vertex data representation data 3>);
1758
1759         <vertex data representation data 1> = <3D curve number>;
1760
1761         <vertex data representation data 2> = <2D curve number> <_> <surface number>;
1762
1763         <vertex data representation data 3> =
1764         <vertex data representation v parameter> <_> <surface number>;
1765
1766         <vertex data representation v parameter> = <real>;
1767 @endverbatim
1768  
1769 **Description**  
1770  
1771 The usage of \<vertex data representation u  parameter\> *U* is  described below.  
1772  
1773 \<vertex data representation data 1\> and  parameter *U* describe  the position of the vertex *V* on a 3D curve *C*. Parameter *U* is a parameter of the  vertex *V* on the  curve *C*: *C(u)=V*.  
1774  
1775 \<vertex data representation data 2\> and  parameter *U* describe  the position of the vertex *V* on a 2D curve *C* which is located on a  surface. Parameter *U* is a parameter of the  vertex *V* on the  curve *C*: *C(u)=V*.  
1776  
1777 \<vertex data representation data 3\> and  parameter *u* describe  the position of the vertex *V* on a surface *S* through \<vertex data  representation v parameter\> *v*: *S(u,v)=V*.  
1778  
1779 \<vertex data tolerance\> *t* describes the maximum distance  from the vertex *V* to the set *R* of vertex *V* representations:  
1780  
1781 @f[ \underset{P \in R }{max} |P-V| \leq t . @f]  
1782  
1783  
1784 @subsection specification__brep_format_7_3 Edge data
1785  
1786 **BNF-like Definition**
1787
1788 ~~~~{.cpp}
1789         <edge data> = <_> <edge data tolerance> <_> <edge data same parameter flag> <_> edge data same range flag> <_> <edge data degenerated flag> <_\n> <edge data representations>;
1790
1791         <edge data tolerance> = <real>;
1792
1793         <edge data same parameter flag> = <flag>;
1794
1795         <edge data same range flag> = <flag>;
1796
1797         <edge data degenerated flag> = <flag>;
1798
1799         <edge data representations> = (<edge data representation> <_\n>)* "0";
1800
1801         <edge data representation> =
1802         "1" <_> <edge data representation data 1>
1803         "2" <_> <edge data representation data 2>
1804         "3" <_> <edge data representation data 3>
1805         "4" <_> <edge data representation data 4>
1806         "5" <_> <edge data representation data 5>
1807         "6" <_> <edge data representation data 6>
1808         "7" <_> <edge data representation data 7>;
1809
1810         <edge data representation data 1> = <3D curve number> <_> <location number> <_>
1811         <curve parameter minimal and maximal values>;
1812
1813         <edge data representation data 2> = <2D curve number> <_> <surface number> <_> 
1814         <location number> <_> <curve parameter minimal and maximal values>
1815         [<_\n> <curve values for parameter minimal and maximal values>];
1816
1817         <edge data representation data 3> = (<2D curve number> <_>) ^ 2 <continuity order> <_> <surface number> <_> <location number> <_> <curve parameter minimal and maximal values> <\n> <curve values for parameter minimal and maximal values>];
1818
1819         <continuity order> = "C0" | "C1" | "C2" | "C3" | "CN" | "G1" | "G2".
1820
1821         <edge data representation data 4> =
1822         <continuity order> (<_> <surface number> <_> <location number>) ^ 2;
1823
1824         <edge data representation data 5> = <3D polygon number> <_> <location number>;
1825
1826         <edge data representation data 6> =
1827         <polygon on triangulation number> <_> <triangulation number> <_> <location number>;
1828
1829         <edge data representation data 7> = (<polygon on triangulation number> <_>) ^ 2 
1830         <triangulation number> <_> <location number>;
1831 ~~~~
1832  
1833 **Description**  
1834  
1835 Flags \<edge data same parameter flag\>, \<edge data same range flag\> and \<edge data degenerated flag\> are used in a special  way [1].  
1836  
1837 \<edge data representation data 1\> describes a 3D curve.  
1838  
1839 \<edge data representation data 2\> describes a 2D curve on a surface.  
1840 \<curve values for parameter minimal and maximal  values\> are used in version 2 or later.  
1841  
1842 \<edge data representation data 3\> describes a 2D  curve on a closed surface.  
1843 \<curve values for parameter minimal and maximal  values\> are used in version 2 or later.  
1844  
1845 \<edge data representation data 5\> describes a 3D polyline.  
1846  
1847 \<edge data representation data 6\> describes a polyline  on a triangulation.  
1848  
1849 \<edge data tolerance\> *t* describes the maximum distance from the edge *E* to  the set *R* of  edge *E* representations:  
1850  
1851 @f[ \underset{C \in R}{max}\;\underset{P \in E}{max}\;\underset{Q \in C}{min}|Q-P| \leq t @f]  
1852  
1853  
1854 @subsection specification__brep_format_7_4 Face data
1855  
1856 **BNF-like Definition**
1857
1858 ~~~~{.cpp}
1859         <face data> = <face data natural restriction flag> <_> <face data tolerance> <_> <surface number> <_> <location number> <\n> ["2" <_> <triangulation number>];
1860
1861         <face data natural restriction flag> = <flag>;
1862
1863         <face data tolerance> = <real>;
1864 ~~~~
1865  
1866 **Description**  
1867  
1868 \<face data\> describes a surface *S* of face *F* and a triangulation *T* of face *F*. The surface *S* may be empty: \<surface  number\> = 0.  
1869  
1870 \<face data tolerance\> *t* describes the maximum distance  from the face *F* to  the surface *S*:  
1871  
1872 @f[ \underset{P \in F}{max}\;\underset{Q \in S}{min}|Q-P| \leq t @f] 
1873
1874 Flag \<face data natural restriction flag\> is  used in a special way [1].  
1875
1876
1877 @section specification__brep_format_8 Appendix
1878  
1879   This chapter contains a *.brep file example.  
1880  
1881 @verbatim
1882     DBRep_DrawableShape  
1883      
1884     CASCADE Topology V1, (c)  Matra-Datavision  
1885     Locations 3  
1886     1  
1887                   0                0               1               0   
1888                   1                0               0               0   
1889                   0                1               0               0   
1890     1  
1891                   1                0               0               4   
1892                   0                1               0               5   
1893                   0                0               1               6   
1894     2  1 1 2 1 0  
1895     Curve2ds 24  
1896     1 0 0 1 0   
1897     1 0 0 1 0   
1898     1 3 0 0 -1   
1899     1 0 0 0 1   
1900     1 0 -2 1 0   
1901     1 0 0 1 0   
1902     1 0 0 0 -1   
1903     1 0 0 0 1   
1904     1 0 0 1 0   
1905     1 0 1 1 0   
1906     1 3 0 0 -1   
1907     1 1 0 0 1   
1908     1 0 -2 1 0   
1909     1 0 1 1 0   
1910     1 0 0 0 -1   
1911     1 1 0 0 1   
1912     1 0 0 0 1   
1913     1 0 0 1 0   
1914     1 3 0 0 1   
1915     1 0 0 1 0   
1916     1 0 0 0 1   
1917     1 0 2 1 0   
1918     1 3 0 0 1   
1919     1 0 2 1 0   
1920     Curves 13  
1921     1 0 0 0 0 0 1   
1922     1 0 0 3 -0 1 0   
1923     1 0 2 0 0 0 1   
1924     1 0 0 0 -0 1 0   
1925     1 1 0 0 0 0 1   
1926     1 1 0 3 0 1 0   
1927     1 1 2 0 0 0 1   
1928     1 1 0 0 -0 1 0   
1929     1 0 0 0 1 0 -0   
1930     1 0 0 3 1 0 -0   
1931     1 0 2 0 1 0 -0   
1932     1 0 2 3 1 0 -0   
1933     1 1 0 0 1 0 0   
1934     Polygon3D 1  
1935     2 1  
1936     0.1  
1937     1 0 0 2 0 0   
1938     0 1   
1939     PolygonOnTriangulations 24  
1940     2 1 2   
1941     p 0.1 1 0 3   
1942     2 1 4   
1943     p 0.1 1 0 3   
1944     2 2 3   
1945     p 0.1 1 0 2   
1946     2 1 2   
1947     p 0.1 1 0 2   
1948     2 4 3   
1949     p 0.1 1 0 3   
1950     2 1 4   
1951     p 0.1 1 0 3   
1952     2 1 4   
1953     p 0.1 1 0 2   
1954     2 1 2   
1955     p 0.1 1 0 2   
1956     2 1 2   
1957     p 0.1 1 0 3   
1958     2 2 3   
1959     p 0.1 1 0 3   
1960     2 2 3   
1961     p 0.1 1 0 2   
1962     2 4 3   
1963     p 0.1 1 0 2   
1964     2 4 3   
1965     p 0.1 1 0 3   
1966     2 2 3   
1967     p 0.1 1 0 3   
1968     2 1 4   
1969     p 0.1 1 0 2   
1970     2 4 3   
1971     p 0.1 1 0 2   
1972     2 1 2   
1973     p 0.1 1 0 1   
1974     2 1 4   
1975     p 0.1 1 0 1   
1976     2 4 3   
1977     p 0.1 1 0 1   
1978     2 1 4   
1979     p 0.1 1 0 1   
1980     2 1 2   
1981     p 0.1 1 0 1   
1982     2 2 3   
1983     p 0.1 1 0 1   
1984     2 4 3   
1985     p 0.1 1 0 1   
1986     2 2 3   
1987     p 0.1 1 0 1   
1988     Surfaces 6  
1989     1 0 0 0 1 0 -0 0 0 1 0 -1 0   
1990     1 0 0 0 -0 1 0 0 0 1 1 0 -0   
1991     1 0 0 3 0 0 1 1 0 -0 -0 1 0   
1992     1 0 2 0 -0 1 0 0 0 1 1 0 -0   
1993     1 0 0 0 0 0 1 1 0 -0 -0 1 0   
1994     1 1 0 0 1 0 -0 0 0 1 0 -1 0   
1995     Triangulations 6  
1996     4 2 1 0  
1997     0 0 0 0 0 3 0 2 3 0 2 0 0 0 3  0 3 -2 0 -2 2 4 3 2 1 4   
1998     4 2 1 0  
1999     0 0 0 1 0 0 1 0 3 0 0 3 0 0 0  1 3 1 3 0 3 2 1 3 1 4   
2000     4 2 1 0  
2001     0 0 3 0 2 3 1 2 3 1 0 3 0 0 0  2 1 2 1 0 3 2 1 3 1 4   
2002     4 2 1 0  
2003     0 2 0 1 2 0 1 2 3 0 2 3 0 0 0  1 3 1 3 0 3 2 1 3 1 4   
2004     4 2 1 0  
2005     0 0 0 0 2 0 1 2 0 1 0 0 0 0 0  2 1 2 1 0 3 2 1 3 1 4   
2006     4 2 1 0  
2007     1 0 0 1 0 3 1 2 3 1 2 0 0 0 3  0 3 -2 0 -2 2 4 3 2 1 4   
2008      
2009     TShapes 39  
2010     Ve  
2011     1e-007  
2012     0 0 3  
2013     0 0  
2014      
2015     0101101  
2016     *  
2017     Ve  
2018     1e-007  
2019     0 0 0  
2020     0 0  
2021      
2022     0101101  
2023     *  
2024     Ed  
2025      1e-007 1 1 0  
2026     1  1 0 0 3  
2027     2  1 1 0 0 3  
2028     2  2 2 0 0 3  
2029     6  1 1 0  
2030     6  2 2 0  
2031     0  
2032      
2033     0101000  
2034     -39 0 +38 0 *  
2035     Ve  
2036     1e-007  
2037     0 2 3  
2038     0 0  
2039      
2040     0101101  
2041     *  
2042     Ed  
2043      1e-007 1 1 0  
2044     1  2 0 0 2  
2045     2  3 1 0 0 2  
2046     2  4 3 0 0 2  
2047     6  3 1 0  
2048     6  4 3 0  
2049     0  
2050      
2051     0101000  
2052     -36 0 +39 0 *  
2053     Ve  
2054     1e-007  
2055     0 2 0  
2056     0 0  
2057      
2058     0101101  
2059     *  
2060     Ed  
2061      1e-007 1 1 0  
2062     1  3 0 0 3  
2063     2  5 1 0 0 3  
2064     2  6 4 0 0 3  
2065     6  5 1 0  
2066     6  6 4 0  
2067     0  
2068      
2069     0101000  
2070     -36 0 +34 0 *  
2071     Ed  
2072      1e-007 1 1 0  
2073     1  4 0 0 2  
2074     2  7 1 0 0 2  
2075     2  8 5 0 0 2  
2076     6  7 1 0  
2077     6  8 5 0  
2078     0  
2079      
2080     0101000  
2081     -34 0 +38 0 *  
2082     Wi  
2083      
2084     0101000  
2085     -37 0 -35 0 +33 0 +32 0 *  
2086     Fa  
2087     0  1e-007 1 0  
2088     2  1  
2089     0101000  
2090     +31 0 *  
2091     Ve  
2092     1e-007  
2093     1 0 3  
2094     0 0  
2095      
2096     0101101  
2097     *  
2098     Ve  
2099     1e-007  
2100     1 0 0  
2101     0 0  
2102      
2103     0101101  
2104     *  
2105     Ed  
2106      1e-007 1 1 0  
2107     1  5 0 0 3  
2108     2  9 6 0 0 3  
2109     2  10 2 0 0 3  
2110     6  9 6 0  
2111     6  10 2 0  
2112     0  
2113      
2114     0101000  
2115     -29 0 +28 0 *  
2116     Ve  
2117     1e-007  
2118     1 2 3  
2119     0 0  
2120      
2121     0101101  
2122     *  
2123     Ed  
2124      1e-007 1 1 0  
2125     1  6 0 0 2  
2126     2  11 6 0 0 2  
2127     2  12 3 0 0 2  
2128     6  11 6 0  
2129     6  12 3 0  
2130     0  
2131      
2132     0101000  
2133     -26 0 +29 0 *  
2134     Ve  
2135     1e-007  
2136     1 2 0  
2137     0 0  
2138      
2139     0101101  
2140     *  
2141     Ed  
2142      1e-007 1 1 0  
2143     1  7 0 0 3  
2144     2  13 6 0 0 3  
2145     2  14 4 0 0 3  
2146     6  13 6 0  
2147     6  14 4 0  
2148     0  
2149      
2150     0101000  
2151     -26 0 +24 0 *  
2152     Ed  
2153      1e-007 1 1 0  
2154     1  8 0 0 2  
2155     2  15 6 0 0 2  
2156     2  16 5 0 0 2  
2157     6  15 6 0  
2158     6  16 5 0  
2159     0  
2160      
2161     0101000  
2162     -24 0 +28 0 *  
2163     Wi  
2164      
2165     0101000  
2166     -27 0 -25 0 +23 0 +22 0 *  
2167     Fa  
2168     0  1e-007 6 0  
2169     2  6  
2170     0101000  
2171     +21 0 *  
2172     Ed  
2173      1e-007 1 1 0  
2174     1  9 0 0 1  
2175     2  17 2 0 0 1  
2176     2  18 5 0 0 1  
2177     6  17 2 0  
2178     6  18 5 0  
2179     0  
2180      
2181     0101000  
2182     -28 0 +38 0 *  
2183     Ed  
2184      1e-007 1 1 0  
2185     1  10 0 0 1  
2186     2  19 2 0 0 1  
2187     2  20 3 0 0 1  
2188     6  19 2 0  
2189     6  20 3 0  
2190     0  
2191      
2192     0101000  
2193     -29 0 +39 0 *  
2194     Wi  
2195      
2196     0101000  
2197     -19 0 -27 0 +18 0 +37 0 *  
2198     Fa  
2199     0  1e-007 2 0  
2200     2  2  
2201     0101000  
2202     +17 0 *  
2203     Ed  
2204      1e-007 1 1 0  
2205     1  11 0 0 1  
2206     2  21 4 0 0 1  
2207     2  22 5 0 0 1  
2208     6  21 4 0  
2209     6  22 5 0  
2210     0  
2211      
2212     0101000  
2213     -24 0 +34 0 *  
2214     Ed  
2215      1e-007 1 1 0  
2216     1  12 0 0 1  
2217     2  23 4 0 0 1  
2218     2  24 3 0 0 1  
2219     6  23 4 0  
2220     6  24 3 0  
2221     0  
2222      
2223     0101000  
2224     -26 0 +36 0 *  
2225     Wi  
2226      
2227     0101000  
2228     -15 0 -23 0 +14 0 +33 0 *  
2229     Fa  
2230     0  1e-007 4 0  
2231     2  4  
2232     0101000  
2233     +13 0 *  
2234     Wi  
2235      
2236     0101000  
2237     -32 0 -15 0 +22 0 +19 0 *  
2238     Fa  
2239     0  1e-007 5 0  
2240     2  5  
2241     0101000  
2242     +11 0 *  
2243     Wi  
2244      
2245     0101000  
2246     -35 0 -14 0 +25 0 +18 0 *  
2247     Fa  
2248     0  1e-007 3 0  
2249     2  3  
2250     0101000  
2251     +9 0 *  
2252     Sh  
2253      
2254     0101100  
2255     -30 0 +20 0 -16 0 +12 0 -10 0  +8 0 *  
2256     So  
2257      
2258     0100000  
2259     +7 0 *  
2260     CS  
2261      
2262     0101000  
2263     +6 3 *  
2264     Ve  
2265     1e-007  
2266     1 0 0  
2267     0 0  
2268      
2269     0101101  
2270     *  
2271     Ve  
2272     1e-007  
2273     2 0 0  
2274     0 0  
2275      
2276     0101101  
2277     *  
2278     Ed  
2279      1e-007 1 1 0  
2280     1  13 0 0 1  
2281     5  1 0  
2282     0  
2283      
2284     0101000  
2285     +4 0 -3 0 *  
2286     Co  
2287      
2288     1100000  
2289     +5 0 +2 0 *  
2290      
2291     +1 0   
2292     0  
2293 @endverbatim