- 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()
- };
- //
- 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;
- }
- //
- aInt->Indices(nI1, nI2);
- if (nI1 == nI2) {
- continue;
- }
- if (theDS->IsNewShape(nI1) || theDS->IsNewShape(nI2)) {
- continue;
- }
- //
- if (aTypeInt == 4) {
- BOPDS_InterfEF& aEF=aEFs(i);
- if (aEF.CommonPart().Type()==TopAbs_SHAPE) {
- continue;
- }
- }
- //
- const TopoDS_Shape& aS1 = theDS->Shape(nI1);
- const TopoDS_Shape& aS2 = theDS->Shape(nI2);
- //
- if (aTypeInt == 5) {
- bSelfInt = Standard_False;
- BOPDS_InterfFF& aFF = aFFs(i);
- BOPDS_VectorOfPoint& aVP=aFF.ChangePoints();
- Standard_Integer aNbP=aVP.Extent();
- BOPDS_VectorOfCurve& aVC=aFF.ChangeCurves();
- Standard_Integer aNbC=aVC.Extent();
- if (!aNbP && !aNbC) {
- continue;
- }
- for (j=0; j<aNbC; ++j) {
- BOPDS_Curve& aNC=aVC(j);
- BOPDS_ListOfPaveBlock& aLPBC=aNC.ChangePaveBlocks();
- if (aLPBC.Extent()) {
- bSelfInt = Standard_True;
- break;
- }
- }
- if (!bSelfInt) {
- continue;
- }
- }
- //
- BOPAlgo_CheckResult aResult;
- if(ii == 0) {
- aResult.SetShape1(myShape1);
- aResult.AddFaultyShape1(aS1);
- aResult.AddFaultyShape1(aS2);
- }
- else {
- aResult.SetShape2(myShape2);
- aResult.AddFaultyShape2(aS1);
- aResult.AddFaultyShape2(aS2);
- }
- aResult.SetCheckStatus(BOPAlgo_SelfIntersect);
- myResult.Append(aResult);
+ aItMPK.Initialize(aMPK);
+ for (; aItMPK.More(); aItMPK.Next()) {
+ const BOPDS_PassKey& aPK=aItMPK.Value();
+ aPK.Ids(n1, n2);
+ if(aDS.IsNewShape(n1) || aDS.IsNewShape(n2)) {
+ continue;
+ }
+ //
+ const TopoDS_Shape& aS1=aDS.Shape(n1);
+ const TopoDS_Shape& aS2=aDS.Shape(n2);
+ //
+ BOPAlgo_CheckResult aResult;
+ if(ii == 0) {
+ aResult.SetShape1(myShape1);
+ aResult.AddFaultyShape1(aS1);
+ aResult.AddFaultyShape1(aS2);