From: nmanchen Date: Thu, 17 Nov 2022 04:06:13 +0000 (+0300) Subject: CR28720: Modeling Algorithms - HLRBrep_PolyAlgo crash with specific shape X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=5c3adda3e9db2de2f834e17c0f9ff52908018357;p=occt.git CR28720: Modeling Algorithms - HLRBrep_PolyAlgo crash with specific shape 1 link update for each new segment --- diff --git a/src/HLRAlgo/HLRAlgo_PolyInternalData.cxx b/src/HLRAlgo/HLRAlgo_PolyInternalData.cxx index 3eca3e98d6..d6e554efd7 100644 --- a/src/HLRAlgo/HLRAlgo_PolyInternalData.cxx +++ b/src/HLRAlgo/HLRAlgo_PolyInternalData.cxx @@ -20,7 +20,7 @@ #include #include -IMPLEMENT_STANDARD_RTTIEXT(HLRAlgo_PolyInternalData,Standard_Transient) +IMPLEMENT_STANDARD_RTTIEXT(HLRAlgo_PolyInternalData, Standard_Transient) #ifdef OCCT_DEBUG static Standard_Integer HLRAlgo_PolyInternalData_TRACE = Standard_False; @@ -33,21 +33,21 @@ static Standard_Integer HLRAlgo_PolyInternalData_ERROR = Standard_False; HLRAlgo_PolyInternalData::HLRAlgo_PolyInternalData (const Standard_Integer nbNod, - const Standard_Integer nbTri) : - myNbTData(nbTri), - myNbPISeg(0), - myNbPINod(nbNod), - myMxTData(nbTri), - myMxPINod(nbNod), - myIntOutL(Standard_False), - myPlanar(Standard_False) + const Standard_Integer nbTri) : + myNbTData(nbTri), + myNbPISeg(0), + myNbPINod(nbNod), + myMxTData(nbTri), + myMxPINod(nbNod), + myIntOutL(Standard_False), + myPlanar(Standard_False) { Standard_Integer i; myMxPISeg = 2 + (3 * nbTri + nbNod) / 2; - myTData = new HLRAlgo_HArray1OfTData(0,myMxTData); - myPISeg = new HLRAlgo_HArray1OfPISeg(0,myMxPISeg); - myPINod = new HLRAlgo_HArray1OfPINod(0,myMxPINod); - + myTData = new HLRAlgo_HArray1OfTData(0, myMxTData); + myPISeg = new HLRAlgo_HArray1OfPISeg(0, myMxPISeg); + myPINod = new HLRAlgo_HArray1OfPINod(0, myMxPINod); + HLRAlgo_Array1OfPINod& PINod = myPINod->ChangeArray1(); Handle(HLRAlgo_PolyInternalNode)* NN = &(PINod.ChangeValue(1)); @@ -61,223 +61,237 @@ HLRAlgo_PolyInternalData::HLRAlgo_PolyInternalData //function : UpdateLinks //purpose : //======================================================================= -void HLRAlgo_PolyInternalData::UpdateLinks (HLRAlgo_Array1OfTData& theTData, - HLRAlgo_Array1OfPISeg& thePISeg, - HLRAlgo_Array1OfPINod& thePINod) +void HLRAlgo_PolyInternalData::UpdateLinks(HLRAlgo_Array1OfTData& theTData, + HLRAlgo_Array1OfPISeg& thePISeg, + HLRAlgo_Array1OfPINod& thePINod) { - Standard_Integer n1,n2; - Standard_Integer find,iiii,icsv = 0; + Standard_Integer n1, n2; + Standard_Integer find, iiii, icsv = 0; HLRAlgo_PolyInternalSegment* aSegIndices = NULL; - Standard_Boolean newSeg = Standard_False; + Standard_Boolean newSeg = Standard_False; for (Standard_Integer i = 1; i <= myNbTData; i++) { - HLRAlgo_TriangleData* TD = &theTData.ChangeValue (i); + HLRAlgo_TriangleData* TD = &theTData.ChangeValue(i); HLRAlgo_PolyInternalNode::NodeIndices& A1 = thePINod.ChangeValue(TD->Node1)->Indices(); HLRAlgo_PolyInternalNode::NodeIndices& A2 = thePINod.ChangeValue(TD->Node2)->Indices(); HLRAlgo_PolyInternalNode::NodeIndices& A3 = thePINod.ChangeValue(TD->Node3)->Indices(); + bool notFound = true; + + if (notFound) { - n1 = TD->Node1; - n2 = TD->Node2; - newSeg = Standard_False; - if (A1.NdSg == 0 && A2.NdSg == 0) { - newSeg = Standard_True; - myNbPISeg++; - A1.NdSg = myNbPISeg; - A2.NdSg = myNbPISeg; - } - else { - iiii = A1.NdSg; - if (iiii != 0) { - find = 0; - - while (iiii != 0 && find == 0) { - aSegIndices = &thePISeg.ChangeValue (iiii); - if (aSegIndices->LstSg1 == n1) { - if (aSegIndices->LstSg2 == n2) find = iiii; - else iiii = aSegIndices->NxtSg1; - icsv = 1; - } - else { - if (aSegIndices->LstSg1 == n2) find = iiii; - else iiii = aSegIndices->NxtSg2; - icsv = 2; - } - } - if (find == 0) { - newSeg = Standard_True; - myNbPISeg++; - if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; - } - else aSegIndices->Conex2 = i; + n1 = TD->Node1; + n2 = TD->Node2; + newSeg = Standard_False; + if (A1.NdSg == 0 && A2.NdSg == 0) { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + A1.NdSg = myNbPISeg; + A2.NdSg = myNbPISeg; } else { - newSeg = Standard_True; - myNbPISeg++; - A1.NdSg = myNbPISeg; + iiii = A1.NdSg; + if (iiii != 0) { + find = 0; + + while (iiii != 0 && find == 0) { + aSegIndices = &thePISeg.ChangeValue(iiii); + if (aSegIndices->LstSg1 == n1) { + if (aSegIndices->LstSg2 == n2) find = iiii; + else iiii = aSegIndices->NxtSg1; + icsv = 1; + } + else { + if (aSegIndices->LstSg1 == n2) find = iiii; + else iiii = aSegIndices->NxtSg2; + icsv = 2; + } + } + if (find == 0) { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; + } + else aSegIndices->Conex2 = i; + } + else { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + A1.NdSg = myNbPISeg; + } + if (newSeg) { + iiii = A2.NdSg; + if (iiii != 0) { + + while (iiii != 0) { + aSegIndices = &thePISeg.ChangeValue(iiii); + if (aSegIndices->LstSg1 == n2) { icsv = 1; iiii = aSegIndices->NxtSg1; } + else { icsv = 2; iiii = aSegIndices->NxtSg2; } + } + if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; + } + else A2.NdSg = myNbPISeg; + } } if (newSeg) { - iiii = A2.NdSg; - if (iiii != 0) { - - while (iiii != 0) { - aSegIndices = &thePISeg.ChangeValue (iiii); - if (aSegIndices->LstSg1 == n2) { icsv = 1; iiii = aSegIndices->NxtSg1; } - else { icsv = 2; iiii = aSegIndices->NxtSg2; } - } - if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; - } - else A2.NdSg = myNbPISeg; + aSegIndices = &thePISeg.ChangeValue(myNbPISeg); + aSegIndices->LstSg1 = n1; + aSegIndices->LstSg2 = n2; + aSegIndices->Conex1 = i; + aSegIndices->Conex2 = 0; + aSegIndices->NxtSg1 = 0; + aSegIndices->NxtSg2 = 0; } } - if (newSeg) { - aSegIndices = &thePISeg.ChangeValue (myNbPISeg); - aSegIndices->LstSg1 = n1; - aSegIndices->LstSg2 = n2; - aSegIndices->Conex1 = i; - aSegIndices->Conex2 = 0; - aSegIndices->NxtSg1 = 0; - aSegIndices->NxtSg2 = 0; - } - } + if (notFound) { - n1 = TD->Node2; - n2 = TD->Node3; - newSeg = Standard_False; - if (A2.NdSg == 0 && A3.NdSg == 0) { - newSeg = Standard_True; - myNbPISeg++; - A2.NdSg = myNbPISeg; - A3.NdSg = myNbPISeg; - } - else { - iiii = A2.NdSg; - if (iiii != 0) { - find = 0; - - while (iiii != 0 && find == 0) { - aSegIndices = &thePISeg.ChangeValue (iiii); - if (aSegIndices->LstSg1 == n1) { - if (aSegIndices->LstSg2 == n2) find = iiii; - else iiii = aSegIndices->NxtSg1; - icsv = 1; - } - else { - if (aSegIndices->LstSg1 == n2) find = iiii; - else iiii = aSegIndices->NxtSg2; - icsv = 2; - } - } - if (find == 0) { - newSeg = Standard_True; - myNbPISeg++; - if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; - } - else aSegIndices->Conex2 = i; + n1 = TD->Node2; + n2 = TD->Node3; + newSeg = Standard_False; + if (A2.NdSg == 0 && A3.NdSg == 0) { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + A2.NdSg = myNbPISeg; + A3.NdSg = myNbPISeg; } else { - newSeg = Standard_True; - myNbPISeg++; - A2.NdSg = myNbPISeg; + iiii = A2.NdSg; + if (iiii != 0) { + find = 0; + + while (iiii != 0 && find == 0) { + aSegIndices = &thePISeg.ChangeValue(iiii); + if (aSegIndices->LstSg1 == n1) { + if (aSegIndices->LstSg2 == n2) find = iiii; + else iiii = aSegIndices->NxtSg1; + icsv = 1; + } + else { + if (aSegIndices->LstSg1 == n2) find = iiii; + else iiii = aSegIndices->NxtSg2; + icsv = 2; + } + } + if (find == 0) { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; + } + else aSegIndices->Conex2 = i; + } + else { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + A2.NdSg = myNbPISeg; + } + if (newSeg) { + iiii = A3.NdSg; + if (iiii != 0) { + + while (iiii != 0) { + aSegIndices = &thePISeg.ChangeValue(iiii); + if (aSegIndices->LstSg1 == n2) { icsv = 1; iiii = aSegIndices->NxtSg1; } + else { icsv = 2; iiii = aSegIndices->NxtSg2; } + } + if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; + } + else A3.NdSg = myNbPISeg; + } } if (newSeg) { - iiii = A3.NdSg; - if (iiii != 0) { - - while (iiii != 0) { - aSegIndices = &thePISeg.ChangeValue (iiii); - if (aSegIndices->LstSg1 == n2) { icsv = 1; iiii = aSegIndices->NxtSg1; } - else { icsv = 2; iiii = aSegIndices->NxtSg2; } - } - if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; - } - else A3.NdSg = myNbPISeg; + aSegIndices = &thePISeg.ChangeValue(myNbPISeg); + aSegIndices->LstSg1 = n1; + aSegIndices->LstSg2 = n2; + aSegIndices->Conex1 = i; + aSegIndices->Conex2 = 0; + aSegIndices->NxtSg1 = 0; + aSegIndices->NxtSg2 = 0; } } - if (newSeg) { - aSegIndices = &thePISeg.ChangeValue (myNbPISeg); - aSegIndices->LstSg1 = n1; - aSegIndices->LstSg2 = n2; - aSegIndices->Conex1 = i; - aSegIndices->Conex2 = 0; - aSegIndices->NxtSg1 = 0; - aSegIndices->NxtSg2 = 0; - } - } + if (notFound) { - n1 = TD->Node3; - n2 = TD->Node1; - newSeg = Standard_False; - if (A3.NdSg == 0 && A1.NdSg == 0) { - newSeg = Standard_True; - myNbPISeg++; - A3.NdSg = myNbPISeg; - A1.NdSg = myNbPISeg; - } - else { - iiii = A3.NdSg; - if (iiii != 0) { - find = 0; - - while (iiii != 0 && find == 0) { - aSegIndices = &thePISeg.ChangeValue (iiii); - if (aSegIndices->LstSg1 == n1) { - if (aSegIndices->LstSg2 == n2) find = iiii; - else iiii = aSegIndices->NxtSg1; - icsv = 1; - } - else { - if (aSegIndices->LstSg1 == n2) find = iiii; - else iiii = aSegIndices->NxtSg2; - icsv = 2; - } - } - if (find == 0) { - newSeg = Standard_True; - myNbPISeg++; - if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; - } - else aSegIndices->Conex2 = i; + n1 = TD->Node3; + n2 = TD->Node1; + newSeg = Standard_False; + if (A3.NdSg == 0 && A1.NdSg == 0) { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + A3.NdSg = myNbPISeg; + A1.NdSg = myNbPISeg; } else { - newSeg = Standard_True; - myNbPISeg++; - A3.NdSg = myNbPISeg; + iiii = A3.NdSg; + if (iiii != 0) { + find = 0; + + while (iiii != 0 && find == 0) { + aSegIndices = &thePISeg.ChangeValue(iiii); + if (aSegIndices->LstSg1 == n1) { + if (aSegIndices->LstSg2 == n2) find = iiii; + else iiii = aSegIndices->NxtSg1; + icsv = 1; + } + else { + if (aSegIndices->LstSg1 == n2) find = iiii; + else iiii = aSegIndices->NxtSg2; + icsv = 2; + } + } + if (find == 0) { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; + } + else aSegIndices->Conex2 = i; + } + else { + notFound = false; + newSeg = Standard_True; + myNbPISeg++; + A3.NdSg = myNbPISeg; + } + if (newSeg) { + iiii = A1.NdSg; + if (iiii != 0) { + + while (iiii != 0) { + aSegIndices = &thePISeg.ChangeValue(iiii); + if (aSegIndices->LstSg1 == n2) { icsv = 1; iiii = aSegIndices->NxtSg1; } + else { icsv = 2; iiii = aSegIndices->NxtSg2; } + } + if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; + } + else A1.NdSg = myNbPISeg; + } } if (newSeg) { - iiii = A1.NdSg; - if (iiii != 0) { - - while (iiii != 0) { - aSegIndices = &thePISeg.ChangeValue (iiii); - if (aSegIndices->LstSg1 == n2) { icsv = 1; iiii = aSegIndices->NxtSg1; } - else { icsv = 2; iiii = aSegIndices->NxtSg2; } - } - if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; - } - else A1.NdSg = myNbPISeg; + aSegIndices = &thePISeg.ChangeValue(myNbPISeg); + aSegIndices->LstSg1 = n1; + aSegIndices->LstSg2 = n2; + aSegIndices->Conex1 = i; + aSegIndices->Conex2 = 0; + aSegIndices->NxtSg1 = 0; + aSegIndices->NxtSg2 = 0; } } - if (newSeg) { - aSegIndices = &thePISeg.ChangeValue (myNbPISeg); - aSegIndices->LstSg1 = n1; - aSegIndices->LstSg2 = n2; - aSegIndices->Conex1 = i; - aSegIndices->Conex2 = 0; - aSegIndices->NxtSg1 = 0; - aSegIndices->NxtSg2 = 0; - } - } } } @@ -285,17 +299,17 @@ void HLRAlgo_PolyInternalData::UpdateLinks (HLRAlgo_Array1OfTData& theTData, //function : AddNode //purpose : //======================================================================= -Standard_Integer HLRAlgo_PolyInternalData::AddNode (HLRAlgo_PolyInternalNode::NodeData& theNod1RValues, - HLRAlgo_PolyInternalNode::NodeData& theNod2RValues, - HLRAlgo_Array1OfPINod*& thePINod1, - HLRAlgo_Array1OfPINod*& thePINod2, - const Standard_Real theCoef1, - const Standard_Real theX3, - const Standard_Real theY3, - const Standard_Real theZ3) +Standard_Integer HLRAlgo_PolyInternalData::AddNode(HLRAlgo_PolyInternalNode::NodeData& theNod1RValues, + HLRAlgo_PolyInternalNode::NodeData& theNod2RValues, + HLRAlgo_Array1OfPINod*& thePINod1, + HLRAlgo_Array1OfPINod*& thePINod2, + const Standard_Real theCoef1, + const Standard_Real theX3, + const Standard_Real theY3, + const Standard_Real theZ3) { Standard_Real coef2 = 1 - theCoef1; - IncPINod (thePINod1, thePINod2); + IncPINod(thePINod1, thePINod2); Standard_Integer ip3 = myNbPINod; Handle(HLRAlgo_PolyInternalNode)& pip3 = thePINod1->ChangeValue(ip3); pip3 = new HLRAlgo_PolyInternalNode(); @@ -303,7 +317,7 @@ Standard_Integer HLRAlgo_PolyInternalData::AddNode (HLRAlgo_PolyInternalNode::No HLRAlgo_PolyInternalNode::NodeIndices& aNodeIndices = pip3->Indices(); aNodeIndices.NdSg = 0; aNodeIndices.Flag = 0; - Nod3RValues.Point = gp_XYZ (theX3, theY3, theZ3); + Nod3RValues.Point = gp_XYZ(theX3, theY3, theZ3); Nod3RValues.UV = coef2 * theNod1RValues.UV + theCoef1 * theNod2RValues.UV; Nod3RValues.Scal = theNod1RValues.Scal * coef2 + theNod2RValues.Scal * theCoef1; const gp_XYZ aXYZ = coef2 * theNod1RValues.Normal + theCoef1 * theNod2RValues.Normal; @@ -328,29 +342,29 @@ Standard_Integer HLRAlgo_PolyInternalData::AddNode (HLRAlgo_PolyInternalNode::No //======================================================================= void -HLRAlgo_PolyInternalData::UpdateLinks (const Standard_Integer ip1, - const Standard_Integer ip2, - const Standard_Integer ip3, - HLRAlgo_Array1OfTData*& TData1, - HLRAlgo_Array1OfTData*& TData2, - HLRAlgo_Array1OfPISeg*& PISeg1, - HLRAlgo_Array1OfPISeg*& PISeg2, - HLRAlgo_Array1OfPINod*& PINod1, - HLRAlgo_Array1OfPINod*& ) +HLRAlgo_PolyInternalData::UpdateLinks(const Standard_Integer ip1, + const Standard_Integer ip2, + const Standard_Integer ip3, + HLRAlgo_Array1OfTData*& TData1, + HLRAlgo_Array1OfTData*& TData2, + HLRAlgo_Array1OfPISeg*& PISeg1, + HLRAlgo_Array1OfPISeg*& PISeg2, + HLRAlgo_Array1OfPINod*& PINod1, + HLRAlgo_Array1OfPINod*&) { - Standard_Integer find,iiii,iisv,icsv,iip2 =0,cnx1 =0,cnx2 =0; + Standard_Integer find, iiii, iisv, icsv, iip2 = 0, cnx1 = 0, cnx2 = 0; HLRAlgo_PolyInternalSegment* aSegIndices = NULL; HLRAlgo_PolyInternalSegment* aSegIndices2 = NULL; find = 0; iisv = 0; icsv = 0; - IncPISeg(PISeg1,PISeg2); - IncPISeg(PISeg1,PISeg2); - IncPISeg(PISeg1,PISeg2); + IncPISeg(PISeg1, PISeg2); + IncPISeg(PISeg1, PISeg2); + IncPISeg(PISeg1, PISeg2); myNbPISeg--; myNbPISeg--; - IncTData(TData1,TData2); - IncTData(TData1,TData2); + IncTData(TData1, TData2); + IncTData(TData1, TData2); myNbTData--; myNbTData--; HLRAlgo_PolyInternalNode::NodeIndices* aNodIndices1 = @@ -360,42 +374,42 @@ HLRAlgo_PolyInternalData::UpdateLinks (const Standard_Integer ip1, HLRAlgo_PolyInternalNode::NodeIndices& aNodIndices3 = PINod1->ChangeValue(ip3)->Indices(); iiii = aNodIndices2.NdSg; - + while (iiii != 0 && find == 0) { aSegIndices2 = &PISeg1->ChangeValue(iiii); if (aSegIndices2->LstSg1 == ip2) { if (aSegIndices2->LstSg2 == ip1) { - find = iiii; - cnx1 = aSegIndices2->Conex1; - cnx2 = aSegIndices2->Conex2; - aSegIndices2->LstSg1 = ip3; - iip2 = aSegIndices2->NxtSg1; - aSegIndices2->NxtSg1 = myNbPISeg; - if (iisv == 0) aNodIndices2.NdSg = myNbPISeg; - else if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; + find = iiii; + cnx1 = aSegIndices2->Conex1; + cnx2 = aSegIndices2->Conex2; + aSegIndices2->LstSg1 = ip3; + iip2 = aSegIndices2->NxtSg1; + aSegIndices2->NxtSg1 = myNbPISeg; + if (iisv == 0) aNodIndices2.NdSg = myNbPISeg; + else if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; } - else { - iisv = iiii; - icsv = 1; + else { + iisv = iiii; + icsv = 1; } iiii = aSegIndices2->NxtSg1; } else { if (aSegIndices2->LstSg1 == ip1) { - find = iiii; - cnx1 = aSegIndices2->Conex1; - cnx2 = aSegIndices2->Conex2; - aSegIndices2->LstSg2 = ip3; - iip2 = aSegIndices2->NxtSg2; - aSegIndices2->NxtSg2 = myNbPISeg; - if (iisv == 0) aNodIndices2.NdSg = myNbPISeg; - else if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; - else aSegIndices->NxtSg2 = myNbPISeg; + find = iiii; + cnx1 = aSegIndices2->Conex1; + cnx2 = aSegIndices2->Conex2; + aSegIndices2->LstSg2 = ip3; + iip2 = aSegIndices2->NxtSg2; + aSegIndices2->NxtSg2 = myNbPISeg; + if (iisv == 0) aNodIndices2.NdSg = myNbPISeg; + else if (icsv == 1) aSegIndices->NxtSg1 = myNbPISeg; + else aSegIndices->NxtSg2 = myNbPISeg; } - else { - iisv = iiii; - icsv = 2; + else { + iisv = iiii; + icsv = 2; } iiii = aSegIndices2->NxtSg2; } @@ -418,10 +432,10 @@ HLRAlgo_PolyInternalData::UpdateLinks (const Standard_Integer ip1, aSegIndices2->LstSg2 = ip2; aSegIndices2->Conex1 = cnx1; aSegIndices2->Conex2 = cnx2; - aNodIndices3.NdSg = find; + aNodIndices3.NdSg = find; - Standard_Integer iOld,iNew,iTr,skip,ip4,itpk[2]; - Standard_Integer n1,n2,n3,nOld[3],nNew[3],New[4]; + Standard_Integer iOld, iNew, iTr, skip, ip4, itpk[2]; + Standard_Integer n1, n2, n3, nOld[3], nNew[3], New[4]; New[0] = cnx1; New[2] = myNbTData + 1; if (cnx2 == 0) { @@ -432,183 +446,183 @@ HLRAlgo_PolyInternalData::UpdateLinks (const Standard_Integer ip1, New[1] = cnx2; New[3] = myNbTData + 2; } - + for (skip = 0; skip <= 1; skip++) { iOld = New[skip]; iNew = New[skip + 2]; if (iOld != 0) { - HLRAlgo_TriangleData& aTriangle = TData1->ChangeValue(iOld); - HLRAlgo_TriangleData& aTriangle2 = TData1->ChangeValue(iNew); - n1 = aTriangle.Node1; - n2 = aTriangle.Node2; - n3 = aTriangle.Node3; - nOld[0] = n1; + HLRAlgo_TriangleData& aTriangle = TData1->ChangeValue(iOld); + HLRAlgo_TriangleData& aTriangle2 = TData1->ChangeValue(iNew); + n1 = aTriangle.Node1; + n2 = aTriangle.Node2; + n3 = aTriangle.Node3; + nOld[0] = n1; nOld[1] = n2; nOld[2] = n3; - nNew[0] = n1; + nNew[0] = n1; nNew[1] = n2; nNew[2] = n3; - Standard_Boolean found = Standard_False; - if (n1 == ip1 && n2 == ip2) { - found = Standard_True; - nOld[1] = ip3; - nNew[0] = ip3; - itpk[skip] = n3; - } - else if (n1 == ip2 && n2 == ip1) { - found = Standard_True; - nOld[0] = ip3; - nNew[1] = ip3; - itpk[skip] = n3; - } - else if (n2 == ip1 && n3 == ip2) { - found = Standard_True; - nOld[2] = ip3; - nNew[1] = ip3; - itpk[skip] = n1; - } - else if (n2 == ip2 && n3 == ip1) { - found = Standard_True; - nOld[1] = ip3; - nNew[2] = ip3; - itpk[skip] = n1; - } - else if (n3 == ip1 && n1 == ip2) { - found = Standard_True; - nOld[0] = ip3; - nNew[2] = ip3; - itpk[skip] = n2; - } - else if (n3 == ip2 && n1 == ip1) { - found = Standard_True; - nOld[2] = ip3; - nNew[0] = ip3; - itpk[skip] = n2; - } - if (found) { - myNbTData++; - ip4 = itpk[skip]; - HLRAlgo_PolyInternalNode::NodeIndices& aNodIndices4 = - PINod1->ChangeValue(ip4)->Indices(); - aTriangle.Node1 = nOld[0]; - aTriangle.Node2 = nOld[1]; - aTriangle.Node3 = nOld[2]; - aTriangle2.Node1 = nNew[0]; - aTriangle2.Node2 = nNew[1]; - aTriangle2.Node3 = nNew[2]; - aTriangle2.Flags = aTriangle.Flags; - myNbPISeg++; - aSegIndices2 = &PISeg1->ChangeValue(myNbPISeg); - aSegIndices2->LstSg1 = ip3; - aSegIndices2->LstSg2 = ip4; - aSegIndices2->NxtSg1 = aNodIndices3.NdSg; - aSegIndices2->NxtSg2 = aNodIndices4.NdSg; - aSegIndices2->Conex1 = iOld; - aSegIndices2->Conex2 = iNew; - aNodIndices3.NdSg = myNbPISeg; - aNodIndices4.NdSg = myNbPISeg; - } + Standard_Boolean found = Standard_False; + if (n1 == ip1 && n2 == ip2) { + found = Standard_True; + nOld[1] = ip3; + nNew[0] = ip3; + itpk[skip] = n3; + } + else if (n1 == ip2 && n2 == ip1) { + found = Standard_True; + nOld[0] = ip3; + nNew[1] = ip3; + itpk[skip] = n3; + } + else if (n2 == ip1 && n3 == ip2) { + found = Standard_True; + nOld[2] = ip3; + nNew[1] = ip3; + itpk[skip] = n1; + } + else if (n2 == ip2 && n3 == ip1) { + found = Standard_True; + nOld[1] = ip3; + nNew[2] = ip3; + itpk[skip] = n1; + } + else if (n3 == ip1 && n1 == ip2) { + found = Standard_True; + nOld[0] = ip3; + nNew[2] = ip3; + itpk[skip] = n2; + } + else if (n3 == ip2 && n1 == ip1) { + found = Standard_True; + nOld[2] = ip3; + nNew[0] = ip3; + itpk[skip] = n2; + } + if (found) { + myNbTData++; + ip4 = itpk[skip]; + HLRAlgo_PolyInternalNode::NodeIndices& aNodIndices4 = + PINod1->ChangeValue(ip4)->Indices(); + aTriangle.Node1 = nOld[0]; + aTriangle.Node2 = nOld[1]; + aTriangle.Node3 = nOld[2]; + aTriangle2.Node1 = nNew[0]; + aTriangle2.Node2 = nNew[1]; + aTriangle2.Node3 = nNew[2]; + aTriangle2.Flags = aTriangle.Flags; + myNbPISeg++; + aSegIndices2 = &PISeg1->ChangeValue(myNbPISeg); + aSegIndices2->LstSg1 = ip3; + aSegIndices2->LstSg2 = ip4; + aSegIndices2->NxtSg1 = aNodIndices3.NdSg; + aSegIndices2->NxtSg2 = aNodIndices4.NdSg; + aSegIndices2->Conex1 = iOld; + aSegIndices2->Conex2 = iNew; + aNodIndices3.NdSg = myNbPISeg; + aNodIndices4.NdSg = myNbPISeg; + } #ifdef OCCT_DEBUG - else if (HLRAlgo_PolyInternalData_ERROR) { - std::cout << "HLRAlgo_PolyInternalData::UpdateLinks : triangle error "; - std::cout << std::endl; - } + else if (HLRAlgo_PolyInternalData_ERROR) { + std::cout << "HLRAlgo_PolyInternalData::UpdateLinks : triangle error "; + std::cout << std::endl; + } #endif } } - + for (iTr = 0; iTr <= 3; iTr++) { - iNew = New [iTr]; + iNew = New[iTr]; if (iTr < 2) skip = iTr; else skip = iTr - 2; - iOld = New [skip]; - ip4 = itpk[skip]; + iOld = New[skip]; + ip4 = itpk[skip]; if (iNew != 0) { - HLRAlgo_TriangleData& aTriangle2 = TData1->ChangeValue(iNew); - n1 = aTriangle2.Node1; - n2 = aTriangle2.Node2; - n3 = aTriangle2.Node3; - - if (!((n1 == ip3 && n2 == ip4) || - (n2 == ip3 && n1 == ip4))) { - Standard_Boolean found = Standard_False; - aNodIndices1 = &PINod1->ChangeValue(n1)->Indices(); - iiii = aNodIndices1->NdSg; - - while (iiii != 0 && !found) { - aSegIndices2 = &PISeg1->ChangeValue(iiii); - if (aSegIndices2->LstSg1 == n1) { - if (aSegIndices2->LstSg2 == n2) { - found = Standard_True; - if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; - else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; - } - else iiii = aSegIndices2->NxtSg1; - } - else { - if (aSegIndices2->LstSg1 == n2) { - found = Standard_True; - if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; - else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; - } - else iiii = aSegIndices2->NxtSg2; - } - } - } - - if (!((n2 == ip3 && n3 == ip4) || - (n3 == ip3 && n2 == ip4))) { - Standard_Boolean found = Standard_False; - aNodIndices1 = &PINod1->ChangeValue(n2)->Indices(); - iiii = aNodIndices1->NdSg; - - while (iiii != 0 && !found) { - aSegIndices2 = &PISeg1->ChangeValue(iiii); - if (aSegIndices2->LstSg1 == n2) { - if (aSegIndices2->LstSg2 == n3) { - found = Standard_True; - if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; - else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; - } - else iiii = aSegIndices2->NxtSg1; - } - else { - if (aSegIndices2->LstSg1 == n3) { - found = Standard_True; - if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; - else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; - } - else iiii = aSegIndices2->NxtSg2; - } - } - } - - if (!((n3 == ip3 && n1 == ip4) || - (n1 == ip3 && n3 == ip4))) { - Standard_Boolean found = Standard_False; - aNodIndices1 = &PINod1->ChangeValue(n3)->Indices(); - iiii = aNodIndices1->NdSg; - - while (iiii != 0 && !found) { - aSegIndices2 = &PISeg1->ChangeValue(iiii); - if (aSegIndices2->LstSg1 == n3) { - if (aSegIndices2->LstSg2 == n1) { - found = Standard_True; - if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; - else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; - } - else iiii = aSegIndices2->NxtSg1; - } - else { - if (aSegIndices2->LstSg1 == n1) { - found = Standard_True; - if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; - else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; - } - else iiii = aSegIndices2->NxtSg2; - } - } - } + HLRAlgo_TriangleData& aTriangle2 = TData1->ChangeValue(iNew); + n1 = aTriangle2.Node1; + n2 = aTriangle2.Node2; + n3 = aTriangle2.Node3; + + if (!((n1 == ip3 && n2 == ip4) || + (n2 == ip3 && n1 == ip4))) { + Standard_Boolean found = Standard_False; + aNodIndices1 = &PINod1->ChangeValue(n1)->Indices(); + iiii = aNodIndices1->NdSg; + + while (iiii != 0 && !found) { + aSegIndices2 = &PISeg1->ChangeValue(iiii); + if (aSegIndices2->LstSg1 == n1) { + if (aSegIndices2->LstSg2 == n2) { + found = Standard_True; + if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; + else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; + } + else iiii = aSegIndices2->NxtSg1; + } + else { + if (aSegIndices2->LstSg1 == n2) { + found = Standard_True; + if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; + else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; + } + else iiii = aSegIndices2->NxtSg2; + } + } + } + + if (!((n2 == ip3 && n3 == ip4) || + (n3 == ip3 && n2 == ip4))) { + Standard_Boolean found = Standard_False; + aNodIndices1 = &PINod1->ChangeValue(n2)->Indices(); + iiii = aNodIndices1->NdSg; + + while (iiii != 0 && !found) { + aSegIndices2 = &PISeg1->ChangeValue(iiii); + if (aSegIndices2->LstSg1 == n2) { + if (aSegIndices2->LstSg2 == n3) { + found = Standard_True; + if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; + else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; + } + else iiii = aSegIndices2->NxtSg1; + } + else { + if (aSegIndices2->LstSg1 == n3) { + found = Standard_True; + if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; + else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; + } + else iiii = aSegIndices2->NxtSg2; + } + } + } + + if (!((n3 == ip3 && n1 == ip4) || + (n1 == ip3 && n3 == ip4))) { + Standard_Boolean found = Standard_False; + aNodIndices1 = &PINod1->ChangeValue(n3)->Indices(); + iiii = aNodIndices1->NdSg; + + while (iiii != 0 && !found) { + aSegIndices2 = &PISeg1->ChangeValue(iiii); + if (aSegIndices2->LstSg1 == n3) { + if (aSegIndices2->LstSg2 == n1) { + found = Standard_True; + if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; + else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; + } + else iiii = aSegIndices2->NxtSg1; + } + else { + if (aSegIndices2->LstSg1 == n1) { + found = Standard_True; + if (aSegIndices2->Conex1 == iOld) aSegIndices2->Conex1 = iNew; + else if (aSegIndices2->Conex2 == iOld) aSegIndices2->Conex2 = iNew; + } + else iiii = aSegIndices2->NxtSg2; + } + } + } } } } @@ -619,22 +633,22 @@ HLRAlgo_PolyInternalData::UpdateLinks (const Standard_Integer ip1, //purpose : //======================================================================= -void HLRAlgo_PolyInternalData::Dump () const +void HLRAlgo_PolyInternalData::Dump() const { Standard_Integer i;//,i1,i2,i3; HLRAlgo_Array1OfTData* TData = &myTData->ChangeArray1(); HLRAlgo_Array1OfPISeg* PISeg = &myPISeg->ChangeArray1(); HLRAlgo_Array1OfPINod* PINod = &myPINod->ChangeArray1(); - + for (i = 1; i <= myNbPINod; i++) { const Handle(HLRAlgo_PolyInternalNode)* pi = &PINod->ChangeValue(i); HLRAlgo_PolyInternalNode::NodeIndices& aNodIndices1 = (*pi)->Indices(); HLRAlgo_PolyInternalNode::NodeData& Nod1RValues = (*pi)->Data(); std::cout << "Node " << std::setw(6) << i << " : "; std::cout << std::setw(6) << aNodIndices1.NdSg; - std::cout << std::setw(20)<< Nod1RValues.Point.X(); - std::cout << std::setw(20)<< Nod1RValues.Point.Y(); - std::cout << std::setw(20)<< Nod1RValues.Point.Z(); + std::cout << std::setw(20) << Nod1RValues.Point.X(); + std::cout << std::setw(20) << Nod1RValues.Point.Y(); + std::cout << std::setw(20) << Nod1RValues.Point.Z(); std::cout << std::endl; } @@ -673,12 +687,12 @@ void HLRAlgo_PolyInternalData::IncTData( if (HLRAlgo_PolyInternalData_TRACE) std::cout << "HLRAlgo_PolyInternalData::IncTData : " << myMxTData << std::endl; #endif - Standard_Integer i,j,k; + Standard_Integer i, j, k; j = myMxTData; k = 2 * j; Handle(HLRAlgo_HArray1OfTData) NwTData = - new HLRAlgo_HArray1OfTData(0,k); + new HLRAlgo_HArray1OfTData(0, k); HLRAlgo_Array1OfTData& oTData = myTData->ChangeArray1(); HLRAlgo_Array1OfTData& nTData = NwTData->ChangeArray1(); @@ -687,7 +701,7 @@ void HLRAlgo_PolyInternalData::IncTData( nTData.ChangeValue(i) = oTData.Value(i); } myMxTData = k; - myTData = NwTData; + myTData = NwTData; if (TData1 == TData2) { TData1 = &nTData; TData2 = TData1; @@ -706,17 +720,17 @@ void HLRAlgo_PolyInternalData::IncTData( void HLRAlgo_PolyInternalData::IncPISeg( HLRAlgo_Array1OfPISeg*& PISeg1, HLRAlgo_Array1OfPISeg*& PISeg2) -{ +{ if (myNbPISeg >= myMxPISeg) { #ifdef OCCT_DEBUG if (HLRAlgo_PolyInternalData_TRACE) std::cout << "HLRAlgo_PolyInternalData::IncPISeg : " << myMxPISeg << std::endl; #endif - Standard_Integer i,j,k; + Standard_Integer i, j, k; j = myMxPISeg; k = 2 * j; Handle(HLRAlgo_HArray1OfPISeg) NwPISeg = - new HLRAlgo_HArray1OfPISeg(0,k); + new HLRAlgo_HArray1OfPISeg(0, k); HLRAlgo_Array1OfPISeg& oPISeg = myPISeg->ChangeArray1(); HLRAlgo_Array1OfPISeg& nPISeg = NwPISeg->ChangeArray1(); @@ -741,8 +755,8 @@ void HLRAlgo_PolyInternalData::IncPISeg( //function : IncPINod //purpose : //======================================================================= -void HLRAlgo_PolyInternalData::IncPINod (HLRAlgo_Array1OfPINod*& PINod1, - HLRAlgo_Array1OfPINod*& PINod2) +void HLRAlgo_PolyInternalData::IncPINod(HLRAlgo_Array1OfPINod*& PINod1, + HLRAlgo_Array1OfPINod*& PINod2) { if (myNbPINod >= myMxPINod) { @@ -750,10 +764,10 @@ void HLRAlgo_PolyInternalData::IncPINod (HLRAlgo_Array1OfPINod*& PINod1, if (HLRAlgo_PolyInternalData_TRACE) std::cout << "HLRAlgo_PolyInternalData::IncPINod : " << myMxPINod << std::endl; #endif - Standard_Integer i,j,k; + Standard_Integer i, j, k; j = myMxPINod; k = 2 * j; - Handle(HLRAlgo_HArray1OfPINod) NwPINod = new HLRAlgo_HArray1OfPINod(0,k); + Handle(HLRAlgo_HArray1OfPINod) NwPINod = new HLRAlgo_HArray1OfPINod(0, k); HLRAlgo_Array1OfPINod& oPINod = myPINod->ChangeArray1(); HLRAlgo_Array1OfPINod& nPINod = NwPINod->ChangeArray1(); Handle(HLRAlgo_PolyInternalNode)* ON = &(oPINod.ChangeValue(1));