mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 23:19:19 +02: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[3] = -0.07f; //+0.3048
|
||||||
fHeightExtra[4] = -0.15f; //+0.3810
|
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)
|
int TAnim::TypeSet(int i, int fl)
|
||||||
{ // ustawienie typu animacji i zależnej od niego ilości animowanych submodeli
|
{ // 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
|
case 5: // 5-pantograf - 5 submodeli
|
||||||
iFlags = 0x055;
|
iFlags = 0x055;
|
||||||
fParamPants = new TAnimPant();
|
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;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
iFlags = 0x068;
|
iFlags = 0x068;
|
||||||
@@ -576,20 +692,20 @@ void TDynamicObject::UpdateDoorPlug(TAnim *pAnim) {
|
|||||||
|
|
||||||
void TDynamicObject::UpdatePant(TAnim *pAnim)
|
void TDynamicObject::UpdatePant(TAnim *pAnim)
|
||||||
{ // animacja pantografu - 4 obracane ramiona, ślizg piąty
|
{ // animacja pantografu - 4 obracane ramiona, ślizg piąty
|
||||||
float a, b, c;
|
float a, b, c;
|
||||||
a = RadToDeg(pAnim->fParamPants->fAngleL - pAnim->fParamPants->fAngleL0);
|
a = RadToDeg(pAnim->fParamPants->fAngleL - pAnim->fParamPants->fAngleL0);
|
||||||
b = RadToDeg(pAnim->fParamPants->fAngleU - pAnim->fParamPants->fAngleU0);
|
b = RadToDeg(pAnim->fParamPants->fAngleU - pAnim->fParamPants->fAngleU0);
|
||||||
c = a + b;
|
c = a + b;
|
||||||
if (pAnim->smElement[0])
|
if (pAnim->smElement[0])
|
||||||
pAnim->smElement[0]->SetRotate(float3(-1, 0, 0), a); // dolne ramię
|
pAnim->smElement[0]->SetRotate(float3(-1, 0, 0), a); // dolne ramie 1
|
||||||
if (pAnim->smElement[1])
|
if (pAnim->smElement[1])
|
||||||
pAnim->smElement[1]->SetRotate(float3(1, 0, 0), a);
|
pAnim->smElement[1]->SetRotate(float3(1, 0, 0), a * pAnim->fParamPants->rd2rf); // dolne ramie 2
|
||||||
if (pAnim->smElement[2])
|
if (pAnim->smElement[2])
|
||||||
pAnim->smElement[2]->SetRotate(float3(1, 0, 0), c); // górne ramię
|
pAnim->smElement[2]->SetRotate(float3(1, 0, 0), c); // górne ramie 1
|
||||||
if (pAnim->smElement[3])
|
if (pAnim->smElement[3])
|
||||||
pAnim->smElement[3]->SetRotate(float3(-1, 0, 0), c);
|
pAnim->smElement[3]->SetRotate(float3(-1, 0, 0), c * pAnim->fParamPants->rg2rf); // gorne ramie 2
|
||||||
if (pAnim->smElement[4])
|
if (pAnim->smElement[4])
|
||||||
pAnim->smElement[4]->SetRotate(float3(-1, 0, 0), b); //ślizg
|
pAnim->smElement[4]->SetRotate(float3(-1, 0, 0), b * pAnim->fParamPants->slizgrf); // ślizg
|
||||||
}
|
}
|
||||||
|
|
||||||
// doorstep animation, shift
|
// 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
|
float fHeightExtra[5]; //łamana symulująca kształt nabieżnika
|
||||||
// double fHorizontal; //Ra 2015-01: położenie drutu względem osi pantografu
|
// double fHorizontal; //Ra 2015-01: położenie drutu względem osi pantografu
|
||||||
void AKP_4E();
|
void AKP_4E();
|
||||||
|
void WBL85();
|
||||||
|
void DSAx();
|
||||||
|
void EC160_200();
|
||||||
};
|
};
|
||||||
|
|
||||||
class TAnim
|
class TAnim
|
||||||
|
|||||||
@@ -469,6 +469,13 @@ struct TBoilerType {
|
|||||||
//}
|
//}
|
||||||
};
|
};
|
||||||
/*rodzaj odbieraka pradu*/
|
/*rodzaj odbieraka pradu*/
|
||||||
|
enum TPantType
|
||||||
|
{
|
||||||
|
AKP_4E,
|
||||||
|
DSAx,
|
||||||
|
EC160_200,
|
||||||
|
WBL85
|
||||||
|
};
|
||||||
struct TCurrentCollector {
|
struct TCurrentCollector {
|
||||||
long CollectorsNo; //musi być tu, bo inaczej się kopie
|
long CollectorsNo; //musi być tu, bo inaczej się kopie
|
||||||
double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany
|
double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie używany
|
||||||
|
|||||||
@@ -11339,6 +11339,17 @@ void TMoverParameters::LoadFIZ_PowerParamsDecode( TPowerParameters &Powerparamet
|
|||||||
|
|
||||||
collectorparameters = TCurrentCollector { 0, 0, 0, 0, 0, 0, false, 0, 0, 0, false, 0 };
|
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.CollectorsNo, "CollectorsNo", Line, "" );
|
||||||
extract_value( collectorparameters.MinH, "MinH", Line, "" );
|
extract_value( collectorparameters.MinH, "MinH", Line, "" );
|
||||||
extract_value( collectorparameters.MaxH, "MaxH", Line, "" );
|
extract_value( collectorparameters.MaxH, "MaxH", Line, "" );
|
||||||
|
|||||||
Reference in New Issue
Block a user