//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-// File: GEOMAlgo_GetInPlace.cxx
-// Created:
-// Author: Peter KURNEV
+// File: GEOMAlgo_GetInPlace.cxx
+// Created:
+// Author: Peter KURNEV
#include <GEOMAlgo_GetInPlace.hxx>
#include <GEOMAlgo_Tools.hxx>
-static
+static
void MapBRepShapes(const TopoDS_Shape& aS,
- TopTools_IndexedMapOfShape& aM);
+ TopTools_IndexedMapOfShape& aM);
//=======================================================================
//function : GEOMAlgo_GetInPlace
-//purpose :
+//purpose :
//=======================================================================
GEOMAlgo_GetInPlace::GEOMAlgo_GetInPlace()
:
}
//=======================================================================
//function : ~
-//purpose :
+//purpose :
//=======================================================================
GEOMAlgo_GetInPlace::~GEOMAlgo_GetInPlace()
{
}
//=======================================================================
//function : SetTolMass
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::SetTolMass(const Standard_Real theTol)
{
}
//=======================================================================
//function : TolMass
-//purpose :
+//purpose :
//=======================================================================
Standard_Real GEOMAlgo_GetInPlace::TolMass()const
{
}
//=======================================================================
//function : SetTolCG
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::SetTolCG(const Standard_Real theTol)
{
}
//=======================================================================
//function : TolCG
-//purpose :
+//purpose :
//=======================================================================
Standard_Real GEOMAlgo_GetInPlace::TolCG()const
{
}
//=======================================================================
//function : IsFound
-//purpose :
+//purpose :
//=======================================================================
Standard_Boolean GEOMAlgo_GetInPlace::IsFound()const
{
}
//=======================================================================
//function : SetShapeWhere
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::SetShapeWhere(const TopoDS_Shape& theShape)
{
}
//=======================================================================
//function : ShapeWhere
-//purpose :
+//purpose :
//=======================================================================
const TopoDS_Shape& GEOMAlgo_GetInPlace::ShapeWhere()const
{
}
//=======================================================================
//function : ShapesIn
-//purpose :
+//purpose :
//=======================================================================
const GEOMAlgo_DataMapOfShapeMapOfShape& GEOMAlgo_GetInPlace::ShapesIn()const
{
}
//=======================================================================
//function : ShapesOn
-//purpose :
+//purpose :
//=======================================================================
const GEOMAlgo_DataMapOfShapeMapOfShape& GEOMAlgo_GetInPlace::ShapesOn()const
{
}
//=======================================================================
//function : Clear
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::Clear()
{
}
//=======================================================================
//function : Perform
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::Perform()
{
}
//=======================================================================
//function : CheckData
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::CheckData()
{
}
//=======================================================================
//function : Intersect
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::Intersect()
{
//
const TopoDS_Shape& aS1=aMS1(i);
BRepBndLib::Add(aS1, aBox1);
- aBox1.SetGap(myTolerance);
+ //modified by NIZNHY-PKV Fri Jun 10 08:20:03 2011f
+ //aBox1.SetGap(myTolerance);
+ aBox1.Enlarge(myTolerance);
+ //modified by NIZNHY-PKV Fri Jun 10 08:20:06 2011t
//
aTreeFiller.Add(i, aBox1);
}
//
const TopoDS_Shape& aS2=aMS2(j);
BRepBndLib::Add(aS2, aBox2);
- aBox2.SetGap(myTolerance);
+ //modified by NIZNHY-PKV Fri Jun 10 08:20:23 2011f
+ //aBox2.SetGap(myTolerance);
+ aBox2.Enlarge(myTolerance);
+ //modified by NIZNHY-PKV Fri Jun 10 08:20:25 2011t
//
aSelector.Clear();
aSelector.SetBox(aBox2);
aNbSD=aBBTree.Select(aSelector);
if (!aNbSD) {
- continue; // it should not be
+ continue; // it should not be
}
//
const TColStd_ListOfInteger& aLI=aSelector.Indices();
const TopoDS_Shape& aS1=aMS1(i);
//
if (aDMSLS.IsBound(aS1)) {
- TopTools_ListOfShape& aLS=aDMSLS.ChangeFind(aS1);
- aLS.Append(aS2);
+ TopTools_ListOfShape& aLS=aDMSLS.ChangeFind(aS1);
+ aLS.Append(aS2);
}
else {
- TopTools_ListOfShape aLS;
- //
- aLS.Append(aS2);
- aDMSLS.Bind(aS1, aLS);
+ TopTools_ListOfShape aLS;
+ //
+ aLS.Append(aS2);
+ aDMSLS.Bind(aS1, aLS);
}
}
}// for (j=1; j<=aNbS2; ++j) {
}
//=======================================================================
//function : PerformVV
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformVV()
{
}
//=======================================================================
//function : FillEdgesOn
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::FillEdgesOn()
{
- Standard_Integer i, aNbE, aNbSOn;
+ Standard_Integer i, aNbE;
TopoDS_Iterator aIt;
TopTools_IndexedMapOfShape aME;
TopTools_MapIteratorOfMapOfShape aItMS;
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aV1=aIt.Value();
if (myShapesOn.IsBound(aV1)) {
- const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aV1);
- aNbSOn=aMSOn.Extent();
- aItMS.Initialize(aMSOn);
- for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aV2=aItMS.Key();
- FillShapesOn(aE1, aV2);
- }
+ const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aV1);
+ //aNbSOn=aMSOn.Extent();
+ aItMS.Initialize(aMSOn);
+ for (; aItMS.More(); aItMS.Next()) {
+ const TopoDS_Shape& aV2=aItMS.Key();
+ FillShapesOn(aE1, aV2);
+ }
}
}
}
}
//=======================================================================
//function : PerformVE
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformVE()
{
if (myShapesOn.IsBound(aE1)) {
const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aE1);
if (aMSOn.Contains(aV2)) {
- continue;
+ continue;
}
}
//
}
//=======================================================================
//function : PerformEE
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformEE()
{
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aV2=aIt.Value();
if (!(aMSOn.Contains(aV2) || aMSIn.Contains(aV2))) {
- bFound=!bFound;
- break;
+ bFound=!bFound;
+ break;
}
}
if (!bFound) {
}
//=======================================================================
//function : PerformVF
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformVF()
{
for (i=1; i<=aNbE; ++i) {
const TopoDS_Edge& aE1=*((TopoDS_Edge*)&aME(i));
if (BRep_Tool::Degenerated(aE1)) {
- continue;
+ continue;
}
//
bHasOn=myShapesOn.IsBound(aE1);
const TopTools_MapOfShape& aMSIn=(bHasIn) ? myShapesIn.Find(aE1) : aMSX;
bFound= (aMSOn.Contains(aV2) || aMSIn.Contains(aV2));
if (bFound) {
- break;
+ break;
}
}
//
}
//=======================================================================
//function : FillFacesOn
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::FillFacesOn()
{
- Standard_Integer i, j, aNbF, aNbE, aNbSOn;
+ Standard_Integer i, j, aNbF, aNbE;
TopoDS_Iterator aIt;
TopTools_IndexedMapOfShape aMF, aME;
TopTools_MapIteratorOfMapOfShape aItMS;
for (j=1; j<=aNbE; ++j) {
const TopoDS_Edge& aE1=*((TopoDS_Edge*)&aME(j));
if (BRep_Tool::Degenerated(aE1)) {
- continue;
+ continue;
}
//
if (myShapesOn.IsBound(aE1)) {
- const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aE1);
- aItMS.Initialize(aMSOn);
- for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aS2=aItMS.Key();
- FillShapesOn(aF1, aS2);
- }
+ const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aE1);
+ aItMS.Initialize(aMSOn);
+ for (; aItMS.More(); aItMS.Next()) {
+ const TopoDS_Shape& aS2=aItMS.Key();
+ FillShapesOn(aF1, aS2);
+ }
}
//
if (myShapesIn.IsBound(aE1)) {
- const TopTools_MapOfShape& aMSIn=myShapesIn.Find(aE1);
- aItMS.Initialize(aMSIn);
- for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aS2=aItMS.Key();
- FillShapesOn(aF1, aS2);
- }
+ const TopTools_MapOfShape& aMSIn=myShapesIn.Find(aE1);
+ aItMS.Initialize(aMSIn);
+ for (; aItMS.More(); aItMS.Next()) {
+ const TopoDS_Shape& aS2=aItMS.Key();
+ FillShapesOn(aF1, aS2);
+ }
}
}//for (j=1; j<=aNbE; ++j) {
}//for (i=1; i<=aNbF; ++i) {
}
//=======================================================================
//function : PerformEF
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformEF()
{
Standard_Boolean bFound, bHasOnF, bHasInF;
- Standard_Integer i, aNbE;
TopoDS_Iterator aIt;
TopTools_MapOfShape aMSX;
//
if (bFound) {
continue;
}
- //
+ //
// 2.
bHasInF=myShapesIn.IsBound(aF1);
const TopTools_MapOfShape& aMSInF=(bHasInF) ? myShapesIn.Find(aF1) : aMSX;
const TopoDS_Shape& aV2=aIt.Value();
bFound=(aMSOnF.Contains(aV2) || aMSInF.Contains(aV2));
if (!bFound) {
- break;
+ break;
}
}
if (!bFound) {
}
//=======================================================================
//function : PerformFF
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformFF()
{
for (i=1; i<=aNbS2; ++i) {
const TopoDS_Shape& aS2=aMS2(i);
if (aS2.IsSame(aF2)) {
- continue;
+ continue;
}
bFound=(aMSOnF.Contains(aS2) || aMSInF.Contains(aS2));
if (!bFound) {
- break;
+ break;
}
}
if (!bFound) {
}
//=======================================================================
//function : FillSolidsOn
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::FillSolidsOn()
{
- Standard_Integer i, j, aNbS, aNbF, aNbSOn;
+ Standard_Integer i, j, aNbS, aNbF;
TopTools_IndexedMapOfShape aMS, aMF;
TopTools_MapIteratorOfMapOfShape aItMS;
//
const TopoDS_Shape& aF1=aMF(j);
//
if (myShapesOn.IsBound(aF1)) {
- const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aF1);
- aItMS.Initialize(aMSOn);
- for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aS2=aItMS.Key();
- FillShapesOn(aSD1, aS2);
- }
+ const TopTools_MapOfShape& aMSOn=myShapesOn.Find(aF1);
+ aItMS.Initialize(aMSOn);
+ for (; aItMS.More(); aItMS.Next()) {
+ const TopoDS_Shape& aS2=aItMS.Key();
+ FillShapesOn(aSD1, aS2);
+ }
}
//
if (myShapesIn.IsBound(aF1)) {
- const TopTools_MapOfShape& aMSIn=myShapesIn.Find(aF1);
- aItMS.Initialize(aMSIn);
- for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aS2=aItMS.Key();
- FillShapesOn(aSD1, aS2);
- }
+ const TopTools_MapOfShape& aMSIn=myShapesIn.Find(aF1);
+ aItMS.Initialize(aMSIn);
+ for (; aItMS.More(); aItMS.Next()) {
+ const TopoDS_Shape& aS2=aItMS.Key();
+ FillShapesOn(aSD1, aS2);
+ }
}
}//for (j=1; j<=aNbF; ++j) {
}//for (i=1; i<=aNbS; ++i) {
}
//=======================================================================
//function : PerformZF
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformZF()
{
- Standard_Boolean bFound, bHasOnF, bHasInF;
- Standard_Integer i, aNbE;
+ Standard_Boolean bFound, bHasOnF;
TopTools_MapOfShape aMSX;
//
myErrorStatus=0;
}
//=======================================================================
//function : PerformZZ
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::PerformZZ()
{
const TopoDS_Shape& aF2=aMS2(i);
//
if (aMSIn.Contains(aF2)) {
- ++iCntIn;
- bFound=Standard_True;
- break;
+ ++iCntIn;
+ bFound=Standard_True;
+ break;
}
else if (!aMSOn.Contains(aF2)) {
- ++iCntOut;
- bFound=Standard_False;// out
- break;
+ ++iCntOut;
+ bFound=Standard_False;// out
+ break;
}
else {
- ++iCntOn; //on
+ ++iCntOn; //on
}
}
//
if (!iCntIn) {
bFound=CheckCoincidence(aSo1, aSo2);
if (myErrorStatus) {
- return;
+ return;
}
}
if (bFound) {
}
//=======================================================================
//function : FillImages
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::FillImages()
{
myErrorStatus=0;
myWarningStatus=0;
//
- myImages.Clear();
+ myImages.Clear();
//
// 1. Vertices
aMS.Clear();
aLSx.Clear();
aItMS.Initialize(aMSx);
for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aVx=aItMS.Key();
- aLSx.Append(aVx);
+ const TopoDS_Shape& aVx=aItMS.Key();
+ aLSx.Append(aVx);
}
//
myImages.Bind(aV, aLSx);
aLSx.Clear();
aItMS.Initialize(aMSx);
for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aEx=aItMS.Key();
- aType=aEx.ShapeType();
- if (aType==TopAbs_EDGE){
- aLSx.Append(aEx);
- }
+ const TopoDS_Shape& aEx=aItMS.Key();
+ aType=aEx.ShapeType();
+ if (aType==TopAbs_EDGE){
+ aLSx.Append(aEx);
+ }
}
//
myImages.Bind(aE, aLSx);
for(; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aE=aIt.Value();
if (myImages.IsBound(aE)) {
- const TopTools_ListOfShape& aLSi=myImages.Find(aE);
- aNbSi=aLSi.Extent();
- //
- aItLS.Initialize(aLSi);
- for (; aItLS.More(); aItLS.Next()) {
- const TopoDS_Shape& aEi=aItLS.Value();
- aLSx.Append(aEi);
- }
+ const TopTools_ListOfShape& aLSi=myImages.Find(aE);
+ aNbSi=aLSi.Extent();
+ //
+ aItLS.Initialize(aLSi);
+ for (; aItLS.More(); aItLS.Next()) {
+ const TopoDS_Shape& aEi=aItLS.Value();
+ aLSx.Append(aEi);
+ }
}
}
myImages.Bind(aW, aLSx);
aLSx.Clear();
aItMS.Initialize(aMSx);
for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aFx=aItMS.Key();
- aType=aFx.ShapeType();
- if (aType==TopAbs_FACE){
- aLSx.Append(aFx);
- }
+ const TopoDS_Shape& aFx=aItMS.Key();
+ aType=aFx.ShapeType();
+ if (aType==TopAbs_FACE){
+ aLSx.Append(aFx);
+ }
}
//
myImages.Bind(aF, aLSx);
for(; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aF=aIt.Value();
if (myImages.IsBound(aF)) {
- const TopTools_ListOfShape& aLSi=myImages.Find(aF);
- aNbSi=aLSi.Extent();
- //
- aItLS.Initialize(aLSi);
- for (; aItLS.More(); aItLS.Next()) {
- const TopoDS_Shape& aFi=aItLS.Value();
- aLSx.Append(aFi);
- }
+ const TopTools_ListOfShape& aLSi=myImages.Find(aF);
+ aNbSi=aLSi.Extent();
+ //
+ aItLS.Initialize(aLSi);
+ for (; aItLS.More(); aItLS.Next()) {
+ const TopoDS_Shape& aFi=aItLS.Value();
+ aLSx.Append(aFi);
+ }
}
}
myImages.Bind(aSh, aLSx);
aLSx.Clear();
aItMS.Initialize(aMSx);
for (; aItMS.More(); aItMS.Next()) {
- const TopoDS_Shape& aZx=aItMS.Key();
- aType=aZx.ShapeType();
- if (aType==TopAbs_SOLID){
- aLSx.Append(aZx);
- }
+ const TopoDS_Shape& aZx=aItMS.Key();
+ aType=aZx.ShapeType();
+ if (aType==TopAbs_SOLID){
+ aLSx.Append(aZx);
+ }
}
//
myImages.Bind(aZ, aLSx);
for(; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aZ=aIt.Value();
if (myImages.IsBound(aZ)) {
- const TopTools_ListOfShape& aLSi=myImages.Find(aZ);
- aNbSi=aLSi.Extent();
- //
- aItLS.Initialize(aLSi);
- for (; aItLS.More(); aItLS.Next()) {
- const TopoDS_Shape& aZi=aItLS.Value();
- aLSx.Append(aZi);
- }
+ const TopTools_ListOfShape& aLSi=myImages.Find(aZ);
+ aNbSi=aLSi.Extent();
+ //
+ aItLS.Initialize(aLSi);
+ for (; aItLS.More(); aItLS.Next()) {
+ const TopoDS_Shape& aZi=aItLS.Value();
+ aLSx.Append(aZi);
+ }
}
}
myImages.Bind(aCs, aLSx);
}
//=======================================================================
//function : FillImagesCompound
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::FillImagesCompound(const TopoDS_Shape& aS)
{
const TopTools_ListOfShape& aLSi=myImages.Find(aSx);
aItLS.Initialize(aLSi);
for (; aItLS.More(); aItLS.Next()) {
- const TopoDS_Shape& aSi=aItLS.Value();
- aLSx.Append(aSi);
+ const TopoDS_Shape& aSi=aItLS.Value();
+ aLSx.Append(aSi);
}
}
}
//=======================================================================
//function : FillShapesIn
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::FillShapesIn(const TopoDS_Shape& aS1,
- const TopoDS_Shape& aS2)
+ const TopoDS_Shape& aS2)
{
if (myShapesIn.IsBound(aS1)) {
TopTools_MapOfShape& aMS=myShapesIn.ChangeFind(aS1);
}
//=======================================================================
//function : FillShapesOn
-//purpose :
+//purpose :
//=======================================================================
void GEOMAlgo_GetInPlace::FillShapesOn(const TopoDS_Shape& aS1,
- const TopoDS_Shape& aS2)
+ const TopoDS_Shape& aS2)
{
if (myShapesOn.IsBound(aS1)) {
TopTools_MapOfShape& aMS=myShapesOn.ChangeFind(aS1);
}
//=======================================================================
//function : MapBRepShapes
-//purpose :
+//purpose :
//=======================================================================
void MapBRepShapes(const TopoDS_Shape& aS,
- TopTools_IndexedMapOfShape& aM)
+ TopTools_IndexedMapOfShape& aM)
{
- Standard_Boolean bHasBRep, bDegenerated;
+ Standard_Boolean bDegenerated;
TopAbs_ShapeEnum aType;
TopoDS_Iterator aIt;
//
aType=aS.ShapeType();
- if (aType==TopAbs_VERTEX || aType==TopAbs_EDGE ||
+ if (aType==TopAbs_VERTEX || aType==TopAbs_EDGE ||
aType==TopAbs_FACE || aType==TopAbs_SOLID) {
bDegenerated=Standard_False;
if (aType==TopAbs_EDGE) {