// $Source: /usr/local/SimSoft/Sfx3D/src/gts/gtsb31.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: gtsb31.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 "gtsb31.h"

typBTPFtsWagen::typBTPFtsWagen ()
  :
  UebernahmeZeit      ( 0.1),  Fahrgeschwindigkeit (50.0),
  Verbrauch           (10.0),  MinKapazitaet       (60.0),
  AktKapazitaet       (480.0), MaxKapazitaet       (480.0),
  SollKapazitaet      (120.0), Streckenvorbelegung (1)
{ } // typBTPFtsWagen

typBTPFtsWagen::typBTPFtsWagen (const typBTPFtsWagen &copy)
{
  UebernahmeZeit      = copy.UebernahmeZeit;
  Fahrgeschwindigkeit = copy.Fahrgeschwindigkeit;
  Verbrauch           = copy.Verbrauch;
  MinKapazitaet       = copy.MinKapazitaet;
  AktKapazitaet       = copy.AktKapazitaet;
  MaxKapazitaet       = copy.MaxKapazitaet;
  SollKapazitaet      = copy.SollKapazitaet;
  Streckenvorbelegung = copy.Streckenvorbelegung;
} // typBTPFtsWagen

typBTPFtsWagen::typBTPFtsWagen (const typBTPFtsWagen *zBTP)
{
  UebernahmeZeit      = zBTP->UebernahmeZeit;
  Fahrgeschwindigkeit = zBTP->Fahrgeschwindigkeit;
  Verbrauch           = zBTP->Verbrauch;
  MinKapazitaet       = zBTP->MinKapazitaet;
  AktKapazitaet       = zBTP->AktKapazitaet;
  MaxKapazitaet       = zBTP->MaxKapazitaet;
  SollKapazitaet      = zBTP->SollKapazitaet;
  Streckenvorbelegung = zBTP->Streckenvorbelegung;
} // typBTPFtsWagen

typBTPFtsWagen::typBTPFtsWagen (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);  Fahrgeschwindigkeit = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  Verbrauch = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  MinKapazitaet = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  AktKapazitaet = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  MaxKapazitaet = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  SollKapazitaet = atof(tok());
  tok.EndOfLine (fin);
  tok.nextToken (fin); // Nr ueberlesen
  tok.nextToken (fin);  Streckenvorbelegung = atoi(tok());
  tok.EndOfLine (fin);
}; // typBTPFtsWagen

void typBTPFtsWagen::BTPLesen (InputFile& fin)
{
  SFXToken tok;
  tok.nextToken (fin);  UebernahmeZeit      = atof(tok());
  tok.nextToken (fin);  Fahrgeschwindigkeit = atof(tok());
  tok.nextToken (fin);  Verbrauch           = atof(tok());
  tok.nextToken (fin);  MinKapazitaet       = atof(tok());
  tok.nextToken (fin);  AktKapazitaet       = atof(tok());
  tok.nextToken (fin);  MaxKapazitaet       = atof(tok());
  tok.nextToken (fin);  SollKapazitaet      = atof(tok());
  tok.nextToken (fin);  Streckenvorbelegung = atoi(tok());
  tok.EndOfLine (fin);
}  // ENDE BTPLesen

void typBTPFtsWagen::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 ", Fahrgeschwindigkeit);
  Write (ostrm, "%11.5f ", Verbrauch);
  Write (ostrm, "%11.5f ", MinKapazitaet);
  Write (ostrm, "%11.5f ", AktKapazitaet);
  Write (ostrm, "%11.5f ", MaxKapazitaet);
  Write (ostrm, "%11.5f ", SollKapazitaet);
  Write (ostrm, "%3d\n",  Streckenvorbelegung);
}  // ENDE BTPSchreiben

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

void typBTPFtsWagen::setBTPWerte (Ustring str)
{
  sscanf((char*)str.str(), "%f %f", &UebernahmeZeit, &Fahrgeschwindigkeit);
}  // ENDE setBTPWerte

void typBTPFtsWagen::setBTPWerte (const typBTPFtsWagen *zBTP)
{
  UebernahmeZeit      = zBTP->UebernahmeZeit;
  Fahrgeschwindigkeit = zBTP->Fahrgeschwindigkeit;
  Verbrauch           = zBTP->Verbrauch;
  MinKapazitaet       = zBTP->MinKapazitaet;
  AktKapazitaet       = zBTP->AktKapazitaet;
  MaxKapazitaet       = zBTP->MaxKapazitaet;
  SollKapazitaet      = zBTP->SollKapazitaet;
  Streckenvorbelegung = zBTP->Streckenvorbelegung;
}  // ENDE setBTPWerte

typBTPFtsWagen::~typBTPFtsWagen ()
{ } // ~typBTPFtsWagen

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

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

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

typBSTFtsWagen::~typBSTFtsWagen ()
{ } // ~typBSTFtsWagen

void typBSTFtsWagen::VarianteErsetzen  (BstVariante *zaufTGB)
{
  typBTPFtsWagen::setBTPWerte ((typBTPFtsWagen*)zaufTGB->BTP());
  typBSPVariante1::setBSPWerte((typBSPVariante1*)zaufTGB->BSP());
  BausteinErsetzen (zaufTGB);

  const DynArray<GeoObject> (&go) (zaufTGB->AllGeometries ());
  go.First ();
  if (go.Next ()) {
    ObjHubKontur = new GeoObject ();
    ObjHubKontur->copyContents (*(go ()));
    ObjHubKontur->setParent (*zBstGraphik);
    ObjHubKontur->setSelectionToMum ();
    ObjHubKontur->setPos (*(zaufTGB->PalPositions ().First ()), 0);
  }
} // ENDE  VarianteErsetzen

Ustring typBSTFtsWagen::getBTPWerte ()
{
  return typBTPFtsWagen::getBTPWerte();
}  // ENDE getBTPWerte

void typBSTFtsWagen::setBTPWerte (Ustring str)
{
  typBTPFtsWagen::setBTPWerte (str);
}  // ENDE setBTPWerte

void typBSTFtsWagen::setBTPWerte (const typBTPFtsWagen *zBTP)
{
  typBSTFtsWagen::setBTPWerte (zBTP);
}  // ENDE setBTPWerte

void typBSTFtsWagen::BTPLesen (InputFile& fin)
{
  typBTPFtsWagen::BTPLesen (fin);
}  // ENDE BSPLesen

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

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

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

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

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

Ustring typBSTFtsWagen::getVBRWerte ()
{
  char tmp [512];
  sprintf (tmp, "%9.5f\t%9.5f\t%9.5f\t%9.5f\t%9.5f", 
        Verbrauch, MinKapazitaet, AktKapazitaet, MaxKapazitaet, SollKapazitaet);
  Ustring buf(tmp);
  return buf;
}  // ENDE getVBRWerte

void typBSTFtsWagen::setVBRWerte (Ustring str)
{
  sscanf((char*)str.str(), "%f %f %f %f %f",
    &Verbrauch, &MinKapazitaet, &AktKapazitaet, &MaxKapazitaet, &SollKapazitaet);
}  // ENDE setVBRWerte