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