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

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Handle_STEPControl_ActorRead_HeaderFile
#include <Handle_STEPControl_ActorRead.hxx>
#endif

#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _Handle_StepRepr_Representation_HeaderFile
#include <Handle_StepRepr_Representation.hxx>
#endif
#ifndef _Transfer_ActorOfTransientProcess_HeaderFile
#include <Transfer_ActorOfTransientProcess.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Handle_Standard_Transient_HeaderFile
#include <Handle_Standard_Transient.hxx>
#endif
#ifndef _Handle_Transfer_Binder_HeaderFile
#include <Handle_Transfer_Binder.hxx>
#endif
#ifndef _Handle_Transfer_TransientProcess_HeaderFile
#include <Handle_Transfer_TransientProcess.hxx>
#endif
#ifndef _Handle_StepGeom_Axis2Placement3d_HeaderFile
#include <Handle_StepGeom_Axis2Placement3d.hxx>
#endif
#ifndef _Handle_StepRepr_RepresentationRelationship_HeaderFile
#include <Handle_StepRepr_RepresentationRelationship.hxx>
#endif
#ifndef _Handle_TransferBRep_ShapeBinder_HeaderFile
#include <Handle_TransferBRep_ShapeBinder.hxx>
#endif
#ifndef _Handle_StepBasic_ProductDefinition_HeaderFile
#include <Handle_StepBasic_ProductDefinition.hxx>
#endif
#ifndef _Handle_StepRepr_NextAssemblyUsageOccurrence_HeaderFile
#include <Handle_StepRepr_NextAssemblyUsageOccurrence.hxx>
#endif
#ifndef _Handle_StepShape_ShapeRepresentation_HeaderFile
#include <Handle_StepShape_ShapeRepresentation.hxx>
#endif
#ifndef _Handle_StepShape_ContextDependentShapeRepresentation_HeaderFile
#include <Handle_StepShape_ContextDependentShapeRepresentation.hxx>
#endif
#ifndef _Handle_StepRepr_ShapeRepresentationRelationship_HeaderFile
#include <Handle_StepRepr_ShapeRepresentationRelationship.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _Handle_StepGeom_GeometricRepresentationItem_HeaderFile
#include <Handle_StepGeom_GeometricRepresentationItem.hxx>
#endif
#ifndef _Handle_StepRepr_MappedItem_HeaderFile
#include <Handle_StepRepr_MappedItem.hxx>
#endif
#ifndef _Handle_StepShape_FaceSurface_HeaderFile
#include <Handle_StepShape_FaceSurface.hxx>
#endif
class StepRepr_Representation;
class Standard_Transient;
class Transfer_Binder;
class Transfer_TransientProcess;
class StepGeom_Axis2Placement3d;
class gp_Trsf;
class StepRepr_RepresentationRelationship;
class TransferBRep_ShapeBinder;
class StepBasic_ProductDefinition;
class StepRepr_NextAssemblyUsageOccurrence;
class StepShape_ShapeRepresentation;
class StepShape_ContextDependentShapeRepresentation;
class StepRepr_ShapeRepresentationRelationship;
class StepGeom_GeometricRepresentationItem;
class StepRepr_MappedItem;
class StepShape_FaceSurface;


//! This class performs the transfer of an Entity from <br>
//!           AP214 and AP203, either Geometric or Topologic. <br>
//! <br>
//!           I.E. for each type of Entity, it invokes the appropriate Tool <br>
//!           then returns the Binder which contains the Result <br>
class STEPControl_ActorRead : public Transfer_ActorOfTransientProcess {

public:
 // Methods PUBLIC
 // 


Standard_EXPORT STEPControl_ActorRead();


Standard_EXPORT virtual  Standard_Boolean Recognize(const Handle(Standard_Transient)& start) ;


Standard_EXPORT virtual  Handle_Transfer_Binder Transfer(const Handle(Standard_Transient)& start,const Handle(Transfer_TransientProcess)& TP) ;


Standard_EXPORT   Handle_Transfer_Binder TransferShape(const Handle(Standard_Transient)& start,const Handle(Transfer_TransientProcess)& TP) ;

//! set units and tolerances context by given ShapeRepresentation <br>
Standard_EXPORT   void PrepareUnits(const Handle(StepRepr_Representation)& rep,const Handle(Transfer_TransientProcess)& TP) ;

//! reset units and tolerances context to default <br>
//!         (mm, radians, read.precision.val, etc.) <br>
Standard_EXPORT   void ResetUnits() ;

//! Computes transformation defined by two axis placements (in MAPPED_ITEM <br>
//!          or ITEM_DEFINED_TRANSFORMATION) taking into account their <br>
//!          representation contexts (i.e. units, which may be different) <br>
//!          Returns True if transformation is computed and is not an identity. <br>
Standard_EXPORT   Standard_Boolean ComputeTransformation(const Handle(StepGeom_Axis2Placement3d)& Origin,const Handle(StepGeom_Axis2Placement3d)& Target,const Handle(StepRepr_Representation)& OrigContext,const Handle(StepRepr_Representation)& TargContext,const Handle(Transfer_TransientProcess)& TP,gp_Trsf& Trsf) ;

//! Computes transformation defined by given <br>
//!          REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION <br>
Standard_EXPORT   Standard_Boolean ComputeSRRWT(const Handle(StepRepr_RepresentationRelationship)& SRR,const Handle(Transfer_TransientProcess)& TP,gp_Trsf& Trsf) ;
//Standard_EXPORT ~STEPControl_ActorRead();




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

protected:

 // Methods PROTECTED
 // 

//!Transfers product definition entity <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepBasic_ProductDefinition)& PD,const Handle(Transfer_TransientProcess)& TP) ;

//!Transfers next assembly usage occurence entity <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepRepr_NextAssemblyUsageOccurrence)& NAUO,const Handle(Transfer_TransientProcess)& TP) ;

//!Transfers shape representation entity <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepShape_ShapeRepresentation)& sr,const Handle(Transfer_TransientProcess)& TP,Standard_Boolean& isBound) ;

//!Transfers context dependent shape representation entity <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepShape_ContextDependentShapeRepresentation)& CDSR,const Handle(Transfer_TransientProcess)& TP) ;

//!Transfers  shape representation relationship entity <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepRepr_ShapeRepresentationRelationship)& und,const Handle(Transfer_TransientProcess)& TP,const Standard_Integer nbrep = 0) ;

//!Transfers  geometric representation item entity such as ManifoldSolidBRep ,...etc <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepGeom_GeometricRepresentationItem)& git,const Handle(Transfer_TransientProcess)& TP) ;

//!Transfers  mapped item <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepRepr_MappedItem)& mapit,const Handle(Transfer_TransientProcess)& TP) ;

//!Transfers  FaceSurface entity <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder TransferEntity(const Handle(StepShape_FaceSurface)& fs,const Handle(Transfer_TransientProcess)& TP) ;

//!Tranlates file by old way when CDSR are roots . Acts only if "read.step.product_mode" is equal Off. <br>
Standard_EXPORT   Handle_TransferBRep_ShapeBinder OldWay(const Handle(Standard_Transient)& start,const Handle(Transfer_TransientProcess)& TP) ;


 // Fields PROTECTED
 //


private: 

 // Methods PRIVATE
 // 


 // Fields PRIVATE
 //
Standard_Real myPrecision;
Standard_Real myMaxTol;
Handle_StepRepr_Representation mySRContext;


};





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


#endif
