// $Source: /usr/local/SimSoft/SoftShop/XGraph/Primitiv/ConJackt.h,v $
// $Revision: 1.11 $
// $Author: baum $
// $Date: 2001/11/29 15:52:24 $
//
// Login name of the user who locked the revision
// $Locker:  $
// Tag name used to checkout the file
// $Name: Release-20 $
// State assigned to revision
// $State: Exp $
//
//
// $Log: ConJackt.h,v $
// Revision 1.11  2001/11/29 15:52:24  baum
// -In Kalender.cpp und Kalender.h Handsteuerung eingebaut
//

#ifndef _CONEJACKET_H
#define _CONEJACKET_H 1

#ifndef WIN32
#define __rtti
#endif

#include "Primitiv.h"
#include "Angle.h"
#include "Vec3D.h"

#ifdef _CONEJACKET_CPP
#  undef _impexp
#  define _impexp __declspec(dllexport)
#elif defined BUILD_XGRAPH_DLL
#  undef _impexp
#  define _impexp
#else
#  undef _impexp
#  define _impexp __declspec(dllimport)
#endif

#if defined __GNUG__ || defined __hpux
#  undef _impexp
#  define _impexp
#endif

//==================================================================
//		Class-Header
//		for class CylinderJacket 
//==================================================================

//##ModelId=4030D78002AF
class _impexp __rtti ConeJacket : public Primitive {
  public:
    // builds a round ConeJacket with Bottom on XY-plane
    // out of default 16 slices
    // the MidVec moves the BottomSide away
	//##ModelId=4030D78002B1
    static Primitive *create (const double& rad, const double& height,
                              const Vec3D& mvec = Vec3D (), const unsigned& slices = 16);

    // builds a round tuncated ConeJacket with Bottom on XY-plane
    // out of default 16 slices
    // the MidVec moves the BottomSide away
	//##ModelId=4030D78002C4
    static Primitive *create (const double& botRad, const double& topRad, const double& height,
                              const Vec3D& mvec = Vec3D (), const unsigned& slices = 16);

    // builds an elliptic tuncated ConeJacket with Bottom on XY-plane
    // out of default 16 slices
    // the MidVec moves the BottomSide away
	//##ModelId=4030D78002D2
    static Primitive *create (const double& xBotRad, const double& yBotRad,
                              const double& xTopRad, const double& yTopRad, const double& height,
                              const Vec3D& mvec = Vec3D (), const unsigned& slices = 16);

    // builds an elliptic tuncated ConeJacket with Bottom on XY-plane
    // with Start-Angle and End-Angle out of default 16 slices
    // the MidVec moves the BottomSide away
	//##ModelId=4030D78002E4
    static Primitive *create (const double& xBotRad, const double& yBotRad,
                              const double& xTopRad, const double& yTopRad, const double& height,
                              const Angle& begin, const Angle& end,
                              const Vec3D& mvec = Vec3D (), const unsigned& slices = 16);

	//##ModelId=4030D78002FF
    static void buildOGLForOthers (const double& xBotRad, const double& yBotRad,
                                   const double& xTopRad, const double& yTopRad, const double& height,
                                   const Angle& begin, const Angle& end, const Vec3D& mvec,
                                   const unsigned& slices, bool normalOut, Vec2D* texSize = NULL);

    // virtual functions for Building Display-Lists
	//##ModelId=4030D780031C
    virtual void buildOGL (Vec2D* texSize = NULL);

  protected:
    // writing create-command to ostr
	//##ModelId=4030D780031F
    void stream (ostream& ostr) const;

  private:
	//##ModelId=4030D7800322
    ConeJacket (const double& xBotRad, const double& yBotRad,
                const double& xTopRad, const double& yTopRad, const double& height,
                const Vec3D& mvec, const unsigned& slices);

	//##ModelId=4030D780033C
    ConeJacket (const double& xBotRad, const double& yBotRad,
                const double& xTopRad, const double& yTopRad, const double& height,
                const Angle& begin, const Angle& end, const Vec3D& mvec,
                const unsigned& slices);

    // destructor
	//##ModelId=4030D780034E
    virtual ~ConeJacket ();

    // default constructor declared, but not defined
	//##ModelId=4030D7800350
    ConeJacket ();

    // copy constructor declared, but not defined
	//##ModelId=4030D780035B
    ConeJacket (const ConeJacket&);

    // assignment operator declared, but not defined
	//##ModelId=4030D780035D
    ConeJacket& operator = (const ConeJacket&);

    // data members
	//##ModelId=4030D780036B
    double   ObjBotRadX;
	//##ModelId=4030D780036C
    double   ObjBotRadY;
	//##ModelId=4030D780037A
    double   ObjTopRadX;
	//##ModelId=4030D780037B
    double   ObjTopRadY;
	//##ModelId=4030D780038A
    double   ObjHeight;
	//##ModelId=4030D780038C
    Angle    ObjBeginAgl;
	//##ModelId=4030D780039A
    Angle    ObjEndAgl;
	//##ModelId=4030D780039F
    Vec3D    ObjMidVec;
	//##ModelId=4030D78003AA
    unsigned ObjSlices;

  //friends
    friend class Primitive;

};	// class ConeJacket


#endif	// !defined _CONEJACKET_H

