From: akaftasev Date: Tue, 29 Aug 2023 12:18:39 +0000 (+0100) Subject: 0033449: Modeling Algorithm - Crash in BRepTools_GTrsfModification::NewTriangulation... X-Git-Tag: V7_8_0~29 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2FIR-2023-09-01;p=occt.git 0033449: Modeling Algorithm - Crash in BRepTools_GTrsfModification::NewTriangulation() method Changed iteration limits from theTriangulation->NbTriangles() to theTriangulation->NbNodes() Provided modification of the normals only with rotation (gp_GTrsf::Form() == gp_Other leads to crash) --- diff --git a/src/BRepTools/BRepTools_GTrsfModification.cxx b/src/BRepTools/BRepTools_GTrsfModification.cxx index 7f2d9731d6..89001ee10c 100644 --- a/src/BRepTools/BRepTools_GTrsfModification.cxx +++ b/src/BRepTools/BRepTools_GTrsfModification.cxx @@ -308,10 +308,15 @@ Standard_Boolean BRepTools_GTrsfModification::NewTriangulation(const TopoDS_Face // modify normals if (theTriangulation->HasNormals()) { - for (Standard_Integer anInd = 1; anInd <= theTriangulation->NbTriangles(); ++anInd) + for (Standard_Integer anInd = 1; anInd <= theTriangulation->NbNodes(); ++anInd) { gp_Dir aNormal = theTriangulation->Normal(anInd); - aNormal.Transform(aGTrsf.Trsf()); + gp_Mat aMat = aGTrsf.VectorialPart(); + aMat.SetDiagonal(1., 1., 1.); + gp_Trsf aTrsf; + aTrsf.SetForm(gp_Rotation); + (gp_Mat&)aTrsf.HVectorialPart() = aMat; + aNormal.Transform(aTrsf); theTriangulation->SetNormal(anInd, aNormal); } }