1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-08 18:40:55 +03:00

0024157: Parallelization of assembly part of BO

Patch 06

I.1. class Bnd_Box2d
- method:
inline Standard_Real Bnd_Box2d::SquareExtent() const
has been added.
Purpose : The method returns the squared diagonal of the bounding box.

I.3. class BOPCol_BoxBndTree
has been added.
Purpose : The class is the instantiation of the algorithm of unbalanced binary tree
of overlapped bounding boxes 3D.

I.4. class BOPCol_Box2DBndTree
has been added.
Purpose : The class is the instantiation of the algorithm of unbalanced binary tree
of overlapped bounding boxes 2D.

I.5. class BOPAlgo_Algo
- method:
void BOPAlgo_Algo::SetRunParallel(const Standard_Boolean theFlag)
has been added.
Purpose: Set the flag of parallel processing
     if <theFlag> is true  the parallel processing is switched on
     if <theFlag> is false the parallel processing is switched off

- method:
Standard_Boolean BOPAlgo_Algo::RunParallel()const
has been added
Purpose: Returns the flag of parallel processing

II.1. class BOPAlgo_Builder
- method:
void BOPAlgo_Builder::SetRunParallel(const Standard_Boolean theFlag)
has been removed due to I.5.

- method:
Standard_Boolean BOPAlgo_Builder::RunParallel()const
has been removed due to I.5

II.2. class BOPDS_BoxBndTree
has been removed due to I.3

II.3. classes
BOPDS_Iterator,
BOPDS_IteratorSI,
BOPDS_SubIterator
BOPAlgo_PaveFiller,
BOPAlgo_Builder
the calls to BOPDS_BoxBndTree have been changed to
the calls to BOPCol_BoxBndTree
due to I.3

II.4. class BOPAlgo_BuilderFace
- method:
void BOPAlgo_BuilderFace::PerformLoops()
the changes that provide parallel run the  WireSplitter algorithm have been done.

- method:
void BOPAlgo_BuilderFace::PerformAreas()
the classification the grows and holes has been done using
the algorithm of unbalanced binary tree of overlapped bounding boxes

II.5. class BOPAlgo_WireSplitter
- method:
void BOPAlgo_WireSplitter::SplitBlock(const TopoDS_Face& myFace,
			          BOPTools_ConnexityBlock& aCB)
the method is transferred to the static, the signature of the method have been changed

- method:
void BOPAlgo_WireSplitter::MakeWires()
the changes to provide parallel run the SplitBlock algorithm have been done
This commit is contained in:
pkv 2014-01-10 08:29:02 +04:00 committed by bugmaster
parent 15cea4ef7a
commit db8e4b9aa6
24 changed files with 667 additions and 295 deletions

View File

@ -49,10 +49,20 @@ is
Allocator(me) Allocator(me)
returns BaseAllocator from BOPCol; returns BaseAllocator from BOPCol;
---C++: return const & ---C++: return const &
SetRunParallel(me:out;
theFlag:Boolean from Standard);
---Purpose: Set the flag of parallel processing
-- if <theFlag> is true the parallel processing is switched on
-- if <theFlag> is false the parallel processing is switched off
--
RunParallel(me)
returns Boolean from Standard;
---Purpose: Returns the flag of parallel processing
fields fields
myAllocator : BaseAllocator from BOPCol is protected; myAllocator : BaseAllocator from BOPCol is protected;
myErrorStatus : Integer from Standard is protected; myErrorStatus : Integer from Standard is protected;
myWarningStatus : Integer from Standard is protected; myWarningStatus : Integer from Standard is protected;
myRunParallel : Boolean from Standard is protected;
end Algo; end Algo;

View File

@ -23,35 +23,38 @@
// function: // function:
// purpose: // purpose:
//======================================================================= //=======================================================================
BOPAlgo_Algo::BOPAlgo_Algo() BOPAlgo_Algo::BOPAlgo_Algo()
: :
myAllocator(NCollection_BaseAllocator::CommonBaseAllocator()), myAllocator(NCollection_BaseAllocator::CommonBaseAllocator()),
myErrorStatus(1), myErrorStatus(1),
myWarningStatus(0) myWarningStatus(0),
myRunParallel(Standard_False)
{} {}
//======================================================================= //=======================================================================
// function: // function:
// purpose: // purpose:
//======================================================================= //=======================================================================
BOPAlgo_Algo::BOPAlgo_Algo(const Handle(NCollection_BaseAllocator)& theAllocator) BOPAlgo_Algo::BOPAlgo_Algo
(const Handle(NCollection_BaseAllocator)& theAllocator)
: :
myAllocator(theAllocator), myAllocator(theAllocator),
myErrorStatus(1), myErrorStatus(1),
myWarningStatus(0) myWarningStatus(0),
myRunParallel(Standard_False)
{} {}
//======================================================================= //=======================================================================
// function: ~ // function: ~
// purpose: // purpose:
//======================================================================= //=======================================================================
BOPAlgo_Algo::~BOPAlgo_Algo() BOPAlgo_Algo::~BOPAlgo_Algo()
{ {
} }
//======================================================================= //=======================================================================
//function : Allocator //function : Allocator
//purpose : //purpose :
//======================================================================= //=======================================================================
const Handle(NCollection_BaseAllocator)& BOPAlgo_Algo::Allocator()const const Handle(NCollection_BaseAllocator)& BOPAlgo_Algo::Allocator()const
{ {
return myAllocator; return myAllocator;
} }
@ -59,7 +62,7 @@
// function: CheckData // function: CheckData
// purpose: // purpose:
//======================================================================= //=======================================================================
void BOPAlgo_Algo::CheckData() void BOPAlgo_Algo::CheckData()
{ {
myErrorStatus=0; myErrorStatus=0;
} }
@ -67,7 +70,7 @@
// function: CheckResult // function: CheckResult
// purpose: // purpose:
//======================================================================= //=======================================================================
void BOPAlgo_Algo::CheckResult() void BOPAlgo_Algo::CheckResult()
{ {
myErrorStatus=0; myErrorStatus=0;
} }
@ -75,7 +78,7 @@
// function: ErrorStatus // function: ErrorStatus
// purpose: // purpose:
//======================================================================= //=======================================================================
Standard_Integer BOPAlgo_Algo::ErrorStatus()const Standard_Integer BOPAlgo_Algo::ErrorStatus()const
{ {
return myErrorStatus; return myErrorStatus;
} }
@ -83,10 +86,26 @@
// function: WarningStatus // function: WarningStatus
// purpose: // purpose:
//======================================================================= //=======================================================================
Standard_Integer BOPAlgo_Algo::WarningStatus()const Standard_Integer BOPAlgo_Algo::WarningStatus()const
{ {
return myWarningStatus; return myWarningStatus;
} }
//=======================================================================
//function : SetRunParallel
//purpose :
//=======================================================================
void BOPAlgo_Algo::SetRunParallel(const Standard_Boolean theFlag)
{
myRunParallel=theFlag;
}
//=======================================================================
//function : RunParallel
//purpose :
//=======================================================================
Standard_Boolean BOPAlgo_Algo::RunParallel()const
{
return myRunParallel;
}
// myErrorStatus // myErrorStatus
// //
// 1 - object is just initialized // 1 - object is just initialized

View File

@ -102,16 +102,6 @@ is
---Purpose: Returns true if the shape theS has been deleted. ---Purpose: Returns true if the shape theS has been deleted.
returns Boolean from Standard returns Boolean from Standard
is redefined; is redefined;
SetRunParallel(me:out;
theFlag:Boolean from Standard);
---Purpose: Set the flag of parallel processing
-- if <theFlag> is true the parallel processing is switched on
-- if <theFlag> is false the parallel processing is switched off
--
RunParallel(me)
returns Boolean from Standard;
---Purpose: Returns the flag of parallel processing
-- --
-- Debug -- Debug
-- --
@ -241,8 +231,6 @@ fields
-- --
mySplits : DataMapOfShapeListOfShape from BOPCol is protected; mySplits : DataMapOfShapeListOfShape from BOPCol is protected;
myOrigins : DataMapOfShapeShape from BOPCol is protected; myOrigins : DataMapOfShapeShape from BOPCol is protected;
--
myRunParallel : Boolean from Standard is protected;
--
end Builder; end Builder;

View File

@ -36,13 +36,11 @@ BOPAlgo_Builder::BOPAlgo_Builder()
myMapFence(100, myAllocator), myMapFence(100, myAllocator),
myPaveFiller(NULL), myPaveFiller(NULL),
myDS(NULL), myDS(NULL),
//myContext(NULL),
myEntryPoint(0), myEntryPoint(0),
myImages(100, myAllocator), myImages(100, myAllocator),
myShapesSD(100, myAllocator), myShapesSD(100, myAllocator),
mySplits(100, myAllocator), mySplits(100, myAllocator),
myOrigins(100, myAllocator), myOrigins(100, myAllocator)
myRunParallel(Standard_False)
{ {
} }
//======================================================================= //=======================================================================
@ -57,13 +55,11 @@ BOPAlgo_Builder::BOPAlgo_Builder
myMapFence(100, myAllocator), myMapFence(100, myAllocator),
myPaveFiller(NULL), myPaveFiller(NULL),
myDS(NULL), myDS(NULL),
//myContext(NULL),
myEntryPoint(0), myEntryPoint(0),
myImages(100, myAllocator), myImages(100, myAllocator),
myShapesSD(100, myAllocator), myShapesSD(100, myAllocator),
mySplits(100, myAllocator), mySplits(100, myAllocator),
myOrigins(100, myAllocator), myOrigins(100, myAllocator)
myRunParallel(Standard_False)
{ {
} }
//======================================================================= //=======================================================================
@ -93,22 +89,6 @@ void BOPAlgo_Builder::Clear()
myOrigins.Clear(); myOrigins.Clear();
} }
//======================================================================= //=======================================================================
//function : SetRunParallel
//purpose :
//=======================================================================
void BOPAlgo_Builder::SetRunParallel(const Standard_Boolean theFlag)
{
myRunParallel=theFlag;
}
//=======================================================================
//function : RunParallel
//purpose :
//=======================================================================
Standard_Boolean BOPAlgo_Builder::RunParallel()const
{
return myRunParallel;
}
//=======================================================================
//function : AddArgument //function : AddArgument
//purpose : //purpose :
//======================================================================= //=======================================================================

View File

@ -1,19 +1,23 @@
// Created by: Peter KURNEV // Created by: Peter KURNEV
// Copyright (c) 2010-2014 OPEN CASCADE SAS // Copyright (c) 2010-2012 OPEN CASCADE SAS
// Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE // Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
// Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, // Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
// EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// //
// This file is part of Open CASCADE Technology software library. // The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
// //
// This library is free software; you can redistribute it and / or modify it // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// under the terms of the GNU Lesser General Public version 2.1 as published // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
// //
// Alternatively, this file may be used under the terms of Open CASCADE // The Original Code and all software distributed under the License is
// commercial license or contractual agreement. // distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#include <BOPAlgo_BuilderFace.ixx> #include <BOPAlgo_BuilderFace.ixx>
@ -70,12 +74,72 @@ static
static static
void MakeInternalWires(const BOPCol_MapOfShape& , void MakeInternalWires(const BOPCol_MapOfShape& ,
BOPCol_ListOfShape& ); BOPCol_ListOfShape& );
static
void GetWire(const TopoDS_Shape& ,
TopoDS_Shape& );
//
#include <NCollection_UBTreeFiller.hxx>
#include <BOPCol_Box2DBndTree.hxx>
#include <BRepTools.hxx>
#include <TColStd_MapIntegerHasher.hxx>
#include <NCollection_DataMap.hxx>
//
//=======================================================================
//class : BOPAlgo_ShapeBox2D
//purpose : Auxiliary class
//=======================================================================
class BOPAlgo_ShapeBox2D {
public:
BOPAlgo_ShapeBox2D() {
myIsHole=Standard_False;
};
//
~BOPAlgo_ShapeBox2D() {
};
//
void SetShape(const TopoDS_Shape& aS) {
myShape=aS;
};
//
const TopoDS_Shape& Shape()const {
return myShape;
};
//
void SetBox2D(const Bnd_Box2d& aBox2D) {
myBox2D=aBox2D;
};
//
const Bnd_Box2d& Box2D()const {
return myBox2D;
};
//
void SetIsHole(const Standard_Boolean bFlag) {
myIsHole=bFlag;
};
//
Standard_Boolean IsHole()const {
return myIsHole;
};
//
protected:
Standard_Boolean myIsHole;
TopoDS_Shape myShape;
Bnd_Box2d myBox2D;
};
//
typedef NCollection_DataMap\
<Standard_Integer, BOPAlgo_ShapeBox2D, TColStd_MapIntegerHasher> \
BOPAlgo_DataMapOfIntegerShapeBox2D;
//
typedef BOPAlgo_DataMapOfIntegerShapeBox2D::Iterator \
BOPAlgo_DataMapIteratorOfDataMapOfIntegerShapeBox2D;
//
//
//======================================================================= //=======================================================================
//function : //function :
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPAlgo_BuilderFace::BOPAlgo_BuilderFace() BOPAlgo_BuilderFace::BOPAlgo_BuilderFace()
: :
BOPAlgo_BuilderArea() BOPAlgo_BuilderArea()
{ {
@ -85,7 +149,8 @@ static
//function : //function :
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPAlgo_BuilderFace::BOPAlgo_BuilderFace(const Handle(NCollection_BaseAllocator)& theAllocator) BOPAlgo_BuilderFace::BOPAlgo_BuilderFace
(const Handle(NCollection_BaseAllocator)& theAllocator)
: :
BOPAlgo_BuilderArea(theAllocator) BOPAlgo_BuilderArea(theAllocator)
{ {
@ -102,7 +167,7 @@ static
//function : SetFace //function : SetFace
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_BuilderFace::SetFace(const TopoDS_Face& theFace) void BOPAlgo_BuilderFace::SetFace(const TopoDS_Face& theFace)
{ {
myOrientation=theFace.Orientation(); myOrientation=theFace.Orientation();
myFace=theFace; myFace=theFace;
@ -120,7 +185,7 @@ TopAbs_Orientation BOPAlgo_BuilderFace::Orientation()const
//function : Face //function : Face
//purpose : //purpose :
//======================================================================= //=======================================================================
const TopoDS_Face& BOPAlgo_BuilderFace::Face()const const TopoDS_Face& BOPAlgo_BuilderFace::Face()const
{ {
return myFace; return myFace;
} }
@ -128,26 +193,23 @@ TopAbs_Orientation BOPAlgo_BuilderFace::Orientation()const
//function : CheckData //function : CheckData
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_BuilderFace::CheckData() void BOPAlgo_BuilderFace::CheckData()
{ {
myErrorStatus=0; myErrorStatus=0;
// //
if (myContext.IsNull()) {
//myErrorStatus=11;// Null Context
//return;
myContext = new BOPInt_Context;
}
//
if (myFace.IsNull()) { if (myFace.IsNull()) {
myErrorStatus=12;// Null face generix myErrorStatus=12;// Null face generix
return; return;
} }
if (myContext.IsNull()) {
myContext = new BOPInt_Context;
}
} }
//======================================================================= //=======================================================================
//function : Perform //function : Perform
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_BuilderFace::Perform() void BOPAlgo_BuilderFace::Perform()
{ {
myErrorStatus=0; myErrorStatus=0;
// //
@ -180,7 +242,7 @@ TopAbs_Orientation BOPAlgo_BuilderFace::Orientation()const
//function :PerformShapesToAvoid //function :PerformShapesToAvoid
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_BuilderFace::PerformShapesToAvoid() void BOPAlgo_BuilderFace::PerformShapesToAvoid()
{ {
Standard_Boolean bFound; Standard_Boolean bFound;
Standard_Integer i, iCnt, aNbV, aNbE; Standard_Integer i, iCnt, aNbV, aNbE;
@ -256,7 +318,7 @@ TopAbs_Orientation BOPAlgo_BuilderFace::Orientation()const
//function : PerformLoops //function : PerformLoops
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_BuilderFace::PerformLoops() void BOPAlgo_BuilderFace::PerformLoops()
{ {
myErrorStatus=0; myErrorStatus=0;
// //
@ -284,6 +346,7 @@ TopAbs_Orientation BOPAlgo_BuilderFace::Orientation()const
} }
// //
aWSp.SetWES(aWES); aWSp.SetWES(aWES);
aWSp.SetRunParallel(myRunParallel);
aWSp.Perform(); aWSp.Perform();
iErr=aWSp.ErrorStatus(); iErr=aWSp.ErrorStatus();
if (iErr) { if (iErr) {
@ -372,127 +435,173 @@ TopAbs_Orientation BOPAlgo_BuilderFace::Orientation()const
myLoopsInternal.Append(aW); myLoopsInternal.Append(aW);
}//for (; aItM.More(); aItM.Next()) { }//for (; aItM.More(); aItM.Next()) {
} }
//
//======================================================================= //=======================================================================
//function : PerformAreas //function : PerformAreas
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_BuilderFace::PerformAreas() void BOPAlgo_BuilderFace::PerformAreas()
{ {
myErrorStatus=0;
//
Standard_Boolean bIsGrowth, bIsHole; Standard_Boolean bIsGrowth, bIsHole;
Standard_Integer k,aNbHoles;
Standard_Real aTol; Standard_Real aTol;
TopoDS_Shape anInfinitePointShape;
//
BOPCol_ListOfShape aNewFaces, aHoleWires;
BOPCol_DataMapOfShapeShape aInOutMap;
BOPCol_DataMapOfShapeListOfShape aMSH;
BOPCol_IndexedMapOfShape aMHE;
BOPCol_DataMapIteratorOfDataMapOfShapeListOfShape aItMSH;
BOPCol_ListIteratorOfListOfShape aIt1, aIt2;
BRep_Builder aBB;
Handle(Geom_Surface) aS;
TopLoc_Location aLoc; TopLoc_Location aLoc;
Handle(Geom_Surface) aS;
BRep_Builder aBB;
TopoDS_Face aFace;
//
BOPCol_ListIteratorOfListOfInteger aItLI;
BOPCol_IndexedMapOfShape aMHE;
BOPCol_DataMapOfShapeShape aInOutMap;
BOPCol_DataMapIteratorOfDataMapOfShapeShape aItDMSS;
BOPCol_DataMapOfShapeListOfShape aMSH;
BOPCol_DataMapIteratorOfDataMapOfShapeListOfShape aItMSH;
BOPCol_ListIteratorOfListOfShape aIt1;
BOPAlgo_DataMapOfIntegerShapeBox2D aDMISB(100);
BOPAlgo_DataMapIteratorOfDataMapOfIntegerShapeBox2D aItDMISB;
//
BOPCol_Box2DBndTreeSelector aSelector;
BOPCol_Box2DBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box2d> aTreeFiller(aBBTree);
//
myErrorStatus=0;
// //
aTol=BRep_Tool::Tolerance(myFace); aTol=BRep_Tool::Tolerance(myFace);
aS=BRep_Tool::Surface(myFace, aLoc); aS=BRep_Tool::Surface(myFace, aLoc);
// //
myAreas.Clear(); myAreas.Clear();
// //
// Draft faces [aNewFaces] // 1. Growthes and Holes -> aDMISB: [Index/ShapeBox2D]
aIt1.Initialize(myLoops); aIt1.Initialize(myLoops);
for ( ; aIt1.More(); aIt1.Next()) { for (k=0 ; aIt1.More(); aIt1.Next(), ++k) {
Bnd_Box2d aBox2D;
//
const TopoDS_Shape& aWire=aIt1.Value(); const TopoDS_Shape& aWire=aIt1.Value();
// //
aBB.MakeFace(aFace, aS, aLoc, aTol);
aBB.Add (aFace, aWire);
BRepTools::AddUVBounds(aFace, aBox2D);
//
bIsGrowth=IsGrowthWire(aWire, aMHE); bIsGrowth=IsGrowthWire(aWire, aMHE);
if (bIsGrowth) { if (bIsGrowth) {
// make a growth face from a wire bIsHole=Standard_False;
TopoDS_Face aFace;
aBB.MakeFace(aFace, aS, aLoc, aTol);
aBB.Add (aFace, aWire);
//
aNewFaces.Append (aFace);
} }
else{ else{
// check if a wire is a hole // check if a wire is a hole
//XX
TopoDS_Face aFace;
aBB.MakeFace(aFace, aS, aLoc, aTol);
aBB.Add (aFace, aWire);
//
IntTools_FClass2d& aClsf=myContext->FClass2d(aFace); IntTools_FClass2d& aClsf=myContext->FClass2d(aFace);
aClsf.Init(aFace, aTol); aClsf.Init(aFace, aTol);
// //
bIsHole=aClsf.IsHole(); bIsHole=aClsf.IsHole();
//
//bIsHole=BOPTools_AlgoTools::IsHole(aWire, myFace);
//XX
if (bIsHole) { if (bIsHole) {
aHoleWires.Append(aWire);
BOPTools::MapShapes(aWire, TopAbs_EDGE, aMHE); BOPTools::MapShapes(aWire, TopAbs_EDGE, aMHE);
//
bIsHole=Standard_True;
} }
else { else {
// make a growth face from a wire bIsHole=Standard_False;
TopoDS_Face aFace;
aBB.MakeFace(aFace, aS, aLoc, aTol);
aBB.Add (aFace, aWire);
//
aNewFaces.Append (aFace);
} }
} }
//
BOPAlgo_ShapeBox2D aSB2D;
//
aSB2D.SetShape(aFace);
aSB2D.SetBox2D(aBox2D);
aSB2D.SetIsHole(bIsHole);
//
aDMISB.Bind(k, aSB2D);
}
//
// 2. Prepare TreeFiller
aItDMISB.Initialize(aDMISB);
for (; aItDMISB.More(); aItDMISB.Next()) {
k=aItDMISB.Key();
const BOPAlgo_ShapeBox2D& aSB2D=aItDMISB.Value();
//
bIsHole=aSB2D.IsHole();
if (bIsHole) {
const Bnd_Box2d& aBox2D=aSB2D.Box2D();
aTreeFiller.Add(k, aBox2D);
}
} }
// //
// 2. Find outer growth shell that is most close to each hole shell // 3. Shake TreeFiller
aIt2.Initialize(aHoleWires); aTreeFiller.Fill();
for (; aIt2.More(); aIt2.Next()) { //
const TopoDS_Shape& aHole = aIt2.Value(); // 4. Find outer growth shell that is most close
// to each hole shell
aItDMISB.Initialize(aDMISB);
for (; aItDMISB.More(); aItDMISB.Next()) {
k=aItDMISB.Key();
const BOPAlgo_ShapeBox2D& aSB2D=aItDMISB.Value();
bIsHole=aSB2D.IsHole();
if (bIsHole) {
continue;
}
// //
aIt1.Initialize(aNewFaces); const Bnd_Box2d& aBox2DF=aSB2D.Box2D();
for ( ; aIt1.More(); aIt1.Next()) { const TopoDS_Shape aF=aSB2D.Shape();
const TopoDS_Shape& aF=aIt1.Value(); //
aSelector.Clear();
aSelector.SetBox(aBox2DF);
//
aNbHoles=aBBTree.Select(aSelector);
//
const BOPCol_ListOfInteger& aLI=aSelector.Indices();
//
aItLI.Initialize(aLI);
for (; aItLI.More(); aItLI.Next()) {
k=aItLI.Value();
const BOPAlgo_ShapeBox2D& aSB2Dk=aDMISB.Find(k);
const TopoDS_Shape& aHole=aSB2Dk.Shape();
// //
if (!IsInside(aHole, aF, myContext)){ if (!IsInside(aHole, aF, myContext)){
continue; continue;
} }
// //
if ( aInOutMap.IsBound (aHole)){ if (aInOutMap.IsBound (aHole)){
const TopoDS_Shape& aF2=aInOutMap(aHole); const TopoDS_Shape& aF2=aInOutMap(aHole);
if (IsInside(aF, aF2, myContext)) { if (IsInside(aF, aF2, myContext)) {
aInOutMap.UnBind(aHole); aInOutMap.UnBind(aHole);
aInOutMap.Bind (aHole, aF); aInOutMap.Bind (aHole, aF);
} }
} }
else{ else{
aInOutMap.Bind (aHole, aF); aInOutMap.Bind(aHole, aF);
} }
} }
// }
// Add aHole to a map Face/ListOfHoles [aMSH]
if (aInOutMap.IsBound(aHole)){
const TopoDS_Shape& aF=aInOutMap(aHole);
if (aMSH.IsBound(aF)) {
BOPCol_ListOfShape& aLH=aMSH.ChangeFind(aF);
aLH.Append(aHole);
}
else {
BOPCol_ListOfShape aLH;
aLH.Append(aHole);
aMSH.Bind(aF, aLH);
}
}
}// for (; aIt2.More(); aIt2.Next())
// //
// 3. Add aHoles to Faces // 5. Map [Face/Holes] -> aMSH
aItDMSS.Initialize(aInOutMap);
for (; aItDMSS.More(); aItDMSS.Next()) {
const TopoDS_Shape& aHole=aItDMSS.Key();
const TopoDS_Shape& aF=aItDMSS.Value();
//
if (aMSH.IsBound(aF)) {
BOPCol_ListOfShape& aLH=aMSH.ChangeFind(aF);
aLH.Append(aHole);
}
else {
BOPCol_ListOfShape aLH;
aLH.Append(aHole);
aMSH.Bind(aF, aLH);
}
}
//
// 6. Add aHoles to Faces,
aItMSH.Initialize(aMSH); aItMSH.Initialize(aMSH);
for (; aItMSH.More(); aItMSH.Next()) { for (; aItMSH.More(); aItMSH.Next()) {
TopoDS_Face aF=(*(TopoDS_Face *)(&aItMSH.Key())); TopoDS_Face aF=(*(TopoDS_Face *)(&aItMSH.Key()));
// //
const BOPCol_ListOfShape& aLH=aItMSH.Value(); const BOPCol_ListOfShape& aLH=aItMSH.Value();
aIt2.Initialize(aLH); aIt1.Initialize(aLH);
for (; aIt2.More(); aIt2.Next()) { for (; aIt1.More(); aIt1.Next()) {
const TopoDS_Shape& aHole = aIt2.Value(); TopoDS_Shape aWHole;
aBB.Add (aF, aHole); //
const TopoDS_Shape& aFHole=aIt1.Value();
GetWire(aFHole, aWHole);
aBB.Add (aF, aWHole);
} }
// //
// update classifier // update classifier
@ -501,20 +610,38 @@ TopAbs_Orientation BOPAlgo_BuilderFace::Orientation()const
aClsf.Init(aF, aTol); aClsf.Init(aF, aTol);
} }
// //
// These aNewFaces are draft faces that // 7. Fill myAreas
// do not contain any internal shapes // NB:These aNewFaces are draft faces that
// do not contain any internal shapes
aItDMISB.Initialize(aDMISB);
for (; aItDMISB.More(); aItDMISB.Next()) {
const BOPAlgo_ShapeBox2D& aSB2D=aItDMISB.Value();
bIsHole=aSB2D.IsHole();
if (!bIsHole) {
const TopoDS_Shape aF=aSB2D.Shape();
myAreas.Append(aF);
}
}
}
//=======================================================================
//function : GetWire
//purpose :
//=======================================================================
void GetWire(const TopoDS_Shape& aF, TopoDS_Shape& aW)
{
TopoDS_Shape aWx;
TopoDS_Iterator aIt;
// //
aIt1.Initialize(aNewFaces); aIt.Initialize(aF);
for ( ; aIt1.More(); aIt1.Next()) { for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aF=aIt1.Value(); aW=aIt.Value();
myAreas.Append(aF);
} }
} }
//======================================================================= //=======================================================================
//function : PerformInternalShapes //function : PerformInternalShapes
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_BuilderFace::PerformInternalShapes() void BOPAlgo_BuilderFace::PerformInternalShapes()
{ {
myErrorStatus=0; myErrorStatus=0;
// //

View File

@ -252,6 +252,7 @@ void BOPAlgo_Builder::BuildSplitFaces()
BOPAlgo_BuilderFace& aBF=aVBF.Append1(); BOPAlgo_BuilderFace& aBF=aVBF.Append1();
aBF.SetFace(aF); aBF.SetFace(aF);
aBF.SetShapes(aLE); aBF.SetShapes(aLE);
aBF.SetRunParallel(myRunParallel);
// //
}// for (i=0; i<aNbS; ++i) { }// for (i=0; i<aNbS; ++i) {
// //

View File

@ -18,7 +18,9 @@
#include <BOPAlgo_Builder.hxx> #include <BOPAlgo_Builder.hxx>
#include <NCollection_IncAllocator.hxx> #include <NCollection_IncAllocator.hxx>
#include <NCollection_UBTreeFiller.hxx>
#include <Bnd_Box.hxx>
#include <TopAbs_State.hxx> #include <TopAbs_State.hxx>
#include <TopoDS.hxx> #include <TopoDS.hxx>
@ -38,31 +40,27 @@
#include <BRep_Builder.hxx> #include <BRep_Builder.hxx>
#include <BRepTools.hxx> #include <BRepTools.hxx>
#include <BRepClass3d_SolidClassifier.hxx> #include <BRepClass3d_SolidClassifier.hxx>
#include <BRepBndLib.hxx>
// //
#include <BOPCol_IndexedMapOfShape.hxx> #include <BOPCol_IndexedMapOfShape.hxx>
#include <BOPCol_MapOfShape.hxx> #include <BOPCol_MapOfShape.hxx>
#include <BOPCol_IndexedDataMapOfShapeListOfShape.hxx> #include <BOPCol_IndexedDataMapOfShapeListOfShape.hxx>
#include <BOPCol_ListOfShape.hxx> #include <BOPCol_ListOfShape.hxx>
#include <BOPCol_BoxBndTree.hxx>
#include <BOPCol_ListOfInteger.hxx>
#include <BOPCol_DataMapOfIntegerShape.hxx>
//
#include <BOPInt_Context.hxx>
// //
#include <BOPDS_DS.hxx> #include <BOPDS_DS.hxx>
#include <BOPDS_ShapeInfo.hxx> #include <BOPDS_ShapeInfo.hxx>
// //
#include <BOPTools.hxx> #include <BOPTools.hxx>
#include <BOPTools_AlgoTools.hxx> #include <BOPTools_AlgoTools.hxx>
//
#include <BOPTools_MapOfSet.hxx> #include <BOPTools_MapOfSet.hxx>
#include <BOPTools_Set.hxx> #include <BOPTools_Set.hxx>
// //
#include <BOPAlgo_BuilderSolid.hxx> #include <BOPAlgo_BuilderSolid.hxx>
#include <BOPCol_DataMapOfIntegerShape.hxx>
#include <Bnd_Box.hxx>
#include <BRepBndLib.hxx>
#include <NCollection_UBTreeFiller.hxx>
#include <BOPDS_BoxBndTree.hxx>
#include <BOPCol_ListOfInteger.hxx>
#include <BOPInt_Context.hxx>
#include <BOPAlgo_Builder_2Cnt.hxx> #include <BOPAlgo_Builder_2Cnt.hxx>
@ -218,7 +216,7 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
}//for (i=0; i<aNbS; ++i) { }//for (i=0; i<aNbS; ++i) {
// //
// 1.2. Prepare TreeFiller // 1.2. Prepare TreeFiller
BOPDS_BoxBndTree aBBTree; BOPCol_BoxBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree); NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
// //
aItDMISB.Initialize(aDMISB); aItDMISB.Initialize(aDMISB);
@ -250,7 +248,7 @@ void BOPAlgo_Builder::FillIn3DParts(BOPCol_DataMapOfShapeListOfShape& theInParts
BOPCol_ListOfShape aLIF(aAlr1); BOPCol_ListOfShape aLIF(aAlr1);
BOPCol_IndexedMapOfShape aMF(100, aAlr1); BOPCol_IndexedMapOfShape aMF(100, aAlr1);
BOPCol_IndexedDataMapOfShapeListOfShape aMEF(100, aAlr1); BOPCol_IndexedDataMapOfShapeListOfShape aMEF(100, aAlr1);
BOPDS_BoxBndTreeSelector aSelector; BOPCol_BoxBndTreeSelector aSelector;
Bnd_Box aBoxS; Bnd_Box aBoxS;
// //
const TopoDS_Shape& aS=aSI.Shape(); const TopoDS_Shape& aS=aSI.Shape();

View File

@ -23,6 +23,8 @@
#include <Bnd_Box.hxx> #include <Bnd_Box.hxx>
#include <GeomAPI_ProjectPointOnCurve.hxx>
#include <TopoDS_Edge.hxx> #include <TopoDS_Edge.hxx>
#include <TopoDS_Vertex.hxx> #include <TopoDS_Vertex.hxx>
#include <TopoDS_Compound.hxx> #include <TopoDS_Compound.hxx>
@ -42,6 +44,7 @@
#include <BOPCol_DataMapOfShapeInteger.hxx> #include <BOPCol_DataMapOfShapeInteger.hxx>
#include <BOPCol_DataMapOfIntegerShape.hxx> #include <BOPCol_DataMapOfIntegerShape.hxx>
#include <BOPCol_IndexedDataMapOfShapeBox.hxx> #include <BOPCol_IndexedDataMapOfShapeBox.hxx>
#include <BOPCol_BoxBndTree.hxx>
// //
#include <BOPInt_Context.hxx> #include <BOPInt_Context.hxx>
#include <BOPInt_ShrunkRange.hxx> #include <BOPInt_ShrunkRange.hxx>
@ -56,16 +59,15 @@
#include <BOPDS_VectorOfInterfEE.hxx> #include <BOPDS_VectorOfInterfEE.hxx>
#include <BOPDS_Interf.hxx> #include <BOPDS_Interf.hxx>
#include <BOPDS_Pave.hxx> #include <BOPDS_Pave.hxx>
#include <BOPDS_BoxBndTree.hxx> //
#include <BOPAlgo_Tools.hxx> #include <BOPAlgo_Tools.hxx>
#include <GeomAPI_ProjectPointOnCurve.hxx>
//======================================================================= //=======================================================================
// function: PerformEE // function: PerformEE
// purpose: // purpose:
//======================================================================= //=======================================================================
void BOPAlgo_PaveFiller::PerformEE() void BOPAlgo_PaveFiller::PerformEE()
{ {
Standard_Boolean bJustAdd, bOrder; Standard_Boolean bJustAdd, bOrder;
Standard_Integer i, iX, iSize, nE1, nE2, aDiscretize; Standard_Integer i, iX, iSize, nE1, nE2, aDiscretize;
@ -385,9 +387,9 @@
//function : PerformVertices //function : PerformVertices
//purpose : //purpose :
//======================================================================= //=======================================================================
Standard_Integer BOPAlgo_PaveFiller::PerformVerticesEE Standard_Integer BOPAlgo_PaveFiller::PerformVerticesEE
(BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& theMVCPB, (BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& theMVCPB,
Handle(NCollection_BaseAllocator)& theAllocator) Handle(NCollection_BaseAllocator)& theAllocator)
{ {
Standard_Integer aNbV, iRet; Standard_Integer aNbV, iRet;
// //
@ -520,9 +522,9 @@
//function : TreatNewVertices //function : TreatNewVertices
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_PaveFiller::TreatNewVertices( void BOPAlgo_PaveFiller::TreatNewVertices
const BOPCol_IndexedDataMapOfShapeInteger& aMapVI, (const BOPCol_IndexedDataMapOfShapeInteger& aMapVI,
BOPCol_IndexedDataMapOfShapeListOfShape& myImages) BOPCol_IndexedDataMapOfShapeListOfShape& myImages)
{ {
Standard_Integer j, i, aNbV, aNbVSD; Standard_Integer j, i, aNbV, aNbVSD;
Standard_Real aTol; Standard_Real aTol;
@ -535,8 +537,8 @@
BOPCol_DataMapOfIntegerShape aMIS; BOPCol_DataMapOfIntegerShape aMIS;
BOPCol_IndexedDataMapOfShapeBox aMSB; BOPCol_IndexedDataMapOfShapeBox aMSB;
// //
BOPDS_BoxBndTreeSelector aSelector; BOPCol_BoxBndTreeSelector aSelector;
BOPDS_BoxBndTree aBBTree; BOPCol_BoxBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree); NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
// //
aNbV = aMapVI.Extent(); aNbV = aMapVI.Extent();
@ -658,7 +660,7 @@
//function : FillShrunkData //function : FillShrunkData
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_PaveFiller::FillShrunkData(Handle(BOPDS_PaveBlock)& thePB) void BOPAlgo_PaveFiller::FillShrunkData(Handle(BOPDS_PaveBlock)& thePB)
{ {
Standard_Integer nE, nV1, nV2, iErr; Standard_Integer nE, nV1, nV2, iErr;
Standard_Real aT1, aT2, aTS1, aTS2; Standard_Real aT1, aT2, aTS1, aTS2;

View File

@ -1,16 +1,20 @@
-- Created by: Peter KURNEV -- Created by: Peter KURNEV
-- Copyright (c) 1999-2014 OPEN CASCADE SAS -- Copyright (c) 1999-2012 OPEN CASCADE SAS
-- --
-- This file is part of Open CASCADE Technology software library. -- The content of this file is subject to the Open CASCADE Technology Public
-- License Version 6.5 (the "License"). You may not use the content of this file
-- except in compliance with the License. Please obtain a copy of the License
-- at http://www.opencascade.org and read it completely before using this file.
-- --
-- This library is free software; you can redistribute it and / or modify it -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-- under the terms of the GNU Lesser General Public version 2.1 as published -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
-- by the Free Software Foundation, with special exception defined in the file
-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-- distribution for complete text of the license and disclaimer of any warranty.
-- --
-- Alternatively, this file may be used under the terms of Open CASCADE -- The Original Code and all software distributed under the License is
-- commercial license or contractual agreement. -- distributed on an "AS IS" basis, without warranty of any kind, and the
-- Initial Developer hereby disclaims all such warranties, including without
-- limitation, any warranties of merchantability, fitness for a particular
-- purpose or non-infringement. Please see the License for the specific terms
-- and conditions governing the rights and limitations under the License.
class WireSplitter from BOPAlgo class WireSplitter from BOPAlgo
inherits Algo from BOPAlgo inherits Algo from BOPAlgo
@ -19,6 +23,7 @@ class WireSplitter from BOPAlgo
uses uses
Wire from TopoDS, Wire from TopoDS,
Face from TopoDS,
BaseAllocator from BOPCol, BaseAllocator from BOPCol,
ListOfShape from BOPCol, ListOfShape from BOPCol,
WireEdgeSet from BOPAlgo, WireEdgeSet from BOPAlgo,
@ -60,12 +65,12 @@ is
is protected; is protected;
MakeWires(me:out) MakeWires(me:out)
is protected; is protected;
SplitBlock(me:out; SplitBlock(myclass;
theCB:out ConnexityBlock from BOPTools) theF :Face from TopoDS;
is protected; theCB:out ConnexityBlock from BOPTools);
fields fields
myWES : PWireEdgeSet from BOPAlgo is protected; myWES : PWireEdgeSet from BOPAlgo is protected;
myLCB : ListOfConnexityBlock from BOPTools is protected; myLCB : ListOfConnexityBlock from BOPTools is protected;

View File

@ -1,16 +1,21 @@
// Created by: Peter KURNEV // Created by: Peter KURNEV
// Copyright (c) 1999-2014 OPEN CASCADE SAS // Copyright (c) 1999-2012 OPEN CASCADE SAS
// //
// This file is part of Open CASCADE Technology software library. // The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
// //
// This library is free software; you can redistribute it and / or modify it // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// under the terms of the GNU Lesser General Public version 2.1 as published // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
// //
// Alternatively, this file may be used under the terms of Open CASCADE // The Original Code and all software distributed under the License is
// commercial license or contractual agreement. // distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#include <BOPAlgo_WireSplitter.ixx> #include <BOPAlgo_WireSplitter.ixx>
@ -27,6 +32,8 @@
#include <BOPCol_IndexedMapOfShape.hxx> #include <BOPCol_IndexedMapOfShape.hxx>
#include <BOPCol_MapOfShape.hxx> #include <BOPCol_MapOfShape.hxx>
#include <BOPCol_IndexedDataMapOfShapeListOfShape.hxx> #include <BOPCol_IndexedDataMapOfShapeListOfShape.hxx>
#include <BOPCol_TBB.hxx>
#include <BOPCol_NCVector.hxx>
#include <BOPTools.hxx> #include <BOPTools.hxx>
@ -35,7 +42,7 @@
//function : //function :
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPAlgo_WireSplitter::BOPAlgo_WireSplitter() BOPAlgo_WireSplitter::BOPAlgo_WireSplitter()
: :
BOPAlgo_Algo(), BOPAlgo_Algo(),
myWES(NULL), myWES(NULL),
@ -46,7 +53,8 @@
//function : //function :
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPAlgo_WireSplitter::BOPAlgo_WireSplitter(const Handle(NCollection_BaseAllocator)& theAllocator) BOPAlgo_WireSplitter::BOPAlgo_WireSplitter
(const Handle(NCollection_BaseAllocator)& theAllocator)
: :
BOPAlgo_Algo(theAllocator), BOPAlgo_Algo(theAllocator),
myWES(NULL), myWES(NULL),
@ -57,14 +65,14 @@
//function : ~ //function : ~
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPAlgo_WireSplitter::~BOPAlgo_WireSplitter() BOPAlgo_WireSplitter::~BOPAlgo_WireSplitter()
{ {
} }
//======================================================================= //=======================================================================
//function : SetWES //function : SetWES
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_WireSplitter::SetWES(const BOPAlgo_WireEdgeSet& theWES) void BOPAlgo_WireSplitter::SetWES(const BOPAlgo_WireEdgeSet& theWES)
{ {
myWES=(BOPAlgo_WireEdgeSet*)&theWES; myWES=(BOPAlgo_WireEdgeSet*)&theWES;
} }
@ -72,7 +80,7 @@
//function : WES //function : WES
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPAlgo_WireEdgeSet& BOPAlgo_WireSplitter::WES() BOPAlgo_WireEdgeSet& BOPAlgo_WireSplitter::WES()
{ {
return *myWES; return *myWES;
} }
@ -80,7 +88,7 @@
// function: CheckData // function: CheckData
// purpose: // purpose:
//======================================================================= //=======================================================================
void BOPAlgo_WireSplitter::CheckData() void BOPAlgo_WireSplitter::CheckData()
{ {
myErrorStatus=0; myErrorStatus=0;
if (!myWES) { if (!myWES) {
@ -92,7 +100,7 @@
//function : Perform //function : Perform
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_WireSplitter::Perform() void BOPAlgo_WireSplitter::Perform()
{ {
myErrorStatus=0; myErrorStatus=0;
// //
@ -104,43 +112,12 @@
MakeConnexityBlocks(); MakeConnexityBlocks();
MakeWires(); MakeWires();
} }
//=======================================================================
//function : MakeWires
//purpose :
//=======================================================================
void BOPAlgo_WireSplitter::MakeWires()
{
Standard_Boolean bIsRegular;
TopoDS_Wire aW;
BOPTools_ListIteratorOfListOfConnexityBlock aItCB;
BOPCol_ListIteratorOfListOfShape aIt;
//
aItCB.Initialize(myLCB);
for (; aItCB.More(); aItCB.Next()) {
BOPTools_ConnexityBlock& aCB=aItCB.ChangeValue();
bIsRegular=aCB.IsRegular();
if (bIsRegular) {
BOPCol_ListOfShape& aLE=aCB.ChangeShapes();
BOPAlgo_WireSplitter::MakeWire(aLE, aW);
myWES->AddShape(aW);
}
else {
SplitBlock(aCB);
//
const BOPCol_ListOfShape& aLW=aCB.Loops();
aIt.Initialize(aLW);
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aWx=aIt.Value();
myWES->AddShape(aWx);
}
}
}
}
//======================================================================= //=======================================================================
//function : MakeConnexityBlocks //function : MakeConnexityBlocks
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_WireSplitter::MakeConnexityBlocks() void BOPAlgo_WireSplitter::MakeConnexityBlocks()
{ {
Standard_Boolean bRegular, bClosed; Standard_Boolean bRegular, bClosed;
Standard_Integer i, j, aNbV, aNbVS, aNbVP, k; Standard_Integer i, j, aNbV, aNbVS, aNbVP, k;
@ -280,3 +257,105 @@
myLCB.Append(aCB); myLCB.Append(aCB);
} }
} }
/////////////////////////////////////////////////////////////////////////
typedef BOPCol_NCVector<BOPTools_ConnexityBlock> \
BOPTools_VectorOfConnexityBlock;
//=======================================================================
//class : WireSplitterFunctor
//purpose :
//=======================================================================
class BOPAlgo_WireSplitterFunctor {
protected:
TopoDS_Face myFace;
BOPTools_VectorOfConnexityBlock* myPVCB;
//
public:
//
BOPAlgo_WireSplitterFunctor(const TopoDS_Face& aF,
BOPTools_VectorOfConnexityBlock& aVCB)
: myFace(aF), myPVCB(&aVCB) {
}
//
void operator()( const flexible_range<Standard_Size>& aBR ) const{
Standard_Size i, iBeg, iEnd;
//
BOPTools_VectorOfConnexityBlock& aVCB=*myPVCB;
//
iBeg=aBR.begin();
iEnd=aBR.end();
for(i=iBeg; i!=iEnd; ++i) {
BOPTools_ConnexityBlock& aCB=aVCB((Standard_Integer)i);
//
BOPAlgo_WireSplitter::SplitBlock(myFace, aCB);
}
}
};
//=======================================================================
//class : BOPAlgo_WireSplitterCnt
//purpose :
//=======================================================================
class BOPAlgo_WireSplitterCnt {
public:
//-------------------------------
// Perform
Standard_EXPORT
static void Perform(const Standard_Boolean bRunParallel,
const TopoDS_Face& aF,
BOPTools_VectorOfConnexityBlock& aVCB) {
//
BOPAlgo_WireSplitterFunctor aWSF(aF, aVCB);
Standard_Size aNbVCB=aVCB.Extent();
//
if (bRunParallel) {
flexible_for(flexible_range<Standard_Size>(0,aNbVCB), aWSF);
}
else {
aWSF.operator()(flexible_range<Standard_Size>(0,aNbVCB));
}
}
//
};
//=======================================================================
//function : MakeWires
//purpose :
//=======================================================================
void BOPAlgo_WireSplitter::MakeWires()
{
Standard_Boolean bIsRegular;
Standard_Integer aNbVCB, k;
TopoDS_Wire aW;
BOPTools_ListIteratorOfListOfConnexityBlock aItCB;
BOPCol_ListIteratorOfListOfShape aIt;
BOPTools_VectorOfConnexityBlock aVCB;
//
aItCB.Initialize(myLCB);
for (; aItCB.More(); aItCB.Next()) {
BOPTools_ConnexityBlock& aCB=aItCB.ChangeValue();
bIsRegular=aCB.IsRegular();
if (bIsRegular) {
BOPCol_ListOfShape& aLE=aCB.ChangeShapes();
BOPAlgo_WireSplitter::MakeWire(aLE, aW);
myWES->AddShape(aW);
}
else {
aVCB.Append(aCB);
}
}
//
aNbVCB=aVCB.Extent();
const TopoDS_Face& aF=myWES->Face();
//===================================================
BOPAlgo_WireSplitterCnt::Perform(myRunParallel, aF, aVCB);
//===================================================
for (k=0; k<aNbVCB; ++k) {
const BOPTools_ConnexityBlock& aCB=aVCB(k);
const BOPCol_ListOfShape& aLW=aCB.Loops();
aIt.Initialize(aLW);
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aWx=aIt.Value();
myWES->AddShape(aWx);
}
}
}

View File

@ -133,7 +133,8 @@ static
//function : SplitBlock //function : SplitBlock
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPAlgo_WireSplitter::SplitBlock(BOPTools_ConnexityBlock& aCB) void BOPAlgo_WireSplitter::SplitBlock(const TopoDS_Face& myFace,
BOPTools_ConnexityBlock& aCB)
{ {
Standard_Boolean bNothingToDo; Standard_Boolean bNothingToDo;
Standard_Integer aIx, aNb, i, aCntIn, aCntOut; Standard_Integer aIx, aNb, i, aCntIn, aCntOut;
@ -144,9 +145,8 @@ static
BOPCol_ListIteratorOfListOfShape aIt; BOPCol_ListIteratorOfListOfShape aIt;
BOPAlgo_ListIteratorOfListOfEdgeInfo aItLEI; BOPAlgo_ListIteratorOfListOfEdgeInfo aItLEI;
// //
BOPAlgo_IndexedDataMapOfShapeListOfEdgeInfo mySmartMap(100, myAllocator); BOPAlgo_IndexedDataMapOfShapeListOfEdgeInfo mySmartMap(100);
// //
const TopoDS_Face& myFace=myWES->Face();
const BOPCol_ListOfShape& myEdges=aCB.Shapes(); const BOPCol_ListOfShape& myEdges=aCB.Shapes();
// //
// 1.Filling mySmartMap // 1.Filling mySmartMap
@ -164,7 +164,7 @@ static
const TopoDS_Shape& aV=aItS.Value(); const TopoDS_Shape& aV=aItS.Value();
aIx=mySmartMap.FindIndex(aV); aIx=mySmartMap.FindIndex(aV);
if (!aIx) { if (!aIx) {
BOPAlgo_ListOfEdgeInfo aLEIx(myAllocator); BOPAlgo_ListOfEdgeInfo aLEIx;
aIx=mySmartMap.Add(aV, aLEIx); aIx=mySmartMap.Add(aV, aLEIx);
} }
// //
@ -214,14 +214,14 @@ static
Standard_Integer aNbE, aNbMapEE; Standard_Integer aNbE, aNbMapEE;
Standard_Boolean bFlag; Standard_Boolean bFlag;
// //
BOPCol_IndexedDataMapOfShapeListOfShape aMapEE(100, myAllocator); BOPCol_IndexedDataMapOfShapeListOfShape aMapEE(100);
aNbE=myEdges.Extent(); aNbE=myEdges.Extent();
// //
aIt.Initialize(myEdges); aIt.Initialize(myEdges);
for (; aIt.More(); aIt.Next()) { for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aE = aIt.Value(); const TopoDS_Shape& aE = aIt.Value();
if (!aMapEE.Contains(aE)) { if (!aMapEE.Contains(aE)) {
BOPCol_ListOfShape aLEx(myAllocator); BOPCol_ListOfShape aLEx;
aLEx.Append(aE); aLEx.Append(aE);
aMapEE.Add(aE, aLEx); aMapEE.Add(aE, aLEx);
} }
@ -262,7 +262,6 @@ static
BOPCol_ListOfShape& aLoops=aCB.ChangeLoops(); BOPCol_ListOfShape& aLoops=aCB.ChangeLoops();
aLoops.Append(aW); aLoops.Append(aW);
// //
myErrorStatus=0;
return; return;
} }
// //

View File

@ -14,5 +14,5 @@ BOPAlgo_BOP_1.cxx
BOPAlgo_WireSplitter_1.cxx BOPAlgo_WireSplitter_1.cxx
BOPAlgo_ListOfCheckResult.hxx BOPAlgo_ListOfCheckResult.hxx
BOPAlgo_Builder_2Cnt.hxx BOPAlgo_Builder_2Cnt.hxx
BOPAlgo_CheckerSI_1.cxx BOPAlgo_CheckerSI_1.cxx

View File

@ -0,0 +1,85 @@
// Created by: Peter KURNEV
// Copyright (c) 2010-2012 OPEN CASCADE SAS
// Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
// Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
// EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#include <BOPCol_Box2DBndTree.hxx>
//=======================================================================
//function :
//purpose :
//=======================================================================
BOPCol_Box2DBndTreeSelector::BOPCol_Box2DBndTreeSelector()
{
}
//=======================================================================
//function : ~
//purpose :
//=======================================================================
BOPCol_Box2DBndTreeSelector::~BOPCol_Box2DBndTreeSelector()
{
}
//=======================================================================
//function : Reject
//purpose :
//=======================================================================
Standard_Boolean BOPCol_Box2DBndTreeSelector::Reject
(const Bnd_Box2d& aBox2D) const
{
return myBox2D.IsOut(aBox2D);
}
//=======================================================================
//function : Accept
//purpose :
//=======================================================================
Standard_Boolean BOPCol_Box2DBndTreeSelector::Accept
(const Standard_Integer& aIndex)
{
Standard_Boolean bRet=Standard_False;
//
myIndices.Append(aIndex);
bRet=!bRet;
//}
return bRet;
}
//=======================================================================
//function : SetBox
//purpose :
//=======================================================================
void BOPCol_Box2DBndTreeSelector::SetBox(const Bnd_Box2d& aBox2D)
{
myBox2D=aBox2D;
}
//=======================================================================
//function : Clear
//purpose :
//=======================================================================
void BOPCol_Box2DBndTreeSelector::Clear()
{
myIndices.Clear();
}
//=======================================================================
//function : Indices
//purpose :
//=======================================================================
const BOPCol_ListOfInteger& BOPCol_Box2DBndTreeSelector::Indices() const
{
return myIndices;
}

View File

@ -0,0 +1,52 @@
// Created by: Peter KURNEV
// Copyright (c) 2010-2012 OPEN CASCADE SAS
// Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
// Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
// EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#ifndef BOPCol_Box2DBndTree_HeaderFile
#define BOPCol_Box2DBndTree_HeaderFile
#include <NCollection_UBTree.hxx>
#include <Bnd_Box2d.hxx>
#include <BOPCol_ListOfInteger.hxx>
/**
* The instantiation of the algorithm of unbalanced binary tree
* of overlapped bounding boxes 2D.
*
*/
typedef NCollection_UBTree <Standard_Integer , Bnd_Box2d> BOPCol_Box2DBndTree;
class BOPCol_Box2DBndTreeSelector : public BOPCol_Box2DBndTree::Selector {
public:
Standard_EXPORT BOPCol_Box2DBndTreeSelector();
Standard_EXPORT virtual Standard_Boolean Reject(const Bnd_Box2d&) const;
Standard_EXPORT virtual Standard_Boolean Accept(const Standard_Integer &);
Standard_EXPORT virtual ~BOPCol_Box2DBndTreeSelector();
Standard_EXPORT void Clear();
Standard_EXPORT void SetBox(const Bnd_Box2d&);
Standard_EXPORT const BOPCol_ListOfInteger& Indices() const;
protected:
Bnd_Box2d myBox2D;
BOPCol_ListOfInteger myIndices;
};
#endif

View File

@ -15,26 +15,27 @@
// Alternatively, this file may be used under the terms of Open CASCADE // Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement. // commercial license or contractual agreement.
#include <BOPDS_BoxBndTree.hxx> #include <BOPCol_BoxBndTree.hxx>
//======================================================================= //=======================================================================
//function : //function :
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPDS_BoxBndTreeSelector::BOPDS_BoxBndTreeSelector() BOPCol_BoxBndTreeSelector::BOPCol_BoxBndTreeSelector()
{ {
} }
//======================================================================= //=======================================================================
//function : ~ //function : ~
//purpose : //purpose :
//======================================================================= //=======================================================================
BOPDS_BoxBndTreeSelector::~BOPDS_BoxBndTreeSelector() BOPCol_BoxBndTreeSelector::~BOPCol_BoxBndTreeSelector()
{ {
} }
//======================================================================= //=======================================================================
//function : Reject //function : Reject
//purpose : //purpose :
//======================================================================= //=======================================================================
Standard_Boolean BOPDS_BoxBndTreeSelector::Reject (const Bnd_Box& aBox) const Standard_Boolean BOPCol_BoxBndTreeSelector::Reject (const Bnd_Box& aBox) const
{ {
return myBox.IsOut(aBox); return myBox.IsOut(aBox);
} }
@ -42,21 +43,19 @@
//function : Accept //function : Accept
//purpose : //purpose :
//======================================================================= //=======================================================================
Standard_Boolean BOPDS_BoxBndTreeSelector::Accept (const Standard_Integer& aIndex) Standard_Boolean BOPCol_BoxBndTreeSelector::Accept (const Standard_Integer& aIndex)
{ {
Standard_Boolean bRet=Standard_False; Standard_Boolean bRet=Standard_False;
// //
//if (myFence.Add(aIndex)) {
myIndices.Append(aIndex); myIndices.Append(aIndex);
bRet=!bRet; bRet=!bRet;
//}
return bRet; return bRet;
} }
//======================================================================= //=======================================================================
//function : SetBox //function : SetBox
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPDS_BoxBndTreeSelector::SetBox(const Bnd_Box& aBox) void BOPCol_BoxBndTreeSelector::SetBox(const Bnd_Box& aBox)
{ {
myBox=aBox; myBox=aBox;
} }
@ -64,16 +63,15 @@
//function : Clear //function : Clear
//purpose : //purpose :
//======================================================================= //=======================================================================
void BOPDS_BoxBndTreeSelector::Clear() void BOPCol_BoxBndTreeSelector::Clear()
{ {
//myFence.Clear();
myIndices.Clear(); myIndices.Clear();
} }
//======================================================================= //=======================================================================
//function : Indices //function : Indices
//purpose : //purpose :
//======================================================================= //=======================================================================
const BOPCol_ListOfInteger& BOPDS_BoxBndTreeSelector::Indices() const const BOPCol_ListOfInteger& BOPCol_BoxBndTreeSelector::Indices() const
{ {
return myIndices; return myIndices;
} }

View File

@ -26,14 +26,14 @@
* of overlapped bounding boxes. * of overlapped bounding boxes.
* *
*/ */
typedef NCollection_UBTree <Standard_Integer , Bnd_Box> BOPDS_BoxBndTree; typedef NCollection_UBTree <Standard_Integer , Bnd_Box> BOPCol_BoxBndTree;
class BOPDS_BoxBndTreeSelector : public BOPDS_BoxBndTree::Selector { class BOPCol_BoxBndTreeSelector : public BOPCol_BoxBndTree::Selector {
public: public:
Standard_EXPORT BOPDS_BoxBndTreeSelector(); Standard_EXPORT BOPCol_BoxBndTreeSelector();
Standard_EXPORT virtual Standard_Boolean Reject(const Bnd_Box&) const; Standard_EXPORT virtual Standard_Boolean Reject(const Bnd_Box&) const;
Standard_EXPORT virtual Standard_Boolean Accept(const Standard_Integer &); Standard_EXPORT virtual Standard_Boolean Accept(const Standard_Integer &);
Standard_EXPORT virtual ~BOPDS_BoxBndTreeSelector(); Standard_EXPORT virtual ~BOPCol_BoxBndTreeSelector();
Standard_EXPORT void Clear(); Standard_EXPORT void Clear();
Standard_EXPORT void SetBox(const Bnd_Box&); Standard_EXPORT void SetBox(const Bnd_Box&);

View File

@ -23,10 +23,11 @@
#endif #endif
#include <TopoDS_Shape.hxx> #include <TopoDS_Shape.hxx>
#include <TopTools_ShapeMapHasher.hxx> #include <TColStd_MapIntegerHasher.hxx>
#include <NCollection_DataMap.hxx> #include <NCollection_DataMap.hxx>
typedef NCollection_DataMap<Standard_Integer, TopoDS_Shape, TColStd_MapIntegerHasher> BOPCol_DataMapOfIntegerShape; typedef NCollection_DataMap<Standard_Integer, TopoDS_Shape, TColStd_MapIntegerHasher> BOPCol_DataMapOfIntegerShape;
typedef BOPCol_DataMapOfIntegerShape::Iterator BOPCol_DataMapIteratorOfDataMapOfIntegerShape; typedef BOPCol_DataMapOfIntegerShape::Iterator BOPCol_DataMapIteratorOfDataMapOfIntegerShape;

View File

@ -29,6 +29,10 @@ BOPCol_SequenceOfReal.hxx
BOPCol_DataMapOfIntegerShape.hxx BOPCol_DataMapOfIntegerShape.hxx
BOPCol_IndexedDataMapOfIntegerListOfInteger.hxx BOPCol_IndexedDataMapOfIntegerListOfInteger.hxx
BOPCol_IndexedDataMapOfShapeInteger.hxx BOPCol_IndexedDataMapOfShapeInteger.hxx
BOPCol_TBB.hxx BOPCol_TBB.hxx
BOPCol_NCVector.hxx BOPCol_NCVector.hxx
BOPCol_BoxBndTree.hxx
BOPCol_BoxBndTree.cxx
BOPCol_Box2DBndTree.hxx
BOPCol_Box2DBndTree.cxx

View File

@ -31,7 +31,7 @@
#include <BOPCol_DataMapOfIntegerMapOfInteger.hxx> #include <BOPCol_DataMapOfIntegerMapOfInteger.hxx>
#include <BOPCol_MapOfInteger.hxx> #include <BOPCol_MapOfInteger.hxx>
// //
#include <BOPDS_BoxBndTree.hxx> #include <BOPCol_BoxBndTree.hxx>
#include <BOPDS_IndexRange.hxx> #include <BOPDS_IndexRange.hxx>
#include <BOPDS_PassKeyBoolean.hxx> #include <BOPDS_PassKeyBoolean.hxx>
#include <BOPDS_MapOfPassKeyBoolean.hxx> #include <BOPDS_MapOfPassKeyBoolean.hxx>
@ -218,8 +218,8 @@ void BOPDS_Iterator::Intersect()
BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator); BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator);
BOPDS_PassKeyBoolean aPKXB; BOPDS_PassKeyBoolean aPKXB;
// //
BOPDS_BoxBndTreeSelector aSelector; BOPCol_BoxBndTreeSelector aSelector;
BOPDS_BoxBndTree aBBTree; BOPCol_BoxBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree); NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
// //
aNb=myDS->NbSourceShapes(); aNb=myDS->NbSourceShapes();

View File

@ -24,7 +24,7 @@
#include <BRep_Tool.hxx> #include <BRep_Tool.hxx>
#include <NCollection_UBTreeFiller.hxx> #include <NCollection_UBTreeFiller.hxx>
#include <BOPDS_BoxBndTree.hxx> #include <BOPCol_BoxBndTree.hxx>
#include <BOPDS_IndexRange.hxx> #include <BOPDS_IndexRange.hxx>
#include <BOPDS_PassKeyBoolean.hxx> #include <BOPDS_PassKeyBoolean.hxx>
#include <BOPDS_MapOfPassKeyBoolean.hxx> #include <BOPDS_MapOfPassKeyBoolean.hxx>
@ -103,8 +103,8 @@ void BOPDS_IteratorSI::Intersect()
BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator); BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator);
BOPDS_PassKeyBoolean aPKXB; BOPDS_PassKeyBoolean aPKXB;
// //
BOPDS_BoxBndTreeSelector aSelector; BOPCol_BoxBndTreeSelector aSelector;
BOPDS_BoxBndTree aBBTree; BOPCol_BoxBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree); NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
// //
// myPairsAvoid, aMSI, aMSB // myPairsAvoid, aMSI, aMSB

View File

@ -27,8 +27,8 @@
#include <BOPCol_DataMapOfIntegerInteger.hxx> #include <BOPCol_DataMapOfIntegerInteger.hxx>
#include <BOPCol_DataMapOfIntegerMapOfInteger.hxx> #include <BOPCol_DataMapOfIntegerMapOfInteger.hxx>
#include <BOPCol_MapOfInteger.hxx> #include <BOPCol_MapOfInteger.hxx>
#include <BOPCol_BoxBndTree.hxx>
// //
#include <BOPDS_BoxBndTree.hxx>
#include <BOPDS_IndexRange.hxx> #include <BOPDS_IndexRange.hxx>
#include <BOPDS_PassKeyBoolean.hxx> #include <BOPDS_PassKeyBoolean.hxx>
#include <BOPDS_MapOfPassKeyBoolean.hxx> #include <BOPDS_MapOfPassKeyBoolean.hxx>
@ -193,8 +193,8 @@
BOPDS_MapOfPassKeyBoolean aMPKXB(100, aAllocator); BOPDS_MapOfPassKeyBoolean aMPKXB(100, aAllocator);
BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator); BOPCol_IndexedDataMapOfShapeBox aMSB(100, aAllocator);
// //
BOPDS_BoxBndTreeSelector aSelector; BOPCol_BoxBndTreeSelector aSelector;
BOPDS_BoxBndTree aBBTree; BOPCol_BoxBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree); NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
// //
aIt1.Initialize(*mySubSet1); aIt1.Initialize(*mySubSet1);

View File

@ -1,8 +1,6 @@
BOPDS_VectorOfShapeInfo.hxx BOPDS_VectorOfShapeInfo.hxx
BOPDS_VectorOfIndexRange.hxx BOPDS_VectorOfIndexRange.hxx
BOPDS_ListOfPassKeyBoolean.hxx BOPDS_ListOfPassKeyBoolean.hxx
BOPDS_BoxBndTree.cxx
BOPDS_BoxBndTree.hxx
BOPDS_MapOfPassKeyBoolean.hxx BOPDS_MapOfPassKeyBoolean.hxx
BOPDS_MapOfPassKey.hxx BOPDS_MapOfPassKey.hxx
BOPDS_ListIteratorOfListOfPassKeyBoolean.hxx BOPDS_ListIteratorOfListOfPassKeyBoolean.hxx
@ -16,6 +14,10 @@ BOPDS_VectorOfInterfVF.hxx
BOPDS_VectorOfInterfEE.hxx BOPDS_VectorOfInterfEE.hxx
BOPDS_VectorOfInterfEF.hxx BOPDS_VectorOfInterfEF.hxx
BOPDS_VectorOfInterfFF.hxx BOPDS_VectorOfInterfFF.hxx
BOPDS_VectorOfInterfVZ.hxx
BOPDS_VectorOfInterfEZ.hxx
BOPDS_VectorOfInterfFZ.hxx
BOPDS_VectorOfInterfZZ.hxx
BOPDS_Interf.hxx BOPDS_Interf.hxx
BOPDS_DataMapOfPaveBlockListOfPaveBlock.hxx BOPDS_DataMapOfPaveBlockListOfPaveBlock.hxx
BOPDS_MapOfPaveBlock.hxx BOPDS_MapOfPaveBlock.hxx
@ -35,7 +37,3 @@ BOPDS_IndexedDataMapOfPaveBlockListOfInteger.hxx
BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks.hxx BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks.hxx
BOPDS_DataMapOfPaveBlockCommonBlock.hxx BOPDS_DataMapOfPaveBlockCommonBlock.hxx
BOPDS_VectorOfInterfVZ.hxx
BOPDS_VectorOfInterfEZ.hxx
BOPDS_VectorOfInterfFZ.hxx
BOPDS_VectorOfInterfZZ.hxx

View File

@ -1,18 +1,24 @@
-- Created on: 1991-01-28 -- Created on: 1991-01-28
-- Created by: Remi Lequette -- Created by: Remi Lequette
-- Copyright (c) 1991-1999 Matra Datavision -- Copyright (c) 1991-1999 Matra Datavision
-- Copyright (c) 1999-2014 OPEN CASCADE SAS -- Copyright (c) 1999-2012 OPEN CASCADE SAS
-- --
-- This file is part of Open CASCADE Technology software library. -- The content of this file is subject to the Open CASCADE Technology Public
-- License Version 6.5 (the "License"). You may not use the content of this file
-- except in compliance with the License. Please obtain a copy of the License
-- at http://www.opencascade.org and read it completely before using this file.
-- --
-- This library is free software; you can redistribute it and / or modify it -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-- under the terms of the GNU Lesser General Public version 2.1 as published -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
-- by the Free Software Foundation, with special exception defined in the file
-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-- distribution for complete text of the license and disclaimer of any warranty.
-- --
-- Alternatively, this file may be used under the terms of Open CASCADE -- The Original Code and all software distributed under the License is
-- commercial license or contractual agreement. -- distributed on an "AS IS" basis, without warranty of any kind, and the
-- Initial Developer hereby disclaims all such warranties, including without
-- limitation, any warranties of merchantability, fitness for a particular
-- purpose or non-infringement. Please see the License for the specific terms
-- and conditions governing the rights and limitations under the License.
class Box2d from Bnd class Box2d from Bnd
@ -217,8 +223,12 @@ is
---Level: Public ---Level: Public
---C++: inline ---C++: inline
Dump(me) is static; Dump(me) is static;
SquareExtent(me)
returns Real from Standard;
--- Purpose : Computes the squared diagonal of me.
---C++: inline
fields Xmin : Real; fields Xmin : Real;
Xmax : Real; Xmax : Real;

View File

@ -1,18 +1,23 @@
// Created on: 1997-11-27 // Created on: 1997-11-27
// Created by: Christophe MARION // Created by: Christophe MARION
// Copyright (c) 1997-1999 Matra Datavision // Copyright (c) 1997-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS // Copyright (c) 1999-2012 OPEN CASCADE SAS
// //
// This file is part of Open CASCADE Technology software library. // The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
// //
// This library is free software; you can redistribute it and / or modify it // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// under the terms of the GNU Lesser General Public version 2.1 as published // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
// //
// Alternatively, this file may be used under the terms of Open CASCADE // The Original Code and all software distributed under the License is
// commercial license or contractual agreement. // distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#define VoidMask 0x01 #define VoidMask 0x01
#define XminMask 0x02 #define XminMask 0x02
@ -231,4 +236,15 @@ inline Standard_Boolean Bnd_Box2d::IsOut (const gp_Trsf2d& T1,
{ {
return Transformed(T1).IsOut (Other.Transformed(T2)); return Transformed(T1).IsOut (Other.Transformed(T2));
} }
//=======================================================================
//function : SquareExtent
//purpose : Computes the squared diagonal
//=======================================================================
inline Standard_Real Bnd_Box2d::SquareExtent() const
{
if ( IsVoid() ) return 0.;
Standard_Real dx = Xmax-Xmin+Gap;
Standard_Real dy = Ymax-Ymin+Gap;
return dx*dx + dy*dy;
}