mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
Add WBL85, EC160 pantograph types
This commit is contained in:
146
DynObj.cpp
146
DynObj.cpp
@@ -97,6 +97,108 @@ void TAnimPant::AKP_4E()
|
||||
fHeightExtra[3] = -0.07f; //+0.3048
|
||||
fHeightExtra[4] = -0.15f; //+0.3810
|
||||
};
|
||||
void TAnimPant::WBL85()
|
||||
{ // ustawienie wymiarów dla pantografu WBL88
|
||||
vPos = Math3D::vector3(0, 0, 0); // przypisanie domyśnych współczynników do pantografów
|
||||
|
||||
// mnozniki animacji ramion dla pantografu WBL88
|
||||
rd1rf = 1.f;
|
||||
rd2rf = 1.2;
|
||||
rg1rf = 0.875;
|
||||
rg2rf = 1.0;
|
||||
slizgrf = 1.f;
|
||||
|
||||
fLenL1 = 1.98374;
|
||||
fLenU1 = 2.14199;
|
||||
fHoriz = 0.142; // 0.54555075 przesunięcie ślizgu w długości pojazdu względem
|
||||
// osi obrotu dolnego ramienia
|
||||
fHeight = 0.09353; // wysokość ślizgu ponad oś obrotu
|
||||
fWidth = 0.4969; // połowa szerokości ślizgu
|
||||
fAngleL0 = DegToRad(2.8547285515689267247882521833308);
|
||||
fAngleL = fAngleL0; // początkowy kąt dolnego ramienia
|
||||
// fAngleU0=acos((1.22*cos(fAngleL)+0.535)/1.755); //górne ramię
|
||||
fAngleU0 = acos((fLenL1 * cos(fAngleL) + fHoriz) / fLenU1); // górne ramię
|
||||
fAngleU = fAngleU0; // początkowy kąt
|
||||
// PantWys=1.22*sin(fAngleL)+1.755*sin(fAngleU); //wysokość początkowa
|
||||
PantWys = fLenL1 * sin(fAngleL) + fLenU1 * sin(fAngleU) + fHeight; // wysokość początkowa
|
||||
PantTraction = PantWys;
|
||||
hvPowerWire = NULL;
|
||||
fWidthExtra = 0.381f; //(2.032m-1.027)/2
|
||||
// poza obszarem roboczym jest aproksymacja łamaną o 5 odcinkach
|
||||
fHeightExtra[0] = 0.0f; //+0.0762
|
||||
fHeightExtra[1] = -0.01f; //+0.1524
|
||||
fHeightExtra[2] = -0.03f; //+0.2286
|
||||
fHeightExtra[3] = -0.07f; //+0.3048
|
||||
fHeightExtra[4] = -0.15f; //+0.3810
|
||||
};
|
||||
void TAnimPant::EC160_200()
|
||||
{ // ustawienie wymiarów dla pantografow EC160 lub EC200
|
||||
vPos = Math3D::vector3(0, 0, 0); // przypisanie domyśnych współczynników do pantografów
|
||||
|
||||
// mnozniki animacji ramion dla pantografow EC160 lub EC200
|
||||
rd1rf = 1.f;
|
||||
rd2rf = 0.85;
|
||||
rg1rf = 1.f;
|
||||
rg2rf = 1.f; // 0.833
|
||||
slizgrf = 1.f;
|
||||
|
||||
fLenL1 = 1.98374;
|
||||
fLenU1 = 2.14199;
|
||||
fHoriz = 0.142; // 0.54555075 przesunięcie ślizgu w długości pojazdu względem
|
||||
// osi obrotu dolnego ramienia
|
||||
fHeight = 0.09353; // wysokość ślizgu ponad oś obrotu
|
||||
fWidth = 0.4969; // połowa szerokości ślizgu
|
||||
fAngleL0 = DegToRad(2.8547285515689267247882521833308);
|
||||
fAngleL = fAngleL0; // początkowy kąt dolnego ramienia
|
||||
// fAngleU0=acos((1.22*cos(fAngleL)+0.535)/1.755); //górne ramię
|
||||
fAngleU0 = acos((fLenL1 * cos(fAngleL) + fHoriz) / fLenU1); // górne ramię
|
||||
fAngleU = fAngleU0; // początkowy kąt
|
||||
// PantWys=1.22*sin(fAngleL)+1.755*sin(fAngleU); //wysokość początkowa
|
||||
PantWys = fLenL1 * sin(fAngleL) + fLenU1 * sin(fAngleU) + fHeight; // wysokość początkowa
|
||||
PantTraction = PantWys;
|
||||
hvPowerWire = NULL;
|
||||
fWidthExtra = 0.381f; //(2.032m-1.027)/2
|
||||
// poza obszarem roboczym jest aproksymacja łamaną o 5 odcinkach
|
||||
fHeightExtra[0] = 0.0f; //+0.0762
|
||||
fHeightExtra[1] = -0.01f; //+0.1524
|
||||
fHeightExtra[2] = -0.03f; //+0.2286
|
||||
fHeightExtra[3] = -0.07f; //+0.3048
|
||||
fHeightExtra[4] = -0.15f; //+0.3810
|
||||
};
|
||||
void TAnimPant::DSAx()
|
||||
{ // ustawienie wymiarów dla pantografow z rodziny DSA
|
||||
vPos = Math3D::vector3(0, 0, 0); // przypisanie domyśnych współczynników do pantografów
|
||||
|
||||
// mnozniki animacji ramion dla pantografow z rodziny DSA
|
||||
rd1rf = 1.f;
|
||||
rd2rf = 1.025;
|
||||
rg1rf = 0.875;
|
||||
rg2rf = 1.f;
|
||||
slizgrf = 1.f;
|
||||
|
||||
fLenL1 = 1.98374;
|
||||
fLenU1 = 2.14199;
|
||||
fHoriz = 0.142; // 0.54555075 przesunięcie ślizgu w długości pojazdu względem
|
||||
// osi obrotu dolnego ramienia
|
||||
fHeight = 0.09353; // wysokość ślizgu ponad oś obrotu
|
||||
fWidth = 0.4969; // połowa szerokości ślizgu
|
||||
fAngleL0 = DegToRad(2.8547285515689267247882521833308);
|
||||
fAngleL = fAngleL0; // początkowy kąt dolnego ramienia
|
||||
// fAngleU0=acos((1.22*cos(fAngleL)+0.535)/1.755); //górne ramię
|
||||
fAngleU0 = acos((fLenL1 * cos(fAngleL) + fHoriz) / fLenU1); // górne ramię
|
||||
fAngleU = fAngleU0; // początkowy kąt
|
||||
// PantWys=1.22*sin(fAngleL)+1.755*sin(fAngleU); //wysokość początkowa
|
||||
PantWys = fLenL1 * sin(fAngleL) + fLenU1 * sin(fAngleU) + fHeight; // wysokość początkowa
|
||||
PantTraction = PantWys;
|
||||
hvPowerWire = NULL;
|
||||
fWidthExtra = 0.381f; //(2.032m-1.027)/2
|
||||
// poza obszarem roboczym jest aproksymacja łamaną o 5 odcinkach
|
||||
fHeightExtra[0] = 0.0f; //+0.0762
|
||||
fHeightExtra[1] = -0.01f; //+0.1524
|
||||
fHeightExtra[2] = -0.03f; //+0.2286
|
||||
fHeightExtra[3] = -0.07f; //+0.3048
|
||||
fHeightExtra[4] = -0.15f; //+0.3810
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
int TAnim::TypeSet(int i, int fl)
|
||||
{ // ustawienie typu animacji i zależnej od niego ilości animowanych submodeli
|
||||
@@ -127,7 +229,21 @@ int TAnim::TypeSet(int i, int fl)
|
||||
case 5: // 5-pantograf - 5 submodeli
|
||||
iFlags = 0x055;
|
||||
fParamPants = new TAnimPant();
|
||||
fParamPants->AKP_4E();
|
||||
switch (currentMover.EnginePowerSource.CollectorParameters.PantographType) {
|
||||
case (TPantType::AKP_4E):
|
||||
fParamPants->AKP_4E();
|
||||
break;
|
||||
case(TPantType::DSAx):
|
||||
fParamPants->DSAx();
|
||||
break;
|
||||
case(TPantType::EC160_200):
|
||||
fParamPants->EC160_200();
|
||||
break;
|
||||
case(TPantType::WBL88):
|
||||
fParamPants->WBL88();
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case 6:
|
||||
iFlags = 0x068;
|
||||
@@ -576,20 +692,20 @@ void TDynamicObject::UpdateDoorPlug(TAnim *pAnim) {
|
||||
|
||||
void TDynamicObject::UpdatePant(TAnim *pAnim)
|
||||
{ // animacja pantografu - 4 obracane ramiona, ślizg piąty
|
||||
float a, b, c;
|
||||
a = RadToDeg(pAnim->fParamPants->fAngleL - pAnim->fParamPants->fAngleL0);
|
||||
b = RadToDeg(pAnim->fParamPants->fAngleU - pAnim->fParamPants->fAngleU0);
|
||||
c = a + b;
|
||||
if (pAnim->smElement[0])
|
||||
pAnim->smElement[0]->SetRotate(float3(-1, 0, 0), a); // dolne ramię
|
||||
if (pAnim->smElement[1])
|
||||
pAnim->smElement[1]->SetRotate(float3(1, 0, 0), a);
|
||||
if (pAnim->smElement[2])
|
||||
pAnim->smElement[2]->SetRotate(float3(1, 0, 0), c); // górne ramię
|
||||
if (pAnim->smElement[3])
|
||||
pAnim->smElement[3]->SetRotate(float3(-1, 0, 0), c);
|
||||
if (pAnim->smElement[4])
|
||||
pAnim->smElement[4]->SetRotate(float3(-1, 0, 0), b); //ślizg
|
||||
float a, b, c;
|
||||
a = RadToDeg(pAnim->fParamPants->fAngleL - pAnim->fParamPants->fAngleL0);
|
||||
b = RadToDeg(pAnim->fParamPants->fAngleU - pAnim->fParamPants->fAngleU0);
|
||||
c = a + b;
|
||||
if (pAnim->smElement[0])
|
||||
pAnim->smElement[0]->SetRotate(float3(-1, 0, 0), a); // dolne ramie 1
|
||||
if (pAnim->smElement[1])
|
||||
pAnim->smElement[1]->SetRotate(float3(1, 0, 0), a * pAnim->fParamPants->rd2rf); // dolne ramie 2
|
||||
if (pAnim->smElement[2])
|
||||
pAnim->smElement[2]->SetRotate(float3(1, 0, 0), c); // górne ramie 1
|
||||
if (pAnim->smElement[3])
|
||||
pAnim->smElement[3]->SetRotate(float3(-1, 0, 0), c * pAnim->fParamPants->rg2rf); // gorne ramie 2
|
||||
if (pAnim->smElement[4])
|
||||
pAnim->smElement[4]->SetRotate(float3(-1, 0, 0), b * pAnim->fParamPants->slizgrf); // ślizg
|
||||
}
|
||||
|
||||
// doorstep animation, shift
|
||||
|
||||
3
DynObj.h
3
DynObj.h
@@ -104,6 +104,9 @@ class TAnimPant
|
||||
float fHeightExtra[5]; //łamana symulująca kształt nabieżnika
|
||||
// double fHorizontal; //Ra 2015-01: położenie drutu względem osi pantografu
|
||||
void AKP_4E();
|
||||
void WBL85();
|
||||
void DSAx();
|
||||
void EC160_200();
|
||||
};
|
||||
|
||||
class TAnim
|
||||
|
||||
@@ -469,6 +469,13 @@ struct TBoilerType {
|
||||
//}
|
||||
};
|
||||
/*rodzaj odbieraka pradu*/
|
||||
enum TPantType
|
||||
{
|
||||
AKP_4E,
|
||||
DSAx,
|
||||
EC160_200,
|
||||
WBL85
|
||||
};
|
||||
struct TCurrentCollector {
|
||||
long CollectorsNo; //musi być tu, bo inaczej się kopie
|
||||
double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany
|
||||
|
||||
@@ -11338,6 +11338,17 @@ void TMoverParameters::LoadFIZ_PowerParamsDecode( TPowerParameters &Powerparamet
|
||||
auto &collectorparameters = Powerparameters.CollectorParameters;
|
||||
|
||||
collectorparameters = TCurrentCollector { 0, 0, 0, 0, 0, 0, false, 0, 0, 0, false, 0 };
|
||||
|
||||
std::string PantType = "";
|
||||
extract_value(PantType, "PantType", Line, "");
|
||||
if (PantType == "AKP_4E")
|
||||
collectorparameters.PantographType = TPantType::AKP_4E;
|
||||
if (PantType._Starts_with("DSA")) // zakladam ze wszystkie pantografy DSA sa takie same
|
||||
collectorparameters.PantographType = TPantType::DSAx;
|
||||
if (PantType == "EC160" || PantType == "EC200")
|
||||
collectorparameters.PantographType = TPantType::EC160_200;
|
||||
if (PantType == "WBL85")
|
||||
collectorparameters.PantographType = TPantType::WBL85;
|
||||
|
||||
extract_value( collectorparameters.CollectorsNo, "CollectorsNo", Line, "" );
|
||||
extract_value( collectorparameters.MinH, "MinH", Line, "" );
|
||||
|
||||
Reference in New Issue
Block a user