Date: Friday, September 23, 2016 @ 14:50:23 Author: bluewind Revision: 190212
Fix FS#50829 - [opencascade] 6.9.1-3 breaks FreeCAD upgpkg: opencascade 6.9.1-7 Added: opencascade/trunk/salome-occt-6.9.1.patch Modified: opencascade/trunk/PKGBUILD Deleted: opencascade/trunk/salome-occt-6.9.1.patch -------------------------+ PKGBUILD | 10 salome-occt-6.9.1.patch | 1488 +++++++++++++++++++++++----------------------- 2 files changed, 752 insertions(+), 746 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-09-23 14:10:27 UTC (rev 190211) +++ PKGBUILD 2016-09-23 14:50:23 UTC (rev 190212) @@ -4,7 +4,7 @@ # Contributor: Michele Mocciola <mickele> pkgname=opencascade pkgver=6.9.1 -pkgrel=3 +pkgrel=7 pkgdesc="Open CASCADE Technology, 3D modeling & numerical simulation" arch=('i686' 'x86_64') url="http://www.opencascade.org" @@ -17,6 +17,10 @@ '2924ecf57c95d25888f51071fdc72ad0' '88db8e6b9afa132d1893bbb814250350') +# This works around a bug that is corrected in OCCT 7.0.0 +export CCFLAGS+=" -O2 -fno-delete-null-pointer-checks" +export CXXFLAGS+=" -O2 -fno-delete-null-pointer-checks" + prepare() { cd "$srcdir/$pkgname-$pkgver" @@ -26,6 +30,7 @@ # fix for automake 1.13 sed -i -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.ac + # Included in OCCT 7.0.0 patch -i "$srcdir/salome-occt-6.9.1.patch" -p1 ./build_configure @@ -37,7 +42,8 @@ # fix build with vtk 6.3.0 CXXFLAGS+=' -DvtkFloatingPointType=double' - ./configure --disable-debug --enable-production \ + # Change to --enable-production with OCCT 7.0.0 + ./configure --disable-debug --disable-production \ --with-vtk-library=/opt/vtk6/lib/ --with-vtk-include=/opt/vtk6/include/vtk/ \ --prefix=/opt/$pkgname make Deleted: salome-occt-6.9.1.patch =================================================================== --- salome-occt-6.9.1.patch 2016-09-23 14:10:27 UTC (rev 190211) +++ salome-occt-6.9.1.patch 2016-09-23 14:50:23 UTC (rev 190212) @@ -1,744 +0,0 @@ -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/drv/BRepFill/BRepFill_Pipe.jxx OCCT-6.9.1p1_SRC/drv/BRepFill/BRepFill_Pipe.jxx ---- OCCT-6.9.1_SRC/drv/BRepFill/BRepFill_Pipe.jxx 2015-09-25 17:35:58.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/drv/BRepFill/BRepFill_Pipe.jxx 2016-04-26 16:10:42.000000000 +0300 -@@ -4,6 +4,7 @@ - #include <StdFail_NotDone.hxx> - #include <TopoDS_Wire.hxx> - #include <TopoDS_Shape.hxx> -+#include <TopTools_ListOfShape.hxx> - #include <TopoDS_Face.hxx> - #include <TopoDS_Edge.hxx> - #include <TopoDS_Vertex.hxx> -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx OCCT-6.9.1p1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx ---- OCCT-6.9.1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx 2015-09-25 17:36:04.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx 2016-04-26 16:10:47.000000000 +0300 -@@ -1,4 +1,5 @@ - #include <TopoDS_Wire.hxx> - #include <TopoDS_Shape.hxx> - #include <BRepFill_Pipe.hxx> -+#include <TopTools_ListOfShape.hxx> - #include <BRepOffsetAPI_MakePipe.hxx> -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/inc/BRepFill_Pipe.hxx OCCT-6.9.1p1_SRC/inc/BRepFill_Pipe.hxx ---- OCCT-6.9.1_SRC/inc/BRepFill_Pipe.hxx 2015-09-25 17:35:58.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/inc/BRepFill_Pipe.hxx 2016-04-26 16:10:42.000000000 +0300 -@@ -18,6 +18,7 @@ - #include <TopTools_MapOfShape.hxx> - #include <BRepFill_DataMapOfShapeHArray2OfShape.hxx> - #include <Standard_Integer.hxx> -+#include <TopTools_DataMapOfShapeListOfShape.hxx> - #include <GeomAbs_Shape.hxx> - #include <GeomFill_Trihedron.hxx> - #include <Standard_Boolean.hxx> -@@ -28,6 +29,7 @@ - class StdFail_NotDone; - class TopoDS_Wire; - class TopoDS_Shape; -+class TopTools_ListOfShape; - class TopoDS_Face; - class TopoDS_Edge; - class TopoDS_Vertex; -@@ -65,6 +67,9 @@ - - Standard_EXPORT const TopoDS_Shape& LastShape() const; - -+ //! Returns the list of shapes generated from the shape <S>. -+ Standard_EXPORT void Generated (const TopoDS_Shape& S, TopTools_ListOfShape& L) ; -+ - //! Returns the face created from an edge of the spine - //! and an edge of the profile. - //! if the edges are not in the spine or the profile -@@ -131,6 +136,7 @@ - Standard_Integer myCurIndexOfSectionEdge; - TopoDS_Shape myFirst; - TopoDS_Shape myLast; -+ TopTools_DataMapOfShapeListOfShape myGenMap; - Standard_Integer myDegmax; - Standard_Integer mySegmax; - GeomAbs_Shape myContinuity; -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/inc/BRepOffsetAPI_MakePipe.hxx OCCT-6.9.1p1_SRC/inc/BRepOffsetAPI_MakePipe.hxx ---- OCCT-6.9.1_SRC/inc/BRepOffsetAPI_MakePipe.hxx 2015-09-25 17:36:04.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/inc/BRepOffsetAPI_MakePipe.hxx 2016-04-26 16:10:47.000000000 +0300 -@@ -18,6 +18,7 @@ - class TopoDS_Wire; - class TopoDS_Shape; - class BRepFill_Pipe; -+class TopTools_ListOfShape; - - - //! Describes functions to build pipes. -@@ -68,6 +69,8 @@ - //! Returns the TopoDS Shape of the top of the prism. - Standard_EXPORT TopoDS_Shape LastShape() ; - -+ Standard_EXPORT virtual const TopTools_ListOfShape& Generated (const TopoDS_Shape& S) ; -+ - Standard_EXPORT TopoDS_Shape Generated (const TopoDS_Shape& SSpine, const TopoDS_Shape& SProfile) ; - - Standard_EXPORT Standard_Real ErrorOnSurface() const; -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cdl OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cdl ---- OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cdl 2015-09-16 18:27:02.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cdl 2016-04-26 15:51:10.000000000 +0300 -@@ -15,11 +15,11 @@ - -- commercial license or contractual agreement. - - --class Pipe from BRepFill -+class Pipe from BRepFill - - ---Purpose: Create a shape by sweeping a shape (the profile) - -- along a wire (the spine). -- -- -+ -- - -- For each edge or vertex from the spine the user - -- may ask for the shape generated from each subshape - -- of the profile. -@@ -28,38 +28,40 @@ - - HArray2OfShape from TopTools, - MapOfShape from TopTools, -+ ListOfShape from TopTools, - DataMapOfShapeHArray2OfShape from BRepFill, -+ DataMapOfShapeListOfShape from TopTools, - LocationLaw from BRepFill, - Shape from TopoDS, - Face from TopoDS, - Wire from TopoDS, - Edge from TopoDS, -- Vertex from TopoDS, -+ Vertex from TopoDS, - Pnt from gp, - Trsf from gp, - Shape from GeomAbs, - Trihedron from GeomFill - - raises -- DomainError from Standard, -+ DomainError from Standard, - NotDone from StdFail - - is - - Create returns Pipe from BRepFill; -- -- Create ( Spine : Wire from TopoDS; -+ -+ Create ( Spine : Wire from TopoDS; - Profile : Shape from TopoDS; - aMode : Trihedron from GeomFill = GeomFill_IsCorrectedFrenet; - ForceApproxC1 : Boolean from Standard = Standard_False; -- GeneratePartCase : Boolean from Standard = Standard_False) -+ GeneratePartCase : Boolean from Standard = Standard_False) - returns Pipe from BRepFill; -- -- Perform (me : in out; Spine : Wire from TopoDS; -+ -+ Perform (me : in out; Spine : Wire from TopoDS; - Profile : Shape from TopoDS; -- GeneratePartCase : Boolean from Standard = Standard_False) -+ GeneratePartCase : Boolean from Standard = Standard_False) - is static; -- -+ - Spine(me) returns Shape from TopoDS - ---C++ : return const & - is static; -@@ -74,7 +76,7 @@ - - ErrorOnSurface (me) - returns Real from Standard; -- -+ - FirstShape(me) returns Shape from TopoDS - ---C++ : return const & - is static; -@@ -83,27 +85,30 @@ - ---C++ : return const & - is static; - -+ Generated(me: in out; S: Shape from TopoDS; L: in out ListOfShape from TopTools); -+ ---Purpose: Returns the list of shapes generated from the shape <S>. -+ - Face(me : in out; ESpine, EProfile : Edge from TopoDS) - returns Face from TopoDS - ---Purpose: Returns the face created from an edge of the spine - -- and an edge of the profile. - raises -- DomainError from Standard -+ DomainError from Standard - ---Purpose: if the edges are not in the spine or the profile -- -+ - is static; -- -+ - Edge(me : in out; ESpine : Edge from TopoDS; VProfile : Vertex from TopoDS) - returns Edge from TopoDS - ---Purpose: Returns the edge created from an edge of the spine - -- and a vertex of the profile. - raises -- DomainError from Standard -+ DomainError from Standard - ---Purpose: if the edge or the vertex are not in the spine or - -- the profile. -- -+ - is static; -- -+ - Section(me; VSpine : Vertex from TopoDS) - returns Shape from TopoDS - ---Purpose: Returns the shape created from the profile at the -@@ -111,50 +116,50 @@ - raises - DomainError from Standard - ---Purpose: if the vertex is not in the Spine -- is static; -- -- -- PipeLine(me : in out; Point : Pnt from gp) -+ is static; -+ -+ -+ PipeLine(me : in out; Point : Pnt from gp) - ---Purpose: Create a Wire by sweeping the Point along the <spine> -- returns Wire from TopoDS -+ returns Wire from TopoDS - raises - DomainError from Standard -- ---Purpose: if the <Spine> is undefined -+ ---Purpose: if the <Spine> is undefined - is static; - - - -- - -- Private methods -- -- -- -- MakeShape(me : in out; S : Shape from TopoDS; -+ -- -+ -+ MakeShape(me : in out; S : Shape from TopoDS; - FirstShape, LastShape : Shape from TopoDS) - returns Shape from TopoDS - ---Purpose: Auxiliary recursive method used to build the -- -- result. -+ -- result. - is static private; - - -- FindEdge(me; S : Shape from TopoDS; -- E : Edge from TopoDS; -- Init : in out Integer) -+ FindEdge(me; S : Shape from TopoDS; -+ E : Edge from TopoDS; -+ Init : in out Integer) - ---Purpose: Auxiliary recursive method used to find the edge's index - returns Integer - is static private; - -- FindVertex(me; S : Shape from TopoDS; -- V : Vertex from TopoDS; -- Init : in out Integer) -+ FindVertex(me; S : Shape from TopoDS; -+ V : Vertex from TopoDS; -+ Init : in out Integer) - returns Integer -- is static private; -- -+ is static private; -+ - DefineRealSegmax(me : in out) -- is static private; -- -+ is static private; -+ - RebuildTopOrBottomFace(me; aFace: Shape from TopoDS; - IsTop: Boolean from Standard) -- is static private; -- -+ is static private; -+ - ShareFaces(me: in out; theShape: Shape from TopoDS; - theInitialFacesLen: Integer; - theInitialEdgesLen: Integer; -@@ -164,30 +169,31 @@ - -- Returns the shared shape. If theShape is not modified this - -- method returns it. - returns Shape from TopoDS -- is static private; -- -+ is static private; -+ - fields - mySpine : Wire from TopoDS; - myProfile : Shape from TopoDS; -- myShape : Shape from TopoDS; -- myTrsf : Trsf from gp; -+ myShape : Shape from TopoDS; -+ myTrsf : Trsf from gp; - myLoc : LocationLaw from BRepFill; -- mySections: HArray2OfShape from TopTools; -- myFaces : HArray2OfShape from TopTools; -- myEdges : HArray2OfShape from TopTools; -- myReversedEdges : MapOfShape from TopTools; -+ mySections: HArray2OfShape from TopTools; -+ myFaces : HArray2OfShape from TopTools; -+ myEdges : HArray2OfShape from TopTools; -+ myReversedEdges : MapOfShape from TopTools; - myTapes : DataMapOfShapeHArray2OfShape from BRepFill; - myRails : DataMapOfShapeHArray2OfShape from BRepFill; - myCurIndexOfSectionEdge : Integer from Standard; -- myFirst : Shape from TopoDS; -- myLast : Shape from TopoDS; -- -+ myFirst : Shape from TopoDS; -+ myLast : Shape from TopoDS; -+ myGenMap : DataMapOfShapeListOfShape from TopTools; -+ - myDegmax : Integer from Standard; - mySegmax : Integer from Standard; - myContinuity : Shape from GeomAbs; - myMode : Trihedron from GeomFill; - myForceApproxC1 : Boolean from Standard; -- -+ - myErrorOnSurf : Real from Standard; -- -+ - end Pipe; -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cxx OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cxx ---- OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cxx 2015-09-16 18:27:02.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cxx 2016-04-26 15:51:10.000000000 +0300 -@@ -69,6 +69,38 @@ - static Standard_Boolean Affich = 0; - #endif - -+// --------------------------------------------------------------------------------- -+// static function: UpdateMap -+// purpose: -+// --------------------------------------------------------------------------------- -+static Standard_Boolean UpdateMap(const TopoDS_Shape& theKey, -+ const TopoDS_Shape& theValue, -+ TopTools_DataMapOfShapeListOfShape& theMap) -+{ -+ if(!theMap.IsBound(theKey)) -+ { -+ TopTools_ListOfShape thelist; -+ theMap.Bind(theKey, thelist); -+ } -+ TopTools_ListOfShape& aList = theMap.ChangeFind(theKey); -+ TopTools_ListIteratorOfListOfShape anIt(aList); -+ Standard_Boolean found = Standard_False; -+ -+ for(; anIt.More(); anIt.Next()) -+ { -+ if(theValue.IsSame(anIt.Value())) -+ { -+ found = Standard_True; -+ break; -+ } -+ } -+ -+ if(!found) -+ aList.Append(theValue); -+ -+ return !found; -+} -+ - static void ReverseModifiedEdges(TopoDS_Shape& aShape, - TopTools_MapOfShape& Emap) - { -@@ -374,6 +406,47 @@ - return myLast; - } - -+//======================================================================= -+//function : Generated -+//purpose : -+//======================================================================= -+void BRepFill_Pipe::Generated(const TopoDS_Shape& theShape, -+ TopTools_ListOfShape& theList) -+{ -+ theList.Clear(); -+ -+ if (theShape.IsSame(myProfile)) -+ theList.Append(myShape); -+ else -+ { -+ if (theShape.ShapeType() == TopAbs_FACE || -+ theShape.ShapeType() == TopAbs_WIRE) -+ { -+ if(myGenMap.IsBound(theShape)) -+ theList = myGenMap.Find(theShape); -+ } -+ else if (theShape.ShapeType() == TopAbs_EDGE) -+ { -+ TopoDS_Iterator itw(mySpine); -+ for (; itw.More(); itw.Next()) -+ { -+ const TopoDS_Edge& aSpineEdge = TopoDS::Edge(itw.Value()); -+ const TopoDS_Shape& aFace = Face(aSpineEdge, TopoDS::Edge(theShape)); -+ theList.Append(aFace); -+ } -+ } -+ else if (theShape.ShapeType() == TopAbs_VERTEX) -+ { -+ TopoDS_Iterator itw(mySpine); -+ for (; itw.More(); itw.Next()) -+ { -+ const TopoDS_Edge& aSpineEdge = TopoDS::Edge(itw.Value()); -+ const TopoDS_Shape& anEdge = Edge(aSpineEdge, TopoDS::Vertex(theShape)); -+ theList.Append(anEdge); -+ } -+ } -+ } -+} - - //======================================================================= - //function : Face -@@ -640,6 +713,7 @@ - MkSw.Build( myReversedEdges, myTapes, myRails, - BRepFill_Modified, myContinuity, GeomFill_Location, myDegmax, mySegmax ); - result = MkSw.Shape(); -+ UpdateMap(TheS.Located(myProfile.Location()), result, myGenMap); - myErrorOnSurf = MkSw.ErrorOnSurface(); - - Handle(TopTools_HArray2OfShape) aSections = MkSw.Sections(); -@@ -662,6 +736,7 @@ - MkSw.Build( myReversedEdges, myTapes, myRails, - BRepFill_Modified, myContinuity, GeomFill_Location, myDegmax, mySegmax ); - result = MkSw.Shape(); -+ UpdateMap(TheS.Located(myProfile.Location()), result, myGenMap); - myErrorOnSurf = MkSw.ErrorOnSurface(); - //Correct <myFirst> and <myLast> - ReverseModifiedEdges(myFirst, myReversedEdges); -@@ -769,6 +844,7 @@ - BS.Add(solid,TopoDS::Shell(aLocalShape)); - // BS.Add(solid,TopoDS::Shell(result.Reversed())); - } -+ UpdateMap(TheS.Located(myProfile.Location()), solid, myGenMap); - return solid; - } - else { -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl ---- OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl 2015-09-16 18:27:03.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl 2016-04-26 15:51:11.000000000 +0300 -@@ -36,8 +36,8 @@ - ListOfShape from TopTools - - is -- -- -+ -+ - Create( Spine : Wire from TopoDS; - Profile : Shape from TopoDS ) - ---Purpose: Constructs a pipe by sweeping the shape Profile along -@@ -52,7 +52,7 @@ - -- Standard_DomainError if the profile is a solid or a - -- composite solid. - returns MakePipe from BRepOffsetAPI; -- -+ - Create( Spine : Wire from TopoDS; - Profile : Shape from TopoDS; - aMode : Trihedron from GeomFill; -@@ -72,7 +72,7 @@ - Build(me : in out) - is redefined; - ---Purpose: Builds the resulting shape (redefined from MakeShape). -- ---Level: Public -+ ---Level: Public - - - FirstShape (me : in out) -@@ -84,6 +84,11 @@ - ---Purpose: Returns the TopoDS Shape of the top of the prism. - returns Shape from TopoDS; - -+ Generated (me: in out; S: Shape from TopoDS) -+ returns ListOfShape from TopTools -+ is redefined; -+ ---C++: return const & -+ ---Level: Public - - Generated (me: in out; SSpine, SProfile : Shape from TopoDS) - ---Level: Public -@@ -99,4 +104,4 @@ - - myPipe : Pipe from BRepFill; - --end MakePipe; -+end MakePipe; -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx ---- OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx 2015-09-16 18:27:03.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx 2016-04-26 15:51:11.000000000 +0300 -@@ -109,14 +109,23 @@ - return myPipe.LastShape(); - } - -+//======================================================================= -+//function : Generated -+//purpose : standard method -+//======================================================================= -+const TopTools_ListOfShape& BRepOffsetAPI_MakePipe::Generated(const TopoDS_Shape& S) -+{ -+ myPipe.Generated(S, myGenerated); -+ return myGenerated; -+} - - //======================================================================= - //function : Generated --//purpose : -+//purpose : returns generated elementary subshape - //======================================================================= - --TopoDS_Shape BRepOffsetAPI_MakePipe::Generated (const TopoDS_Shape& SSpine, -- const TopoDS_Shape& SProfile) -+TopoDS_Shape BRepOffsetAPI_MakePipe::Generated(const TopoDS_Shape& SSpine, -+ const TopoDS_Shape& SProfile) - { - if (SProfile.ShapeType () == TopAbs_EDGE) { - return myPipe.Face (TopoDS::Edge (SSpine), TopoDS::Edge (SProfile)); -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/QABugs/QABugs_19.cxx OCCT-6.9.1p1_SRC/src/QABugs/QABugs_19.cxx ---- OCCT-6.9.1_SRC/src/QABugs/QABugs_19.cxx 2015-09-16 18:27:29.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/src/QABugs/QABugs_19.cxx 2016-04-26 15:51:28.000000000 +0300 -@@ -53,6 +53,7 @@ - #include <GeomFill_Trihedron.hxx> - #include <BRepOffsetAPI_MakePipe.hxx> - #include <Standard_Atomic.hxx> -+#include <TopTools_ListIteratorOfListOfShape.hxx> - - #include <Standard_Version.hxx> - -@@ -4306,6 +4307,95 @@ - return 0; - } - -+//======================================================================== -+//function : OCC27065 -+//purpose : Tests overloaded method "Generated" of BRepOffsetAPI_MakePipe -+//======================================================================== -+static Standard_Integer OCC27065(Draw_Interpretor& di, -+ Standard_Integer n, const char** a) -+{ -+ if (n < 3) return 1; -+ BRep_Builder BB; -+ -+ TopoDS_Shape SpineShape = DBRep::Get(a[1],TopAbs_WIRE); -+ if ( SpineShape.IsNull()) return 1; -+ TopoDS_Wire Spine = TopoDS::Wire(SpineShape); -+ -+ TopoDS_Shape Profile = DBRep::Get(a[2]); -+ if ( Profile.IsNull()) return 1; -+ -+ BRepOffsetAPI_MakePipe aPipeBuilder(Spine, Profile); -+ if (!aPipeBuilder.IsDone()) -+ { -+ di << "Error: failed to create pipe\n"; -+ return 1; -+ } -+ -+ TopExp_Explorer Explo(Profile, TopAbs_SHELL); -+ TopoDS_Shape aShape; -+ TopTools_ListIteratorOfListOfShape itl; -+ if (Explo.More()) -+ { -+ aShape = Explo.Current(); -+ TopoDS_Compound res1; -+ BB.MakeCompound(res1); -+ itl.Initialize(aPipeBuilder.Generated(aShape)); -+ for (; itl.More(); itl.Next()) -+ BB.Add(res1, itl.Value()); -+ DBRep::Set("res_shell", res1); -+ } -+ -+ Explo.Init(Profile, TopAbs_FACE); -+ if (Explo.More()) -+ { -+ aShape = Explo.Current(); -+ TopoDS_Compound res2; -+ BB.MakeCompound(res2); -+ itl.Initialize(aPipeBuilder.Generated(aShape)); -+ for (; itl.More(); itl.Next()) -+ BB.Add(res2, itl.Value()); -+ DBRep::Set("res_face", res2); -+ } -+ -+ Explo.Init(Profile, TopAbs_WIRE); -+ if (Explo.More()) -+ { -+ aShape = Explo.Current(); -+ TopoDS_Compound res3; -+ BB.MakeCompound(res3); -+ itl.Initialize(aPipeBuilder.Generated(aShape)); -+ for (; itl.More(); itl.Next()) -+ BB.Add(res3, itl.Value()); -+ DBRep::Set("res_wire", res3); -+ } -+ -+ Explo.Init(Profile, TopAbs_EDGE); -+ if (Explo.More()) -+ { -+ aShape = Explo.Current(); -+ TopoDS_Compound res4; -+ BB.MakeCompound(res4); -+ itl.Initialize(aPipeBuilder.Generated(aShape)); -+ for (; itl.More(); itl.Next()) -+ BB.Add(res4, itl.Value()); -+ DBRep::Set("res_edge", res4); -+ } -+ -+ Explo.Init(Profile, TopAbs_VERTEX); -+ if (Explo.More()) -+ { -+ aShape = Explo.Current(); -+ TopoDS_Compound res5; -+ BB.MakeCompound(res5); -+ itl.Initialize(aPipeBuilder.Generated(aShape)); -+ for (; itl.More(); itl.Next()) -+ BB.Add(res5, itl.Value()); -+ DBRep::Set("res_vertex", res5); -+ } -+ -+ return 0; -+} -+ - void QABugs::Commands_19(Draw_Interpretor& theCommands) { - const char *group = "QABugs"; - -@@ -4397,5 +4487,9 @@ - - theCommands.Add ("OCC26313", "OCC26313 result shape", __FILE__, OCC26313, group); - -+ theCommands.Add ("OCC27065", -+ "OCC27065 spine profile", -+ __FILE__, OCC27065, group); -+ - return; - } -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx OCCT-6.9.1p1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx ---- OCCT-6.9.1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx 2015-09-16 18:27:36.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx 2016-04-26 15:51:32.000000000 +0300 -@@ -687,6 +687,7 @@ - for(theObject->Init(); theObject->More(); theObject->Next()) - { - const Handle(SelectMgr_Selection)& aSelection = theObject->CurrentSelection(); -+ aSelection->UpdateStatus (SelectMgr_TOU_Full); - Standard_Integer aSelMode = aSelection->Mode(); - - for (TColStd_MapIteratorOfMapOfTransient aSelectorIter (mySelectors); aSelectorIter.More(); aSelectorIter.Next()) -@@ -697,10 +698,10 @@ - ClearSelectionStructures (theObject, aSelMode, aCurSelector); - theObject->RecomputePrimitives(aSelMode); - RestoreSelectionStructures (theObject, aSelMode, aCurSelector); -+ aSelection->UpdateStatus (SelectMgr_TOU_None); -+ aSelection->UpdateBVHStatus (SelectMgr_TBU_None); - } - } -- aSelection->UpdateStatus (SelectMgr_TOU_None); -- aSelection->UpdateBVHStatus (SelectMgr_TBU_None); - } - } - -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_1 OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_1 ---- OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_1 1970-01-01 03:00:00.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_1 2016-04-26 14:43:27.000000000 +0300 -@@ -0,0 +1,24 @@ -+puts "============" -+puts "OCC27065" -+puts "============" -+puts "" -+############################### -+## BRepOffsetAPI_MakePipe misses definition of virtual method Generated() -+############################### -+ -+pload QAcommands -+ -+restore [locate_data_file bug24840_comp.brep] sh -+explode sh -+OCC27065 sh_1 sh_2 -+fit -+ -+checknbshapes res_shell -vertex 56 -edge 130 -wire 99 -face 99 -shell 24 -solid 24 -compsolid 1 -compound 1 -shape 434 -+ -+checknbshapes res_face -vertex 8 -edge 12 -wire 6 -face 6 -shell 1 -solid 1 -compsolid 0 -compound 1 -shape 35 -+ -+checknbshapes res_wire -vertex 8 -edge 12 -wire 4 -face 4 -shell 1 -solid 0 -compsolid 0 -compound 1 -shape 30 -+ -+checknbshapes res_edge -vertex 4 -edge 4 -wire 1 -face 1 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 11 -+ -+checknbshapes res_vertex -vertex 2 -edge 1 -wire 0 -face 0 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 4 -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_2 OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_2 ---- OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_2 1970-01-01 03:00:00.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_2 2016-04-26 14:43:27.000000000 +0300 -@@ -0,0 +1,28 @@ -+puts "============" -+puts "OCC27065" -+puts "============" -+puts "" -+############################### -+## BRepOffsetAPI_MakePipe misses definition of virtual method Generated() -+############################### -+ -+pload QAcommands -+ -+restore [locate_data_file bug23903_base.brep] base -+restore [locate_data_file bug23903_path.brep] sp -+explode base -+shape pr Sh -+add base_1 pr -+add base_2 pr -+OCC27065 sp pr -+fit -+ -+checknbshapes res_shell -vertex 2 -edge 5 -wire 3 -face 3 -shell 2 -solid 2 -compsolid 1 -compound 1 -shape 19 -+ -+checknbshapes res_face -vertex 2 -edge 4 -wire 2 -face 2 -shell 1 -solid 1 -compsolid 0 -compound 1 -shape 13 -+ -+checknbshapes res_wire -vertex 2 -edge 4 -wire 2 -face 2 -shell 1 -solid 0 -compsolid 0 -compound 1 -shape 12 -+ -+checknbshapes res_edge -vertex 2 -edge 3 -wire 1 -face 1 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 8 -+ -+checknbshapes res_vertex -vertex 1 -edge 1 -wire 0 -face 0 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 3 -diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/vis/bug26870 OCCT-6.9.1p1_SRC/tests/bugs/vis/bug26870 ---- OCCT-6.9.1_SRC/tests/bugs/vis/bug26870 1970-01-01 03:00:00.000000000 +0300 -+++ OCCT-6.9.1p1_SRC/tests/bugs/vis/bug26870 2016-04-26 15:52:06.000000000 +0300 -@@ -0,0 +1,37 @@ -+puts "============" -+puts "CR26870" -+puts "============" -+puts "" -+ -+########################################################################################## -+puts "Visualization - deactivated selections are not updated after object's re-computation" -+########################################################################################## -+ -+pload VISUALIZATION MODELING -+ -+vinit -+box b 1 1 1 -+vdisplay b -+vfit -+ -+vselmode b 2 1 -+vselmode b 4 1 -+vselmode b 4 0 -+ -+box b 3 3 3 -+vdisplay b -+vfit -+ -+vselmode 4 1 -+ -+# pick a point onto previously computed face -+vmoveto 80 265 -+if {[vreadpixel 90 206 name] == "CYAN1 1"} { -+ puts "ERROR: previously computed entities are highlighted! Selection mode 4 was not updated after redisplaying the box." -+} -+# pick a point onto box -+if {[vreadpixel 29 216 name] == "YELLOW 1"} { -+ puts "ERROR: the box's face is not highlighted! Selection mode 4 was not updated after redisplaying the box." -+} -+ -+set only_screen 1 Added: salome-occt-6.9.1.patch =================================================================== --- salome-occt-6.9.1.patch (rev 0) +++ salome-occt-6.9.1.patch 2016-09-23 14:50:23 UTC (rev 190212) @@ -0,0 +1,744 @@ +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/drv/BRepFill/BRepFill_Pipe.jxx OCCT-6.9.1p1_SRC/drv/BRepFill/BRepFill_Pipe.jxx +--- OCCT-6.9.1_SRC/drv/BRepFill/BRepFill_Pipe.jxx 2015-09-25 17:35:58.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/drv/BRepFill/BRepFill_Pipe.jxx 2016-04-26 16:10:42.000000000 +0300 +@@ -4,6 +4,7 @@ + #include <StdFail_NotDone.hxx> + #include <TopoDS_Wire.hxx> + #include <TopoDS_Shape.hxx> ++#include <TopTools_ListOfShape.hxx> + #include <TopoDS_Face.hxx> + #include <TopoDS_Edge.hxx> + #include <TopoDS_Vertex.hxx> +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx OCCT-6.9.1p1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx +--- OCCT-6.9.1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx 2015-09-25 17:36:04.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx 2016-04-26 16:10:47.000000000 +0300 +@@ -1,4 +1,5 @@ + #include <TopoDS_Wire.hxx> + #include <TopoDS_Shape.hxx> + #include <BRepFill_Pipe.hxx> ++#include <TopTools_ListOfShape.hxx> + #include <BRepOffsetAPI_MakePipe.hxx> +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/inc/BRepFill_Pipe.hxx OCCT-6.9.1p1_SRC/inc/BRepFill_Pipe.hxx +--- OCCT-6.9.1_SRC/inc/BRepFill_Pipe.hxx 2015-09-25 17:35:58.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/inc/BRepFill_Pipe.hxx 2016-04-26 16:10:42.000000000 +0300 +@@ -18,6 +18,7 @@ + #include <TopTools_MapOfShape.hxx> + #include <BRepFill_DataMapOfShapeHArray2OfShape.hxx> + #include <Standard_Integer.hxx> ++#include <TopTools_DataMapOfShapeListOfShape.hxx> + #include <GeomAbs_Shape.hxx> + #include <GeomFill_Trihedron.hxx> + #include <Standard_Boolean.hxx> +@@ -28,6 +29,7 @@ + class StdFail_NotDone; + class TopoDS_Wire; + class TopoDS_Shape; ++class TopTools_ListOfShape; + class TopoDS_Face; + class TopoDS_Edge; + class TopoDS_Vertex; +@@ -65,6 +67,9 @@ + + Standard_EXPORT const TopoDS_Shape& LastShape() const; + ++ //! Returns the list of shapes generated from the shape <S>. ++ Standard_EXPORT void Generated (const TopoDS_Shape& S, TopTools_ListOfShape& L) ; ++ + //! Returns the face created from an edge of the spine + //! and an edge of the profile. + //! if the edges are not in the spine or the profile +@@ -131,6 +136,7 @@ + Standard_Integer myCurIndexOfSectionEdge; + TopoDS_Shape myFirst; + TopoDS_Shape myLast; ++ TopTools_DataMapOfShapeListOfShape myGenMap; + Standard_Integer myDegmax; + Standard_Integer mySegmax; + GeomAbs_Shape myContinuity; +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/inc/BRepOffsetAPI_MakePipe.hxx OCCT-6.9.1p1_SRC/inc/BRepOffsetAPI_MakePipe.hxx +--- OCCT-6.9.1_SRC/inc/BRepOffsetAPI_MakePipe.hxx 2015-09-25 17:36:04.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/inc/BRepOffsetAPI_MakePipe.hxx 2016-04-26 16:10:47.000000000 +0300 +@@ -18,6 +18,7 @@ + class TopoDS_Wire; + class TopoDS_Shape; + class BRepFill_Pipe; ++class TopTools_ListOfShape; + + + //! Describes functions to build pipes. +@@ -68,6 +69,8 @@ + //! Returns the TopoDS Shape of the top of the prism. + Standard_EXPORT TopoDS_Shape LastShape() ; + ++ Standard_EXPORT virtual const TopTools_ListOfShape& Generated (const TopoDS_Shape& S) ; ++ + Standard_EXPORT TopoDS_Shape Generated (const TopoDS_Shape& SSpine, const TopoDS_Shape& SProfile) ; + + Standard_EXPORT Standard_Real ErrorOnSurface() const; +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cdl OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cdl +--- OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cdl 2015-09-16 18:27:02.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cdl 2016-04-26 15:51:10.000000000 +0300 +@@ -15,11 +15,11 @@ + -- commercial license or contractual agreement. + + +-class Pipe from BRepFill ++class Pipe from BRepFill + + ---Purpose: Create a shape by sweeping a shape (the profile) + -- along a wire (the spine). +- -- ++ -- + -- For each edge or vertex from the spine the user + -- may ask for the shape generated from each subshape + -- of the profile. +@@ -28,38 +28,40 @@ + + HArray2OfShape from TopTools, + MapOfShape from TopTools, ++ ListOfShape from TopTools, + DataMapOfShapeHArray2OfShape from BRepFill, ++ DataMapOfShapeListOfShape from TopTools, + LocationLaw from BRepFill, + Shape from TopoDS, + Face from TopoDS, + Wire from TopoDS, + Edge from TopoDS, +- Vertex from TopoDS, ++ Vertex from TopoDS, + Pnt from gp, + Trsf from gp, + Shape from GeomAbs, + Trihedron from GeomFill + + raises +- DomainError from Standard, ++ DomainError from Standard, + NotDone from StdFail + + is + + Create returns Pipe from BRepFill; +- +- Create ( Spine : Wire from TopoDS; ++ ++ Create ( Spine : Wire from TopoDS; + Profile : Shape from TopoDS; + aMode : Trihedron from GeomFill = GeomFill_IsCorrectedFrenet; + ForceApproxC1 : Boolean from Standard = Standard_False; +- GeneratePartCase : Boolean from Standard = Standard_False) ++ GeneratePartCase : Boolean from Standard = Standard_False) + returns Pipe from BRepFill; +- +- Perform (me : in out; Spine : Wire from TopoDS; ++ ++ Perform (me : in out; Spine : Wire from TopoDS; + Profile : Shape from TopoDS; +- GeneratePartCase : Boolean from Standard = Standard_False) ++ GeneratePartCase : Boolean from Standard = Standard_False) + is static; +- ++ + Spine(me) returns Shape from TopoDS + ---C++ : return const & + is static; +@@ -74,7 +76,7 @@ + + ErrorOnSurface (me) + returns Real from Standard; +- ++ + FirstShape(me) returns Shape from TopoDS + ---C++ : return const & + is static; +@@ -83,27 +85,30 @@ + ---C++ : return const & + is static; + ++ Generated(me: in out; S: Shape from TopoDS; L: in out ListOfShape from TopTools); ++ ---Purpose: Returns the list of shapes generated from the shape <S>. ++ + Face(me : in out; ESpine, EProfile : Edge from TopoDS) + returns Face from TopoDS + ---Purpose: Returns the face created from an edge of the spine + -- and an edge of the profile. + raises +- DomainError from Standard ++ DomainError from Standard + ---Purpose: if the edges are not in the spine or the profile +- ++ + is static; +- ++ + Edge(me : in out; ESpine : Edge from TopoDS; VProfile : Vertex from TopoDS) + returns Edge from TopoDS + ---Purpose: Returns the edge created from an edge of the spine + -- and a vertex of the profile. + raises +- DomainError from Standard ++ DomainError from Standard + ---Purpose: if the edge or the vertex are not in the spine or + -- the profile. +- ++ + is static; +- ++ + Section(me; VSpine : Vertex from TopoDS) + returns Shape from TopoDS + ---Purpose: Returns the shape created from the profile at the +@@ -111,50 +116,50 @@ + raises + DomainError from Standard + ---Purpose: if the vertex is not in the Spine +- is static; +- +- +- PipeLine(me : in out; Point : Pnt from gp) ++ is static; ++ ++ ++ PipeLine(me : in out; Point : Pnt from gp) + ---Purpose: Create a Wire by sweeping the Point along the <spine> +- returns Wire from TopoDS ++ returns Wire from TopoDS + raises + DomainError from Standard +- ---Purpose: if the <Spine> is undefined ++ ---Purpose: if the <Spine> is undefined + is static; + + + -- + -- Private methods +- -- +- +- MakeShape(me : in out; S : Shape from TopoDS; ++ -- ++ ++ MakeShape(me : in out; S : Shape from TopoDS; + FirstShape, LastShape : Shape from TopoDS) + returns Shape from TopoDS + ---Purpose: Auxiliary recursive method used to build the +- -- result. ++ -- result. + is static private; + + +- FindEdge(me; S : Shape from TopoDS; +- E : Edge from TopoDS; +- Init : in out Integer) ++ FindEdge(me; S : Shape from TopoDS; ++ E : Edge from TopoDS; ++ Init : in out Integer) + ---Purpose: Auxiliary recursive method used to find the edge's index + returns Integer + is static private; + +- FindVertex(me; S : Shape from TopoDS; +- V : Vertex from TopoDS; +- Init : in out Integer) ++ FindVertex(me; S : Shape from TopoDS; ++ V : Vertex from TopoDS; ++ Init : in out Integer) + returns Integer +- is static private; +- ++ is static private; ++ + DefineRealSegmax(me : in out) +- is static private; +- ++ is static private; ++ + RebuildTopOrBottomFace(me; aFace: Shape from TopoDS; + IsTop: Boolean from Standard) +- is static private; +- ++ is static private; ++ + ShareFaces(me: in out; theShape: Shape from TopoDS; + theInitialFacesLen: Integer; + theInitialEdgesLen: Integer; +@@ -164,30 +169,31 @@ + -- Returns the shared shape. If theShape is not modified this + -- method returns it. + returns Shape from TopoDS +- is static private; +- ++ is static private; ++ + fields + mySpine : Wire from TopoDS; + myProfile : Shape from TopoDS; +- myShape : Shape from TopoDS; +- myTrsf : Trsf from gp; ++ myShape : Shape from TopoDS; ++ myTrsf : Trsf from gp; + myLoc : LocationLaw from BRepFill; +- mySections: HArray2OfShape from TopTools; +- myFaces : HArray2OfShape from TopTools; +- myEdges : HArray2OfShape from TopTools; +- myReversedEdges : MapOfShape from TopTools; ++ mySections: HArray2OfShape from TopTools; ++ myFaces : HArray2OfShape from TopTools; ++ myEdges : HArray2OfShape from TopTools; ++ myReversedEdges : MapOfShape from TopTools; + myTapes : DataMapOfShapeHArray2OfShape from BRepFill; + myRails : DataMapOfShapeHArray2OfShape from BRepFill; + myCurIndexOfSectionEdge : Integer from Standard; +- myFirst : Shape from TopoDS; +- myLast : Shape from TopoDS; +- ++ myFirst : Shape from TopoDS; ++ myLast : Shape from TopoDS; ++ myGenMap : DataMapOfShapeListOfShape from TopTools; ++ + myDegmax : Integer from Standard; + mySegmax : Integer from Standard; + myContinuity : Shape from GeomAbs; + myMode : Trihedron from GeomFill; + myForceApproxC1 : Boolean from Standard; +- ++ + myErrorOnSurf : Real from Standard; +- ++ + end Pipe; +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cxx OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cxx +--- OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cxx 2015-09-16 18:27:02.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cxx 2016-04-26 15:51:10.000000000 +0300 +@@ -69,6 +69,38 @@ + static Standard_Boolean Affich = 0; + #endif + ++// --------------------------------------------------------------------------------- ++// static function: UpdateMap ++// purpose: ++// --------------------------------------------------------------------------------- ++static Standard_Boolean UpdateMap(const TopoDS_Shape& theKey, ++ const TopoDS_Shape& theValue, ++ TopTools_DataMapOfShapeListOfShape& theMap) ++{ ++ if(!theMap.IsBound(theKey)) ++ { ++ TopTools_ListOfShape thelist; ++ theMap.Bind(theKey, thelist); ++ } ++ TopTools_ListOfShape& aList = theMap.ChangeFind(theKey); ++ TopTools_ListIteratorOfListOfShape anIt(aList); ++ Standard_Boolean found = Standard_False; ++ ++ for(; anIt.More(); anIt.Next()) ++ { ++ if(theValue.IsSame(anIt.Value())) ++ { ++ found = Standard_True; ++ break; ++ } ++ } ++ ++ if(!found) ++ aList.Append(theValue); ++ ++ return !found; ++} ++ + static void ReverseModifiedEdges(TopoDS_Shape& aShape, + TopTools_MapOfShape& Emap) + { +@@ -374,6 +406,47 @@ + return myLast; + } + ++//======================================================================= ++//function : Generated ++//purpose : ++//======================================================================= ++void BRepFill_Pipe::Generated(const TopoDS_Shape& theShape, ++ TopTools_ListOfShape& theList) ++{ ++ theList.Clear(); ++ ++ if (theShape.IsSame(myProfile)) ++ theList.Append(myShape); ++ else ++ { ++ if (theShape.ShapeType() == TopAbs_FACE || ++ theShape.ShapeType() == TopAbs_WIRE) ++ { ++ if(myGenMap.IsBound(theShape)) ++ theList = myGenMap.Find(theShape); ++ } ++ else if (theShape.ShapeType() == TopAbs_EDGE) ++ { ++ TopoDS_Iterator itw(mySpine); ++ for (; itw.More(); itw.Next()) ++ { ++ const TopoDS_Edge& aSpineEdge = TopoDS::Edge(itw.Value()); ++ const TopoDS_Shape& aFace = Face(aSpineEdge, TopoDS::Edge(theShape)); ++ theList.Append(aFace); ++ } ++ } ++ else if (theShape.ShapeType() == TopAbs_VERTEX) ++ { ++ TopoDS_Iterator itw(mySpine); ++ for (; itw.More(); itw.Next()) ++ { ++ const TopoDS_Edge& aSpineEdge = TopoDS::Edge(itw.Value()); ++ const TopoDS_Shape& anEdge = Edge(aSpineEdge, TopoDS::Vertex(theShape)); ++ theList.Append(anEdge); ++ } ++ } ++ } ++} + + //======================================================================= + //function : Face +@@ -640,6 +713,7 @@ + MkSw.Build( myReversedEdges, myTapes, myRails, + BRepFill_Modified, myContinuity, GeomFill_Location, myDegmax, mySegmax ); + result = MkSw.Shape(); ++ UpdateMap(TheS.Located(myProfile.Location()), result, myGenMap); + myErrorOnSurf = MkSw.ErrorOnSurface(); + + Handle(TopTools_HArray2OfShape) aSections = MkSw.Sections(); +@@ -662,6 +736,7 @@ + MkSw.Build( myReversedEdges, myTapes, myRails, + BRepFill_Modified, myContinuity, GeomFill_Location, myDegmax, mySegmax ); + result = MkSw.Shape(); ++ UpdateMap(TheS.Located(myProfile.Location()), result, myGenMap); + myErrorOnSurf = MkSw.ErrorOnSurface(); + //Correct <myFirst> and <myLast> + ReverseModifiedEdges(myFirst, myReversedEdges); +@@ -769,6 +844,7 @@ + BS.Add(solid,TopoDS::Shell(aLocalShape)); + // BS.Add(solid,TopoDS::Shell(result.Reversed())); + } ++ UpdateMap(TheS.Located(myProfile.Location()), solid, myGenMap); + return solid; + } + else { +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl +--- OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl 2015-09-16 18:27:03.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl 2016-04-26 15:51:11.000000000 +0300 +@@ -36,8 +36,8 @@ + ListOfShape from TopTools + + is +- +- ++ ++ + Create( Spine : Wire from TopoDS; + Profile : Shape from TopoDS ) + ---Purpose: Constructs a pipe by sweeping the shape Profile along +@@ -52,7 +52,7 @@ + -- Standard_DomainError if the profile is a solid or a + -- composite solid. + returns MakePipe from BRepOffsetAPI; +- ++ + Create( Spine : Wire from TopoDS; + Profile : Shape from TopoDS; + aMode : Trihedron from GeomFill; +@@ -72,7 +72,7 @@ + Build(me : in out) + is redefined; + ---Purpose: Builds the resulting shape (redefined from MakeShape). +- ---Level: Public ++ ---Level: Public + + + FirstShape (me : in out) +@@ -84,6 +84,11 @@ + ---Purpose: Returns the TopoDS Shape of the top of the prism. + returns Shape from TopoDS; + ++ Generated (me: in out; S: Shape from TopoDS) ++ returns ListOfShape from TopTools ++ is redefined; ++ ---C++: return const & ++ ---Level: Public + + Generated (me: in out; SSpine, SProfile : Shape from TopoDS) + ---Level: Public +@@ -99,4 +104,4 @@ + + myPipe : Pipe from BRepFill; + +-end MakePipe; ++end MakePipe; +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx +--- OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx 2015-09-16 18:27:03.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx 2016-04-26 15:51:11.000000000 +0300 +@@ -109,14 +109,23 @@ + return myPipe.LastShape(); + } + ++//======================================================================= ++//function : Generated ++//purpose : standard method ++//======================================================================= ++const TopTools_ListOfShape& BRepOffsetAPI_MakePipe::Generated(const TopoDS_Shape& S) ++{ ++ myPipe.Generated(S, myGenerated); ++ return myGenerated; ++} + + //======================================================================= + //function : Generated +-//purpose : ++//purpose : returns generated elementary subshape + //======================================================================= + +-TopoDS_Shape BRepOffsetAPI_MakePipe::Generated (const TopoDS_Shape& SSpine, +- const TopoDS_Shape& SProfile) ++TopoDS_Shape BRepOffsetAPI_MakePipe::Generated(const TopoDS_Shape& SSpine, ++ const TopoDS_Shape& SProfile) + { + if (SProfile.ShapeType () == TopAbs_EDGE) { + return myPipe.Face (TopoDS::Edge (SSpine), TopoDS::Edge (SProfile)); +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/QABugs/QABugs_19.cxx OCCT-6.9.1p1_SRC/src/QABugs/QABugs_19.cxx +--- OCCT-6.9.1_SRC/src/QABugs/QABugs_19.cxx 2015-09-16 18:27:29.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/src/QABugs/QABugs_19.cxx 2016-04-26 15:51:28.000000000 +0300 +@@ -53,6 +53,7 @@ + #include <GeomFill_Trihedron.hxx> + #include <BRepOffsetAPI_MakePipe.hxx> + #include <Standard_Atomic.hxx> ++#include <TopTools_ListIteratorOfListOfShape.hxx> + + #include <Standard_Version.hxx> + +@@ -4306,6 +4307,95 @@ + return 0; + } + ++//======================================================================== ++//function : OCC27065 ++//purpose : Tests overloaded method "Generated" of BRepOffsetAPI_MakePipe ++//======================================================================== ++static Standard_Integer OCC27065(Draw_Interpretor& di, ++ Standard_Integer n, const char** a) ++{ ++ if (n < 3) return 1; ++ BRep_Builder BB; ++ ++ TopoDS_Shape SpineShape = DBRep::Get(a[1],TopAbs_WIRE); ++ if ( SpineShape.IsNull()) return 1; ++ TopoDS_Wire Spine = TopoDS::Wire(SpineShape); ++ ++ TopoDS_Shape Profile = DBRep::Get(a[2]); ++ if ( Profile.IsNull()) return 1; ++ ++ BRepOffsetAPI_MakePipe aPipeBuilder(Spine, Profile); ++ if (!aPipeBuilder.IsDone()) ++ { ++ di << "Error: failed to create pipe\n"; ++ return 1; ++ } ++ ++ TopExp_Explorer Explo(Profile, TopAbs_SHELL); ++ TopoDS_Shape aShape; ++ TopTools_ListIteratorOfListOfShape itl; ++ if (Explo.More()) ++ { ++ aShape = Explo.Current(); ++ TopoDS_Compound res1; ++ BB.MakeCompound(res1); ++ itl.Initialize(aPipeBuilder.Generated(aShape)); ++ for (; itl.More(); itl.Next()) ++ BB.Add(res1, itl.Value()); ++ DBRep::Set("res_shell", res1); ++ } ++ ++ Explo.Init(Profile, TopAbs_FACE); ++ if (Explo.More()) ++ { ++ aShape = Explo.Current(); ++ TopoDS_Compound res2; ++ BB.MakeCompound(res2); ++ itl.Initialize(aPipeBuilder.Generated(aShape)); ++ for (; itl.More(); itl.Next()) ++ BB.Add(res2, itl.Value()); ++ DBRep::Set("res_face", res2); ++ } ++ ++ Explo.Init(Profile, TopAbs_WIRE); ++ if (Explo.More()) ++ { ++ aShape = Explo.Current(); ++ TopoDS_Compound res3; ++ BB.MakeCompound(res3); ++ itl.Initialize(aPipeBuilder.Generated(aShape)); ++ for (; itl.More(); itl.Next()) ++ BB.Add(res3, itl.Value()); ++ DBRep::Set("res_wire", res3); ++ } ++ ++ Explo.Init(Profile, TopAbs_EDGE); ++ if (Explo.More()) ++ { ++ aShape = Explo.Current(); ++ TopoDS_Compound res4; ++ BB.MakeCompound(res4); ++ itl.Initialize(aPipeBuilder.Generated(aShape)); ++ for (; itl.More(); itl.Next()) ++ BB.Add(res4, itl.Value()); ++ DBRep::Set("res_edge", res4); ++ } ++ ++ Explo.Init(Profile, TopAbs_VERTEX); ++ if (Explo.More()) ++ { ++ aShape = Explo.Current(); ++ TopoDS_Compound res5; ++ BB.MakeCompound(res5); ++ itl.Initialize(aPipeBuilder.Generated(aShape)); ++ for (; itl.More(); itl.Next()) ++ BB.Add(res5, itl.Value()); ++ DBRep::Set("res_vertex", res5); ++ } ++ ++ return 0; ++} ++ + void QABugs::Commands_19(Draw_Interpretor& theCommands) { + const char *group = "QABugs"; + +@@ -4397,5 +4487,9 @@ + + theCommands.Add ("OCC26313", "OCC26313 result shape", __FILE__, OCC26313, group); + ++ theCommands.Add ("OCC27065", ++ "OCC27065 spine profile", ++ __FILE__, OCC27065, group); ++ + return; + } +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx OCCT-6.9.1p1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx +--- OCCT-6.9.1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx 2015-09-16 18:27:36.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx 2016-04-26 15:51:32.000000000 +0300 +@@ -687,6 +687,7 @@ + for(theObject->Init(); theObject->More(); theObject->Next()) + { + const Handle(SelectMgr_Selection)& aSelection = theObject->CurrentSelection(); ++ aSelection->UpdateStatus (SelectMgr_TOU_Full); + Standard_Integer aSelMode = aSelection->Mode(); + + for (TColStd_MapIteratorOfMapOfTransient aSelectorIter (mySelectors); aSelectorIter.More(); aSelectorIter.Next()) +@@ -697,10 +698,10 @@ + ClearSelectionStructures (theObject, aSelMode, aCurSelector); + theObject->RecomputePrimitives(aSelMode); + RestoreSelectionStructures (theObject, aSelMode, aCurSelector); ++ aSelection->UpdateStatus (SelectMgr_TOU_None); ++ aSelection->UpdateBVHStatus (SelectMgr_TBU_None); + } + } +- aSelection->UpdateStatus (SelectMgr_TOU_None); +- aSelection->UpdateBVHStatus (SelectMgr_TBU_None); + } + } + +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_1 OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_1 +--- OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_1 1970-01-01 03:00:00.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_1 2016-04-26 14:43:27.000000000 +0300 +@@ -0,0 +1,24 @@ ++puts "============" ++puts "OCC27065" ++puts "============" ++puts "" ++############################### ++## BRepOffsetAPI_MakePipe misses definition of virtual method Generated() ++############################### ++ ++pload QAcommands ++ ++restore [locate_data_file bug24840_comp.brep] sh ++explode sh ++OCC27065 sh_1 sh_2 ++fit ++ ++checknbshapes res_shell -vertex 56 -edge 130 -wire 99 -face 99 -shell 24 -solid 24 -compsolid 1 -compound 1 -shape 434 ++ ++checknbshapes res_face -vertex 8 -edge 12 -wire 6 -face 6 -shell 1 -solid 1 -compsolid 0 -compound 1 -shape 35 ++ ++checknbshapes res_wire -vertex 8 -edge 12 -wire 4 -face 4 -shell 1 -solid 0 -compsolid 0 -compound 1 -shape 30 ++ ++checknbshapes res_edge -vertex 4 -edge 4 -wire 1 -face 1 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 11 ++ ++checknbshapes res_vertex -vertex 2 -edge 1 -wire 0 -face 0 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 4 +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_2 OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_2 +--- OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_2 1970-01-01 03:00:00.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_2 2016-04-26 14:43:27.000000000 +0300 +@@ -0,0 +1,28 @@ ++puts "============" ++puts "OCC27065" ++puts "============" ++puts "" ++############################### ++## BRepOffsetAPI_MakePipe misses definition of virtual method Generated() ++############################### ++ ++pload QAcommands ++ ++restore [locate_data_file bug23903_base.brep] base ++restore [locate_data_file bug23903_path.brep] sp ++explode base ++shape pr Sh ++add base_1 pr ++add base_2 pr ++OCC27065 sp pr ++fit ++ ++checknbshapes res_shell -vertex 2 -edge 5 -wire 3 -face 3 -shell 2 -solid 2 -compsolid 1 -compound 1 -shape 19 ++ ++checknbshapes res_face -vertex 2 -edge 4 -wire 2 -face 2 -shell 1 -solid 1 -compsolid 0 -compound 1 -shape 13 ++ ++checknbshapes res_wire -vertex 2 -edge 4 -wire 2 -face 2 -shell 1 -solid 0 -compsolid 0 -compound 1 -shape 12 ++ ++checknbshapes res_edge -vertex 2 -edge 3 -wire 1 -face 1 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 8 ++ ++checknbshapes res_vertex -vertex 1 -edge 1 -wire 0 -face 0 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 3 +diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/vis/bug26870 OCCT-6.9.1p1_SRC/tests/bugs/vis/bug26870 +--- OCCT-6.9.1_SRC/tests/bugs/vis/bug26870 1970-01-01 03:00:00.000000000 +0300 ++++ OCCT-6.9.1p1_SRC/tests/bugs/vis/bug26870 2016-04-26 15:52:06.000000000 +0300 +@@ -0,0 +1,37 @@ ++puts "============" ++puts "CR26870" ++puts "============" ++puts "" ++ ++########################################################################################## ++puts "Visualization - deactivated selections are not updated after object's re-computation" ++########################################################################################## ++ ++pload VISUALIZATION MODELING ++ ++vinit ++box b 1 1 1 ++vdisplay b ++vfit ++ ++vselmode b 2 1 ++vselmode b 4 1 ++vselmode b 4 0 ++ ++box b 3 3 3 ++vdisplay b ++vfit ++ ++vselmode 4 1 ++ ++# pick a point onto previously computed face ++vmoveto 80 265 ++if {[vreadpixel 90 206 name] == "CYAN1 1"} { ++ puts "ERROR: previously computed entities are highlighted! Selection mode 4 was not updated after redisplaying the box." ++} ++# pick a point onto box ++if {[vreadpixel 29 216 name] == "YELLOW 1"} { ++ puts "ERROR: the box's face is not highlighted! Selection mode 4 was not updated after redisplaying the box." ++} ++ ++set only_screen 1