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