/* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef TractionH #define TractionH #include "opengl/glew.h" #include "dumb3d.h" #include "VBO.h" using namespace Math3D; class TTractionPowerSource; class TTraction { // drut zasilający, dla wskaźników używać przedrostka "hv" private: // vector3 vUp,vFront,vLeft; // matrix4x4 mMatrix; // matryca do wyliczania pozycji drutu w zależności od [X,Y,kąt] w scenerii: // - x: odległość w bok (czy odbierak się nie zsunął) // - y: przyjmuje wartość <0,1>, jeśli pod drutem (wzdłuż) // - z: wysokość bezwzględna drutu w danym miejsu public: // na razie TTractionPowerSource *psPower[2]; // najbliższe zasilacze z obu kierunków TTractionPowerSource *psPowered; // ustawione tylko dla bezpośrednio zasilanego przęsła TTraction *hvNext[2]; //łączenie drutów w sieć int iNext[2]; // do którego końca się łączy int iLast; // ustawiony bit 0, jeśli jest ostatnim drutem w sekcji; bit1 - przedostatni public: GLuint uiDisplayList; vector3 pPoint1, pPoint2, pPoint3, pPoint4; vector3 vParametric; // współczynniki równania parametrycznego odcinka double fHeightDifference; //,fMiddleHeight; // int iCategory,iMaterial,iDamageFlag; // float fU,fR,fMaxI,fWireThickness; int iNumSections; int iLines; // ilosc linii dla VBO float NominalVoltage; float MaxCurrent; float fResistivity; //[om/m], przeliczone z [om/km] DWORD Material; // 1: Cu, 2: Al float WireThickness; DWORD DamageFlag; // 1: zasniedziale, 128: zerwana int Wires; float WireOffset; AnsiString asPowerSupplyName; // McZapkie: nazwa podstacji trakcyjnej TTractionPowerSource * psSection; // zasilacz (opcjonalnie może to być pulpit sterujący EL2 w hali!) AnsiString asParallel; // nazwa przęsła, z którym może być bieżnia wspólna TTraction *hvParallel; // jednokierunkowa i zapętlona lista przęseł ewentualnej bieżni wspólnej float fResistance[2]; // rezystancja zastępcza do punktu zasilania (0: przęsło zasilane, <0: do // policzenia) int iTries; // bool bVisible; // DWORD dwFlags; void Optimize(); TTraction(); ~TTraction(); // virtual void InitCenter(vector3 Angles, vector3 pOrigin); // virtual bool Hit(double x, double z, vector3 &hitPoint, vector3 &hitDirection) // { return TNode::Hit(x,z,hitPoint,hitDirection); }; // virtual bool Move(double dx, double dy, double dz) { return false; }; // virtual void SelectedRender(); void RenderDL(float mgn); int RaArrayPrepare(); void RaArrayFill(CVertNormTex *Vert); void RenderVBO(float mgn, int iPtr); int TestPoint(vector3 *Point); void Connect(int my, TTraction *with, int to); void Init(); bool WhereIs(); void ResistanceCalc(int d = -1, double r = 0, TTractionPowerSource *ps = NULL); void PowerSet(TTractionPowerSource *ps); double VoltageGet(double u, double i); }; //--------------------------------------------------------------------------- #endif