// Created: 2017-12-28 // // Copyright (c) 2017 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 _BRepMesh_Triangulator_HeaderFile #define _BRepMesh_Triangulator_HeaderFile #include "gp_Pln.hxx" #include "Poly_Triangulation.hxx" #include "IMeshData_Types.hxx" #include "NCollection_DynamicArray.hxx" #include "NCollection_List.hxx" #include "NCollection_Shared.hxx" #include "Standard_Integer.hxx" #include "NCollection_Sequence.hxx" #include "NCollection_DataMap.hxx" #include "BRepMesh_DataStructureOfDelaun.hxx" class Message_Messenger; //! Auxiliary tool to generate triangulation class BRepMesh_Triangulator { public: DEFINE_STANDARD_ALLOC //! Performs conversion of the given list of triangles to Poly_Triangulation. Standard_EXPORT static occ::handle ToPolyTriangulation( const NCollection_Array1& theNodes, const NCollection_List& thePolyTriangles); public: //! Constructor. Initialized tool by the given parameters. Standard_EXPORT BRepMesh_Triangulator(const NCollection_DynamicArray& theXYZs, const NCollection_List>& theWires, const gp_Dir& theNorm); //! Performs triangulation of source wires and stores triangles the output list. Standard_EXPORT bool Perform(NCollection_List& thePolyTriangles); //! Set messenger for output information //! without this Message::DefaultMessenger() will be used void SetMessenger(const occ::handle& theMess) { myMess = theMess; } BRepMesh_Triangulator& operator=(const BRepMesh_Triangulator& theOther); private: // auxiliary for makeTrianglesUsingBRepMesh void addTriange34(const NCollection_Sequence& theW, NCollection_List& thePolyTriangles); // auxiliary for addTriange34 bool checkCondition(const int (&theNodes)[4], const NCollection_Sequence& theWire); // performs initialization of mesh data structure. bool prepareMeshStructure(); // auxiliary for triangulation bool triangulate(NCollection_List& thePolyTriangles); private: const NCollection_DynamicArray& myXYZs; const NCollection_List>& myWires; gp_Pln myPlane; occ::handle myMess; occ::handle myMeshStructure; NCollection_DataMap myTmpMap; Handle(IMeshData::VectorOfInteger) myIndices; }; #endif // _BRepMesh_Triangulator_HeaderFile