1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0024764: Alien subshapes occured in result of 'bopcheck' operation

class BOPAlgo_ArgumentAnalyzer
   - method:
void BOPAlgo_ArgumentAnalyzer::TestSelfInterferences()
The new shapes has been excluded from the treatment

void BOPAlgo_CheckerSI::PostTreat()
The new shapes has been excluded from the treatment

Standard_Integer bopcheck
  (Draw_Interpretor& di, Standard_Integer n,  const char** a )
The new shapes has been excluded from the treatment.
The interferences of the type */Solid has been included in the treatment.

Test case for issue CR24764
This commit is contained in:
pkv
2014-04-03 15:29:23 +04:00
committed by apn
parent dd8f1b191b
commit 80db570166
4 changed files with 220 additions and 98 deletions

View File

@@ -338,54 +338,60 @@ void BOPAlgo_ArgumentAnalyzer::TestSelfInterferences()
BOPDS_VectorOfInterfFZ& aFZs=theDS->InterfFZ();
BOPDS_VectorOfInterfZZ& aZZs=theDS->InterfZZ();
//
const Standard_Integer aNbTypeInt=10;
Standard_Integer aTypeInt, i, nI1, nI2;
Standard_Integer aNb[aNbTypeInt] = {
Standard_Integer aNbTypeInt, aTypeInt, i, nI1, nI2;
Standard_Integer aNb[] = {
aVVs.Extent(), aVEs.Extent(), aEEs.Extent(),
aVFs.Extent(), aEFs.Extent(), aFFs.Extent(),
aVZs.Extent(), aEZs.Extent(), aFZs.Extent(), aZZs.Extent()};
aVZs.Extent(), aEZs.Extent(), aFZs.Extent(),
aZZs.Extent()
};
//
BOPDS_Interf* aInt=NULL;
//
aNbTypeInt=BOPDS_DS::NbInterfTypes();
for (aTypeInt = 0; aTypeInt < aNbTypeInt; ++aTypeInt) {
for (i = 0; i < aNb[aTypeInt]; ++i) {
switch(aTypeInt) {
case 0:
aInt=(BOPDS_Interf*)(&aVVs(i));
break;
case 1:
aInt=(BOPDS_Interf*)(&aVEs(i));
break;
case 2:
aInt=(BOPDS_Interf*)(&aEEs(i));
break;
case 3:
aInt=(BOPDS_Interf*)(&aVFs(i));
break;
case 4:
aInt=(BOPDS_Interf*)(&aEFs(i));
break;
case 5:
aInt=(BOPDS_Interf*)(&aFFs(i));
break;
case 6:
aInt=(BOPDS_Interf*)(&aVZs(i));
break;
case 7:
aInt=(BOPDS_Interf*)(&aEZs(i));
break;
case 8:
aInt=(BOPDS_Interf*)(&aFZs(i));
break;
case 9:
aInt=(BOPDS_Interf*)(&aZZs(i));
break;
default:
aInt=NULL;
}
switch(aTypeInt) {
case 0:
aInt=(BOPDS_Interf*)(&aVVs(i));
break;
case 1:
aInt=(BOPDS_Interf*)(&aVEs(i));
break;
case 2:
aInt=(BOPDS_Interf*)(&aEEs(i));
break;
case 3:
aInt=(BOPDS_Interf*)(&aVFs(i));
break;
case 4:
aInt=(BOPDS_Interf*)(&aEFs(i));
break;
case 5:
aInt=(BOPDS_Interf*)(&aFFs(i));
break;
case 6:
aInt=(BOPDS_Interf*)(&aVZs(i));
break;
case 7:
aInt=(BOPDS_Interf*)(&aEZs(i));
break;
case 8:
aInt=(BOPDS_Interf*)(&aFZs(i));
break;
case 9:
aInt=(BOPDS_Interf*)(&aZZs(i));
break;
default:
aInt=NULL;
}
//
aInt->Indices(nI1, nI2);
aInt->Indices(nI1, nI2);
if (nI1 == nI2) {
continue;
}
if (theDS->IsNewShape(nI1) || theDS->IsNewShape(nI2)) {
continue;
}
//
if (aTypeInt == 4) {

View File

@@ -125,7 +125,6 @@ void BOPAlgo_CheckerSI::Init()
//=======================================================================
void BOPAlgo_CheckerSI::Perform()
{
try {
OCC_CATCH_SIGNALS
//
@@ -143,42 +142,46 @@ void BOPAlgo_CheckerSI::Perform()
}
//
BOPAlgo_PaveFiller::Perform();
if (myErrorStatus) {
return;
//
if (!myErrorStatus) {
PerformVZ();
}
//
PerformVZ();
if (myErrorStatus) {
return;
}
//
PerformEZ();
if (myErrorStatus) {
return;
if (!myErrorStatus) {
PerformEZ();
}
//
PerformFZ();
if (myErrorStatus) {
return;
if (!myErrorStatus) {
PerformFZ();
}
//
PerformZZ();
if (myErrorStatus) {
return;
if (!myErrorStatus) {
PerformZZ();
}
//
if (!myErrorStatus) {
PostTreat();
}
//
PostTreat();
if (myErrorStatus) {
return;
if (myNonDestructive) {
Standard_Integer iErr;
//
iErr=myErrorStatus;
//
PostTreatCopy();
if (!myErrorStatus) {
myErrorStatus=iErr;
}
}
//
}
//
catch (Standard_Failure) {
if (myNonDestructive) {
PostTreatCopy();
}
}
catch (Standard_Failure) {
//
myErrorStatus=11;
}
}
}
//=======================================================================
@@ -202,6 +205,9 @@ void BOPAlgo_CheckerSI::PostTreat()
for (i=0; i!=aNb; ++i) {
const BOPDS_InterfVV& aVV=aVVs(i);
aVV.Indices(n1, n2);
if (myDS->IsNewShape(n1) || myDS->IsNewShape(n2)) {
continue;
}
aPK.SetIds(n1, n2);
aMPK.Add(aPK);
}
@@ -212,6 +218,9 @@ void BOPAlgo_CheckerSI::PostTreat()
for (i=0; i!=aNb; ++i) {
const BOPDS_InterfVE& aVE=aVEs(i);
aVE.Indices(n1, n2);
if (myDS->IsNewShape(n1) || myDS->IsNewShape(n2)) {
continue;
}
aPK.SetIds(n1, n2);
aMPK.Add(aPK);
}
@@ -222,6 +231,9 @@ void BOPAlgo_CheckerSI::PostTreat()
for (i=0; i!=aNb; ++i) {
const BOPDS_InterfEE& aEE=aEEs(i);
aEE.Indices(n1, n2);
if (myDS->IsNewShape(n1) || myDS->IsNewShape(n2)) {
continue;
}
aPK.SetIds(n1, n2);
aMPK.Add(aPK);
}
@@ -232,6 +244,9 @@ void BOPAlgo_CheckerSI::PostTreat()
for (i=0; i!=aNb; ++i) {
const BOPDS_InterfVF& aVF=aVFs(i);
aVF.Indices(n1, n2);
if (myDS->IsNewShape(n1) || myDS->IsNewShape(n2)) {
continue;
}
aPK.SetIds(n1, n2);
aMPK.Add(aPK);
}
@@ -245,6 +260,9 @@ void BOPAlgo_CheckerSI::PostTreat()
continue;
}
aEF.Indices(n1, n2);
if (myDS->IsNewShape(n1) || myDS->IsNewShape(n2)) {
continue;
}
aPK.SetIds(n1, n2);
aMPK.Add(aPK);
}
@@ -304,6 +322,9 @@ void BOPAlgo_CheckerSI::PostTreat()
//
const BOPDS_InterfVZ& aVZ=aVZs(i);
aVZ.Indices(n1, n2);
if (myDS->IsNewShape(n1) || myDS->IsNewShape(n2)) {
continue;
}
aPK.SetIds(n1, n2);
aMPK.Add(aPK);
}