BREP Builder API: Polygon Creation Guide
BREP Builder API: Polygon Creation Guide
Modeling Algorithms
User's Guide
The information in this document is subject to change without notice and should not
be construed as a commitment by OPEN CASCADE S.A.S.
OPEN CASCADE S.A.S. assures no responsibility for any errors that may appear in
this document.
The software described in this document is furnished under a license and may be
used or copied only in accordance with the terms of such a license.
[Link]
Table of Contents 2
Table of Contents
TABLE OF CONTENTS ............................................................................................................................. 2
1. INTRODUCTION .................................................................................................................................... 5
2. 1 OVERVIEW ...........................................................................................................................................10
2. 2 INTERSECTIONS ...............................................................................................................................10
2. 2. 1 Geom2dAPI_InterCurveCurve ...................................................................................................11
2. 2. 2 Intersection of Curves and Surfaces ...........................................................................................12
2. 2. 3 Intersection of two Surfaces........................................................................................................13
2. 3 INTERPOLATIONS .................................................................................................................................13
2. 3. 1 Geom2dAPI_Interpolate .............................................................................................................13
2. 3. 2 GeomAPI_Interpolate.................................................................................................................14
2. 4 LINES AND CIRCLES FROM CONSTRAINTS ............................................................................................15
2. 5 SERVICES PROVIDED ............................................................................................................................16
2. 6 TYPES OF ALGORITHMS ........................................................................................................................17
2. 7 PERFORMANCE FACTORS .....................................................................................................................18
2. 8 CONVENTIONS .....................................................................................................................................19
2. 8. 1 Exterior/Interior .........................................................................................................................19
2. 8. 2 Orientation of a Line ..................................................................................................................20
2. 9 EXAMPLES ...........................................................................................................................................20
2. 9. 1 Line tangent to two circles ..........................................................................................................20
2. 9. 2 Circle of given radius tangent to two circles ..............................................................................24
2. 10 THE ALGORITHMS .............................................................................................................................27
2. 10. 1 The Qualifiers ...........................................................................................................................27
2. 10. 2 General Remarks about the Algorithms....................................................................................27
2. 10. 3 The Analytic Algorithms ...........................................................................................................28
2. 10. 4 The Geometric Algorithms ........................................................................................................28
2. 10. 5 The Iterative Algorithms ...........................................................................................................29
2. 11 CURVES AND SURFACES FROM CONSTRAINTS ...................................................................................29
2. 11. 1 FairCurve .................................................................................................................................30
Table of Contents 3
3. 1 OVERVIEW ...........................................................................................................................................46
3. 2 STANDARD TOPOLOGICAL OBJECTS ....................................................................................................47
3. 2. 1 BRepBuilderAPI_MakeShape .....................................................................................................47
3. 2. 2 BRepBuilderAPI_ModifyShape ..................................................................................................47
3. 2. 3 Making Vertices, Edges and Faces .............................................................................................47
3. 2. 4 Making Wires and Shells ............................................................................................................61
3. 2. 5 Modification Operators ..............................................................................................................63
4. CONSTRUCTION OF PRIMITIVES ...................................................................................................65
4. 1 MAKING PRIMITIVES............................................................................................................................65
4. 1. 1 BRepPrimAPI_MakeBox ............................................................................................................65
4. 1. 2 BRepPrimAPI_MakeWedge........................................................................................................66
4. 1. 3 BRepPrimAPI_MakeOneAxis .....................................................................................................67
4. 1. 4 BRepPrimAPI_MakeCylinder.....................................................................................................68
4. 1. 5 BRepPrimAPI_MakeCone ..........................................................................................................69
4. 1. 6 BRepPrimAPI_MakeSphere .......................................................................................................70
4. 1. 7 BRepPrimAPI_MakeTorus .........................................................................................................72
4. 1. 8 BRepPrimAPI_MakeRevolution .................................................................................................74
4. 2 SWEEPING: PRISM, REVOLUTION AND PIPE ..........................................................................................74
4. 2. 2 BRepPrimAPI_MakeSweep ........................................................................................................75
4. 2. 3 BRepPrimAPI_MakePrism .........................................................................................................75
4. 2. 4 BRepPrimAPI_MakeRevol .........................................................................................................77
5. BOOLEAN OPERATIONS ....................................................................................................................79
5. 1. 2 BRepAlgoAPI_Fuse ....................................................................................................................80
5. 1. 3 BRepAlgoAPI_Common .............................................................................................................81
5. 1. 4 BRepAlgoAPI_Cut ......................................................................................................................81
5. 1. 5 BRepAlgoAPI_Section ................................................................................................................81
6. FILLETS AND CHAMFERS .................................................................................................................83
8. 1 BRepBuilderAPI_Sewing ................................................................................................................95
8. 2 BRepOffsetAPI_FindContiguousEdges ..........................................................................................96
9. FEATURES ..............................................................................................................................................97
1. Introduction
1. 1 The Modeling Algorithms Module
This manual explains how to use the Modeling Algorithms. It provides basic
documentation on modeling algorithms. For advanced information on Modeling
Algorithms, see our offerings on our web site at
[Link]/support/training/
• Geometric tools
• Topological tools
The Topology API of Open CASCADE Technology (OCCT) includes the following
six packages:
• BRepAlgoAPI
• BRepBuilderAPI
• BRepFilletAPI
• BRepFeat
• BRepOffsetAPI
• BRepPrimAPI
The classes in these six packages provide the user with a simple and powerful
interface.
This is the simplest way to create edge E from two points P1, P2, but the developer
can test for errors when he is not as confident of the data as in the previous
example.
Example
#include <gp_Pnt.hxx>
#include <TopoDS_Edge.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
void EdgeTest()
{
gp_Pnt P1;
gp_Pnt P2;
BRepBuilderAPI_MakeEdge ME(P1,P2);
if (![Link]())
{
// doing [Link]() or E = ME here
// would raise StdFail_NotDone
Standard_DomainError::Raise
(“ProcessPoints::Failed to createan edge”);
}
TopoDS_Edge E = ME;
}
In this example an intermediary object ME has been introduced. This can be tested
for the completion of the function before accessing the result. More information on
error handling in the topology programming interface can be found in the next
section.
creating an edge from two points, two vertices have to be created from the points.
Sometimes you may be interested in getting these vertices quickly without exploring
the new edge. Such information can be provided when using a class. The following
example shows a function creating an edge and two vertices from two points.
Example
Example
E = [Link]();
This instruction tells the C++ compiler that there is an implicit casting of a
BRepBuilderAPI_MakeEdge into a TopoDS_Edge using the Edge method. It
means this method is automatically called when a BRepBuilderAPI_MakeEdge is
found where a TopoDS_Edge is required.
1. Introduction 8
This feature allows you to provide classes, which have the simplicity of function calls
when required and the power of classes when advanced processing is necessary.
All the benefits of this approach are explained when describing the topology
programming interface classes.
• The data or arguments of the method are incorrect, i.e. they do not
respect the restrictions specified by the methods in its specifications.
Typical example: creating a linear edge from two identical points is likely
to lead to a zero divide when computing the direction of the line.
In the first situation, an exception is also supposed to be raised because the calling
method should have verified the arguments and if it did not do so, there is a bug. For
example if before calling MakeEdge you are not sure that the two points are non-
identical, this situation must be tested.
Making those validity checks on the arguments can be tedious to program and
frustrating as you have probably correctly surmised that the method will perform the
test twice. It does not trust you.
As the test involves a great deal of computation, performing it twice is also time-
consuming.
Example
#include <Standard_ErrorHandler.hxx>
try {
TopoDS_Edge E = BRepBuilderAPI_MakeEdge(P1,P2);
// go on with the edge
}
catch {
// process the error.
}
To help the user, the Topology API classes only raise the exception
StdFail_NotDone. Any other exception means that something happened which was
unforeseen in the design of this API.
The NotDone exception is only raised when the user tries to access the result of the
computation and the original data is corrupted. At the construction of the class
instance, if the algorithm cannot be completed, the internal flag NotDone is set. This
flag can be tested and in some situations a more complete description of the error
can be queried. If the user ignores the NotDone status and tries to access the result,
an exception is raised.
Example
BRepBuilderAPI_MakeEdge ME(P1,P2);
if (![Link]()) {
// doing [Link]() or E = ME here
// would raise StdFail_NotDone
Standard_DomainError::Raise
(“ProcessPoints::Failed to create an edge”);
}
TopoDS_Edge E = ME;
Geometric Tools 10
2. Geometric Tools
2. 1 Overview
• Computation of intersections
• Interpolation laws
• Projections
2. 2 Intersections
In both cases, the algorithm requires a value for the tolerance (Standard_Real) for
the confusion between two points. The default tolerance value used in all
constructors is 1.0e-6.
The algorithm returns a point in the case of an intersection and a segment in the
case of tangent intersection.
2. 2. 1 Geom2dAPI_InterCurveCurve
This class may be instantiated in either of the following two ways:
Geom2dAPI_InterCurveCurve Intersector(C1,C2,tolerance);
Geom2dAPI_InterCurveCurve Intersector(C3,tolerance);
Geometric Tools 12
Standard_Integer N = [Link]();
Standard_Integer M = [Link]();
If you need access to a wider range of functionalities the following method will return
the algorithmic object for the calculation of intersections:
Standard_Integer nb = [Link]();
Geometric Tools 13
gp_Pnt& P = [Link](Index);
Handle(Geom_Curve) C = [Link](Index)
where Index is an integer between 1 and nb.
2. 3 Interpolations
Interpolation provides functionalities for interpolating BSpline curves, whether in 2D,
using Geom2dAPI_Interpolate, or 3D using GeomAPI_Interpolate.
2. 3. 1 Geom2dAPI_Interpolate
This class is used to interpolate a BSplineCurve passing through an array of points.
If tangency is not requested at the point of interpolation, continuity will be C2 . If
tangency is requested at the point, continuity will be C1. If Periodicity is requested,
the curve will be closed and the junction will be the first point given. The curve will
then have a continuity of C1 only.
This class may be instantiated as follows:
Geometric Tools 14
Geom2dAPI_Interpolate
(const Handle_TColgp_HArray1OfPnt2d& Points,
const Standard_Boolean PeriodicFlag,
const Standard_Real Tolerance);
From the object defined above the BSpline curve may be requested.
Handle(Geom2d_BSplineCurve) C = [Link]();
Handle(Geom2d_BSplineCurve) C =
Geom2dAPI_Interpolate(Points,
Standard_False,
Precision::Confusion());
2. 3. 2 GeomAPI_Interpolate
This class may be instantiated as follows:
GeomAPI_Interpolate
(const Handle_TColgp_HArray1OfPnt& Points,
const Standard_Boolean PeriodicFlag,
const Standard_Real Tolerance);
From the object defined above the BSpline curve may be requested.
Handle(Geom_BSplineCurve) C = [Link]();
Handle(Geom_BSplineCurve) C = GeomAPI_Interpolate(Points,
Standard_False, 1.0e-7);
The Geom2dGcc package focuses on algorithms; it is useful for finding results, but it
does not offer any management or modification functions, which could be applied to
the constraints or their arguments. This package is designed to offer optimum
performance, both in rapidity and precision. Trivial cases (for example, a circle
centered on one point and passing through another) are not treated.
The Geom2dGcc package deals only with 2d objects from the Geom2d package.
These objects are the points, lines and circles available.
All other lines such as Bezier curves and conic sections - with the exception of
circles -are considered general curves and must be differentiable twice.
The GccAna package deals with points, lines, and circles from the gp package.
Apart from constructors for lines and circles, it also allows the creation of conics from
the bisection of other geometric objects.
2. 5 Services provided
Provides an implementation of analytic algorithms using value-handled entities only
which are used to create 2D lines or circles with geometric constraints. The
algorithms available are:
2. 6 Types of algorithms
There are three categories of available algorithms, which complement each other:
• analytic,
• geometric,
• iterative.
Both methods can provide solutions. An iterative algorithm, however, seeks to refine
an approximate solution.
Geometric Tools 18
2. 7 Performance factors
The appropriate algorithm is the one, which reaches a solution of the required
accuracy in the least time. Only the solutions actually requested by the user should
be calculated. A simple means to reduce the number of solutions is the notion of
"qualifier". There are four qualifiers, which are:
2. 8 Conventions
2. 8. 1 Exterior/Interior
It is not hard to define the interior and exterior of a circle. As is shown in the following
diagram, the exterior is indicated by the sense of the binormal, that is to say the right
side according to the sense of traversing the circle. The left side is therefore the
interior (or "material").
By extension, the interior of a line or any open curve is defined as the left side
according to the passing direction, as shown in the following diagram:
2. 8. 2 Orientation of a Line
It is sometimes necessary to define in advance the sense of travel along a line to be
created. This sense will be from first to second argument.
The following figure shows a line, which is first tangent to circle C1 which is interior
to the line, and then passes through point P1.
2. 9 Examples
Example 1 Case 1
Constraints:
Tangent and Exterior to C1.
Tangent and Exterior to C2.
Syntax:
GccAna_Lin2d2Tan
Solver(GccEnt::Outside(C1),
GccEnt::Outside(C2),
Tolerance);
Example 1 Case 2
Constraints:
Tangent and Including C1.
Tangent and Including C2.
Syntax:
GccAna_Lin2d2Tan
Solver(GccEnt::Enclosing(C1),
GccEnt::Enclosing(C2),
Tolerance);
Example 1 Case 3
Constraints:
Tangent and Including C1.
Tangent and Exterior to C2.
Syntax:
GccAna_Lin2d2Tan
Solver(GccEnt::Enclosing(C1),
GccEnt::Outside(C2),
Tolerance);
Geometric Tools 23
Example 1 Case 4
Constraints:
Tangent and Exterior to C1.
Tangent and Including C2.
Syntax:
GccAna_Lin2d2Tan
Solver(GccEnt::Outside(C1),
GccEnt::Enclosing(C2),
Tolerance);
Example 1 Case 5
Geometric Tools 24
Constraints:
Tangent and Undefined with respect to C1.
Tangent and Undefined with respect to C2.
Syntax:
GccAna_Lin2d2Tan
Solver(GccEnt::Unqualified(C1),
GccEnt::Unqualified(C2),
Tolerance);
Example 2 Case 1
Constraints:
Tangent and Exterior to C1.
Tangent and Exterior to C2.
Syntax:
Geometric Tools 25
GccAna_Circ2d2TanRad
Solver(GccEnt::Outside(C1),
GccEnt::Outside(C2), Rad, Tolerance);
Example 2 Case 2
Constraints:
Tangent and Exterior to C1.
Tangent and Included by C2.
Syntax:
GccAna_Circ2d2TanRad
Solver(GccEnt::Outside(C1),
GccEnt::Enclosed(C2), Rad, Tolerance);
Example 2 Case 3
Geometric Tools 26
Constraints:
Tangent and Exterior to C1.
Tangent and Including C2.
Syntax:
GccAna_Circ2d2TanRad
Solver(GccEnt::Outside(C1),
GccEnt::Enclosing(C2), Rad, Tolerance);
Example 2 Case 4
Constraints:
Tangent and Enclosing C1.
Tangent and Enclosing C2.
Syntax:
GccAna_Circ2d2TanRad
Solver(GccEnt::Enclosing(C1),
GccEnt::Enclosing(C2), Rad, Tolerance);
Example 2 Case5
The following syntax will give all the circles of radius Rad, which are tangent to C1
and C2 without discrimination of relative position:
Geometric Tools 27
GccAna_Circ2d2TanRad Solver(GccEnt::Unqualified(C1),
GccEnt::Unqualified(C2),
Rad,Tolerance);
2. 10 The Algorithms
The objects created by this toolkit are non-persistent.
• Unqualified,
• Enclosing,
• Enclosed,
• Outside.
GccAna_Circ2d2TanRad
Solver(GccEnt::Outside(C1),
GccEnt::Enclosing(C2), Rad, Tolerance);
This can be expressed as "Find all the circles of radius Rad, which are tangent to
both circle C1 and C2, C1 being outside and C2 being inside."
Creation of a Line:
Creation of Conics:
Creation of a Circle:
For each algorithm, the desired tolerance (and angular tolerance if appropriate) is
given as an argument. Calculation is done to the highest precision available from the
hardware.
Creation of a Circle:
All calculations will be done to the highest precision available from the hardware.
Creation of a Circle:
2. 11. 1 FairCurve
The FairCurve package provides the following services:
The class Batten allows you to produce faired curves defined on the basis of one or
more constraints on each of the two reference points. These include point, angle of
tangency and curvature settings.
The following constraint orders are available:
• 1 the curve must pass through a point and have a given tangent
• 2 the curve must pass through a point, have a given tangent and a given
curvature.
The class MinimalVariation allows you to produce curves with minimal variation in
curvature at each reference point.
The following constraint orders are available:
• 1 the curve must pass through a point and have a given tangent
• 2 the curve must pass through a point, have a given tangent and a given
curvature.
[Link](L / [Link]())
Geometric Tools 31
Aesthetic Considerations
Warning
In other cases, when sliding is imposed and the sliding factor is too large, the batten
can collapse.
The constructor parameters, Tolerance and NbIterations, control how precise the
computation is, and how long it will take.
2. 11. 2 GeomFill
The GeomFill package provides the following services for creating surfaces from
boundary curves:
The class BezierCurves allows you to produce a Bezier surface from contiguous
Bezier curves. Note that problems may occur with rational Bezier Curves.
The class BSplineCurves allows you to produce a BSpline surface from contiguous
BSpline curves. Note that problems may occur with rational BSplines.
Creation of a Pipe
The class Pipe allows you to produce a pipe by sweeping a curve (the section) along
another curve (the path). The result is a BSpline surface.
Filling a contour
Creation of a Boundary
The class GeomFill_SimpleBound allows you to define a boundary for the surface,
which you want to construct.
The class GeomFill_BoundWithSurf allows you to define a boundary for the surface,
which you want to construct. This boundary will already be joined to another surface.
Filling styles
The enumerations FillingStyle specify the styles used to build the surface. These
include:
Figure 16. Intersecting filleted edges with differing radii, presenting a gap
which has been filled by a surface.
2. 11. 3 GeomPlate
The GeomPlate package provides the following services for creating surfaces
respecting curve and point constraints:
Geometric Tools 33
Definition of a Framework
Note that you do not have to specify an initial surface at the time of construction.
You can add one later or, if none is loaded, one will automatically be computed.
The class CurveConstraint allows you to define curves as constraints to the surface,
which you want to build.
The class PointConstraint allows you to define points as constraints to the surface,
which you want to build.
The class Surface allows you to describe the characteristics of plate surface objects
returned by BuildPlateSurface::Surface using the methods of Geom_Surface
Example
Create a Plate surface and approximate it from a polyline as a curve constraint and a
point constraint
Standard_Integer NbCurFront=4,
NbPointConstraint=1;
gp_Pnt P1(0.,0.,0.);
gp_Pnt P2(0.,10.,0.);
gp_Pnt P3(0.,10.,10.);
gp_Pnt P4(0.,0.,10.);
gp_Pnt P5(5.,5.,5.);
BRepBuilderAPI_MakePolygon W;
[Link](P1);
[Link](P2);
[Link](P3);
[Link](P4);
[Link](P1);
// Initialize a BuildPlateSurface
GeomPlate_BuildPlateSurface BPSurf(3,15,2);
Geometric Tools 35
2. 12 Projections
This package provides functionality for projecting points onto 2D and 3D curves and
surfaces.
NOTE
Note that the curve does not have to be a
Geom2d_TrimmedCurve. The algorithm will function with any
class inheriting Geom2d_Curve.
Geometric Tools 37
2. 12. 2 Geom2dAPI_ProjectPointOnCurve
This class may be instantiated as in the following example:
gp_Pnt2d P;
Handle(Geom2d_BezierCurve) C =
new Geom2d_BezierCurve(args);
Geom2dAPI_ProjectPointOnCurve Projector (P, C);
To restrict the search for normals to a given domain [U1,U2], use the following
constructor:
The solutions are indexed in a range from 1 to [Link](). The point, which
corresponds to a given index Index may be found:
gp_Pnt2d Pn = [Link](Index);
We can find the distance between the initial point and a point, which corresponds to
the given index, Index:
Standard_Real D = [Link](Index);
Geometric Tools 38
This class offers a method to return the closest solution point to the starting point.
This solution is accessed as follows:
gp_Pnt2d P1 = [Link]();
Standard_Real U = [Link]();
Standard_Real D = [Link]();
Standard_Real() Returns the minimum distance from the point to the curve.
Standard_Integer N =
Geom2dAPI_ProjectPointOnCurve (P,C);
Using these operators makes coding easier when you only need the nearest point.
Thus:
Geom2dAPI_ProjectPointOnCurve Projector (P, C);
gp_Pnt2d P1 = [Link]();
can be written more concisely as:
2. 12. 5 GeomAPI_ProjectPointOnCurve
This class is instantiated as in the following example:
gp_Pnt P;
Handle(Geom_BezierCurve) C =
new Geom_BezierCurve(args);
GeomAPI_ProjectPointOnCurve Projector (P, C);
If you wish to restrict the search for normals to the given domain [U1,U2], use the
following constructor:
The solutions are indexed in a range from 1 to [Link](). The point, which
corresponds to a given index may be found:
Geometric Tools 40
gp_Pnt Pn = [Link](Index);
Standard_Real U = [Link](Index);
Standard_Real U;
[Link](Index,U);
The distance between the initial point and a point, which corresponds to a given
index, may be found:
Standard_Real D = [Link](Index);
This class offers a method to return the closest solution point to the starting point.
This solution is accessed as follows:
gp_Pnt P1 = [Link]();
Standard_Real U = [Link]();
Standard_Real D = [Link]();
Redefined operators
Some operators have been redefined to help you find the nearest solution.
Standard_Real() Returns the minimum distance from the point to the curve.
Using these operators makes coding easier when you only need the nearest point. In
this way,
If you want to use the wider range of functionalities available from the Extrema
package, a call to the Extrema() method will return the algorithmic object for
calculating the extrema. For example:
NOTE
Note that the surface does not have to be of the
Geom_RectangularTrimmedSurface type.
The algorithm will function with any class inheriting Geom_Surface.
GeomAPI_ProjectPointOnSurf
gp_Pnt P;
Handle (Geom_Surface) S = new Geom_BezierSurface(args);
GeomAPI_ProjectPointOnSurf Proj (P, S);
To restrict the search for normals within the given rectangular domain [U1, U2, V1,
V2], use the following constructor:
The values of U1, U2, V1 and V2 lie at or within their maximum and minimum limits,
i.e.:
Umin<= U1<U2<=Umax
Vmin<= V1<V2<=Vmax
Geometric Tools 43
Having thus created the GeomAPI_ProjectPointOnSurf object, you can interrogate it.
gp_Pnt Pn = [Link](Index);
Standard_Real U,V;
[Link](Index, U, V);
The distance between the initial point and a point corresponding to the given index
may be found:
Standard_Real D = [Link](Index);
This class offers a method, which returns the closest solution point to the starting
point. This solution is accessed as follows:
gp_Pnt P1 = [Link]();
Standard_Real U,V;
[Link] (U, V);
Standard_Real D = [Link]();
Geometric Tools 44
Redefined operators
Some operators have been redefined to help you find the nearest solution.
Standard_Real() Returns the minimum distance from the point to the surface.
Using these operators makes coding easier when you only need the nearest point. In
this way,
3. Topological Tools
3. 1 Overview
Open CASCADE Technology topological tools include:
• Geometric Transformations
• Finding Planes
• Duplicating Shapes
• Checking Validity
• Vertices
• Edges
• Wires
• Faces
• Shells
• Solids.
3. Topological Tools 47
3. 2. 1 BRepBuilderAPI_MakeShape
The deferred class BRepBuilderAPI_MakeShape is the root of all the classes of
BRepBuilderAPI, which build shapes. It inherits from the class
BRepBuilderAPI_Command. It provides a field to store the constructed shape.
3. 2. 2 BRepBuilderAPI_ModifyShape
Class BRepBuilderAPI_ModifyShape is a deferred class used as a root for the shape
modifications. It inherits BRepBuilderAPI_MakeShape and implements the methods
used to trace the history of all sub-shapes.
BRepBuilderAPI_MakeVertex
Use this class to create a new vertex from a 3D point from gp.
Example
gp_Pnt P(0,0,10);
TopoDS_Vertex V = BRepBuilderAPI_MakeVertex(P);
NOTE
Note that this always creates a new vertex. This class has no
other methods.
BRepBuilderAPI_MakeEdge
Use this class to create edges. An edge is created from a curve and vertices. The
basic method is to construct an edge from a curve, two vertices, and two
parameters. All other constructions are derived from this one. The basic method and
3. Topological Tools 48
its arguments are described first, followed by the other methods. The
BRepBuilderAPI_MakeEdge class can provide extra information and return an error
status.
Example
C is the domain of the edge. V1 is the first vertex, it is oriented FORWARD, V2 is the
second vertex, it is oriented REVERSED. p1 and p2 are the parameters for the
vertices V1 and V2 on the curve. The default tolerance is associated with this edge.
The following figure illustrates this construction:
The curve
The vertices
The parameters
The figure below illustrates two special cases, a semi-infinite edge and an edge on a
periodic curve.
3. Topological Tools 50
• 3d points (Pnt from gp) can be given in place of vertices. Vertices are
created from the points. Giving vertices is useful when creating connected
vertices.
• The vertices or points can be omitted if the parameters are given. The
points are computed by evaluating the parameters on the curve.
• The vertices or points and the parameters can be omitted. The first and
last parameters of the curve are used.
The five following methods are thus derived from the basic construction:
Example
Six methods (the five above and the basic method) are also provided for curves from
the gp package in place of Curve from Geom. The methods create the
corresponding Curve from Geom and are implemented for the following classes:
There are also two methods to construct edges from two vertices or two points.
These methods assume that the curve is a line; the vertices or points must have
different locations.
Example
The BRepBuilderAPI MakeEdge when used as a class can provide the two vertices.
This is useful when the vertices were not provided as arguments, for example when
the edge was constructed from a curve and parameters. The two methods Vertex1
and Vertex2 return the vertices. Note that the returned vertices can be null if the
edge is open in the corresponding direction.
• EdgeDone
No error occurred, IsDone returns True.
• PointProjectionFailed
No parameters were given but the projection of the 3D points on the curve failed.
This happens when the point distance to the curve is greater than the
precision.
• ParameterOutOfRange
The given parameters are not in the range C->FirstParameter(), C->LastParameter()
• DifferentPointsOnClosedCurve
The two vertices or points have different locations but they are the extremities of a
closed curve.
• PointWithInfiniteParameter
A finite coordinate point was associated with an infinite parameter (see the Precision
package for a definition of infinite values).
• DifferentsPointAndParameter
The distance of the 3D point and the point evaluated on the curve with the parameter
is greater than the precision.
• LineThroughIdenticPoints
3. Topological Tools 53
Two identical points were given to define a line (construction of an edge without
curve), gp::Resolution is used for the confusion test.
The following example creates a wire from a set of parameters as described in the
following figure.
Example
#include <gp_Circ.hxx>
#include <[Link]>
#include <TopoDS_Wire.hxx>
#include <TopTools_Array1OfShape.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
MakeArc(x,y,R,0.,theEdges(4),theVertices(4),
theVertices(5));
MakeArc(-x,y,R,PI/2.,theEdges(6),theVertices(6),
theVertices(7));
MakeArc(-x,-y,R,PI,theEdges(8),theVertices(8),
theVertices(1));
// Create the linear edges
for (Standard_Integer i = 1; i <= 7; i += 2)
{
theEdges(i) = BRepBuilderAPI_MakeEdge
(TopoDS::Vertex(theVertices(i)),TopoDS::Vertex
(theVertices(i+1)));
}
// Create the wire using the BRepBuilderAPI_MakeWire
BRepBuilderAPI_MakeWire MW;
for (i = 1; i <= 8; i++)
{
[Link](TopoDS::Edge(theEdges(i)));
}
return [Link]();
}
BRepBuilderAPI_MakeEdge2d
Use this class to make edges on a working plane from 2d curves. The working plane
is a default value of the BRepBuilderAPI package (see the Plane methods).
BRepBuilderAPI_MakePolygon
Construction of polygons
Example
#include <TopoDS_Wire.hxx>
#include <BRepBuilderAPI_MakePolygon.hxx>
#include <TColgp_Array1OfPnt.hxx>
Two examples:
Other information
After each point insertion, the class maintains the last created edge and vertex,
which are returned by the methods Edge, FirstVertex and LastVertex.
When the added point or vertex has the same location as the previous one it is not
added to the current wire but the most recently created edge becomes Null. The
Added method can be used to test this condition. The MakePolygon class never
raises an error. If no vertex has been added, the Wire is Null. If two vertices are at
the same location, no edge is created.
BRepBuilderAPI_MakeFace
Use this class to create faces. A face is created from a surface and wires. An
underlying surface is constructed from a surface and optional parametric values.
Wires can be added to the surface. A planar surface can be constructed from a wire.
An error status can be returned after face construction.
Example
Handle(Geom_Surface) S = ...; // a surface
Standard_Real umin,umax,vmin,vmax; // parameters
TopoDS_Face F =
BRepBuilderAPI_MakeFace(S,umin,umax,vmin,vmax);
3. Topological Tools 58
To make a face from the natural boundary of a surface, the parameters are not
required:
Example
• umin, umax, vmin, vmax can be infinite. There will be no edge in the
corresponding direction.
The two basic constructions (from a surface and from a surface and parameters) are
implemented for all the gp package surfaces, which are transformed in the
corresponding Surface from Geom.
Once a face has been created, a wire can be added using the Add method. For
example, the following code creates a cylindrical surface and adds a wire.
Example
More than one wire can be added to a face, provided that they do not cross each
other and they define only one area on the surface. (Note that this is not checked).
The edges on a Face must have a parametric curve description.
If there is no parametric curve for an edge of the wire on the Face it is computed by
projection.
For one wire, a simple syntax is provided to construct the face from the surface and
the wire. The above lines could be written:
3. Topological Tools 60
Example
TopoDS_Face F = BRepBuilderAPI_MakeFace(C,W);
A planar face can be created from only a wire, provided this wire defines a plane.
For example, to create a planar face from a set of points you can use
BRepBuilderAPI_MakePolygon and BRepBuilderAPI_MakeFace.
Example
#include <TopoDS_Face.hxx>
#include <TColgp_Array1OfPnt.hxx>
#include <BRepBuilderAPI_MakePolygon.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
To add more than one wire an instance of the BRepBuilderAPI_MakeFace class can
be created with the face and the first wire and the new wires inserted with the Add
method.
3. Topological Tools 61
Error status
The Error method returns an error status, which is a term from the
BRepBuilderAPI_FaceError enumeration.
NotPlanar No surface was given and the wire was not planar.
BRepBuilderAPI_MakeWire
The BRepBuilderAPI_MakeWire class can build a wire from one or more edges or
connect new edges to an existing wire.
Example
TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3,E4);
3. Topological Tools 62
For a higher or unknown number of edges the Add method must be used; for
example, to build a wire from an array of shapes (to be edges).
Example
TopTools_Array1OfShapes theEdges;
BRepBuilderAPI_MakeWire MW;
for (Standard_Integer i = [Link]();
i <= [Link](); i++)
[Link](TopoDS::Edge(theEdges(i));
TopoDS_Wire W = MW;
The class can be constructed with a wire. A wire can also be added. In this case, all
the edges of the wires are added. For example to merge two wires:
Example
#include <TopoDS_Wire.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
Other information
The BRepBuilderAPI_MakeWire class connects the edges to the wire. When a new
edge is added if one of its vertices is shared with the wire it is considered as
connected to the wire. If there is no shared vertex, the algorithm searches for a
vertex of the edge and a vertex of the wire, which are at the same location (the
tolerances of the vertices are used to test if they have the same location). If such a
pair of vertices is found, the edge is copied with the vertex of the wire in place of the
original vertex. All the vertices of the edge can be exchanged for vertices from the
wire. If no connection is found the wire is considered to be disconnected. This is an
error.
3. Topological Tools 63
The BRepBuilderAPI_MakeWire class can return the last edge added to the wire
(Edge method). This edge can be different from the original edge if it was copied.
Error Status
DisconnectedWire The last added edge was not connected to the wire.
BRepBuilderAPI_MakeShell
Use the MakeShell class to build a Shell from a set of Faces. What may be important
is that each face should have the required continuity. That is why an initial surface is
broken up into faces.
BRepBuilderAPI_MakeSolid
Use the MakeSolid class to build a Solid from a set of Shells. Its use is similar to the
use of the MakeWire class: shells are added to the solid in the same way that edges
are added to the wire in MakeWire.
3. 2. 5 Modification Operators
BRepBuilderAPI_Transform
Example
BRepBuilderAPI_Copy
Example
4. Construction of Primitives
4. 1 Making Primitives
The following classes are used to build primitive objects. They include boxes,
wedges and rotational objects. They can be used to build solids or shells. These
classes provide Shell and Solid methods to return the corresponding results.
The methods are overloaded to be cast automatically to TopoDS_Shell or
TopoDS_Solid.
4. 1. 1 BRepPrimAPI_MakeBox
Use the MakeBox class to build a parallelepiped box. The result is either a Shell or a
Solid. There are four ways to build a box:
From three dimensions dx,dy,dz. The box is parallel to the axes and extends for
[0,dx] [0,dy] [0,dz]
From a point and three dimensions. The same as above but the point is the new
origin.
From two points, the box is parallel to the axes and extends on the intervals defined
by the coordinates of the two points.
From a system of axes (gp_Ax2) and three dimensions. Same as the first way but
the box is parallel to the given system of axes.
An error is raised if the box is flat in any dimension using the default precision. The
following code shows how to create a box:
Example
4. 1. 2 BRepPrimAPI_MakeWedge
Use the BRepPrimAPI_MakeWedge class to build a wedge. A wedge is a slanted
box, i.e. a box with angles. The wedge is constructed in much the same way as a
box i.e. from three dimensions dx,dy,dz plus arguments or from an axis system,
three dimensions, and arguments.
The following figure shows two ways to build wedges. One is to add an ltx
4. Construction of Primitives 67
dimension, which is the length in x of the face at dy. The second is to add xmin,
xmax, zmin, zmax to describe the face at dy.
4. 1. 3 BRepPrimAPI_MakeOneAxis
The BRepPrimAPI_MakeOneAxis class is a deferred class used as a root class for
4. Construction of Primitives 68
all the classes constructing rotational primitives. Rotational primitives are created by
rotating a curve around an axis. They cover the cylinder, the cone, the sphere, the
torus, and the revolution, which provides all the other curves.
The particular constructions of these primitives are described, but they all have some
common arguments, which are:
The result of the OneAxis construction is a Solid, a Shell, or a Face. The face is the
face covering the rotational surface. Remember that you will not use the OneAxis
directly but one of the derived classes, which provide improved constructions. The
following figure illustrates the OneAxis arguments.
4. 1. 4 BRepPrimAPI_MakeCylinder
Use the MakeCylinder class to make cylindrical primitives. A cylinder is created
either in the default coordinate system or in a given coordinate system (gp_Ax2).
There are two constructions:
4. Construction of Primitives 69
The following code builds the cylindrical face of the figure, which is a quarter of
cylinder along the Y axis with the origin at X,Y,Z, a length of DY, and a radius R.
Example
4. 1. 5 BRepPrimAPI_MakeCone
Use the BRepPrimAPI_MakeCone class to make conical primitives. Like a cylinder,
a cone is created either in the default coordinate system or in a given coordinate
system (gp_Ax2). There are two constructions:
4. Construction of Primitives 70
• Two radii and height, to build a full cone. One of the radii can be null to
make a sharp cone.
The following code builds the solid cone of the figure, which is located in the default
system with radii R1 and R2 and height H.
Example
4. 1. 6 BRepPrimAPI_MakeSphere
Use the BRepPrimAPI_MakeSphere class to make spherical primitives. Like a
cylinder, a sphere is created either in the default coordinate system or in a given
coordinate system (gp_Ax2). There are four constructions:
• A radius and three angles; build a portion of a strip of sphere. (see Figure
29.)
The following code builds four spheres from a radius and three angles.
Example
Note that we could equally well choose to create Shells instead of Solids.
4. Construction of Primitives 72
4. 1. 7 BRepPrimAPI_MakeTorus
Use the BRepPrimAPI_MakeTorus class to make toroidal primitives. Like the other
primitives, a torus is created either in the default coordinate system or in a given
coordinate system (gp_Ax2). There are four constructions similar to the sphere
constructions:
• Two radii and two angles; build a segment of a torus between two latitudes. The
angles a1, a2 must verify the relation:
0 < a2 - a1 < 2*PI
The following code builds four toroidal shells from two radii and three angles.
Example
TopoDS_Shell S3 = BRepPrimAPI_MakeTorus(R1,R2,a1,a2);
TopoDS_Shell S4 =
BRepPrimAPI_MakeTorus(R1,R2,a1,a2,ang);
Note that we could equally well choose to create Solids instead of Shells.
4. 1. 8 BRepPrimAPI_MakeRevolution
Use the BRepPrimAPI_MakeRevolution class to build a uniaxe primitive from a
curve. As with other uniaxe primitives it can be created in the default coordinate
system or in a given coordinate system.
The curve can be any Geom_Curve, provided it is planar and lies in the same plane
as the Z-axis of local coordinate system. There are four modes of construction:
• From a curve, use the full curve and make a full rotation.
• From a curve and two parameters to trim the curve. The two parameters
must be growing and within the curve range.
• From a curve, two parameters, and an angle. The two parameters must
be growing and within the curve range.
4. 2. 2 BRepPrimAPI_MakeSweep
The BRepPrimAPI_MakeSweep class is a deferred class used as a root of the
sweep classes BRepPrimAPI_MakePrism and BRepPrimAPI_MakeRevol. It has
currently no special services for the end user.
4. 2. 3 BRepPrimAPI_MakePrism
Use the BRepPrimAPI_MakePrism class to make a linear prism from a shape. A
prism is created from a shape and a vector or a direction.
From a vector, a finite prism is created. From a direction, an infinite or semiinfinite
prism is created. A Boolean argument is used to toggle the semi-infinite or infinite
prism. All constructors have a boolean argument to copy or share the original shape.
The default is to share it. The following code, using a face, a direction and a length,
creates a finite, an infinite, and a semi-infinite solid.
Example
gp_Dir direc(0,0,1);
Standard_Real l = 10;
// create a vector from the direction and the length
gp_Vec v = direc;
v *= l;
TopoDS_Solid P1 = BRepPrimAPI_MakePrism(F,v);
// finite
TopoDS_Solid P2 = BRepPrimAPI_MakePrism(F,direc);
// infinite
TopoDS_Solid P3 =
BRepPrimAPI_MakePrism(F,direc,Standard_False);
// semi-infinite
4. Construction of Primitives 77
4. 2. 4 BRepPrimAPI_MakeRevol
Use the BRepPrimAPI_MakeRevol class to make a revolved sweep. A revol is
created from a shape, an axis (gp_Ax1), and an angle. The angle has a default value
of 2*PI which means a closed revol.
BRepPrimAPI_MakeRevol constructors have a last argument to copy or share the
original shape. The following code, using a face, an axis and an angle makes a full
and a partial revol.
Example
5. Boolean Operations
5. 1 Boolean Operators
Boolean operations are used to create new shapes from the combinations of two
shapes S1, S2.
5. 1. 1 BRepAlgoAPI_BooleanOperation
The BRepAlgoAPI_BooleanOperation class is the deferred root class for Boolean
operations.
5. 1. 2 BRepAlgoAPI_Fuse
The BRepAlgoAPI_Fuse class performs the fuse operations.
Example
TopoDS_Shape A = ..., B = ...;
5. Boolean Operations 81
TopoDS_Shape S = BRepAlgoAPI_Fuse(A,B);
5. 1. 3 BRepAlgoAPI_Common
The BRepAlgoAPI_Common class performs the common operations.
Example
5. 1. 4 BRepAlgoAPI_Cut
The BRepAlgoAPI_Cut class performs the cut operations.
Example
5. 1. 5 BRepAlgoAPI_Section
The BRepAlgoAPI_Section class performs the section, described as a
TopoDS_Compound made of TopoDS_Edge.
5. Boolean Operations 82
Example
TopoDS_Shape A = ..., TopoDS_ShapeB = ...;
TopoDS_Shape S = BRepAlgoAPI_Section(A,B);
6. Fillets and Chamfers 83
6. 1 Fillet Constructor
6. 1. 1 BRepFilletAPI_MakeFillet
Use the BRepFilletAPI_MakeFillet class to add fillets on a shape. A fillet is a smooth
face replacing a sharp edge.
First, give a shape, which will be filleted. This is done at the construction of the class.
Then add fillet descriptions using the Add method. A fillet description contains an
edge and a radius. Of course the edge must be shared by two faces. The fillet is
automatically extended to all edges in a smooth continuity with the original edge.
Finally, perform the operation by asking for the result as for any class inherited from
MakeShape.
In the following example a filleted box with dimensions a,b,c and radius r is created.
6. Fillets and Chamfers 84
#include <TopoDS_Shape.hxx>
#include <[Link]>
#include <BRepPrimAPI_MakeBox.hxx>
#include <TopoDS_Solid.hxx>
#include <BRepFilletAPI_MakeFillet.hxx>
#include <TopExp_Explorer.hxx>
void CSampleTopologicalOperationsDoc::OnEvolvedblend1()
{
TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200,200,200);
BRepFilletAPI_MakeFillet Rake(theBox);
ChFi3d_FilletShape FSh = ChFi3d_Rational;
[Link](FSh);
TopExp_Explorer ex(theBox,TopAbs_EDGE);
[Link](ParAndRad, TopoDS::Edge([Link]()));
TopoDS_Shape evolvedBox = [Link]();
}
6. Fillets and Chamfers 86
6. 2 BRepFilletAPI_MakeFillet2d
BRepFilletAPI_MakeFillet2d is used to construct fillets and chamfers on planar
faces.
A fillet is defined as a smooth edge on the face whereas a chamfer is defined as a
rectilinear edge replacing a sharp vertex of the face.
1. Give the face on which the fillets (or the chamfers) are to be built.
2. Indicate which vertex is to be deleted and give the fillet radius with the AddFillet
method in order to add a fillet. Or add a chamfer with the AddChamfer method.
A chamfer can be described by
If face F2 is created by the 2d fillet and chamfer builder from face F1, the builder can
be rebuilt (the builder recovers the status it had before deletion). To do so, use the
following syntax:
BRepFilletAPI_MakeFillet2d builder;
[Link](F1,F2);
Example
#include “BRepPrimAPI_MakeBox.hxx”
#include “TopoDS_Shape.hxx”
#include “TopExp_Explorer.hxx”
#include “BRepFilletAPI_MakeFillet2d.hxx”
#include “[Link]”
#include “TopoDS_Solid.hxx”
{
TopoDS_Solid Box = BRepPrimAPI_MakeBox (a,b,c);
TopExp_Explorer ex1(Box,TopAbs_FACE);
6. 1 Chamfer Constructor
6 . 3 BRepFilletAPI_MakeChamfer
The use of the BRepFilletAPI_MakeChamfer class is similar to the use of
BRepFilletAPI_MakeFillet, except for the following:
7. 1 Shelling operator
BRepOffsetAPI_MakeThickSolid
Example
Standard_Real Of = ...;
TopTools_ListOfShape LCF;
TopoDS_Shape Result;
Standard_Real Tol = Precision::Confusion();
7. 2 Modification operators
BRepOffsetAPI_DraftAngle
• Neutral plane: intersection between the face and the neutral plane is
invariant.
The following code places a draft angle on several faces of a shape; the same
direction, angle and neutral plane are used for each face:
Example
TopTools_ListOfShape ListOfFace;
// Creation of the list of faces to be modified
...
gp_Dir Direc(0.,0.,1.);
// Z direction
Standard_Real Angle = 5.*PI/180.;
// 5 degree angle
gp_Pln Neutral(gp_Pnt(0.,0.,5.), Direc);
// Neutral plane Z=5
BRepOffsetAPI_DraftAngle theDraft(myShape);
TopTools_ListIteratorOfListOfShape itl;
for ([Link](ListOfFace); [Link](); [Link]()) {
[Link](TopoDS::Face([Link]()),Direc,Angle,Neutral);
if (![Link]()) {
// An error has occurred. The faulty face is given by
// ProblematicShape
break;
}
}
if (![Link]()) {
// An error has occurred
TopoDS_Face guilty = [Link]();
...
}
[Link]();
if (![Link]()) {
// Problem encountered during reconstruction
...
}
else {
TopoDS_Shape myResult = [Link]();
...
}
7. Offsets, Drafts, Pipes and Evolved shapes 92
7. 3 Pipe Constructor
BRepOffsetAPI_MakePipe
Whatever angle the spine makes with the profile is preserved throughout the pipe.
Example
BRepOffsetAPI_MakeEvolved
The reference axes of the profile can be defined following two distinct modes:
• the origin is given by the point on the spine which is the closest to the
7. Offsets, Drafts, Pipes and Evolved shapes 94
profile
• the X axis is given by the tangent to the spine at the point defined above
• the Z axis is the normal to the plane which contains the spine.
Example
8. Sewing operators
8. 1 BRepBuilderAPI_Sewing
The BRepOffsetAPI_Sewing class is used to sew TopoDS Shapes together along
their common edges. The edges can be partially shared as in the following example.
-6
The constructor takes as arguments the tolerance (default value is 10 ) and a flag,
which is used to mark the degenerate shapes.
Additional methods can be used to give additional information on the number of free
boundaries, of multiple edges and of degenerate shapes.
8. 2 BRepOffsetAPI_FindContiguousEdges
The BRepOffsetAPI_FindContiguousEdges class is used to find edges, which
coincide among a set of shapes within the given tolerance; these edges can be
analyzed on tangency, continuity (C1, G2, etc.)...
-6
The constructor takes as arguments the tolerance defining the edge proximity (10
by default) and a flag used to mark degenerated shapes.
The NbContiguousEdges returns the number of contiguous edges within the given
tolerance as defined above.
The ContiguousEdge method takes an edge number as an argument and returns the
TopoDS edge contiguous to another edge.
The SectionToBoundary method is used to find the original edge on the original
shape from the section.
9. Features 97
9. Features
9. 1. 1 Form classes
The Form from BRepFeat class is a deferred class used as a root for form features.
It inherits MakeShape from BRepBuilderAPI and provides implementation of
methods using to keep track of all sub-shapes.
MakePrism
The MakePrism from BRepFeat class is used to build a prism interacting with a
shape. It is created or initialized from
• a face (the face of sketch on which the base has been defined and used
9. Features 98
to determine whether the base has been defined on the basic shape or
not),
• a direction,
Perform(From, Until) The prism is defined between the two faces From and
Until.
NOTE
The Add method can be used prior to using the Perform
methods to indicate that a face generated by an edge “slides”
onto a face of the basic shape.
Example
thePrism, Perform(100.);
if ([Link]()) {
TopoDS_Shape theResult = thePrism;
...
}
Figure 46. Creating a prism between two faces with Perform(From, Until)
MakeDPrism
The MakeDPrism from BRepFeat class is used to build draft prism topologies
interacting with a basis shape . These can be depressions or protrusions. A class
object is created or initialized from
• a face (face of sketch on which the base has been defined and used to
determine whether the base has been defined on the basic shape or not),
• an angle,
The semantics of draft prism feature creation is based on the construction of shapes:
• along a length
• up to a limiting face
The shape defining construction of the draft prism feature can be either the
supporting edge or the concerned area of a face.
In the case of the supporting edge, this contour can be attached to a face of the
basis shape by binding. When the contour is bound to this face, the information that
the contour will slide on the face becomes available to the relevant class methods.
In the case of the concerned area of a face, you could, for example, cut it out and
move it to a different height, which will define the limiting face of a protrusion
direction or depression.
NOTE
The Add method can be used prior to using the Perform
methods to indicate that a face generated by an edge “slides”
onto a face of the basic shape.
Example
MakeDPrism
TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);
TopExp_Explorer Ex;
[Link](S,TopAbs_FACE);
[Link]();
[Link]();
[Link]();
[Link]();
[Link]();
TopoDS_Face F = TopoDS::Face([Link]());
Handle(Geom_Surface) surf = BRep_Tool::Surface(F);
gp_Circ2d
c(gp_Ax2d(gp_Pnt2d(200.,130.),gp_Dir2d(1.,0.)),50.);
BRepBuilderAPI_MakeWire MW;
Handle(Geom2d_Curve) aline = new Geom2d_Circle(c);
[Link](BRepBuilderAPI_MakeEdge(aline,surf,0.,PI));
[Link](BRepBuilderAPI_MakeEdge(aline,surf,PI,2.*PI));
BRepBuilderAPI_MakeFace MKF;
[Link](surf,Standard_False);
[Link]([Link]());
TopoDS_Face FP = [Link]();
BRepLib::BuildCurves3d(FP);
BRepFeat_MakeDPrism MKDP (S,FP,F,10*PI180,Standard_True,
Standard_True);
[Link](200);
TopoDS_Shape res1 = [Link]();
9. Features 103
MakeRevol
The MakeRevol from BRepFeat class is used to build a revol interacting with a
shape. It is created or initialized from
• a face (the face of sketch on which the base has been defined and used
to determine whether the base has been defined on the basic shape or
not),
• an axis of revolution,
Perform(From, Until) The revol is defined between the two faces, From and
Until.
NOTE
The Add method can be used prior to using the Perform
methods in order to indicate that a face generated by an edge
“slides” onto a face of the basic shape.
In the following sequence, a face is revolved and the revol is limited by some face of
the basis shape.
Example
TopoDS_Shape Sbase = ...; // an initial shape
TopoDS_Face Frevol = ....; // a base of prism
TopoDS_Face FUntil = ....; // face limiting the revol
[Link](FUntil);
if ([Link]()) {
TopoDS_Shape theResult = theRevol;
...
9. Features 105
MakePipe
• a face (face of sketch on which the base has been defined and used to
determine whether the base has been defined on the basic shape or not),
• a spine wire
Perform() The pipe is defined along the entire path (spine wire)
Perform(Until) The pipe is defined along the path until a given face
Perform(From, Until) The pipe is defined between the two faces From and
Until.
Example
//MakePipe
TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);
TopExp_Explorer Ex;
[Link](S,TopAbs_FACE);
[Link]();
[Link]();
TopoDS_Face F1 = TopoDS::Face([Link]());
Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);
BRepBuilderAPI_MakeWire MW1;
9. Features 106
gp_Pnt2d p1,p2;
p1 = gp_Pnt2d(100.,100.);
p2 = gp_Pnt2d(200.,100.);
Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();
[Link](BRepBuilderAPI_MakeEdge(aline,surf,0.,[Link](p
2)));
p1 = p2;
p2 = gp_Pnt2d(150.,200.);
aline = GCE2d_MakeLine(p1,p2).Value();
[Link](BRepBuilderAPI_MakeEdge(aline,surf,0.,[Link](p
2)));
p1 = p2;
p2 = gp_Pnt2d(100.,100.);
aline = GCE2d_MakeLine(p1,p2).Value();
[Link](BRepBuilderAPI_MakeEdge(aline,surf,0.,[Link](p
2)));
BRepBuilderAPI_MakeFace MKF1;
[Link](surf,Standard_False);
[Link]([Link]());
TopoDS_Face FP = [Link]();
BRepLib::BuildCurves3d(FP);
TColgp_Array1OfPnt CurvePoles(1,3);
gp_Pnt pt = gp_Pnt(150.,0.,150.);
CurvePoles(1) = pt;
pt = gp_Pnt(200.,100.,150.);
CurvePoles(2) = pt;
pt = gp_Pnt(150.,200.,150.);
CurvePoles(3) = pt;
Handle(Geom_BezierCurve) curve = new Geom_BezierCurve
(CurvePoles);
TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);
TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);
BRepFeat_MakePipe MKPipe (S,FP,F1,W,Standard_False,
Standard_True);
[Link]();
TopoDS_Shape res1 = [Link]();
9. Features 107
MakeLinearForm
• to a height.
• direction2 (vector opposite to the previous one along which thickness will
be built up, may be null)
Perform() Performs a prism from the wire along the direction1 and
direction2 interacting basis shape Sbase. The height of the prism
is Magnitude(Direction1)+Magnitude(direction2). Reconstructs
the feature topologically
Example-
BRepBuilderAPI_MakeWire mkw;
gp_Pnt p1 = gp_Pnt(0.,0.,0.);
gp_Pnt p2 = gp_Pnt(200.,0.,0.);
[Link](BRepBuilderAPI_MakeEdge(p1,p2));
p1 = p2;
p2 = gp_Pnt(200.,0.,50.);
[Link](BRepBuilderAPI_MakeEdge(p1,p2));
p1 = p2;
p2 = gp_Pnt(50.,0.,50.);
[Link](BRepBuilderAPI_MakeEdge(p1,p2));
p1 = p2;
p2 = gp_Pnt(50.,0.,200.);
[Link](BRepBuilderAPI_MakeEdge(p1,p2));
p1 = p2;
p2 = gp_Pnt(0.,0.,200.);
[Link](BRepBuilderAPI_MakeEdge(p1,p2));
p1 = p2;
[Link](BRepBuilderAPI_MakeEdge(p2,gp_Pnt(0.,0.,0.)));
TopoDS_Shape S =
BRepBuilderAPI_MakePrism(BRepBuilderAPI_MakeFace
9. Features 109
([Link]()),gp_Vec(gp_Pnt(0.,0.,0.),gp_P
nt(0.,100.,0.)));
TopoDS_Wire W =
BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(gp_Pnt
(50.,45.,100.),
gp_Pnt(100.,45.,50.)));
Handle(Geom_Plane) aplane =
new Geom_Plane(gp_Pnt(0.,45.,0.), gp_Vec(0.,1.,0.));
BRepFeat_MakeLinearForm aform(S, W, aplane, gp_Dir
(0.,5.,0.), gp_Dir(0.,-3.,0.), 1, Standard_True);
[Link]();
TopoDS_Shape res = [Link]();
The class is created or initialized from two shapes: the “glued” shape and the basic
shape (on which the other shape is glued).
Two Bind methods are used to bind a face of the glued shape to a face of the basic
shape and an edge of the glued shape to an edge of the basic shape.
NOTE
Every face and edge has to be bounded, especially if two
edges of two glued faces are coincident they must be
explicitly bounded.
Example
TopoDS_Shape Sbase = ...; // the basic shape
TopoDS_Shape Sglued = ...; // the glued shape
TopTools_ListOfShape Lfbase;
TopTools_ListOfShape Lfglued;
// Determination of the glued faces
...
Add(EdgeNew, EdgeOld) Adds a new edge on an existing one (the old edge
must contain the new edge).
NOTE
The added wires and edges must define closed wires on faces
or wires located between two existing edges. Existing edges
must not be intersected.
Example
10. 1 Overview
In order to have the precision required in industrial design, drawings need to offer
the possibility of removing lines, which are hidden in a given projection.
These two algorithms are based on the principle of comparing each edge of the
shape to be visualized with each of its faces, and calculating the visible and the
hidden parts of each edge. Note that these are not the sort of algorithms used in
generating shading, which calculate the visible and hidden parts of each face in a
shape to be visualized by comparing each face in the shape with every other face in
the same shape.
You can choose to display the following types of line if they are present in the
projection:
• sharp edges
Figure 50. sharp, smooth and sewn edges in a simple screw shape
• isoparameters
10. 2. 1 HLRBRep
The HLRBRep package provides the following services:
Extracting edges.
• hidden isoparameters.
10. Hidden Line Removal 117
9. 2. 2 Restrictions in use
10. 3. 1 HLRBRep_Algo
Example
// Build HLR
myAlgo->Update();
10. 3. 2 HLRBRep_PolyAlgo
Example
myPolyAlgo->Projector(myProjector);
// Build HLR
myPolyAlgo->Update();
Example
Standard_Real radius=10. ;
Standard_Real height=25. ;
BRepBuilderAPI_MakeCylinder myCyl (radius, height) ;
TopoDS_Shape myShape = [Link]() ;
Standard_Real Deflection = 0.01 ;
BRepMesh::Mesh (myShape, Deflection);
Meshing covers a shape with a triangular mesh. Other than hidden line removal, you
can use meshing to transfer the shape to another tool: a manufacturing tool, a
shading algorithm, a finite element algorithm, or a collision algorithm, for example.
You can obtain information on the shape by first exploring it. To then access
triangulation of a face in the shape, use BRepTool::Triangulation. To access a
polygon which is the approximation of an edge of the face, use
BRepTool::PolygonOnTriangulation.
Geom2dAPI_ProjectPointOnCurve significantly enhances computational efficiency by providing a streamlined mechanism to project points onto curves, allowing the calculation of all normals projected from a given point onto the curve. This class includes functions such as retrieving the number of solution points, distance calculations, and accessing the nearest solution point, which are core functionalities in computational geometry. By defining restricted domains for projection (e.g., [U1, U2]), it further optimizes the search space and computational load, ensuring that operations are both precise and efficient .
The PerformThruAll() method in both MakePrism and MakeRevol classes allows the construction of infinite features, either as protrusions or cuts. The advantage of this method is that it simplifies the creation of features that extend through all material, useful in designs requiring complete penetration or extrusion over extensive ranges. However, the limitation is that it might produce unintended outcomes in scenarios where bounded structures are necessary, as it disregards intermediate boundaries that might be crucial in complex assemblies or detailed models. It necessitates careful use to ensure compatibility with the surrounding geometry and design intentions .
BRepFeat extends classical boundary representation techniques by focusing on the manipulation of shapes through features rather than just geometric and topological entities. It enhances shape modeling by allowing operations like protrusions and depressions to be more intuitive through feature definition and manipulation. BRepFeat interacts with BRepBuilderAPI but differs by providing more sophisticated operations like MakePrism and MakeRevol, which permit complex modifications such as building prisms or revols from initial shapes, making it superior in representing detailed and feature-rich models .
The approximation of a GeomPlate surface to a Geom_BSplineSurface is achieved using the MakeApprox class. Key parameters involved in this process include maximum number of segments (MaxSeg), maximum degree (MaxDegree), and tolerance (Tol). These parameters control the fineness, continuity, and accuracy of the BSpline approximation. The process involves evaluating and controlling the errors between the initial plate surface and the resultant BSpline to make sure it adheres to the specified criteria .
Redefined operators in GeomAPI_ProjectPointOnCurve simplify the nearest point projection process by providing direct access to minimum distances, number of solutions, and nearest points without explicitly creating an intermediate object. This reduction in steps decreases computational overhead, speeds up execution, and streamlines code when only the nearest point is needed. Furthermore, it aligns the coding process more closely with the problem's domain, minimizing distractions from the primary task of determining projections efficiently .
Curve and point constraints are used to define the geometric boundaries and characteristics of a surface being modeled. CurveConstraint allows the definition of curves as constraints on the surface, while PointConstraint allows specific points to be defined as constraints. These constraints guide the modeling process by ensuring that the resulting surface adheres to the specified shapes and points. For example, when creating a plate surface using GeomPlate_BuildPlateSurface, multiple methods like BRepFill_CurveConstraint and GeomPlate_PointConstraint are used to add these constraints before computing the surface .
MakePrism in BRepFeat facilitates complex shape creation by enabling the construction of prisms that interact with existing shapes. It incorporates multiple operational parameters, such as the base shape, direction, and type of operation (protrusion or cut). Additionally, Boolean parameters control whether self-intersections are considered. Perform methods dictate how the prism is constructed, offering options like defined height, endpoints, or infinite extension. This flexible configuration enables designers to create detailed and tailored geometries based on precise requirements .
PerformUntilEnd() in the MakePrism class results in a prism that is semi-infinite, being limited only by the actual position of the base. This method is significant in practical applications where a fixed termination point isn't necessary, such as in construction or machining operations where structures extend until they meet an obstacle. It allows designers to simulate and model real-world scenarios where exact lengths can't always be predetermined, offering flexibility and adaptability in the design and production processes .
In GeomAPI_ProjectPointOnSurf, the projection of a point onto a surface involves instantiating the class with a point and a geometric surface. Additional parameters [U1, U2, V1, V2] can restrict the domain for projection, optimizing calculations by narrowing down possible solution areas. After setup, the method provides functionalities like retrieving the number of solution points, calculating distances, and accessing the nearest solution points. These parameters directly affect the accuracy and computational intensity of the projection operation, ensuring precision based on the problem's domain .
The MakePipe class in geometric modeling is used to construct pipe-shaped features on a basic shape using a base face and a spine wire. It involves setting up the base and defining whether the operation is a depression or protrusion. The pipe feature is then constructed using one of the Perform methods, which allow definition along the spine wire or between specific faces. This method is particularly advantageous in scenarios requiring hollow or tubular extensions, such as creating conduits or ducts within complex assemblies, providing control over direction and extent of the pipe .