// $Source: /usr/local/SimSoft/Sfx3D/src/gts/gtsb08.cpp,v $
// $Revision: 1.2 $
// $Author: baum $
// $Date: 2001/11/29 15:18:10 $
//
// Login name of the user who locked the revision
// $Locker:  $
// Tag name used to checkout the file
// $Name: Release-14 $
// State assigned to revision
// $State: Exp $
//
//
// $Log: gtsb08.cpp,v $
// Revision 1.2  2001/11/29 15:18:10  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//


/*** Windows headers ***/
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
//#include <winnt.h>
#endif /*WIN32*/

#include "gtstgb.h"
#include "gtsb08.h"

typBTPDrehpuffer::typBTPDrehpuffer (const BstVariante *zTGB)
  : UebernahmeZeit (0.1), Drehgeschwindigkeit (900.0), Kapazitaet (1)
{
  Kapazitaet = zTGB->PalPositions().Count();
} // typBTPDrehpuffer

typBTPDrehpuffer::typBTPDrehpuffer (const typBTPDrehpuffer &copy)
{
  UebernahmeZeit      = copy.UebernahmeZeit;
  Drehgeschwindigkeit = copy.Drehgeschwindigkeit;
  Kapazitaet          = copy.Kapazitaet;
} // typBTPDrehpuffer

typBTPDrehpuffer::typBTPDrehpuffer (const typBTPDrehpuffer *zBTP)
{
  UebernahmeZeit      = zBTP->UebernahmeZeit;
  Drehgeschwindigkeit = zBTP->Drehgeschwindigkeit;
  Kapazitaet          = zBTP->Kapazitaet;
} // typBTPDrehpuffer

typBTPDrehpuffer::typBTPDrehpuffer (InputFile& fin)
{
  SFXToken tok;
  tok.nextToken (fin); tok.EndOfLine (fin);  // Zeile überlesen
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  UebernahmeZeit = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  Drehgeschwindigkeit = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  Kapazitaet = atoi(tok());
  tok.EndOfLine (fin);
}; // typBTPDrehpuffer

void typBTPDrehpuffer::BTPLesen (InputFile& fin)
{
  SFXToken tok;
  tok.nextToken (fin);  UebernahmeZeit      = atof(tok());
  tok.nextToken (fin);  Drehgeschwindigkeit = atof(tok());
  tok.nextToken (fin);  Kapazitaet          = atoi(tok());
  tok.EndOfLine (fin);
}  // ENDE BTPLesen

void typBTPDrehpuffer::BTPSchreiben (ostream& ostrm, typBaustein *zbst, int satznr)
{
  Write (ostrm, "%4d ",    satznr);
  Write (ostrm, "%4d ",    zbst->i_BstNr());
  Write (ostrm, "%4d ",    zbst->i_BstTyp());
  Write (ostrm, "%11.5f ", UebernahmeZeit);
  Write (ostrm, "%11.5f ", Drehgeschwindigkeit);
  Write (ostrm, "%11d\n",  Kapazitaet);
}  // ENDE BTPSchreiben

Ustring typBTPDrehpuffer::getBTPWerte ()
{
  char tmp [512];
  sprintf(tmp, "%9.5f\t%9.5f\t%d",
               UebernahmeZeit, Drehgeschwindigkeit, Kapazitaet);
  Ustring buf(tmp);
  return buf;
}  // ENDE getBTPWerte

void typBTPDrehpuffer::setBTPWerte (Ustring str)
{
  sscanf((char*)str.str(), "%f %f %d",
                            &UebernahmeZeit, &Drehgeschwindigkeit, &Kapazitaet);
}  // ENDE setBTPWerte

void typBTPDrehpuffer::setBTPWerte (const typBTPDrehpuffer *zBTP)
{
  UebernahmeZeit      = zBTP->UebernahmeZeit;
  Drehgeschwindigkeit = zBTP->Drehgeschwindigkeit;
  Kapazitaet          = zBTP->Kapazitaet;
}  // ENDE setBTPWerte

typBTPDrehpuffer::~typBTPDrehpuffer ()
{ } // ~typBTPDrehpuffer

typBSTDrehpuffer::typBSTDrehpuffer (const typBSTDrehpuffer &copy, int nr)
                 :typBaustein(copy, nr),
                  typBTPDrehpuffer(copy),
                  typBSPVariante1(copy)
{
  const DynArray<GeoObject> (&go) (copy.zTGB->AllGeometries ());
  go.First ();
  if (go.Next ()) {
    ObjDrehGeo = new GeoObject ();
    ObjDrehGeo->copyContents (*(go ()));
    ObjDrehGeo->setParent (*zBstGraphik);
    ObjDrehGeo->setSelectionToMum ();
    ObjDrehGeo->setPos (*(copy.zTGB->PalPositions ().First ()), 0);
  }
} // typBSTDrehpuffer

typBSTDrehpuffer::typBSTDrehpuffer (BstVariante *zaufTGB, int nr)
                 :typBaustein(zaufTGB, nr),
                  typBTPDrehpuffer((typBTPDrehpuffer*)zTGB->BTP ()),
                  typBSPVariante1((typBSPVariante1*)zTGB->BSP ())
{
  const DynArray<GeoObject> (&go) (zaufTGB->AllGeometries ());
  go.First ();
  if (go.Next ()) {
    ObjDrehGeo = new GeoObject ();
    ObjDrehGeo->copyContents (*(go ()));
    ObjDrehGeo->setParent (*zBstGraphik);
    ObjDrehGeo->setSelectionToMum ();
    ObjDrehGeo->setPos (*(zaufTGB->PalPositions ().First ()), 0);
  }
} // typBSTDrehpuffer

typBSTDrehpuffer::typBSTDrehpuffer (InputFile& fin, int nr, int btyp, int vtyp)
                 :typBaustein (fin, nr, btyp, vtyp),
                  typBTPDrehpuffer((typBTPDrehpuffer*)zTGB->BTP ()),
                  typBSPVariante1((typBSPVariante1*)zTGB->BSP ())
{
  const DynArray<GeoObject> (&go) (zTGB->AllGeometries ());
  go.First ();
  if (go.Next ()) {
    ObjDrehGeo = new GeoObject ();
    ObjDrehGeo->copyContents (*(go ()));
    ObjDrehGeo->setParent (*zBstGraphik);
    ObjDrehGeo->setSelectionToMum ();
    ObjDrehGeo->setPos (*(zTGB->PalPositions ().First ()), 0);
  }
} // typBSTDrehpuffer

typBSTDrehpuffer::~typBSTDrehpuffer ()
{ } // ~typBSTDrehpuffer

void typBSTDrehpuffer::VarianteErsetzen  (BstVariante *zaufTGB)
{
  typBTPDrehpuffer::setBTPWerte ((typBTPDrehpuffer*)zaufTGB->BTP());
  typBSPVariante1::setBSPWerte((typBSPVariante1*)zaufTGB->BSP());
  BausteinErsetzen (zaufTGB);
  const DynArray<GeoObject> (&go) (zTGB->AllGeometries ());
  go.First ();
  if (go.Next ()) {
    ObjDrehGeo = new GeoObject ();
    ObjDrehGeo->copyContents (*(go ()));
    ObjDrehGeo->setParent (*zBstGraphik);
    ObjDrehGeo->setSelectionToMum ();
    ObjDrehGeo->setPos (*(zTGB->PalPositions ().First ()), 0);
  }
} // ENDE  VarianteErsetzen

Ustring typBSTDrehpuffer::getBTPWerte ()
{
  return typBTPDrehpuffer::getBTPWerte();
}  // ENDE getBTPWerte

void typBSTDrehpuffer::setBTPWerte (Ustring str)
{
  typBTPDrehpuffer::setBTPWerte (str);
}  // ENDE setBTPWerte

void typBSTDrehpuffer::setBTPWerte (const typBTPDrehpuffer *zBTP)
{
  typBSTDrehpuffer::setBTPWerte (zBTP);
}  // ENDE setBTPWerte

void typBSTDrehpuffer::BTPLesen (InputFile& fin)
{
  typBTPDrehpuffer::BTPLesen (fin);
}  // ENDE BSPLesen

void typBSTDrehpuffer::BTPSchreiben (ostream& ostrm, int satznr)
{
  typBTPDrehpuffer::BTPSchreiben (ostrm, this, satznr);
}  // ENDE BTPSchreiben

void typBSTDrehpuffer::BSPLesen (InputFile& fin)
{
  typBSPVariante1::BSPLesen (fin);
}  // ENDE BSPLesen

void typBSTDrehpuffer::BSPSchreiben (ostream& ostrm, int satznr)
{
  typBSPVariante1::BSPSchreiben (ostrm, this, satznr);
}  // ENDE BSPSchreiben

Ustring typBSTDrehpuffer::getBSPWerte ()
{
  return typBSPVariante1::getBSPWerte ();
}  // ENDE getBSPWerte

void typBSTDrehpuffer::setBSPWerte (Ustring str)
{
  typBSPVariante1::setBSPWerte (str);
}  // ENDE setBSPWerte
