SHARE
TWEET

vektory

a guest Sep 18th, 2019 110 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //---------------------------------------------------------------------------
  2. #ifndef vektoryH
  3. #define vektoryH
  4. #include <vcl.h>
  5. #include "knihovna_objektu.h"
  6. #include "my.h"
  7. #include "TmGrid.h"
  8. //---------------------------------------------------------------------------
  9. //---------------------------------------------------------------------------
  10. class Cvektory
  11. {
  12.   private:
  13.     Cmy m;//instance na my knihovnu
  14.  
  15.     public:
  16.  
  17.     struct TBod// - NEW + dodat do CObjekt v rámci rodičovských spojáků!!!!
  18.     {
  19.         unsigned long n; //pořadí objektu ve spoj.seznamu
  20.         double X, Y;//umístění v logických (metrických) souřadnicích
  21.         T3Rect kota;//citelná oblast hodnoty kóty od aktuálního bodu k bodu předchozímu ve fyzických souřadnicích (px), uchovávájící oblast celé kóty(rect0), popisku kóty (rect1), jednotek kóty (rect2), neukládat do binárky, slouží jenom jako temp data při vykreslování
  22.         double kota_offset;//odsazení kót v metrech
  23.         struct TBod *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  24.         struct TBod *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  25.     };
  26.  
  27.     struct THala// - NEW + dodat do CObjekt!!!!
  28.     {
  29.         UnicodeString name;//název
  30.         double X, Y;//umístění názvu v logických (metrických) souřadnicích
  31.         TBod *body;//definice obrysu haly
  32.     };THala HALA;
  33.  
  34.     struct TPohon
  35.     {
  36.         unsigned long n; //pořadí objektu ve spoj.seznamu
  37.         UnicodeString name;//název
  38.         double rychlost_od;//minimální pracovní rychlost dopravníku
  39.         double rychlost_do;//maximální pracovní rychlost dopravníku
  40.         double aRD;//aktuální rychlost dopravníku m/s
  41.         double roztec;//rozteč palců v m
  42.         double Rz;//rozestup aktivních palců v m                        -asi bude možné odstranit
  43.         double Rx;//rozestup aktivních palců (počet aktivních palců)    -asi bude možné odstranit
  44.         struct TPohon *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  45.         struct TPohon *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  46.     };
  47.     TPohon *POHONY;//spojový seznam pohonů
  48.  
  49.     struct TGeometrie//pouze struktura
  50.     {
  51.     short  typ;//0 - linie, 1 - oblouk, -1 neidentifikovatelný tvar pomocí bézieru
  52.         double delka;
  53.         double radius;
  54.         double orientace;
  55.         double rotacni_uhel;
  56.         double X1,Y1,X2,Y2,X3,Y3,X4,Y4;//body bézieru
  57.     };
  58.  
  59.     struct TKomora// - NEW + dodat do CObjekt v rámci rodičovských spojáků!!!!
  60.     {
  61.         unsigned long n; //pořadí ve spoj.seznam
  62.         double velikost;//v metrech
  63.         short typ;//1-se sprchou, 0 bez jen okap
  64.         T3Rect kota;//citelná oblast hodnoty kóty ve fyzických souřadnicích (px), uchovávájící oblast celé kóty(rect0), popisku kóty (rect1), jednotek kóty (rect2), neukládat do binárky, slouží jenom jako temp data při vykreslování
  65.         struct TKomora *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  66.         struct TKomora *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  67.     };
  68.  
  69.     struct TElement
  70.     {
  71.         unsigned long n; //pořadí ve spoj.seznamu
  72.         unsigned int eID; //id typu elementu: 0 - stop stanice, 1 - robot, 2 - robot se stop stanicí, 3 - robot s pasivní otočí, 4 - robot s aktivní otočí (resp. s otočí a stop stanicí), 5 - otoč pasivní, 6 - otoč aktivní (resp. otoč se stop stanicí), 7 - pouze geometrická zarážka
  73.         UnicodeString short_name;//krátký název max. 4 znaky
  74.         UnicodeString name;//celý název objektu
  75.         double X, Y;//umístění v logických (metrických) souřadnicích
  76.         double Xt,Yt;//umístění tabulky, resp. mGridu v logických (metrických) souřadnicích
  77.         short orientace;//v jaké orientaci je element na obrazovce vykreslen 0,90,180,270 (orientace dle světových stran)
  78.         double rotace_jig;//úhel o který element orotuje jig vzhledem k jeho aktuální rotaci jigu vůči podvozku, např. rotace_jig=90°, aktuální rotace jigu 90°, výsledek 180° - REVIZE!!!
  79.         short stav;
  80.  
  81.         short PD;//part detect:  -1 = nic, 0 = začátek jigu, 1 = střed jigu, 2 = celý jig
  82.         double LO1;
  83.         double OTOC_delka;
  84.         double LO2;
  85.         double LO_pozice;
  86.  
  87.         double PT1;
  88.         double PTotoc;
  89.         double PT2;
  90.  
  91.         double WT;//čekání na palec
  92.         double WTstop;//čekání na stopce
  93.         double RT;//reserve time
  94.  
  95.         T5Rect citelna_oblast;//pouze pomocná proměnná ve fyzických souřadnicích (px), uchovávájící oblast celé kóty(rect0), popisku kóty (rect1), jednotek kóty (rect2) a samotného názvu např. Robot 3 (rect3) elementu, hodnota koty mezi LO (rect4) - nedovávat  do CObjekt
  96.  
  97.         unsigned int akt_pocet_voziku;
  98.         unsigned int max_pocet_voziku;
  99.  
  100.         TGeometrie geo;
  101.         TmGrid *mGrid;
  102.         unsigned long objekt_n;//příslušnost elementu k objektu
  103.         TPohon *pohon;//přiřazený pohon k elementu
  104.  
  105.         //UnicodeString poznamka;//uloží poznámku   //DOPRYC
  106.  
  107.         struct TElement *sparovany;//ukazatel na následující spárovaný element ve spojovém seznamu (nemusí být totožný s dalším)
  108.         struct TElement *predchozi;//ukazatel na předchozí element ve spojovém seznamu
  109.         struct TElement *dalsi;//ukazatel na  další element ve spojovém seznamu
  110.     };
  111.  
  112.     struct TObjekt
  113.     {
  114.         unsigned long n; //pořadí objektu ve spoj.seznamu
  115.         unsigned int id; //id typu objektu
  116.         UnicodeString short_name;//krátký název max. 4 znaky         //DOPRYC
  117.         UnicodeString name;//celý název objektu
  118.         double X,Y;//umístění objektu ve schématu - prozatím, bude ale sloužit na umístění popisku objektu!!!
  119.         TBod *body;//definice obrysu haly - NEW + dodat do CObjekt!!!!
  120.     double sirka_steny;//šířka stěny kabiny objektu v metrech  - NEW + dodat do CObjekt!!!!
  121.         double Xk,Yk;//bude ke smazání - umístění levého horního rohu kabiny v layoutu a náhledu kabiny  //DOPRYC
  122.         double Xt,Yt;// souřadnice popisku objektu pro možnost posouvání dodat!!!   //PRIDAT
  123.     double Xp,Yp;// souřadnice tab pohonu pro možnost posouvání dodat!!!   //PRIDAT
  124.         short rezim;//rezim objektu 0-S&G,1-Kontin.(line tracking)KK,2-Postprocesní (PP), -1 nenastaven, pouzíva tab.pohonu
  125.         double CT;//pro status návrh   //DOPRYC
  126.         double RD;//pro status návrh v m/s, jenom pomocná proměnná získaná jako DD/CT, stežejní je většinou aRD (aktuální rychlost), která se váže přímo (i datově) k pohonu  //DOPRYC
  127.         double delka_dopravniku;//delka dopravníku v rámci objektu   //DOPRYC
  128.         double kapacita;//uživatelsky zadaná kapacita  //DOPRYC
  129.         double kapacita_dop;//doporučená, vypočítáná  //DOPRYC
  130.         double pozice;//počet vozíků v kabině  //DOPRYC
  131.         double rotace;//rotace jigu v objektu - nově spíše rotace náhledu  - //DOPRYC
  132.         double orientace;//0,90,180,270 (orientace dle světových stran) - používat toto
  133.         double mezera;//mezera mezi vozíky (kritická mezera) //DOPRYC
  134.         double mezera_jig;//mezera mezi jigy //DOPRYC
  135.         double mezera_podvozek;//mezera mezi podvozky  //DOPRYC
  136.         TPohon *pohon;//ukazatel na použitý pohon
  137.         TElement *elementy;
  138.         TPointD min_prujezdni_profil;//výška a šířka minimálního průjezdního profilu v objektu
  139.         TPointD rozmer_kabiny;//délka a šířka obvodových zdí kabiny   //DOPRYC
  140.         T2Rect kabinaKotaX_oblastHodnotaAJednotky;//pouze pomocná proměnná ve fyzických souřadnicích (px), uchovávájící oblast popisku a jednotek kóty kabiny -//DOPRYC
  141.         T2Rect kabinaKotaY_oblastHodnotaAJednotky;//pouze pomocná proměnná ve fyzických souřadnicích (px), uchovávájící oblast popisku a jednotek kóty kabiny -//DOPRYC
  142.         double koty_elementu_offset;//odsazení kót elementů v metrech  - NEW + dodat do CObjekt!!!!
  143.         TKomora *komora;//ukazatel na případné komory objektu - NEW + dodat do CObjekt
  144.         unsigned short cekat_na_palce;//0-ne,1-ano,2-automaticky   //DOPRYC
  145.         unsigned short stopka;//zda následuje na konci objektu stopka //0-ne,1-ano,2-automaticky   //DOPRYC
  146.         double odchylka;//povolená odchylka u PP z CT  //DOPRYC
  147.         double obsazenost;//slouží pro uchování času obsazenosti pro vykreslování na časových osách //DOPRYC
  148.         short CT_zamek; //DOPRYC
  149.         short RD_zamek;  //DOPRYC
  150.         short DD_zamek;   //DOPRYC
  151.         short K_zamek;   //DOPRYC
  152.         UnicodeString poznamka;//uloží poznámku ke vzniku CT   //DOPRYC
  153.         bool probehla_aktualizace_prirazeni_pohonu;//pouze pomocná proměnná využitá v momentu, kdy probíhá nové ukládání pohonů na PL a probíhá aktualizace n, tak ošetření proti situaci např. "2->3 a 3->4"//neukládá se do binárky
  154.         bool zobrazit_koty;//proměnná určující, zda se budou zobrzovat kóty
  155.         bool zobrazit_mGrid;//proměnná určující, zda budou zobrazeny mGridy
  156.         bool uzamknout_nahled;//proměnná určující, zda bude či nebude možné používat interaktivní prvky v náhledu objektu
  157.         struct TObjekt *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  158.         struct TObjekt *predchozi2;//ukazatel na předchozí2 objekt ve spojovém seznamu
  159.         struct TObjekt *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  160.         struct TObjekt *dalsi2;//ukazatel na další2 objekt ve spojovém seznamu
  161.     };
  162.     TObjekt *OBJEKTY;//seznam objektů
  163.  
  164.     struct TJig//pouze složený datový typ
  165.     {
  166.         double sirka;
  167.         double delka;
  168.         double vyska;
  169.         double ks;//kusů
  170.     };
  171.  
  172.     struct TCesta//pouze přidružený spoják, který je součástí zakázky, jeden objekt spojáku je jeden segment cesty
  173.     {
  174.         unsigned long n;
  175.         TObjekt *objekt;
  176.         double CT; //cycle time
  177.         double Tc;//čaš čištění v rámci zakázky resp. stejné barvy, vztahuje se na konkrétní objekt a a zároveň zakázku, musí být tady, pokud není použito, tak 0
  178.         double Tv;//čas čištění a výměny barev, vztahuje se na konkrétní objekt a a zároveň zakázku, musí být tady, pokud není použito, tak 0
  179.         unsigned int Opak;//počet opakování jak často se čištění opakuje
  180.         double RD;//rychlost dopravníku
  181.         double Rotace;// úhel natočení jigu v objektu pro danou zakázku   - odstranit
  182.         struct TCesta *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  183.         struct TCesta *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  184.     };
  185.  
  186.     struct TZakazka
  187.     {
  188.         unsigned long n;//pořadí objektu ve spoj.seznamu
  189.         UnicodeString id;//uživatelské ID objektu
  190.         unsigned short typ;//0- realná,1-servisní
  191.         UnicodeString name;//název zakázky
  192.         TColor barva;//barva zakáky
  193.         double pomer;//poměr z celkového množství výrobků
  194.         double TT;
  195.         TJig jig;//šířka délka, výška, rotace a  ks připadajících na jig/rám vozzíku
  196.         unsigned long pocet_voziku;//počet vozíků v zakázce
  197.         unsigned long serv_vozik_pocet;//počet servisních vozíků v zakázce
  198.         unsigned long opakov_servis;//cyklus opakování servisních vozíku
  199.         struct TCesta *cesta;//ukazatel na první segment cesty
  200.         struct TZakazka *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  201.         struct TZakazka *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  202.     };
  203.     TZakazka *ZAKAZKY;//spojový seznam zakázek
  204.     TZakazka *ZAKAZKY_temp;//spojový seznam zakázek
  205.  
  206.     struct TVozik
  207.     {
  208.         unsigned long n; //pořadí objektu ve spoj.seznamu
  209.         struct TZakazka *zakazka;//ukazatel na přidruženou zakázku
  210.         short typ;//0-normální, 1 - servisní
  211.         double start;//výchozí pozice v grafu časových os
  212.         double pozice;//aktuální pozice na dopravniku či v grafu časových os
  213.         struct TVozik *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  214.         struct TVozik *dalsi;//ukazatel na další objekt ve spojovém seznamu
  215.     };
  216.     TVozik *VOZIKY;//spojový seznam vozíků
  217.  
  218.     struct TVozik_parametry//paremtry vozíků - stejné pro všechny vozíky
  219.     {
  220.         double delka;
  221.         unsigned short typ;//0 - podlahový, 1 - závěsný
  222.     };
  223.  
  224.     struct T_raster
  225.     {
  226.         UnicodeString filename;//adresa umístění podkladového rastru na disku
  227.         long double resolution;//rozlišení metrů na jeden pixel rastrového podkladu
  228.         double X,Y;//logické souřadnice (v metrech) umístění rastrového podkladu v projektu
  229.         bool show;//indikace zda je raster zobrazen
  230.         bool grayscale;//zda bude či nebude rastrový podklad v odstínech šedi či nikoliv
  231.         int dim;//úroveň ztlumení
  232.     };
  233.  
  234.     struct T_vector
  235.     {
  236.         int vector;//úroveň ztlumení vektorů - zatím nebude využito
  237.         bool transparent;//zda bude vektorová vrstva transparentní - zatím nebude využito
  238.     };
  239.  
  240.     struct T_parametry_projektu //(Parametry výroby + Parametry linky (vozíky)
  241.     {
  242.     int katalog;//ID katalogových komponent zvolených pro geometrické elementy linky
  243.     short typ_linky; //0 - podlahový, 1 - podvěsný
  244.     double radius;
  245.         TDateTime cas_start;//začátek výroby v SEČ (resp. LSEČ)
  246.         unsigned long  mnozstvi;//požadované množství
  247.         double hod_den;//počet hodin za den
  248.         double dni_rok;//počet hodin za den
  249.         double efektivita;//přepokládaná výrobní efektivina
  250.         double TT;//pro návrháře
  251.         double delka_jig;
  252.         double sirka_jig;
  253.         double vyska_jig;
  254.         double delka_podvozek;
  255.         T_raster raster;
  256.         T_vector vector;
  257.     };
  258.     T_parametry_projektu PP;
  259.  
  260.     struct TPalec
  261.     {
  262.         unsigned long n; //pořadí objektu ve spoj.seznamu
  263.         //double pozice;
  264.         //struct TObjekt *segment;
  265.         //přiřazení k dopravníku???
  266.         struct TPalec *predchozi;
  267.         struct TPalec *dalsi;
  268.     };
  269.     TPalec *PALCE;//spojový seznam palců na řetězu
  270.  
  271.     struct TProces
  272.     {
  273.         unsigned long n; //pořadí objektu ve spoj.seznamu
  274.         unsigned long n_v_zakazce;//pořadí objektu v rámci zakázky
  275.         double Tpoc;//X-počateční   //absolutní časy (i dále)
  276.         double Tkon;//X-koncové
  277.         double Tdor;//X-dorovnání předchozího vozíku
  278.         double Tpre;//X- nutná doba přejezdu, zpoždění za předchozím vozíkem
  279.         double Tcek;//X- nutná doba cekani na palec
  280.         double Trand;//hodnota vypočitán dle funkce náhodná doba čekání na palec
  281.         struct TCesta *segment_cesty;//příslušnost procesu k vyjmutému (ze spojáku) segmentu cesty (tedy objektu)
  282.         struct TVozik *vozik;//ukazatel na vozík jehož proces vyjadřuje
  283.         struct TProces *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  284.         struct TProces *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  285.     };
  286.     TProces *PROCESY;//seznam vygenerovaných procesů  v rámci časových os
  287.  
  288.     struct TOdstavka
  289.     {
  290.         unsigned long n; //pořadí objektu ve spoj.seznamu
  291.         double datum_od;
  292.         double datum_do;
  293.         struct TOdstavka *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  294.         struct TOdstavka *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  295.     };
  296.     struct TOdstavka ODSTAVKY;//seznam plánovaných odstávek linky
  297.  
  298.     struct TDoubleHodnota
  299.     {
  300.         unsigned int n; //pořadí objektu ve spoj.seznamu
  301.         double hodnota;//double hodnota
  302.         struct TDoubleHodnota *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  303.         struct TDoubleHodnota *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  304.     };
  305.  
  306.     struct Ttyp_dopravniku// - NEW + dodat do CObjekt
  307.     {
  308.         unsigned long n; //pořadí objektu ve spoj.seznamu
  309.         short druh;//0 - podlahový, 1 - podvěsný
  310.         UnicodeString name;//název
  311.         UnicodeString link;//hypertextový odkaz na katalog
  312.         TDoubleHodnota *roztec;//přidružený spojový seznam možných roztečí
  313.         TDoubleHodnota *hOblouk;//přidružený spojový seznam horizontálních oblouků
  314.         TDoubleHodnota *hRadius;//přidružený spojový seznam horizontálních radiusů
  315.         TDoubleHodnota *vOblouk;//přidružený spojový seznam vertikálních oblouků
  316.         TDoubleHodnota *vRadius;//přidružený spojový seznam vertiálních radiusů
  317.         struct Ttyp_dopravniku *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  318.         struct Ttyp_dopravniku *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  319.     };Ttyp_dopravniku *KATALOG;
  320.  
  321.     struct TText
  322.     {
  323.         unsigned long n; //pořadí objektu ve spoj.seznamu
  324.         int vrstva;//ID vrstvy, slouží na filtr vykreslení (např. layout vs. editace)
  325.         double X, Y;//umístění objektu levý horní okraj
  326.         short zarvonani;//typ zarovnání textu vůči X,Y
  327.         UnicodeString text;//samotný text
  328.         TFont *Font;//vlastnosti font (název, velikost, rotace, barva, styl)
  329.         //použít na CFont:unsigned short int size;
  330.         //použít na CFont:unsigned short int styl;//0-nic, 1-bold,2-italic,3-oboje
  331.         //použít na CFont:TColor barva;
  332.         TColor barva_pozadi;
  333.         struct TText *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  334.         struct TText *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  335.     };
  336.     struct TText *TEXTY;
  337.  
  338.     struct TSpojnice
  339.     {
  340.         unsigned long n; //pořadí objektu ve spoj.seznamu
  341.         int vrstva;//ID vrstvy (např. layout vs. editace)
  342.         short zakonceni;//0 - nebude zakončeno, 1- bude zakončeno šipkou, popř. další možné typy doplnit
  343.         short typ;//0-liniová spojnice, 1-bézierová spojnice
  344.         TBod *body;//souřadnice vedení šipky
  345.         unsigned short int width;//šířka v px
  346.         TColor barva;
  347.         short cara_typ;//typ čáry
  348.         struct TSpojnice *predchozi;//ukazatel na předchozí objekt ve spojovém seznamu
  349.         struct TSpojnice *dalsi;//ukazatel na  další objekt ve spojovém seznamu
  350.     };
  351.     struct TSpojnice *SPOJNICE;//seznam linií sloužicích pro účely poznámek
  352.  
  353.     struct TFile_hlavicka
  354.     {
  355.         unsigned short int Verze;
  356.         unsigned short int Mod;
  357.         double Zoom;
  358.         long PosunutiX;//proměnné uchovávajicí velikost posunu obrazu (pro scrollování atp.), je to ve fyzických souřadnicích zařízení
  359.         long PosunutiY;//proměnné uchovávajicí velikost posunu obrazu (pro scrollování atp.), je to ve fyzických souřadnicích zařízení
  360.         unsigned int pocet_objektu;
  361.         unsigned int pocet_vyhybek;
  362.         unsigned int pocet_pohonu;
  363.         unsigned int pocet_zakazek;
  364.         unsigned int pocet_voziku;
  365.         //parametry projektu (PP):
  366.         TDateTime cas_start;//začátek výroby v SEČ (resp. LSEČ)
  367.         unsigned long  mnozstvi;//požadované množství
  368.         double hod_den;//počet hodin za den
  369.         double dni_rok;//počet hodin za den
  370.         double efektivita;//přepokládaná výrobní efektivina
  371.         double TT;//globální TT linky
  372.         double delka_jig;
  373.         double sirka_jig;
  374.         double vyska_jig;
  375.         double delka_podvozek;
  376.     int katalog;
  377.         short typ_linky;
  378.     double radius;
  379.     short objekt_posunout_vse;
  380.     };
  381.     TFile_hlavicka File_hlavicka;
  382.  
  383. //konstruktor
  384.     Cvektory();
  385.  
  386. //společné metody pro HALU a OBJEKT, pokud je ukazatel na Objekt NULL, jedná se o metody pro HALU
  387.     void hlavicka_body(TObjekt *Objekt=NULL);//pomocná metoda, není třeba volat, volá se automaticky při vkládání prvního bodu při vloz_bod, pokud je ukazatel na Objekt NULL, jedná se o metody pro HALU
  388.     void vloz_bod(TBod *Bod,TObjekt *Objekt=NULL);//vloží nový bod na konec seznamu bodů, pokud je ukazatel na Objekt NULL, jedná se o metody pro HALU
  389.     void vloz_bod(double X, double Y,TObjekt *Objekt=NULL,TBod *ZaBod=NULL, bool ortogonalizovat=true,bool konec=false);//vloží nový bod na konec seznamu bodů pokud je Za=NULL, jinak vloží za tento bod, ošetřuje bod vložený na stejný místo jako předchozí, či jako první, pokud se jedná o poslední vložení při uzavírání polygonu a je zapnuta ortogonalizace, je zajištěno, aby byl první poslední a předposlední bod v ortogonalizovaném vztahu, zajištění poslední spojnice zajištuje vykreslovací metoda, pokud jsou vloženy pouze 3 body a ukončeno vkládání je dopočítán 4 bod do rozměrů obdélníku
  390.     void posun_bod(double X, double Y,TBod* Bod);//posune bod HALy nebo Objektu, záleží, kam bod náleží
  391.     void posun_hranu(double OffsetX,double OffsetY,TBod* Bod1,TBod* Bod2);//posune hranu tvořenou danými body o zadaný offset
  392.     void posun_body(double OffsetX,double OffsetY,TObjekt* Objekt=NULL);//posune všechny body polygonu objektu či haly o daný offset
  393.     void rotuj_body(double X, double Y,double uhel,TObjekt* Objekt=NULL);//orotuje celý polygonu objektu či haly proti směru hodinových ručiček okolo osy dle bodu o souřadnicích X,Y, dle hodnoty rotace uhel
  394.     TBod *najdi_bod(TObjekt* Objekt=NULL);//na aktuálních souřadnicích myši hledá bod, pokud je nalezen vrátí na něj ukazatel, pokud je ukazatel na Objekt NULL, jedná se o metodu pro HALU
  395.     TBod *najdi_usecku(TObjekt* Objekt=NULL,long presnost=3);//na aktuálních souřadnicích myši hledá úsečku, pokud je nalezena je vracen ukazatel na druhý bod, pokd nebylo nalezeno nic vrátí NULL, parametr Objekt implicitně NULLL, rozlišuje hledání úsečky v HALE nebo v Objektu, parametr přesnost určuje vzdálenost od přímky, která je nutná k její detekci
  396.     short PtInKota_bod(TObjekt *Objekt=NULL);//ověří zda se na daných fyzických souřadnicích myši nachází kóta hrany/stěny HALy či Objektu (Objektu pokud Objekt!=NULL), pokud ne vrací -1, pokud ano 0 v celé kótě, 1 - na hodnotě kóty, 2 - na jednotkách kóty , pozn. oblast kóty se testuje až jako poslední
  397.     bool PtInBody(TObjekt *Objekt=NULL);//ověří zda se souřadnicích myši nachází ve vnitř polygonu, pokud je Objekt==NULL, hledá se v polygonu HALy
  398.     void kopiruj_body(TObjekt *Original,TObjekt *Kopie);//zkopíruje body včetně z originálu na kopii bez ukazatelového propojení, funguje jenom pro body objektů nikoliv HALY!!!
  399.     void smaz_bod(TBod* Bod,TObjekt* Objekt=NULL);//smaže konkrétní bod, pokud je ukazatel na Objekt NULL, jedná se o metodu pro HALU
  400.     void vymaz_body(TObjekt* Objekt=NULL);//vymaže všechny body včetně hlavičky, pokud je ukazatel na Objekt NULL, jedná se o metodu pro HALU
  401.  
  402. //výhybky
  403.     unsigned int pocet_vyhybek;//uchovává počet přidaných vyhybek, - NEW + dodat do CObjekt a do souborové hlavičky včetně souvisejícího!!!
  404.     bool akt_vetev;//nese informaci o jakou větev ve schématu se jedná, true = primární (dalsi) false = sekundarní (dalsi2)
  405.  
  406. //metody pro OBJEKTY
  407.     void hlavicka_OBJEKTY();
  408.     TObjekt *vloz_objekt(unsigned int id, double X, double Y);//vloží prvek do seznamu + vrátí ukazatel na vložený prvek
  409.     TObjekt *vloz_objekt(unsigned int id, double X, double Y,TObjekt *pred,TObjekt *po);//přetížená fce vkládá objekt za objekt p + vrátí ukazatel na vložený prvek
  410.     TObjekt *vloz_objekt(unsigned int id, double X, double Y,TObjekt *vyhybka,TObjekt *pred,TObjekt *po);//přetížená fce vkládá spojku + vrátí ukazatel na vložený prvek
  411.     void vloz_objekt(TObjekt *Objekt);//přetížená fce
  412.     TObjekt *Cvektory::nastav_atributy_objektu(unsigned int id, double X, double Y);//alokuje paměť pro objekt, nastavý atriuty objektu, vrátí ukazatel na nově vytvořený prvek
  413.     TObjekt *kopiruj_objekt(TObjekt *Objekt,short offsetX=0,short offsetY=0,AnsiString index_name="",bool remove_pre_index=false,TObjekt *p=NULL);//zkopíruje objekt Objekt na konec spojového seznamu Objektů, za předpokladu že p==NULL, pokud p není NULL je objekt za tento objekt p ve spojovém seznamů objektů zařazen, hodnota offsetu je hodnota odsazení zkopírovoaného objektu od objektu vzorového,index_name slouží pro rozlišení např. LAK, LAK1, LAK2...,zároveň vrací ukazatel na právě zkopírovaný objekt např. pro další použití
  414.     void kopiruj_objekt(TObjekt *Original,TObjekt *Kopie);//zkopíruje atributy objektu bez ukazatelového propojení, kopírování proběhne včetně spojového seznamu elemementu opět bez ukazatelového propojení s originálem, pouze ukazatel na mGrid originálu zůstané propojený
  415.     TObjekt *PtInObjekt();//ověří, zda se na souřadnicích myši nachází nějaký objekt, pokud ano, vrátí na něj ukazatel, jinak vrátí NULL
  416.     TObjekt *najdi_objekt(double X, double Y,double offsetX, double offsetY,short typ=-1);//hledá bod v dané oblasti
  417.     short oblast_objektu(TObjekt *O,double X, double Y);//vrátí ret podle toho v jaké jsem oblasti objektu, slouží k přilepování objektu při vkládání, ret = 0 - mimo oblasti, 1 - oblast za objektem, 2 - oblast před objektem
  418.     TObjekt *vrat_objekt(unsigned int n);//dle zadaného n vrátí ukazatel na hledaný objekt
  419.     TObjekt *vrat_objekt_z_roma(int X);//dle X kurzoru myši vrátí z modu procesy (ROMA) ukazatel na aktuální objekt
  420.     TObjekt *vrat_objekt(TElement *Element,bool In_pom_temp=false);//vrátí rodičovský Objekt daného elementu, In_pom_temp - zda bude hledat místo daného ostrého objektu v něm
  421.     void aktualizace_objektu(short typ);//dle zadaného TT  či případně dalších hodnot zaktualizuje paramametry všech objektů//typ -2://zaktualizuje přiřazení pohonu k objektu, nutné pokud proběhla změna v pohonech, protože původní jsou smazané //typ -1://dle zamčených a odemčených hodnot při změně TT//typ 0://dle zamčených a odemčených hodnot při změně parametrů vozíku//typ 1://při změně TT změna CT a RD, K a DD zůstává//typ 2://při změně TT změna K,DD,RD zůstává CT//typ 3://při změně parametrů vozíku změna DD, RD zůstává K, CT//typ 4://při změně parametrů vozíku změna u DD, CT zůstává K,RD//typ 5://při změně parametrů vozíku změna u K,CT,RD zůstává DD
  422.     void aktualizace_prirazeni_pohonu_k_objektum(unsigned int oldN,unsigned int newN);//všem objektům, které měly přiřazen pohon s oldN(oldID), přiřadí pohon s newN(newID), podle toho, jak jsou ukládány nově do spojáku, důležité, pokud dojde k narušení pořadí ID resp n pohonů a pořadí jednotlivých řádků ve stringridu, např. kopirováním, smazáním, změnou pořadí řádků atp.
  423.     void aktualizace_prirazeni_pohonu_dokoncena();//po dokončení aktualizace přiřazení pohonu (při ukládání pohonu na PL) vrátí atribut probehla_aktualizace_prirazeni_pohonu všech objektů na false, aby bylo připraveno k dalšímu opětovnému užítí, nepřímo spolupracuje s metodou výše uvedenou aktualizace_prirazeni_pohonu_k_objektum
  424.     double vrat_soucet_delek_vsech_objektu();//sečte délky jednotlivých objektů
  425.     unsigned int pocet_objektu(short typ=-1);//vrátí počet objektů v požadovaném režimu, nebo v případě implicitního parametru -1 objekty ve všech režimech
  426.     unsigned int pocet_objektu_zakazky(TZakazka *Zakazka,short typ=-1);//vrátí počet objektů v požadovaném režimu pro danou zakázku, nebo v případě implicitního parametru -1 objekty ve všech režimech pro danou zakázku
  427.     AnsiString vypsat_objekty_bez_prirazenych_pohonu(bool shortname=true,AnsiString separator=", ");//vrátí AnsiString řetezec shortname či name (dle prvního parametru, který je implicitně na shortname=true) seznam objektů, které nemají přiřazený pohon, jednotlivé názvy objektů oddělí dle paramaterů seperátor, implicitně ", " tj. čárka a mezera,, v případě že žádný objekt nenajde, vrátí prázdný řetězec
  428.     unsigned long vrat_pocet_objektu_bezNEBOs_prirazenymi_pohonu(bool s,short rezim=-1);//vrátí počet objektů bez či s přiřazenými pohony (dle vstupního parametru), parametr režim ve všech režimech -1, 0 - S&G, 1-KK, 2 - PP
  429.     AnsiString vypis_objekty_vyuzivajici_pohon(unsigned long n,bool short_name=true);//dle n pohonu vráti objekty, které pohon používají, pokud je short_name na true, vrátí kratký název objektu jinak dlouhý
  430.     unsigned long vrat_pocet_objektu_vyuzivajici_pohon(unsigned long n, short rezim=-1);//vratí počet objektů přiřazených k danému pohonu, parametr režim ve všech režimech -1, 0 - S&G, 1-KK, 2 - PP
  431.     TObjekt *vrat_objekty_vyuzivajici_pohon(unsigned long n, short rezim=-1);//vratí formou ukazatele na pole objekty přiřazené k danému pohonu, parametr režim, ve všech režimech -1, 0 - S&G, 1-KK, 2 - PP
  432.     TObjekt *vrat_objekty_bez_pohonu();//vratí formou ukazatele na pole objekty bez pohonů
  433.     AnsiString vypis_objekty_s_pohony_bez_roztece(bool shortname=true);//vrátí AnsiString řetezec shortname či name (dle parametru, který je implicitně na shortname=true) seznam objektů, které mají přiřazený pohon bez uvedené rozteče jednotlivé názvy objektů oddělí  ", " tj. čárkou a mezerou, v případě že žádný objekt nenajde, vrátí prázdný řetězec, pozor pohony bez přiřazení k objektům nevypisuje
  434.     AnsiString vypis_objekty_mimo_100vytizeni(bool shortname=true, bool vypsat_procetna=true, AnsiString separator=", ");//vrátí AnsiString řetezec shortname či name (dle parametru, který je implicitně na shortname=true) seznam objektů podle zakázek, které nemají 100% vytížení
  435.     double vrat_min_rychlost_prejezdu();//najde ze všech objektů nejnižší rychlost přejezdu (tj. totál min RD), neřeší přiřazení k pohonům, pomůcka pro stanovení referenční rychlosti animace
  436.     short smaz_objekt(TObjekt *Objekt,bool opakovani=false);//smaže prvek ze seznamu, opakování určuje zda se smazání provedlou jednou či 2x, v případě odstranění vyhybky je potřeba odstranit i její spojku
  437.     void zmen_poradi_objektu(TObjekt *aktualni_poradi,TObjekt *nove_poradi);
  438.     void zmen_poradi_objektu(unsigned long aktualni_poradi,unsigned long nove_poradi);
  439.     void nove_nazvy();//projde všechny objekty, výhybkám a spojkám upravý návez podle jejich n
  440.     void nove_indexy(bool nasledne_zmena_nazvu=false);//projde všechny objekty a nastavý nové indexy podle aktuálního pořadí objektů
  441.     void ortogonalizovat();//ortogonalizuje schéma
  442.     TObjekt *dalsi_krok(TObjekt *Objekt,TPoint *tab_pruchodu);//určuje další krok cyklu při procházení objektů
  443.     void posun_objekt(double X,double Y,TObjekt *Objekt,bool kontrolovat_oblast=true);//slouží k posunu objektu jako celku o X a Y, posun kabiny, pohonu, elementů, tabulek, nadpisu, kontrolovat_oblast slouží k nucenému přesunutí
  444.     void rotuj_objekt(TObjekt *Objekt, double rotace);//orotuje objekt o danou rotaci
  445.     //přidružené metody pro KOMORY
  446.     void vloz_komoru(TObjekt *Objekt,double velikost,TKomora *ZaKomoru=NULL,short typ=1);//vloží novou komoru na konec seznamu komor, pokud je ZaKomoru=NULL, jinak vloží za tento objekt, nastaví velikost dané komory dle proměnné velikost,short typ;//1-se sprchou, 0 bez jen okap
  447.     void vloz_komoru(TObjekt* Objekt,TKomora *Komora,TKomora *ZaKomoru=NULL,short typ=1);//vloží novou komoru na konec seznamu komor, pokud je ZaKomoru=NULL, jinak vloží za tento objekt, není třeba nastavovat ukazatele ani n-pořadí,short typ;//1-se sprchou, 0 bez jen okap
  448.     TKomora *najdi_komoru(TObjekt* Objekt);//na aktuálních souřadnicích myši hledá komoru, pokud je nalezena vrátí na ni ukazatel
  449.     short PtInKota_komory(TObjekt *Objekt,long X,long Y);//ověří zda se na daných fyzických souřadnicích nachází kóta komory, pokud neexistují komory vrací -2, pokud se nenachází na kótě vrací -1, pokud ano 0 v celé kótě, 1 - na hodnotě kóty, 2 - na jednotkách kóty, pozn. oblast kóty se testuje až jako poslední
  450.     double vrat_velikosti_komor(TKomora *po=NULL);//vrátí součet velikostí komor, nebo velikosti do konkrétní komory (včetně)
  451.     void kopiruj_komory(TObjekt *Original,TObjekt *Kopie);//zkopíruje komory včetně jejich velikosti z originálu na kopii bez ukazatelového propojení
  452.     void presun_komoru(TObjekt *Objekt,TKomora *aktKomora,TKomora *za);//slouží ke změně pořadí komor
  453.     void smaz_komoru(TObjekt* Objekt,TKomora* Komora);//smaže konkrétní komoru daného objektu
  454.     void vymaz_komory(TObjekt* Objekt);//vymaže všechny komory daného objektu včetně hlavičky
  455.     long vymaz_seznam_OBJEKTY();//vymaže spojový seznam technologických objektů včetně přidružených elementů a případných komor z paměti
  456.  
  457. //metody pro ELEMENTY
  458.     void hlavicka_elementy(TObjekt *Objekt);//danému objektu vytvoří hlavičku elementů
  459.     TElement *vloz_element(TObjekt *Objekt,unsigned int eID, double X, double Y,short rotace_symbolu,TElement *Ep=NULL);//vloží element do spojového seznamu elementů daného technologického objektu a zároveň na něj vrátí ukazatel
  460.     void vloz_element(TObjekt *Objekt,TElement *Element,TElement *Ep=NULL);//vloží element do spojového seznamu elementů daného technologického objektu
  461.     Cvektory::TElement *vloz_element_za(TObjekt *Objekt,TElement *Element);//kontrola zda vkládaný element bude umístěn na konec nebo mezi jiné elementy, pokud bude vkládán na konec return=NULL, pokud mezi elementy return=ukazatel na předchozí element
  462.     void vloz_G_element(TElement *Element,short typ,double X1,double Y1,double X2,double Y2,double X3,double Y3,double X4,double Y4,double orientace=0,double rotacni_uhel=0,double radius=0,double delka=0);//danému elementu přiřadí/naplní geometrickou složku
  463.     void uprav_popisky_elementu(TObjekt *Objekt, TElement *Element);//upraví indexy a popisky elementů po vloženém elementu (parametr Element), pokud dostane parametrem Element NULL přejmenuje a přeindexuje všechny ovlovněné elementy do původního stavu (tlačítko storno)
  464.     void kopiruj_element(TElement *Original, TElement *Kopie);//zkopíruje atributy elementu bez ukazatelového propojení, pouze ukazatelové propojení na mGrid je zachováno
  465.     void kopiruj_elementy(TObjekt *Original, TObjekt  *Kopie);//zkopíruje elementy a jejich atributy bez ukazatelového propojení z objektu do objektu, pouze ukazatelové propojení na mGrid je zachováno spojuje dvě metody vloz_element(TObjekt *Objekt,TElement *Element) a kopiruj_element(TElement *Original, TElement *Kopie);
  466.     void vytvor_elementarni_osu(TObjekt *Original, TObjekt  *Kopie);//připraví vektor provizorní osy pohonu
  467.     int vrat_eID_prvniho_pouziteho_robota(TObjekt *Objekt);//vratí eID prvního použitého robota, slouží na filtrování, jaké roboty v knihovně robotů zakazazovat, pokud není nic nalezeno vrátí -1
  468.     unsigned int vrat_poradi_elementu(TObjekt *Objekt,unsigned int eID);//vratí pořádí stopek, robotů a otočí zatím pouze v elementu, bude na zvážení rozšíření na všechny objekty
  469.     unsigned int vrat_poradi_elementu_do (TObjekt *Objekt, TElement *Element);//vrátí pořadí robotů v objektu, stopek a otočí ve všech předchozích objektech, to všd do Elementu
  470.     unsigned int vrat_nejvetsi_ID_tabulek (TObjekt *Objekt);//vrátí největší ID napříč mGridy v objektu, používáno pro přiřazování ID novým tabulkám, řešeno takto z důvodu chyby při odmazávání a následném přidávání elementu (v kabině jsou 3 elementy druhý se odmaže, tabulky v kabině mají nyní ID 1 a 3, po přidání dalšího elementu bylo dříve přidano ID=pocet elementů, což by se v tomto případě rovnalo 3)
  471.     void rotace_elementu(TObjekt *Objekt,short rotace);//orotuje všechny elementy daného objektu o danou hodnotu
  472.     TElement *najdi_element(TObjekt *Objekt, double X, double Y);//hledá element v místě kurzoru pracuje v logických/metrických souradnicích
  473.     TElement *najdi_tabulku(TObjekt *Objekt, double X, double Y);//hledá tabulku elementu pouze pro daný objekt v oblasti definované pomocí šířky a výšky tabulky (která se může nacházet v daném místě kliku), pracuje v logických/metrických souradnicich, vrátí ukazatel na daný element, který tabulku vlastní, pokud se na daných souřadnicích nachází tabulka
  474.     TElement *vrat_element(TObjekt *Objekt, unsigned int n);//vraťí ukazatel na element dle n elementu umístěného v daném objektu
  475.     short PtInKota_elementu(TObjekt *Objekt,long X,long Y);//ověří zda se na daných fyzických souřadnicích nachází kóta elementu, pokud ne vrací -1, pokud ano 0 v celé kótě, 1 - na hodnotě kóty, 2 - na jednotkách kóty , 3 - na hodnotě LO kóty , pozn. oblast kóty se testuje až jako poslední
  476.     bool posun_element(TElement *Element,double vzdalenost,bool pusun_dalsich_elementu=false,bool posun_kurzorem=false);//posune pouze Element z pomocného spojového seznamu pom_temp na parametrem uvedenou vzádlenost (v metrech) od elementu předchozího, pokud je implicitní hodnota pusun_dalsich_elementu false změněna na true, jsou o danou změnu posunu přesunuty i elementy následující Elementu (tudíž jejich vzdálenost od Elementu bude zachována, naopak v případě výchozí hodnoty false je následujícím/dalším elementům poloha zachována). Nutá rozdílná funkce při posunu z kót a při posunu korzorem, proto parametr posun_kurzorem
  477.     void posuv_aktualizace_RT(TElement *Element);//posunem elementu tj. změnou vzdálenosti od předchozího se ovlivní hodnota RT, nutno přepočítat
  478.     void zmen_poradi_elementu(TElement *aktualni_poradi,TElement *nove_poradi);//řeší změnu pořadí při posuvu elementů, dojde k novému ukazatelovému propojení, přejmenování a přeindexování elementů
  479.     double vzdalenost_od_predchoziho_elementu(TElement *Element,bool pouzeSG=false);//vratí vzdálenost od předchozího elementu, pracuje zatím pouze v orotogonalizovaném prostoru (bude nutno vylepšit s příchodem oblouků), pokud se jedná o první element, uvažuje se jako vzdálenost od počátku kabiny (nutno vylepšit ještě pro různé orientace kabiny)
  480.     double vrat_rotaci_jigu_po_predchazejicim_elementu(TObjekt *Objekt,TElement *Element);//zadávám aktuální element, je zjištěna rotace před tímto zadávaným elementem
  481.     //dodělat void zmen_poradi_Elementu(TObjekt *Objekt, TElement Element,TObjekt *zaElement);
  482.     //dodělat void zmen_poradi_Elementu(TObjekt *Objekt unsigned long aktualni_poradi,unsigned long nove_poradi);
  483.     void napln_comba_stopek();//obsah všech comboboxu všech stopek nejdříve smaže a následně naplní combobox stopky ostatními elementy, které mohou být s danou stopkou spárované, nevypisuje danou stopku, vybere v combu stop-element spárovaný či předchozí, buď navržený nebo uživatelsky vybraný
  484.     void napln_combo_stopky(TElement *Stopka);//nejdříve smaže obsah comboboxu a následně naplní combobox stopky ostatními elementy, které mohou být s danou stopkou spárované, nevypisuje danou stopku, vybere v combu stop-element spárovaný či předchozí, buď navržený nebo uživatelsky vybraný
  485.     void uloz_sparovany_element(TElement *Stopka);//uloží dané stopce ukazatel na sparovaný stop element, který byl vybraný v Combu dané stopky, ošetřuje zda se jedná o stopku
  486.     TElement *vrat_predchozi_stop_element(TElement *Stopka);//dané stopce najde předchozí stop-element na lince, je možno, že nebude reflektovat danou zakázku
  487.   TElement *Cvektory::vrat_predchozi_element(TElement *Element);//vrátí předchozí element k Element, který byl do metody poslán jako parametr, přeskočí geometrické zarážky
  488.     void smaz_element(TObjekt *Objekt, unsigned int n);//smaže element ze seznamu
  489.     void smaz_element(TElement *Element);//smaže element ze seznamu
  490.     long vymaz_elementy(TObjekt *Objekt,bool mGridSmazat=true);//vymaže všechny elementy daného objektu včetně hlavičky a vrátí počet smazaných elementů (počítáno bez hlavičky), automaticky, pokud posledním parametreme není nastaveno jinak, smaže přidružený mGrid
  491.  
  492. //metody pro POHONY
  493.     void hlavicka_POHONY();
  494.     void vloz_pohon(TPohon *pohon);//vloží jeden pohon na konec seznamu, přiřadí automaticky poslední N (id).
  495.     void vloz_pohon(UnicodeString name,double rychlost_od,double rychlost_do,double aRD,double R,double Rz,double Rx);//vloží jeden pohon na konec seznamu, přiřadí automaticky poslední N (id).
  496.     TPohon *vrat_pohon(unsigned long n);//vrátí ukazatel na pohon dle n pohonu
  497.     void kopiruj_pohon(TPohon *Pohon,TObjekt *Objekt);//bez ukazatelového propojení zkopíruje atributu pohonu do pohonu požadovaného objektu, neobsahuje-li tento objekt alokovanou paměť pro pohon, naalokuje jí
  498.     bool pohon_je_pouzivan(unsigned long n);//dle n pohonu ověří zda je pohon používán nějakým objektem či nikoliv
  499.     TObjekt *pohon_je_pouzivan(unsigned long n,TObjekt *mimo_objekt,short rezim=-1);//dle n pohonu ověří zda je pohon používán nějakým objektem či nikoliv, ten vrátí formou ukazatale na první nalezený používáný, druhý vstupní parametr metody TObjekt mimo_objekt je ukazatel na objekt, který se bude při vyhledávání ignorovat, nenajde-li vrací NULL, třetí parametr, pokud je náchán na implicitní -1 řeší se pro všechny režim, pokud je v rozmezí 0 až 2 řeší se pro konkrétní režim
  500.     unsigned long vrat_pocet_nepouzivanych_pohonu();//vrátí počet nepoužívaných pohonů
  501.     double minRD(TPohon *pohon);//vrátí nejnižší možnou rychlost ze všech objektů, které jsou přiřazené k danému pohonu (využívá se pro S&G a PP, u KK musí být RD v souladu s TT)//pokud vrátí 0, znamená, že pohon není využíván
  502.     AnsiString vypis_objekty_nestihajici_prejezd(TPohon *pohon,double testRD,short rezim=-1);//vypíše objekty přiřazené k danému pohonu nestíhající přejezd při navrhovaném testRD, možno nastavit režim, pro S&G + PP hodnota režim 20
  503.     AnsiString kontrola_rychlosti_prejezdu(TObjekt *O,short rezim,double CT=0,double MT=0,double WT=0,double aRD=0,double DD=0,short aRDunit=-1,unsigned short precision=3,AnsiString mark="..",bool add_decimal=false,AnsiString separator_aRD=" o ");//zkontroluje objekt zda daná rychlost pohonu odpovídá požadované rychlosti pohonu, pokud ne vrátí popis včetně hodnoty, lze poslat externí testovací parametry nebo nechat ověřit dle uložených ve spojáku objekty
  504.     TPohon *najdi_pohon_dle_RD(double RD);//ověří zda je stejná rychlost pohonu na lince používána, pokud není vratí NULL, jinak ukazatel na daný pohon
  505.     void zrusit_prirazeni_pohunu_k_objektum(unsigned long n);//všem objektům s n pohonem zruší přiřazení k tomuto pohonu a nahradí hodnotu ukazatele na přiřazený pohon za NULL
  506.     void generuj_POHONY();//vygeneruje ve statusu NÁVRH seznam doprvníků dle použitého CT objektu a zároveň tomuto objektu tento pohon přiřadí, obsahuje ošetření proti duplicitě
  507.     AnsiString navrhni_POHONY(AnsiString separator="</br>",short m_min=1);//navrhne pohony zobrazené v parametrech linky, vrátí řetězec oddělený seperátorem, pouze jako seznam unikátních použitých rychlostí, lze nastavit jednotky zobrazení rychlosti pohonu, implicintě m/min
  508.     long vymaz_seznam_POHONY();//smaže jednotlivé prvky seznamu, včetně hlavičky, pokud následuje další práce se seznamem, je nutné založit nejdříve hlavičku pomocí hlavicka_pohony()
  509.     //  double delka_dopravniku(Cvektory::TObjekt *ukaz);
  510.     TTextNumber rVALIDACE(short VID,unsigned long PID,double aRD,double R,double Rz,double Rx,short aRDunit,short Runit,short Rzunit);//zkontroluje aplikovatelnost uvažovaného hodnodty dle VID parametru, resp. čísla sloupce (aRD=4,R=5,Rz=6,Rx=7 na všech objektech, přiřazených k danému pohonu označeným parametrem PID, pokud je zadán parametr getValueOrMessage 0 (který je zároveň implicitní), vratí doporučenou hodnotu dle VID, pokud je zvoleno 1, vrátí text chybouvé hlášku s problémem a doporučenou hodnotou, pokud vrátí prázdné uvozovky, je vše v pořádku, //vstupy aRD,R,Rz,Rx a výstupní číselná hodnota jsou v SI jednotkách, naopak textový řetězec problému resp. doporučení, obsahuje hodnotu již převedenou dle aRDunit, Runit, Rzunit
  511. private:
  512.     TTextNumber validace_aRD(double aRD,TPohon *p);
  513.     TTextNumber validace_Rz(double Rz,unsigned long PID);
  514.     TTextNumber validace_Rx(double Rx);
  515.  
  516. //metody pro ZAKAZKY
  517. public:
  518.     void hlavicka_ZAKAZKY();//vytvoří novou hlavičku pro spojový seznam ZAKAZKY
  519.     void vloz_temp_zakazku(UnicodeString id,unsigned short typ, UnicodeString name,TColor barva,double pomer,double TT,TJig jig,unsigned long pocet_voziku,unsigned long serv_vozik_pocet,unsigned long opakov_servis);//vytvoří zakázku dle zadaných parametru do spojového seznamu ZAKÁZKY
  520.     void edituj_temp_zakazku(unsigned long n,UnicodeString id,unsigned short typ,UnicodeString name,TColor barva,double pomer,double TT,unsigned long pocet_voziku,unsigned long serv_vozik_pocet,unsigned long opakov_servis);//provede editaci zakázky s uvedeným “n” ze spojového seznamu ZAKAZKY_temp
  521.     void smaz_temp_zakazku(unsigned long n);//smaže zakázku s uvedeným “n” ze spojového seznamu ZAKAZKY_temp včetně přidružených cest
  522.     void zmen_poradi_temp_zakazky(unsigned long aktualni_poradi,unsigned long nove_poradi);//změní zařazení zakázky ve spojovém seznamu
  523.     TZakazka *vrat_temp_zakazku(unsigned long n_zakazky);// vrátí ukazatel (resp. data) na editovanou zakázku
  524.     void kopirujZAKAZKY_temp2ZAKAZKY(bool mazat_ZAKAZKY_temp=true);//po stisku OK v superformu zkopíruje data z ZAKAZKY_temp do ZAKAZKY, implicitně následně smaže ZAKAZKY_temp
  525.     void kopirujZAKAZKY2ZAKAZKY_temp();//zkopíruje ukazatel na ZAKAZEK do ZAKAZKY_temp, slouží v momentu načítání SF
  526.     void prvni_zakazka_dle_schematu();//pokud první zakázka neexistuje, založí ji a přiřadí ji cestu dle schématu, pokud existuje, tak ji pouze přiřadí cestu dle schématu
  527.     long vymaz_seznam_ZAKAZKY_temp();//smaze seznam ZAKAZKY_temp z paměti včetně přidružených cest, nutno implementovat při close() superformu (ať už při OK, storna, či křížku formu)
  528. private:
  529.     void hlavicka_ZAKAZKY_temp();//vytvoří novou hlavičku pro spojový seznam ZAKAZKY_temp, nutná volat při on_show superformuláře
  530.     void vloz_temp_zakazku(TZakazka *Zakazka_temp);//vloží vytvořenéu zakázku do spojového seznamu ZAKÁZKY_temp
  531.     void vloz_zakazku(TZakazka *Zakazka);//vloží hotovou zakázku do spojového seznamu ZAKÁZKY
  532.     long vymaz_seznam_ZAKAZKY();//smaze seznam ZAKAZKY z paměti v četně přidružených cest, pokud následuje další práce se seznamem (např. nové vkládání), je nutné založit nejdříve hlavičku pomocí hlavicka_ZAKAZKY()
  533. //metody pro cesta konkrétní zakázky
  534. public:
  535.     void inicializace_cesty(TZakazka *zakazka);//vymaže předchozí cestu a zavolá hlavičku cesty nové
  536.     void vloz_segment_cesty(TZakazka *zakazka,unsigned int n_vybraneho_objektu/*z comboboxu*/,double CT,double Tc,double Tv,double RD,unsigned int opak);//do konkrétní cesty vloží segmenty cesty,  bude užito v metodě při stisku OK, při vkládání každého řádku stringgridu v daném for cyklu.
  537.     void vloz_segment_cesty(TZakazka *zakazka,TObjekt *vybrany_objekt,double CT,double Tc,double Tv,double RD,unsigned int opak);//do konkrétní cesty vloží segmenty cesty,  bude užito v metodě při stisku OK, při vkládání každého řádku stringgridu v daném for cyklu.
  538.     TCesta *obsahuje_segment_cesty_objekt(TObjekt *objekt,TZakazka *zakazka);//ověří zda daný objekt je součástí cesty dané zakázky či nikoliv, pokud ano vrací ukazatel na daný segment cesty
  539.     TZakazka *obsahuje_segment_cesty_objekt(TObjekt *objekt);//ověří zda daný objekt je součástí cesty nějaké zakázky či nikoliv, pokud ano vrací ukazatel na danou zakázku
  540.     void aktualizace_CTaRD_segmentu_cesty_dleTT_zakazky(TZakazka *zakazka,double TT);//dle TT z parametru nastaví všem segmentům cesty od dané zakázky odpovídající CT (a line-tracking objektů i RD) dle fixní délky a kapacity, vhodné pro volání před zobrazením cest
  541.     void aktualizace_CTaRD_segmentu_cesty_dleTT_zakazky(TZakazka *zakazka);//dle TT zakázky nastaví všem segmentům cesty od dané zakázky odpovídající CT (a line-tracking objektů i RD) dle fixní délky a kapacity, vhodné pro volání před zobrazením cest
  542.     void aktualizace_CTaRD_segmentu_cesty_dleTT_zakazky();//to samé co výše ale uskuteční pro všechny zakázky, vhodné pro volání v tlačítku uložit
  543.     void aktualizace_KaCTaRD_segmentu_cesty_dleJIG(TZakazka *zakazka);//dle parametrů JIG přepočítá K (u S&G zanechá 1) a z toho vyplývající změnu CT a RD (u linetracking objektů) jednolivých segmentů cesty dané zakázky
  544. private:
  545.     void hlavicka_cesta_zakazky(TZakazka *zakazka);//vytvoří novou hlavičku pro spojový seznam konkrétní cesty dané zakázky
  546.     void vymaz_cestu_zakazky(TZakazka *zakazka);//vymaže celou cestu dané zakázky
  547.     void vloz_segment_cesty(TZakazka *zakazka,TCesta *segment_cesty);//do konkrétní zakázky vloží segmenty cesty
  548.  
  549. //metody pro VOZIKY
  550. public:
  551.     void hlavicka_VOZIKY();//vytvoří hlavičku spojového seznamu VOZIKY
  552.     void generuj_VOZIKY();//vygeneruje podle zadaných zakázek seznam vozíků (včetně případných servisních), seřazeno dle zakázek
  553.     void vymazat_casovou_obsazenost_objektu_a_pozice_voziku(TObjekt *Objekt,TVozik *Vozik);//slouží při úvodním načítání časových os, smaže výchozí a koncovou pozici sloužící pro tvorbu a zobrazení na časových osách
  554.     TVozik *vrat_vozik(unsigned int n);//dle n resp. ID vozíku vrátí ukazatel na daný vozík
  555. private:
  556.     void vloz_vozik(TZakazka *zakazka,short typ);//0-normální, 1-servisní
  557.     long vymaz_seznam_VOZIKY();
  558.  
  559. //metody pro PROCESY
  560. public:
  561.     void hlavicka_PROCESY();
  562.     void vloz_proces(TProces *Proces);
  563.     TProces *najdi_proces(double cas, double vozik);//hledá bod mezi procesy
  564.     TProces *vrat_nasledujici_proces_objektu(TProces *Proces);//vratí následující proces na stejném objektu jako proces zadaný
  565.     long vymaz_seznam_PROCESY();
  566.  
  567. //metody pro KATOLOG
  568.     enum TtypHodnoty{R,hO,vO,vR,hR};TtypHodnoty;
  569.     void vloz_typ_dopravniku(AnsiString name,UnicodeString link="",short druh=0);//vloží nový typ dopravníku do KATALOGu dopravníků, pokud neexistuje hlavička vytvoří ji, druh: 0 - podlahový, 1 - podvěsný
  570.     void vloz_do_typu_dopravniku(TtypHodnoty typHodnoty,double hodnota,Ttyp_dopravniku *typDopravniku=NULL);//vloží dle typu hodnoty hodnotu do typuDopravniku, pokud je NULL, vloží nakonec (do posledního typu dopravníku uloženém ve spojovém seznamu v KaTALOGu)
  571.     void vytvor_KATALOG();//vytvoří katalog typů dopravníku za pomocí volání nasledujících dvou metod
  572.     Ttyp_dopravniku *vrat_typ_dopravniku(unsigned long n);//dla zadaného n vrátí daný typ dopravníku formou ukazatatele
  573.     double vrat_hodnotu_typu_dopravniku(unsigned long nDopravniku,TtypHodnoty typHodnoty,unsigned long n);//vrátí od zadaného typu dopravníku dle zadaného n a typu hodnoty hodnotu - přetížená následující
  574.     double vrat_hodnotu_typu_dopravniku(Ttyp_dopravniku *typDopravniku,TtypHodnoty typHodnoty,unsigned long n);//vrátí od zadaného typu dopravníku dle zadaného n a typu hodnoty hodnotu
  575.     void vymaz_seznam_KATALOG();//smaže celý katalog, včetně přidružených spojových seznamů
  576.  
  577. //metody pro PALCE
  578. // void hlavicka_palce();
  579. // void vloz_palec();//přidá nový vozík do seznamu PALCE
  580. // long vymaz_seznam_palcu();
  581.  
  582. //metody pro TEXTY
  583.     void vloz_text(double X, double Y,AnsiString text,int vrstva=-1);//vloží nový text na konec seznamu
  584.     void posun_text(double X, double Y,TText* Text);//posune datový objekt textu daný ukazatelem na dané nové souřadnice
  585.     TText *najdi_text(TText* Text);//na aktuálních souřadnicích myši hledá bod, pokud je nalezen vrátí na něj ukazatel, jinak vrátí NULL
  586.     void kopiruj_texty(TText *Original,TText *Kopie);//zkopíruje text z originálu na kopii bez ukazatelového propojení
  587.     void smaz_text(TText* Text);//smaže konkrétní Text
  588.     void vymaz_TEXTY();//vymaže všechny texty ze spojového seznamu TEXTY včetně hlavičky
  589.  
  590. //metody pro SPOJNICE
  591.     void vloz_spojnici(int vrstva=-1,short zakonceni=0);//vytvoří novou spojnici, a tu vloží do spojového seznamu spojnici, pokud ještě nebyla vytvořena hlavička, tak ji nejdříve založí, parametry: vrstva - ID vrstvy (např. layout vs. editace), zakonceni: 0 - nebude zakončeno, 1- bude zakončeno šipkou
  592.     void vloz_bod_spojnice(double X, double Y,TSpojnice *Spojnice=NULL,TBod *ZaBod=NULL,bool ortogonalizovat=true);//vloží nový bod na konec seznamu dané Spojnice pokud je Za=NULL, jinak vloží za tento bod, ošetřuje bod vložený na stejný místo jako předchozí, pokud je Spojnice==NULL vkládání bodů probíhá přímo do vkládání poslední Spojnice ve spojovém seznamu SPOJINICE
  593.     //void posun_bod(double X, double Y,TBod* Bod);//posune bod spojnice - použít již existující metodu
  594.     //void posun_hranu(double OffsetX,double OffsetY,TBod* Bod1,TBod* Bod2);//posune hranu tvořenou danými body o zadaný offset  - použít již existující metodu
  595.     void posun_body_spojnice(double OffsetX,double OffsetY,TSpojnice *Spojnice);//posune všechny body polygonu o daný offset
  596.     //zatím nebude využito: void rotuj_body(double X, double Y,double uhel,TSpojnice *Spojnice);//orotuje celý polygonu proti směru hodinových ručiček okolo osy dle bodu o souřadnicích X,Y, dle hodnoty rotace uhel
  597.     TBod *najdi_bod_spojnice();//na aktuálních souřadnicích myši hledá bod libovolné spojnice, pokud je nalezen vrátí na něj ukazatel, jinak NULL
  598.     TBod *najdi_usecku_spojnice();//na aktuálních souřadnicích myši hledá úsečku libovolné spojnice, pokud je nalezena je vracen ukazatel na druhý bod, pokud nebylo nalezeno nic vrátí NULL
  599.     TSpojnice *najdi_spojnici();//na aktuálních souřadnicích myší hledá spojnici, pokud najde vrací ukazatel na nalezenou spojnici, využívá výše uvedenou metodu
  600.     void kopiruj_spojnici(TObjekt *Original,TObjekt *Kopie);//zkopíruje spojnici včetně bodů spojnice z originálu na kopii bez ukazatelového propojení
  601.     void smaz_bod_spojnice(TBod* Bod,TSpojnice *Spojnice=NULL);//smaže konkrétní bod konkrétní spojnice, pokud je ukazatel Spojnice=NULL, jedná se bod poslední spojnice (je praktické např. při backspacu posledního bodu editované spojnice)
  602.     void vymaz_body_spojnice(TSpojnice *Spojnice=NULL);//vymaže všechny body včetně hlavičky dané spojnice, pokud je ukazatel Spojnice=NULL, jedná se bod poslední spojnice (je praktické např. při ESC editované spojnice) - využívá výše uvedenou metodu
  603.     void smaz_spojnici(TSpojnice *Spojnice=NULL);//vymaže spojnici včetně všech bodů a hlavičky dané spojnice, pokud je ukazatel Spojnice=NULL, jedná se bod poslední spojnice (je praktické např. při ESC editované spojnice) - využívá výše uvedenou metodu
  604.     void vymaz_SPOJNICE();//vymaže celý spojový seznam SPOJNICE včetně všech bodů a hlaviček - využívá výše uvedenou metodu, použít do vse_odstranit!!!
  605.  
  606. //odstraní všechny vektory (všechny globální spojáky)
  607.     void vse_odstranit();
  608.  
  609. //souborové operace
  610.     void vytvor_hlavicku_souboru();
  611.     short int uloz_do_souboru(UnicodeString FileName);
  612.     short int nacti_ze_souboru(UnicodeString FileName);
  613.     short int ulozit_report(UnicodeString FileName);
  614.     void nacti_CSV_retezy(AnsiString FileName);
  615.     AnsiString ReadFromTextFile(AnsiString FileName);
  616.     void SaveText2File(AnsiString Text,AnsiString FileName);
  617.  
  618. //technické, statistické a ekonomické ukazatele
  619.     TPointD vrat_zacatek_a_konec_zakazky(TZakazka *jaka);//ukazatel na cestu resp, zakázku
  620.     TPointD vrat_zacatek_a_konec_zakazky(unsigned int n_zakazky);//n resp. ID cestu resp, zakázku
  621.     double vrat_nejpozdejsi_konec_zakazek();//nemusí se vždy jednat o poslední zakázku
  622.     double vrat_LT();//vratí součet CT časů objektů ze statusu návrh/architekt
  623.     double vrat_LT_voziku(TVozik *jaky);//vrátí celkový čas, který strávil vozík ve výrobě včetně čekání
  624.     double vrat_LT_voziku(unsigned int n_voziku);//vrátí celkový čas, který strávil vozík ve výrobě včetně čekání
  625.     double vrat_sumPT_voziku(TVozik *jaky);//vrátí čistý čas, který strávil vozík ve výrobě bez čekání
  626.     double vrat_sumPT_voziku(unsigned int n_voziku);//vrátí čistý čas, který strávil vozík ve výrobě bez čekání
  627.     double vrat_AVGsumPT_zakazky(TZakazka *jaka);//vrátí čistý čas, který strávily vozík ve výrobě bez čekání pro danou zakazku
  628.     double vrat_WT_voziku(TVozik *jaky);//vrátí čas čeká vozíku během výroby
  629.     double vrat_WT_voziku(unsigned int n_voziku);//vrátí čas čeká vozíku během výroby
  630.     double vrat_AVGsumWT_zakazky(TZakazka *jaka);//vrátí čistý čas, který vozíky čekaly pro danou zakazku
  631.     double vrat_TT_voziku(TVozik *jaky);//vrátí takt, resp. rozdíl čásů mezi dokončením tohoto a předchozího vozíku
  632.     double vrat_TT_voziku(unsigned int n_voziku);//vrátí takt, resp. rozdíl čásů mezi dokončením tohoto a předchozího vozíku
  633.     double vrat_AVG_TT_zakazky(TZakazka *jaka);//vrátí hodnotu průměrného TT mezi vozíky v rámci dané zakázky/cesty
  634.     double vrat_AVG_TT_zakazky(unsigned int n_zakazky);//vrátí hodnotu průměrného TT mezi vozíky v rámci
  635.     unsigned int vrat_pocet_voziku_zakazky(TZakazka *jaka);
  636.     unsigned int vrat_pocet_voziku_zakazky(unsigned int n_zakazky);
  637.     TPoint vrat_start_a_pozici_vozikuPX(unsigned int n_voziku);//vrátí začátek a konec vozíku na časové ose v PX
  638.     double WIP(short typ_vypoctu=0);//vrátí max. počet vozíků na lince, kde parametr s implicitní hodnotou 0 je volaný výpočet z překrytí vozíků na časových osách, hodnot 1 - součtem kapacit zadaných (resp. v návrháru/architektovi vypočítaných), hodnota 2 - součtem kapacit vypočtených v časových osách,  3 - tradiční výpočet WIP=1/TT*LT
  639.     void uloz_doporucene_kapacity_objetku();//ukládá vypočtené doporučené kapacity jednotlivým technologickým objektům do jejich atribitu dop_kapacita, která se nezadává uživatelsky, ale jedině v tomto algoritmu
  640.     TMinMedAvgMax_d vrat_statisticke_doby_cekani_na_palec(TCesta *segment_cesty);//vrátí minimální, střední, průměrnou a maximální dobu čekání na palec v sec pro daný objekt (segment cesty) tak, jak bylo vypočteno v analýze/na časových osách, musí být tedy zde zvolena nějaká (libovolná) volba čekání na palec, mimo "žádná", Struktura TMinMedAvgMax_d vrací 4 hodnoty, min, med, agv, max datového typu double, volání výsledků probíhá přes “tečkový selektor”
  641.  
  642. //SQL
  643.     AnsiString QUERY(AnsiString query);//vratí AnsiString hodnod dle zadaného dotazu v syntaxi SQL, zatím umí jen základní úroveň
  644.  
  645. //pomocné metody
  646.     void Text2CSV(AnsiString text,AnsiString FileName="",AnsiString Title="",AnsiString DefaultExt="",AnsiString Filter="",bool openDialog=true,bool open=true);//vytovoří a otevře CSV, je-li požadováno
  647.  
  648. //pomocné struktury pro ukládání do bináru
  649. private:
  650.     struct C_raster
  651.     {
  652.         unsigned int text_length;
  653.         long double resolution;//rozlišení metrů na jeden pixel rastrového podkladu
  654.         double X,Y;//logické souřadnice (v metrech) umístění rastrového podkladu v projektu
  655.         bool show;//indikace zda je raster zobrazen
  656.         bool grayscale;//zda bude či nebude rastrový podklad v odstínech šedi či nikoliv
  657.         int dim;//úroveň ztlumení
  658.     };
  659.  
  660.     struct C_pohon//pro konverzi do bináru
  661.     {
  662.             unsigned int n;
  663.             unsigned int text_length;
  664.             double rychlost_od;//minimální pracovní rychlost dopravníku
  665.             double rychlost_do;//maximální pracovní rychlost dopravníku
  666.             double aRD;//aktuální rychlost dopravníku m/s
  667.             double roztec;//rozteč palců v m
  668.             double Rz;//rozestup aktivních palců v m
  669.             double Rx;//rozestup aktivních palců (počet aktivních palců)
  670.     };
  671.     struct C_objekt//pro konverzi do bináru
  672.     {
  673.             unsigned int n;
  674.             unsigned int id;
  675.             unsigned int text_length;
  676.             double X, Y;
  677.       double Xt,Yt;
  678.       unsigned long pocet_bodu;
  679.             unsigned long pocet_elementu;
  680.       unsigned long pocet_komor;
  681.             unsigned short rezim;//rezim objektu 0-S&G,1-Kontin.(line tracking),2-Postprocesní
  682.       double sirka_steny;//šířka stěny kabiny objektu v metrech
  683.             double orientace;//orientace objektu
  684.             unsigned int pohon;//"id" resp. n přidruženého - roletkou vybraného pohonu
  685.             double delka_dopravniku;//delka dopravníku v rámci objektu
  686.       double koty_elementu_offset;
  687.             bool zobrazit_koty;//proměnná určující, zda se budou zobrzovat kóty - NEW pridat do binarky
  688.             bool zobrazit_mGrid;//proměnná určující, zda budou zobrazeny mGridy - NEW pridat do binarky
  689.             bool uzamknout_nahled;//proměnná určující, zda bude či nebude možné používat interaktivní prvky v náhledu objektu - NEW pridat do binarky
  690.     };
  691.  
  692.    struct C_bod//pouze pridruzeny spojak
  693.     {
  694.     unsigned long n; //pořadí objektu ve spoj.seznamu
  695.         double X, Y;//umístění v logických (metrických) souřadnicích
  696.     double kota_offset;//odsazení kót v metrech
  697.     };
  698.  
  699.     struct C_hala
  700.     {
  701.         double name_delka;
  702.     double X, Y;//umístění názvu v logických (metrických) souřadnicích
  703.         unsigned long pocet_bodu;
  704.   };
  705.  
  706.   struct C_komora
  707.     {
  708.     unsigned long n; //pořadí ve spoj.seznam
  709.         double velikost;//v metrech
  710.     short typ;//1-se sprchou, 0 bez jen okap
  711.     };
  712.  
  713.     struct C_zakazka
  714.     {
  715.             unsigned long n;//pořadí objektu ve spoj.seznamu
  716.             //UnicodeString id;//uživatelské ID objektu - nelze UnicodeString
  717.             unsigned int id_length;
  718.             unsigned short typ;//0- realná,1-servisní
  719.             //UnicodeString name;//název zakázky nelze jako UnicodeString
  720.             unsigned int name_length;
  721.             TColor barva;//barva zakáky
  722.             double pomer;//poměr z celkového množství výrobků
  723.             double TT;
  724.             TJig jig;//šířka délka, výška, rotace a  ks připadajících na jig/rám vozíku
  725.             unsigned long pocet_segmentu_cesty;//udržuje počet jednotlivých segmentů cesty, slouží kvůli tomu, aby se vědělo, kolikrát cyklem načítat strukturu která načítá jednotlivé segmenty konkrétně objekty typu TCesta dané zakázky
  726.             unsigned long pocet_voziku;//počet vozíků v zakázce
  727.             unsigned long serv_vozik_pocet;//počet servisních vozíků v zakázce
  728.             unsigned long opakov_servis;//cyklus opakování servisních vozíku
  729.     };
  730.  
  731.         struct C_element//pouze pridruzeny spojak
  732.     {
  733.             unsigned long n; //pořadí ve spoj.seznamu
  734.       unsigned int eID; //id typu elementu: 0 - stop stanice, 1 - robot, 2 - robot se stop stanicí, 3 - robot s pasivní otočí, 4 - robot s aktivní otočí (resp. s otočí a stop stanicí), 5 - otoč pasivní, 6 - otoč aktivní (resp. otoč se stop stanicí), 7 - pouze geometrická zarážka
  735.          // UnicodeString short_name;//krátký název max. 4 znaky
  736.      // UnicodeString name;//celý název objektu
  737.             double name_delka;  // celý název objektu
  738.       double X, Y;//umístění v logických (metrických) souřadnicích
  739.             double Xt,Yt;//umístění tabulky, resp. mGridu v logických (metrických) souřadnicích
  740.       short orientace;//v jaké orientaci je element na obrazovce vykreslen 0,90,180,270
  741.             double rotace_jig;//úhel o který element orotuje jig vzhledem k jeho aktuální rotaci jigu vůči podvozku, např. rotace_jig=90°, aktuální rotace jigu 90°, výsledek 180°
  742.       short stav;
  743.  
  744.       double LO1;
  745.             double OTOC_delka;
  746.       double LO2;
  747.             double LO_pozice;
  748.  
  749.             double PT1;
  750.       double PTotoc;
  751.       double PT2;
  752.  
  753.       double WT;//čekání na palec
  754.       double WTstop;//čekání na stopce
  755.             double RT;//reserve time
  756.  
  757.       unsigned int akt_pocet_voziku;
  758.       unsigned int max_pocet_voziku;
  759.             TGeometrie geo;
  760.     };
  761.  
  762.     struct C_cesta//pouze přidružený spoják, který je součástí zakázky, jeden objekt spojáku je jeden segment cesty
  763.     {
  764.             unsigned long n;//n segmentu cesty
  765.             unsigned long n_objekt;//n na vybraný objekt
  766.         double CT; //cycle time
  767.             double Tc;//čaš čištění v rámci zakázky resp. stejné barvy, vztahuje se na konkrétní objekt a a zároveň zakázku, musí být tady, pokud není použito, tak 0
  768.             double Tv;//čas čištění a výměny barev, vztahuje se na konkrétní objekt a a zároveň zakázku, musí být tady, pokud není použito, tak 0
  769.             double RD;//rychlost dopravníku
  770.             unsigned int Opak;//počet opakování jak často se čištění opakuje
  771.     };
  772.  
  773. //  struct C_vozik//pro konverzi do bináru
  774. //  {
  775. //      unsigned int n; //pořadí objektu ve spoj.seznamu
  776. //      unsigned int id_length;   //délka řetězce id
  777. //      double delka;
  778. //      double sirka;
  779. //      double vyska;
  780. //      double rotace;
  781. //      unsigned int text_length;
  782. //      double max_vyrobku;
  783. //      double akt_vyrobku;
  784. //      double delka_vcetne_vyrobku;
  785. //      double sirka_vcetne_vyrobku;
  786. //      double vyska_vcetne_vyrobku;
  787. //      short stav;//-1 - není na lince, 0 - stop, 1 - čeká, 2 - jede
  788. //      TColor barva;
  789. //  };
  790. //
  791.  
  792.     unsigned int vrat_kapacitu_objektu(TObjekt *O);//stačí v sekci private, protože ukládám přímo přímo do atributů objektu pomocí uloz_doporucene_kapacity_objetku();
  793. //
  794. //protected:
  795. };
  796. //---------------------------------------------------------------------------
  797. #endif
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top