0% found this document useful (0 votes)
116 views

BRep Format

The document describes the BRep format which is used to store 3D models consisting of vertices, edges, faces, shells, solids, and their relationships. The format uses ASCII text and defines terms for integers, reals, points, directions, and other elements. It consists of sections for content type, version, locations to define coordinate transformations, geometry which describes the curves and surfaces, and shapes which define how they are put together. Locations define a transformation matrix to map points between coordinate systems, while geometry describes the basic geometric entities like curves and surfaces that make up a model.

Uploaded by

Isaac Amankwaa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
116 views

BRep Format

The document describes the BRep format which is used to store 3D models consisting of vertices, edges, faces, shells, solids, and their relationships. The format uses ASCII text and defines terms for integers, reals, points, directions, and other elements. It consists of sections for content type, version, locations to define coordinate transformations, geometry which describes the curves and surfaces, and shapes which define how they are put together. Locations define a transformation matrix to map points between coordinate systems, while geometry describes the basic geometric entities like curves and surfaces that make up a model.

Uploaded by

Isaac Amankwaa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 68

BRep Format

Introduction
BREP format is used to store 3D models and allows to store a model which consists of vertices,
edges, wires, faces, shells, solids, compsolids, compounds, edge triangulations, face triangulations,
polylines on triangulations, space location and orientation. Any set of such models may be stored as
a single model which is a compound of the models.

The format is described in an order which is convenient for understanding rather than in the order
the format parts follow each other. BNF-like definitions are used in this document. Most of the
chapters contain BREP format descriptions in the following order:

 format file fragment to illustrate the part;


 BNF-like definition of the part;
 detailed description of the part.

Note that the format is a part of Open CASCADE Technology (OCCT). Some data fields of the
format have additional values, which are used in OCCT. Some data fields of the format are specific
for OCCT.

Format Common Structure


ASCII encoding is used to read/write BREP format from/to file. The format data are stored in a file as
text data. BREP format uses the following BNF terms:

 <\n>: It is the operating-system-dependent ASCII character sequence which separates ASCII


text strings in the operating system used;
 <_\n>: = " "*<\n>;
 <_>: = " "+; It is not an empty sequence of space characters with ASCII code 21h;
 <flag>: = "0" | "1";
 <int>: It is an integer number from -231 to 231-1 which is written in denary system;
 <real>: It is a real from -1.7976931348623158 ⋅ 10308 to 1.7976931348623158 ⋅ 10308 which
is written in decimal or E form with base 10.The point is used as a delimiter of the integer
and fractional parts;
 <2D point>: = <real><_><real>;
 <3D point>: = <real>(<_><real)>2;
 <2D direction>: It is a <2D point> x y so that x2 + y2 = 1;
 <3D direction>: It is a <3D point> x y z so that x2 + y2 + z2 = 1;
 <+>: It is an arithmetic operation of addition.

The format consists of the following sections:

 <content type>;
 <version>;
 <locations>;
 <geometry>;
 <shapes>.

<content type> = "DBRep_DrawableShape" <_\n><_\n>; <content type> have other values [1].

<version> = ("CASCADE Topology V1, (c) Matra-Datavision" | "CASCADE Topology V2, (c) Matra-
Datavision")<_\n>; The difference of the versions is described in the document.

Sections <locations>, <geometry> and <shapes> are described below in separate chapters of the
document.

Locations
Example

Locations 3
1
0 0
1 0
1 0
0 0
0 1
0 0
1
1 0
0 4
0 1
0 5
0 0
1 6
2 1 1 2 1 0
BNF-like Definition

<locations> = <location header>


<_\n> <location records>;
<location header> = "Locations"
<_> <location record count>;
<location record count> = <int>;
<location records> = <location
record> ^ <location record count>;
<location record> = <location
record 1> | <location record 2>;
<location record 1> = "1" <_\n>
<location data 1>;
<location record 2> = "2" <_>
<location data 2>;
<location data 1> = ((<_> <real>)
^ 4 <_\n>) ^ 3;
<location data 2> = (<int> <_>
<int> <_>)* "0" <_\n>;

Description

<location data 1> is interpreted as a 3 x 4


matrix Q=⎛⎝⎜⎜q1,1q2,1q3,1q1,2q2,2q3,2q1,3q2,3q3,3q1,4q2,4q3,4⎞⎠⎟⎟ which describes
transformation of 3 dimensional space and satisfies the following constraints:

 d≠0 where d=|Q2| where Q2=⎛⎝⎜⎜q1,1q2,1q3,


1q1,2q2,2q3,2q1,3q2,3q3,3q1,4q2,4q3,4⎞⎠⎟⎟;
 QT3=Q−13 where Q3=Q2/d1/3.

The transformation transforms a point (x, y, z) to another point (u, v, w) by the rule:

⎛⎝⎜uvw⎞⎠⎟=Q⋅(xyz1)T=⎛⎝⎜⎜q1,1⋅x+q1,2⋅y+q1,3⋅z+q1,4q2,1⋅x+q2,2⋅y+q2,3⋅z+q2,4q3,1⋅x+q3,
2⋅y+q3,3⋅z+q3,4⎞⎠⎟⎟.

Q may be a composition of matrices for the following elementary transformations:

 parallel translation –
⎛⎝⎜⎜100010001q1,4q2,4q3,4⎞⎠⎟⎟;
 rotation around an axis with a direction D(Dx, Dy,
Dz) by an angle φ –
⎛⎝⎜D2x⋅(1−cos(φ))+cos(φ)Dx⋅Dy⋅(1−cos(φ))+Dz⋅sin(φ)Dx⋅Dz⋅(1−cos(φ))−Dy⋅sin(φ)Dx⋅Dy⋅(
1−cos(φ))−Dz⋅sin(φ)D2y⋅(1−cos(φ))+cos(φ)Dy⋅Dz⋅(1−cos(φ))+Dx⋅sin(φ)Dx⋅Dz⋅(1−cos(φ))+Dy
⋅sin(φ)Dy⋅Dz⋅(1−cos(φ))−Dx⋅sin(φ)D2z⋅(1−cos(φ))+cos(φ)000⎞⎠⎟;

 scaling –
⎛⎝⎜s000s000s000⎞⎠⎟ where S∈(−∞,∞)/{
0};
 central symmetry –
⎛⎝⎜−1000−1000−1000⎞⎠⎟;
 axis symmetry – ⎛⎝⎜−1000−10001000⎞⎠⎟;
 plane symmetry – ⎛⎝⎜10001000−1000⎞⎠⎟.

<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 l1p1...lnpn of n≥0 integer pairs lipi(1≤i≤n). <flag> 0 is the indicator of the sequence end.
The sequence is interpreted as a composition Lp1l1⋅...⋅Lpnln where Lli is a location from li-th
<location record> in the section locations. <location record> numbering starts from 1.

Geometry
<geometry> =
<2D curves>
<3D curves>
<3D polygons>
<polygons on triangulations>
<surfaces>
<triangulations>;

3D curves
Example

Curves 13
1 0 0 0 0 0 1
1 0 0 3 -0 1 0
1 0 2 0 0 0 1
1 0 0 0 -0 1 0
1 1 0 0 0 0 1
1 1 0 3 0 1 0
1 1 2 0 0 0 1
1 1 0 0 -0 1 0
1 0 0 0 1 0 -0
1 0 0 3 1 0 -0
1 0 2 0 1 0 -0
1 0 2 3 1 0 -0
1 1 0 0 1 0 0

BNF-like Definition

<3D curves> = <3D curve header>


<_\n> <3D curve records>;

<3D curve header> = "Curves" <_>


<3D curve count>;

<3D curve count> = <int>;

<3D curve records> = <3D curve


record> ^ <3D curve count>;

<3D curve record> =


<3D curve record 1> |
<3D curve record 2> |
<3D curve record 3> |
<3D curve record 4> |
<3D curve record 5> |
<3D curve record 6> |
<3D curve record 7> |
<3D curve record 8> |
<3D curve record 9>;

Line - <3D curve record 1>

Example

1 1 0 3 0 1 0
BNF-like Definition

<3D curve record 1> = "1" <_> <3D


point> <_> <3D direction> <_\n>;

Description

<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:

C(u)=P+u⋅D,u∈(−∞,∞).

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: C(u)=(1,0,3)+u⋅(0,1,0).

Circle - <3D curve record 2>

Example

2 1 2 3 0 0 1 1 0 -0 -0 1 0 4

BNF-like Definition

<3D curve record 2> = "2" <_> <3D


circle center> <_> <3D circle N> <_>
<3D circle Dx> <_> <3D circle Dy> <_>
<3D circle radius> <_\n>;

<3D circle center> = <3D point>;

<3D circle N> = <3D direction>;

<3D circle Dx> = <3D direction>;

<3D circle Dy> = <3D direction>;

<3D circle radius> = <real>;

Description
<3D curve record 2> describes a circle. The circle data consist of a 3D point P, pairwise orthogonal
3D directions N, Dx and Dy 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:

C(u)=P+r⋅(cos(u)⋅Dx+sin(u)⋅Dy),u∈[o,2⋅π).

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 Dx=(1, 0 ,0) and Dy=(0, 1 ,0). The circle has a
radius r=4 and is defined by the following parametric
equation: C(u)=(1,2,3)+4⋅(cos(u)⋅(1,0,0)+sin(u)⋅(0,1,0)).

Ellipse - <3D curve record 3>

Example

3 1 2 3 0 0 1 1 0 -0 -0 1 0 5 4

BNF-like Definition

<3D curve record 3> = "3" <_> <3D


ellipse center> <_> <3D ellipse N> <_>
<3D ellipse Dmaj> <_> <3D ellipse
Dmin> <_> <3D ellipse Rmaj> <_> <3D
ellipse Rmin> <_\n>;

<3D ellipse center> = <3D point>;

<3D ellipse N> = <3D direction>;

<3D ellipse Dmaj> = <3D


direction>;

<3D ellipse Dmin> = <3D


direction>;

<3D ellipse Rmaj> = <real>;

<3D ellipse Rmin> = <real>;

Description
<3D curve record 3> describes an ellipse. The ellipse data consist of a 3D point P, pairwise
orthogonal 3D directions N, Dmaj and Dmin and non-negative reals rmaj and rmin so that rmin ≤ rmaj. The
ellipse has its center P, is located in plane with the normal N, has major and minor axis
directions Dmaj and Dmin, major and minor radii rmaj and rmin and is defined by the following parametric
equation:

C(u)=P+rmaj⋅cos(u)⋅Dmaj+rmin⋅sin(u)⋅Dmin,u∈[0,2⋅π).

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 Dmaj=(1, 0, 0) and Dmin=(0, 1, 0), major
and minor radii rmaj=5 and rmin=4 and is defined by the following parametric
equation: C(u)=(1,2,3)+5⋅cos(u)⋅(1,0,0)+4⋅sin(u)⋅(0,1,0).

Parabola - <3D curve record 4>

Example

4 1 2 3 0 0 1 1 0 -0 -0 1 0 16

BNF-like Definition

<3D curve record 4> = "4" <_> <3D


parabola origin> <_> <3D parabola N>
<_> <3D parabola Dx> <_> <3D parabola
Dy> <_> <3D parabola focal length>
<_\n>;

<3D parabola origin> = <3D point>;

<3D parabola N> = <3D direction>;

<3D parabola Dx> = <3D direction>;

<3D parabola Dy> = <3D direction>;

<3D parabola focal length> =


<real>;

Description
<3D curve record 4> describes a parabola. The parabola data consist of a 3D point P, pairwise
orthogonal 3D directions N, Dx and Dy 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:

C(u)=P+u24⋅f⋅Dx+u⋅Dy,u∈(−∞,∞)⇐f≠0;

C(u)=P+u⋅Dx,u∈(−∞,∞)⇐f=0(degeneratedcase).

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 Dx=(1, 0, 0) and Dy=(0, 1, 0). The
parabola has a focus length f=16 and is defined by the following parametric
equation: C(u)=(1,2,3)+u264⋅(1,0,0)+u⋅(0,1,0).

Hyperbola - <3D curve record 5>

Example

5 1 2 3 0 0 1 1 0 -0 -0 1 0 5 4

BNF-like Definition

<3D curve record 5> = "5" <_> <3D


hyperbola origin> <_> <3D hyperbola N>
<_> <3D hyperbola Dx> <_> <3D
hyperbola Dy> <_> <3D hyperbola Kx>
<_> <3D hyperbola Ky> <_\n>;

<3D hyperbola origin> = <3D


point>;

<3D hyperbola N> = <3D direction>;

<3D hyperbola Dx> = <3D


direction>;

<3D hyperbola Dy> = <3D


direction>;

<3D hyperbola Kx> = <real>;


<3D hyperbola Ky> = <real>;

Descripton

<3D curve record 5> describes a hyperbola. The hyperbola data consist of a 3D point P, pairwise
orthogonal 3D directions N, Dx and Dy and non-negative reals kx and ky. 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:

C(u)=P+kx⋅cosh(u)⋅Dx+ky⋅sinh(u)⋅Dy,u∈(−∞,∞).

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 Dx=(1, 0, 0), Dy=(0, 1, 0), kx=5 and ky=4.
The hyperbola is defined by the following parametric
equation: C(u)=(1,2,3)+5⋅cosh(u)⋅(1,0,0)+4⋅sinh(u)⋅(0,1,0).

Bezier Curve - <3D curve record 6>

Example

6 1 2 0 1 0 4 1 -2 0 5 2 3 0 6

BNF-like Definition

<3D curve record 6> = "6" <_> <3D


Bezier rational flag> <_> <3D Bezier
degree>
<3D Bezier weight poles> <_\n>;

<3D Bezier rational flag> =


<flag>;

<3D Bezier degree> = <int>;

3D Bezier weight poles> = (<_> <3D


Bezier weight pole>) ^ (<3D Bezier
degree> <+> "1");

<3D Bezier weight pole> = <3D


point> [<_> <real>];
Description

<3D curve record 6> describes a Bezier curve. The curve data consist of a rational r, a
degree m≤25 and weight poles.

The weight poles are m+1 3D points B0 ... Bm if the flag r is 0. The weight poles
are m+1 pairs B0h0 ... Bmhm if flag r is 1. Here Bi is a 3D point and hi is a positive
real (0≤i≤m). hi=1(0≤i≤m) if the flag r is 0.

The Bezier curve is defined by the following parametric equation:

C(u)=∑mi=0Bi⋅hi⋅Cim⋅ui⋅(1−u)m−i∑mi=0hi⋅Cim⋅ui⋅(1−u)m−i,u∈[0,1]

where 00≡1.

The example record is interpreted as a Bezier curve with a rational flag r=1, degree m=2 and weight
poles B0=(0, 1, 0), h0=4, B1=(1, -2, 0), h1=5 and B2=(2, 3, 0), h2=6. The Bezier curve is defined by the
following parametric equation:

C(u)=(0,1,0)⋅4⋅(1−u)2+(1,−2,0)⋅5⋅2⋅u⋅(1−u)+(2,3,0)⋅6⋅u2)4⋅(1−u)2+5⋅2⋅u⋅(1−u)+6⋅u2.

B-spline Curve - <3D curve record 7>

Example

7 1 0 1 3 5 0 1 0 4 1 -2 0 5
2 3 0 6
0 1 0.25 1 0.5 1 0.75 1 1 1

BNF-like Definition

<3D curve record 7> = "7" <_> <3D


B-spline rational flag> <_> "0" <_>
<3D B-spline degree> <_>
<3D B-spline pole count> <_> <3D
B-spline multiplicity knot count> <3D
B-spline weight poles>
<_\n> <3D B-spline multiplicity
knots> <_\n>;
<3D B-spline rational flag> =
<flag>;

<3D B-spline degree> = <int>;

<3D B-spline pole count> = <int>;

<3D B-spline multiplicity knot


count> = <int>;

<3D B-spline weight poles> = (<_>


<3D B-spline weight pole>) ^ <3D B-
spline pole count>;

<3D B-spline weight pole> = <3D


point> [<_> <real>];

<3D B-spline multiplicity knots> =


(<_> <3D B-spline multiplicity knot>)
^ <3D B-spline multiplicity knot
count>;

<3D B-spline multiplicity knot> =


<real> <_> <int>;

Description

<3D curve record 7> describes a B-spline curve. The curve data consist of a rational flag r, a
degree m≤25, pole count n≥2, multiplicity knot count k, weight poles and multiplicity knots.

The weight poles are n 3D points B1 ... Bn if the flag r is 0. The weight poles are n pairs B1h1 ...
Bnhn if the flag r is 1. Here Bi is a 3D point and hi is a positive real (1≤i≤n). hi=1(1≤i≤n) if the
flag r is 0.

The multiplicity knots are k pairs u1q1 ... ukqk. Here ui is a knot with a multiplicity qi≥1(1≤i≤k) so that

ui<ui+1(1≤i≤k−1),

q1≤m+1,qk≤m+1,qi≤m(2≤i≤k−1),∑i=1kqi=m+n+1.

The B-spline curve is defined by the following parametric equation:


C(u)=∑ni=1Bi⋅hi⋅Ni,m+1(u)∑ni=1hi⋅Ni,m+1(u),u∈[u1,uk]

where functions Ni,j have the following recursion definition by j:

Ni,1(u)={1⇐u¯i≤u≤u¯i+10⇐u<u¯i∨u¯i+1≤u,Ni,j(u)=(u−u¯i)⋅Ni,j−1(u)u¯i+j−1−u¯i+(u¯i+j−u)⋅Ni+1,
j−1(u)u¯i+j−u¯i+1,(2≤j≤m+1)

where

u¯i=uj,(1≤j≤k,∑l=1j−1ql+1≤i≤∑l=1jql).

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 B1=(0,1,0), h1=4, B2=(1,-2,0), h2=5
and B3=(2,3,0), h3=6, multiplicity
knots u1=0, q1=1, u2=0.25, q2=1, u3=0.5, q3=1, u4=0.75, q4=1 and u5=1, q5=1. The B-spline curve is
defined by the following parametric equation:

C(u)=(0,1,0)⋅4⋅N1,2(u)+(1,−2,0)⋅5⋅N2,2(u)+(2,3,0)⋅6⋅N3,2(u)4⋅N1,2(u)+5⋅N2,2(u)+6⋅N3,2(u).

Trimmed Curve - <3D curve record 8>

Example

8 4 -5
1 1 2 3 1 0 0

BNF-like Definition

<3D curve record 8> = "8" <_> <3D


trimmed curve u min> <_> <3D trimmed
curve u max> <_\n> <3D curve record>;

<3D trimmed curve u min> = <real>;

<3D trimmed curve u max> = <real>;

Description

<3D curve record 8> describes a trimmed curve. The trimmed curve data consist of
reals umin and umax and <3D curve record> so that umin < umax. The trimmed curve is a restriction of
the base curve B described in the record to the segment [umin,umax]⊆domain(B). The trimmed
curve is defined by the following parametric equation:

C(u)=B(u),u∈[umin,umax].

The example record is interpreted as a trimmed curve with umin=-4 and umax=5 for the base
curve B(u)=(1,2,3)+u⋅(1,0,0). The trimmed curve is defined by the following parametric
equation: C(u)=(1,2,3)+u⋅(1,0,0),u∈[−4,5].

Offset Curve - <3D curve record 9>

Example

9 2
0 1 0
1 1 2 3 1 0 0

BNF-like Definition

<3D curve record 9> = "9" <_> <3D


offset curve distance> <_\n>;
<3D offset curve direction> <_\n>;
<3D curve record>;

<3D offset curve distance> =


<real>;

<3D offset curve direction> = <3D


direction>;

Description

<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 [B′(u),D]≠0⃗ . The offset curve is
defined by the following parametric equation:

C(u)=B(u)+d⋅[B′(u),D]|[B′(u),D]|,u∈domain(B).
The example record is interpreted as an offset curve with a distance d=2, direction D=(0, 1, 0), base
curve B(u)=(1,2,3)+u⋅(1,0,0) and defined by the following parametric
equation: C(u)=(1,2,3)+u⋅(1,0,0)+2⋅(0,0,1).

Surfaces
Example

Surfaces 6
1 0 0 0 1 0 -0 0 0 1 0 -1 0
1 0 0 0 -0 1 0 0 0 1 1 0 -0
1 0 0 3 0 0 1 1 0 -0 -0 1 0
1 0 2 0 -0 1 0 0 0 1 1 0 -0
1 0 0 0 0 0 1 1 0 -0 -0 1 0
1 1 0 0 1 0 -0 0 0 1 0 -1 0

BNF-like Definition

<surfaces> = <surface header>


<_\n> <surface records>;

<surface header> = “Surfaces” <_>


<surface count>;

<surface records> = <surface


record> ^ <surface count>;

<surface record> =
<surface record 1> |
<surface record 2> |
<surface record 3> |
<surface record 4> |
<surface record 5> |
<surface record 6> |
<surface record 7> |
<surface record 8> |
<surface record 9> |
<surface record 10> |
<surface record 11>;
Plane - < surface record 1 >

Example

1 0 0 3 0 0 1 1 0 -0 -0 1 0

BNF-like Definition

<surface record 1> = "1" <_> <3D


point> (<_> <3D direction>) ^ 3 <_\n>;

Description

<surface record 1> describes a plane. The plane data consist of a 3D point P and pairwise
orthogonal 3D directions N, Du and Dv. The plane passes through the point P, has the normal N and
is defined by the following parametric equation:

S(u,v)=P+u⋅Du+v⋅Dv,(u,v)∈(−∞,∞)×(−∞,∞).

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: S(u,v)=(0,0,3)+u⋅(1,0,0)+v⋅(0,1,0).

Cylinder - < surface record 2 >

Example

2 1 2 3 0 0 1 1 0 -0 -0 1 0 4

BNF-like Definition

<surface record 2> = "2" <_> <3D


point> (<_> <3D direction>) ^ 3 <_>
<real> <_\n>;

Description

<surface record 2> describes a cylinder. The cylinder data consist of a 3D point P, pairwise
orthogonal 3D directions Dv, DX and DY and a non-negative real r. The cylinder axis passes through
the point P and has the direction Dv. The cylinder has the radius r and is defined by the following
parametric equation:

S(u,v)=P+r⋅(cos(u)⋅Dx+sin(u)⋅Dy)+v⋅Dv,(u,v)∈[0,2⋅π)×(−∞,∞).

The example record is interpreted as a cylinder which axis passes through a point P=(1, 2, 3) and
has a direction Dv=(0, 0, 1). Directions for the cylinder are DX=(1,0,0) and DY=(0,1,0). The cylinder
has a radius r=4 and is defined by the following parametric
equation: S(u,v)=(1,2,3)+4⋅(cos(u)⋅DX+sin(u)⋅DY)+v⋅Dv.

Cone - < surface record 3 >

Example

3 1 2 3 0 0 1 1 0 -0 -0 1 0 4
0.75

BNF-like Definition

<surface record 3> = "3" <_> <3D


point> (<_> <3D direction>) ^ 3 (<_>
<real>) ^ 2 <_\n>;

Description

<surface record 3> describes a cone. The cone data consist of a 3D point P, pairwise orthogonal 3D
directions DZ, DX and DY, a non-negative real r and a real φ∈(−π/2,π/2)/{0}. The cone axis passes
through the point P and has the direction DZ. The plane which passes through the point P and is
parallel to directions DX and DY 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 −sgn(φ)⋅DZ. The cone has
a half-angle |φ| and is defined by the following parametric equation:

S(u,v)=P+(r+v⋅sin(φ))⋅(cos(u)⋅DX+sin(u)⋅DY)+v⋅cos(φ)⋅DZ,(u,v)∈[0,2⋅π)×(−∞,∞).

The example record is interpreted as a cone with an axis which passes through a point P=(1, 2,
3) and has a direction DZ=(0, 0, 1). Other cone data are DX=(1, 0, 0), DY=(0, 1, 0), r=4 and φ=0.75.
The cone is defined by the following parametric equation:

S(u,v)=(1,2,3)+(4+v⋅sin(0.75))⋅(cos(u)⋅(1,0,0)+sin(u)⋅(0,1,0))+v⋅cos(0.75)⋅(0,0,1).
Sphere - < surface record 4 >

Example

4 1 2 3 0 0 1 1 0 -0 -0 1 0 4

BNF-like Definition

<surface record 4> = "4" <_> <3D


point> (<_> <3D direction>) ^ 3 <_>
<real> <_\n>;

Description

<surface record 4> describes a sphere. The sphere data consist of a 3D point P, pairwise orthogonal
3D directions DZ, DX and DY and a non-negative real r. The sphere has the center P, radius r and is
defined by the following parametric equation:

S(u,v)=P+r⋅cos(v)⋅(cos(u)⋅Dx+sin(u)⋅Dy)+r⋅sin(v)⋅DZ,(u,v)∈[0,2⋅π)×[−π/2,π/2].

The example record is interpreted as a sphere with its center P=(1, 2, 3). Directions for the sphere
are DZ=(0, 0, 1), DX=(1, 0, 0) and DY=(0, 1, 0). The sphere has a radius r=4 and is defined by the
following parametric equation:

S(u,v)=(1,2,3)+4⋅cos(v)⋅(cos(u)⋅(1,0,0)+sin(u)⋅(0,1,0))+4⋅sin(v)⋅(0,0,1).

Torus - < surface record 5 >

Example

5 1 2 3 0 0 1 1 0 -0 -0 1 0 8 4

BNF-like Definition

<surface record 5> = "5" <_> <3D


point> (<_> <3D direction>) ^ 3 (<_>
<real>) ^ 2 <_\n>;

Description
<surface record 5> describes a torus. The torus data consist of a 3D point P, pairwise orthogonal 3D
directions DZ, DX and DY and non-negative reals r1 and r2. The torus axis passes through the
point P and has the direction DZ. r1 is the distance from the torus circle center to the axis. The torus
circle has the radius r2. The torus is defined by the following parametric equation:

S(u,v)=P+(r1+r2⋅cos(v))⋅(cos(u)⋅Dx+sin(u)⋅Dy)+r2⋅sin(v)⋅DZ,(u,v)∈[0,2⋅π)×[0,2⋅π).

The example record is interpreted as a torus with an axis which passes through a point P=(1, 2,
3) and has a direction DZ=(0, 0, 1). DX=(1, 0, 0), DY=(0, 1, 0), r1=8 and r2=4 for the torus. The torus is
defined by the following parametric equation:

S(u,v)=(1,2,3)+(8+4⋅cos(v))⋅(cos(u)⋅(1,0,0)+sin(u)⋅(0,1,0))+4⋅sin(v)⋅(0,0,1).

Linear Extrusion - < surface record 6 >

Example

6 0 0.6 0.8
2 1 2 3 0 0 1 1 0 -0 -0 1 0 4

BNF-like Definition

<surface record 6> = "6" <_> <3D


direction> <_\n> <3D curve record>;

Description

<surface record 6> describes a linear extrusion surface. The surface data consist of a 3D
direction Dv and a <3D curve record>. The linear extrusion surface has the direction Dv, the base
curve C described in the record and is defined by the following parametric equation:

S(u,v)=C(u)+v⋅Dv,(u,v)∈domain(C)×(−∞,∞).

The example record is interpreted as a linear extrusion surface with a direction Dv=(0, 0.6, 0.8). The
base curve is a circle for the surface. The surface is defined by the following parametric equation:

S(u,v)=(1,2,3)+4⋅(cos(u)⋅(1,0,0)+sin(u)⋅(0,1,0))+v⋅(0,0.6,0.8),(u,v)∈[0,2⋅π)×(−∞,∞).

Revolution Surface - < surface record 7 >

Example
7 -4 0 3 0 1 0
2 1 2 3 0 0 1 1 0 -0 -0 1 0 4

BNF-like Definition

<surface record 7> = "7" <_> <3D


point> <_> <3D direction> <_\n> <3D
curve record>;

Description

<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:

S(u,v)=P+VD(v)+cos(u)⋅(V(v)−VD(v))+sin(u)⋅[D,V(v)],(u,v)∈[0,2⋅π)×domain(C)

where V(v)=C(v)−P,VD(v)=(D,V(v))⋅D.

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:

S(u,v)=(−4,0,3)+VD(v)+cos(u)⋅(V(v)−VD(v))+sin(u)⋅[(0,1,0),V(v)],(u,v)∈[0,2⋅π)×[0,2⋅π)

where V(v)=(5,2,0)+4⋅(cos(v)⋅(1,0,0)+sin(v)⋅(0,1,0)),VD(v)=((0,1,0),V(v))⋅(0,1,0).

Bezier Surface - < surface record 8 >

Example

8 1 1 2 1 0 0 1 7 1 0 -4 10
0 1 -2 8 1 1 5 11
0 2 3 9 1 2 6 12

BNF-like Definition

<surface record 8> = "8" <_>


<Bezier surface u rational flag> <_>
<Bezier surface v rational flag> <_>
<Bezier surface u degree> <_> <Bezier
surface v degree> <_>
<Bezier surface weight poles>;

<Bezier surface u rational flag> =


<flag>;

<Bezier surface v rational flag> =


<flag>;

<Bezier surface u degree> = <int>;

<Bezier surface v degree> = <int>;

<Bezier surface weight poles> =


(<Bezier surface weight pole
group> <_\n>) ^ (<Bezier surface u
degree> <+> "1");

<Bezier surface weight pole group>


= <Bezier surface weight pole>
(<_> <Bezier surface weight pole>)
^ <Bezier surface v degree>;

<Bezier surface weight pole> = <3D


point> [<_> <real>];

Description

<surface record 8> describes a Bezier surface. The surface data consist of a u rational flag ru, v
rational flag rv, u degree mu≤25, v degree mv≤25 and weight poles.

The weight poles are (mu+1)⋅(mv+1) 3D points Bi,j((i,j)∈{0,...,mu}×{0,...,mv}) if ru+rv=0. The


weight poles are (mu+1)⋅(mv+1) pairs Bi,jhi,j((i,j)∈{0,...,mu}×{0,...,mv}) if ru+rv≠0. Here Bi,j is a
3D point and hi,j is a positive
real ((i,j)∈{0,...,mu}×{0,...,mv}). hi,j=1((i,j)∈{0,...,mu}×{0,...,mv}) if ru+rv=0.

The Bezier surface is defined by the following parametric equation:


S(u,v)=∑mui=0∑mvj=0Bi,j⋅hi,j⋅Cimu⋅ui⋅(1−u)mu−i⋅Cjmv⋅vj⋅(1−v)mv−j∑mui=0∑mvj=0hi,j⋅Cimu⋅ui⋅(1−u)mu−i
⋅Cjmv⋅vj⋅(1−v)mv−j,(u,v)∈[0,1]×[0,1]

where 00≡1.

The example record is interpreted as a Bezier surface with a u rational flag ru=1, v rational flag rv=1,
u degree mu=2, v degree mv=1, weight poles B0,0=(0, 0, 1), h0,0=7, B0,1=(1, 0, -4), h0,1=10, B1,0=(0, 1,
-2), h1,0=8, B1,1=(1, 1, 5), h1,1=11, B2,0=(0, 2, 3), h2,0=9 and B2,1=(1, 2, 6), h2,1=12. The surface is
defined by the following parametric equation:

S(u,v)=[(0,0,1)⋅7⋅(1−u)2⋅(1−v)+(1,0,−4)⋅10⋅(1−u)2⋅v+(0,1,−2)⋅8⋅2⋅u⋅(1−u)⋅(1−v)+(1,1,5)⋅11⋅2
⋅u⋅(1−u)⋅v+(0,2,3)⋅9⋅u2⋅(1−v)+(1,2,6)⋅12⋅u2⋅v]÷[7⋅(1−u)2⋅(1−v)+10⋅(1−u)2⋅v+8⋅2⋅u⋅(1−u)⋅(1−
v)+11⋅2⋅u⋅(1−u)⋅v+9⋅u2⋅(1−v)+12⋅u2⋅v]

B-spline Surface - < surface record 9 >

Example

9 1 1 0 0 1 1 3 2 5 4 0 0 1 7 1
0 -4 10
0 1 -2 8 1 1 5 11
0 2 3 9 1 2 6 12

0 1
0.25 1
0.5 1
0.75 1
1 1

0 1
0.3 1
0.7 1
1 1

BNF-like Definition

<surface record 9> = "9" <_> <B-


spline surface u rational flag> <_>
<B-spline surface v rational flag>
<_> "0" <_> "0" <_> <B-spline surface
u degree> <_>
<B-spline surface v degree> <_>
<B-spline surface u pole count> <_>
<B-spline surface v pole count>
<_> <B-spline surface u multiplicity
knot count> <_>
<B-spline surface v multiplicity
knot count> <_> <B-spline surface
weight poles> <_\n>
<B-spline surface u multiplicity
knots> <_\n> <B-spline surface v
multiplicity knots>;

<B-spline surface u rational flag>


= <flag>;

<B-spline surface v rational flag>


= <flag>;

<B-spline surface u degree> =


<int>;

<B-spline surface v degree> =


<int>;

<B-spline surface u pole count> =


<int>;

<B-spline surface v pole count> =


<int>;

<B-spline surface u multiplicity


knot count> = <int>;

<B-spline surface v multiplicity


knot count> = <int>;

<B-spline surface weight poles> =


(<B-spline surface weight pole
group> <_\n>) ^ <B-spline surface u
pole count>;

<B-spline surface weight pole


group> =
(<B-spline surface weight pole>
<_>) ^ <B-spline surface v pole
count>;

<B-spline surface weight pole> =


<3D point> [<_> <real>];

<B-spline surface u multiplicity


knots> =
(<B-spline surface u multiplicity
knot> <_\n>) ^ <B-spline surface u
multiplicity knot count>;

<B-spline surface u multiplicity


knot> = <real> <_> <int>;

<B-spline surface v multiplicity


knots> =
(<B-spline surface v multiplicity
knot> <_\n>) ^ <B-spline surface v
multiplicity knot count>;

<B-spline surface v multiplicity


knot> = <real> <_> <int>;

Description

<surface record 9> describes a B-spline surface. The surface data consist of a u rational flag ru, v
rational flag rv, u degree mu≤25, v degree mv≤25, u pole count nu≥2, v pole count nv≥2, u
multiplicity knot count ku, v multiplicity knot count kv, weight poles, u multiplicity knots, v multiplicity
knots.

The weight poles are nu⋅nv 3D points Bi,j((i,j)∈{1,...,nu}×{1,...,nv}) if ru+rv=0. The weight poles
are nu⋅nv pairs Bi,jhi,j((i,j)∈{1,...,nu}×{1,...,nv}) if ru+rv≠0. Here Bi,j is a 3D point and hi,j is a
positive real ((i,j)∈{1,...,nu}×{1,...,nv}). hi,j=1((i,j)∈{1,...,nu}×{1,...,nv}) if ru+rv=0.
The u multiplicity knots are ku pairs u1q1...ukuqku. Here ui is a knot with multiplicity qi≥1(1≤i≤ku) so
that

ui<ui+1(1≤i≤ku−1),q1≤mu+1,qku≤mu+1,qi≤mu(2≤i≤ku−1),∑i=1kuqi=mu+nu+1.

The v multiplicity knots are kv pairs v1t1...vkvtkv. Here vj is a knot with multiplicity ti≥1(1≤i≤kv) so
that

vj<vj+1(1≤j≤kv−1),t1≤mv+1,tkv≤mv+1,tj≤mv(2≤j≤kv−1),∑j=1kvtj=mv+nv+1.

The B-spline surface is defined by the following parametric equation:

S(u,v)=∑nui=1∑nvj=1Bi,j⋅hi,j⋅Ni,mu+1(u)⋅Mj,mv+1(v)∑nui=1∑nvj=1hi,j⋅Ni,mu+1(u)⋅Mj,mv+1(v),(u,v)∈[u1,
uku]×[v1,vkv]

where functions Ni,j and Mi,j have the following recursion definition by j:

Ni,1(u)={1⇐u¯i≤u≤u¯i+10⇐u<u¯i∨u¯i+1≤u,Ni,j(u)=(u−u¯i)⋅Ni,j−1(u)u¯i+j−1−u¯i+(u¯i+j−u)⋅Ni+1,
j−1(u)u¯i+j−u¯i+1,(2≤j≤mu+1);Mi,1(v)={1⇐v¯i≤v≤v¯i+10⇐v<v¯i∨v¯i+1≤v,Mi,j(v)=(v−v¯i)⋅Mi,j
−1(v)v¯i+j−1−v¯i+(v¯i+j−v)⋅Mi+1,j−1(v)v¯i+j−v¯i+1,(2≤j≤mv+1);

where

u¯i=uj(1≤j≤ku,∑l=1j−1ql≤i≤∑l=1jql),v¯i=vj(1≤j≤kv,∑l=1j−1tl≤i≤∑l=1jtl);

The example record is interpreted as a B-spline surface with a u rational flag ru=1, v rational
flag rv=1, u degree mu=1, v degree mv=1, u pole count nu=3, v pole count nv=2, u multiplicity knot
count ku=5, v multiplicity knot count kv=4, weight poles B1,1=(0, 0, 1), h1,1=7, B1,2=(1, 0, -
4), h1,2=10, B2,1=(0, 1, -2), h2,1=8, B2,2=(1, 1, 5), h2,2=11, B3,1=(0, 2, 3), h3,1=9 and B3,2=(1, 2,
6), h3,2=12, u multiplicity
knots u1=0, q1=1, u2=0.25, q2=1, u3=0.5, q3=1, u4=0.75, q4=1 and u5=1, q5=1, v multiplicity
knots v1=0, r1=1, v2=0.3, r2=1, v3=0.7, r3=1 and v4=1, r4=1. The B-spline surface is defined by the
following parametric equation:

S(u,v)=[(0,0,1)⋅7⋅N1,2(u)⋅M1,2(v)+(1,0,−4)⋅10⋅N1,2(u)⋅M2,2(v)+(0,1,−2)⋅8⋅N2,2(u)⋅M1,2(v)+(1,
1,5)⋅11⋅N2,2(u)⋅M2,2(v)+(0,2,3)⋅9⋅N3,2(u)⋅M1,2(v)+(1,2,6)⋅12⋅N3,2(u)⋅M2,2(v)]÷[7⋅N1,2(u)⋅M1,2
(v)+10⋅N1,2(u)⋅M2,2(v)+8⋅N2,2(u)⋅M1,2(v)+11⋅N2,2(u)⋅M2,2(v)+9⋅N3,2(u)⋅M1,2(v)+12⋅N3,2(u)⋅
M2,2(v)]

Rectangular Trim Surface - < surface record 10 >


Example

10 -1 2 -3 4
1 1 2 3 0 0 1 1 0 -0 -0 1 0

BNF-like Definition

<surface record 10> = "10" <_>


<trim surface u min> <_> <trim surface
u max> <_>
<trim surface v min> <_> <trim
surface v max> <_\n> <surface record>;

<trim surface u min> = <real>;

<trim surface u max> = <real>;

<trim surface v min> = <real>;

<trim surface v max> = <real>;

Description

<surface record 10> describes a rectangular trim surface. The surface data consist of
reals umin, umax, vmin and vmax and a <surface record> so that umin < umax and vmin < vmax. The
rectangular trim surface is a restriction of the base surface B described in the record to the
set [umin,umax]×[vmin,vmax]⊆domain(B). The rectangular trim surface is defined by the following
parametric equation:

S(u,v)=B(u,v),(u,v)∈[umin,umax]×[vmin,vmax].

The example record is interpreted as a rectangular trim surface to the set [-1, 2]x[-3, 4] for the base
surface B(u,v)=(1,2,3)+u⋅(1,0,0)+v⋅(0,1,0). The rectangular trim surface is defined by the
following parametric equation: B(u,v)=(1,2,3)+u⋅(1,0,0)+v⋅(0,1,0),(u,v)∈[−1,2]×[−3,4].

Offset Surface - < surface record 11 >

Example

11 -2
1 1 2 3 0 0 1 1 0 -0 -0 1 0

BNF-like Definition

<surface record 11> = "11" <_>


<surface record distance> <_\n>
<surface record>;

<surface record distance> =


<real>;

Description

<surface record 11> describes an offset surface. 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:

S(u,v)=B(u,v)+d⋅N(u,v),(u,v)∈domain(B).N(u,v)=[S′u(u,v),S′v(u,v)]

if [S′u(u,v),S′v(u,v)]≠0⃗ .

The example record is interpreted as an offset surface with a distance d=-2 and base
surface B(u,v)=(1,2,3)+u⋅(1,0,0)+v⋅(0,1,0). The offset surface is defined by the following
parametric equation: S(u,v)=(1,2,3)+u⋅(1,0,0)+v⋅(0,1,0)−2⋅(0,0,1).

2D curves
Example

Curve2ds 24
1 0 0 1 0
1 0 0 1 0
1 3 0 0 -1
1 0 0 0 1
1 0 -2 1 0
1 0 0 1 0
1 0 0 0 -1
1 0 0 0 1
1 0 0 1 0
1 0 1 1 0
1 3 0 0 -1
1 1 0 0 1
1 0 -2 1 0
1 0 1 1 0
1 0 0 0 -1
1 1 0 0 1
1 0 0 0 1
1 0 0 1 0
1 3 0 0 1
1 0 0 1 0
1 0 0 0 1
1 0 2 1 0
1 3 0 0 1
1 0 2 1 0

BNF-like Definition

<2D curves> = <2D curve header>


<_\n> <2D curve records>;

<2D curve header> = "Curve2ds" <_>


<2D curve count>;

<2D curve count> = <int>;

<2D curve records> = <2D curve


record> ^ <2D curve count>;

<2D curve record> =


<2D curve record 1> |
<2D curve record 2> |
<2D curve record 3> |
<2D curve record 4> |
<2D curve record 5> |
<2D curve record 6> |
<2D curve record 7> |
<2D curve record 8> |
<2D curve record 9>;

Line - <2D curve record 1>

Example

1 3 0 0 -1
@verbatim

**BNF-like Definition**

@verbatim
<2D curve record 1> = "1" <_> <2D
point> <_> <2D direction> <_\n>;

Description

<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:

C(u)=P+u⋅D,u∈(−∞,∞).

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: C(u)=(3,0)+u⋅(0,−1).

Circle - <2D curve record 2>

Example

2 1 2 1 0 -0 1 3

BNF-like Definition

<2D curve record 2> = "2" <_> <2D


circle center> <_> <2D circle Dx> <_>
<2D circle Dy> <_> <2D circle radius>
<_\n>;

<2D circle center> = <2D point>;

<2D circle Dx> = <2D direction>;

<2D circle Dy> = <2D direction>;

<2D circle radius> = <real>;

Description

<2D curve record 2> describes a circle. The circle data consist of a 2D point P, orthogonal 2D
directions Dx and Dy and a non-negative real r. The circle has a center P. The circle plane is parallel
to directions Dx and Dy. The circle has a radius r and is defined by the following parametric equation:

C(u)=P+r⋅(cos(u)⋅Dx+sin(u)⋅Dy),u∈[0,2⋅π).

The example record is interpreted as a circle which has a center P=(1,2). The circle plane is parallel
to directions Dx=(1,0) and Dy=(0,1). The circle has a radius r=3 and is defined by the following
parametric equation: C(u)=(1,2)+3⋅(cos(u)⋅(1,0)+sin(u)⋅(0,1)).

Ellipse - <2D curve record 3>

Example

3 1 2 1 0 -0 1 4 3
@verbatim

**BNF-like Definition**

@verbatim
<2D curve record 3> = "3" <_> <2D
ellipse center> <_> <2D ellipse Dmaj>
<_>
<2D ellipse Dmin> <_> <2D ellipse
Rmaj> <_> <2D ellipse Rmin> <_\n>;

<2D ellipse center> = <2D point>;


<2D ellipse Dmaj> = <2D
direction>;

<2D ellipse Dmin> = <2D


direction>;

<2D ellipse Rmaj> = <real>;

<2D ellipse Rmin> = <real>;

Description

<2D curve record 3> describes an ellipse. The ellipse data are 2D point P, orthogonal 2D
directions Dmaj and Dmin and non-negative reals rmaj and rmin that rmaj ≤ rmin. The ellipse has a
center P, major and minor axis directions Dmaj and Dmin, major and minor radii rmaj and rmin and is
defined by the following parametric equation:

C(u)=P+rmaj⋅cos(u)⋅Dmaj+rmin⋅sin(u)⋅Dmin,u∈[0,2⋅π).

The example record is interpreted as an ellipse which has a center P=(1,2), major and minor axis
directions Dmaj=(1,0) and Dmin=(0,1), major and minor radii rmaj=4 and rmin=3 and is defined by the
following parametric equation: C(u)=(1,2)+4⋅cos(u)⋅(1,0)+3⋅sin(u)⋅(0,1).

Parabola - <2D curve record 4>

Example

4 1 2 1 0 -0 1 16

BNF-like Definition

<2D curve record 4> = "4" <_> <2D


parabola origin> <_> <2D parabola Dx>
<_>
<2D parabola Dy> <_> <2D parabola
focal length> <_\n>;

<2D parabola origin> = <2D point>;


<2D parabola Dx> = <2D direction>;

<2D parabola Dy> = <2D direction>;

<2D parabola focal length> =


<real>;

Description

<2D curve record 4> describes a parabola. The parabola data consist of a 2D point P, orthogonal 2D
directions Dx and Dy and a non-negative real f. The parabola coordinate system has its origin P and
axis directions Dx and Dy. The parabola has a focus length f and is defined by the following
parametric equation:

C(u)=P+u24⋅f⋅Dx+u⋅Dy,u∈(−∞,∞)⇐f≠0;C(u)=P+u⋅Dx,u∈(−∞,∞)⇐f=0(degeneratedcase).

The example record is interpreted as a parabola in plane which passes through a point P=(1,2) and
is parallel to directions Dx=(1,0) and Dy=(0,1). The parabola has a focus length f=16 and is defined
by the following parametric equation: C(u)=(1,2)+u264⋅(1,0)+u⋅(0,1).

Hyperbola - <2D curve record 5>

Example

5 1 2 1 0 -0 1 3 4

BNF-like Definition

<2D curve record 5> = "5" <_> <2D


hyperbola origin> <_> <2D hyperbola
Dx> <_>
<2D hyperbola Dy> <_> <2D
hyperbola Kx> <_> <2D hyperbola Ky>
<_\n>;

<2D hyperbola origin> = <2D


point>;

<2D hyperbola Dx> = <2D


direction>;
<2D hyperbola Dy> = <2D
direction>;

<2D hyperbola Kx> = <real>;

<2D hyperbola Ky> = <real>;

Description

<2D curve record 5> describes a hyperbola. The hyperbola data consist of a 2D point P, orthogonal
2D directions Dx and Dy and non-negative reals kx and ky. The hyperbola coordinate system has
origin P and axis directions Dx and Dy. The hyperbola is defined by the following parametric
equation:

C(u)=P+kx⋅cosh(u)Dx+ky⋅sinh(u)⋅Dy,u∈(−∞,∞).

The example record is interpreted as a hyperbola with coordinate system which has
origin P=(1,2) and axis directions Dx=(1,0) and Dy=(0,1). Other data for the hyperbola
are kx=5 and ky=4. The hyperbola is defined by the following parametric
equation: C(u)=(1,2)+3⋅cosh(u)⋅(1,0)+4⋅sinh(u)⋅(0,1).

Bezier Curve - <2D curve record 6>

Example

6 1 2 0 1 4 1 -2 5 2 3 6

BNF-like Definition

<2D curve record 6> = "6" <_> <2D


Bezier rational flag> <_> <2D Bezier
degree>
<2D Bezier weight poles> <_\n>;

<2D Bezier rational flag> =


<flag>;

<2D Bezier degree> = <int>;


<2D Bezier weight poles> = (<_>
<2D Bezier weight pole>) ^ (<2D Bezier
degree> <+> “1”);

<2D Bezier weight pole> = <2D


point> [<_> <real>];

Description

<2D curve record 6> describes a Bezier curve. The curve data consist of a rational flag r, a
degree m≤25 and weight poles.

The weight poles are m+1 2D points B0 ... Bm if the flag r is 0. The weight poles
are m+1 pairs B0h0 ... Bmhm if the flag r is 1. Here Bi is a 2D point and hi is a positive
real (0≤i≤m). hi=1 (0≤i≤m) if the flag r is 0.

The Bezier curve is defined by the following parametric equation:

C(u)=∑mi=0Bi⋅hi⋅Cim⋅ui⋅(1−u)m−i∑mi=0hi⋅Cim⋅ui⋅(1−u)m−i,u∈[0,1]

where 00≡1.

The example record is interpreted as a Bezier curve with a rational flag r=1, a degree m=2 and
weight poles B0=(0,1), h0=4, B1=(1,-2), h1=5 and B2=(2,3), h2=6. The Bezier curve is defined by the
following parametric equation:

C(u)=(0,1)⋅4⋅(1−u)2+(1,−2)⋅5⋅2⋅u⋅(1−u)+(2,3)⋅6⋅u24⋅(1−u)2+5⋅2⋅u⋅(1−u)+6⋅u2.

B-spline Curve - <2D curve record 7>

Example

7 1 0 1 3 5 0 1 4 1 -2 5 2 3 6
0 1 0.25 1 0.5 1 0.75 1 1 1

BNF-like Definition

<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>;

<2D B-spline rational flag> =


<flag>;

<2D B-spline degree> = <int>;

<2D B-spline pole count> = <int>;

<2D B-spline multiplicity knot


count> = <int>;

<2D B-spline weight poles> = <2D


B-spline weight pole> ^ <2D B-spline
pole count>;

<2D B-spline weight pole> = <_>


<2D point> [<_> <real>];

<2D B-spline multiplicity knots> =


<2D B-spline multiplicity knot> ^
<2D B-spline multiplicity knot count>;

<2D B-spline multiplicity knot> =


<_> <real> <_> <int>;

Description

<2D curve record 7> describes a B-spline curve. The curve data consist of a rational flag r, a
degree m≤25, a pole count n≥2, a multiplicity knot count k, weight poles and multiplicity knots.

The weight poles are n 2D points B1 ... Bn if the flag r is 0. The weight poles are n pairs B1h1 ...
Bnhn if the flag r is 1. Here Bi is a 2D point and hi is a positive real (1≤i≤n). hi=1 (1≤i≤n) if the
flag r is 0.

The multiplicity knots are k pairs u1q1 ... ukqk. Here ui is a knot with multiplicity qi≥1(1≤i≤k) so that

ui<ui+1(1≤i≤k−1),q1≤m+1,qk≤m+1,qi≤m(2≤i≤k−1),∑i=1kqi=m+n+1.
The B-spline curve is defined by the following parametric equation:

C(u)=∑ni=1Bi⋅hi⋅Ni,m+1(u)∑ni=1hi⋅Ni,m+1(u),u∈[u1,uk]

where functions Ni,j have the following recursion definition by j

Ni,1(u)={1⇐u¯i≤u≤u¯i+10⇐u<u¯i∨u¯i+1≤u,Ni,j(u)=(u−u¯i)⋅Ni,j−1(u)u¯i+j−1−u¯i+(u¯i+j−u)⋅Ni+1,
j−1(u)u¯i+j−u¯i+1,(2≤j≤m+1)

where

u¯i=uj(1≤j≤k,∑l=1j−1ql+1≤i≤∑l=1jql).

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 B1=(0,1), h1=4, B2=(1,-
2), h2=5 and B3=(2,3), h3=6 and multiplicity
knots u1=0, q1=1, u2=0.25, q2=1, u3=0.5, q3=1, u4=0.75, q4=1 and u5=1, q5=1. The B-spline curve is
defined by the following parametric equation:

C(u)=(0,1)⋅4⋅N1,2(u)+(1,−2)⋅5⋅N2,2(u)+(2,3)⋅6⋅N3,2(u)4⋅N1,2(u)+5⋅N2,2(u)+6⋅N3,2(u).

Trimmed Curve - <2D curve record 8>

Example

8 -4 5
1 1 2 1 0

BNF-like Definition

<2D curve record 8> = "8" <_> <2D


trimmed curve u min> <_> <2D trimmed
curve u max> <_\n>
<2D curve record>;

<2D trimmed curve u min> = <real>;

<2D trimmed curve u max> = <real>;

Description
<2D curve record 8> describes a trimmed curve. The trimmed curve data consist of
reals umin and umax and a <2D curve record> so that umin < umax. The trimmed curve is a restriction of
the base curve B described in the record to the segment [umin,umax]⊆domain(B). The trimmed
curve is defined by the following parametric equation:

C(u)=B(u),u∈[umin,umax].

The example record is interpreted as a trimmed curve with umin=-4, umax=5 and base
curve B(u)=(1,2)+u⋅(1,0). The trimmed curve is defined by the following parametric
equation: C(u)=(1,2)+u⋅(1,0),u∈[−4,5].

Offset Curve - <2D curve record 9>

Example

9 2
1 1 2 1 0

BNF-like Definition

<2D curve record 9> = "9" <_> <2D


offset curve distance> <_\n> <2D curve
record>;

<2D offset curve distance> = <real>;

Description

<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 (B′Y(u),−B′X(u))≠0⃗ where B(u)=(B′X(u),B′Y(u)). The
offset curve is defined by the following parametric equation:

C(u)=B(u)+d⋅(B′Y(u),−B′X(u)),u∈domain(B).

The example record is interpreted as an offset curve with a distance d=2 and base
curve B(u)=(1,2)+u⋅(1,0) and is defined by the following parametric
equation: C(u)=(1,2)+u⋅(1,0)+2⋅(0,−1).

3D polygons
Example

Polygon3D 1
2 1
0.1
1 0 0 2 0 0
0 1

BNF-like Definition

<3D polygons> = <3D polygon


header> <_\n> <3D polygon records>;

<3D polygon header> = "Polygon3D"


<_> <3D polygon record count>;

<3D polygon records> = <3D polygon


record> ^ <3D polygon record count>;

<3D polygon record> =


<3D polygon node count> <_> <3D
polygon flag of parameter presence>
<_\n>
<3D polygon deflection> <_\n>
<3D polygon nodes> <_\n>
[<3D polygon parameters> <_\n>];

<3D polygon node count> = <int>;

<3D polygon flag of parameter


presence> = <flag>;

<3D polygon deflection> = <real>;

<3D polygon nodes> = (<3D polygon


node> <_>) ^ <3D polygon node count>;

<3D polygon node> = <3D point>;


<3D polygon u parameters> = (<3D
polygon u parameter> <_>) ^ <3D
polygon node count>;

<3D polygon u parameter> = <real>;

Description

<3D polygons> record describes a 3D polyline L which approximates a 3D curve C. The polyline
data consist of a node count m≥2, a parameter presence flag p, a deflection d≥0,
nodes Ni(1≤i≤m) and parameters ui(1≤i≤m). 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:

maxP∈CminQ∈L|Q−P|≤d.

The parameter ui(1≤i≤m) is the parameter of the node Ni on the curve C:

C(ui)=Ni.

The example record describes a polyline from m=2 nodes with a parameter presence flag p=1, a
deflection d=0.1, nodes N1=(1,0,0) and N2=(2,0,0) and parameters u1=0 and u2=1.

Triangulations
Example

Triangulations 6
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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

BNF-like Definition

<triangulations> = <triangulation
header> <_\n> <triangulation records>;

<triangulation header> =
"Triangulations" <_> <triangulation
count>;

<triangulation records> =
<triangulation record> ^
<triangulation count>;

<triangulation record> =
<triangulation node count> <_>
<triangulation triangle count> <_>
<triangulation parameter presence
flag> <_> <triangulation deflection>
<_\n>
<triangulation nodes> [<_>
<triangulation u v parameters>] <_>
<triangulation triangles> <_\n>;

<triangulation node count> =


<int>;

<triangulation triangle count> =


<int>;

<triangulation parameter presence


flag> = <flag>;

<triangulation deflection> =
<real>;
<triangulation nodes> =
(<triangulation node> <_>) ^
<triangulation node count>;

<triangulation node> = <3D point>;

<triangulation u v parameters> =
(<triangulation u v parameter
pair> <_>) ^ <triangulation node
count>;

<triangulation u v parameter pair>


= <real> <_> <real>;

<triangulation triangles> =
(<triangulation triangle> <_>) ^
<triangulation triangle count>;

<triangulation triangle> = <int>


<_> <int> <_> <int>.

Description

<triangulation record> describes a triangulation T which approximates a surface S. The triangulation


data consist of a node count m≥3, a triangle count k≥1, a parameter presence flag p, a
deflection d≥0, nodes Ni(1≤i≤m), parameter pairs uivi(1≤i≤m),
triangles nj,1nj,2nj,3(1≤j≤k,nj,l∈{1,...,m}(1≤l≤3)). The parameters are present only if p=1. The
deflection describes the triangulation deflection from the surface:

maxP∈SminQ∈T|Q−P|≤d.

The parameter pair uivi(1≤i≤m) describes the parameters of node Ni on the surface:

S(ui,vi)=Ni.

The triangle nj,1nj,2nj,3(1≤j≤k) is interpreted as a triangle of nodes Nnj,1Nnj,2 and Nnj,3 with circular
traversal of the nodes in the order Nnj,1Nnj,2 and Nnj,3. From any side of the triangulation T all its
triangles have the same direction of the node circular traversal: either clockwise or counterclockwise.

Triangulation record
4 2 1 0
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

describes a triangulation with m=4 nodes, k=2 triangles, parameter presence flag p=1,
deflection d=0, nodes N1=(0,0,0), N2=(0,0,3), N3=(0,2,3) and N4=(0,2,0), parameters (u1, v1)=(0,0),
(u2, v2)=(3,0), (u3, v3)=(3,-2) and (u4, v4)=(0,-2), and triangles (n1,1, n1,2, n1,3)=(2,4,3) and
(n2,1, n2,2, n2,3)=(2,1,4). From the point (1,0,0) ((-1,0,0)) the triangles have clockwise
(counterclockwise) direction of the node circular traversal.

Polygons on triangulations
Example

PolygonOnTriangulations 24
2 1 2
p 0.1 1 0 3
2 1 4
p 0.1 1 0 3
2 2 3
p 0.1 1 0 2
2 1 2
p 0.1 1 0 2
2 4 3
p 0.1 1 0 3
2 1 4
p 0.1 1 0 3
2 1 4
p 0.1 1 0 2
2 1 2
p 0.1 1 0 2
2 1 2
p 0.1 1 0 3
2 2 3
p 0.1 1 0 3
2 2 3
p 0.1 1 0 2
2 4 3
p 0.1 1 0 2
2 4 3
p 0.1 1 0 3
2 2 3
p 0.1 1 0 3
2 1 4
p 0.1 1 0 2
2 4 3
p 0.1 1 0 2
2 1 2
p 0.1 1 0 1
2 1 4
p 0.1 1 0 1
2 4 3
p 0.1 1 0 1
2 1 4
p 0.1 1 0 1
2 1 2
p 0.1 1 0 1
2 2 3
p 0.1 1 0 1
2 4 3
p 0.1 1 0 1
2 2 3
p 0.1 1 0 1

BNF-like Definition

<polygons on triangulations> =
<polygons on triangulations header>
<_\n>
<polygons on triangulations
records>;

<polygons on triangulations
header> =
"PolygonOnTriangulations" <_>
<polygons on triangulations record
count>;
<polygons on triangulations record
count> = <int>;

<polygons on triangulations
records> =
<polygons on triangulations
record> ^ <polygons on triangulations
record count>;

<polygons on triangulations
record> =
<polygons on triangulations node
count> <_> <polygons on triangulations
node numbers> <_\n>
"p" <_> <polygons on
triangulations deflection> <_>
<polygons on triangulations
parameter presence flag>
[<_> <polygons on triangulations u
parameters>] <_\n>;

<polygons on triangulations node


count> = <int>;

<polygons on triangulations node


numbers> =
<polygons on triangulations node
number> ^ <polygons on triangulations
node count>;

<polygons on triangulations node


number> = <int>;

<polygons on triangulations
deflection> = <real>;

<polygons on triangulations
parameter presence flag> = <flag>;
<polygons on triangulations u
parameters> =
(<polygons on triangulations u
parameter> <_>) ^ <polygons on
triangulations node count>;

<polygons on triangulations u
parameter> = <real>;

Description

<polygons on triangulations> describes a polyline L on a triangulation which approximates a


curve C. The polyline data consist of a node count m≥2, node numbers ni≥1, deflection d≥0, a
parameter presence flag p and parameters ui(1≤i≤m). The parameters are present only if p=1. The
deflection d describes the deflection of polyline L from the curve C:

maxP∈CminQ∈L|Q−P|≤d.

Parameter ui(1≤i≤m) is ni-th node C(ui) parameter on curve C.

Geometric Sense of a Curve


Geometric sense of curve C described above is determined by the direction of
parameter u increasing.

Shapes
An example of section shapes and a whole *.brep file are given in chapter 7 "Appendix".

BNF-like Definition

<shapes> = <shape header> <_\n>


<shape records> <_\n> <shape final
record>;

<shape header> = "TShapes" <_>


<shape count>;

<shape count> = <int>;


<shape records> = <shape record> ^
<shape count>;

<shape record> = <shape subrecord>


<_\n> <shape flag word> <_\n> <shape
subshapes> <_\n>;

<shape flag word> = <flag> ^ 7;

<shape subshapes> = (<shape


subshape> <_>)* "*";

<shape subshape> =
<shape subshape orientation>
<shape subshape number> <_> <shape
location number>;

<shape subshape orientation> = "+"


| "-" | "i" | "e";

<shape subshape number> = <int>;

<shape location number> = <int>;

<shape final record> = <shape


subshape>;

<shape subrecord> =
("Ve" <_\n> <vertex data> <_\n>) |
("Ed" <_\n> <edge data> <_\n>) |
("Wi" <_\n> <_\n>) |
("Fa" <_\n> <face data>) |
("Sh" <_\n> <_\n>) |
("So" <_\n> <_\n>) |
("CS" <_\n> <_\n>) |
("Co" <_\n> <_\n>);

Description
<shape flag word> f1f2f3f4f5f6f7 <flag>s fi(1≤i≤7) are interpreted as shape flags in the following
way:

 f1 – free;
 f2 – modified;
 f3 – IGNORED(version 1) \ checked (version 2);
 f4 – orientable;
 f5 – closed;
 f6 – infinite;
 f7 – convex.

The flags are used in a special way [1].

<shape subshape orientation> is interpreted in the following way:

 + – forward;
 - – reversed;
 i – internal;
 e – external.

<shape subshape orientation> is used in a special way [1].

<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.

<shape subrecord> types are interpreted in the following way:

 "Ve" – vertex;
 "Ed" – edge;
 "Wi" – wire;
 "Fa" – face;
 "Sh" – shell;
 "So" – solid;
 "CS" – compsolid;
 "Co" – compound.

<shape final record> determines the orientation and location for the whole model.

Common Terms
The terms below are used by <vertex data>, <edge data> and <face data>.

BNF-like Definition

<location number> = <int>;

<3D curve number> = <int>;

<surface number> = <int>;

<2D curve number> = <int>;

<3D polygon number> = <int>;

<triangulation number> = <int>;

<polygon on triangulation number>


= <int>;

<curve parameter minimal and


maximal values> = <real> <_> <real>;

<curve values for parameter


minimal and maximal values> =
real> <_> <real> <_> <real> <_>
<real>;

Description

<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.

<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.

<surface number> is the number of a <surface record> from subsection <surfaces> of section
<geometry>. <surface record> numbering starts from 1.

<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.
<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.

<triangulation number> is the number of a <triangulation record> from subsection <triangulations> of


section <geometry>. <triangulation record> numbering starts from 1.

<polygon on triangulation> number is the number of a <polygons on triangulations record> from


subsection <polygons on triangulations> of section <geometry>. <polygons on triangulations record>
numbering starts from 1.

<curve parameter minimal and maximal values> umin and umax are the curve
parameter u bounds: umin ≤ u ≤ umax.

<curve values for parameter minimal and maximal values> umin and umax are real
pairs xmin ymin and xmax ymax that (xmin, ymin)= C (umin) and (xmax, ymax)= C (umax) where C is a
parametric equation of the curve.

Vertex data
BNF-like Definition

<vertex data> = <vertex data


tolerance> <_\n> <vertex data 3D
representation> <_\n>
<vertex data representations>;

<vertex data tolerance> = <real>;

<vertex data 3D representation> =


<3D point>;

<vertex data representations> =


(<vertex data representation> <_\n>)*
"0 0";

<vertex data representation> =


<vertex data representation u
parameter> <_>
<vertex data representation data>
<_> <location number>;
<vertex data representation u
parameter> = <real>;

<vertex data representation data>


=
("1" <_> <vertex data
representation data 1>) |
("2" <_> <vertex data
representation data 2>) |
("3" <_> <vertex data
representation data 3>);

<vertex data representation data


1> = <3D curve number>;

<vertex data representation data


2> = <2D curve number> <_> <surface
number>;

<vertex data representation data


3> =
<vertex data representation v
parameter> <_> <surface number>;

<vertex data representation v


parameter> = <real>;

Description

The usage of <vertex data representation u parameter> U is described below.

<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.

<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.

<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.
<vertex data tolerance> t describes the maximum distance from the vertex V to the set R of
vertex V representations:

maxP∈R|P−V|≤t.

Edge data
BNF-like Definition

<edge data> = <_> <edge data


tolerance> <_> <edge data same
parameter flag> <_> edge data same
range flag> <_> <edge data degenerated
flag> <_\n> <edge data
representations>;

<edge data tolerance> = <real>;

<edge data same parameter flag> =


<flag>;

<edge data same range flag> =


<flag>;

<edge data degenerated flag> =


<flag>;

<edge data representations> =


(<edge data representation> <_\n>)*
"0";

<edge data representation> =


"1" <_> <edge data representation
data 1>
"2" <_> <edge data representation
data 2>
"3" <_> <edge data representation
data 3>
"4" <_> <edge data representation
data 4>
"5" <_> <edge data representation
data 5>
"6" <_> <edge data representation
data 6>
"7" <_> <edge data representation
data 7>;

<edge data representation data 1>


= <3D curve number> <_> <location
number> <_>
<curve parameter minimal and
maximal values>;

<edge data representation data 2>


= <2D curve number> <_> <surface
number> <_>
<location number> <_> <curve
parameter minimal and maximal values>
[<_\n> <curve values for parameter
minimal and maximal values>];

<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>];

<continuity order> = "C0" | "C1" |


"C2" | "C3" | "CN" | "G1" | "G2".

<edge data representation data 4>


=
<continuity order> (<_> <surface
number> <_> <location number>) ^ 2;

<edge data representation data 5>


= <3D polygon number> <_> <location
number>;
<edge data representation data 6>
=
<polygon on triangulation number>
<_> <triangulation number> <_>
<location number>;

<edge data representation data 7>


= (<polygon on triangulation number>
<_>) ^ 2
<triangulation number> <_>
<location number>;

Description

Flags <edge data same parameter flag>, <edge data same range flag> and <edge data degenerated
flag> are used in a special way [1].

<edge data representation data 1> describes a 3D curve.

<edge data representation data 2> describes a 2D curve on a surface. <curve values for parameter
minimal and maximal values> are used only in version 2.

<edge data representation data 3> describes a 2D curve on a closed surface. <curve values for
parameter minimal and maximal values> are used only in version 2.

<edge data representation data 5> describes a 3D polyline.

<edge data representation data 6> describes a polyline on a triangulation.

<edge data tolerance> t describes the maximum distance from the edge E to the set R of
edge E representations:

maxC∈RmaxP∈EminQ∈C|Q−P|≤t

Face data
BNF-like Definition

<face data> = <face data natural


restriction flag> <_> <face data
tolerance> <_> <surface number> <_>
<location number> <\n> ["2" <_>
<triangulation number>];

<face data natural restriction


flag> = <flag>;

<face data tolerance> = <real>;

Description

<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.

<face data tolerance> t describes the maximum distance from the face F to the surface S:

maxP∈FminQ∈S|Q−P|≤t

Flag <face data natural restriction flag> is used in a special way [1].

Appendix
This chapter contains a *.brep file example.

DBRep_DrawableShape

CASCADE Topology V1, (c) Matra-


Datavision
Locations 3
1
0 0
1 0
1 0
0 0
0 1
0 0
1
1 0
0 4
0 1
0 5
0 0
1 6
2 1 1 2 1 0
Curve2ds 24
1 0 0 1 0
1 0 0 1 0
1 3 0 0 -1
1 0 0 0 1
1 0 -2 1 0
1 0 0 1 0
1 0 0 0 -1
1 0 0 0 1
1 0 0 1 0
1 0 1 1 0
1 3 0 0 -1
1 1 0 0 1
1 0 -2 1 0
1 0 1 1 0
1 0 0 0 -1
1 1 0 0 1
1 0 0 0 1
1 0 0 1 0
1 3 0 0 1
1 0 0 1 0
1 0 0 0 1
1 0 2 1 0
1 3 0 0 1
1 0 2 1 0
Curves 13
1 0 0 0 0 0 1
1 0 0 3 -0 1 0
1 0 2 0 0 0 1
1 0 0 0 -0 1 0
1 1 0 0 0 0 1
1 1 0 3 0 1 0
1 1 2 0 0 0 1
1 1 0 0 -0 1 0
1 0 0 0 1 0 -0
1 0 0 3 1 0 -0
1 0 2 0 1 0 -0
1 0 2 3 1 0 -0
1 1 0 0 1 0 0
Polygon3D 1
2 1
0.1
1 0 0 2 0 0
0 1
PolygonOnTriangulations 24
2 1 2
p 0.1 1 0 3
2 1 4
p 0.1 1 0 3
2 2 3
p 0.1 1 0 2
2 1 2
p 0.1 1 0 2
2 4 3
p 0.1 1 0 3
2 1 4
p 0.1 1 0 3
2 1 4
p 0.1 1 0 2
2 1 2
p 0.1 1 0 2
2 1 2
p 0.1 1 0 3
2 2 3
p 0.1 1 0 3
2 2 3
p 0.1 1 0 2
2 4 3
p 0.1 1 0 2
2 4 3
p 0.1 1 0 3
2 2 3
p 0.1 1 0 3
2 1 4
p 0.1 1 0 2
2 4 3
p 0.1 1 0 2
2 1 2
p 0.1 1 0 1
2 1 4
p 0.1 1 0 1
2 4 3
p 0.1 1 0 1
2 1 4
p 0.1 1 0 1
2 1 2
p 0.1 1 0 1
2 2 3
p 0.1 1 0 1
2 4 3
p 0.1 1 0 1
2 2 3
p 0.1 1 0 1
Surfaces 6
1 0 0 0 1 0 -0 0 0 1 0 -1 0
1 0 0 0 -0 1 0 0 0 1 1 0 -0
1 0 0 3 0 0 1 1 0 -0 -0 1 0
1 0 2 0 -0 1 0 0 0 1 1 0 -0
1 0 0 0 0 0 1 1 0 -0 -0 1 0
1 1 0 0 1 0 -0 0 0 1 0 -1 0
Triangulations 6
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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
4 2 1 0
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

TShapes 39
Ve
1e-007
0 0 3
0 0

0101101
*
Ve
1e-007
0 0 0
0 0

0101101
*
Ed
1e-007 1 1 0
1 1 0 0 3
2 1 1 0 0 3
2 2 2 0 0 3
6 1 1 0
6 2 2 0
0

0101000
-39 0 +38 0 *
Ve
1e-007
0 2 3
0 0
0101101
*
Ed
1e-007 1 1 0
1 2 0 0 2
2 3 1 0 0 2
2 4 3 0 0 2
6 3 1 0
6 4 3 0
0

0101000
-36 0 +39 0 *
Ve
1e-007
0 2 0
0 0

0101101
*
Ed
1e-007 1 1 0
1 3 0 0 3
2 5 1 0 0 3
2 6 4 0 0 3
6 5 1 0
6 6 4 0
0

0101000
-36 0 +34 0 *
Ed
1e-007 1 1 0
1 4 0 0 2
2 7 1 0 0 2
2 8 5 0 0 2
6 7 1 0
6 8 5 0
0

0101000
-34 0 +38 0 *
Wi

0101000
-37 0 -35 0 +33 0 +32 0 *
Fa
0 1e-007 1 0
2 1
0101000
+31 0 *
Ve
1e-007
1 0 3
0 0

0101101
*
Ve
1e-007
1 0 0
0 0

0101101
*
Ed
1e-007 1 1 0
1 5 0 0 3
2 9 6 0 0 3
2 10 2 0 0 3
6 9 6 0
6 10 2 0
0

0101000
-29 0 +28 0 *
Ve
1e-007
1 2 3
0 0

0101101
*
Ed
1e-007 1 1 0
1 6 0 0 2
2 11 6 0 0 2
2 12 3 0 0 2
6 11 6 0
6 12 3 0
0

0101000
-26 0 +29 0 *
Ve
1e-007
1 2 0
0 0

0101101
*
Ed
1e-007 1 1 0
1 7 0 0 3
2 13 6 0 0 3
2 14 4 0 0 3
6 13 6 0
6 14 4 0
0

0101000
-26 0 +24 0 *
Ed
1e-007 1 1 0
1 8 0 0 2
2 15 6 0 0 2
2 16 5 0 0 2
6 15 6 0
6 16 5 0
0

0101000
-24 0 +28 0 *
Wi

0101000
-27 0 -25 0 +23 0 +22 0 *
Fa
0 1e-007 6 0
2 6
0101000
+21 0 *
Ed
1e-007 1 1 0
1 9 0 0 1
2 17 2 0 0 1
2 18 5 0 0 1
6 17 2 0
6 18 5 0
0

0101000
-28 0 +38 0 *
Ed
1e-007 1 1 0
1 10 0 0 1
2 19 2 0 0 1
2 20 3 0 0 1
6 19 2 0
6 20 3 0
0
0101000
-29 0 +39 0 *
Wi

0101000
-19 0 -27 0 +18 0 +37 0 *
Fa
0 1e-007 2 0
2 2
0101000
+17 0 *
Ed
1e-007 1 1 0
1 11 0 0 1
2 21 4 0 0 1
2 22 5 0 0 1
6 21 4 0
6 22 5 0
0

0101000
-24 0 +34 0 *
Ed
1e-007 1 1 0
1 12 0 0 1
2 23 4 0 0 1
2 24 3 0 0 1
6 23 4 0
6 24 3 0
0

0101000
-26 0 +36 0 *
Wi

0101000
-15 0 -23 0 +14 0 +33 0 *
Fa
0 1e-007 4 0
2 4
0101000
+13 0 *
Wi

0101000
-32 0 -15 0 +22 0 +19 0 *
Fa
0 1e-007 5 0
2 5
0101000
+11 0 *
Wi

0101000
-35 0 -14 0 +25 0 +18 0 *
Fa
0 1e-007 3 0
2 3
0101000
+9 0 *
Sh

0101100
-30 0 +20 0 -16 0 +12 0 -10 0 +8
0 *
So

0100000
+7 0 *
CS

0101000
+6 3 *
Ve
1e-007
1 0 0
0 0

0101101
*
Ve
1e-007
2 0 0
0 0

0101101
*
Ed
1e-007 1 1 0
1 13 0 0 1
5 1 0
0

0101000
+4 0 -3 0 *
Co

1100000
+5 0 +2 0 *

+1 0
0

Boundary representation
From Wikipedia, the free encyclopedia
Jump to navigationJump to search
Coachwork example generated using the B-Rep model. Notice that the surface areas are stitched together.

In solid modeling and computer-aided design, boundary representation—often abbreviated as B-


rep or BREP—is a method for representing shapes using the limits. A solid is represented as a
collection of connected surface elements, the boundary between solid and non-solid.

Contents

 1Overview
 2History
 3Standardization
 4See also
 5Further reading
 6External links

Overview[edit]
Boundary representation of models are composed of two parts: topology and geometry (surfaces,
curves and points). The main topological items are: faces, edges and vertices. A face is a bounded
portion of a surface; an edge is a bounded piece of a curve and a vertex lies at a point. Other
elements are the shell (a set of connected faces), the loop (a circuit of edges bounding a face)
and loop-edge links (also known as winged edge links or half-edges) which are used to create the
edge circuits. The edges are like the edges of a table, bounding a surface portion.[clarification needed]
Compared to the constructive solid geometry (CSG) representation, which uses only primitive
objects and Boolean operations to combine them, boundary representation is more flexible and has
a much richer operation set. In addition to the Boolean operations, B-rep has extrusion (or
sweeping), chamfer, blending, drafting, shelling, tweaking and other operations which make use of
these.

History[edit]
The basic method for BREP was developed independently in the early 1970s by both Ian C. Braid
in Cambridge (for CAD) and Bruce G. Baumgart at Stanford (for computer vision). Braid continued
his work with the research solid modeller BUILD which was the forerunner of many research and
commercial solid modelling systems. Braid worked on the commercial systems ROMULUS, the
forerunner of Parasolid, and on ACIS. Parasolid and ACIS are the basis for many of today's
commercial CAD systems.
Following Braid's work for solids, a Swedish team led by Professor Torsten Kjellberg, developed the
philosophy and methods for working with hybrid models, wire-frames, sheet objects and volumetric
models during the early 1980s. In Finland, Martti Mäntylä produced a solid modelling system called
GWB. In the USA Eastman and Weiler were also working on Boundary Representation and in Japan
Professor Fumihiko Kimura and his team at Tokyo University also produced their own B-rep
modelling system.
Initially CSG was used by several commercial systems because it was easier to implement. The
advent of reliable commercial B-rep kernel systems like Parasolid and ACIS, mentioned above, as
well as OpenCASCADE and C3D that were later developed, has led to widespread adoption of B-
rep for CAD.
Boundary representation is essentially a local representation connecting faces, edges and vertices.
An extension of this was to group sub-elements of the shape into logical units called geometric
features, or simply features. Pioneering work was done by Kyprianou in Cambridge also using the
BUILD system and continued and extended by Jared and others. Features are the basis of many
other developments, allowing high-level "geometric reasoning" about shape for comparison,
process-planning, manufacturing, etc.
Boundary representation has also been extended to allow special, non-solid model types called non-
manifold models. As described by Braid, normal solids found in nature have the property that, at
every point on the boundary, a small enough sphere around the point is divided into two pieces, one
inside and one outside the object.[citation needed] Non-manifold models break this rule. An important sub-
class of non-manifold models are sheet objects which are used to represent thin-plate objects and
integrate surface modelling into a solid modelling environment.

Standardization[edit]
In the world of data-exchange, STEP, the Standard for the Exchange of Product Model data also
defines some data models for boundary representations. The common generic topological and
geometric models are defined in ISO 10303-42 Geometric and topological representation. The
following Application Integrated Resources (AICs) define boundary models that are constraints of the
generic geometric and topological capabilities:

 ISO 10303-511 Topologically bounded surface, definition of an advanced face, that is a


bounded surface where the surface is of type elementary (plane, cylindrical, conical, spherical or
toroidal), or a swept surface, or b spline surface. The boundaries are defined by lines, conics,
polylines, surface curves, or b spline curves
 ISO 10303-514 Advanced boundary representation, a solid defining a volume with possible
voids that is composed by advanced faces
 ISO 10303-509 Manifold surface, a non intersecting area in 3D that is composed by advanced
faces
 ISO 10303-521 Manifold subsurface, a sub-area out of a manifold surface
 ISO 10303-508 Non-manifold surface, any kind of advanced face arrangement
 ISO 10303-513 Elementary boundary representation similar to ISO 10303-514, but restricted to
the elementary surfaces only
 ISO 10303-512 Faceted boundary representation a simplified surface model constructed by
planar surfaces only

See also[edit]
 B-spline
 Bezier curve
 Bezier surface
 Combinatorial maps
 Constructive solid geometry (CSG)
 Coons surface
 Function representation
 Geometric modeling kernel
 NURBS
 Solid modeling
 Spline
 Winged edge

Further reading[edit]
Further information about Boundary Representation can be found in a variety of papers and the
following books:

 Mäntylä, Martti (1988). An Introduction to Solid Modeling. Computer Science Press. ISBN 0-
88175-108-1.
 Chiyokura, H. (1988). Solid Modelling with DESIGNBASE. Addison-Wesley Publishing
Company. ISBN 0-201-19245-4.
 Stroud, Ian (2006). Boundary Representation Modelling Techniques. Springer. ISBN 1-84628-
312-4.
 Golovanov, Nikolay (2014). Geometric Modeling: The Mathematics of Shapes. CreateSpace
Independent Publishing Platform. ISBN 978-1497473195.

External links[edit]
 OpenCascade - an open source library for BRep solid modeling
 Actual example of source boundary representation in STEP format
 SimpleGeo - a B-rep/CSG hybrid modeling system for Monte Carlo particle transport simulations
 FreeREP - Opensource geometry kernel development
 Brep - A boundary representation based modeler

You might also like