mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-11-15 10:08:35 +05:00
Mantis issue 0021200: A fix by PKV v2 (fixed regression)
This commit is contained in:
parent
5f39f63cba
commit
8598f0fe49
@ -18,7 +18,6 @@
|
|||||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
//
|
//
|
||||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
//
|
|
||||||
|
|
||||||
// File: GEOMAlgo_Builder_2.cxx
|
// File: GEOMAlgo_Builder_2.cxx
|
||||||
// Author: Peter KURNEV
|
// Author: Peter KURNEV
|
||||||
@ -411,11 +410,11 @@ static
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_Builder::FillSameDomainFaces()
|
void GEOMAlgo_Builder::FillSameDomainFaces()
|
||||||
{
|
{
|
||||||
Standard_Boolean bIsSDF, bHasImage1, bHasImage2;
|
Standard_Boolean bIsSDF, bHasImage1, bHasImage2, bForward;
|
||||||
Standard_Integer i, j, aNbFF, nF1, nF2, aNbPBInOn, aNbC, aNbSE;
|
Standard_Integer i, j, aNbFF, nF1, nF2, aNbPBInOn, aNbC, aNbSE;
|
||||||
Standard_Integer aNbF1, aNbF2, i2s, aNbSD;
|
Standard_Integer aNbF1, aNbF2, i2s, aNbSD;
|
||||||
TopTools_MapOfShape aMFence;
|
TopTools_MapOfShape aMFence;
|
||||||
TopTools_ListOfShape aLSempty;
|
TopTools_ListOfShape aLX1, aLX2;
|
||||||
TopTools_ListIteratorOfListOfShape aItF1, aItF2;
|
TopTools_ListIteratorOfListOfShape aItF1, aItF2;
|
||||||
NMTTools_ListOfCoupleOfShape aLCS;
|
NMTTools_ListOfCoupleOfShape aLCS;
|
||||||
//
|
//
|
||||||
@ -463,12 +462,22 @@ static
|
|||||||
// Try to find SDF among images of nF1, nF2
|
// Try to find SDF among images of nF1, nF2
|
||||||
aMFence.Clear();
|
aMFence.Clear();
|
||||||
//
|
//
|
||||||
//XXXXXXXXXXXXXf
|
//--------------------------------------------------------
|
||||||
bHasImage1=mySplitFaces.HasImage(aF1);
|
bHasImage1=mySplitFaces.HasImage(aF1);
|
||||||
bHasImage2=mySplitFaces.HasImage(aF2);
|
bHasImage2=mySplitFaces.HasImage(aF2);
|
||||||
//
|
//
|
||||||
const TopTools_ListOfShape& aLF1r=(bHasImage1)? mySplitFaces.Image(aF1) : aLSempty;
|
aLX1.Clear();
|
||||||
const TopTools_ListOfShape& aLF2r=(bHasImage2)? mySplitFaces.Image(aF2) : aLSempty;
|
if (!bHasImage1) {
|
||||||
|
aLX1.Append(aF1);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
aLX2.Clear();
|
||||||
|
if (!bHasImage2) {
|
||||||
|
aLX2.Append(aF2);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
const TopTools_ListOfShape& aLF1r=(bHasImage1)? mySplitFaces.Image(aF1) : aLX1;
|
||||||
|
const TopTools_ListOfShape& aLF2r=(bHasImage2)? mySplitFaces.Image(aF2) : aLX2;
|
||||||
//
|
//
|
||||||
TopTools_DataMapOfIntegerShape aMIS;
|
TopTools_DataMapOfIntegerShape aMIS;
|
||||||
TColStd_ListIteratorOfListOfInteger aItLI;
|
TColStd_ListIteratorOfListOfInteger aItLI;
|
||||||
@ -478,8 +487,10 @@ static
|
|||||||
//
|
//
|
||||||
aNbF1=aLF1r.Extent();
|
aNbF1=aLF1r.Extent();
|
||||||
aNbF2=aLF2r.Extent();
|
aNbF2=aLF2r.Extent();
|
||||||
const TopTools_ListOfShape& aLF1=(aNbF1<aNbF2)? aLF1r : aLF2r;
|
bForward=(aNbF1<aNbF2);
|
||||||
const TopTools_ListOfShape& aLF2=(aNbF1<aNbF2)? aLF2r : aLF1r;
|
//
|
||||||
|
const TopTools_ListOfShape& aLF1=bForward ? aLF1r : aLF2r;
|
||||||
|
const TopTools_ListOfShape& aLF2=bForward ? aLF2r : aLF1r;
|
||||||
//
|
//
|
||||||
// 1. aTreeFiller
|
// 1. aTreeFiller
|
||||||
aItF2.Initialize(aLF2);
|
aItF2.Initialize(aLF2);
|
||||||
@ -518,10 +529,10 @@ static
|
|||||||
for (; aItLI.More(); aItLI.Next()) {
|
for (; aItLI.More(); aItLI.Next()) {
|
||||||
i2s=aItLI.Value();
|
i2s=aItLI.Value();
|
||||||
const TopoDS_Face& aF2y=*((TopoDS_Face*)(&aMIS.Find(i2s)));
|
const TopoDS_Face& aF2y=*((TopoDS_Face*)(&aMIS.Find(i2s)));
|
||||||
|
//
|
||||||
bIsSDF=NMTTools_Tools::AreFacesSameDomain(aF1x, aF2y, aCtx);
|
bIsSDF=NMTTools_Tools::AreFacesSameDomain(aF1x, aF2y, aCtx);
|
||||||
if (bIsSDF) {
|
if (bIsSDF) {
|
||||||
if (aMFence.Contains(aF1x) ||
|
if (aMFence.Contains(aF1x) || aMFence.Contains(aF2y)) {
|
||||||
aMFence.Contains(aF2y)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
aMFence.Add(aF1x);
|
aMFence.Add(aF1x);
|
||||||
@ -533,6 +544,7 @@ static
|
|||||||
aCS.SetShape2(aF2y);
|
aCS.SetShape2(aF2y);
|
||||||
aLCS.Append(aCS);
|
aLCS.Append(aCS);
|
||||||
//
|
//
|
||||||
|
if (bForward) {
|
||||||
if (aF1x==aF1) {
|
if (aF1x==aF1) {
|
||||||
if (!mySplitFaces.HasImage(aF1)) {
|
if (!mySplitFaces.HasImage(aF1)) {
|
||||||
mySplitFaces.Bind(aF1, aF1);
|
mySplitFaces.Bind(aF1, aF1);
|
||||||
@ -543,12 +555,26 @@ static
|
|||||||
mySplitFaces.Bind(aF2, aF2);
|
mySplitFaces.Bind(aF2, aF2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (aF1x==aF2) {
|
||||||
|
if (!mySplitFaces.HasImage(aF2)) {
|
||||||
|
mySplitFaces.Bind(aF2, aF2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (aF2y==aF1) {
|
||||||
|
if (!mySplitFaces.HasImage(aF1)) {
|
||||||
|
mySplitFaces.Bind(aF1, aF1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
break;
|
break;
|
||||||
}//if (bIsSDF) {
|
}//if (bIsSDF) {
|
||||||
}//for (; aItLI.More(); aItLI.Next()) {
|
}//for (; aItLI.More(); aItLI.Next()) {
|
||||||
}//for (; aItF1.More(); aItF1.Next()) {
|
}//for (; aItF1.More(); aItF1.Next()) {
|
||||||
}//for (i=1; i<=aNbFF; ++i)
|
}//for (i=1; i<=aNbFF; ++i)
|
||||||
//XXXXXXXXXXXXXt
|
//-------------------------------------------------------------
|
||||||
aNbC=aLCS.Extent();
|
aNbC=aLCS.Extent();
|
||||||
if (!aNbC) {
|
if (!aNbC) {
|
||||||
return;
|
return;
|
||||||
@ -598,19 +624,19 @@ static
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
aF=TopoDS::Face(aS);
|
aF=*((TopoDS_Face*)&aS);
|
||||||
//
|
//
|
||||||
aLFx.Clear();
|
aLFx.Clear();
|
||||||
const TopTools_ListOfShape& aLF=mySplitFaces.Image(aF);
|
const TopTools_ListOfShape& aLF=mySplitFaces.Image(aF);
|
||||||
aIt.Initialize(aLF);
|
aIt.Initialize(aLF);
|
||||||
for (; aIt.More(); aIt.Next()) {
|
for (; aIt.More(); aIt.Next()) {
|
||||||
aFSp=TopoDS::Face(aIt.Value());
|
aFSp=*((TopoDS_Face*)(&aIt.Value()));
|
||||||
if (!mySameDomainShapes.Contains(aFSp)) {
|
if (!mySameDomainShapes.Contains(aFSp)) {
|
||||||
aLFx.Append(aFSp);
|
aLFx.Append(aFSp);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const TopoDS_Shape& aSx=mySameDomainShapes.FindFromKey(aFSp);
|
const TopoDS_Shape& aSx=mySameDomainShapes.FindFromKey(aFSp);
|
||||||
aFSD=TopoDS::Face(aSx);
|
aFSD=*((TopoDS_Face*)(&aSx));
|
||||||
iSense=GEOMAlgo_Tools3D::Sense(aFSp, aFSD);
|
iSense=GEOMAlgo_Tools3D::Sense(aFSp, aFSD);
|
||||||
if (iSense<0) {
|
if (iSense<0) {
|
||||||
aFSD.Reverse();
|
aFSD.Reverse();
|
||||||
@ -618,6 +644,7 @@ static
|
|||||||
aLFx.Append(aFSD);
|
aLFx.Append(aFSD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
if (!myImages.HasImage(aF)) {
|
if (!myImages.HasImage(aF)) {
|
||||||
aNbLFx=aLFx.Extent();
|
aNbLFx=aLFx.Extent();
|
||||||
if (aNbLFx==1) {
|
if (aNbLFx==1) {
|
||||||
|
Loading…
Reference in New Issue
Block a user