// 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 _IGESData_IGESReaderData_HeaderFile
#define _IGESData_IGESReaderData_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Handle_IGESData_IGESReaderData_HeaderFile
#include <Handle_IGESData_IGESReaderData.hxx>
#endif

#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _IGESData_IGESType_HeaderFile
#include <IGESData_IGESType.hxx>
#endif
#ifndef _Handle_TColStd_HSequenceOfHAsciiString_HeaderFile
#include <Handle_TColStd_HSequenceOfHAsciiString.hxx>
#endif
#ifndef _Handle_Interface_ParamSet_HeaderFile
#include <Handle_Interface_ParamSet.hxx>
#endif
#ifndef _IGESData_GlobalSection_HeaderFile
#include <IGESData_GlobalSection.hxx>
#endif
#ifndef _IGESData_Array1OfDirPart_HeaderFile
#include <IGESData_Array1OfDirPart.hxx>
#endif
#ifndef _IGESData_ReadStage_HeaderFile
#include <IGESData_ReadStage.hxx>
#endif
#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _Handle_Interface_Check_HeaderFile
#include <Handle_Interface_Check.hxx>
#endif
#ifndef _Interface_FileReaderData_HeaderFile
#include <Interface_FileReaderData.hxx>
#endif
#ifndef _Standard_CString_HeaderFile
#include <Standard_CString.hxx>
#endif
#ifndef _Interface_ParamType_HeaderFile
#include <Interface_ParamType.hxx>
#endif
class TColStd_HSequenceOfHAsciiString;
class Interface_ParamSet;
class Interface_Check;
class IGESData_GlobalSection;
class IGESData_DirPart;
class IGESData_IGESType;


//! specific FileReaderData for IGES <br>
//!           contains header as GlobalSection, and for each Entity, its <br>
//!           directory part as DirPart, list of Parameters as ParamSet <br>
//!           Each Item has a DirPart, plus classically a ParamSet and the <br>
//!           correspondant recognized Entity (inherited from FileReaderData) <br>
//!           Parameters are accessed through specific objects, ParamReaders <br>
class IGESData_IGESReaderData : public Interface_FileReaderData {

public:
 // Methods PUBLIC
 // 

//! creates IGESReaderData correctly dimensionned (for arrays) <br>
//!           <nbe> count of entities, that is, half nb of directory lines <br>
//!           <nbp> : count of parameters <br>
Standard_EXPORT IGESData_IGESReaderData(const Standard_Integer nbe,const Standard_Integer nbp);

//! adds a start line to start section <br>
Standard_EXPORT   void AddStartLine(const Standard_CString aval) ;

//! Returns the Start Section in once <br>
Standard_EXPORT   Handle_TColStd_HSequenceOfHAsciiString StartSection() const;

//! adds a parameter to global section's parameter list <br>
Standard_EXPORT   void AddGlobal(const Interface_ParamType atype,const Standard_CString aval) ;

//! reads header (as GlobalSection) content from the ParamSet <br>
//!           after it has been filled by successive calls to AddGlobal <br>
Standard_EXPORT   void SetGlobalSection() ;

//! returns header as GlobalSection <br>
Standard_EXPORT  const IGESData_GlobalSection& GlobalSection() const;

//! fills a DirPart, designated by its rank (that is, (N+1)/2 if N <br>
//!           is its first number in section D) <br>
Standard_EXPORT   void SetDirPart(const Standard_Integer num,const Standard_Integer i1,const Standard_Integer i2,const Standard_Integer i3,const Standard_Integer i4,const Standard_Integer i5,const Standard_Integer i6,const Standard_Integer i7,const Standard_Integer i8,const Standard_Integer i9,const Standard_Integer i10,const Standard_Integer i11,const Standard_Integer i12,const Standard_Integer i13,const Standard_Integer i14,const Standard_Integer i15,const Standard_Integer i16,const Standard_Integer i17,const Standard_CString res1,const Standard_CString res2,const Standard_CString label,const Standard_CString subs) ;

//! returns DirPart identified by record no (half Dsect number) <br>
Standard_EXPORT  const IGESData_DirPart& DirPart(const Standard_Integer num) const;

//! returns values recorded in directory part n0 <num> <br>
Standard_EXPORT   void DirValues(const Standard_Integer num,Standard_Integer& i1,Standard_Integer& i2,Standard_Integer& i3,Standard_Integer& i4,Standard_Integer& i5,Standard_Integer& i6,Standard_Integer& i7,Standard_Integer& i8,Standard_Integer& i9,Standard_Integer& i10,Standard_Integer& i11,Standard_Integer& i12,Standard_Integer& i13,Standard_Integer& i14,Standard_Integer& i15,Standard_Integer& i16,Standard_Integer& i17,Standard_CString& res1,Standard_CString& res2,Standard_CString& label,Standard_CString& subs) const;

//! returns "type" and "form" info from a directory part <br>
Standard_EXPORT   IGESData_IGESType DirType(const Standard_Integer num) const;

//! Returns count of recorded Entities (i.e. size of Directory) <br>
Standard_EXPORT virtual  Standard_Integer NbEntities() const;

//! determines next suitable record from num; that is num+1 except <br>
//!           for last one which gives 0 <br>
Standard_EXPORT   Standard_Integer FindNextRecord(const Standard_Integer num) const;

//! determines reference numbers in EntityNumber fields (called by <br>
//!           SetEntities from IGESReaderTool) <br>
//!           works on "Integer" type Parameters, because IGES does not <br>
//!           distinguish Integer and Entity Refs : every Integer which is <br>
//!           odd and less than twice NbRecords can be an Entity Ref ... <br>
//!           (Ref Number is then (N+1)/2 if N is the Integer Value) <br>
Standard_EXPORT   void SetEntityNumbers() ;

//! Returns the recorded Global Check <br>
Standard_EXPORT   Handle_Interface_Check GlobalCheck() const;

//! allows to set a default line weight, will be later applied at <br>
//!           load time, on Entities which have no specified line weight <br>
Standard_EXPORT   void SetDefaultLineWeight(const Standard_Real defw) ;

//! Returns the recorded Default Line Weight, if there is <br>
//!           (else, returns 0) <br>
Standard_EXPORT   Standard_Real DefaultLineWeight() const;
//Standard_EXPORT ~IGESData_IGESReaderData();




 // 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
 //
Standard_Integer thecnum;
IGESData_IGESType thectyp;
Handle_TColStd_HSequenceOfHAsciiString thestar;
Handle_Interface_ParamSet theparh;
IGESData_GlobalSection thehead;
IGESData_Array1OfDirPart thedirs;
IGESData_ReadStage thestep;
Standard_Real thedefw;
Handle_Interface_Check thechk;


};





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


#endif
