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