From 346cf025a5783790a6cf16d78840140e1800aa7b Mon Sep 17 00:00:00 2001 From: msv Date: Fri, 10 Apr 2015 15:43:21 +0300 Subject: [PATCH] 0025938: BRepBuilderAPI_Transform is not thread safe ModifiedShape() method is made returning shape by value, not by reference. --- src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cdl | 3 --- src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cxx | 2 +- src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cdl | 1 - src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cxx | 2 +- src/BRepBuilderAPI/BRepBuilderAPI_Transform.cdl | 1 - src/BRepBuilderAPI/BRepBuilderAPI_Transform.cxx | 6 ++---- src/QABugs/QABugs_19.cxx | 4 ++-- src/TNaming/TNaming.cxx | 2 +- 8 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cdl b/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cdl index bf4e94033e..8dc08b02de 100644 --- a/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cdl +++ b/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cdl @@ -110,16 +110,13 @@ is returns ListOfShape from TopTools is redefined virtual; --- Modified by Sergey KHROMOV - Thu Mar 27 17:43:59 2003 Begin ModifiedShape(me; S: Shape from TopoDS) returns Shape from TopoDS ---Purpose: Returns the modified shape corresponding to . - ---C++: return const& raises NoSuchObject from Standard -- if S is not the initial shape or a sub-shape -- of the initial shape. is redefined virtual; --- Modified by Sergey KHROMOV - Thu Mar 27 17:44:02 2003 End fields diff --git a/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cxx b/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cxx index 712a5325c6..8129e48b21 100644 --- a/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cxx +++ b/src/BRepBuilderAPI/BRepBuilderAPI_GTransform.cxx @@ -98,7 +98,7 @@ const TopTools_ListOfShape& BRepBuilderAPI_GTransform::Modified //purpose : //======================================================================= -const TopoDS_Shape& BRepBuilderAPI_GTransform::ModifiedShape +TopoDS_Shape BRepBuilderAPI_GTransform::ModifiedShape (const TopoDS_Shape& S) const { const TopTools_DataMapOfShapeListOfShape &aMapModif = myHist.Modification(); diff --git a/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cdl b/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cdl index 89f6ddb7e3..9fd3ebfe89 100644 --- a/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cdl +++ b/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cdl @@ -122,7 +122,6 @@ is -- transformation has been applied. Raises NoSuchObject from Standard -- if S is not the initial shape or a sub-shape -- of the initial shape. - ---C++: return const& raises NoSuchObject from Standard is virtual; diff --git a/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cxx b/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cxx index 8129b2f084..0c659b0918 100644 --- a/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cxx +++ b/src/BRepBuilderAPI/BRepBuilderAPI_ModifyShape.cxx @@ -131,7 +131,7 @@ void BRepBuilderAPI_ModifyShape::DoModif (const TopoDS_Shape& S, //purpose : //======================================================================= -const TopoDS_Shape& BRepBuilderAPI_ModifyShape::ModifiedShape +TopoDS_Shape BRepBuilderAPI_ModifyShape::ModifiedShape (const TopoDS_Shape& S) const { return myModifier.ModifiedShape(S); diff --git a/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cdl b/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cdl index de56765e48..09e953245e 100644 --- a/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cdl +++ b/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cdl @@ -82,7 +82,6 @@ is ModifiedShape(me; S: Shape from TopoDS) returns Shape from TopoDS ---Purpose: Returns the modified shape corresponding to . - ---C++: return const& raises NoSuchObject from Standard -- if S is not the initial shape or a sub-shape -- of the initial shape. diff --git a/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cxx b/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cxx index 6dcfa5d073..be66456add 100644 --- a/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cxx +++ b/src/BRepBuilderAPI/BRepBuilderAPI_Transform.cxx @@ -79,15 +79,13 @@ void BRepBuilderAPI_Transform::Perform(const TopoDS_Shape& S, //purpose : //======================================================================= -const TopoDS_Shape& BRepBuilderAPI_Transform::ModifiedShape +TopoDS_Shape BRepBuilderAPI_Transform::ModifiedShape (const TopoDS_Shape& S) const { if (myUseModif) { return myModifier.ModifiedShape(S); } - static TopoDS_Shape SM; - SM = S.Moved (myLocation); - return SM; + return S.Moved (myLocation); } diff --git a/src/QABugs/QABugs_19.cxx b/src/QABugs/QABugs_19.cxx index ad9b45d003..0ffdf446d1 100755 --- a/src/QABugs/QABugs_19.cxx +++ b/src/QABugs/QABugs_19.cxx @@ -311,7 +311,7 @@ static Standard_Boolean OCC23774Test(const TopoDS_Face& grossPlateFace, const To di << "Not Done1 " << "\n"; return Standard_False; } - const TopoDS_Shape& step1ModifiedShape = transformer1.ModifiedShape(originalWire); + TopoDS_Shape step1ModifiedShape = transformer1.ModifiedShape(originalWire); BRepExtrema_DistShapeShape distShapeShape1(grossPlateFace,step1ModifiedShape,Extrema_ExtFlag_MIN); if(!distShapeShape1.IsDone()) @@ -329,7 +329,7 @@ static Standard_Boolean OCC23774Test(const TopoDS_Face& grossPlateFace, const To di << "Not Done1 \n"; return Standard_False; } - const TopoDS_Shape& step2ModifiedShape = transformer1.ModifiedShape(step1ModifiedShape); + TopoDS_Shape step2ModifiedShape = transformer1.ModifiedShape(step1ModifiedShape); //This is identity matrix for values but for type is gp_Rotation ?! gp_Trsf2d mirror11 = mirror1; diff --git a/src/TNaming/TNaming.cxx b/src/TNaming/TNaming.cxx index 685a606bc4..baf66c688f 100644 --- a/src/TNaming/TNaming.cxx +++ b/src/TNaming/TNaming.cxx @@ -524,7 +524,7 @@ void TNaming::Replicate (const TopoDS_Shape& SH, TNaming_Builder Builder2 (L.FindChild(1,Standard_True)); for (TopExp_Explorer exp(SH, SST); exp.More(); exp.Next()) { const TopoDS_Shape& oldSubShape = exp.Current(); - const TopoDS_Shape& newSubShape = opeTrsf.ModifiedShape(oldSubShape); + TopoDS_Shape newSubShape = opeTrsf.ModifiedShape(oldSubShape); Builder2.Generated(oldSubShape, newSubShape); } } -- 2.39.5