6b6d06fa |
1 | BRep 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 | |
24 | Some data fields of the format have additional values, which are used in OCCT. |
25 | |
26 | Some data fields of the format are specific for OCCT. |
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. |
31 | The methods provided by *BRepTools* package use ASCII storage format; *BinTools* package uses binary format. |
32 | Each of these methods has two arguments: |
33 | - a *TopoDS_Shape* object to be read/written; |
34 | - a stream object or a file name to read from/write to. |
35 | |
36 | The following sample code reads a shape from ASCII file and writes it to a binary one: |
37 | |
38 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} |
39 | TopoDS_Shape aShape; |
40 | if (BRepTools::Read (aShape, "source_file.txt")) { |
41 | BinTools::Write (aShape, "result_file.bin"); |
42 | } |
43 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
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 |
119 | which 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 | |
128 | The transformation transforms a point (x, y, z) to another point (u, v, w) by the rule: |
129 | @f[ \begin{pmatrix} |
130 | u \\ v \\ w |
131 | \end{pmatrix} = |
132 | Q\cdot(x\;y\;z\;1)^{T} = |
133 | \begin{pmatrix} |
134 | {q}_{1,1}\cdot x +{q}_{1,2}\cdot y +{q}_{1,3}\cdot z +{q}_{1,4}\\ |
135 | {q}_{2,1}\cdot x +{q}_{2,2}\cdot y +{q}_{2,3}\cdot z +{q}_{2,4}\\ |
136 | {q}_{3,1}\cdot x +{q}_{3,2}\cdot y +{q}_{3,3}\cdot z +{q}_{3,4} |
137 | \end{pmatrix} . @f] |
138 | |
139 | *Q* may be a composition of matrices for the following elementary transformations: |
140 | |
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 |
239 | The example record is interpreted as a line which passes through a point *P*=(1, 0, 3), has a direction *D*=(0, 1, 0) and is defined by the following parametric equation: @f$ C(u)=(1,0,3)+u \cdot (0,1,0) @f$. |
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 |
272 | The example record is interpreted as a circle which has its center *P*=(1, 2, 3), is located in plane with a normal *N*=(0, 0 ,1). Directions for the circle are *D<sub>x</sub>*=(1, 0 ,0) and *D<sub>y</sub>*=(0, 1 ,0). The circle has a radius *r*=4 and is defined by the following parametric equation: @f$ C(u) = (1,2,3) + 4 \cdot ( cos(u) \cdot(1,0,0) + sin(u) \cdot (0,1,0) ) @f$. |
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 |
307 | The example record is interpreted as an ellipse which has its center *P*=(1, 2, 3), is located in plane with a normal *N*=(0, 0, 1), has major and minor axis directions *D<sub>maj</sub>*=(1, 0, 0) and *D<sub>min</sub>*=(0, 1, 0), major and minor radii *r<sub>maj</sub>*=5 and *r<sub>min</sub>*=4 and is defined by the following parametric equation: @f$ C(u) = (1,2,3) + 5 \cdot cos(u) \cdot(1,0,0) + 4 \cdot sin(u) \cdot (0,1,0) @f$. |
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 |
341 | The example record is interpreted as a parabola in plane which passes through a point *P*=(1, 2, 3) and has a normal *N*=(0, 0, 1). Directions for the parabola are *D<sub>x</sub>*=(1, 0, 0) and *D<sub>y</sub>*=(0, 1, 0). The parabola has a focus length *f*=16 and is defined by the following parametric equation: @f$ C(u) = (1,2,3) + \frac{u^{2}}{64} \cdot (1,0,0) + u \cdot (0,1,0) @f$. |
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 |
376 | The example record is interpreted as a hyperbola in plane which passes through a point *P*=(1, 2, 3) and has a normal *N*=(0, 0, 1). Other hyperbola data are *D<sub>x</sub>*=(1, 0, 0), *D<sub>y</sub>*=(0, 1, 0), *k<sub>x</sub>*=5 and *k<sub>y</sub>*=4. The hyperbola is defined by the following parametric equation: @f$ C(u) = (1,2,3) + 5 \cdot cosh(u) \cdot (1,0,0) +4 \cdot sinh(u) \cdot (0,1,0) @f$. |
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 |
406 | The weight poles are *m*+1 3D points *B<sub>0</sub> ... B<sub>m</sub>* if the flag *r* is 0. The weight poles are *m*+1 pairs *B<sub>0</sub>h<sub>0</sub> ... B<sub>m</sub>h<sub>m</sub>* if flag *r* is 1. Here *B<sub>i</sub>* is a 3D point and *h<sub>i</sub>* is a positive real @f$ (0 \leq i \leq m) @f$. @f$ h_{i}=1\; (0 \leq i \leq m) @f$ if the flag *r* is 0. |
bf62b306 |
407 | |
408 | The 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 |
412 | where @f$ 0^{0} \equiv 1 @f$. |
bf62b306 |
413 | |
dd21889e |
414 | The example record is interpreted as a Bezier curve with a rational flag *r*=1, degree *m*=2 and weight poles *B<sub>0</sub>*=(0, 1, 0), *h<sub>0</sub>*=4, *B<sub>1</sub>*=(1, -2, 0), *h<sub>1</sub>*=5 and *B<sub>2</sub>*=(2, 3, 0), *h<sub>2</sub>*=6. The Bezier curve is defined by the following parametric equation: |
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 |
456 | The weight poles are *n* 3D points *B<sub>1</sub> ... B<sub>n</sub>* if the flag *r* is 0. The weight poles are *n* pairs *B<sub>1</sub>h<sub>1</sub> ... B<sub>n</sub>h<sub>n</sub>* if the flag *r* is 1. Here *B<sub>i</sub>* is a 3D point and *h<sub>i</sub>* is a positive real @f$ (1 \leq i \leq n) @f$. @f$ h_{i}=1\; (1 \leq i \leq n) @f$ if the flag *r* is 0. |
bf62b306 |
457 | |
dd21889e |
458 | The multiplicity knots are *k* pairs *u<sub>1</sub>q<sub>1</sub> ... u<sub>k</sub>q<sub>k</sub>*. Here *u<sub>i</sub>* is a knot with a multiplicity @f$ q_{i} \geq 1 \; (1 \leq i \leq k) @f$ so that |
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 | |
463 | The 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 |
467 | where functions @f$ N_{i,j} @f$ have the following recursion definition by *j*: |
468 | |
469 | @f[ N_{i,1}(u)=\left\{\begin{matrix} |
470 | 1\Leftarrow \bar{u}_{i} \leq u \leq \bar{u}_{i+1}\\ |
471 | 0\Leftarrow u < \bar{u}_{i} \vee \bar{u}_{i+1} \leq u \end{matrix} \right.,\; |
472 | N_{i,j}(u)=\frac{(u-\bar{u}_{i}) \cdot N_{i,j-1}(u) }{\bar{u}_{i+j-1}-\bar{u}_{i}}+ \frac{(\bar{u}_{i+j}-u) \cdot N_{i+1,j-1}(u)}{\bar{u}_{i+j}-\bar{u}_{i+1}},\;(2 \leq j \leq m+1) @f] |
bf62b306 |
473 | |
dd21889e |
474 | where |
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 |
478 | The example record is interpreted as a B-spline curve with a rational flag *r*=1, a degree *m*=1, pole count *n*=3, multiplicity knot count *k*=5, weight poles *B<sub>1</sub>*=(0,1,0), *h<sub>1</sub>*=4, *B<sub>2</sub>*=(1,-2,0), *h<sub>2</sub>*=5 and *B<sub>3</sub>*=(2,3,0), *h<sub>3</sub>*=6, multiplicity knots *u<sub>1</sub>*=0, *q<sub>1</sub>*=1, *u<sub>2</sub>*=0.25, *q<sub>2</sub>*=1, *u<sub>3</sub>*=0.5, *q<sub>3</sub>*=1, *u<sub>4</sub>*=0.75, *q<sub>4</sub>*=1 and *u<sub>5</sub>*=1, *q<sub>5</sub>*=1. The B-spline curve is defined by the following parametric equation: |
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 |
508 | The example record is interpreted as a trimmed curve with *u<sub>min</sub>*=-4 and *u<sub>max</sub>*=5 for the base curve @f$ B(u)=(1,2,3)+u \cdot (1,0,0) @f$. The trimmed curve is defined by the following parametric equation: @f$ C(u)=(1,2,3)+u \cdot (1,0,0),\; u \in [-4,\; 5] @f$. |
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 |
539 | The example record is interpreted as an offset curve with a distance *d*=2, direction *D*=(0, 1, 0), base curve @f$ B(u)=(1,2,3)+u \cdot (1,0,0) @f$ and defined by the following parametric equation: @f$ C(u)=(1,2,3)+u \cdot (1,0,0)+2 \cdot (0,0,1) @f$. |
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 |
598 | The example record is interpreted as a plane which passes through a point *P*=(0, 0, 3), has a normal *N*=(0, 0, 1) and is defined by the following parametric equation: @f$ S(u,v)=(0,0,3)+u \cdot (1,0,0) + v \cdot (0,1,0) @f$. |
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 |
621 | The example record is interpreted as a cylinder which axis passes through a point *P*=(1, 2, 3) and has a direction *D<sub>v</sub>*=(0, 0, 1). Directions for the cylinder are *D<sub>X</sub>*=(1,0,0) and *D<sub>Y</sub>*=(0,1,0). The cylinder has a radius *r*=4 and is defined by the following parametric equation: @f$ S(u,v)=(1,2,3)+4 \cdot ( cos(u) \cdot D_{X} + sin(u) \cdot D_{Y} ) + v \cdot D_{v}. @f$ |
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 |
646 | The example record is interpreted as a cone with an axis which passes through a point *P*=(1, 2, 3) and has a direction *D<sub>Z</sub>*=(0, 0, 1). Other cone data are *D<sub>X</sub>*=(1, 0, 0), *D<sub>Y</sub>*=(0, 1, 0), *r*=4 and @f$ \varphi = 0.75 @f$. The cone is defined by the following parametric equation: |
647 | @f[ S(u,v)=(1,2,3)+( 4 + v \cdot sin(0.75)) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + v \cdot cos(0.75) \cdot (0,0,1) . @f] |
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 |
670 | The example record is interpreted as a sphere with its center *P*=(1, 2, 3). Directions for the sphere are *D<sub>Z</sub>*=(0, 0, 1), *D<sub>X</sub>*=(1, 0, 0) and *D<sub>Y</sub>*=(0, 1, 0). The sphere has a radius *r*=4 and is defined by the following parametric equation: |
671 | @f[ S(u,v)=(1,2,3)+ 4 \cdot cos(v) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + 4 \cdot sin(v) \cdot (0,0,1) . @f] |
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 |
694 | The example record is interpreted as a torus with an axis which passes through a point *P*=(1, 2, 3) and has a direction *D<sub>Z</sub>*=(0, 0, 1). *D<sub>X</sub>*=(1, 0, 0), *D<sub>Y</sub>*=(0, 1, 0), *r<sub>1</sub>*=8 and *r<sub>2</sub>*=4 for the torus. The torus is defined by the following parametric equation: |
695 | @f[ S(u,v)=(1,2,3)+ (8+4 \cdot cos(v)) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + 4 \cdot sin(v) \cdot (0,0,1) . @f] |
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 |
719 | The example record is interpreted as a linear extrusion surface with a direction *D<sub>v</sub>*=(0, 0.6, 0.8). The base curve is a circle for the surface. The surface is defined by the following parametric equation: |
720 | |
721 | @f[ S(u,v)=(1,2,3)+4 \cdot (cos(u) \cdot (1,0,0)+sin(u) \cdot (0,1,0))+v \cdot (0, 0.6, 0.8),\; (u,v) \in [0,\; 2 \cdot \pi) \times (-\infty,\; \infty). @f] |
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 |
745 | where @f$ V(v)=C(v)-P, V_{D}(v)=(D,V(v)) \cdot D @f$. |
bf62b306 |
746 | |
dd21889e |
747 | The example record is interpreted as a revolution surface with an axis which passes through a point *P*=(-4, 0, 3) and has a direction *D*=(0, 1, 0). The base curve is a circle for the surface. The surface is defined by the following parametric equation: |
748 | |
749 | @f[ S(u,v)= (-4,0,3)+V_{D}(v)+cos(u) \cdot (V(v)-V_{D}(v))+sin(u) \cdot [(0,1,0),V(v)],\;(u,v) \in [0,\; 2 \cdot \pi)\times [0,\; 2 \cdot \pi) @f] |
bf62b306 |
750 | |
dd21889e |
751 | where @f$ V(v)=(5,2,0)+4 \cdot (cos(v) \cdot (1,0,0)+sin(v) \cdot (0,1,0)), V_{D}(v)=((0,1,0),V(v)) \cdot (0,1,0) @f$. |
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 |
791 | The weight poles are @f$ (m_{u}+1) \cdot (m_{v}+1) @f$ 3D points @f$ B_{i,j}\; ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$ if @f$ r_{u}+r_{v}=0 @f$. The weight poles are @f$ (m_{u}+1) \cdot (m_{v}+1) @f$ pairs @f$ B_{i,j}h_{i,j}\; ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$ if @f$ r_{u}+r_{v} \neq 0 @f$. Here @f$ B_{i,j} @f$ is a 3D point and @f$ h_{i,j} @f$ is a positive real @f$ ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$. @f$ h_{i,j}=1\; ((i,j) \in \left \{ 0,...,m_{u} \right \} \times \left \{ 0,...,m_{v} \right \}) @f$ if @f$ r_{u}+r_{v} = 0 @f$. |
bf62b306 |
792 | |
793 | The 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 |
797 | where @f$ 0^{0} \equiv 1 @f$. |
bf62b306 |
798 | |
dd21889e |
799 | The example record is interpreted as a Bezier surface with a u rational flag *r<sub>u</sub>*=1, v rational flag *r<sub>v</sub>*=1, u degree *m<sub>u</sub>*=2, v degree *m<sub>v</sub>*=1, weight poles *B<sub>0,0</sub>*=(0, 0, 1), *h<sub>0,0</sub>*=7, *B<sub>0,1</sub>*=(1, 0, -4), *h<sub>0,1</sub>*=10, *B<sub>1,0</sub>*=(0, 1, -2), *h<sub>1,0</sub>*=8, *B<sub>1,1</sub>*=(1, 1, 5), *h<sub>1,1</sub>*=11, *B<sub>2,0</sub>*=(0, 2, 3), *h<sub>2,0</sub>*=9 and *B<sub>2,1</sub>*=(1, 2, 6), *h<sub>2,1</sub>*=12. The surface is defined by the following parametric equation: |
bf62b306 |
800 | |
9d99d3c1 |
801 | @f[ |
802 | \begin{align} |
803 | S(u,v)= [ (0,0,1) \cdot 7 \cdot (1-u)^{2} \cdot (1-v)+(1,0,-4) \cdot 10 \cdot (1-u)^{2} \cdot v+ (0,1,-2) \cdot 8 \cdot 2 \cdot u \cdot (1-u) \cdot (1-v) + \\ |
804 | (1,1,5) \cdot 11 \cdot 2 \cdot u \cdot (1-u) \cdot v+ (0,2,3) \cdot 9 \cdot u^{2} \cdot (1-v)+(1,2,6) \cdot 12 \cdot u^{2} \cdot v] \div [7 \cdot (1-u)^{2} \cdot (1-v)+ \\ |
805 | 10 \cdot (1-u)^{2} \cdot v+ 8 \cdot 2 \cdot u \cdot (1-u) \cdot (1-v)+ 11 \cdot 2 \cdot u \cdot (1-u) \cdot v+ 9 \cdot u^{2} \cdot (1-v)+12 \cdot u^{2} \cdot v ] |
806 | \end{align} |
807 | @f] |
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 |
880 | The weight poles are @f$ n_{u} \cdot n_{v} @f$ 3D points @f$ B_{i,j}\; ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$ if @f$ r_{u}+r_{v}=0 @f$. The weight poles are @f$ n_{u} \cdot n_{v} @f$ pairs @f$ B_{i,j}h_{i,j}\; ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$ if @f$ r_{u}+r_{v} \neq 0 @f$. Here @f$ B_{i,j} @f$ is a 3D point and @f$ h_{i,j} @f$ is a positive real @f$ ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$. @f$ h_{i,j}=1\; ((i,j) \in \left \{ 1,...,n_{u} \right \} \times \left \{ 1,...,n_{v} \right \}) @f$ if @f$ r_{u}+r_{v} = 0 @f$. |
bf62b306 |
881 | |
dd21889e |
882 | The u multiplicity knots are *k<sub>u</sub>* pairs @f$ u_{1}q_{1} ... u_{k_{u}}q_{k_{u}} @f$. Here @f$ u_{i} @f$ is a knot with multiplicity @f$ q_{i} \geq 1 \;(1\leq i\leq k_{u}) @f$ so that |
bf62b306 |
883 | |
dd21889e |
884 | @f[ u_{i} < u_{i+1} \; (1\leq i\leq k_{u}-1), \\ |
885 | q_{1} \leq m_{u}+1,\; q_{k_{u}} \leq m_{u}+1,\; q_{i} \leq m_{u}\; (2\leq i\leq k_{u}-1),\; \sum_{i=1}^{k_{u}}q_{i}=m_{u}+n_{u}+1. @f] |
bf62b306 |
886 | |
dd21889e |
887 | The v multiplicity knots are *k<sub>v</sub>* pairs @f$ v_{1}t_{1} ... v_{k_{v}}t_{k_{v}} @f$. Here @f$ v_{j} @f$ is a knot with multiplicity @f$ t_{i} \geq 1\;(1\leq i\leq k_{v}) @f$ so that |
bf62b306 |
888 | |
dd21889e |
889 | @f[ v_{j} < v_{j+1} \; (1\leq j\leq k_{v}-1), \\ |
890 | t_{1} \leq m_{v}+1,\; t_{k_{v}} \leq m_{v}+1,\; t_{j} \leq m_{v}\; (2\leq j\leq k_{v}-1),\; \sum_{j=1}^{k_{v}}t_{j}=m_{v}+n_{v}+1. @f] |
bf62b306 |
891 | |
892 | The 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 |
896 | where 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} |
900 | N_{i,1}(u)= \left\{\begin{matrix} |
901 | 1\Leftarrow \bar{u}_{i} \leq u \leq \bar{u}_{i+1} |
902 | 0\Leftarrow u < \bar{u}_{i} \vee \bar{u}_{i+1} \leq u \end{matrix} \right.,\; \\ |
903 | N_{i,j}(u)=\frac{(u-\bar{u}_{i}) \cdot N_{i,j-1}(u) }{\bar{u}_{i+j-1}-\bar{u}_{i}}+ |
904 | \frac{(\bar{u}_{i+j}-u) \cdot N_{i+1,j-1}(u)}{\bar{u}_{i+j}-\bar{u}_{i+1}},\;(2 \leq j \leq m_{u}+1), \; \\ |
dd21889e |
905 | M_{i,1}(v)=\left\{\begin{matrix} |
906 | 1\Leftarrow \bar{v}_{i} \leq v \leq \bar{v}_{i+1}\\ |
9d99d3c1 |
907 | 0\Leftarrow v < \bar{v}_{i} \vee \bar{v}_{i+1} \leq v \end{matrix} \right.,\; \\ |
908 | M_{i,j}(v)=\frac{(v-\bar{v}_{i}) \cdot M_{i,j-1}(v) }{\bar{v}_{i+j-1}-\bar{v}_{i}}+ \frac{(\bar{v}_{i+j}-v) \cdot M_{i+1,j-1}(v)}{\bar{v}_{i+j}-\bar{v}_{i+1}},\;(2 \leq j \leq m_{v}+1); |
909 | \end{align} |
910 | @f] |
dd21889e |
911 | |
912 | where |
913 | @f[ \bar{u}_{i}=u_{j}\; (1 \leq j \leq k_{u},\; \sum_{l=1}^{j-1}q_{l} \leq i \leq \sum_{l=1}^{j}q_{l}), \\ |
914 | \bar{v}_{i}=v_{j}\; (1 \leq j \leq k_{v},\; \sum_{l=1}^{j-1}t_{l} \leq i \leq \sum_{l=1}^{j}t_{l}); @f] |
bf62b306 |
915 | |
dd21889e |
916 | The example record is interpreted as a B-spline surface with a u rational flag *r<sub>u</sub>*=1, v rational flag *r<sub>v</sub>*=1, u degree *m<sub>u</sub>*=1, v degree *m<sub>v</sub>*=1, u pole count *n<sub>u</sub>*=3, v pole count *n<sub>v</sub>*=2, u multiplicity knot count *k<sub>u</sub>*=5, v multiplicity knot count *k<sub>v</sub>*=4, weight poles *B<sub>1,1</sub>*=(0, 0, 1), *h<sub>1,1</sub>*=7, *B<sub>1,2</sub>*=(1, 0, -4), *h<sub>1,2</sub>*=10, *B<sub>2,1</sub>*=(0, 1, -2), *h<sub>2,1</sub>*=8, *B<sub>2,2</sub>*=(1, 1, 5), *h<sub>2,2</sub>*=11, *B<sub>3,1</sub>*=(0, 2, 3), *h<sub>3,1</sub>*=9 and *B<sub>3,2</sub>*=(1, 2, 6), *h<sub>3,2</sub>*=12, u multiplicity knots *u<sub>1</sub>*=0, *q<sub>1</sub>*=1, *u<sub>2</sub>*=0.25, *q<sub>2</sub>*=1, *u<sub>3</sub>*=0.5, *q<sub>3</sub>*=1, *u<sub>4</sub>*=0.75, *q<sub>4</sub>*=1 and *u<sub>5</sub>*=1, *q<sub>5</sub>*=1, v multiplicity knots *v<sub>1</sub>*=0, *r<sub>1</sub>*=1, *v<sub>2</sub>*=0.3, *r<sub>2</sub>*=1, *v<sub>3</sub>*=0.7, *r<sub>3</sub>*=1 and *v<sub>4</sub>*=1, *r<sub>4</sub>*=1. The B-spline surface is defined by the following parametric equation: |
bf62b306 |
917 | |
9d99d3c1 |
918 | @f[ |
919 | \begin{align} |
920 | S(u,v)= [ (0,0,1) \cdot 7 \cdot N_{1,2}(u) \cdot M_{1,2}(v)+(1,0,-4) \cdot 10 \cdot N_{1,2}(u) \cdot M_{2,2}(v)+ \\ |
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)+ \\ |
924 | 11 \cdot N_{2,2}(u) \cdot M_{2,2}(v)+ 9 \cdot N_{3,2}(u) \cdot M_{1,2}(v)+12 \cdot N_{3,2}(u) \cdot M_{2,2}(v) ] |
925 | \end{align} |
926 | @f] |
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 |
958 | The example record is interpreted as a rectangular trim surface to the set [-1, 2]x[-3, 4] for the base surface @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0) @f$. The rectangular trim surface is defined by the following parametric equation: @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+ v \cdot (0,1,0),\; (u,v) \in [-1,2] \times [-3,4] @f$. |
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. |
981 | The offset surface data consist of a distance *d* and a \<surface record\>. The offset surface is the result of offsetting the base surface *B* described in the record to the distance *d* along the normal *N* of surface *B*. The offset surface is defined by the following parametric equation: |
bf62b306 |
982 | |
dd21889e |
983 | @f[ S(u,v)=B(u,v)+d \cdot N(u,v),\; (u,v) \in domain(B) . \\ |
984 | N(u,v) = [S'_{u}(u,v),S'_{v}(u,v)] @f] |
985 | if @f$ [S'_{u}(u,v),S'_{v}(u,v)] \neq \vec{0} @f$. |
bf62b306 |
986 | |
dd21889e |
987 | The example record is interpreted as an offset surface with a distance *d*=-2 and base surface @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0) @f$. The offset surface is defined by the following parametric equation: @f$ S(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0)-2 \cdot (0,0,1) @f$. |
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 |
1065 | The example record is interpreted as a line which passes through a point *P*=(3,0), has a direction *D*=(0,-1) and is defined by the following parametric equation: @f$ C(u)=(3,0)+ u \cdot (0,-1) @f$. |
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 |
1096 | The example record is interpreted as a circle which has a center *P*=(1,2). The circle plane is parallel to directions *D<sub>x</sub>*=(1,0) and *D<sub>y</sub>*=(0,1). The circle has a radius *r*=3 and is defined by the following parametric equation: @f$ C(u)=(1,2)+3 \cdot (cos(u) \cdot (1,0) + sin(u) \cdot (0,1)) @f$. |
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 |
1130 | The example record is interpreted as an ellipse which has a center *P*=(1,2), major and minor axis directions *D<sub>maj</sub>*=(1,0) and *D<sub>min</sub>*=(0,1), major and minor radii *r<sub>maj</sub>*=4 and *r<sub>min</sub>*=3 and is defined by the following parametric equation: @f$ C(u)=(1,2)+4 \cdot cos(u) \cdot (1,0)+3 \cdot sin(u) \cdot (0,1) @f$. |
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;\\ |
1161 | C(u)=P+u \cdot D_{x},\; u \in (-\infty,\; \infty) \Leftarrow f = 0\; (degenerated\;case). @f] |
bf62b306 |
1162 | |
dd21889e |
1163 | The example record is interpreted as a parabola in plane which passes through a point *P*=(1,2) and is parallel to directions *D<sub>x</sub>*=(1,0) and *D<sub>y</sub>*=(0,1). The parabola has a focus length *f*=16 and is defined by the following parametric equation: @f$ C(u)=(1,2)+ \frac{u^{2}}{64} \cdot (1,0)+u \cdot (0,1) @f$. |
bf62b306 |
1164 | |
bf62b306 |
1165 | |
6b6d06fa |
1166 | @subsubsection specification__brep_format_5_3_5 Hyperbola - \<2D curve record 5\> |
bf62b306 |
1167 | **Example** |
1168 | |
1169 | 5 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 |
1195 | The example record is interpreted as a hyperbola with coordinate system which has origin *P*=(1,2) and axis directions *D<sub>x</sub>*=(1,0) and *D<sub>y</sub>*=(0,1). Other data for the hyperbola are *k<sub>x</sub>*=5 and *k<sub>y</sub>*=4. The hyperbola is defined by the following parametric equation: @f$ C(u)=(1,2)+3 \cdot cosh(u) \cdot (1,0)+4 \cdot sinh(u) \cdot (0,1) @f$. |
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 |
1203 | 6 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 |
1225 | The weight poles are *m*+1 2D points *B<sub>0</sub> ... B<sub>m</sub>* if the flag *r* is 0. The weight poles are *m*+1 pairs *B<sub>0</sub>h<sub>0</sub> ... B<sub>m</sub>h<sub>m</sub>* if the flag *r* is 1. Here *B<sub>i</sub>* is a 2D point and *h<sub>i</sub>* is a positive real @f$ (0\leq i\leq m) @f$. *h<sub>i</sub>*=1 @f$(0\leq i\leq m) @f$ if the flag *r* is 0. |
bf62b306 |
1226 | |
1227 | The 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 |
1231 | where @f$ 0^{0} \equiv 1 @f$. |
bf62b306 |
1232 | |
dd21889e |
1233 | The example record is interpreted as a Bezier curve with a rational flag *r*=1, a degree *m*=2 and weight poles *B<sub>0</sub>*=(0,1), *h<sub>0</sub>*=4, *B<sub>1</sub>*=(1,-2), *h<sub>1</sub>*=5 and *B<sub>2</sub>*=(2,3), *h<sub>2</sub>*=6. The Bezier curve is defined by the following parametric equation: |
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 |
1243 | 7 1 0 1 3 5 0 1 4 1 -2 5 2 3 6 |
1244 | 0 1 0.25 1 0.5 1 0.75 1 1 1 |
1245 | @endverbatim |
1246 | |
1247 | **BNF-like Definition** |
1248 | |
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 |
1274 | The weight poles are *n* 2D points *B<sub>1</sub> ... B<sub>n</sub>* if the flag *r* is 0. The weight poles are *n* pairs *B<sub>1</sub>h<sub>1</sub> ... B<sub>n</sub>h<sub>n</sub>* if the flag *r* is 1. Here *B<sub>i</sub>* is a 2D point and *h<sub>i</sub>* is a positive real @f$ (1\leq i\leq n) @f$. *h<sub>i</sub>*=1 @f$(1\leq i\leq n) @f$ if the flag *r* is 0. |
bf62b306 |
1275 | |
dd21889e |
1276 | The multiplicity knots are *k* pairs *u<sub>1</sub>q<sub>1</sub> ... u<sub>k</sub>q<sub>k</sub>*. Here *u<sub>i</sub>* is a knot with multiplicity @f$ q_{i} \geq 1\; (1 \leq i \leq k) @f$ so that |
bf62b306 |
1277 | |
dd21889e |
1278 | @f[ u_{i} < u_{i+1}\; (1 \leq i \leq k-1), \\ |
1279 | q_{1} \leq m+1,\; q_{k} \leq m+1,\; q_{i} \leq m\; (2 \leq i \leq k-1),\; \sum_{i=1}^{k}q_{i}=m+n+1 . @f] |
bf62b306 |
1280 | |
1281 | The 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 |
1285 | where 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} |
1288 | 1\Leftarrow \bar{u}_{i} \leq u \leq \bar{u}_{i+1}\\ |
1289 | 0\Leftarrow u < \bar{u}_{i} \vee \bar{u}_{i+1} \leq u \end{matrix} \right.,\; |
1290 | N_{i,j}(u)=\frac{(u-\bar{u}_{i}) \cdot N_{i,j-1}(u) }{\bar{u}_{i+j-1}-\bar{u}_{i}}+ \frac{(\bar{u}_{i+j}-u) \cdot N_{i+1,j-1}(u)}{\bar{u}_{i+j}-\bar{u}_{i+1}},\;(2 \leq j \leq m+1) @f] |
bf62b306 |
1291 | |
1292 | where |
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 |
1296 | The example record is interpreted as a B-spline curve with a rational flag *r*=1, a degree *m*=1, a pole count *n*=3, a multiplicity knot count *k*=5, weight poles *B<sub>1</sub>*=(0,1), *h<sub>1</sub>*=4, *B<sub>2</sub>*=(1,-2), *h<sub>2</sub>*=5 and *B<sub>3</sub>*=(2,3), *h<sub>3</sub>*=6 and multiplicity knots *u<sub>1</sub>*=0, *q<sub>1</sub>*=1, *u<sub>2</sub>*=0.25, *q<sub>2</sub>*=1, *u<sub>3</sub>*=0.5, *q<sub>3</sub>*=1, *u<sub>4</sub>*=0.75, *q<sub>4</sub>*=1 and *u<sub>5</sub>*=1, *q<sub>5</sub>*=1. The B-spline curve is defined by the following parametric equation: |
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 |
1327 | The example record is interpreted as a trimmed curve with *u<sub>min</sub>*=-4, *u<sub>max</sub>*=5 and base curve @f$ B(u)=(1,2)+u \cdot (1,0) @f$. The trimmed curve is defined by the following parametric equation: @f$ C(u)=(1,2)+u \cdot (1,0),\; u \in [-4,5] @f$. |
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 |
1353 | The example record is interpreted as an offset curve with a distance *d*=2 and base curve @f$ B(u)=(1,2)+u \cdot (1,0) @f$ and is defined by the following parametric equation: @f$ C(u)=(1,2)+u \cdot (1,0)+2 \cdot (0,-1) @f$. |
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 |
1403 | The parameter @f$ u_{i}\; (1\leq i \leq m) @f$ is the parameter of the node *N<sub>i</sub>* on the curve *C*: |
bf62b306 |
1404 | |
dd21889e |
1405 | @f[ C(u_{i})=N_{i} . @f] |
bf62b306 |
1406 | |
dd21889e |
1407 | The example record describes a polyline from *m*=2 nodes with a parameter presence flag *p*=1, a deflection *d*=0.1, nodes *N<sub>1</sub>*=(1,0,0) and *N<sub>2</sub>*=(2,0,0) and parameters *u<sub>1</sub>*=0 and *u<sub>2</sub>*=1. |
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 |
1470 | The parameter pair @f$ u_{i}\; v_{i}\; (1\leq i \leq m) @f$ describes the parameters of node *N<sub>i</sub>* on the surface: |
bf62b306 |
1471 | |
dd21889e |
1472 | @f[ S(u_{i},v_{i})=N_{i} . @f] |
bf62b306 |
1473 | |
dd21889e |
1474 | The triangle @f$ n_{j,1}\; n_{j,2}\; n_{j,3}\; (1\leq j \leq k) @f$ is interpreted as a triangle of nodes @f$ N_{n_{j},1}\; N_{n_{j},2}@f$ and @f$ N_{n_{j},3} @f$ with circular traversal of the nodes in the order @f$ N_{n_{j},1}\; N_{n_{j},2}@f$ and @f$ N_{n_{j},3} @f$. From any side of the triangulation *T* all its triangles have the same direction of the node circular traversal: either clockwise or counterclockwise. |
bf62b306 |
1475 | |
1476 | Triangulation record |
1477 | |
1478 | @verbatim |
1479 | 4 2 1 0 |
1480 | 0 0 0 0 0 3 0 2 3 0 2 0 0 0 3 0 3 -2 0 -2 2 4 3 2 1 4 |
1481 | @endverbatim |
1482 | |
dd21889e |
1483 | describes a triangulation with *m*=4 nodes, *k*=2 triangles, parameter presence flag *p*=1, deflection *d*=0, nodes *N<sub>1</sub>*=(0,0,0), *N<sub>2</sub>*=(0,0,3), *N<sub>3</sub>*=(0,2,3) and *N<sub>4</sub>*=(0,2,0), parameters (*u<sub>1</sub>*, *v<sub>1</sub>*)=(0,0), (*u<sub>2</sub>*, *v<sub>2</sub>*)=(3,0), (*u<sub>3</sub>*, *v<sub>3</sub>*)=(3,-2) and (*u<sub>4</sub>*, *v<sub>4</sub>*)=(0,-2), and triangles (*n<sub>1,1</sub>*, *n<sub>1,2</sub>*, *n<sub>1,3</sub>*)=(2,4,3) and (*n<sub>2,1</sub>*, *n<sub>2,2</sub>*, *n<sub>2,3</sub>*)=(2,1,4). From the point (1,0,0) ((-1,0,0)) the triangles have clockwise (counterclockwise) direction of the node circular traversal. |
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 |
1585 | Parameter @f$ u_{i}\; (1\leq i\leq m) @f$ is *n<sub>i</sub>*-th node *C(u<sub>i</sub>)* parameter on curve *C*. |
bf62b306 |
1586 | |
1587 | |
6b6d06fa |
1588 | @subsection specification__brep_format_6_6 Geometric Sense of a Curve |
bf62b306 |
1589 | |
dd21889e |
1590 | Geometric 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 |
1595 | An 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 | |
1649 | The 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 |
1677 | The 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 |
1761 | The 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 |
1825 | Flags \<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 |
1864 | Flag \<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 |