The class represents the Intersection phase of the Boolean Operations algorithm. It performs the pairwise intersection of the sub-shapes of the arguments in the following order:
More...
|
| void | SetNonDestructive () |
| | Sets non-destructive mode automatically if an argument contains a locked sub-shape (see TopoDS_Shape::Locked()).
|
| |
| void | SetIsPrimary (const bool theFlag) |
| |
| bool | IsPrimary () const |
| |
| virtual void | PerformInternal (const Message_ProgressRange &theRange) |
| |
| void | Clear () override |
| | Clears all warnings and errors, and any data cached by the algorithm. User defined options are not cleared.
|
| |
| virtual void | Init (const Message_ProgressRange &theRange) |
| |
| void | Prepare (const Message_ProgressRange &theRange) |
| |
| virtual void | PerformVV (const Message_ProgressRange &theRange) |
| |
| virtual void | PerformVE (const Message_ProgressRange &theRange) |
| |
| void | IntersectVE (const NCollection_IndexedDataMap< occ::handle< BOPDS_PaveBlock >, NCollection_List< int > > &theVEPairs, const Message_ProgressRange &theRange, const bool bAddInterfs=true) |
| | Performs the intersection of the vertices with edges.
|
| |
| void | SplitPaveBlocks (const NCollection_Map< int > &theMEdges, const bool theAddInterfs) |
| | Splits the Pave Blocks of the given edges with the extra paves. The method also builds the shrunk data for the new pave blocks and in case there is no valid range on the pave block, the vertices of this pave block will be united making SD vertex. Parameter <theAddInterfs> defines whether this interference will be added into common table of interferences or not. If some of the Pave Blocks are forming the Common Blocks, the splits of the Pave Blocks will also form a Common Block.
|
| |
| virtual void | PerformVF (const Message_ProgressRange &theRange) |
| |
| virtual void | PerformEE (const Message_ProgressRange &theRange) |
| |
| virtual void | PerformEF (const Message_ProgressRange &theRange) |
| |
| virtual void | PerformFF (const Message_ProgressRange &theRange) |
| |
| void | TreatVerticesEE () |
| |
| void | MakeSDVerticesFF (const NCollection_DataMap< int, NCollection_List< int > > &aDMVLV, NCollection_DataMap< int, int > &theDMNewSD) |
| |
| void | MakeSplitEdges (const Message_ProgressRange &theRange) |
| |
| void | MakeBlocks (const Message_ProgressRange &theRange) |
| |
| void | MakePCurves (const Message_ProgressRange &theRange) |
| |
| int | MakeSDVertices (const NCollection_List< int > &theVertIndices, const bool theAddInterfs=true) |
| |
| void | ProcessDE (const Message_ProgressRange &theRange) |
| |
| void | FillShrunkData (occ::handle< BOPDS_PaveBlock > &thePB) |
| |
| void | FillShrunkData (const TopAbs_ShapeEnum theType1, const TopAbs_ShapeEnum theType2) |
| |
| void | AnalyzeShrunkData (const occ::handle< BOPDS_PaveBlock > &thePB, const IntTools_ShrunkRange &theSR) |
| | Analyzes the results of computation of the valid range for the pave block and in case of error adds the warning status, otherwise saves the valid range in the pave block.
|
| |
| void | PerformNewVertices (NCollection_IndexedDataMap< TopoDS_Shape, BOPDS_CoupleOfPaveBlocks, TopTools_ShapeMapHasher > &theMVCPB, const occ::handle< NCollection_BaseAllocator > &theAllocator, const Message_ProgressRange &theRange, const bool theIsEEIntersection=true) |
| | Performs intersection of new vertices, obtained in E/E and E/F intersections.
|
| |
| bool | CheckFacePaves (const TopoDS_Vertex &theVnew, const NCollection_Map< int > &theMIF) |
| |
| bool | IsExistingVertex (const gp_Pnt &theP, const double theTol, const NCollection_Map< int > &theMVOn) const |
| |
| void | PutPavesOnCurve (const NCollection_Map< int > &theMVOnIn, const NCollection_Map< int > &theMVCommon, BOPDS_Curve &theNC, const NCollection_Map< int > &theMI, const NCollection_Map< int > &theMVEF, NCollection_DataMap< int, double > &theMVTol, NCollection_DataMap< int, NCollection_List< int > > &theDMVLV) |
| | Checks and puts paves from <theMVOnIn> on the curve <theNC>. At that, common (from theMVCommon) and not common vertices are processed differently.
|
| |
| void | FilterPavesOnCurves (const NCollection_DynamicArray< BOPDS_Curve > &theVNC, NCollection_DataMap< int, double > &theMVTol) |
| |
| bool | ExtendedTolerance (const int nV, const NCollection_Map< int > &aMI, double &aTolVExt, const int aType=0) |
| | Depending on the parameter aType it checks whether the vertex nV was created in EE or EF intersections. If so, it increases aTolVExt from tolerance value of vertex to the max distance from vertex nV to the ends of the range of common part. Possible values of aType: 1 - checks only EE; 2 - checks only EF; other - checks both types of intersections.
|
| |
| void | PutBoundPaveOnCurve (const TopoDS_Face &theF1, const TopoDS_Face &theF2, BOPDS_Curve &theNC, NCollection_List< int > &theLBV) |
| |
| bool | IsExistingPaveBlock (const occ::handle< BOPDS_PaveBlock > &thePB, const BOPDS_Curve &theNC, const double theTolR3D, const NCollection_IndexedMap< occ::handle< BOPDS_PaveBlock > > &theMPB, BOPTools_BoxTree &thePBTree, const NCollection_Map< occ::handle< BOPDS_PaveBlock > > &theMPBCommon, occ::handle< BOPDS_PaveBlock > &thePBOut, double &theTolNew) |
| | Checks if the given pave block (created on section curve) coincides with any of the pave blocks of the faces created the section curve.
|
| |
| bool | IsExistingPaveBlock (const occ::handle< BOPDS_PaveBlock > &thePB, const BOPDS_Curve &theNC, const NCollection_List< int > &theLSE, int &theNEOut, double &theTolNew) |
| | Checks if the given pave block (created on section curve) coincides with any of the edges shared between the faces created the section curve.
|
| |
| void | PostTreatFF (NCollection_IndexedDataMap< TopoDS_Shape, BOPDS_CoupleOfPaveBlocks, TopTools_ShapeMapHasher > &theMSCPB, NCollection_DataMap< occ::handle< BOPDS_PaveBlock >, NCollection_List< occ::handle< BOPDS_PaveBlock > > > &theDMExEdges, NCollection_DataMap< int, int > &theDMNewSD, const NCollection_IndexedMap< occ::handle< BOPDS_PaveBlock > > &theMicroPB, const NCollection_IndexedMap< TopoDS_Shape, TopTools_ShapeMapHasher > &theVertsOnRejectedPB, const occ::handle< NCollection_BaseAllocator > &theAllocator, const Message_ProgressRange &theRange) |
| | Treatment of section edges.
|
| |
| void | FindPaveBlocks (const int theV, const int theF, NCollection_List< occ::handle< BOPDS_PaveBlock > > &theLPB) |
| |
| void | FillPaves (const int theV, const int theE, const int theF, const NCollection_List< occ::handle< BOPDS_PaveBlock > > &theLPB, const occ::handle< BOPDS_PaveBlock > &thePB) |
| |
| void | MakeSplitEdge (const int theV, const int theF) |
| |
| void | GetEFPnts (const int nF1, const int nF2, NCollection_List< IntSurf_PntOn2S > &aListOfPnts) |
| |
| void | PutEFPavesOnCurve (const NCollection_DynamicArray< BOPDS_Curve > &theVC, const int theIndex, const NCollection_Map< int > &theMI, const NCollection_Map< int > &theMVEF, NCollection_DataMap< int, double > &theMVTol, NCollection_DataMap< int, NCollection_List< int > > &aDMVLV) |
| | Checks and puts paves created in EF intersections on the curve <theNC>.
|
| |
| void | PutStickPavesOnCurve (const TopoDS_Face &aF1, const TopoDS_Face &aF2, const NCollection_Map< int > &theMI, const NCollection_DynamicArray< BOPDS_Curve > &theVC, const int theIndex, const NCollection_Map< int > &theMVStick, NCollection_DataMap< int, double > &theMVTol, NCollection_DataMap< int, NCollection_List< int > > &aDMVLV) |
| | Puts stick paves on the curve <theNC>
|
| |
| void | GetStickVertices (const int nF1, const int nF2, NCollection_Map< int > &theMVStick, NCollection_Map< int > &theMVEF, NCollection_Map< int > &theMI) |
| | Collects indices of vertices created in all intersections between two faces (<nF1> and <nF2>) to the map <theMVStick>. Also, it collects indices of EF vertices to the <theMVEF> map and indices of all subshapes of these two faces to the <theMI> map.
|
| |
| void | GetFullShapeMap (const int nF, NCollection_Map< int > &theMI) |
| | Collects index nF and indices of all subshapes of the shape with index <nF> to the map <theMI>.
|
| |
| void | RemoveUsedVertices (const NCollection_DynamicArray< BOPDS_Curve > &theVC, NCollection_Map< int > &theMV) |
| | Removes indices of vertices that are already on the curve <theNC> from the map <theMV>. It is used in PutEFPavesOnCurve and PutStickPavesOnCurve methods.
|
| |
| void | PutPaveOnCurve (const int nV, const double theTolR3D, const BOPDS_Curve &theNC, const NCollection_Map< int > &theMI, NCollection_DataMap< int, double > &theMVTol, NCollection_DataMap< int, NCollection_List< int > > &aDMVLV, const int aType=0) |
| | Puts the pave nV on the curve theNC. Parameter aType defines whether to check the pave with extended tolerance: 0 - do not perform the check; other - perform the check (aType goes to ExtendedTolerance).
|
| |
| void | ProcessExistingPaveBlocks (const int theInt, const int theCur, const int nF1, const int nF2, const TopoDS_Edge &theES, const NCollection_IndexedMap< occ::handle< BOPDS_PaveBlock > > &theMPBOnIn, BOPTools_BoxTree &thePBTree, NCollection_IndexedDataMap< TopoDS_Shape, BOPDS_CoupleOfPaveBlocks, TopTools_ShapeMapHasher > &theMSCPB, NCollection_DataMap< TopoDS_Shape, int, TopTools_ShapeMapHasher > &theMVI, NCollection_List< occ::handle< BOPDS_PaveBlock > > &theLPBC, BOPAlgo_DataMapOfPaveBlockListOfInteger &thePBFacesMap, NCollection_Map< occ::handle< BOPDS_PaveBlock > > &theMPB) |
| | Adds the existing edges for intersection with section edges by checking the possible intersection with the faces comparing pre-saved E-F distances with new tolerances.
|
| |
| void | ProcessExistingPaveBlocks (const int theInt, const int nF1, const int nF2, const NCollection_IndexedMap< occ::handle< BOPDS_PaveBlock > > &theMPBOnIn, BOPTools_BoxTree &thePBTree, const NCollection_DataMap< int, NCollection_List< int > > &theDMBV, NCollection_IndexedDataMap< TopoDS_Shape, BOPDS_CoupleOfPaveBlocks, TopTools_ShapeMapHasher > &theMSCPB, NCollection_DataMap< TopoDS_Shape, int, TopTools_ShapeMapHasher > &theMVI, BOPAlgo_DataMapOfPaveBlockListOfInteger &thePBFacesMap, NCollection_Map< occ::handle< BOPDS_PaveBlock > > &theMPB) |
| | Adds the existing edges from the map <theMPBOnIn> which interfere with the vertices from <theMVB> map to the post treatment of section edges.
|
| |
| void | UpdateExistingPaveBlocks (const occ::handle< BOPDS_PaveBlock > &thePB, NCollection_List< occ::handle< BOPDS_PaveBlock > > &theLPB, const BOPAlgo_DataMapOfPaveBlockListOfInteger &thePBFacesMap) |
| | Replaces existing pave block <thePB> with new pave blocks <theLPB>. The list <theLPB> contains images of <thePB> which were created in the post treatment of section edges. Tries to project the new edges on the faces contained in the <thePBFacesMap>.
|
| |
| void | TreatNewVertices (const NCollection_IndexedDataMap< TopoDS_Shape, BOPDS_CoupleOfPaveBlocks, TopTools_ShapeMapHasher > &theMVCPB, NCollection_IndexedDataMap< TopoDS_Shape, NCollection_List< TopoDS_Shape >, TopTools_ShapeMapHasher > &theImages) |
| | Treatment of vertices that were created in EE intersections.
|
| |
| void | PutClosingPaveOnCurve (BOPDS_Curve &aNC) |
| | Put paves on the curve <aBC> in case when <aBC> is closed 3D-curve.
|
| |
| void | PreparePostTreatFF (const int aInt, const int aCur, const occ::handle< BOPDS_PaveBlock > &aPB, NCollection_IndexedDataMap< TopoDS_Shape, BOPDS_CoupleOfPaveBlocks, TopTools_ShapeMapHasher > &aMSCPB, NCollection_DataMap< TopoDS_Shape, int, TopTools_ShapeMapHasher > &aMVI, NCollection_List< occ::handle< BOPDS_PaveBlock > > &aLPB) |
| | Keeps data for post treatment.
|
| |
| void | UpdateFaceInfo (NCollection_DataMap< occ::handle< BOPDS_PaveBlock >, NCollection_List< occ::handle< BOPDS_PaveBlock > > > &theDME, const NCollection_DataMap< int, int > &theDMV, const BOPAlgo_DataMapOfPaveBlockListOfInteger &thePBFacesMap) |
| | Updates the information about faces.
|
| |
| bool | ForceInterfVE (const int nV, occ::handle< BOPDS_PaveBlock > &aPB, NCollection_Map< int > &theMEdges) |
| | Updates tolerance of vertex with index <nV> to make it interfere with edge. Returns TRUE if intersection happened.
|
| |
| bool | ForceInterfVF (const int nV, const int nF) |
| | Updates tolerance of vertex with index <nV> to make it interfere with face with index <nF>
|
| |
| bool | CheckPlanes (const int nF1, const int nF2) const |
| | Checks if there are any common or intersecting sub shapes between two planar faces.
|
| |
| int | SplitEdge (const int nE, const int nV1, const double aT1, const int nV2, const double aT2) |
| | Creates new edge from the edge nE with vertices nV1 and nV2 and returns the index of that new edge in the DS.
|
| |
| void | UpdatePaveBlocks (const NCollection_DataMap< int, int > &aDMNewSD) |
| | Updates pave blocks which have the paves with indices contained in the map <aDMNewSD>.
|
| |
| int | UpdateVertex (const int nV, const double aTolNew) |
| | Updates tolerance vertex nV due to V/E interference. It always creates new vertex if nV is from arguments.
|
| |
| void | UpdatePaveBlocksWithSDVertices () |
| |
| void | UpdateCommonBlocksWithSDVertices () |
| |
| void | UpdateBlocksWithSharedVertices () |
| |
| void | UpdateInterfsWithSDVertices () |
| |
| bool | EstimatePaveOnCurve (const int nV, const BOPDS_Curve &theNC, const double theTolR3D) |
| |
| void | UpdateEdgeTolerance (const int nE, const double aTolNew) |
| |
| void | RemovePaveBlocks (const NCollection_Map< int > &theEdges) |
| |
| void | CorrectToleranceOfSE () |
| |
| void | ReduceIntersectionRange (const int theV1, const int theV2, const int theE, const int theF, double &theTS1, double &theTS2) |
| | Reduce the intersection range using the common ranges of Edge/Edge interferences to avoid creation of close intersection vertices.
|
| |
| bool | GetPBBox (const TopoDS_Edge &theE, const occ::handle< BOPDS_PaveBlock > &thePB, BOPAlgo_DataMapOfPaveBlockBndBox &thePBBox, double &theFirst, double &theLast, double &theSFirst, double &theSLast, Bnd_Box &theBox) |
| | Gets the bounding box for the given Pave Block. If Pave Block has shrunk data it will be used to get the box, and the Shrunk Range (<theSFirst>, <theSLast>). Otherwise the box will be computed using BndLib_Add3dCurve method, and the Shrunk Range will be equal to the PB's range. To avoid re-computation of the bounding box for the same Pave Block it will be saved in the map <thePBBox>. Returns FALSE in case the PB's range is less than the Precision::PConfusion(), otherwise returns TRUE.
|
| |
| void | PutSEInOtherFaces (const Message_ProgressRange &theRange) |
| | Treatment of the possible common zones, not detected by the Face/Face intersection algorithm, by intersection of each section edge with all faces not participated in creation of that section edge. If the intersection says that the section edge is lying on the face it will be added into FaceInfo structure of the face as IN edge and will be used for splitting.
|
| |
| void | CheckSelfInterference () |
| | Analyzes the results of interferences of sub-shapes of the shapes looking for self-interfering entities by the following rules:
|
| |
| void | AddIntersectionFailedWarning (const TopoDS_Shape &theS1, const TopoDS_Shape &theS2) |
| | Adds the warning about failed intersection of pair of sub-shapes.
|
| |
| void | RepeatIntersection (const Message_ProgressRange &theRange) |
| | Repeat intersection of sub-shapes with increased vertices.
|
| |
| void | UpdateVerticesOfCB () |
| | Updates vertices of CommonBlocks with real tolerance of CB.
|
| |
| void | ForceInterfEE (const Message_ProgressRange &theRange) |
| | The method looks for the additional common blocks among pairs of edges with the same bounding vertices.
|
| |
| void | ForceInterfEF (const Message_ProgressRange &theRange) |
| | The method looks for the additional edge/face common blocks among pairs of edge/face having the same vertices.
|
| |
| void | ForceInterfEF (const NCollection_IndexedMap< occ::handle< BOPDS_PaveBlock > > &theMPB, const Message_ProgressRange &theRange, const bool theAddInterf) |
| | Performs intersection of given pave blocks with all faces from arguments.
|
| |
| void | RemoveMicroSectionEdges (NCollection_IndexedDataMap< TopoDS_Shape, BOPDS_CoupleOfPaveBlocks, TopTools_ShapeMapHasher > &theMSCPB, NCollection_IndexedMap< occ::handle< BOPDS_PaveBlock > > &theMicroPB) |
| | When all section edges are created and no increase of the tolerance of vertices put on the section edges is expected, make sure that the created sections have valid range. If any of the section edges do not have valid range, remove them from Face/Face intersection info and from the input <theMSCPB> map. Put such edges into <MicroPB> map for further unification of their vertices in the PostTreatFF method.
|
| |
| void | RemoveMicroEdges () |
| | Check all edges on the micro status and remove the positive ones.
|
| |
| void | fillPIConstants (const double theWhole, BOPAlgo_PISteps &theSteps) const override |
| | Analyzing Progress steps Filling steps for constant operations.
|
| |
| void | fillPISteps (BOPAlgo_PISteps &theSteps) const override |
| | Filling steps for all other operations.
|
| |
| | BOPAlgo_Algo () |
| | Default constructor.
|
| |
| | ~BOPAlgo_Algo () override |
| |
| | BOPAlgo_Algo (const occ::handle< NCollection_BaseAllocator > &theAllocator) |
| |
| virtual void | CheckData () |
| | Checks input data.
|
| |
| virtual void | CheckResult () |
| | Checks the obtained result.
|
| |
| void | analyzeProgress (const double theWhole, BOPAlgo_PISteps &theSteps) const |
| | Fills the values for constant operations - the operations having constant relative running time.
|
| |
| bool | UserBreak (const Message_ProgressScope &thePS) |
| | Adds error to the report if the break signal was caught. Returns true in this case, false otherwise.
|
| |
The class represents the Intersection phase of the Boolean Operations algorithm. It performs the pairwise intersection of the sub-shapes of the arguments in the following order:
- Vertex/Vertex;
- Vertex/Edge;
- Edge/Edge;
- Vertex/Face;
- Edge/Face;
- Face/Face.
The results of intersection are stored into the Data Structure of the algorithm.
Additionally to the options provided by the parent class, the algorithm has the following options:
- Section attributes - allows to customize the intersection of the faces (avoid approximation or building 2d curves);
- Safe processing mode - allows to avoid modification of the input shapes during the operation (by default it is off);
- Gluing options - allows to speed up the calculation on the special cases, in which some sub-shapes are coincide.
The algorithm returns the following Warning statuses:
- BOPAlgo_AlertSelfInterferingShape - in case some of the argument shapes are self-interfering shapes;
- BOPAlgo_AlertTooSmallEdge - in case some edges of the input shapes have no valid range;
- BOPAlgo_AlertNotSplittableEdge - in case some edges of the input shapes has such a small valid range so it cannot be split;
- BOPAlgo_AlertBadPositioning - in case the positioning of the input shapes leads to creation of small edges;
- BOPAlgo_AlertIntersectionOfPairOfShapesFailed - in case intersection of some of the sub-shapes has failed;
- BOPAlgo_AlertAcquiredSelfIntersection - in case some sub-shapes of the argument become connected through other shapes;
- BOPAlgo_AlertBuildingPCurveFailed - in case building 2D curve for some of the edges on the faces has failed.
The algorithm returns the following Error alerts:
- BOPAlgo_AlertTooFewArguments - in case there are no enough arguments to perform the operation;
- BOPAlgo_AlertIntersectionFailed - in case some unexpected error occurred;
- BOPAlgo_AlertNullInputShapes - in case some of the arguments are null shapes.