Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:04:56

0001 // Created on: 1998-06-03
0002 // Created by: data exchange team
0003 // Copyright (c) 1998-1999 Matra Datavision
0004 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0005 //
0006 // This file is part of Open CASCADE Technology software library.
0007 //
0008 // This library is free software; you can redistribute it and/or modify it under
0009 // the terms of the GNU Lesser General Public License version 2.1 as published
0010 // by the Free Software Foundation, with special exception defined in the file
0011 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0012 // distribution for complete text of the license and disclaimer of any warranty.
0013 //
0014 // Alternatively, this file may be used under the terms of Open CASCADE
0015 // commercial license or contractual agreement.
0016 
0017 #ifndef _ShapeFix_Wire_HeaderFile
0018 #define _ShapeFix_Wire_HeaderFile
0019 
0020 #include <Standard.hxx>
0021 
0022 #include <Standard_Integer.hxx>
0023 #include <Standard_Real.hxx>
0024 #include <ShapeFix_Root.hxx>
0025 #include <TopoDS_Wire.hxx>
0026 #include <ShapeExtend_Status.hxx>
0027 class ShapeFix_Edge;
0028 class ShapeAnalysis_Wire;
0029 class TopoDS_Wire;
0030 class TopoDS_Face;
0031 class ShapeExtend_WireData;
0032 class Geom_Surface;
0033 class TopLoc_Location;
0034 class ShapeAnalysis_WireOrder;
0035 
0036 
0037 class ShapeFix_Wire;
0038 DEFINE_STANDARD_HANDLE(ShapeFix_Wire, ShapeFix_Root)
0039 
0040 //! This class provides a set of tools for repairing a wire.
0041 //!
0042 //! These are methods Fix...(), organised in two levels:
0043 //!
0044 //! Level 1: Advanced - each method in this level fixes one separate problem,
0045 //! usually dealing with either single edge or connection of the
0046 //! two adjacent edges. These methods should be used carefully and
0047 //! called in right sequence, because some of them depend on others.
0048 //!
0049 //! Level 2: Public (API) - methods which group several methods of level 1
0050 //! and call them in a proper sequence in order to make some
0051 //! consistent set of fixes for a whole wire. It is possible to
0052 //! control calls to methods of the advanced level from methods of
0053 //! the public level by use of flags Fix..Mode() (see below).
0054 //!
0055 //! Fixes can be made in three ways:
0056 //! 1. Increasing tolerance of an edge or a vertex
0057 //! 2. Changing topology (adding/removing/replacing edge in the wire
0058 //! and/or replacing the vertex in the edge)
0059 //! 3. Changing geometry (shifting vertex or adjusting ends of edge
0060 //! curve to vertices, or recomputing curves of the edge)
0061 //!
0062 //! When fix can be made in more than one way (e.g., either
0063 //! by increasing tolerance or shifting a vertex), it is chosen
0064 //! according to the flags:
0065 //! ModifyTopologyMode - allows modification of the topology.
0066 //! This flag can be set when fixing a wire on
0067 //! the separate (free) face, and should be
0068 //! unset for face which is part of shell.
0069 //! ModifyGeometryMode - allows modification of the geometry.
0070 //!
0071 //! The order of descriptions of Fix() methods in this CDL
0072 //! approximately corresponds to the optimal order of calls.
0073 //!
0074 //! NOTE: most of fixing methods expect edges in the
0075 //! ShapeExtend_WireData to be ordered, so it is necessary to make
0076 //! call to FixReorder() before any other fixes
0077 //!
0078 //! ShapeFix_Wire should be initialized prior to any fix by the
0079 //! following data:
0080 //! a) Wire (ether TopoDS_Wire or ShapeExtend_Wire)
0081 //! b) Face or surface
0082 //! c) Precision
0083 //! d) Maximal tail angle and width
0084 //! This can be done either by calling corresponding methods
0085 //! (LoadWire, SetFace or SetSurface, SetPrecision, SetMaxTailAngle
0086 //! and SetMaxTailWidth), or
0087 //! by loading already filled ShapeAnalisis_Wire with method Load
0088 class ShapeFix_Wire : public ShapeFix_Root
0089 {
0090 
0091 public:
0092 
0093   
0094   //! Empty Constructor, creates clear object with default flags
0095   Standard_EXPORT ShapeFix_Wire();
0096   
0097   //! Create new object with default flags and prepare it for use
0098   //! (Loads analyzer with all the data for the wire and face)
0099   Standard_EXPORT ShapeFix_Wire(const TopoDS_Wire& wire, const TopoDS_Face& face, const Standard_Real prec);
0100   
0101   //! Sets all modes to default
0102   Standard_EXPORT void ClearModes();
0103   
0104   //! Clears all statuses
0105   Standard_EXPORT void ClearStatuses();
0106   
0107   //! Load analyzer with all the data for the wire and face
0108   //! and drops all fixing statuses
0109   Standard_EXPORT void Init (const TopoDS_Wire& wire, const TopoDS_Face& face, const Standard_Real prec);
0110   
0111   //! Load analyzer with all the data already prepared
0112   //! and drops all fixing statuses
0113   //! If analyzer contains face, there is no need to set it
0114   //! by SetFace or SetSurface
0115   Standard_EXPORT void Init (const Handle(ShapeAnalysis_Wire)& saw);
0116   
0117   //! Load data for the wire, and drops all fixing statuses
0118   Standard_EXPORT void Load (const TopoDS_Wire& wire);
0119   
0120   //! Load data for the wire, and drops all fixing statuses
0121   Standard_EXPORT void Load (const Handle(ShapeExtend_WireData)& sbwd);
0122   
0123   //! Set working face for the wire
0124     void SetFace (const TopoDS_Face& face);
0125   
0126   //! Set surface for the wire
0127     void SetSurface (const Handle(Geom_Surface)& surf);
0128   
0129   //! Set surface for the wire
0130     void SetSurface (const Handle(Geom_Surface)& surf, const TopLoc_Location& loc);
0131   
0132   //! Set working precision (to root and to analyzer)
0133   Standard_EXPORT virtual void SetPrecision (const Standard_Real prec) Standard_OVERRIDE;
0134   
0135   //! Sets the maximal allowed angle of the tails in radians.
0136   Standard_EXPORT void SetMaxTailAngle (const Standard_Real theMaxTailAngle);
0137   
0138   //! Sets the maximal allowed width of the tails.
0139   Standard_EXPORT void SetMaxTailWidth (const Standard_Real theMaxTailWidth);
0140   
0141   //! Tells if the wire is loaded
0142     Standard_Boolean IsLoaded() const;
0143   
0144   //! Tells if the wire and face are loaded
0145     Standard_Boolean IsReady() const;
0146   
0147   //! returns number of edges in the working wire
0148   Standard_EXPORT Standard_Integer NbEdges() const;
0149   
0150   //! Makes the resulting Wire (by basic Brep_Builder)
0151     TopoDS_Wire Wire() const;
0152   
0153   //! Makes the resulting Wire (by BRepAPI_MakeWire)
0154     TopoDS_Wire WireAPIMake() const;
0155   
0156   //! returns field Analyzer (working tool)
0157   Handle(ShapeAnalysis_Wire) Analyzer() const;
0158   
0159   //! returns working wire
0160     const Handle(ShapeExtend_WireData)& WireData() const;
0161   
0162   //! returns working face (Analyzer.Face())
0163     const TopoDS_Face& Face() const;
0164   
0165   //! Returns (modifiable) the flag which defines whether it is
0166   //! allowed to modify topology of the wire during fixing
0167   //! (adding/removing edges etc.)
0168     Standard_Boolean& ModifyTopologyMode();
0169   
0170   //! Returns (modifiable) the flag which defines whether the Fix..()
0171   //! methods are allowed to modify geometry of the edges and vertices
0172     Standard_Boolean& ModifyGeometryMode();
0173   
0174   //! Returns (modifiable) the flag which defines whether the Fix..()
0175   //! methods are allowed to modify RemoveLoop of the edges
0176     Standard_Integer& ModifyRemoveLoopMode();
0177   
0178   //! Returns (modifiable) the flag which defines whether the wire
0179   //! is to be closed (by calling methods like FixDegenerated()
0180   //! and FixConnected() for last and first edges).
0181     Standard_Boolean& ClosedWireMode();
0182   
0183   //! Returns (modifiable) the flag which defines whether the 2d (True)
0184   //! representation of the wire is preferable over 3d one (in the
0185   //! case of ambiguity in FixEdgeCurves).
0186     Standard_Boolean& PreferencePCurveMode();
0187   
0188   //! Returns (modifiable) the flag which defines whether tool
0189   //! tries to fix gaps first by changing curves ranges (i.e.
0190   //! using intersection, extrema, projections) or not.
0191     Standard_Boolean& FixGapsByRangesMode();
0192   
0193     Standard_Integer& FixReorderMode();
0194   
0195     Standard_Integer& FixSmallMode();
0196   
0197     Standard_Integer& FixConnectedMode();
0198   
0199     Standard_Integer& FixEdgeCurvesMode();
0200   
0201     Standard_Integer& FixDegeneratedMode();
0202   
0203     Standard_Integer& FixSelfIntersectionMode();
0204   
0205     Standard_Integer& FixLackingMode();
0206   
0207     Standard_Integer& FixGaps3dMode();
0208   
0209   //! Returns (modifiable) the flag for corresponding Fix..() method
0210   //! which defines whether this method will be called from the
0211   //! method APIFix():
0212   //! -1 default
0213   //! 1 method will be called
0214   //! 0 method will not be called
0215     Standard_Integer& FixGaps2dMode();
0216   
0217     Standard_Integer& FixReversed2dMode();
0218   
0219     Standard_Integer& FixRemovePCurveMode();
0220   
0221     Standard_Integer& FixAddPCurveMode();
0222   
0223     Standard_Integer& FixRemoveCurve3dMode();
0224   
0225     Standard_Integer& FixAddCurve3dMode();
0226   
0227     Standard_Integer& FixSeamMode();
0228   
0229     Standard_Integer& FixShiftedMode();
0230   
0231     Standard_Integer& FixSameParameterMode();
0232   
0233     Standard_Integer& FixVertexToleranceMode();
0234   
0235     Standard_Integer& FixNotchedEdgesMode();
0236   
0237     Standard_Integer& FixSelfIntersectingEdgeMode();
0238   
0239     Standard_Integer& FixIntersectingEdgesMode();
0240   
0241   //! Returns (modifiable) the flag for corresponding Fix..() method
0242   //! which defines whether this method will be called from the
0243   //! corresponding Fix..() method of the public level:
0244   //! -1 default
0245   //! 1 method will be called
0246   //! 0 method will not be called
0247     Standard_Integer& FixNonAdjacentIntersectingEdgesMode();
0248   
0249     Standard_Integer& FixTailMode();
0250   
0251   //! This method performs all the available fixes.
0252   //! If some fix is turned on or off explicitly by the Fix..Mode() flag,
0253   //! this fix is either called or not depending on that flag.
0254   //! Else (i.e. if flag is default) fix is called depending on the
0255   //! situation: some fixes are not called or are limited if order of
0256   //! edges in the wire is not OK, or depending on modes
0257   //!
0258   //! The order of the fixes and default behaviour of Perform() are:
0259   //! FixReorder
0260   //! FixSmall (with lockvtx true if ! TopoMode or if wire is not ordered)
0261   //! FixConnected (if wire is ordered)
0262   //! FixEdgeCurves (without FixShifted if wire is not ordered)
0263   //! FixDegenerated (if wire is ordered)
0264   //! FixSelfIntersection (if wire is ordered and ClosedMode is True)
0265   //! FixLacking (if wire is ordered)
0266   Standard_EXPORT Standard_Boolean Perform();
0267   
0268   //! Performs an analysis and reorders edges in the wire using class WireOrder.
0269   //! Flag <theModeBoth> determines the use of miscible mode if necessary.
0270   Standard_EXPORT Standard_Boolean FixReorder(Standard_Boolean theModeBoth = Standard_False);
0271   
0272   //! Applies FixSmall(num) to all edges in the wire
0273   Standard_EXPORT Standard_Integer FixSmall (const Standard_Boolean lockvtx, const Standard_Real precsmall = 0.0);
0274   
0275   //! Applies FixConnected(num) to all edges in the wire
0276   //! Connection between first and last edges is treated only if
0277   //! flag ClosedMode is True
0278   //! If <prec> is -1 then MaxTolerance() is taken.
0279   Standard_EXPORT Standard_Boolean FixConnected (const Standard_Real prec = -1.0);
0280   
0281   //! Groups the fixes dealing with 3d and pcurves of the edges.
0282   //! The order of the fixes and the default behaviour are:
0283   //! ShapeFix_Edge::FixReversed2d
0284   //! ShapeFix_Edge::FixRemovePCurve (only if forced)
0285   //! ShapeFix_Edge::FixAddPCurve
0286   //! ShapeFix_Edge::FixRemoveCurve3d (only if forced)
0287   //! ShapeFix_Edge::FixAddCurve3d
0288   //! FixSeam,
0289   //! FixShifted,
0290   //! ShapeFix_Edge::FixSameParameter
0291   Standard_EXPORT Standard_Boolean FixEdgeCurves();
0292   
0293   //! Applies FixDegenerated(num) to all edges in the wire
0294   //! Connection between first and last edges is treated only if
0295   //! flag ClosedMode is True
0296   Standard_EXPORT Standard_Boolean FixDegenerated();
0297   
0298   //! Applies FixSelfIntersectingEdge(num) and
0299   //! FixIntersectingEdges(num) to all edges in the wire and
0300   //! FixIntersectingEdges(num1, num2) for all pairs num1 and num2
0301   //! such that num2 >= num1 + 2
0302   //! and removes wrong edges if any
0303   Standard_EXPORT Standard_Boolean FixSelfIntersection();
0304   
0305   //! Applies FixLacking(num) to all edges in the wire
0306   //! Connection between first and last edges is treated only if
0307   //! flag ClosedMode is True
0308   //! If <force> is False (default), test for connectness is done with
0309   //! precision of vertex between edges, else it is done with minimal
0310   //! value of vertex tolerance and Analyzer.Precision().
0311   //! Hence, <force> will lead to inserting lacking edges in replacement
0312   //! of vertices which have big tolerances.
0313   Standard_EXPORT Standard_Boolean FixLacking (const Standard_Boolean force = Standard_False);
0314   
0315   //! Fixes a wire to be well closed
0316   //! It performs FixConnected, FixDegenerated and FixLacking between
0317   //! last and first edges (independingly on flag ClosedMode and modes
0318   //! for these fixings)
0319   //! If <prec> is -1 then MaxTolerance() is taken.
0320   Standard_EXPORT Standard_Boolean FixClosed (const Standard_Real prec = -1.0);
0321   
0322   //! Fixes gaps between ends of 3d curves on adjacent edges
0323   //! myPrecision is used to detect the gaps.
0324   Standard_EXPORT Standard_Boolean FixGaps3d();
0325   
0326   //! Fixes gaps between ends of pcurves on adjacent edges
0327   //! myPrecision is used to detect the gaps.
0328   Standard_EXPORT Standard_Boolean FixGaps2d();
0329   
0330   //! Reorder edges in the wire as determined by WireOrder
0331   //! that should be filled and computed before
0332   Standard_EXPORT Standard_Boolean FixReorder (const ShapeAnalysis_WireOrder& wi);
0333   
0334   //! Fixes Null Length Edge to be removed
0335   //! If an Edge has Null Length (regarding preci, or <precsmall>
0336   //! - what is smaller), it should be removed
0337   //! It can be with no problem if its two vertices are the same
0338   //! Else, if lockvtx is False, it is removed and its end vertex
0339   //! is put on the preceding edge
0340   //! But if lockvtx is True, this edge must be kept ...
0341   Standard_EXPORT Standard_Boolean FixSmall (const Standard_Integer num, const Standard_Boolean lockvtx, const Standard_Real precsmall);
0342   
0343   //! Fixes connected edges (preceding and current)
0344   //! Forces Vertices (end of preceding-begin of current) to be
0345   //! the same one
0346   //! Tests with starting preci or, if given greater, <prec>
0347   //! If <prec> is -1 then MaxTolerance() is taken.
0348   Standard_EXPORT Standard_Boolean FixConnected (const Standard_Integer num, const Standard_Real prec);
0349   
0350   //! Fixes a seam edge
0351   //! A Seam edge has two pcurves, one for forward. one for reversed
0352   //! The forward pcurve must be set as first
0353   //!
0354   //! NOTE that correct order of pcurves in the seam edge depends on
0355   //! its orientation (i.e., on orientation of the wire, method of
0356   //! exploration of edges etc.).
0357   //! Since wire represented by the ShapeExtend_WireData is always forward
0358   //! (orientation is accounted by edges), it will work correct if:
0359   //! 1. Wire created from ShapeExtend_WireData with methods
0360   //! ShapeExtend_WireData::Wire..() is added into the FORWARD face
0361   //! (orientation can be applied later)
0362   //! 2. Wire is extracted from the face with orientation not composed
0363   //! with orientation of the face
0364   Standard_EXPORT Standard_Boolean FixSeam (const Standard_Integer num);
0365   
0366   //! Fixes edges which have pcurves shifted by whole parameter
0367   //! range on the closed surface (the case may occur if pcurve
0368   //! of edge was computed by projecting 3d curve, which goes
0369   //! along the seam).
0370   //! It compares each two consequent edges and tries to connect them
0371   //! if distance between ends is near to range of the surface.
0372   //! It also can detect and fix the case if all pcurves are connected,
0373   //! but lie out of parametric bounds of the surface.
0374   //! In addition to FixShifted from ShapeFix_Wire, more
0375   //! sophisticated check of degenerate points is performed,
0376   //! and special cases like sphere given by two meridians
0377   //! are treated.
0378   Standard_EXPORT Standard_Boolean FixShifted();
0379   
0380   //! Fixes Degenerated Edge
0381   //! Checks an <num-th> edge or a point between <num>th-1 and <num>th
0382   //! edges for a singularity on a supporting surface.
0383   //! If singularity is detected, either adds new degenerated edge
0384   //! (before <num>th), or makes <num>th edge to be degenerated.
0385   Standard_EXPORT Standard_Boolean FixDegenerated (const Standard_Integer num);
0386   
0387   //! Fixes Lacking Edge
0388   //! Test if two adjucent edges are disconnected in 2d (while
0389   //! connected in 3d), and in that case either increase tolerance
0390   //! of the vertex or add a new edge (straight in 2d space), in
0391   //! order to close wire in 2d.
0392   //! Returns True if edge was added or tolerance was increased.
0393   Standard_EXPORT Standard_Boolean FixLacking (const Standard_Integer num, const Standard_Boolean force = Standard_False);
0394   
0395   Standard_EXPORT Standard_Boolean FixNotchedEdges();
0396   
0397   //! Fixes gap between ends of 3d curves on num-1 and num-th edges.
0398   //! myPrecision is used to detect the gap.
0399   //! If convert is True, converts curves to bsplines to bend.
0400   Standard_EXPORT Standard_Boolean FixGap3d (const Standard_Integer num, const Standard_Boolean convert = Standard_False);
0401   
0402   //! Fixes gap between ends of pcurves on num-1 and num-th edges.
0403   //! myPrecision is used to detect the gap.
0404   //! If convert is True, converts pcurves to bsplines to bend.
0405   Standard_EXPORT Standard_Boolean FixGap2d (const Standard_Integer num, const Standard_Boolean convert = Standard_False);
0406   
0407   Standard_EXPORT Standard_Boolean FixTails();
0408   
0409     Standard_Boolean StatusReorder (const ShapeExtend_Status status) const;
0410   
0411     Standard_Boolean StatusSmall (const ShapeExtend_Status status) const;
0412   
0413     Standard_Boolean StatusConnected (const ShapeExtend_Status status) const;
0414   
0415     Standard_Boolean StatusEdgeCurves (const ShapeExtend_Status status) const;
0416   
0417     Standard_Boolean StatusDegenerated (const ShapeExtend_Status status) const;
0418   
0419     Standard_Boolean StatusSelfIntersection (const ShapeExtend_Status status) const;
0420   
0421     Standard_Boolean StatusLacking (const ShapeExtend_Status status) const;
0422   
0423     Standard_Boolean StatusClosed (const ShapeExtend_Status status) const;
0424   
0425     Standard_Boolean StatusGaps3d (const ShapeExtend_Status status) const;
0426   
0427     Standard_Boolean StatusGaps2d (const ShapeExtend_Status status) const;
0428   
0429     Standard_Boolean StatusNotches (const ShapeExtend_Status status) const;
0430   
0431   //! Querying the status of performed API fixing procedures
0432   //! Each Status..() methods gives information about the last call to
0433   //! the corresponding Fix..() method of API level:
0434   //! OK  : no problems detected; nothing done
0435   //! DONE: some problem(s) was(were) detected and successfully fixed
0436   //! FAIL: some problem(s) cannot be fixed
0437     Standard_Boolean StatusRemovedSegment() const;
0438   
0439     Standard_Boolean StatusFixTails (const ShapeExtend_Status status) const;
0440   
0441   //! Queries the status of last call to methods Fix... of
0442   //! advanced level
0443   //! For details see corresponding methods; universal statuses are:
0444   //! OK  : problem not detected; nothing done
0445   //! DONE: problem was detected and successfully fixed
0446   //! FAIL: problem cannot be fixed
0447     Standard_Boolean LastFixStatus (const ShapeExtend_Status status) const;
0448   
0449   //! Returns tool for fixing wires.
0450     Handle(ShapeFix_Edge) FixEdgeTool() const;
0451 
0452 
0453 
0454 
0455   DEFINE_STANDARD_RTTIEXT(ShapeFix_Wire,ShapeFix_Root)
0456 
0457 protected:
0458 
0459   
0460   //! Updates WireData if some replacements are made
0461   //! This is necessary for wires (unlike other shape types)
0462   //! since one edge can present in wire several times
0463   Standard_EXPORT void UpdateWire();
0464 
0465   Handle(ShapeFix_Edge) myFixEdge;
0466   Handle(ShapeAnalysis_Wire) myAnalyzer;
0467   Standard_Boolean myGeomMode;
0468   Standard_Boolean myTopoMode;
0469   Standard_Boolean myClosedMode;
0470   Standard_Boolean myPreference2d;
0471   Standard_Boolean myFixGapsByRanges;
0472   Standard_Integer myFixReversed2dMode;
0473   Standard_Integer myFixRemovePCurveMode;
0474   Standard_Integer myFixAddPCurveMode;
0475   Standard_Integer myFixRemoveCurve3dMode;
0476   Standard_Integer myFixAddCurve3dMode;
0477   Standard_Integer myFixSeamMode;
0478   Standard_Integer myFixShiftedMode;
0479   Standard_Integer myFixSameParameterMode;
0480   Standard_Integer myFixVertexToleranceMode;
0481   Standard_Integer myFixNotchedEdgesMode;
0482   Standard_Integer myFixSelfIntersectingEdgeMode;
0483   Standard_Integer myFixIntersectingEdgesMode;
0484   Standard_Integer myFixNonAdjacentIntersectingEdgesMode;
0485   Standard_Integer myFixTailMode;
0486   Standard_Integer myRemoveLoopMode;
0487   Standard_Integer myFixReorderMode;
0488   Standard_Integer myFixSmallMode;
0489   Standard_Integer myFixConnectedMode;
0490   Standard_Integer myFixEdgeCurvesMode;
0491   Standard_Integer myFixDegeneratedMode;
0492   Standard_Integer myFixSelfIntersectionMode;
0493   Standard_Integer myFixLackingMode;
0494   Standard_Integer myFixGaps3dMode;
0495   Standard_Integer myFixGaps2dMode;
0496   Standard_Integer myLastFixStatus;
0497   Standard_Integer myStatusReorder;
0498   Standard_Integer myStatusSmall;
0499   Standard_Integer myStatusConnected;
0500   Standard_Integer myStatusEdgeCurves;
0501   Standard_Integer myStatusDegenerated;
0502   Standard_Integer myStatusClosed;
0503   Standard_Integer myStatusSelfIntersection;
0504   Standard_Integer myStatusLacking;
0505   Standard_Integer myStatusGaps3d;
0506   Standard_Integer myStatusGaps2d;
0507   Standard_Boolean myStatusRemovedSegment;
0508   Standard_Integer myStatusNotches;
0509   Standard_Integer myStatusFixTails;
0510   Standard_Real myMaxTailAngleSine;
0511   Standard_Real myMaxTailWidth;
0512 
0513 
0514 private:
0515 
0516   
0517   //! Detect and fix self-intersecting pcurve of edge <num>.
0518   //! Fix is made by one of two methods:
0519   //! - cut out the self-intersection loop on pcurve (thus
0520   //! producing C0 pcurve). This also increases tolerance of edge
0521   //! in order to satisfy SameParameter requirement.
0522   //! - increase tolerance of the vertex of edge nearest to the
0523   //! self-intersection point so that it comprises that point.
0524   //! The first method is considered only if ModifyGeometryMode
0525   //! is True. In that case, the method which requires less
0526   //! increasing of tolerance is selected.
0527   Standard_EXPORT Standard_Boolean FixSelfIntersectingEdge (const Standard_Integer num);
0528   
0529   //! Test if two consequent edges are intersecting and fix it
0530   //! by increasing of tolerance of vertex between edges,
0531   //! shifting this vertex to the point of intersection,
0532   //! cutting edges to the intersection point.
0533   //! It also can give signal to remove edge if it whole is cut by
0534   //! intersection (if flag ModifyTopologyMode is set).
0535   Standard_EXPORT Standard_Boolean FixIntersectingEdges (const Standard_Integer num);
0536   
0537   //! Tests if two edges <num1> and <num2> are intersecting and
0538   //! fix intersection by increasing of tolerance of vertex
0539   //! nearest to the point of intersection.
0540   Standard_EXPORT Standard_Boolean FixIntersectingEdges (const Standard_Integer num1, const Standard_Integer num2);
0541   
0542   Standard_EXPORT void FixDummySeam (const Standard_Integer num);
0543 
0544 
0545 
0546 };
0547 
0548 
0549 #include <ShapeFix_Wire.lxx>
0550 
0551 
0552 
0553 
0554 
0555 #endif // _ShapeFix_Wire_HeaderFile