Open CASCADE Technology 6.6.0
Public Member Functions | Protected Member Functions | Protected Attributes
ShapeFix_Wire Class Reference

This class provides a set of tools for repairing a wire.

These are methods Fix...(), organised in two levels:

Level 1: Advanced - each method in this level fixes one separate problem,
usually dealing with either single edge or connection of the
two adjacent edges. These methods should be used carefully and
called in right sequence, because some of them depend on others.

Level 2: Public (API) - methods which group several methods of level 1
and call them in a proper sequence in order to make some
consistent set of fixes for a whole wire. It is possible to
control calls to methods of the advanced level from methods of
the public level by use of flags Fix..Mode() (see below).

Fixes can be made in three ways:
1. Increasing tolerance of an edge or a vertex
2. Changing topology (adding/removing/replacing edge in the wire
and/or replacing the vertex in the edge)
3. Changing geometry (shifting vertex or adjusting ends of edge
curve to vertices, or recomputing curves of the edge)

When fix can be made in more than one way (e.g., either
by increasing tolerance or shifting a vertex), it is choosen
according to the flags:
ModifyTopologyMode - allows modification of the topology.
This flag can be set when fixing a wire on
the separate (free) face, and should be
unset for face which is part of shell.
ModifyGeometryMode - allows modification of the geometry.

The order of descriptions of Fix() methods in this CDL
approximately corresponds to the optimal order of calls.

NOTE: most of fixing methods expect edges in the
ShapeExtend_WireData to be ordered, so it is necessary to make
call to FixReorder() before any other fixes

ShapeFix_Wire should be initialized prior to any fix by the
following data:
a) Wire (ether TopoDS_Wire or ShapeExtend_Wire)
b) Face or surface
c) Precision
This can be done either by calling corresponding methods
(LoadWire, SetFace or SetSurface, and SetPrecision), or
by loading already filled ShapeAnalisis_Wire with method Load

#include <ShapeFix_Wire.hxx>

Inheritance diagram for ShapeFix_Wire:
Inheritance graph
[legend]

Public Member Functions

 ShapeFix_Wire ()
 Empty Constructor, creates clear object with default flags

 ShapeFix_Wire (const TopoDS_Wire &wire, const TopoDS_Face &face, const Standard_Real prec)
 Create new object with default flags and prepare it for use
(Loads analyzer with all the data for the wire and face)

void ClearModes ()
 Sets all modes to default

void ClearStatuses ()
 Clears all statuses

void Init (const TopoDS_Wire &wire, const TopoDS_Face &face, const Standard_Real prec)
 Load analyzer with all the data for the wire and face
and drops all fixing statuses

void Init (const Handle< ShapeAnalysis_Wire > &saw)
 Load analyzer with all the data already prepared
and drops all fixing statuses
If analyzer contains face, there is no need to set it
by SetFace or SetSurface

void Load (const TopoDS_Wire &wire)
 Load data for the wire, and drops all fixing statuses

void Load (const Handle< ShapeExtend_WireData > &sbwd)
 Load data for the wire, and drops all fixing statuses

void SetFace (const TopoDS_Face &face)
 Set working face for the wire

void SetSurface (const Handle< Geom_Surface > &surf)
 Set surface for the wire

void SetSurface (const Handle< Geom_Surface > &surf, const TopLoc_Location &loc)
 Set surface for the wire

virtual void SetPrecision (const Standard_Real prec)
 Set working precision (to root and to analyzer)

Standard_Boolean IsLoaded () const
 Tells if the wire is loaded

Standard_Boolean IsReady () const
 Tells if the wire and face are loaded

Standard_Integer NbEdges () const
 returns number of edges in the working wire

TopoDS_Wire Wire () const
 Makes the resulting Wire (by basic Brep_Builder)

TopoDS_Wire WireAPIMake () const
 Makes the resulting Wire (by BRepAPI_MakeWire)

Handle_ShapeAnalysis_Wire Analyzer () const
 returns field Analyzer (working tool)

const Handle_ShapeExtend_WireData & WireData () const
 returns working wire

const TopoDS_FaceFace () const
 returns working face (Analyzer.Face())

Standard_BooleanModifyTopologyMode ()
 Returns (modifiable) the flag which defines whether it is
allowed to modify topology of the wire during fixing
(adding/removing edges etc.)

Standard_BooleanModifyGeometryMode ()
 Returns (modifiable) the flag which defines whether the Fix..()
methods are allowed to modify geometry of the edges and vertices

Standard_IntegerModifyRemoveLoopMode ()
 Returns (modifiable) the flag which defines whether the Fix..()
methods are allowed to modify RemoveLoop of the edges

Standard_BooleanClosedWireMode ()
 Returns (modifiable) the flag which defines whether the wire
is to be closed (by calling methods like FixDegenerated()
and FixConnected() for last and first edges).

Standard_BooleanPreferencePCurveMode ()
 Returns (modifiable) the flag which defines whether the 2d (True)
representation of the wire is preferable over 3d one (in the
case of ambiguity in FixEdgeCurves).

Standard_BooleanFixGapsByRangesMode ()
 Returns (modifiable) the flag which defines whether tool
tries to fix gaps first by changing curves ranges (i.e.
using intersection, extrema, projections) or not.

Standard_IntegerFixReorderMode ()
Standard_IntegerFixSmallMode ()
Standard_IntegerFixConnectedMode ()
Standard_IntegerFixEdgeCurvesMode ()
Standard_IntegerFixDegeneratedMode ()
Standard_IntegerFixSelfIntersectionMode ()
Standard_IntegerFixLackingMode ()
Standard_IntegerFixGaps3dMode ()
Standard_IntegerFixGaps2dMode ()
 Returns (modifiable) the flag for corresponding Fix..() method
which defines whether this method will be called from the
method APIFix():

Standard_IntegerFixReversed2dMode ()
Standard_IntegerFixRemovePCurveMode ()
Standard_IntegerFixAddPCurveMode ()
Standard_IntegerFixRemoveCurve3dMode ()
Standard_IntegerFixAddCurve3dMode ()
Standard_IntegerFixSeamMode ()
Standard_IntegerFixShiftedMode ()
Standard_IntegerFixSameParameterMode ()
Standard_IntegerFixVertexToleranceMode ()
Standard_IntegerFixNotchedEdgesMode ()
Standard_IntegerFixSelfIntersectingEdgeMode ()
Standard_IntegerFixIntersectingEdgesMode ()
Standard_IntegerFixNonAdjacentIntersectingEdgesMode ()
 Returns (modifiable) the flag for corresponding Fix..() method
which defines whether this method will be called from the
corresponding Fix..() method of the public level:

Standard_Boolean Perform ()
 This method performs all the available fixes.
If some fix is turned on or off explicitly by the Fix..Mode() flag,
this fix is either called or not depending on that flag.
Else (i.e. if flag is default) fix is called depending on the
situation: some fixes are not called or are limited if order of
edges in the wire is not OK, or depending on modes

The order of the fixes and default behaviour of Perform() are:
FixReorder
FixSmall (with lockvtx true if ! TopoMode or if wire is not ordered)
FixConnected (if wire is ordered)
FixEdgeCurves (without FixShifted if wire is not ordered)
FixDegenerated (if wire is ordered)
FixSelfIntersection (if wire is ordered and ClosedMode is True)
FixLacking (if wire is ordered)


Standard_Boolean FixReorder ()
 Performs an analysis and reorders edges in the wire using
class WireOrder

Standard_Integer FixSmall (const Standard_Boolean lockvtx, const Standard_Real precsmall=0.0)
 Applies FixSmall(num) to all edges in the wire

Standard_Boolean FixConnected (const Standard_Real prec=-1.0)
 Applies FixConnected(num) to all edges in the wire
Connection between first and last edges is treated only if
flag ClosedMode is True
If <prec> is -1 then MaxTolerance() is taken.

Standard_Boolean FixEdgeCurves ()
 Groups the fixes dealing with 3d and pcurves of the edges.
The order of the fixes and the default behaviour are:
ShapeFix_Edge::FixReversed2d
ShapeFix_Edge::FixRemovePCurve (only if forced)
ShapeFix_Edge::FixAddPCurve
ShapeFix_Edge::FixRemoveCurve3d (only if forced)
ShapeFix_Edge::FixAddCurve3d
FixSeam,
FixShifted,
ShapeFix_Edge::FixSameParameter

Standard_Boolean FixDegenerated ()
 Applies FixDegenerated(num) to all edges in the wire
Connection between first and last edges is treated only if
flag ClosedMode is True

Standard_Boolean FixSelfIntersection ()
 Applies FixSelfIntersectingEdge(num) and
FixIntersectingEdges(num) to all edges in the wire and
FixIntersectingEdges(num1, num2) for all pairs num1 and num2
such that num2 >= num1 + 2
and removes wrong edges if any

Standard_Boolean FixLacking (const Standard_Boolean force=Standard_False)
 Applies FixLacking(num) to all edges in the wire
Connection between first and last edges is treated only if
flag ClosedMode is True
If <force> is False (default), test for connectness is done with
precision of vertex between edges, else it is done with minimal
value of vertex tolerance and Analyzer.Precision().
Hence, <force> will lead to inserting lacking edges in replacement
of vertices which have big tolerances.

Standard_Boolean FixClosed (const Standard_Real prec=-1.0)
 Fixes a wire to be well closed
It performs FixConnected, FixDegenerated and FixLacking between
last and first edges (independingly on flag ClosedMode and modes
for these fixings)
If <prec> is -1 then MaxTolerance() is taken.

Standard_Boolean FixGaps3d ()
 Fixes gaps between ends of 3d curves on adjacent edges
myPrecision is used to detect the gaps.

Standard_Boolean FixGaps2d ()
 Fixes gaps between ends of pcurves on adjacent edges
myPrecision is used to detect the gaps.

Standard_Boolean FixReorder (const ShapeAnalysis_WireOrder &wi)
 Reorder edges in the wire as determined by WireOrder
that should be filled and computed before

Standard_Boolean FixSmall (const Standard_Integer num, const Standard_Boolean lockvtx, const Standard_Real precsmall)
 Fixes Null Length Edge to be removed
If an Edge has Null Length (regarding preci, or <precsmall>

Standard_Boolean FixConnected (const Standard_Integer num, const Standard_Real prec)
 Fixes connected edges (preceeding and current)
Forces Vertices (end of preceeding-begin of current) to be
the same one
Tests with starting preci or, if given greater, <prec>
If <prec> is -1 then MaxTolerance() is taken.


Standard_Boolean FixSeam (const Standard_Integer num)
 Fixes a seam edge
A Seam edge has two pcurves, one for forward. one for reversed
The forward pcurve must be set as first

NOTE that correct order of pcurves in the seam edge depends on
its orientation (i.e., on orientation of the wire, method of
exploration of edges etc.).
Since wire represented by the ShapeExtend_WireData is always forward
(orientation is accounted by edges), it will work correct if:
1. Wire created from ShapeExtend_WireData with methods
ShapeExtend_WireData::Wire..() is added into the FORWARD face
(orientation can be applied later)
2. Wire is extracted from the face with orientation not composed
with orientation of the face


Standard_Boolean FixShifted ()
 Fixes edges which have pcurves shifted by whole parameter
range on the closed surface (the case may occur if pcurve
of edge was computed by projecting 3d curve, which goes
along the seam).
It compares each two consequent edges and tries to connect them
if distance between ends is near to range of the surface.
It also can detect and fix the case if all pcurves are connected,
but lie out of parametric bounds of the surface.
In addition to FixShifted from ShapeFix_Wire, more
sophisticated check of degenerate points is performed,
and special cases like sphere given by two meridians
are treated.

Standard_Boolean FixDegenerated (const Standard_Integer num)
 Fixes Degenerated Edge
Checks an <num-th> edge or a point between <num>th-1 and <num>th
edges for a singularity on a supporting surface.
If singularity is detected, either adds new degenerated edge
(before <num>th), or makes <num>th edge to be degenerated.

Standard_Boolean FixLacking (const Standard_Integer num, const Standard_Boolean force=Standard_False)
 Fixes Lacking Edge
Test if two adjucent edges are disconnected in 2d (while
connected in 3d), and in that case either increase tolerance
of the vertex or add a new edge (straight in 2d space), in
order to close wire in 2d.
Returns True if edge was added or tolerance was increased.

Standard_Boolean FixNotchedEdges ()
Standard_Boolean FixGap3d (const Standard_Integer num, const Standard_Boolean convert=Standard_False)
 Fixes gap between ends of 3d curves on num-1 and num-th edges.
myPrecision is used to detect the gap.
If convert is True, converts curves to bsplines to bend.

Standard_Boolean FixGap2d (const Standard_Integer num, const Standard_Boolean convert=Standard_False)
 Fixes gap between ends of pcurves on num-1 and num-th edges.
myPrecision is used to detect the gap.
If convert is True, converts pcurves to bsplines to bend.

Standard_Boolean StatusReorder (const ShapeExtend_Status status) const
Standard_Boolean StatusSmall (const ShapeExtend_Status status) const
Standard_Boolean StatusConnected (const ShapeExtend_Status status) const
Standard_Boolean StatusEdgeCurves (const ShapeExtend_Status status) const
Standard_Boolean StatusDegenerated (const ShapeExtend_Status status) const
Standard_Boolean StatusSelfIntersection (const ShapeExtend_Status status) const
Standard_Boolean StatusLacking (const ShapeExtend_Status status) const
Standard_Boolean StatusClosed (const ShapeExtend_Status status) const
Standard_Boolean StatusGaps3d (const ShapeExtend_Status status) const
Standard_Boolean StatusGaps2d (const ShapeExtend_Status status) const
Standard_Boolean StatusNotches (const ShapeExtend_Status status) const
Standard_Boolean StatusRemovedSegment () const
 Querying the status of perfomed API fixing procedures
Each Status..() methods gives information about the last call to
the corresponding Fix..() method of API level:
OK : no problems detected; nothing done
DONE: some problem(s) was(were) detected and successfully fixed
FAIL: some problem(s) cannot be fixed

Standard_Boolean LastFixStatus (const ShapeExtend_Status status) const
 Queries the status of last call to methods Fix... of
advanced level
For details see corresponding methods; universal statuses are:
OK : problem not detected; nothing done
DONE: problem was detected and successfully fixed
FAIL: problem cannot be fixed

Handle_ShapeFix_Edge FixEdgeTool () const
 Returns tool for fixing wires.

Protected Member Functions

void UpdateWire ()
 Updates WireData if some replacements are made
This is necessary for wires (unlike other shape types)
since one edge can present in wire several times

Protected Attributes

Handle_ShapeFix_Edge myFixEdge
Handle_ShapeAnalysis_Wire myAnalyzer
Standard_Boolean myGeomMode
Standard_Boolean myTopoMode
Standard_Boolean myClosedMode
Standard_Boolean myPreference2d
Standard_Boolean myFixGapsByRanges
Standard_Integer myFixReversed2dMode
Standard_Integer myFixRemovePCurveMode
Standard_Integer myFixAddPCurveMode
Standard_Integer myFixRemoveCurve3dMode
Standard_Integer myFixAddCurve3dMode
Standard_Integer myFixSeamMode
Standard_Integer myFixShiftedMode
Standard_Integer myFixSameParameterMode
Standard_Integer myFixVertexToleranceMode
Standard_Integer myFixNotchedEdgesMode
Standard_Integer myFixSelfIntersectingEdgeMode
Standard_Integer myFixIntersectingEdgesMode
Standard_Integer myFixNonAdjacentIntersectingEdgesMode
Standard_Integer myRemoveLoopMode
Standard_Integer myFixReorderMode
Standard_Integer myFixSmallMode
Standard_Integer myFixConnectedMode
Standard_Integer myFixEdgeCurvesMode
Standard_Integer myFixDegeneratedMode
Standard_Integer myFixSelfIntersectionMode
Standard_Integer myFixLackingMode
Standard_Integer myFixGaps3dMode
Standard_Integer myFixGaps2dMode
Standard_Integer myLastFixStatus
Standard_Integer myStatusReorder
Standard_Integer myStatusSmall
Standard_Integer myStatusConnected
Standard_Integer myStatusEdgeCurves
Standard_Integer myStatusDegenerated
Standard_Integer myStatusClosed
Standard_Integer myStatusSelfIntersection
Standard_Integer myStatusLacking
Standard_Integer myStatusGaps3d
Standard_Integer myStatusGaps2d
Standard_Boolean myStatusRemovedSegment
Standard_Integer myStatusNotches

Constructor & Destructor Documentation

ShapeFix_Wire::ShapeFix_Wire ( )
ShapeFix_Wire::ShapeFix_Wire ( const TopoDS_Wire wire,
const TopoDS_Face face,
const Standard_Real  prec 
)

Member Function Documentation

Handle_ShapeAnalysis_Wire ShapeFix_Wire::Analyzer ( ) const
void ShapeFix_Wire::ClearModes ( )
void ShapeFix_Wire::ClearStatuses ( )
Standard_Boolean& ShapeFix_Wire::ClosedWireMode ( )
const TopoDS_Face& ShapeFix_Wire::Face ( ) const
Standard_Integer& ShapeFix_Wire::FixAddCurve3dMode ( )
Standard_Integer& ShapeFix_Wire::FixAddPCurveMode ( )
Standard_Boolean ShapeFix_Wire::FixClosed ( const Standard_Real  prec = -1.0)
Standard_Boolean ShapeFix_Wire::FixConnected ( const Standard_Real  prec = -1.0)
Standard_Boolean ShapeFix_Wire::FixConnected ( const Standard_Integer  num,
const Standard_Real  prec 
)
Standard_Integer& ShapeFix_Wire::FixConnectedMode ( )
Standard_Boolean ShapeFix_Wire::FixDegenerated ( )
Standard_Boolean ShapeFix_Wire::FixDegenerated ( const Standard_Integer  num)
Standard_Integer& ShapeFix_Wire::FixDegeneratedMode ( )
Standard_Boolean ShapeFix_Wire::FixEdgeCurves ( )
Standard_Integer& ShapeFix_Wire::FixEdgeCurvesMode ( )
Handle_ShapeFix_Edge ShapeFix_Wire::FixEdgeTool ( ) const
Standard_Boolean ShapeFix_Wire::FixGap2d ( const Standard_Integer  num,
const Standard_Boolean  convert = Standard_False 
)
Standard_Boolean ShapeFix_Wire::FixGap3d ( const Standard_Integer  num,
const Standard_Boolean  convert = Standard_False 
)
Standard_Boolean ShapeFix_Wire::FixGaps2d ( )
Standard_Integer& ShapeFix_Wire::FixGaps2dMode ( )

-1 default
1 method will be called
0 method will not be called

Standard_Boolean ShapeFix_Wire::FixGaps3d ( )
Standard_Integer& ShapeFix_Wire::FixGaps3dMode ( )
Standard_Boolean& ShapeFix_Wire::FixGapsByRangesMode ( )
Standard_Integer& ShapeFix_Wire::FixIntersectingEdgesMode ( )
Standard_Boolean ShapeFix_Wire::FixLacking ( const Standard_Integer  num,
const Standard_Boolean  force = Standard_False 
)
Standard_Boolean ShapeFix_Wire::FixLacking ( const Standard_Boolean  force = Standard_False)
Standard_Integer& ShapeFix_Wire::FixLackingMode ( )
Standard_Integer& ShapeFix_Wire::FixNonAdjacentIntersectingEdgesMode ( )

-1 default
1 method will be called
0 method will not be called

Standard_Boolean ShapeFix_Wire::FixNotchedEdges ( )
Standard_Integer& ShapeFix_Wire::FixNotchedEdgesMode ( )
Standard_Integer& ShapeFix_Wire::FixRemoveCurve3dMode ( )
Standard_Integer& ShapeFix_Wire::FixRemovePCurveMode ( )
Standard_Boolean ShapeFix_Wire::FixReorder ( )
Standard_Boolean ShapeFix_Wire::FixReorder ( const ShapeAnalysis_WireOrder wi)
Standard_Integer& ShapeFix_Wire::FixReorderMode ( )
Standard_Integer& ShapeFix_Wire::FixReversed2dMode ( )
Standard_Integer& ShapeFix_Wire::FixSameParameterMode ( )
Standard_Boolean ShapeFix_Wire::FixSeam ( const Standard_Integer  num)
Standard_Integer& ShapeFix_Wire::FixSeamMode ( )
Standard_Integer& ShapeFix_Wire::FixSelfIntersectingEdgeMode ( )
Standard_Boolean ShapeFix_Wire::FixSelfIntersection ( )
Standard_Integer& ShapeFix_Wire::FixSelfIntersectionMode ( )
Standard_Boolean ShapeFix_Wire::FixShifted ( )
Standard_Integer& ShapeFix_Wire::FixShiftedMode ( )
Standard_Integer ShapeFix_Wire::FixSmall ( const Standard_Boolean  lockvtx,
const Standard_Real  precsmall = 0.0 
)
Standard_Boolean ShapeFix_Wire::FixSmall ( const Standard_Integer  num,
const Standard_Boolean  lockvtx,
const Standard_Real  precsmall 
)
  • what is smaller), it should be removed
    It can be with no problem if its two vertices are the same
    Else, if lockvtx is False, it is removed and its end vertex
    is put on the preceeding edge
    But if lockvtx is True, this edge must be kept ...
Standard_Integer& ShapeFix_Wire::FixSmallMode ( )
Standard_Integer& ShapeFix_Wire::FixVertexToleranceMode ( )
void ShapeFix_Wire::Init ( const Handle< ShapeAnalysis_Wire > &  saw)
void ShapeFix_Wire::Init ( const TopoDS_Wire wire,
const TopoDS_Face face,
const Standard_Real  prec 
)
Standard_Boolean ShapeFix_Wire::IsLoaded ( ) const
Standard_Boolean ShapeFix_Wire::IsReady ( ) const
Standard_Boolean ShapeFix_Wire::LastFixStatus ( const ShapeExtend_Status  status) const
void ShapeFix_Wire::Load ( const TopoDS_Wire wire)
void ShapeFix_Wire::Load ( const Handle< ShapeExtend_WireData > &  sbwd)
Standard_Boolean& ShapeFix_Wire::ModifyGeometryMode ( )
Standard_Integer& ShapeFix_Wire::ModifyRemoveLoopMode ( )
Standard_Boolean& ShapeFix_Wire::ModifyTopologyMode ( )
Standard_Integer ShapeFix_Wire::NbEdges ( ) const
Standard_Boolean ShapeFix_Wire::Perform ( )
Standard_Boolean& ShapeFix_Wire::PreferencePCurveMode ( )
void ShapeFix_Wire::SetFace ( const TopoDS_Face face)
virtual void ShapeFix_Wire::SetPrecision ( const Standard_Real  prec) [virtual]

Reimplemented from ShapeFix_Root.

void ShapeFix_Wire::SetSurface ( const Handle< Geom_Surface > &  surf)
void ShapeFix_Wire::SetSurface ( const Handle< Geom_Surface > &  surf,
const TopLoc_Location loc 
)
Standard_Boolean ShapeFix_Wire::StatusClosed ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusConnected ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusDegenerated ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusEdgeCurves ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusGaps2d ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusGaps3d ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusLacking ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusNotches ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusRemovedSegment ( ) const
Standard_Boolean ShapeFix_Wire::StatusReorder ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusSelfIntersection ( const ShapeExtend_Status  status) const
Standard_Boolean ShapeFix_Wire::StatusSmall ( const ShapeExtend_Status  status) const
void ShapeFix_Wire::UpdateWire ( ) [protected]
TopoDS_Wire ShapeFix_Wire::Wire ( ) const
TopoDS_Wire ShapeFix_Wire::WireAPIMake ( ) const
const Handle_ShapeExtend_WireData& ShapeFix_Wire::WireData ( ) const

Field Documentation

Handle_ShapeAnalysis_Wire ShapeFix_Wire::myAnalyzer [protected]
Handle_ShapeFix_Edge ShapeFix_Wire::myFixEdge [protected]

The documentation for this class was generated from the following file:
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines