From: ifv Date: Tue, 28 Feb 2017 10:07:02 +0000 (+0300) Subject: Commit for SENR-17-065: wrong calculation of sprops for face X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=73b74714ee68e363e8763e23c6041264f529b611;p=occt-copy.git Commit for SENR-17-065: wrong calculation of sprops for face Fix bug in expressions for calculation of inertia moments Ixx, Iyy, Izz in both methods GProp_SGProps::Compute(...) --- diff --git a/src/GProp/GProp_SGProps.gxx b/src/GProp/GProp_SGProps.gxx index 2a3c40bbc5..988b1ea5b1 100644 --- a/src/GProp/GProp_SGProps.gxx +++ b/src/GProp/GProp_SGProps.gxx @@ -778,9 +778,9 @@ static void Compute(Face& S, Domain& D, const gp_Pnt& loc, Standard_Real& dim, g y = FuncAdd(y, -yloc); z = FuncAdd(z, -zloc); - const Standard_Real XdS = FuncMul(x, ds); - const Standard_Real YdS = FuncMul(y, ds); - const Standard_Real ZdS = FuncMul(z, ds); + Standard_Real XdS = FuncMul(x, ds); + Standard_Real YdS = FuncMul(y, ds); + Standard_Real ZdS = FuncMul(z, ds); LocIx = FuncAdd(LocIx, XdS); LocIy = FuncAdd(LocIy, YdS); @@ -791,6 +791,9 @@ static void Compute(Face& S, Domain& D, const gp_Pnt& loc, Standard_Real& dim, g x = Precision::IsInfinite(x) ? Precision::Infinite() : x*x; y = Precision::IsInfinite(y) ? Precision::Infinite() : y*y; z = Precision::IsInfinite(z) ? Precision::Infinite() : z*z; + XdS = FuncMul(x, ds); + YdS = FuncMul(y, ds); + ZdS = FuncMul(z, ds); LocIxx = FuncAdd(LocIxx, FuncAdd(YdS, ZdS)); LocIyy = FuncAdd(LocIyy, FuncAdd(XdS, ZdS)); LocIzz = FuncAdd(LocIzz, FuncAdd(XdS, YdS)); @@ -909,9 +912,9 @@ static void Compute(const Face& S, dsi = FuncAdd(dsi, ds); - const Standard_Real XdS = FuncMul(x, ds); - const Standard_Real YdS = FuncMul(y, ds); - const Standard_Real ZdS = FuncMul(z, ds); + Standard_Real XdS = FuncMul(x, ds); + Standard_Real YdS = FuncMul(y, ds); + Standard_Real ZdS = FuncMul(z, ds); Ixi = FuncAdd(Ixi, XdS); Iyi = FuncAdd(Iyi, YdS); @@ -922,6 +925,9 @@ static void Compute(const Face& S, x = Precision::IsInfinite(x) ? Precision::Infinite() : x*x; y = Precision::IsInfinite(y) ? Precision::Infinite() : y*y; z = Precision::IsInfinite(z) ? Precision::Infinite() : z*z; + XdS = FuncMul(x, ds); + YdS = FuncMul(y, ds); + ZdS = FuncMul(z, ds); Ixxi = FuncAdd(Ixxi, FuncAdd(YdS, ZdS)); Iyyi = FuncAdd(Iyyi, FuncAdd(XdS, ZdS)); Izzi = FuncAdd(Izzi, FuncAdd(XdS, YdS));