mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-03 21:30:35 +05:00
Bug 0019996: EDF824 GEOM: Rotation Bug. Use gp_Trsf::PreMultiply() instead of Multiply(), because in Multiply() it seems to be a bug (OCC20523).
This commit is contained in:
parent
ffc588d550
commit
66f6a06c3e
@ -107,7 +107,9 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
|
|||||||
//aShape = aTransformation.Shape();
|
//aShape = aTransformation.Shape();
|
||||||
TopLoc_Location aLocOrig = anOriginal.Location();
|
TopLoc_Location aLocOrig = anOriginal.Location();
|
||||||
gp_Trsf aTrsfOrig = aLocOrig.Transformation();
|
gp_Trsf aTrsfOrig = aLocOrig.Transformation();
|
||||||
TopLoc_Location aLocRes (aTrsf * aTrsfOrig);
|
//TopLoc_Location aLocRes (aTrsf * aTrsfOrig); // gp_Trsf::Multiply() has a bug
|
||||||
|
aTrsfOrig.PreMultiply(aTrsf);
|
||||||
|
TopLoc_Location aLocRes (aTrsfOrig);
|
||||||
aShape = anOriginal.Located(aLocRes);
|
aShape = anOriginal.Located(aLocRes);
|
||||||
}
|
}
|
||||||
else if (aType == ROTATE_THREE_POINTS || aType == ROTATE_THREE_POINTS_COPY) {
|
else if (aType == ROTATE_THREE_POINTS || aType == ROTATE_THREE_POINTS_COPY) {
|
||||||
@ -139,7 +141,9 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
|
|||||||
//aShape = aTransformation.Shape();
|
//aShape = aTransformation.Shape();
|
||||||
TopLoc_Location aLocOrig = anOriginal.Location();
|
TopLoc_Location aLocOrig = anOriginal.Location();
|
||||||
gp_Trsf aTrsfOrig = aLocOrig.Transformation();
|
gp_Trsf aTrsfOrig = aLocOrig.Transformation();
|
||||||
TopLoc_Location aLocRes (aTrsf * aTrsfOrig);
|
//TopLoc_Location aLocRes (aTrsf * aTrsfOrig); // gp_Trsf::Multiply() has a bug
|
||||||
|
aTrsfOrig.PreMultiply(aTrsf);
|
||||||
|
TopLoc_Location aLocRes (aTrsfOrig);
|
||||||
aShape = anOriginal.Located(aLocRes);
|
aShape = anOriginal.Located(aLocRes);
|
||||||
}
|
}
|
||||||
else if (aType == ROTATE_1D) {
|
else if (aType == ROTATE_1D) {
|
||||||
@ -172,7 +176,10 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aTrsf.SetRotation(AX1, i*angle*PI180);
|
aTrsf.SetRotation(AX1, i*angle*PI180);
|
||||||
TopLoc_Location aLocRes (aTrsf * aTrsfOrig);
|
//TopLoc_Location aLocRes (aTrsf * aTrsfOrig); // gp_Trsf::Multiply() has a bug
|
||||||
|
gp_Trsf aTrsfNew (aTrsfOrig);
|
||||||
|
aTrsfNew.PreMultiply(aTrsf);
|
||||||
|
TopLoc_Location aLocRes (aTrsfNew);
|
||||||
B.Add(aCompound, anOriginal.Located(aLocRes));
|
B.Add(aCompound, anOriginal.Located(aLocRes));
|
||||||
}
|
}
|
||||||
//NPAL18620: performance problem: multiple locations are accumulated
|
//NPAL18620: performance problem: multiple locations are accumulated
|
||||||
@ -256,7 +263,11 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
aTrsf2.SetRotation(AX1, j*ang*PI180);
|
aTrsf2.SetRotation(AX1, j*ang*PI180);
|
||||||
TopLoc_Location aLocRes (aTrsf2 * aTrsf1 * aTrsfOrig);
|
//TopLoc_Location aLocRes (aTrsf2 * aTrsf1 * aTrsfOrig); // gp_Trsf::Multiply() has a bug
|
||||||
|
gp_Trsf aTrsfNew (aTrsfOrig);
|
||||||
|
aTrsfNew.PreMultiply(aTrsf1);
|
||||||
|
aTrsfNew.PreMultiply(aTrsf2);
|
||||||
|
TopLoc_Location aLocRes (aTrsfNew);
|
||||||
B.Add(aCompound, anOriginal.Located(aLocRes));
|
B.Add(aCompound, anOriginal.Located(aLocRes));
|
||||||
}
|
}
|
||||||
//NPAL18620: performance problem: multiple locations are accumulated
|
//NPAL18620: performance problem: multiple locations are accumulated
|
||||||
|
Loading…
Reference in New Issue
Block a user