// Copyright (c) 1994-1999 Matra Datavision // Copyright (c) 1999-2016 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef _BRepClass3d_BndBoxTree_HeaderFile #define _BRepClass3d_BndBoxTree_HeaderFile #include #include #include #include #include #include #include #include #include #include #include #include // Typedef to reduce code complexity. typedef NCollection_UBTree BRepClass3d_BndBoxTree; // Class representing tree selector for point object. class BRepClass3d_BndBoxTreeSelectorPoint : public BRepClass3d_BndBoxTree::Selector { public: BRepClass3d_BndBoxTreeSelectorPoint(const TopTools_IndexedMapOfShape& theMapOfShape) : BRepClass3d_BndBoxTreeSelectorPoint::Selector(), myMapOfShape (theMapOfShape) {} Standard_Boolean Reject (const Bnd_Box& theBox) const { return (theBox.IsOut (myP)); } Standard_Boolean Accept (const Standard_Integer& theObj); // Sets current point for boxes-point collisions. void SetCurrentPoint (const gp_Pnt& theP) { myP = theP; } private: BRepClass3d_BndBoxTreeSelectorPoint(const BRepClass3d_BndBoxTreeSelectorPoint& ); BRepClass3d_BndBoxTreeSelectorPoint& operator=(const BRepClass3d_BndBoxTreeSelectorPoint& ); private: const TopTools_IndexedMapOfShape& myMapOfShape; //shapes (vertices + edges) gp_Pnt myP; }; // Class representing tree selector for line object. class BRepClass3d_BndBoxTreeSelectorLine : public BRepClass3d_BndBoxTree::Selector { public: struct EdgeParam { TopoDS_Edge myE; Standard_Real myParam; //par on myE Standard_Real myLParam; //par on line }; struct VertParam { TopoDS_Vertex myV; Standard_Real myLParam; //par on line }; public: BRepClass3d_BndBoxTreeSelectorLine(const TopTools_IndexedMapOfShape& theMapOfShape) : BRepClass3d_BndBoxTreeSelectorLine::Selector(), myMapOfShape (theMapOfShape) {} Standard_Boolean Reject (const Bnd_Box& theBox) const { return (theBox.IsOut (myL)); } Standard_Boolean Accept (const Standard_Integer& theObj); //Sets current line for boxes-line collisions void SetCurrentLine (const gp_Lin& theL, const Standard_Real theMaxParam) { myL = theL; myLC.Load(new Geom_Line(theL), -Precision::PConfusion(), theMaxParam); } void GetEdgeParam(const Standard_Integer i, TopoDS_Edge& theOutE, Standard_Real &theOutParam, Standard_Real &outLParam ) const { const EdgeParam& EP = myEP.Value(i); theOutE = EP.myE; theOutParam = EP.myParam; outLParam = EP.myLParam; } void GetVertParam(const Standard_Integer i, TopoDS_Vertex& theOutV, Standard_Real &outLParam ) const { const VertParam& VP = myVP.Value(i); theOutV = VP.myV; outLParam = VP.myLParam; } Standard_Integer GetNbEdgeParam() const { return myEP.Length(); } Standard_Integer GetNbVertParam() const { return myVP.Length(); } void ClearResults() { myEP.Clear(); myVP.Clear(); } private: BRepClass3d_BndBoxTreeSelectorLine(const BRepClass3d_BndBoxTreeSelectorLine& ); BRepClass3d_BndBoxTreeSelectorLine& operator=(const BRepClass3d_BndBoxTreeSelectorLine& ); private: const TopTools_IndexedMapOfShape& myMapOfShape; //shapes (vertices + edges) gp_Lin myL; NCollection_Sequence myEP; //output result (edge vs line) NCollection_Sequence myVP; //output result (vertex vs line) GeomAdaptor_Curve myLC; }; #endif