// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _AppDef_MultiLine_HeaderFile
#define _AppDef_MultiLine_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>

#include <Handle_AppDef_HArray1OfMultiPointConstraint.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Real.hxx>
#include <Standard_OStream.hxx>
class AppDef_HArray1OfMultiPointConstraint;
class Standard_ConstructionError;
class Standard_DimensionError;
class Standard_OutOfRange;
class AppDef_Array1OfMultiPointConstraint;
class TColgp_Array1OfPnt;
class TColgp_Array1OfPnt2d;
class AppDef_MultiPointConstraint;


//! This class describes the organized set of points used in the
//! approximations. A MultiLine is composed of n
//! MultiPointConstraints.
//! The approximation of the MultiLine will be done in the order
//! of the given n MultiPointConstraints.
//!
//! Example of a MultiLine composed of MultiPointConstraints:
//!
//! P1______P2_____P3______P4________........_____PNbMult
//!
//! Q1______Q2_____Q3______Q4________........_____QNbMult
//! .                                               .
//! .                                               .
//! .                                               .
//! R1______R2_____R3______R4________........_____RNbMult
//!
//! Pi, Qi, ..., Ri are points of dimension 2 or 3.
//!
//! (P1, Q1, ...R1), ...(Pn, Qn, ...Rn) n= 1,...NbMult are
//! MultiPointConstraints.
//! There are NbPoints points in each MultiPointConstraint.
class AppDef_MultiLine 
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! creates an undefined MultiLine.
  Standard_EXPORT AppDef_MultiLine();
  
  //! given the number NbMult of MultiPointConstraints of this
  //! MultiLine , it initializes all the fields.SetValue must be
  //! called in order for the values of the multipoint
  //! constraint to be taken into account.
  //! An exception is raised if NbMult < 0.
  Standard_EXPORT AppDef_MultiLine(const Standard_Integer NbMult);
  
  //! Constructs a MultiLine with an array of MultiPointConstraints.
  Standard_EXPORT AppDef_MultiLine(const AppDef_Array1OfMultiPointConstraint& tabMultiP);
  
  //! The MultiLine constructed will have one line of
  //! 3d points without their tangencies.
  Standard_EXPORT AppDef_MultiLine(const TColgp_Array1OfPnt& tabP3d);
  
  //! The MultiLine constructed will have one line of
  //! 2d points without their tangencies.
  Standard_EXPORT AppDef_MultiLine(const TColgp_Array1OfPnt2d& tabP2d);
  
  //! returns the number of MultiPointConstraints of the
  //! MultiLine.
  Standard_EXPORT   Standard_Integer NbMultiPoints()  const;
  
  //! returns the number of Points from MultiPoints composing
  //! the MultiLine.
  Standard_EXPORT   Standard_Integer NbPoints()  const;
  
  //! Sets the value of the parameter for the
  //! MultiPointConstraint at position Index.
  //! Exceptions
  //! -   Standard_OutOfRange if Index is less
  //! than 0 or Index is greater than the number
  //! of Multipoint constraints in the MultiLine.
  Standard_EXPORT   void SetParameter (const Standard_Integer Index, const Standard_Real U) ;
  
  //! It sets the MultiPointConstraint of range Index to the
  //! value MPoint.
  //! An exception is raised if Index < 0 or Index> MPoint.
  //! An exception is raised if the dimensions of the
  //! MultiPoints are different.
  Standard_EXPORT   void SetValue (const Standard_Integer Index, const AppDef_MultiPointConstraint& MPoint) ;
  
  //! returns the MultiPointConstraint of range Index
  //! An exception is raised if Index<0 or Index>MPoint.
  Standard_EXPORT   AppDef_MultiPointConstraint Value (const Standard_Integer Index)  const;
  
  //! Prints on the stream o information on the current
  //! state of the object.
  //! Is used to redefine the operator <<.
  Standard_EXPORT   void Dump (Standard_OStream& o)  const;




protected:



  Handle(AppDef_HArray1OfMultiPointConstraint) tabMult;


private:





};







#endif // _AppDef_MultiLine_HeaderFile
