// Created on: 1994-11-16 // Created by: Christian CAILLET // Copyright (c) 1994-1999 Matra Datavision // Copyright (c) 1999-2014 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 _IGESSolid_TopoBuilder_HeaderFile #define _IGESSolid_TopoBuilder_HeaderFile #include #include #include #include #include #include #include class IGESSolid_ManifoldSolid; class IGESSolid_Shell; class IGESSolid_Face; class IGESData_IGESEntity; class IGESSolid_Loop; class IGESSolid_EdgeList; class IGESSolid_VertexList; class Standard_DomainError; class gp_XYZ; //! This class manages the creation of an IGES Topologic entity //! (BREP : ManifoldSolid, Shell, Face) //! This includes definiting of Vertex and Edge Lists, //! building of Edges and Loops class IGESSolid_TopoBuilder { public: DEFINE_STANDARD_ALLOC //! Creates an empty TopoBuilder //! This creates also a unique VertexList and a unique EdgeList, //! empty, but which can be referenced from starting Standard_EXPORT IGESSolid_TopoBuilder(); //! Resets the TopoBuilder for an entirely new operation //! (with a new EdgeList, a new VertexList, new Shells, ...) Standard_EXPORT void Clear(); //! Adds a Vertex to the VertexList Standard_EXPORT void AddVertex (const gp_XYZ& val); //! Returns the count of already recorded Vertices Standard_EXPORT Standard_Integer NbVertices() const; //! Returns a Vertex, given its rank Standard_EXPORT const gp_XYZ& Vertex (const Standard_Integer num) const; //! Returns the VertexList. It can be referenced, but it remains //! empty until call to EndShell or EndSolid Standard_EXPORT Handle(IGESSolid_VertexList) VertexList() const; //! Adds an Edge (3D) to the EdgeList, defined by a Curve and //! two number of Vertex, for start and end Standard_EXPORT void AddEdge (const Handle(IGESData_IGESEntity)& curve, const Standard_Integer vstart, const Standard_Integer vend); //! Returns the count of recorded Edges (3D) Standard_EXPORT Standard_Integer NbEdges() const; //! Returns the definition of an Edge (3D) given its rank Standard_EXPORT void Edge (const Standard_Integer num, Handle(IGESData_IGESEntity)& curve, Standard_Integer& vstart, Standard_Integer& vend) const; //! Returns the EdgeList. It can be referenced, but it remains //! empty until call to EndShell or EndSolid Standard_EXPORT Handle(IGESSolid_EdgeList) EdgeList() const; //! Begins the definition of a new Loop : it is the Current Loop //! All Edges (UV) defined by MakeEdge/EndEdge will be added in it //! The Loop can then be referenced but is empty. It will be //! filled with its Edges(UV) by EndLoop (from SetOuter/AddInner) Standard_EXPORT void MakeLoop(); //! Defines an Edge(UV), to be added in the current Loop by EndEdge //! gives the type of the edge //! identifies the Edge(3D) used as support //! The EdgeList is allways the current one //!