// File generated by CPPExt (Transient)
//
//
//                     Copyright (C) 1991 - 2000 by  
//                      Matra Datavision SA.  All rights reserved.
//  
//                     Copyright (C) 2001 - 2004 by
//                     Open CASCADE SA.  All rights reserved.
// 
// This file is part of the Open CASCADE Technology software.
//
// This software may be distributed and/or modified under the terms and
// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
// and appearing in the file LICENSE included in the packaging of this file.
//  
// This software is distributed on an "AS IS" basis, without warranty of any
// kind, and Open CASCADE SA hereby disclaims all such warranties,
// including without limitation, any warranties of merchantability, fitness
// for a particular purpose or non-infringement. Please see the License for
// the specific terms and conditions governing rights and limitations under the
// License.

#ifndef _XSDRAWSTLVRML_DataSource_HeaderFile
#define _XSDRAWSTLVRML_DataSource_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Handle_XSDRAWSTLVRML_DataSource_HeaderFile
#include <Handle_XSDRAWSTLVRML_DataSource.hxx>
#endif

#ifndef _Handle_StlMesh_Mesh_HeaderFile
#include <Handle_StlMesh_Mesh.hxx>
#endif
#ifndef _TColStd_PackedMapOfInteger_HeaderFile
#include <TColStd_PackedMapOfInteger.hxx>
#endif
#ifndef _Handle_TColStd_HArray2OfInteger_HeaderFile
#include <Handle_TColStd_HArray2OfInteger.hxx>
#endif
#ifndef _Handle_TColStd_HArray2OfReal_HeaderFile
#include <Handle_TColStd_HArray2OfReal.hxx>
#endif
#ifndef _MeshVS_DataSource_HeaderFile
#include <MeshVS_DataSource.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _MeshVS_EntityType_HeaderFile
#include <MeshVS_EntityType.hxx>
#endif
#ifndef _Standard_Address_HeaderFile
#include <Standard_Address.hxx>
#endif
#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
class StlMesh_Mesh;
class TColStd_HArray2OfInteger;
class TColStd_HArray2OfReal;
class TColStd_Array1OfReal;
class TColStd_Array1OfInteger;


//! The sample DataSource for working with STLMesh_Mesh <br>
class XSDRAWSTLVRML_DataSource : public MeshVS_DataSource {

public:
 // Methods PUBLIC
 // 

//! Constructor <br>
Standard_EXPORT XSDRAWSTLVRML_DataSource(const Handle(StlMesh_Mesh)& aMesh);

//! Returns geometry information about node ( if IsElement is False ) or element ( IsElement is True ) <br>
//! by co-ordinates. For element this method must return all its nodes co-ordinates in the strict order: X, Y, Z and <br>
//! with nodes order is the same as in wire bounding the face or link. NbNodes is number of nodes of element. <br>
//! It is recommended to return 1 for node. Type is an element type. <br>
Standard_EXPORT   Standard_Boolean GetGeom(const Standard_Integer ID,const Standard_Boolean IsElement,TColStd_Array1OfReal& Coords,Standard_Integer& NbNodes,MeshVS_EntityType& Type) const;

//! This method is similar to GetGeom, but returns only element or node type. This method is provided for <br>
//! a fine performance. <br>
Standard_EXPORT   Standard_Boolean GetGeomType(const Standard_Integer ID,const Standard_Boolean IsElement,MeshVS_EntityType& Type) const;

//! This method returns by number an address of any entity which represents element or node data structure. <br>
Standard_EXPORT   Standard_Address GetAddr(const Standard_Integer ID,const Standard_Boolean IsElement) const;

//! This method returns information about what node this element consist of. <br>
Standard_EXPORT virtual  Standard_Boolean GetNodesByElement(const Standard_Integer ID,TColStd_Array1OfInteger& NodeIDs,Standard_Integer& NbNodes) const;

//! This method returns map of all nodes the object consist of. <br>
Standard_EXPORT  const TColStd_PackedMapOfInteger& GetAllNodes() const;

//! This method returns map of all elements the object consist of. <br>
Standard_EXPORT  const TColStd_PackedMapOfInteger& GetAllElements() const;

//! This method calculates normal of face, which is using for correct reflection presentation. <br>
//!   There is default method, for advance reflection this method can be redefined. <br>
Standard_EXPORT virtual  Standard_Boolean GetNormal(const Standard_Integer Id,const Standard_Integer Max,Standard_Real& nx,Standard_Real& ny,Standard_Real& nz) const;
//Standard_EXPORT ~XSDRAWSTLVRML_DataSource();




 // Type management
 //
 Standard_EXPORT const Handle(Standard_Type)& DynamicType() const;
 //Standard_EXPORT Standard_Boolean	       IsKind(const Handle(Standard_Type)&) const;

protected:

 // Methods PROTECTED
 // 


 // Fields PROTECTED
 //


private: 

 // Methods PRIVATE
 // 


 // Fields PRIVATE
 //
Handle_StlMesh_Mesh myMesh;
TColStd_PackedMapOfInteger myNodes;
TColStd_PackedMapOfInteger myElements;
Handle_TColStd_HArray2OfInteger myElemNodes;
Handle_TColStd_HArray2OfReal myNodeCoords;
Handle_TColStd_HArray2OfReal myElemNormals;


};





// other Inline functions and methods (like "C++: function call" methods)
//


#endif
