diff --git a/ConfigGenerale.cfg b/ConfigGenerale.cfg index d1e641f..9cef4a2 100644 --- a/ConfigGenerale.cfg +++ b/ConfigGenerale.cfg @@ -1,22 +1,26 @@ -/ Fichier de configuration de signaux_complexes_GL +/ Fichier de configuration de signaux_complexes_GL version 6.1 +AvecVerifIconesTCO=1 Algo_localisation=1 Avec_roulage=1 Debug=0 -Filtrage_det=3 -Fonte=12 +Filtrage_det=0 +AntiTimeoutEthLenz=0 +Fonte=10 Protocole=1 +Verif_AdrXpressNet=1 IpV4_PC=127.0.0.1:9999 +ServicesCDM=15 Ipv4_interface=192.168.1.23:5550 MaxCom=30 -Protocole_serie=COM22:115200,N,8,1,0 +Protocole_serie=COMX:115200,N,8,1,0 Inter_car=50 -Tempo_maxi=7 +Tempo_maxi=15 Entete=1 Init_Aig=0 Init_Dem_Aig=0 -Tempo_Aig=20 +Tempo_Aig=50 Init_demUSBCOM=0 -Init_demETH=1 +Init_demETH=0 Fenetre=0 nb_det_dist=3 verif_version=0 @@ -25,6 +29,7 @@ TCO=0 MasqueBandeauTCO=0 CDM=0 Lay=RESEAU_GILY_SIGNAL_AJOUTE.LAY +NomModuleCDM=reseau_gily_signal_ajoute_top.cdm Serveur_interface=1 retro=1 RazSignaux=0 @@ -33,10 +38,10 @@ Nb_cantons_Sig=3 Alg_Unisemaf=1 /------------ [section_aig] -1,P518,D100D,S3P,V30,I0,INIT(2,3) -2,P12S,D519,S100S,V0,I0,INIT(1,3) +1,P518,D100D,S3P,V30,I0,INIT(2,2) +2,P12S,D519,S100S,V0,I0,INIT(1,2) 3,P1S,D4P,S5D,V0,I0,INIT(2,2) -4,P3D,D6S,S514,V0,I0,INIT(1,2) +4,P3D,D6S,S514,V0,I0,INIT(2,2) 5,P515,D3S,S100S,V0,I0,INIT(1,2) 6,P516,D0,S4D,V0,I0,INIT(2,2) 7,P527,D519,S520,V0,I0,INIT(2,2) @@ -49,7 +54,7 @@ Alg_Unisemaf=1 18,P11P,D23P,S102S,V0,I0,INIT(1,2) 19,P101D,D22P,S531,V0,I0,INIT(1,2) 20,P520,D21P,S12D,V0,I0,INIT(2,2) -21,P20D,D28D,S28D,V0,I0,INIT(2,2) +21,P20D,D28S,S28D,V0,I0,INIT(2,2) 22,P19D,D537,S32P,V0,I0,INIT(2,2) 23,P18D,D538,S534,V0,I0,INIT(2,2) 24,P538,D32S,S533,V0,I0,INIT(2,2) @@ -62,9 +67,9 @@ Alg_Unisemaf=1 31,P534,D34D,S104S,V0,I0,INIT(1,2) 32,P22S,D34S,S24D,V0,I0,INIT(1,2) 34,P0,D31D,S32D,V0,I0,INIT(2,2) -100CROI,D(1D,523Z),S(2S,5S) -101CROI,D(11S,525Z),S(19P,10P) -102CROI,D(22P,10D),S(517,18S) +100CROI,D(1D,523),S(2S,5S) +101CROI,D(11S,525),S(19P,10P) +102CROI,D(22P,19D),S(517,18S) 103CROI,D(513,9D),S(522,8S) 104CROI,D(0,32D),S(25P,31S) 0 @@ -78,15 +83,15 @@ A9,515,A5 A11,A101,525,A17,528,A10 A17,535,533,A24,538,A23 A7,520,A20,A21,A28,A26,530,A27,A25,A104,A31,534,A23,A18 -A26,529,A25 -A22,537,A27 +A26,529,A25,A104 +A22,537,A27,A25 A22,A32,A24 A6,516,0 A31,A34,0 0 /------------ [section_sig] -176,7,0,1,(520,A20),0,FVC0,FRC0 +176,7,0,1,(520,A20),1,FVC0,FRC0 190,7,0,1,(523,526),0,FVC0,FRC0 204,9,0,1,(527,A7),1,FVC0,FRC0 218,7,0,1,(525,A17),0,FVC0,FRC0 @@ -137,8 +142,8 @@ TrainElectrique,11,110,40,30 BB25531,1,120,50,40 TGV,2,120,50,30 BB16024,3,120,60,50 -CC406526,4,120,80,70 -CAMERA,10,120,0,0 +CC406526,4,120,50,30 +CAMERA,0,120,0,0 0 /------------ [section_placement] @@ -146,6 +151,6 @@ TRAINELECTRIQUE,0,0,0 BB25531,0,0,0 TGV,0,0,0 BB16024,523,526,0 -CC406526,528,531,0 +CC406526,0,0,0 CAMERA,0,0,0 0 diff --git a/Notice d'utilisation des signaux_complexes_GL_V6.1.pdf b/Notice d'utilisation des signaux_complexes_GL_V6.1.pdf new file mode 100644 index 0000000..23ae486 Binary files /dev/null and b/Notice d'utilisation des signaux_complexes_GL_V6.1.pdf differ diff --git a/Signaux_complexes_GL.cfg b/Signaux_complexes_GL.cfg index acb7715..e9e902f 100644 --- a/Signaux_complexes_GL.cfg +++ b/Signaux_complexes_GL.cfg @@ -12,7 +12,7 @@ -$L+ -$M- -$N+ --$O+ +-$O- -$P+ -$Q+ -$R+ diff --git a/Signaux_complexes_GL.dof b/Signaux_complexes_GL.dof index d5ff374..f78f51d 100644 --- a/Signaux_complexes_GL.dof +++ b/Signaux_complexes_GL.dof @@ -15,7 +15,7 @@ K=0 L=1 M=0 N=1 -O=1 +O=0 P=1 Q=1 R=1 diff --git a/Signaux_complexes_GL.dpr b/Signaux_complexes_GL.dpr index d9ee19f..9c93819 100644 --- a/Signaux_complexes_GL.dpr +++ b/Signaux_complexes_GL.dpr @@ -16,11 +16,13 @@ uses UnitCDF in 'UnitCDF.pas' {FormCDF}, Unitplace in 'Unitplace.pas' {FormPlace}, UnitPareFeu in 'UnitPareFeu.pas', - UnitAnalyseSegCDM in 'UnitAnalyseSegCDM.pas' {FormAnalyseCDM}; + UnitAnalyseSegCDM in 'UnitAnalyseSegCDM.pas' {FormAnalyseCDM}, + Importation in 'Importation.pas' {FormImportation}; {$R *.res} begin + // la form TCO ne doit pas etre créée ici!! Application.Initialize; Application.CreateForm(TFormPrinc, FormPrinc); Application.CreateForm(TFormVersion, FormVersion); @@ -35,5 +37,6 @@ begin Application.CreateForm(TFormPlace, FormPlace); Application.CreateForm(TFormDebug, FormDebug); Application.CreateForm(TFormAnalyseCDM, FormAnalyseCDM); + Application.CreateForm(TFormImportation, FormImportation); Application.Run; end. diff --git a/UnitAnalyseSegCDM.dfm b/UnitAnalyseSegCDM.dfm index c54d2dd..7974e19 100644 --- a/UnitAnalyseSegCDM.dfm +++ b/UnitAnalyseSegCDM.dfm @@ -1,10 +1,10 @@ object FormAnalyseCDM: TFormAnalyseCDM - Left = 154 - Top = 36 + Left = 206 + Top = 0 AutoScroll = False - Caption = 'FormAnalyseCDM' - ClientHeight = 660 - ClientWidth = 1032 + Caption = 'Fen'#234'tre r'#233'seau CDM' + ClientHeight = 648 + ClientWidth = 1041 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText @@ -12,18 +12,55 @@ object FormAnalyseCDM: TFormAnalyseCDM Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False + Position = poScreenCenter OnCreate = FormCreate + OnMouseWheel = FormMouseWheel OnResize = FormResize DesignSize = ( - 1032 - 660) + 1041 + 648) PixelsPerInch = 96 TextHeight = 13 + object Label4: TLabel + Left = 1001 + Top = 520 + Width = 27 + Height = 13 + Anchors = [akTop, akRight] + Caption = 'Zoom' + end + object ImageLoco: TImage + Left = 688 + Top = 600 + Width = 65 + Height = 25 + Picture.Data = { + 07544269746D61701A020000424D1A0200000000000076000000280000003100 + 00000F0000000100040000000000A40100000000000000000000100000000000 + 0000000000000000800000800000008080008000000080008000808000008080 + 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000FFF77777BBB777777777 + 777777777777777777BBB77777FFF0000000FF777777B7B77777777777777777 + 7777777777B7B777777FF0000000FF777777BBB7999999999999999999977777 + 77BBB777777FF0000000FF777777BBBBBBB7777777777777779777BBBBBBB777 + 777FF0000000FF777777BBBBBBBBBB7777777777779BBBBBBBBBB777777FF000 + 0000FF777777BBB7BBBB77777777777777977BBBB7BBB777777FF0000000FF77 + 7777BBBB7777777777777777779999997BBBB777777FF0000000FF777777B7B7 + 77777777777777777777777777B7B777777FF0000000FFF77777BBB777777777 + 777777777777777777BBB77777FFF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFF0000000} + Transparent = True + Visible = False + end object ScrollBox1: TScrollBox Left = 8 Top = 16 - Width = 977 - Height = 537 + Width = 986 + Height = 509 HorzScrollBar.Tracking = True Anchors = [akLeft, akTop, akRight, akBottom] AutoScroll = False @@ -31,29 +68,41 @@ object FormAnalyseCDM: TFormAnalyseCDM ParentColor = False TabOrder = 0 object ImageCDM: TImage - Left = 0 - Top = 0 - Width = 937 - Height = 512 + Left = 24 + Top = 8 + Width = 873 + Height = 465 + ParentShowHint = False + ShowHint = True + OnClick = ImageCDMClick + OnMouseMove = ImageCDMMouseMove end end object GroupBox1: TGroupBox - Left = 16 - Top = 560 - Width = 257 - Height = 89 + Left = 8 + Top = 536 + Width = 385 + Height = 109 Anchors = [akLeft, akBottom] Caption = 'Affichages ' TabOrder = 1 object Label1: TLabel - Left = 24 - Top = 56 - Width = 81 + Left = 8 + Top = 50 + Width = 76 + Height = 26 + Caption = 'Afficher le segment/port n'#176 + WordWrap = True + end + object Label3: TLabel + Left = 8 + Top = 84 + Width = 82 Height = 13 - Caption = 'Afficher le port n'#176 + Caption = 'Allumer d'#233'tecteur' end object CheckConnexions: TCheckBox - Left = 24 + Left = 8 Top = 16 Width = 97 Height = 17 @@ -65,7 +114,7 @@ object FormAnalyseCDM: TFormAnalyseCDM OnClick = CheckConnexionsClick end object CheckAdresses: TCheckBox - Left = 24 + Left = 8 Top = 32 Width = 97 Height = 17 @@ -77,18 +126,18 @@ object FormAnalyseCDM: TFormAnalyseCDM OnClick = CheckAdressesClick end object CheckSegments: TCheckBox - Left = 112 + Left = 128 Top = 16 Width = 81 - Height = 25 + Height = 17 Caption = 'segments' TabOrder = 2 OnClick = CheckSegmentsClick end object CheckPorts: TCheckBox - Left = 112 + Left = 128 Top = 32 - Width = 121 + Width = 65 Height = 17 Hint = 'Affiche le num'#233'ro de segment et le port de CDM' Caption = 'Ports' @@ -98,118 +147,157 @@ object FormAnalyseCDM: TFormAnalyseCDM OnClick = CheckPortsClick end object EditPort: TEdit - Left = 112 + Left = 96 Top = 56 - Width = 57 + Width = 49 Height = 21 TabOrder = 4 end object ButtonAffPort: TButton - Left = 176 + Left = 152 Top = 56 Width = 73 Height = 25 - Caption = 'Afficher le port' + Caption = 'Afficher' TabOrder = 5 OnClick = ButtonAffPortClick end + object EditDetecteur: TEdit + Left = 96 + Top = 80 + Width = 33 + Height = 21 + TabOrder = 6 + end + object ButtonAffDet: TButton + Left = 152 + Top = 80 + Width = 73 + Height = 25 + Caption = 'Allumer' + TabOrder = 7 + OnClick = ButtonAffDetClick + end + object CheckColorationDiff: TCheckBox + Left = 232 + Top = 16 + Width = 137 + Height = 17 + Caption = 'Coloration diff'#233'renti'#233'e' + TabOrder = 8 + OnClick = CheckColorationDiffClick + end + object ButtonAllumeTs: TButton + Left = 232 + Top = 80 + Width = 129 + Height = 25 + Caption = 'Allume tous les d'#233'tecteurs' + TabOrder = 9 + OnClick = ButtonAllumeTsClick + end + object ButtonImprime: TButton + Left = 232 + Top = 48 + Width = 75 + Height = 25 + Caption = 'Imprimer' + TabOrder = 10 + OnClick = ButtonImprimeClick + end end object TrackBar1: TTrackBar - Left = 992 + Left = 1001 Top = 16 Width = 37 - Height = 553 + Height = 489 + Hint = 'Curseur de Zoom' Anchors = [akTop, akRight] - Max = 200 + Max = 90 Min = 50 Orientation = trVertical - Position = 200 + ParentShowHint = False + Position = 90 + ShowHint = True TabOrder = 2 OnChange = TrackBar1Change end - object GroupBox2: TGroupBox - Left = 280 - Top = 560 + object GroupBoxSegment: TGroupBox + Left = 400 + Top = 536 Width = 145 - Height = 89 + Height = 109 Anchors = [akLeft, akBottom] - Caption = 'Strat'#233'gies d'#39'importation' + Caption = 'Segment' TabOrder = 3 - object CheckDebugAnalyse: TCheckBox - Left = 16 - Top = 24 - Width = 121 - Height = 17 - Caption = 'Debug importation' - TabOrder = 0 - OnClick = CheckDebugAnalyseClick - end - object CheckDebugBranches: TCheckBox - Left = 16 - Top = 48 - Width = 97 - Height = 17 - Caption = 'Debug branches' - TabOrder = 1 - OnClick = CheckDebugBranchesClick - end - end - object GroupBox3: TGroupBox - Left = 432 - Top = 560 - Width = 537 - Height = 89 - Anchors = [akLeft, akBottom] - Caption = 'Param'#232'tres' - TabOrder = 4 - DesignSize = ( - 537 - 89) - object ButtonImporter: TButton - Left = 382 - Top = 40 - Width = 75 - Height = 25 - Hint = 'Lancement de l'#39'importation' - Anchors = [akLeft, akBottom] - Caption = 'Importer' - ParentShowHint = False - ShowHint = True - TabOrder = 0 - OnClick = ButtonImporterClick - end - object RadioGroup1: TRadioGroup + object Label2: TLabel Left = 8 - Top = 24 - Width = 305 - Height = 57 - Caption = 'Adressage des croisements' - TabOrder = 1 + Top = 22 + Width = 42 + Height = 13 + Caption = 'Segment' end - object RadioCroisSuite: TRadioButton - Left = 24 - Top = 40 - Width = 217 - Height = 17 - Caption = 'Croisements '#224' la suite des aiguillages' - TabOrder = 2 + object LabelAdresse: TLabel + Left = 11 + Top = 48 + Width = 44 + Height = 13 + Caption = 'Adresse :' end - object RadioCroisBase: TRadioButton - Left = 24 - Top = 56 - Width = 217 - Height = 17 - Caption = 'Croisements '#224' partir de l'#39'adresse de base' - TabOrder = 3 + object LabelPorts: TLabel + Left = 11 + Top = 74 + Width = 33 + Height = 13 + Caption = 'Ports : ' + WordWrap = True end - object EditBaseCrois: TEdit - Left = 240 - Top = 54 + object EditSegment: TEdit + Left = 80 + Top = 16 Width = 41 Height = 21 - TabOrder = 4 - Text = '100' - OnChange = EditBaseCroisChange + ReadOnly = True + TabOrder = 0 + end + object EditAdresse: TEdit + Left = 64 + Top = 44 + Width = 57 + Height = 21 + Hint = 'Changement de l'#39'adresse de l'#39'aiguillage' + ParentShowHint = False + ShowHint = True + TabOrder = 1 + OnChange = EditAdresseChange end end + object Memo1: TMemo + Left = 552 + Top = 544 + Width = 105 + Height = 93 + Anchors = [akLeft, akBottom] + Lines.Strings = ( + 'cliquez sur un ' + 'segment du r'#233'seau ' + 'pour avoir d'#39'autres ' + 'informations') + ReadOnly = True + TabOrder = 4 + end + object ButtonAnime: TButton + Left = 752 + Top = 548 + Width = 75 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = 'Test anime' + TabOrder = 5 + OnClick = ButtonAnimeClick + end + object PrintDialog1: TPrintDialog + Left = 688 + Top = 560 + end end diff --git a/UnitAnalyseSegCDM.pas b/UnitAnalyseSegCDM.pas index d379c43..147d550 100644 --- a/UnitAnalyseSegCDM.pas +++ b/UnitAnalyseSegCDM.pas @@ -1,14 +1,27 @@ unit UnitAnalyseSegCDM; +// importation des données de CDM +// Affichage de la page du réseau CDM // les Tjs ne sont pas traitées, de même que les bretelles double jonction +// interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, - Dialogs, UnitPrinc, ExtCtrls, StdCtrls, ComCtrls, UnitDebug, UnitConfig , StrUtils; + Dialogs, UnitPrinc, ExtCtrls, StdCtrls, ComCtrls, UnitDebug, UnitConfig , StrUtils, + math, Printers ; const - cadre=30; - const max_db = 20; // 20 détecteurs maxi entre 2 aiguillages + max_db = 20; // 20 détecteurs maxi entre 2 aiguillages + pisur180=pi/180 ; + _180surpi=180/pi; + + // décalages d'affichages + yCrOffset=-5; + yCrOffset2=-14; + yTurnoutOffset=-16; + Zmini=50; + Zmaxi=100; + fond_cdm=$303000; type TFormAnalyseCDM = class(TForm) @@ -23,15 +36,23 @@ type Label1: TLabel; EditPort: TEdit; ButtonAffPort: TButton; - GroupBox2: TGroupBox; - CheckDebugAnalyse: TCheckBox; - CheckDebugBranches: TCheckBox; - GroupBox3: TGroupBox; - ButtonImporter: TButton; - RadioGroup1: TRadioGroup; - RadioCroisSuite: TRadioButton; - RadioCroisBase: TRadioButton; - EditBaseCrois: TEdit; + GroupBoxSegment: TGroupBox; + Label2: TLabel; + EditSegment: TEdit; + LabelAdresse: TLabel; + Memo1: TMemo; + LabelPorts: TLabel; + EditAdresse: TEdit; + Label3: TLabel; + EditDetecteur: TEdit; + ButtonAffDet: TButton; + CheckColorationDiff: TCheckBox; + ButtonAllumeTs: TButton; + Label4: TLabel; + ButtonImprime: TButton; + PrintDialog1: TPrintDialog; + ButtonAnime: TButton; + ImageLoco: TImage; procedure FormResize(Sender: TObject); procedure CheckSegmentsClick(Sender: TObject); procedure CheckConnexionsClick(Sender: TObject); @@ -39,17 +60,28 @@ type procedure TrackBar1Change(Sender: TObject); procedure ButtonAffPortClick(Sender: TObject); procedure FormCreate(Sender: TObject); - procedure ButtonImporterClick(Sender: TObject); - procedure CheckDebugAnalyseClick(Sender: TObject); - procedure CheckDebugBranchesClick(Sender: TObject); - procedure EditBaseCroisChange(Sender: TObject); procedure CheckPortsClick(Sender: TObject); + procedure EditAdresseChange(Sender: TObject); + procedure ImageCDMClick(Sender: TObject); + procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); + procedure ButtonAffDetClick(Sender: TObject); + procedure CheckColorationDiffClick(Sender: TObject); + procedure ButtonAllumeTsClick(Sender: TObject); + procedure ButtonImprimeClick(Sender: TObject); + procedure ImageCDMMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure ButtonAnimeClick(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; + TdetSeg= array[1..10] of record + index,periph : integer; + end; + Trec_cdm = record adresse : integer; distance : integer; // distance au port d'entrée end; @@ -77,7 +109,7 @@ type end; -// structure segment, port et periph de CDM + // structure segment, port et periph de CDM TInter = record x,y,z : integer; @@ -130,19 +162,27 @@ type var Segment : array of Tsegment; nInter,nPeriph,nSeg,nPort,nligne,XminiCDM,XmaxiCDM,YminiCDM,YmaxiCDM,NAig_CDM,Ndet_CDM, - DernAdrAig,BaseCroisement,SeqAdrCroisement,nb_det : integer; + DernAdrAig,SeqAdrCroisement,nb_det,IndexClic,xAig,yAig,cadre,largeur_voie, + largeurTrain,HauteurTrain : integer; lignes : TStrings; - reducX,reducY : double; + reducX,reducY,ArcTanHautLargTrain : double; FormAnalyseCDM: TFormAnalyseCDM; - NomModule,sBranche : string; - debugBranche,debugAnalyse : boolean; + sBranche,NomModuleCDM : string; + debugBranche,debugAnalyse,clic,premaff : boolean; Aig_CDM : array[0..NbreMaxiAiguillages] of TAig_CDM; Det_CDM : array[1..500] of integer; + FWICImage : tBitmap; -procedure Analyse_seg; +procedure Compilation; +procedure lit_fichier_segments_cdm; +procedure affichage(imprime : boolean); +procedure Aff_train(adr: integer;train:string;x1,y1,x2,y2 :integer); implementation +uses Importation; + + {$R *.dfm} // cherche, isole et restreint la chaine s qui contient "chercher" @@ -375,7 +415,7 @@ begin segment[nSeg-1].numero:=i; if debugAnalyse then AfficheDebug('Compile segment '+intToSTR(i),claqua); - + delete(s,1,erreur); s2:=isole_valeur(s,'obj type: '); @@ -492,7 +532,7 @@ begin if segType='pre_curve' then exit; if segType='bumper_stop' then exit; - // les autres aiguillages + // les autres aiguillages (TURNOUT_SYM...) inc(nligne); s:=AnsiLowerCase(lignes[nligne]); s2:=isole_valeur(s,'start angle:'); @@ -736,11 +776,21 @@ begin end; end; +// coordonnées image en CDM +procedure inv_coords(var x,y : integer); +begin + x:=x-(cadre div 2); + x:=(round(x*1000/reducX))+xMiniCDM; + + y:=y-(cadre div 2); + y:=ymaxiCDM-(round(y*1000/reducY)); +end; + +// coordonnées CDM en image procedure Coords(var x,y : integer); begin - x:=round( ((x - xMiniCDM) ) * reducX )+(cadre div 2); - y:=round( (((yMaxiCDM-y) ) - yMiniCDM) * reducY )+(cadre div 2); - //y:=round((y - yMiniCDM)*reducY); + x:=(round( (x - xMiniCDM) * reducX/1000 )) + (cadre div 2); + y:=(round( (yMaxiCDM-y) * reducY/1000 )) + (cadre div 2); end; function degtoRad(angle : double) : double; @@ -749,114 +799,727 @@ begin end; procedure D_Arc(Canvas: TCanvas; CenterX,CenterY: integer; - Radius: Integer; StartDegres, StopDegres: Double); -const pisur180 =pi/180 ; + rayon: Integer; StartDegres, StopDegres: Double); var - X1,X2,X3,X4: Integer; - Y1,Y2,Y3,Y4: Integer; - ech : double; + sinA,cosA : extended; + x1,x2,x3,x4: Integer; + y1,y2,y3,y4: Integer; begin if StopDegres<0 then setArcDirection(Canvas.Handle,AD_COUNTERCLOCKWISE) - else setArcDirection(Canvas.Handle,AD_CLOCKWISE); + else setArcDirection(Canvas.Handle,AD_CLOCKWISE); - StartDegres:=startDegres; - stopDegres:=StartDegres+stopDegres; - X1:=CenterX - Radius; - Y1:=CenterY - Radius; - X2:=CenterX + Radius; - Y2:=CenterY + Radius; - X4:=CenterX + Round(Radius * Cos(StartDegres*pisur180)); - Y4:=Centery - Round(Radius * Sin(StartDegres*pisur180)); - X3:=CenterX + Round(Radius * Cos(StopDegres*pisur180)); - Y3:=Centery - Round(Radius * Sin(StopDegres*pisur180)); - Canvas.Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4); + StartDegres:=startDegres*pisur180; + stopDegres:=StartDegres+stopDegres*pisur180; + x1:=CenterX - rayon; + y1:=CenterY - rayon; + x2:=CenterX + rayon; + y2:=CenterY + rayon; + SinCos(StartDegres,SinA,CosA); + x4:=CenterX + Round(rayon*CosA); + y4:=Centery - Round(rayon*SinA); + SinCos(StopDegres,SinA,CosA); + x3:=CenterX + Round(rayon*CosA); + y3:=Centery - Round(rayon*SinA); + Canvas.Arc(x1,y1,x2,y2,x3,y3,x4,y4); +end; + + +// trouve si le point (x,y) est sur le segment x1,y1 x2,y2 +// s*l = distance du point au segment +function point_Sur_Segment(x,y,x1,y1,x2,y2 : integer): Boolean; +var l,r,s : Double; +begin + Result:=False; + l:=sqrt(((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))); + if l<>0 then + begin + r:=((y1-y)*(y1-y2)-(x1-x)*(x2-x1))/(l*l); + s:=((y1-y)*(x2-x1)-(x1-x)*(y2-y1))/(l*l); + if (r>0) and (r<1) then + if Abs(s*l)<=7 then Result:=True; //s*l=distance + end; +end; + +// trouve si le point x,y est sur l'arc de centre CentreX,Y de rayon .. +function point_sur_arc(x,y,CentreX,centreY,rayon : integer;StartDegres,StopDegres :double;deb : boolean) : boolean; +var a : double; + cosA,SinA : extended; + xArc,yArc : integer; + trouve,inverse : boolean; + canvas : Tcanvas; +begin + canvas:=FormAnalyseCDM.ImageCDM.Canvas; + + //canvas.MoveTo(x,y);Canvas.LineTo(X+1,y+1); + + //Affiche(floatToSTR(startDegres)+' '+FloatToSTR(stopdegres),clyellow); + inverse:=false; + if stopDegres<0 then + begin + StartDegres:= StartDegres+StopDegres; + StopDegres:=-StopDegres; + end; + + StartDegres:=StartDegres*pisur180; //+3*pi/4; + StopDegres:=StartDegres+StopDegres*pisur180; + a:=startDegres; + repeat + SinCos(a,SinA,CosA); + xArc:=CentreX+round(rayon*cosA); + if inverse then yArc:=CentreY+round(rayon*sinA) else + yArc:=CentreY-round(rayon*sinA); + + trouve:=(abs(x-xArc)<10) and (abs(y-yArc)<10); + if deb then + begin + Affiche(intToSTR(x-xArc)+' / '+intToSTR(y-yARc),clyellow); + canvas.Pen.Color:=clred; + canvas.MoveTo(xArc,yArc);Canvas.LineTo(Xarc+3,yArc+3); + end; + a:=a+0.02; + until (trouve) or (a>StopDegres); + result:=trouve; end; procedure affiche_port(indexSeg,IndexPort: integer); var x,y : integer; s : string; begin - x:=segment[indexSeg].port[indexport].X; y:=segment[indexSeg].port[IndexPort].y; + x:=segment[indexSeg].port[indexport].x; + y:=segment[indexSeg].port[IndexPort].y; s:=intToSTR(segment[indexSeg].port[IndexPort].numero); coords(x,y); with FormAnalyseCdm.ImageCDM.canvas do begin - pen.Color:=ClLime; + pen.Width:=1; + pen.color:=Cyan; TextOut(x,y,s); Moveto(0,0); LineTo(x,y); end; end; -procedure angle_cdm(centreX,centreY:integer;debut,fin : double ;rayon : integer); -var ech : double; +procedure affiche_segment(indexSeg: integer); +var x,y,x1,y1,x2,y2 : integer; + s : string; begin - coords(centreX,centreY); - rayon:=round(rayon*reducX); - D_arc(FormAnalyseCDM.ImageCDM.Canvas,centreX,centreY,rayon,debut,fin); + x1:=segment[indexSeg].port[0].x; + y1:=segment[indexSeg].port[0].y; + x2:=segment[indexSeg].port[1].x; + y2:=segment[indexSeg].port[1].y; + x:=(x1+x2) div 2; + y:=(y1+y2) div 2; + + s:=intToSTR(segment[indexSeg].numero); + coords(x,y); + with FormAnalyseCdm.ImageCDM.canvas do + begin + pen.Width:=1; + pen.color:=clyellow; + TextOut(x,y,s); + Moveto(0,0); + LineTo(x,y); + end; end; -procedure affichage; -var r : Trect; - i,j,x1,x2,y1,y2,largeur,hauteur,rayon,centreX,centreY,Numsegment : integer; - SegType,s,s2 : string; - Ech,Zoom,startAngle,StopAngle,AncienStart : double; - portsSeg : array[0..40] of record x,y : integer; end; +// trace un arc selon les coordonnées CDM +procedure angle_cdm(canvas : Tcanvas;centreX,centreY:integer;debut,fin : double ;rayon : integer); begin - if (xMaxiCDM-xminiCDM=0) or (yMaxiCDM-yminiCDM=0) then exit; - with formAnalyseCDM do + coords(centreX,centreY); + rayon:=round(rayon*reducX) div 1000; + D_arc(Canvas,centreX,centreY,rayon,debut,fin); +end; + +// affiche le libellé de l'aiguillage du segment i +procedure coords_aff_aig(canvas : Tcanvas;i : integer); +var segType,s: string; + a,x,y,x3,y3 : integer; +begin + with segment[i] do begin - largeur:=3000;hauteur:=1000; - largeur:=(XmaxiCDM-XminiCDM) div 20; - hauteur:=(YmaxiCDM-YminiCDM) div 20; - //largeur:=ScrollBox1.Width; - //hauteur:=ScrollBox1.Height; - - ImageCDM.Width:=largeur; - ImageCDM.Height:=hauteur; - ImageCDM.Picture.Bitmap.Width:=largeur; - ImageCDM.Picture.Bitmap.height:=hauteur; - - with scrollBox1 do + SegType:=typ; + if (segtype='crossing') or (segType='dbl_slip_switch') then begin - HorzScrollBar.Range:=largeur; - HorzScrollBar.Tracking:=true; - HorzScrollBar.Smooth:=false; // ne pas mettre true sinon figeage dans W11 si onclique sur la trackbar!! - VertScrollBar.Range:=hauteur; - VertScrollBar.Tracking:=true; - VertScrollBar.Smooth:=false; + x:=(port[0].x+port[2].x) div 2; + y:=(port[0].y+port[2].y) div 2; + coords(x,y); + y:=y-10; + end; + if (segtype='turnout') or (segtype='turnout_sym') then + begin + x:=(port[0].x+port[1].x) div 2; + y:=(port[0].y+port[1].y) div 2; + x3:=port[2].x; + y3:=port[2].y; + coords(x,y); + coords(x3,y3); + y:=y-10; + if y30 then + begin + s:='A'+intToSTR(adresse2)+' '; + Canvas.Textout(x,y+20,s); + end; + end; +end; + +procedure ligneCDM(canvas: Tcanvas;x1,y1,x2,y2 : integer); +begin + coords(x1,y1); + coords(x2,y2); + with canvas do + begin + MoveTo(x1,y1); + LineTo(x2,y2); + end; +end; + +// dessine un arc orienté de xa,ya à xb,yb dans le canvas image (pas imprimante) +// coordonnées CDM +procedure arc_xy(centreX,centreY,rayon,xa,ya,xb,yb : integer); +var x1,y1,x2,y2: integer ; + arcXa,arcYa,arcxb,arcYb,angleA,angleB, + cosA,SinA,CosB,SinB,vectoriel,AngleAB: double; + canvas : Tcanvas; + inverse,maxA,maxB,deb : boolean; +begin + deb:=false; + if rayon=0 then exit; + if deb then Affiche('Xa='+intToSTr(xa)+' Ya='+intToSTr(ya)+' Xb='+intToSTr(xb)+' Yb='+intToSTr(yb),clyellow); + coords(centreX,centreY); + coords(xa,ya); + coords(xb,yb); + rayon:=round(rayon*reducX) div 1000; + canvas:=FormAnalyseCDM.ImageCDM.Canvas; + + X1:=centreX - rayon; + Y1:=centreY - rayon; + X2:=centreX + rayon; + Y2:=centreY + rayon; + + // angles du point A et du point B + // attention arcCos renvoie un angle entre 0 et pi (180°) + // arcsin renvoie un angle entre -pi/2 et + pi/2 (-90° +90°) + CosA:=(Xa-centreX)/rayon; + if CosA>1 then CosA:=1; + if CosA<-1 then CosA:=-1; + arcXa:=arccos(CosA)*_180surpi; + + SinA:=(centreY-Ya)/rayon; + if SinA>1 then SinA:=1; + if SinA<-1 then SinA:=-1; + arcYa:=arcsin(SinA)*_180surpi; + + CosB:=(Xb-centreX)/rayon; + if CosB>1 then CosB:=1; + if CosB<-1 then CosB:=-1; + arcXb:=arccos(CosB)*_180surpi; + + SinB:=(centreY-Yb)/rayon; + if SinB>1 then SinB:=1; + if SinB<-1 then SinB:=-1; + arcYb:=arcsin(SinB)*_180surpi; + + // quadrant des angles + { + quadrantA:=0;QuadrantB:=0; + if (cosA>=0) and (sinA>=0) then quadrantA:=1; + if (cosA<=0) and (sinA>=0) then quadrantA:=2; + if (cosA<=0) and (sinA<=0) then quadrantA:=3; + if (cosA>=0) and (sinA<=0) then quadrantA:=4; + + if (cosB>=0) and (sinB>=0) then quadrantB:=1; + if (cosB<=0) and (sinB>=0) then quadrantB:=2; + if (cosB<=0) and (sinB<=0) then quadrantB:=3; + if (cosB>=0) and (sinB<=0) then quadrantB:=4; + + if deb then + begin + Affiche('QuadrantA='+intToSTR(QuadrantA),clyellow); + Affiche('QuadrantB='+intToSTR(QuadrantB),clyellow); + end; + } + + vectoriel:=((rayon*rayon*cosA*cosB)+(rayon*rayon*sinA*sinB)) / (rayon*rayon); + if vectoriel>1 then vectoriel:=1; + if vectoriel<-1 then vectoriel:=-1; + AngleAB:=arccos(vectoriel)*_180surpi; + if deb then Affiche('ProdVect='+FloatToSTR(vectoriel*_180surpi)+' AngleAB='+FloatToStr(AngleAB),clYellow); + + + //arcXb:=0;arcYb:=0; + + // en déduire l'angle A et B + if arcYa<0 then angleA:=180-ArcXa+180 else angleA:=ArcXa; + if arcYb<0 then angleB:=180-ArcXb+180 else angleB:=ArcXb; + if angleA>=360 then angleA:=360-angleA; + + if abs(angleA-angleB)>180 then + begin + // ramener sur 0° + maxA:=AngleA>angleB; + maxB:=AngleB>angleB; + if maxA then + begin + AngleB:=AngleB+360-AngleA; + AngleA:=0; + end; + if maxB then + begin + AngleA:=AngleA+360-AngleB; + AngleB:=0; end; - //largeur:=ScrollBox1.Width; - //hauteur:=ScrollBox1.Height; end; - Zoom:=(270-formAnalyseCDM.TrackBar1.Position)/100; - reducX:=Zoom*(largeur-2*cadre)/(XmaxiCDM-XminiCDM); - reducY:=reducX; - //reducY:=Zoom*(hauteur-2*cadre)/(YmaxiCDM-YminiCDM); - with FormAnalyseCDM.ImageCDM.Canvas do + inverse:=angleB>angleA; + //inverse:=AngleAB>0; + + if deb then + begin + affiche('AngleXa='+intToSTR(round(ArcXa))+' AngleYa='+intToSTR(round(ArcYa)),clred); + affiche('AngleXb='+intToSTR(round(ArcXb))+' AngleYb='+intToSTR(round(ArcYb)),clred); + end; + if angleA<>angleB then + with Canvas do + begin + setArcDirection(Canvas.Handle,AD_COUNTERCLOCKWISE); + if inverse then canvas.Arc(X1,Y1,X2,Y2,xa,ya,xb,yb) + else canvas.Arc(X1,Y1,X2,Y2,xb,yb,xa,ya); + end; +end; + +// dessine un aiguillage courbe - pas encore au point +procedure dessine_aig_courbe(canvas : Tcanvas;i : integer); +var numseg,milieuX,milieuY,centreX,centreY,x0,y0,x1,y1,x2,y2,rayon : integer; + b,pente,rayonD,alpha : double; + coul : Tcolor; +begin + numseg:=segment[i].numero; + //Affiche('----'+intToSTR(numseg)+' aig '+intToSTR(segment[i].adresse),clorange); + coul:=canvas.Pen.Color; + x0:=segment[i].port[0].x; + y0:=segment[i].port[0].y; + x1:=segment[i].port[1].x; + y1:=segment[i].port[1].y; + x2:=segment[i].port[2].x; + y2:=segment[i].port[2].y; + + // milieu des ports 0 et 1 ---------------- + milieuX:=(x0+x1) div 2; + milieuY:=(y0+y1) div 2; + + // pente de la médiatrice des ports 0 et 1 + if y1=y0 then pente:=9999 else + pente:=-(x1-x0)/(y1-y0); + + // équation : y=ax+b a=pente b= + // b=y-ax + b:=milieuY-pente*milieuX; + + // + // méthode calculée + alpha:=arctan(pente); + rayonD:=5500; + centreX:=round(rayonD*cos(alpha))+MilieuX; + centreY:=round(pente*centreX+b); + canvas.pen.Width:=1; + canvas.pen.color:=clred; + ligneCDM(canvas,milieuX,milieuY,centreX,centreY); + //ligneCDM(canvas,x0,y0,x1,y1); + arc_xy(centreX,centreY,round(rayonD)+250,x1,y1,x0,y0); + + centreX:=round(-rayonD*cos(alpha))+MilieuX; + centreY:=round(pente*centreX+b); + canvas.pen.Width:=1; + canvas.pen.color:=clyellow; + ligneCDM(canvas,milieuX,milieuY,centreX,centreY); + //ligneCDM(canvas,x0,y0,x1,y1); + arc_xy(centreX,centreY,round(rayonD)+250,x1,y1,x0,y0); + + + exit; + + // méthode directe + centreX:=x0+3000; + centreY:=round(pente*centreX+b); + rayon:=round(sqrt(sqr(centreX-x0)+sqr(centreY-y0))); + //arc_xy(centreX,centreY,rayon,x1,y1,x0,y0); + + // point de départ en vert + //canvas.pen.color:=clLime; + //ligneCDM(canvas,x1,y1,x1+100,y1+100); + + //milieu des ports 0 et 2 ------------------------- + milieuX:=(x0+x2) div 2; + milieuY:=(y0+y2) div 2; + + // pente de la médiatrice des ports 0 et 2 + pente:=-(x2-x0)/(y2-y0); + + // équation : y=ax+b a=pente b= + // b=y-ax + b:=milieuY-pente*milieuX; + + // centre du cercle sur la médiatrice + alpha:=arctan(pente); + rayonD:=3000; + centreX:=round(rayonD*cos(alpha))+MilieuX; + centreY:=round(pente*centreX+b); +// ligneCDM(canvas,milieuX,milieuY,centreX,centreY); + + + //ligneCDM(canvas,MilieuX,MilieuY,centreX,centreY); + //ligneCDM(canvas,x0,y0,x2,y2); + + canvas.Pen.Color:=coul; + //arc_xy(centreX,centreY,round(rayonD),x2,y2,x0,y0); + + centreX:=x0+5000; + centreY:=round(pente*centreX+b); + rayon:=round(sqrt(sqr(centreX-x0)+sqr(centreY-y0))); + arc_xy(centreX,centreY,rayon,x2,y2,x0,y0); + + // point de départ en vert + canvas.pen.color:=clLime; + ligneCDM(canvas,x2,y2,x2+100,y2+100); +end; + + +// étale un bitmap avec un nombre de pixels +// Exemple ResizeBmp(Image1.Picture.Bitmap ,100,100); +// non utilisé +procedure ResizeBmp(bitmp: TBitmap; wid, hei: Integer); +var + TmpBmp: TBitmap; + ARect: TRect; +begin + TmpBmp := TBitmap.Create; + TmpBmp.Width := wid; + TmpBmp.Height := hei; + ARect := Rect(0,0, wid, hei); + TmpBmp.Canvas.StretchDraw(ARect, Bitmp); + bitmp.Assign(TmpBmp); + TmpBmp.Free; +end; + +// rotation matricielle autour de Centre +function XForm_Rotation(AAngle : Single;Centre : TPoint) : TXForm; +var SinA,CosA: Extended; +begin + SinCos(AAngle,SinA,CosA); + Result.eM11:=CosA; + Result.eM12:=SinA; + Result.eM21:=-SinA; + Result.eM22:=CosA; + Result.eDx:=(Centre.X - (CosA*Centre.X)) + (SinA*Centre.Y); + Result.eDy:=(Centre.Y - (SinA*Centre.X)) - (CosA*Centre.Y); +end; + +// mise à l'échelle autour du centre +function XForm_Echelle(const AZoomX : Single;const AZoomY : Single;const centre: TPoint) : TXForm; +begin + Result.eM11:=AZoomX; + Result.eM12:=0.0; + Result.eM21:=0.0; + Result.eM22:=AZoomY; + Result.eDx:=centre.x - AZoomX*centre.x; + Result.eDy:=centre.y - AZoomY*centre.y; +end; + +function XForm_Translation(const ADistX : Integer;const ADistY : Integer) : TXForm; +begin + Result.eM11:=1.0; + Result.eM12:=0.0; + Result.eM21:=0.0; + Result.eM22:=1.0; + Result.eDx:=ADistX; + Result.eDy:=ADistY; +end; + +// dessine le train indextrain pour son animation de déplacement +// x,y en coordonnées windows +procedure peindre(Indextrain,x,y : integer;Zoom : single); +var + XFormScale,XFormRot,XFormXLat,XForm,XFormOld : TXForm; // matrice + GMode,x0,y0,x1,y1,x2,y2,x3,y3,c1,c2,larg,haut,ax,ay,l2,h2 : Integer; + d,alpha,angle,z : double; + sinA,cosA : extended; + tv : array[0..3] of integer; + ACanvas : TCanvas; + recta : trect; +begin + ACanvas:=FormAnalyseCDM.ImageCDm.Canvas; + + l2:=largeurTrain div 2; + h2:=hauteurTrain div 2; + y:=y-1; // décalage observé + + {with Acanvas do + begin + pen.color:=clyellow; + MoveTo(x,y); + LineTo(x+1,y+1); + end; } + + //y:=y-round((hauteur div 2)*zoom); + {x1:=x; + y1:=y; + x2:=x+(largeur); + y2:=y+(hauteur); + } + ax:=trains[indextrain].x; + ay:=trains[indextrain].y; + trains[indextrain].ax:=ax; + trains[indextrain].ay:=ay; + trains[indextrain].x:=x; + trains[indextrain].y:=y; + + //calcul de la pente du train en fonction de l'ancienne position (ax,ay) et de la nouvelle (x,y) + if x<>ax then alpha:=arctan((y-ay)/(x-ax)) else alpha:=pi/2; + angle:=alpha; +// angle:=angleX; + + GMode:=SetGraphicsMode(ACanvas.Handle, GM_ADVANCED); + if GetWorldTransform(ACanvas.Handle, XFormOld) then // renvoie la matrice courante dans XformOld + begin + // faire les transformations + XFormRot:=XForm_Rotation(Angle,Point(l2,h2)); // rotation autour du centre + //XFormScale:=XForm_Echelle(Zoom,Zoom,Point(0,0)); // Zoom + XFormScale:=XForm_Echelle(Zoom,Zoom,point(l2,h2)); // Zoom au point central + XFormXLat:=XForm_Translation(x-l2,y-h2); // décalage + + // Combiner les 3 transformations + CombineTransform(XForm,XFormRot,XFormScale); // Xform<-- f(XformRot,XformScale) + CombineTransform(XForm,XForm,XFormXLat); // Xform<-- f(Xform,XformScale) + + // calcule les coordonnées des 4 points de coins de l'icone qui a tourné et zoomé + // x0,y0 x3,y3 + // x1,y1 x2,y2 + d:=sqrt( sqr(l2)+ sqr(h2)); + //c1:=round(zoom*l2); // pour faire la rotation à la tete du train + //c2:=round(zoom*h2); + z:=zoom*d; + + alpha:=ArcTanHautLargTrain+angle; + SinCos(Alpha,SinA,CosA); + x0:=-round(z*cosA)+x; //c1; + y0:=-round(z*sinA)+y; //+c2; + x2:=round(z*cosA)+X; //+c1; + y2:=round(Zoom*d*sinA)+y; //+c2; + + alpha:=ArcTanHautLargTrain-angle; + SinCos(Alpha,SinA,CosA); + x1:=-round(z*cosA)+X; //+c1; + y1:=round(z*sinA)+y; //+c2; + x3:=round(z*cosA)+X; //+c1; + y3:=-round(z*sinA)+y; //c2; + + // agrandir la zone un peu + dec(x0);dec(y0); + dec(x1);inc(y1); + inc(x2);inc(y2); + inc(x3);dec(y3); + + // rectangle contenant l'icone + tv[0]:=x0; tv[1]:=x1; tv[2]:=x2; tv[3]:=x3; + x0:=minIntValue(tv); + x1:=maxIntValue(tv); + tv[0]:=y0; tv[1]:=y1; tv[2]:=y2; tv[3]:=y3; + y0:=minIntValue(tv); + y1:=maxIntValue(tv); + larg:=x1-x0; + haut:=y1-y0; + + { + with Acanvas do + begin + Pen.color:=clyellow; + Pen.width:=1; + rectangle(x0,y0,x1,y1); + end;} + + // restituer l'ancien affichage + if not(premaff) then recta:=rect(trains[IndexTrain].x0,trains[IndexTrain].y0,trains[IndexTrain].x1,trains[IndexTrain].y1); + premaff:=false; + Acanvas.CopyRect(recta,trains[IndexTrain].SBitmap.canvas,rect(0,0,trains[IndexTrain].x1-trains[IndexTrain].x0,trains[IndexTrain].y1-trains[IndexTrain].y0)); // copie dans Acanvas <-- SbitMap.canvas + + + // sauvegarder à la nouvelle position avant d'afficher la nouvelle position + recta:=rect(x0,y0,x1,y1); + trains[IndexTrain].sbitmap.canvas.CopyRect(rect(0,0,larg,haut),Acanvas,recta); // copie dans sbitmap.canvas <-- Acanvas + //FormAnalyseCDM.Image1.Canvas.CopyRect(rect(0,0,larg,haut),Acanvas,recta ); + + trains[IndexTrain].x0:=x0; + trains[IndexTrain].y0:=y0; + trains[IndexTrain].x1:=x1; + trains[IndexTrain].y1:=y1; + + // appliquer les transformations dans le canvas et afficher l'icône du train + SetWorldTransform(ACanvas.Handle,XForm); // mettre dans le canvas + ACanvas.Draw(0,0,FWICImage); // afficher le bitmap + SetWorldTransform(ACanvas.Handle,XFormOld); + end; + {with Acanvas do + begin + pen.color:=clyellow; + pen.width:=1; + MoveTo(0,0); + LineTo(x,y); + end;} +end; + + +procedure Aff_train(adr: integer;train:string;x1,y1,x2,y2 :integer); +var zom : double; + i : integer; +begin + zom:=reducX/40; + coords(x1,y1); + i:=index_train_adresse(adr); + if i>0 then peindre(i,x1,y1,zom); +end; + + +// Affiche le réseau CDM +procedure affichage(imprime : boolean); +const LargeurMaxi=3000; +var r : Trect; + i,j,x1,x2,y1,y2,largeur,hauteur,rayon,centreX,centreY,Numsegment,largeurCDM,hauteurCDM, + maxiCDM,offset,ofs,CadreImp : integer; + SegType,s,s2,ctyp : string; + Ech,Zoom,startAngle,StopAngle: double; + portsSeg : array[0..40] of record x,y : integer; end; + coul : boolean; + canvas : tCanvas; + couleur : Tcolor; +begin + if (xMaxiCDM-xminiCDM=0) or (yMaxiCDM-yminiCDM=0) then exit; + + if imprime then + begin + if not(FormAnalyseCDM.printdialog1.Execute) then exit; + cadre:=100; + printer.BeginDoc; + canvas:=printer.canvas; + canvas.font.size:=8; + canvas.pen.Mode:=pmCopy; + canvas.Font.Name:='arial'; + Canvas.Brush.Style:=bsClear; + Canvas.Brush.Color:=clWhite; + + largeur:=printer.PageWidth; // la largeur est par l'imprimante, la hauteur est calculée + + largeurCDM:=(XmaxiCDM-XminiCDM); + hauteurCDM:=(YmaxiCDM-YminiCDM); + + maxiCDM:=max(largeurCDM,hauteurCDM); + + reducX:=1000*(largeur-(2*cadre))/maxiCDM; + reducY:=reducX; + largeur:=(round(largeurCDM*reducX/1000))-2*cadre; + Hauteur:=(round(hauteurCDM*reducY/1000))-2*cadre; + end; + + if not(imprime) then + begin + premaff:=true; + cadre:=30; + canvas:=formAnalyseCDM.ImageCDM.Canvas; + Canvas.Brush.Style := bsClear; + Canvas.Font.Name:='arial'; + with formAnalyseCDM do + begin + largeur:=3000; // la largeur est fixée, la hauteur est calculée + + largeurCDM:=(XmaxiCDM-XminiCDM);// div 20; + hauteurCDM:=(YmaxiCDM-YminiCDM);// div 20; + + maxiCDM:=max(largeurCDM,hauteurCDM); + + Zoom:=(2*(90-formAnalyseCDM.TrackBar1.Position)/100)+0.4; + reducX:=1000*Zoom*(largeur)/maxiCDM; + reducY:=reducX; + + largeur_voie:=round(reducX/8); + + largeur:=(round(largeurCDM*reducX/1000))+2*cadre; + Hauteur:=(round(hauteurCDM*reducY/1000))+2*cadre; + + ImageCDM.Width:=largeur; + ImageCDM.Height:=hauteur; + ImageCDM.Picture.Bitmap.Width:=largeur; + ImageCDM.Picture.Bitmap.height:=hauteur; + + with scrollBox1 do + begin + HorzScrollBar.Range:=largeur; + HorzScrollBar.Tracking:=true; + HorzScrollBar.Smooth:=false; // ne pas mettre true sinon figeage dans W11 si onclique sur la trackbar!! + VertScrollBar.Range:=hauteur; + VertScrollBar.Tracking:=true; + VertScrollBar.Smooth:=false; + end; + end; + end; + + with Canvas do begin //effacer tout Pen.width:=1; Brush.Style:=bsSolid; - Brush.Color:=clblack; + //Brush.Color:=clblack; + Brush.Color:=fond_cdm; pen.color:=clyellow; - r:=rect(0,0,FormAnalyseCDM.ImageCDM.width,FormAnalyseCDM.ImageCDM.height); - FillRect(r); + if not(imprime) then + begin + r:=rect(0,0,FormAnalyseCDM.ImageCDM.width,FormAnalyseCDM.ImageCDM.height); + FillRect(r); + end; x1:=xminiCDM;y1:=yminiCDM; coords(x1,y1); x2:=xmaxiCDM;y2:=ymaxiCDM; coords(x2,y2); + Brush.Style:=bsclear; // permet d'écrire en transparent end; + coul:=false; // balayage ... for i:=0 to nSeg-1 do begin + // Affiche(intToSTR(i),clyellow); SegType:=Segment[i].typ; NumSegment:=Segment[i].numero; - FormAnalyseCDM.ImageCDM.Canvas.Pen.Color:=claqua; - FormAnalyseCDM.ImageCDM.Canvas.Font.Color:=claqua; + coul:=not(coul); + if imprime then canvas.pen.color:=clblack else + begin + if not(coloration_Diff) then begin canvas.pen.Color:=clWhite;canvas.Font.color:=clWhite;end else + begin + if coul then begin canvas.font.color:=clWhite;canvas.pen.Color:=clWhite;end + else begin canvas.font.color:=clyellow;canvas.pen.color:=ClYellow;end; + end; + end; s:='S'+intToSTR(Segment[i].numero); //+' '+SegType; if (SegType='turnout') or (SegType='dbl_slip_switch') then @@ -868,111 +1531,140 @@ begin begin x1:=segment[i].XMin;y1:=segment[i].YMin; coords(x1,y1); x2:=segment[i].XMax;y2:=segment[i].Ymax; coords(x2,y2); - with FormAnalyseCDM.ImageCDM.Canvas do + with Canvas do begin if formAnalyseCDM.CheckSegments.checked then begin Textout(x1,y1,s); + pen.Width:=1; PolyGon([point(x1,y1),Point(x2,y2)]); end; + { if SegType='straight' then begin // x1:=segment[i].xc0; // affiche(intToSTR(x1),clyellow); - end; + end;} end; end; //Affiche(s,ClAqua); // ports en vert -------------------------------------- nport:=Segment[i].nport; - FormAnalyseCDM.ImageCDM.Canvas.Pen.Color:=clLime; - FormAnalyseCDM.ImageCDM.Canvas.Font.Color:=clLime; + + if formAnalyseCDM.CheckPorts.checked then + begin + if imprime then canvas.Font.Color:=ClBlack + else + begin + if coul then Canvas.font.Color:=clWhite else + Canvas.font.color:=ClYellow; + end; + x1:=(Segment[i].port[0].x+Segment[i].port[1].x) div 2; + y1:=(Segment[i].port[0].y+Segment[i].port[1].y) div 2; + coords(x1,y1); + s:='S'+intToSTR(NumSegment); + Canvas.Textout(x1,y1,s); + end; + for j:=0 to nPort-1 do begin - //Affiche_port(i,j); - - //s:='Port '+intToSTR(Segment[i].port[j].numero)+' '+Segment[i].port[j].typ; - s:='S'+intToSTR(NumSegment)+'P'+intToSTR(Segment[i].port[j].numero); - x1:=segment[i].port[j].X; y1:=segment[i].port[j].y; - - with FormAnalyseCDM.ImageCDM.Canvas do + x1:=segment[i].port[j].X; + y1:=segment[i].port[j].y; begin - //Affiche('I='+intToSTR(i)+' '+intToSTR(x1)+' '+intToSTR(y1),clred); coords(x1,y1); - if formAnalyseCDM.CheckConnexions.checked then Ellipse(x1-5,y1-5,x1+5,y1+5); + if formAnalyseCDM.CheckConnexions.checked then + begin + canvas.pen.width:=1; + canvas.Ellipse(x1-5,y1-5,x1+5,y1+5); + end; if j<40 then begin - portsSeg[j].x:=x1; + portsSeg[j].x:=x1; // coordonnées du port j en format image.canvas portsSeg[j].y:=y1; end; - if formAnalyseCDM.CheckPorts.checked then Textout(x1,y1,s); + if formAnalyseCDM.CheckPorts.checked then + begin + //port j + x1:=Segment[i].port[j].x; + y1:=Segment[i].port[j].y; + + if j=0 then + begin + if x10 then - begin - s:='A'+intToSTR(Segment[i].adresse2); - x1:=(portsSeg[1].x+portsSeg[3].x) div 2; - y1:=(portsSeg[1].y+portsSeg[3].y) div 2; - Textout(x1,y1,s); - end; - end; + if formAnalyseCDM.CheckAdresses.checked then coords_aff_aig(canvas,i); end else - if segtype='turnout' then + if (segtype='turnout') or (segtype='turnout_sym') then begin + if imprime then pen.Color:=ClBlack else + begin + if coloration_diff then pen.color:=clLime else pen.color:=clWhite; + end; moveto(portsSeg[0].x,portsSeg[0].y); LineTo(portsSeg[1].x,portsSeg[1].y); - moveTo((portsSeg[0].x+portsSeg[1].x)div 2,(portsSeg[0].y+portsSeg[1].y)div 2); + moveTo((portsSeg[0].x+portsSeg[1].x) div 2,(portsSeg[0].y+portsSeg[1].y) div 2); LineTo(portsSeg[2].x,portsSeg[2].y); - if formAnalyseCDM.CheckAdresses.checked then + if formAnalyseCDM.CheckAdresses.checked then coords_aff_aig(canvas,i); + end + else + if (segtype='turnout_3way') then + begin + if imprime then pen.Color:=ClBlack else begin - s:='A'+intToSTR(Segment[i].adresse); - x1:=(portsSeg[0].x+portsSeg[1].x) div 2; - y1:=(portsSeg[0].y+portsSeg[1].y) div 2; - Textout(x1,y1,s); + if coloration_diff then pen.color:=clLime else pen.color:=clWhite; end; + moveto(portsSeg[0].x,portsSeg[0].y);LineTo(portsSeg[1].x,portsSeg[1].y); + moveTo((portsSeg[0].x+portsSeg[1].x) div 2,(portsSeg[0].y+portsSeg[1].y) div 2); + LineTo(portsSeg[2].x,portsSeg[2].y); + moveTo((portsSeg[0].x+portsSeg[1].x) div 2,(portsSeg[3].y+portsSeg[3].y) div 2); + if formAnalyseCDM.CheckAdresses.checked then coords_aff_aig(canvas,i); end else if (segtype='turnout_curved') or (segtype='turnout_curved_2r') then begin - moveto(portsSeg[0].x,portsSeg[0].y); - LineTo(portsSeg[1].x,portsSeg[1].y); - moveTo((portsSeg[0].x+portsSeg[1].x)div 2,(portsSeg[0].y+portsSeg[1].y)div 2); - LineTo(portsSeg[2].x,portsSeg[2].y); + if imprime then pen.Color:=ClBlack else begin - s:='A'+intToSTR(Segment[i].adresse); - x1:=(portsSeg[0].x+portsSeg[1].x) div 2; - y1:=(portsSeg[0].y+portsSeg[1].y) div 2; - Textout(x1,y1,s); + if coloration_diff then pen.color:=clLime else pen.color:=clWhite; end; - { rayon:=segment[i].Rayon; - StartAngle:=(segment[i].StartAngle/100); - StopAngle:=segment[i].ArcAngle/100; - centreX:=segment[i].xc0; - CentreY:=segment[i].yc0; - angle_cdm(centreX,CentreY,startangle,stopangle,rayon); } + + Moveto(portsSeg[0].x,portsSeg[0].y); + LineTo(portsSeg[1].x,portsSeg[1].y); + + MoveTo((portsSeg[0].x+portsSeg[1].x)div 2,(portsSeg[0].y+portsSeg[1].y)div 2); + LineTo(portsSeg[2].x,portsSeg[2].y); + + //dessine_aig_courbe(canvas,i); + if formAnalyseCDM.CheckAdresses.checked then coords_aff_aig(canvas,i); end else if (segType='arc') or (segType='curve') then @@ -982,37 +1674,48 @@ begin StopAngle:=segment[i].ArcAngle/100; centreX:=segment[i].lXc; CentreY:=segment[i].lyc; - angle_cdm(centreX,CentreY,startangle,stopangle,rayon); + angle_cdm(canvas,centreX,CentreY,startangle,stopangle,rayon); end else begin + if imprime then pen.Color:=ClBlack; moveto(portsSeg[0].x,portsSeg[0].y); for j:=1 to nPort-1 do LineTo(portsSeg[j].x,portsSeg[j].y); - AncienStart:=portsSeg[j].x; end; end; // périphériques en jaune -------------------------- nperiph:=Segment[i].nperiph; - FormAnalyseCDM.ImageCDM.Canvas.Pen.Color:=clYellow; - FormAnalyseCDM.ImageCDM.Canvas.Font.Color:=clYellow; + Canvas.Pen.Color:=clYellow; + Canvas.Font.Color:=clYellow; for j:=0 to nPeriph-1 do begin - s:='Periph '+intToSTR(Segment[i].periph[j].numero)+' '+Segment[i].periph[j].typ; + ctyp:=Segment[i].periph[j].typ; + s:='Periph '+intToSTR(Segment[i].periph[j].numero)+' '+ctyp; s2:=intToSTR(Segment[i].periph[j].adresse); - s:=s+' Adresse='+s2; - x1:=segment[i].periph[j].X; y1:=segment[i].periph[j].y ; - with FormAnalyseCDM.ImageCDM.Canvas do + if Segment[i].periph[j].adresse<>0 then begin - coords(x1,y1); - if formAnalyseCDM.CheckConnexions.checked then Ellipse(x1-5,y1-5,x1+5,y1+5); - if formAnalyseCDM.CheckAdresses.checked then + s:=s+' Adresse='+s2; + x1:=segment[i].periph[j].X; y1:=segment[i].periph[j].y ; + with Canvas do begin - if segment[i].periph[j].typ='detector' then font.Color:=clAqua else font.Color:=clorange; - textout(x1,y1,s2); + coords(x1,y1); + if formAnalyseCDM.CheckAdresses.checked then + begin + ofs:=0; + if ctyp='detector' then begin couleur:=clAqua;ofs:=-15;end; + if ctyp='actuator' then begin couleur:=clorange;ofs:=5;end; + if ctyp='signal' then begin couleur:=clWhite;ofs:=5;end; + font.color:=couleur; + pen.color:=couleur; + + textout(x1+4,y1+ofs,s2); + pen.Width:=1; + Ellipse(x1-5,y1-5,x1+5,y1+5); + end; end; end; //Affiche(s,clOrange); @@ -1025,10 +1728,11 @@ begin //Affiche(s,ClYellow); end; end; - //if i=0 then exit; + if imprime then printer.EndDoc; end; - // FormAnalyseCDM.ImageCDM.Canvas.Refresh; + +// supprime les espaces de la premiere position de la chaine jusqu'à ce qu'on rencontre un caractère <>' ' function Supprime_espaces(s : string) : string; var faire : boolean; begin @@ -1060,12 +1764,29 @@ begin end; end; +// renvoie si le segment est de tye aiguillage function segment_aig(s : string) : boolean; begin segment_aig:=(s='turnout') or (s='dbl_slip_switch') or (s='turnout_sym') or (s='turnout_curved') or (s='turnout_curved_2r') or (s='turnout_3way'); end; +// trouve l'index du port du segment courant connecté au segment dont l'index est Indexconnecte +function index_port_connecte(index,indexConnecte : integer;var Indexport : integer) : boolean; +var i,np1 : integer; + trouve : boolean; +begin + i:=0; + np1:=segment[index].nport; + repeat + trouve:=segment[index].port[i].ConnecteAuSeg=segment[indexConnecte].numero; + if not(trouve) then inc(i); + until trouve or (i>np1-1); + result:=trouve; + if trouve then IndexPort:=i else indexPort:=-1; +end; + + // trouve l'index du segment contenant l'aiguillage adresse function trouve_IdSegment_aig(adresse : integer;var Id: integer) : boolean; var i,p,p2 : integer; @@ -1093,7 +1814,7 @@ begin end; -// trouve les indexs Segment et port le détecteur est detecteur +// trouve les indexs Segment et port contenant le détecteur est detecteur function trouve_IndexSegPortDetecteur(detecteur : integer;var indexSeg,indexPeriph : integer) : boolean; var i,j,p,np : integer; trouve : boolean; @@ -1155,7 +1876,7 @@ begin end; -// trouve les indexs du segment,port +// trouve les index du segment,port function trouve_IndexSegPort(seg,port : integer;var indexSeg,indexPort : integer) : boolean; var i,j,p,np,ns : integer; trouve : boolean; @@ -1244,7 +1965,7 @@ begin end; end; -// trie le tableau en fonction de la distance +// trie le tableau t en fonction de la distance procedure trier(var t : tdetect_cdm;n :integer); var i,j : integer; temp : trec_cdm; @@ -1273,7 +1994,11 @@ var i,j,IdSeg,IdPort,NombrePeriph,port1,port2,portSuivant,segSuivant,portLocal, typeP,serr : string; sdetect : Tdetect_cdm; begin - if seg=0 then exit; // laisser sinon mauvais transfert de variable dans la pile dans l'itération suivante!! + if seg=0 then + begin + explore_port:=0; + exit; // laisser sinon mauvais transfert de variable dans la pile dans l'itération suivante!! + end; trouve_IndexSegPort(seg,port,idSeg,IdPort); if idseg=-1 then begin @@ -1313,7 +2038,19 @@ begin 2 : c:='D'; 3 : c:='S'; end; - explore_port:=segment[idSeg].adresse; + + // TJD 2 états + if segment[idSeg].adresse2=0 then + begin + explore_port:=segment[idSeg].adresse; + exit; + end; + + // tjd 4 états + // si on vient du port 0 ou 1, c'est adresse + // si on vient du port 2 ou 3, c'est adresse2 + if (portlocal=0) or (portlocal=1) then explore_port:=segment[idSeg].adresse; + if (portlocal=2) or (portlocal=3) then explore_port:=segment[idSeg].adresse2; exit; end; @@ -1396,7 +2133,7 @@ begin port1:=segment[idSeg].port[0].numero; port2:=segment[idSeg].port[1].numero; i:=0; - if (port1<>portSuivant) and (segment[idSeg].port[0].connecte) then i:=explore_port(SegSuivant,port1,c); + if (port1<>portSuivant) and (segment[idSeg].port[0].connecte) then i:=explore_port(SegSuivant,port1,c); if (port2<>portSuivant) and (segment[idSeg].port[1].connecte) then i:=explore_port(SegSuivant,port2,c); explore_port:=i; @@ -1444,12 +2181,12 @@ begin if segType='crossing' then begin numSegment:=segment[i].numero; - if formAnalyseCDM.radioCroisSuite.checked then AdrCroisement:=DernAdrAig+SeqAdrCroisement; - if formAnalyseCDM.radioCroisBase.checked then AdrCroisement:=BaseCroisement+SeqAdrCroisement; + if formImportation.radioCroisSuite.checked then AdrCroisement:=DernAdrAig+SeqAdrCroisement; + if formImportation.radioCroisBase.checked then AdrCroisement:=BaseCroisement+SeqAdrCroisement; segment[i].adresse:=AdrCroisement; inc(nAig_CDM); - Aig_CDM[nAig_CDM].adresse:=AdrCroisement; + Aig_CDM[nAig_CDM].adresse:=AdrCroisement; Aig_CDM[nAig_CDM].modele:=crois; s:='Segment '+intToSTR(numSegment)+' type='+segtype+' Adresse='+intToSTR(AdrCroisement); @@ -1625,8 +2362,9 @@ begin end; end; end; - + // trouve le port de destination sur un segment en fonction du port d'origine 'port' +// exemple : (281,81) renvoie 82 function trouve_port_suivant(IndexSeg,port : integer) : integer; var ctype: string; pOrg,pDest,p1,p2 : integer; @@ -1687,10 +2425,10 @@ begin exit; end; end; - + // trouve le segment suivant du segment index, opposé au port // 170 seg=169 171 | 173 Seg=172 174 | -// exemple (169,171) => 172 173 +// exemple trouve_seg_suivant(169,171) => 172 173 dans IndexSegSuiv,IndexportSuiv function trouve_seg_suivant(IndexSeg,Indexport : integer;var IndexSegSuiv,IndexportSuiv : integer) : boolean; var PortSuiv,NumSegment,ips,SegSuiv,np : integer; ctype : string; @@ -1702,7 +2440,7 @@ begin if np<2 then begin // valable uniquement sur un segment à au moins 2 ports - Affiche('Erreur recherche sur un segment '+intToSTR(segment[indexSeg].numero)+' <2 ports',clred); + AfficheDebug('Erreur 68 : recherche sur un segment '+intToSTR(segment[indexSeg].numero)+' <2 ports',clred); trouve_seg_suivant:=false; IndexSegSuiv:=-1; indexportSuiv:=-1; @@ -1733,14 +2471,13 @@ begin end else begin - afficheDebug('Port non connecté',clOrange); + //afficheDebug('Port non connecté',clOrange); result:=false; end; end; - -// renvoie le dernier champ d'une chaine +// renvoie le dernier champ d'une chaine séparés par des virgules // s='aa,bb,ccc,ddd,ee' : renvoie ee function dernier_champ(s : string) : string; var i,l : integer; @@ -1771,9 +2508,9 @@ end; procedure cree_branche_aig(indexSeg,Indexport,adrAig,NbreMaxiAigRencontres : integer); var i,j,k,naig,IndexportSuivant,indexSegSuivant,NombrePeriph, detecteur,indexElBranche,AdrAigRencontre,numSegment, - rien,erreur,det2,nb_det,xp,yp,xd,yd : integer; - trouve,sort : boolean; - s,ss,ss2,ctype: string; + rien,erreur,det2,nb_det,xp,yp,xd,yd,Adr2,AdrDer,idx : integer; + trouve : boolean; + s,ss,ctype,derch: string; sdetect : Tdetect_cdm; begin if debugBranche then AfficheDebug('Création branche depuis aiguillage '+intToSTR(AdrAig),clyellow); @@ -1809,10 +2546,42 @@ begin begin AdrAigRencontre:=segment[indexSegSuivant].adresse; if NivDebug=3 then Affichedebug('aig '+intTostr(adrAigRencontre),clyellow); - sBranche:=sBranche+',A'+intToSTR(AdrAigRencontre); - //if debugBranche then AfficheDebug('Aiguillage '+intToSTR(segment[indexSegSuivant].adresse),clorange); - inc(nAig); // à la première itération on a un aiguillage - raz_detect(sdetect); + if (ctype='dbl_slip_switch') and (segment[indexSegSuivant].adresse2<>0) then + begin + // dernier élément rencontré + adr2:=segment[indexSegSuivant].adresse2; + + derch:=dernier_champ(sBranche); + if derch[1]='A' then begin derch:=copy(derch,2,length(derch)-1);end; + val(derch,AdrDer,erreur); + // if AdrDer=ADrAigRencontre then + + idx:=index_aig(AdrAigRencontre); + // trouver de quel côté on va à la TJD + if (aiguillage[idx].ADroit=AdrDer) or (aiguillage[idx].ADevie=AdrDer) then + sbranche:=sbranche+',A'+intToSTR(AdrAigRencontre)+',A'+intToSTR(adr2) + else + begin + idx:=index_aig(Adr2); + if (aiguillage[idx].ADroit=AdrDer) or (aiguillage[idx].ADevie=AdrDer) then + sbranche:=sbranche+',A'+intToSTR(adr2)+',A'+intToSTR(AdrAigRencontre) + else + begin + Affiche('TJD '+intToSTR(Adr2)+'/'+intToSTR(adrAigRencontre)+'non résolue en branche '+intToSTR(nbreBranches)+'. Une vérification manuelle est nécessaire.',clred); + sbranche:=sbranche+',A??,A??'; + end; + end; + // sbranche:=sbranche+',A'+intToSTR(adrAigRencontre)+',A'+intToSTR(adr2); + inc(nAig); + raz_detect(sdetect); + end + else + begin + sBranche:=sBranche+',A'+intToSTR(AdrAigRencontre); + //if debugBranche then AfficheDebug('Aiguillage '+intToSTR(segment[indexSegSuivant].adresse),clorange); + inc(nAig); // à la première itération on a un aiguillage + raz_detect(sdetect); + end; end; // est-ce un croisement @@ -1920,27 +2689,26 @@ begin end; // vérifier si la branche créée est valide --------------------------------- - // 1 vérifier si le dernier élément est un A ou buttoir - i:=0; - repeat - j:=i; - i:=posEx(',',sbranche,j+1); - until i=0; - ss:=copy(sbranche,j+1,length(sbranche)-j); // dernier élément de la branche - ss2:=copy(ss,2,length(sbranche)-1); - val(ss2,i,erreur); - // ok - if (i<>0) and (ss[1]<>'A') then + // 1: vérifier si le dernier élément est un A ou buttoir + ss:=dernier_champ(sbranche); + if ss<>'' then begin - if debugBranche then + if ss[1]<>'A' then begin - AfficheDebug('La branche '+sbranche,clOrange); - AfficheDebug('est invalide car le dernier élément n''est ni un aiguillage ni un buttoir',clOrange); + val(ss,i,erreur); + if i<>0 then + begin + if debugBranche then + begin + AfficheDebug('La branche '+sbranche,clOrange); + AfficheDebug('est invalide car le dernier élément n''est ni un aiguillage ni un buttoir',clOrange); + end; + exit; // branche invalide, elle n'est pas prise en compte + end; end; - exit; // branche invalide, elle n'est pas prise en compte end; - // vérifier si un des détecteurs de la branche existe déja dans les branches précédentes + // 2: vérifier si un des détecteurs de la branche existe déja dans les branches précédentes trouve:=false; if NbreBranches>0 then begin @@ -1993,17 +2761,20 @@ end; procedure cree_branche_det(detecteur : integer); var i,NumSegment,rien,indexSeg,IndexPeriph,indexPort,IndexSegSuivant,portSuivant,IndexportSuivant,adresse : integer; ctype,s : string; - trouve : boolean; + trouve,fg : boolean; + label essai_port; begin + indexPort:=0; // essayer sur port 0 du détecteur + fg:=false; + essai_port: if debugBranche then begin AfficheDebug('------------------',clyellow); - AfficheDebug('Créée branche détecteur '+intToSTR(detecteur),clOrange); + AfficheDebug('Créée branche détecteur '+intToSTR(detecteur)+' sur port '+intToSTR(indexPort),clOrange); end; trouve:=trouve_IndexSegPortDetecteur(detecteur,indexSeg,indexPeriph); numSegment:=Segment[indexSeg].numero; if nivdebug=3 then AfficheDebug('Le segment porteur du détecteur est le '+intToSTR(numSegment)+' Periph '+intToSTR(Segment[indexSeg].periph[indexperiph].numero),clyellow); - indexport:=0 ; // essayer depuis le port 0 //***************************************ZZZZZZZZZZZZZZZ // parcourir les segments jusqu'au prochain aiguillage i:=0; @@ -2046,7 +2817,17 @@ begin begin s:='68 : Pas trouvé d''aiguillage à proximité du détecteur '+intToSTR(detecteur); AfficheDebug(s,clred); - Affiche(s,clred); + Affiche(s,clred); // et donc essayer sur le port 1 !! + if fg then + begin + S:='Pas trouvé d''aguillage de chaque côté du détecteur '+intToSTR(detecteur); + AfficheDebug(s,clred); + Affiche(s,clred); + exit; + end; + indexport:=1; + fg:=true; + goto essai_port; end; //partir de IndexSegSuivant, IndexPort @@ -2056,8 +2837,6 @@ begin IndexPort:=trouve_IndexPort_Segment(IndexSegSuivant,portSuivant); Cree_branche_aig(IndexSegSuivant,IndexPort,adresse,1); // 1 aiguillage rencontré maxi - - end; // procédure principale de création des branches @@ -2088,7 +2867,7 @@ begin end; trouve:=trouve_IdSegment_aig(adresse,indexSeg); - if not(trouve) then affiche('Erreur 417 : Aig '+intToSTR(adresse)+' non trouvé ',clred); + if not(trouve) then afficheDebug('Erreur 417 : Aig '+intToSTR(adresse)+' non trouvé ',clred); //Affiche(IntToSTR(segment[indexSeg].numero),clYellow); if trouve then @@ -2117,7 +2896,7 @@ begin if debugBranche then AfficheDebug('Début de branche n°'+intToSTR(NbreBranches+1)+' : aiguillage '+intToSTR(adresse)+' dévié='+intToSTR(detecteur),clyellow); trouve:=trouve_IdSegment_aig(adresse,indexSeg); - if not(trouve) then affiche('Erreur 418 : Aig '+intToSTR(adresse)+' non trouvé ',clred); + if not(trouve) then afficheDebug('Erreur 418 : Aig '+intToSTR(adresse)+' non trouvé ',clred); //Affiche(IntToSTR(segment[indexSeg].numero),clYellow); if trouve then @@ -2177,26 +2956,398 @@ begin end; end; clicListe:=false; +end; +procedure sauve_ficher_cdm; +var + i,j,np,npe,ni : integer; + s : string; + f : text; +begin + i:=pos(' ',NomModuleCDM); + if i<>0 then NomModuleCDM:=copy(NomModuleCDM,i+1,length(NomModuleCDM)-i); + try + assign(f,NomModuleCDM); + rewrite(f); + except + Affiche('Impossible de créer le fichier des segments CDM : '+NomModuleCDM,clred); + exit; + end; + + Writeln(f,NomModuleCDM); + + writeln(f,''); + + for i:=0 to nseg-1 do + begin + np:=segment[i].nport; + npe:=segment[i].nperiph; + ni:=segment[i].ninter; + s:='Segment='+intToSTR(segment[i].numero)+' '+segment[i].typ; + writeln(f,s); + s:='Nport='+IntToSTR(segment[i].nport)+' Nperiph='+IntToSTR(segment[i].nperiph)+' Ninter='+IntToSTR(segment[i].ninter); + writeln(f,s); + s:='Xmin='+intToSTR(segment[i].XMin)+' Ymin='+intToSTR(segment[i].YMin)+' Xmax='+intToSTR(segment[i].XMax)+' Ymax='+intToSTR(segment[i].Ymax); + writeln(f,s); + s:='StartAngle='+intToSTR(segment[i].StartAngle)+' ArcAngle='+intToSTR(segment[i].ArcAngle)+' Rayon='+intToSTR(segment[i].Rayon)+' Radius0='+intToSTR(segment[i].radius0); + writeln(f,s); + s:='Angle0='+intToSTR(segment[i].angle0)+' Angle='+intToSTR(segment[i].angle)+' Lengthdev='+intToSTR(segment[i].lengthdev)+' Deltadev0='+intToSTR(segment[i].deltadev0); + writeln(f,s); + s:='lXc='+intToSTR(segment[i].lXc)+' lYc='+intToSTR(segment[i].lYc)+' Longueur='+intToSTR(segment[i].longueur)+' longueurDev='+intToSTR(segment[i].longueurDev); + writeln(f,s); + s:='DeltaDev='+intToSTR(segment[i].DeltaDev)+' CurveOffset='+intToSTR(segment[i].CurveOffset)+' xc0='+intToSTR(segment[i].xc0)+' yc0='+intToSTR(segment[i].yc0); + writeln(f,s); + s:='DeltaDev2='+intToSTR(segment[i].DeltaDev2)+' xc='+intToSTR(segment[i].xc)+' yc='+intToSTR(segment[i].yc); + writeln(f,s); + s:='Adresse='+intToSTR(segment[i].adresse)+' Adresse2='+intToSTR(segment[i].adresse2)+' Duree='+intToSTR(segment[i].duree); + writeln(f,s); + + // ports + for j:=0 to np-1 do + begin + s:=' Port='+intToSTR(segment[i].port[j].numero)+' '+segment[i].port[j].typ+ + ' x='+intToStr(segment[i].port[j].x)+ + ' y='+intToStr(segment[i].port[j].y)+ + ' z='+intToStr(segment[i].port[j].z); + writeln(f,s); + s:=' Angle='+intToSTr(segment[i].port[j].angle)+' Local='+intToSTr(segment[i].port[j].local)+' Connecte='; + if segment[i].port[j].connecte then s:=s+'1' else s:=s+'0'; + writeln(f,s); + s:=' ConnecteAuPort='+intToSTR(segment[i].port[j].ConnecteAuPort)+' ConnecteAuSegment='+intToSTR(segment[i].port[j].ConnecteAuSeg); + writeln(f,s); + end; + + // périphériques + for j:=0 to npe-1 do + begin + s:=' Periph='+intToSTR(segment[i].periph[j].numero)+' Type='+segment[i].periph[j].typ+ + ' Pere='+intToSTR(segment[i].periph[j].pere)+ + ' x='+intToSTR(segment[i].periph[j].x)+ + ' y='+intToSTR(segment[i].periph[j].y)+ + ' z='+intToSTR(segment[i].periph[j].z); + writeln(f,s); + s:=' Angle='+intToSTR(segment[i].periph[j].angle)+' Bright='+intToSTR(segment[i].periph[j].bright)+' Bdown='+intToSTR(segment[i].periph[j].bdown); + writeln(f,s); + s:=' Location='+intToSTR(segment[i].periph[j].location)+' Adresse='+intToSTR(segment[i].periph[j].adresse)+' Status='+intToSTR(segment[i].periph[j].Status); + writeln(f,s); + + end; + + // inter + for j:=0 to ni-1 do + begin + s:=' x='+intToSTR(segment[i].inter[j].x)+' y='+intToSTR(segment[i].inter[j].y)+' z='+intToSTR(segment[i].inter[j].z); + writeln(f,s); + s:=' MirrorZ='+intToSTR(segment[i].inter[j].MirrorZ)+' MirrorParent='+intToSTR(segment[i].inter[j].MirrorParent); + writeln(f,s); + end; + writeln(f,''); + end; + closefile(f); + Affiche('Le fichier de segments CDM : '+NomModuleCDM+' a été créé',clYellow); + formprinc.Affiche_fenetre_CDM.enabled:=true; + confasauver:=true; +end; + +procedure lit_fichier_segments_cdm; +var + i,j,k,np,npe,ni : integer; + s : string; + f : text; + fini : boolean; + + function isole(ss : string) : integer; + var k,erreur : integer; + begin + k:=pos(ss,s); + result:=-1; + if k<>0 then + begin + delete(s,k,length(ss)); + val(s,k,erreur); + if s[1]='-' then k:=-k; + delete(s,1,erreur); + result:=k; + end; + end; + + function lire_fichier : string; + begin + s:=''; + while not(eof(f)) and not(s<>'') do + begin + readln(f,s); + //Affiche(s,clyellow); + s:=AnsiLowerCase(s); + end; + result:=s; + fini:=eof(f); + end; + +begin + xminiCDM:=900000; + yminiCDM:=900000; + xmaxiCDM:=-900000; + ymaxiCDM:=-900000; + + try + assign(f,NomModuleCDM); + reset(f); + except + Affiche('Impossible d''ouvrir le fichier de segments CDM : '+NomModuleCDM,clred); + exit; + end; + + //TformAnalyseCDM.Create(nil); + + i:=0; + s:=lire_fichier; + NomModuleCDM:=s; + + while not(eof(f)) do + begin + s:=lire_fichier; + if fini then break; + + setlength(segment,i+1); + + segment[i].numero:=isole('segment='); + segment[i].typ:=s; + + s:=lire_fichier; + if fini then break; + np:=isole('nport='); + npe:=isole('nperiph='); + ni:=isole('ninter='); + + segment[i].nport:=np; + segment[i].nperiph:=npe; + segment[i].ninter:=ninter; + + s:=lire_fichier; + if fini then break; + segment[i].XMin:=isole('xmin='); + segment[i].YMin:=isole('ymin='); + segment[i].XMax:=isole('xmax='); + segment[i].YMax:=isole('ymax='); + + if segment[i].XMinxmaxiCDM then xmaxiCDM:=segment[i].xMax; + if segment[i].YMax>ymaxiCDM then ymaxiCDM:=segment[i].yMax; + + s:=lire_fichier; + if fini then break; + segment[i].startangle:=isole('startangle='); + segment[i].arcangle:=isole('arcangle='); + segment[i].rayon:=isole('rayon='); + segment[i].radius0:=isole('radius0='); + + s:=lire_fichier; + if fini then break; + segment[i].Angle0:=isole('angle0='); + segment[i].angle:=isole('angle='); + segment[i].LengthDev:=isole('lengthdev='); + segment[i].deltaDev0:=isole('deltadev0='); + + s:=lire_fichier; + if fini then break; + segment[i].lxc:=isole('lxc='); + segment[i].lyc:=isole('lyc='); + segment[i].longueur:=isole('longueur='); + segment[i].longueurdev:=isole('longueurdev='); + + s:=lire_fichier; + if fini then break; + segment[i].deltadev:=isole('deltadev='); + segment[i].CurveOffset:=isole('CurveOffset='); + segment[i].xc0:=isole('xc0='); + segment[i].yc0:=isole('xc0='); + + s:=lire_fichier; + if fini then break; + segment[i].deltadev2:=isole('deltadev2='); + segment[i].xc:=isole('xc='); + segment[i].yc:=isole('xc='); + + s:=lire_fichier; + if fini then break; + segment[i].Adresse:=isole('adresse='); + segment[i].Adresse2:=isole('adresse2='); + segment[i].duree:=isole('duree='); + + // port + if np<>0 then + begin + setlength(segment[i].port,np); + for j:=0 to np-1 do + begin + s:=lire_fichier; + if fini then break; + segment[i].Port[j].numero:=isole('port='); + k:=pos(' ',s); + segment[i].port[j].typ:=copy(s,1,k-1); + delete(s,1,k); + segment[i].port[j].x:=isole('x='); + segment[i].port[j].y:=isole('y='); + segment[i].port[j].z:=isole('z='); + + s:=lire_fichier; + if fini then break; + segment[i].Port[j].angle:=isole('angle='); + segment[i].port[j].local:=isole('local='); + segment[i].port[j].connecte:=isole('connecte=')=1; + + s:=lire_fichier; + if fini then break; + segment[i].port[j].ConnecteAuPort:=isole('connecteauport='); + segment[i].port[j].ConnecteAuSeg:=isole('connecteausegment='); + end; + end; + + // periphériques + if npe<>0 then + begin + setlength(segment[i].periph,npe); + for j:=0 to npe-1 do + begin + s:=lire_fichier; + if fini then break; + segment[i].periph[j].numero:=isole('periph='); + k:=isole('type'); + k:=pos(' ',s); + segment[i].periph[j].typ:=copy(s,1,k-1); + delete(s,1,k); + segment[i].periph[j].pere:=isole('pere='); + segment[i].periph[j].x:=isole('x='); + segment[i].periph[j].y:=isole('y='); + segment[i].periph[j].z:=isole('z='); + s:=lire_fichier; + if fini then break; + segment[i].periph[j].angle:=isole('angle='); + segment[i].periph[j].bright:=isole('bright='); + segment[i].periph[j].bdown:=isole('bdown='); + s:=lire_fichier; + segment[i].periph[j].location:=isole('location='); + segment[i].periph[j].adresse:=isole('adresse='); + segment[i].periph[j].status:=isole('status='); + end; + end; + + if ni<>0 then + begin + setlength(segment[i].inter,ni); + for j:=0 to ni-1 do + begin + s:=lire_fichier; + if fini then break; + segment[i].inter[j].x:=isole('x='); + segment[i].inter[j].y:=isole('y='); + segment[i].inter[j].z:=isole('z='); + s:=lire_fichier; + if fini then break; + segment[i].inter[j].mirrorz:=isole('mirrorz='); + segment[i].inter[j].mirrorparent:=isole('mirrorparent='); + end; + end; + inc(i); + end; + + closefile(f); + nseg:=i; + formprinc.ButtonAffAnalyseCDM.Visible:=true; + formprinc.Affiche_fenetre_CDM.enabled:=true; end; +// importe la base de données CDM dans la base de données Signaux complexes +// et crée les branches +procedure Importation; +var i : integer; +begin + if MaxAiguillage<>0 then + begin + if MessageDlg('Une configuration de réseau existe dans signaux complexes.'+#10+#13+ + 'Si vous importez le réseau CDM, la configuration des aiguillages et des branches '+#10+#13+ + 'de Signaux_complexes sera écrasée.'+#10+#13+ + 'Voulez vous continuer l''importation? (aiguillages & branches)',mtConfirmation,[mbyes,mbNo],0)=mrNo then + begin + Affiche('Importation annulée',clOrange); + exit; + end; + end; + + MaxAiguillage:=0; + + Affiche('Importation des aiguillages et des branches',clWhite); + + // recopier les aiguillages + for i:=1 to NAig_CDM do + begin + Aiguillage[i].adresse:=Aig_CDM[i].adresse; + Aiguillage[i].adrtriple:=Aig_CDM[i].adrtriple; + Aiguillage[i].modele:=Aig_Cdm[i].modele; + Aiguillage[i].temps:=Aig_cdm[i].temps; + Aiguillage[i].ADroit:=Aig_Cdm[i].ADroit; + Aiguillage[i].ADroitB:=Aig_Cdm[i].ADroitB; + Aiguillage[i].ADevie:=Aig_Cdm[i].ADevie; + Aiguillage[i].ADevieB:=Aig_Cdm[i].ADevieB; + Aiguillage[i].APointe:=Aig_Cdm[i].Apointe; + Aiguillage[i].APointeB:=Aig_Cdm[i].ApointeB; + Aiguillage[i].DDroit:=Aig_Cdm[i].DDroit; + Aiguillage[i].DDroitB:=Aig_Cdm[i].DDroitB; + Aiguillage[i].DDevie:=Aig_CDM[i].DDevie; + Aiguillage[i].DDevieB:=Aig_CDM[i].DDevieB; + Aiguillage[i].EtatTJD:=Aig_CDM[i].EtatTJD; + + Aiguillage[i].posInit:=9; + aiguillage[i].InversionCDM:=0; + aiguillage[i].vitesse:=0; + end; + MaxAiguillage:=NAig_CDM; + trier_aig; + + // créer les branches + creee_branches; + + Affiche('Validation des branches',ClLime); + valide_branches; + for i:=1 to NbreBranches do + compile_branche(Branche[i],i); + + Affiche('Importation terminée',clWhite); + Affiche('Vérification de la cohérence :',clWhite); + if verif_coherence then Affiche('Configuration cohérente',clLime); +end; + +// compile le fichier Texte de CDM et l'importe procedure Compilation; var s : string; - i,nombre,position : integer; - + nombre,position : integer; + resultat : integer; begin + s:=lowercase(Formprinc.fenRich.Lines[0]); + if pos('module',s)=0 then + begin + Affiche('Pas de module détecté',clred); + exit; + end; + + formImportation.showmodal; + if not(faireImport) then exit; + ndet_cdm:=0; - debugAnalyse:=true; - debugBranche:=true; + //debugAnalyse:=true; + //debugBranche:=true; Lignes:=Formprinc.FenRich.Lines; nligne:=0; nSeg:=0; DernAdrAig:=0; xminiCDM:=0;yMiniCDM:=0;xmaxiCDM:=0;yMaxiCDM:=0; nombre:=Formprinc.FenRich.Lines.Count; - NomModule:=Lignes[0]; - formAnalyseCDM.Caption:='Squelette du réseau '+NomModule; + NomModuleCDM:=AnsiLowerCase(Lignes[0]+'.cdm'); + formAnalyseCDM.Caption:='Squelette du réseau '+NomModuleCDM; + formAnalyseCDM.Show; Affiche('Compilation en cours',clWhite); if DebugBranche then AfficheDebug('Compilation des segments, ports, inter et périphériques de CDM rail',ClWhite); @@ -2226,7 +3377,7 @@ begin until (nligne>nombre); // or (nligne=1311) ; //Affiche('fin de la compilation',cllime); - Affichage; + Affichage(false); Affiche('nombre de détecteurs: '+intToSTR(NDet_cdm),clyellow); formAnalyseCDM.Show; @@ -2236,86 +3387,36 @@ begin remplit_Aig_cdm; Affiche('nombre de d''aiguillages: '+intToSTR(Naig_cdm),clyellow); - if MaxAiguillage<>0 then - begin - if MessageDlg('Une configuration de réseau existe dans signaux complexes.'+#10+#13+ - 'Si vous importez le réseau CDM, la configuration des aiguillages et des branches '+#10+#13+ - 'de Signaux_complexes sera écrasée.'+#10+#13+ - 'Voulez vous continuer l''importation? (aiguillages & branches)',mtConfirmation,[mbyes,mbNo],0)=mrNo then - begin - Affiche('Importation annulée',clOrange); - exit; - end; - end; - - MaxAiguillage:=0; - - Affiche('Importation des aiguillages',clWhite); - // recopier les aiguillages - for i:=1 to NAig_CDM do - begin - Aiguillage[i].adresse:=Aig_CDM[i].adresse; - Aiguillage[i].adrtriple:=Aig_CDM[i].adrtriple; - Aiguillage[i].modele:=Aig_Cdm[i].modele; - Aiguillage[i].temps:=Aig_cdm[i].temps; - Aiguillage[i].ADroit:=Aig_Cdm[i].ADroit; - Aiguillage[i].ADroitB:=Aig_Cdm[i].ADroitB; - Aiguillage[i].ADevie:=Aig_Cdm[i].ADevie; - Aiguillage[i].ADevieB:=Aig_Cdm[i].ADevieB; - Aiguillage[i].APointe:=Aig_Cdm[i].Apointe; - Aiguillage[i].APointeB:=Aig_Cdm[i].ApointeB; - Aiguillage[i].DDroit:=Aig_Cdm[i].DDroit; - Aiguillage[i].DDroitB:=Aig_Cdm[i].DDroitB; - Aiguillage[i].DDevie:=Aig_CDM[i].DDevie; - Aiguillage[i].DDevieB:=Aig_CDM[i].DDevieB; - Aiguillage[i].EtatTJD:=Aig_CDM[i].EtatTJD; - - Aiguillage[i].posInit:=9; - aiguillage[i].InversionCDM:=0; - aiguillage[i].vitesse:=0; - end; - MaxAiguillage:=NAig_CDM; - trier_aig; - - - // créer les branches pour version 6.1 - creee_branches; - - Affiche('Validation des branches',ClLime); - valide_branches; - for i:=1 to NbreBranches do - compile_branche(Branche[i],i); - - Affiche('Importation terminée',clWhite); - Affiche('Vérification de la cohérence :',clWhite); - if verif_coherence then Affiche('Configuration cohérente',clLime); + // sauvegarde + sauve_ficher_cdm; + Importation; end; procedure TFormAnalyseCDM.FormResize(Sender: TObject); begin - affichage; + affichage(false); end; procedure TFormAnalyseCDM.CheckSegmentsClick(Sender: TObject); begin - affichage; + affichage(false); end; procedure TFormAnalyseCDM.CheckConnexionsClick(Sender: TObject); begin - Affichage; + Affichage(false); end; procedure TFormAnalyseCDM.CheckAdressesClick(Sender: TObject); begin - Affichage; + Affichage(false); end; procedure TFormAnalyseCDM.TrackBar1Change(Sender: TObject); begin - Affichage; + Affichage(false); end; procedure TFormAnalyseCDM.ButtonAffPortClick(Sender: TObject); @@ -2323,95 +3424,773 @@ var i,j,numport,erreur : integer; begin val(editPort.text,numport,erreur); trouve_IndexPort(numport,i,j); - if i=-1 then exit; - Affiche_port(i,j); - + if i<>-1 then + begin + Affiche_port(i,j); + exit; + end; + if Index_Segment(numport,i) then + begin + Affiche_segment(i); + end; end; procedure TFormAnalyseCDM.FormCreate(Sender: TObject); - begin - checkPorts.Checked:=true; - radioCroisBase.Checked:=true; - radioCroisSuite.checked:=false; - BaseCroisement:=100; - EditBaseCrois.Text:=IntToSTR(BaseCroisement); + IndexClic:=0; + checkPorts.Checked:=false; + CheckAdresses.checked:=true; + LabelPorts.Width:=120; + LabelPorts.Height:=23; - + ImageCDM.Top:=0; + ImageCDM.Left:=0; + formAnalyseCDM.Caption:=NomModuleCDM; -end; + largeur_voie:=4; -procedure Analyse_Seg; -begin - formAnalyseCDM.Show; - //compilation; -end; + ImageLoco.Width:=49; + ImageLoco.Height:=15; + ImageLoco.Transparent:=true; + FWICImage:=tbitmap.Create; + FWICImage.Assign(ImageLoco.Picture.graphic); + FWICImage.TransparentColor:=clwhite; -procedure TFormAnalyseCDM.ButtonImporterClick(Sender: TObject); -var startAngle,stopAngle : double; - centreX,CentreY,rayon,x1,y1,x2,y2 : integer; - r : Trect; -begin - //FormAnalyseCDM.WindowState:=wsMinimized; - Compilation; - exit; - with FormAnalyseCDM.ImageCDM.Canvas do + premaff:=true; + buttonAnime.Visible:=not(diffusion); + + with FwicImage do begin - //effacer tout - Pen.width:=1; - Brush.Style:=bsSolid; - Brush.Color:=clblack; - pen.color:=clyellow; - r:=rect(0,0,FormAnalyseCDM.ImageCDM.width,FormAnalyseCDM.ImageCDM.height); - FillRect(r); - x1:=xminiCDM;y1:=yminiCDM; - coords(x1,y1); - x2:=xmaxiCDM;y2:=ymaxiCDM; - coords(x2,y2); - end; - - - D_arc(FormAnalyseCDM.ImageCDM.Canvas,300,200,100,90,30); - exit; - //46 - ImageCDM.canvas.pen.color:=clLime; - StartAngle:=90; //+AncienStart; // relatif par rapport au dernier!!! - StopAngle:=-30; - centreX:=21850;centreY:=18310; - rayon:=6500; - angle_cdm(centreX,CentreY,startangle,stopangle,rayon); - //55 - ImageCDM.canvas.pen.color:=clred; - StartAngle:=60; //+AncienStart; // relatif par rapport au dernier!!! - StopAngle:=-30; - centreX:=21850;centreY:=18310; - rayon:=6500; - angle_cdm(centreX,CentreY,startangle,stopangle,rayon); - + largeurTrain:=Width; // largeur de l'icone du train + hauteurTrain:=Height; + end; + ArcTanHautLargTrain:=ArcTan(HauteurTrain/LargeurTrain); + end; -procedure TFormAnalyseCDM.CheckDebugAnalyseClick(Sender: TObject); -begin - debugAnalyse:=checkDebugAnalyse.checked; -end; -procedure TFormAnalyseCDM.CheckDebugBranchesClick(Sender: TObject); -begin - debugBranche:=checkDebugBranches.checked; -end; - -procedure TFormAnalyseCDM.EditBaseCroisChange(Sender: TObject); -var i,erreur : integer; -begin - val(editBaseCrois.text,i,erreur); - if erreur=0 then BaseCroisement:=i; -end; procedure TFormAnalyseCDM.CheckPortsClick(Sender: TObject); begin - Affichage; + Affichage(false); end; +procedure clic_image; +var pt : Tpoint; + xSouris,ySouris,x1,y1,x2,y2,i,centreX,centrey,rayon,numero: integer; + StartAngle,StopAngle : double; + trouve : boolean; + debug : boolean; + ctype,s : string; + canvas : Tcanvas; +begin + clic:=true; + pt:= formAnalyseCDM.ImageCDM.ScreenToClient(Mouse.CursorPos); // coordonnées par rapport à l'image + xSouris:=pt.x; + ySouris:=pt.y; + + canvas:=FormAnalyseCDM.ImageCDM.Canvas; + + //index_segment(6713,i); + i:=0; + repeat + numero:=segment[i].numero; + debug:=false; + // debug:=(numero=6989) or (numero=6980); + if debug then Affiche('Segment'+inttoSTR(segment[i].numero),clYellow); + //Affiche(intToSTR(x1)+' '+intToSTR(y1)+' / '+intToSTR(x2)+' '+intToSTR(y2),clYellow); + + ctype:=Segment[i].typ; + + if segment_aig(ctype) and (ctype<>'dbl_slip_switch') then + begin + x1:=segment[i].port[0].x; + y1:=segment[i].port[0].y; + x2:=segment[i].port[1].x; + y2:=segment[i].port[1].y; + coords(x1,y1); + coords(x2,y2); + trouve:=point_Sur_Segment(Xsouris,Ysouris,x1,y1,x2,y2); + if trouve then + begin + Canvas.Pen.Width:=largeur_voie; + Canvas.pen.Color:=clred; + canvas.MoveTo(x1,y1); + canvas.LineTo(x2,y2); + + x1:=(x1+x2) div 2; + y1:=(y1+y2) div 2; + x2:=segment[i].port[2].x; + y2:=segment[i].port[2].y; + coords(x2,y2); + canvas.MoveTo(x1,y1); + canvas.LineTo(x2,y2); + xAig:=x1;yAig:=y1-5; + + s:=intToSTR(Segment[i].adresse); + if Segment[i].adresse2<>0 then s:=s+'/'+intToSTR(Segment[i].adresse2); + formAnalyseCDM.EditAdresse.text:=s; + + s:='Ports 0/1/2 = '+IntToSTR(Segment[i].port[0].numero)+'/'+IntToSTR(Segment[i].port[1].numero)+'/'+ + IntToSTR(Segment[i].port[2].numero); + formAnalyseCDM.LabelPorts.Caption:=s; + + end; + end; + + if (ctype='crossing') or (ctype='dbl_slip_switch') then + begin + x1:=segment[i].port[0].x; + y1:=segment[i].port[0].y; + x2:=segment[i].port[2].x; + y2:=segment[i].port[2].y; + coords(x1,y1); + coords(x2,y2); + trouve:=point_Sur_Segment(Xsouris,Ysouris,x1,y1,x2,y2); + if trouve then + begin + + s:=intToSTR(Segment[i].adresse); + if Segment[i].adresse2<>0 then s:=s+'/'+intToSTR(Segment[i].adresse2); + formAnalyseCDM.EditAdresse.Text:=s; + s:='Ports 0/1/2/3 = '+IntToSTR(Segment[i].port[0].numero)+'/'+IntToSTR(Segment[i].port[1].numero)+'/'+ + IntToSTR(Segment[i].port[2].numero)+'/'+IntToSTR(Segment[i].port[3].numero); + formAnalyseCDM.LabelPorts.Caption:=s; + + Canvas.Pen.Width:=largeur_voie; + Canvas.pen.Color:=clred; + + x1:=segment[i].port[1].x; + y1:=segment[i].port[1].y; + x2:=segment[i].port[3].x; + y2:=segment[i].port[3].y; + coords(x1,y1); + coords(x2,y2); + canvas.MoveTo(x1,y1); + canvas.LineTo(x2,y2); + + x1:=segment[i].port[0].x; + y1:=segment[i].port[0].y; + x2:=segment[i].port[2].x; + y2:=segment[i].port[2].y; + coords(x1,y1); + coords(x2,y2); + canvas.MoveTo(x1,y1); + canvas.LineTo(x2,y2); + + xAig:=x1;yAig:=y1-5; + end; + end; + + // le précurve est un type droit!! + if (ctype='straight') or (ctype='pre_curve') or (ctype='bumper_stop') then + begin + x1:=segment[i].port[0].x; + y1:=segment[i].port[0].y; + x2:=segment[i].port[1].x; + y2:=segment[i].port[1].y; + coords(x1,y1); + coords(x2,y2); + trouve:=point_Sur_Segment(Xsouris,Ysouris,x1,y1,x2,y2); + if trouve then + begin + formAnalyseCDM.EditAdresse.text:=''; + s:='Ports 0/1 = '+InttoSTR(Segment[i].port[0].numero)+'/'+IntToSTR(Segment[i].port[1].numero); + formAnalyseCDM.LabelPorts.Caption:=s; + + Canvas.Pen.Width:=largeur_voie; + Canvas.pen.Color:=clred; + canvas.MoveTo(x1,y1); + canvas.LineTo(x2,y2); + end; + end; + + if (ctype='curve') or (ctype='arc') then + begin + StartAngle:=segment[i].StartAngle/100; + StopAngle:=segment[i].ArcAngle/100; + centreX:=segment[i].lXc; + CentreY:=segment[i].lyc; + coords(centreX,centreY); + + rayon:=round(Segment[i].Rayon*reducX) div 1000; + + //Affiche('Segment index '+intToSTR(i)+' Numéro='+intToSTR(numero),clOrange); + if stopAngle<0 then + canvas.Pen.color:=clred + else canvas.Pen.color:=clOrange; + + trouve:=point_sur_arc(xSouris,ySouris,CentreX,centreY,rayon,StartAngle,StopAngle,debug) ; + if trouve then + begin + FormAnalyseCDM.EditAdresse.text:=''; + s:='Ports 0/1 = '+IntToSTR(Segment[i].port[0].numero)+'/'+IntToSTR(Segment[i].port[1].numero); + formAnalyseCDM.LabelPorts.Caption:=s; + + if not(debug) then + begin + Canvas.Pen.Width:=largeur_voie; + Canvas.pen.Color:=clred; + D_arc(formAnalyseCDM.ImageCDM.Canvas,centreX,centreY,rayon,StartAngle,StopAngle); + end; + end; + end; + { + with ImageCDM.canvas do + begin + pen.width:=1; + pen.color:=clred; + moveTo(x1,y1);LineTo(x2,y2); + //ellipse(x1-20,y1-20,x2+20,y2+20); + end; + } + + if not(trouve) then inc(i); + until (i>=nSeg) or trouve; + + if trouve then + begin + with FormAnalyseCDM do + begin + GroupBoxSegment.Caption:='Segment : '+ctype; + EditSegment.Text:=intToSTR(numero); + s:='Segment '+IntToSTR(Segment[i].numero)+' '+ctype; + x1:=Segment[i].adresse; + if x1<>0 then + begin + s:=s+#13+'Adr='+intToSTR(x1); + if Segment[i].adresse2<>0 then s:=s+'/'+intToSTR(Segment[i].adresse2); + end; + Hint:=s; + showHint:=true; + end; + IndexClic:=i; + end + else FormAnalyseCDM.hint:=''; + + clic:=false; +end; + +procedure TFormAnalyseCDM.EditAdresseChange(Sender: TObject); +var adresse,adresse2,erreur,ofs : integer; + canvas : Tcanvas; + ctyp,s : string; + i : integer; +begin + if clic then exit; + s:=editAdresse.Text; + i:=pos('/',s); + adresse2:=0; + if i=0 then val(s,adresse,erreur) else + begin + val(s,adresse,erreur); + delete(s,1,erreur); + val(s,adresse2,erreur); + erreur:=0; + end; + + if erreur=0 then + begin + ofs:=0; + segment[IndexClic].adresse:=adresse; + if adresse2<>0 then segment[IndexClic].adresse2:=adresse2; + if (ctyp='crossing') then ofs:=YcrOffset; + ctyp:=segment[IndexClic].typ; + if not(segment_aig(ctyp)) and not(ctyp='crossing') then exit; // si c'est pas un aiguillage ni un croisement + if (ctyp='crossing') or (ctyp='dbl_slip_switch') then ofs:=YcrOffset; + if (ctyp='turnout') or (ctyp='turnout_sym') then ofs:=yTurnoutOffset; + if (ctyp='turnout_curved') or (ctyp='turnout_curved_2r') then ofs:=YcrOffset; + + canvas:=ImageCDM.Canvas; + with canvas do + begin + Pen.Color:=clLime; + Brush.Style:=bsSolid; + brush.Color:=fond_cdm; + end; + coords_aff_aig(canvas,indexClic); + canvas.Brush.Style:=bsClear; + end; +end; + +procedure TFormAnalyseCDM.ImageCDMClick(Sender: TObject); +begin + clic_image; +end; + +procedure TFormAnalyseCDM.FormMouseWheel(Sender: TObject;Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;var Handled: Boolean); +var i : integer; +begin + i:=TrackBar1.Position; + + if WheelDelta>0 then + begin + if (i<=Zmini) then + begin + TrackBar1.Position:=Zmini; + exit; + end; + dec(i); + end + else + begin + if (i>=ZMaxi) then + begin + TrackBar1.Position:=Zmaxi; + exit; + end; + inc(i); + end; + + TrackBar1.Position:=i; + Affichage(false); + + // positionner la trackbar zoom + + {FormTCO.TrackBarZoom.Position:=i; + calcul_cellules; + Affiche_TCO; + SelectionAffichee:=false;} +end; + +// trouve les index du segment qui contiennent le détecteur Adresse +// renvoie dans index les index, et dans periph les numéros de périphériques dans lesquels ils se trouvent +function index_segment_det(Adresse : integer;var TabloDetSeg : TdetSeg; nombre : integer) : boolean; +var i,n,ip,itablo : integer; +begin + //trouver les deux segments du détecteurs + if adresse=0 then + begin + nombre:=0; + result:=false; + exit; + end; + for i:=1 to 10 do + begin + TabloDetSeg[i].index:=-1; + TabloDetSeg[i].periph:=-1; + end; + + i:=0; + itablo:=0; + repeat + n:=segment[i].nperiph; + if n<>0 then + begin + for ip:=0 to n-1 do + begin + if segment[i].periph[ip].typ='detector' then + begin + if segment[i].periph[ip].adresse=adresse then + begin + inc(itablo); + if itablo>10 then + begin + AfficheDebug('Erreur 857 : Nbre périphériques>10 Segment '+intToSTR(segment[i].numero),clred); + exit; + end; + TabloDetSeg[itablo].index:=i; + TabloDetSeg[itablo].periph:=ip; + end; + end; + end; + end; + inc(i); + until (i>nseg-1); + nombre:=itablo; + result:=itablo>0; +end; + + + +// allume la zone du détecteur "adresse" +procedure dessine_det(adresse : integer); +var p,centreX,CentreY,rayon,i,index,x,y,x1,y1,x2,y2,x3,y3,x4,y4,np,NindexR,NumPort,IndexportSuiv,NumSeg,indexport, + xs,ys,nombre,ind1,ind2,per1,per2,IndexSegBumper,PortBumper,port : integer; + StartAngle,stopangle,startDegres,StopDegres : double; + trouve,ts,tn,tp : boolean; + ctyp,s : string; + canvas : Tcanvas; + circuit_det : array[1..20] of record + index : integer; // index des segments du circuit des détecteurs + port : integer; // pour les premiers et derniers index, index du périphérique, sinon du port + end; + tabloDetSeg : TdetSeg; +begin + if adresse=0 then exit; + canvas:=FormAnalyseCDM.ImageCDM.canvas; + Canvas.pen.color:=clred; + canvas.Pen.width:=largeur_voie; + + // trouve la liste des détecteurs, résultat dans tabloDetSeg, nombre + index_segment_det(adresse,tabloDetSeg,nombre); + circuit_det[1].index:=tabloDetSeg[1].index; + + ind1:=tabloDetSeg[1].index; + ind2:=tabloDetSeg[2].index; + per1:=tabloDetSeg[1].periph; + per2:=tabloDetSeg[2].periph; + + //Affiche('Trouvé détecteur sur le segment '+inttoSTR(segment[i1].numero),clYellow); + + // cas ou il y a plus d'un détecteur sur le même segment + // pour l'instant on ne traite que 2 détecteurs (identiques) par segment maxi + if ind1=ind2 then + begin + circuit_det[1].port:=tabloDetSeg[1].periph; //index du périph1 + circuit_det[1].index:=tabloDetSeg[1].index; + circuit_det[2].port:=tabloDetSeg[2].periph; //index du périph2 + circuit_det[2].index:=tabloDetSeg[2].index; + ctyp:=segment[ind1].typ; + if (ctyp='straight') or (ctyp='pre_curve') or (ctyp='bumper_stop') then + begin + x:=segment[ind1].periph[per1].x; + y:=segment[ind1].periph[per1].y; + coords(x,y); + canvas.moveto(x,y); + + x:=segment[ind1].periph[per2].x; + y:=segment[ind1].periph[per2].y; + coords(x,y); + Canvas.LineTo(x,y); + end; + + if (ctyp='curve') or (ctyp='arc') then + begin + rayon:=segment[ind1].Rayon; + StartAngle:=segment[ind1].StartAngle/100; + StopAngle:=segment[ind1].ArcAngle/100; + centreX:=segment[ind1].lxc; + CentreY:=segment[ind1].lyc; + Canvas.pen.color:=clred; + x1:=segment[ind1].periph[per1].x; + y1:=segment[ind1].periph[per1].y; + x2:=segment[ind1].periph[per2].x; + y2:=segment[ind1].periph[per2].y; + canvas.pen.Color:=clred; + arc_xy(centreX,centreY,rayon,x1,y1,x2,y2); + + coords(centreX,centreY); + {coords(x2,y2); + canvas.MoveTo(centreY,centreY); + canvas.LineTo(x2,y2);} + end; + + end + + else + begin + // aller dans un sens pour tenter de trouver le détecteur homologue + port:=0; + trouve:=false; + IndexSegBumper:=-1; + repeat + i:=1; + index:=ind1; + //Affiche('Sens port '+intToSTR(port),clred); + //Affiche(IntToSTR(segment[index].numero),clred); + indexport:=port; + circuit_det[i].port:=port; //index du port + circuit_det[i].index:=ind1; //index du segment + i:=2; + + repeat + ts:=trouve_seg_suivant(Index,indexport,Suivant,IndexportSuiv); // si ts=faux, possible sur un buttoir car pas de suivant + index:=Suivant; + indexport:=IndexPortSuiv; + numseg:=segment[index].numero; + ctyp:=segment[index].typ; + if (ctyp='bumper_stop') or (ctyp='turntable') then + begin + IndexSegBumper:=index; + PortBumper:=indexport; + end; + if ts then + begin + //Affiche(intToSTR(numseg),clred); + circuit_det[i].port:=indexport; //index du port + circuit_det[i].index:=index; + indexport:=1-indexport; // inverser le port + tn:=indexport>=0; // si pas tn c'est que c'est un segment à plus de 3 ports + np:=segment[index].nperiph; + if np<>0 then + begin + p:=0; + repeat + if segment[index].periph[p].typ='detector' then trouve:=segment[index].periph[p].adresse=adresse; + inc(p); + until (p>np-1) or trouve; + end; + inc(i); + end; + until trouve or (i>10) or not(tn) or not(ts); // boucle de segment + if not(trouve) then + begin + inc(port); // tester le port suivant (changement de sens) + index:=ind2; + end; + until (port=2) or trouve; // boucle de port + + if not(trouve) then + begin + if IndexSegBumper=-1 then begin AfficheDebug('Msg 187 : pas trouvé de route pour le détecteur '+intToSTR(adresse),clOrange) ; exit; end; + begin + // repartir du buttoir vers le détecteur + IndexPort:=PortBumper; + per1:=port; + i:=1; + index:=IndexSegBumper; + circuit_det[i].index:=IndexSegBumper; + circuit_det[i].port:=PortBumper; + i:=2; + repeat + ts:=trouve_seg_suivant(index,Indexport,Suivant,IndexportSuiv); + if not(ts) then begin AfficheDebug('Erreur 102 - Pas de suivant Segment '+intToSTR(segment[Index].numero),clred);exit;end; + index:=Suivant; + indexport:=IndexPortSuiv; + numseg:=segment[index].numero; + //Affiche(intToSTR(numseg),clred); + circuit_det[i].port:=indexport; //index du port + circuit_det[i].index:=index; + indexport:=1-indexport; // inverser le port + tn:=indexport>=0; + if not(tn) then begin AfficheDebug('Erreur 103 - Port destination négatif - Segment '+intToSTR(segment[IndexSegBumper].numero),clred);exit;end; + + np:=segment[index].nperiph; + if np<>0 then + begin + p:=0; + repeat + if segment[index].periph[p].typ='detector' then trouve:=segment[index].periph[p].adresse=adresse; + inc(p); + until (p>np-1) or trouve; + end; + inc(i); + until trouve or (i>10); + if not(trouve) then begin AfficheDebug('Erreur 104 - Detecteur '+intToSTR(adresse)+' non trouvé car trop distant',clred);exit;end; + per2:=p-1; + end; + end; + NindexR:=i-1; + + { + for i:=1 to NindexR do + begin + index:=circuit_det[i].index; + s:=intToSTR(segment[index].numero)+ + ' StartAngle='+IntToSTR(segment[index].StartAngle div 100)+ + ' ArcAngle='+IntToSTR(segment[index].ArcAngle div 100); + Affiche(s,clWhite); + end; } + + // le circuit des segments est trouvé dans le tableau circuit_det + if trouve then + begin + // départ sur détecteur + index:=circuit_det[1].index; + ctyp:=segment[index].typ; + if (ctyp='curve') or (ctyp='arc') then + begin + rayon:=segment[index].Rayon; + StartAngle:=segment[index].StartAngle/100; + StopAngle:=segment[index].ArcAngle/100; + centreX:=segment[index].lxc; + CentreY:=segment[index].lyc; + x:=segment[index].periph[per1].x; + y:=segment[index].periph[per1].y; + // déterminer la destination + // trouve le port connecté au segment suivant + tp:=index_port_connecte(index,circuit_det[2].index,indexPort); + // trouver les coordonnées su x,y sur lequel est connecté le port + xs:=Segment[index].port[IndexPort].x; + ys:=Segment[index].port[IndexPort].y; + // donc tracer un arc de (x,y) détecteur à (xs,ys) port + arc_xy(centreX,centreY,rayon,x,y,xs,ys); + end; + if (ctyp='straight') or (ctyp='pre_curve') or (ctyp='bumper_stop') then + begin + if ctyp='bumper_stop' then + begin + // faire le raccordement sur le port non connecté + if segment[index].port[0].connecte then p:=1 else p:=0; + x:=segment[index].port[p].x; + y:=segment[index].port[p].y; + end + else + begin + x:=segment[index].periph[per1].x; + y:=segment[index].periph[per1].y; + end; + + coords(x,y); + canvas.moveto(x,y); + + x:=segment[index].port[circuit_det[1].port].x; + y:=segment[index].port[circuit_det[1].port].y; + coords(x,y); + Canvas.LineTo(x,y); + end; + + for i:=2 to NindexR-1 do + begin + index:=circuit_det[i].index; + //Affiche('Route de index Seg='+inttoSTR(segment[index].numero),clYellow); + + ctyp:=segment[index].typ; + if (ctyp='curve') or (ctyp='arc') then + begin + rayon:=segment[index].Rayon; + StartAngle:=segment[index].StartAngle/100; + StopAngle:=segment[index].ArcAngle/100; + centreX:=segment[index].lxc; + CentreY:=segment[index].lyc; + angle_cdm(canvas,centreX,CentreY,startangle,stopangle,rayon); + end; + + if (ctyp='straight') or (ctyp='pre_curve') or (ctyp='bumper_stop') then + begin + x:=segment[index].port[0].x; + y:=segment[index].port[0].y; + coords(x,y); + canvas.moveto(x,y); + + x:=segment[index].port[1].x; + y:=segment[index].port[1].y; + coords(x,y); + Canvas.LineTo(x,y); + end; + end; + // dernier élément + index:=circuit_det[NindexR].index; + ctyp:=segment[index].typ; + if (ctyp='curve') or (ctyp='arc') then + begin + rayon:=segment[index].Rayon; + StartAngle:=segment[index].StartAngle/100; + StopAngle:=segment[index].ArcAngle/100; + centreX:=segment[index].lxc; + CentreY:=segment[index].lyc; + Canvas.pen.color:=clred; + x:=segment[index].periph[per2].x; + y:=segment[index].periph[per2].y; + // déterminer la destination + // trouve le port connecté au segment précédent + tp:=index_port_connecte(index,circuit_det[NindexR-1].index,indexPort); + // trouver les coordonnées su x,y sur lequel est connecté le port + xs:=Segment[index].port[IndexPort].x; + ys:=Segment[index].port[IndexPort].y; + // donc tracer un arc de (x,y) (détecteur) à (xs,ys) port + arc_xy(centreX,centreY,rayon,x,y,xs,ys); + end; + if (ctyp='straight') or (ctyp='pre_curve') or (ctyp='bumper_stop') then + begin + x:=segment[index].periph[per2].x; + y:=segment[index].periph[per2].y; + coords(x,y); + canvas.moveto(x,y); + + x:=segment[index].port[circuit_det[nindexr].port].x; + y:=segment[index].port[circuit_det[nindexr].port].y; + coords(x,y); + Canvas.LineTo(x,y); + end; + end; + end; +end; + +procedure TFormAnalyseCDM.ButtonAffDetClick(Sender: TObject); +var i,erreur : integer; +begin + val(EditDetecteur.text,i,erreur); + if erreur=0 then dessine_det(i); +end; + +procedure TFormAnalyseCDM.CheckColorationDiffClick(Sender: TObject); +begin + coloration_diff:=CheckColorationDiff.checked; + Affichage(false); +end; + +procedure TFormAnalyseCDM.ButtonAllumeTsClick(Sender: TObject); +var i,j,p,np : integer; +begin + for i:=0 to NSeg-1 do + begin + np:=segment[i].nperiph; // nombre de périphériques + for j:=0 to np-1 do + begin + if segment[i].periph[j].typ='detector' then + begin + p:=segment[i].periph[j].adresse; + if p<>0 then dessine_det(p); + end; + end; + end; +end; + +procedure TFormAnalyseCDM.ButtonImprimeClick(Sender: TObject); +begin + affichage(true); + affichage(false); //pour remettre les variables globales de dimensionnement qui sont différentes de l'impression +end; + +procedure TFormAnalyseCDM.ImageCDMMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +var Xs,Ys,i,xt,yt : integer; + trouve : boolean; +begin + xs:=x;ys:=y; + inv_coords(xs,ys); + caption:=NomModuleCDM+' '+intToSTR(xs)+' '+intToSTr(ys)+' / '+intToSTR(x)+' '+intToSTR(y); + i:=1; + + // afficher le hint du train + repeat + xt:=trains[i].x; + yt:=trains[i].y; + trouve:=(abs(xt-x)<50) and (abs(yt-y)<50); + if not(trouve) then inc(i); + until (i>Ntrains) or trouve; + if trouve then + begin + ImageCDM.Hint:=trains[i].nom_train+' @='+intToSTR(trains[i].adresse); + ImageCDM.showHint:=true; + end + else ImageCDM.showhint:=false; +end; + +procedure TFormAnalyseCDM.ButtonAnimeClick(Sender: TObject); +var bmp : tbitmap; + zom,ang : single; + x,y : integer; +begin + x:=100;y:=200; + zom:=1.2; + ang:=0; + + repeat + peindre(1,x,y,zom); + + //peindre(2,500-x,y,0,zom); + //zom:=zom+0.005; + x:=x+10; + ang:=ang+0.04; + sleep(40); + Application.processMessages; + until x>800; + + //until x>500; + + +end; + + + + + end. + + + + diff --git a/UnitCDF.pas b/UnitCDF.pas index 5159e25..9b88d95 100644 --- a/UnitCDF.pas +++ b/UnitCDF.pas @@ -1,5 +1,7 @@ unit UnitCDF; +// configuration des décodeurs CDM et Digikeijs + interface uses @@ -97,9 +99,6 @@ procedure dessine_feu_CDF; implementation - - - procedure TFormCDF.FormActivate(Sender: TObject); var erreur : integer; begin diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 465d13c..30d0ecf 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -33,7 +33,7 @@ object FormConfig: TFormConfig ParentFont = False WordWrap = True end - object Image1: TImage + object ImageSignaux: TImage Left = 648 Top = 128 Width = 249 @@ -1571,7 +1571,7 @@ object FormConfig: TFormConfig Top = 8 Width = 633 Height = 505 - ActivePage = TabSheetAig + ActivePage = TabSheetTrains Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 @@ -1911,7 +1911,12 @@ object FormConfig: TFormConfig Top = 48 Width = 145 Height = 17 - Caption = 'Position trains (non utilis'#233')' + Hint = + 'Utilis'#233' avec la fenetre CDM de signaux complexes pour afficher l' + + 'es trains' + Caption = 'Position trains' + ParentShowHint = False + ShowHint = True TabOrder = 3 end object CheckBoxSrvSig: TCheckBox @@ -2119,7 +2124,7 @@ object FormConfig: TFormConfig Top = 200 Width = 297 Height = 73 - Caption = 'Acc'#232's Ethernet '#224' l'#39'interface vers la centrale' + Caption = 'Acc'#232's r'#233'seau '#224' l'#39'interface vers la centrale' TabOrder = 2 object Label7: TLabel Left = 14 @@ -2795,9 +2800,9 @@ object FormConfig: TFormConfig end object RichAig: TRichEdit Left = 0 - Top = 56 + Top = 64 Width = 321 - Height = 369 + Height = 385 Color = clBlack Font.Charset = DEFAULT_CHARSET Font.Color = clYellow @@ -2832,7 +2837,7 @@ object FormConfig: TFormConfig OnClick = BoutSupAigClick end object ButtonAjSup: TButton - Left = 144 + Left = 152 Top = 32 Width = 121 Height = 17 @@ -2922,6 +2927,7 @@ object FormConfig: TFormConfig Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] + HideSelection = False Lines.Strings = ( 'RichBranche') ParentFont = False @@ -3101,7 +3107,7 @@ object FormConfig: TFormConfig Visible = False end object Label43: TLabel - Left = 40 + Left = 48 Top = 160 Width = 38 Height = 16 @@ -3755,8 +3761,8 @@ object FormConfig: TFormConfig end end object GroupBoxPN: TGroupBox - Left = 224 - Top = 176 + Left = 152 + Top = 16 Width = 233 Height = 401 Caption = 'Action gestion passage '#224' niveau' @@ -4136,7 +4142,7 @@ object FormConfig: TFormConfig TabOrder = 31 OnChange = EditZdet2V4OChange end - object Button1: TButton + object ButtonTestFerme: TButton Left = 200 Top = 16 Width = 27 @@ -4146,9 +4152,9 @@ object FormConfig: TFormConfig ParentShowHint = False ShowHint = True TabOrder = 36 - OnClick = Button1Click + OnClick = ButtonTestFermeClick end - object Button3: TButton + object ButtonTestOuvre: TButton Left = 200 Top = 40 Width = 27 @@ -4158,7 +4164,7 @@ object FormConfig: TFormConfig ParentShowHint = False ShowHint = True TabOrder = 37 - OnClick = Button3Click + OnClick = ButtonTestOuvreClick end object CheckPnPulse: TCheckBox Left = 8 @@ -4566,7 +4572,7 @@ object FormConfig: TFormConfig 'age' WordWrap = True end - object Image3: TImage + object ImageTrain: TImage Left = 384 Top = 312 Width = 153 diff --git a/UnitConfig.pas b/UnitConfig.pas index 85902ee..5f18338 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -5,14 +5,13 @@ interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls , jpeg, ComCtrls ,StrUtils, Unitprinc, - MMSystem, Buttons , UnitPareFeu, verif_version, - Menus; + MMSystem, Buttons , UnitPareFeu, verif_version, Menus ; type TFormConfig = class(TForm) ButtonAppliquerEtFermer: TButton; LabelInfo: TLabel; - Image1: TImage; + ImageSignaux: TImage; PageControl: TPageControl; TabSheetCDM: TTabSheet; TabSheetAutonome: TTabSheet; @@ -279,8 +278,8 @@ type Memo5: TMemo; EditLAY: TEdit; Label13: TLabel; - Button1: TButton; - Button3: TButton; + ButtonTestFerme: TButton; + ButtonTestOuvre: TButton; CheckPnPulse: TCheckBox; CheckFVC: TCheckBox; CheckFRC: TCheckBox; @@ -324,7 +323,7 @@ type EditFiltrDet: TEdit; CheckBoxVerifXpressNet: TCheckBox; LabelCrois: TLabel; - Image3: TImage; + ImageTrain: TImage; ButtonPFCDM: TButton; Label59: TLabel; EditV5F: TEdit; @@ -458,8 +457,8 @@ type procedure EditZdet1V4FChange(Sender: TObject); procedure EditZdet1V4OChange(Sender: TObject); procedure EditZdet2V4OChange(Sender: TObject); - procedure Button1Click(Sender: TObject); - procedure Button3Click(Sender: TObject); + procedure ButtonTestFermeClick(Sender: TObject); + procedure ButtonTestOuvreClick(Sender: TObject); procedure CheckPnPulseClick(Sender: TObject); procedure CheckFVCClick(Sender: TObject); procedure CheckFRCClick(Sender: TObject); @@ -512,6 +511,7 @@ Algo_localisation_ch='Algo_localisation'; Avec_roulage_ch='Avec_roulage'; nb_det_dist_ch='nb_det_dist'; IpV4_PC_ch='IpV4_PC'; +ServicesCDM_ch='ServicesCDM'; retro_ch='retro'; Init_aig_ch='Init_Aig'; LAY_ch='Lay'; @@ -541,6 +541,7 @@ Raz_signaux_ch='RazSignaux'; EnvAigDccpp_ch='EnvAigDccpp'; AdrBaseDetDccpp_ch='AdrBaseDetDccpp'; AvecVerifIconesTCO_ch='AvecVerifIconesTCO'; +NomModuleCDM_ch='NomModuleCDM'; // sections de config section_aig_ch='[section_aig]'; @@ -584,7 +585,7 @@ procedure trier_aig; implementation -uses UnitDebug,UnitTCO, UnitSR, UnitCDF; +uses UnitDebug,UnitTCO, UnitSR, UnitCDF,UnitAnalyseSegCDM; {$R *.dfm} @@ -619,10 +620,10 @@ begin place_id:=s; end; -procedure Maj_Hint_feu(i : integer); +procedure Maj_Hint_Signal(i : integer); var s : string; begin - // ne pas supprimer le @ espace et = qui sert de marqueur pour identifier le feu + // ne pas supprimer le @= qui sert de marqueur pour identifier le feu s:='@='+inttostr(feux[i].Adresse)+' Decodeur='+intToSTR(feux[i].Decodeur)+' Adresse détecteur associé='+intToSTR(feux[i].Adr_det1)+ ' Adresse élement suivant='+intToSTR(feux[i].Adr_el_suiv1); if feux[i].Btype_suiv1=aig then s:=s+' (aig)'; @@ -630,18 +631,19 @@ begin end; // demande les services Com-IP à CDM +// demande à CDM d'envoyer les états sur changements des services demandés. +// exemple: si on demande le service aiguillage, CDM renverra la position d'un aiguillage qui change d'état. function services_CDM : boolean; var s,ss : string; i : integer; begin - //s:=place_id('C-C-00-0002-RQSERV-RTSIM|030|03|SRV=ATNT;SRV=ADET;SRV=AACT;'); s:=place_id('C-C-00-0002-RQSERV-RTSIM|xxx|xx|'); i:=0; - if Srvc_Aig then begin s:=s+'SRV=ATNT;';inc(i);end; - if Srvc_Act then begin s:=s+'SRV=AACT;';inc(i);end; - if Srvc_Det then begin s:=s+'SRV=ADET;';inc(i);end; - if Srvc_PosTrain then begin s:=s+'SRV=TSXY;';inc(i);end ; - if Srvc_Sig then begin s:=s+'SRV=ASIG;';inc(i);end; + if Srvc_Aig then begin s:=s+'SRV=ATNT;';inc(i);end; // service changement aiguillage + if Srvc_Act then begin s:=s+'SRV=AACT;';inc(i);end; // service actionneurs + if Srvc_Det then begin s:=s+'SRV=ADET;';inc(i);end; // service détecteurs + if Srvc_Pos then begin s:=s+'SRV=TSXY;';inc(i);end ; // service position des trains + if Srvc_Sig then begin s:=s+'SRV=ASIG;';inc(i);end; // service signaux // insère le nombre de paramètres ss:=format('%.*d',[2,i]) ; @@ -662,7 +664,7 @@ begin if Srvc_Aig then s:=s+'- aiguillages '; if Srvc_Act then s:=s+'- actionneurs '; if Srvc_Det then s:=s+'- détecteurs '; - if Srvc_PosTrain then s:=s+'- position des trains '; + if Srvc_Pos then s:=s+'- position des trains '; if Srvc_sig then s:=s+'- état des signaux '; Affiche(s,clYellow); end; @@ -1436,7 +1438,6 @@ begin end; // modifie le fichier de config en fonction du paramétrage -// recopie les commentaires du fichier "fichier" procedure genere_config; var s: string; fichierN : text; @@ -1466,6 +1467,15 @@ begin // adresse ip et port de CDM writeln(fichierN,IpV4_PC_ch+'=',adresseIPCDM+':'+intToSTR(portCDM)); + // services CDM + i:=0; + if Srvc_Aig then i:=setbit(i,0); + if Srvc_Act then i:=setbit(i,1); + if Srvc_Det then i:=setbit(i,2); + if Srvc_Pos then i:=setbit(i,3); + if Srvc_Sig then i:=setbit(i,4); + writeln(fichierN,ServicesCDM_ch+'=',i); + // adresse ip interface XpressNet writeln(fichierN,IPV4_Interface_ch+'=',adresseIP+':'+intToSTR(portInterface)); @@ -1531,6 +1541,8 @@ begin // Nom du lay writeln(fichierN,lay_ch+'=',Lay); + writeln(fichierN,NomModuleCDM_ch+'=',NomModuleCDM); + // Serveur d'interface de CDM writeln(fichierN,Serveur_interface_ch+'=',intToSTR(ServeurInterfaceCDM)); @@ -1645,7 +1657,6 @@ begin end; procedure lit_config; - var s,sa,SOrigine: string; c : char; tec,tjdC,tjsC,s2,triC,debugConfig,trouve_NbDetDist,trouve_ipv4_PC,trouve_retro,trouve_protocole, @@ -2443,7 +2454,11 @@ begin delete(s,i,length(sa)); val(s,TailleFonte,erreur); if (TailleFonte<8) or (tailleFonte>25) then taillefonte:=10; - FormPrinc.FenRich.Font.Size:=TailleFonte; + with FormPrinc.FenRich do + begin + clear; + Font.Size:=TailleFonte; + end; end; sa:=uppercase(Protocole_ch)+'='; @@ -2475,6 +2490,21 @@ begin else affiche('Erreur adresse ip cdm rail '+s,clred); end; + // Services CDM + sa:=uppercase(ServicesCDM_ch)+'='; + i:=pos(sa,s); + if i=1 then + begin + inc(nv); + delete(s,i,length(sa)); + val(s,i,erreur); + Srvc_aig:=testbit(i,0); + Srvc_act:=testbit(i,1); + Srvc_det:=testbit(i,2); + Srvc_pos:=testbit(i,3); + Srvc_sig:=testbit(i,4); + end; + // adresse ip et port de la centrale sa:=uppercase(IPV4_INTERFACE_ch)+'='; i:=pos(sa,s); @@ -2503,7 +2533,7 @@ begin trouve_MaxPort:=true; val(s,MaxPortCom,erreur); if erreur<>0 then Affiche('Erreur MaxCom: '+sOrigine,clred); - if (MaxPortCom<1) or (MaxPortCom>99) then MaxPortCom:=30; + if (MaxPortCom<1) or (MaxPortCom>255) then MaxPortCom:=30; end; // configuration du port com @@ -2570,7 +2600,7 @@ begin delete(s,i,length(sa)); AvecInitAiguillages:=s='1'; end; - + // avec demande de position des aiguillages en mode autonome au démarrage sa:=uppercase(Init_dem_aig_ch)+'='; i:=pos(sa,s); @@ -2742,6 +2772,15 @@ begin lay:=s; end; + sa:=uppercase(NomModuleCDM_ch)+'='; + i:=pos(sa,s); + if i=1 then + begin + inc(nv); + delete(s,i,length(sa)); + NomModuleCDM:=s; + end; + sa:=uppercase(SERVEUR_INTERFACE_ch)+'='; i:=pos(sa,s); if i=1 then @@ -2961,6 +3000,11 @@ begin verifVersion:=true; Valeur_entete:=1; TempoOctet:=50; + Srvc_Aig:=true; + Srvc_Act:=true; + Srvc_Det:=true; + Srvc_Pos:=false; + Srvc_Sig:=false; TimoutMaxInterface:=7; AvecInitAiguillages:=true; AvecDemandeInterfaceUSB:=true; @@ -2972,7 +3016,7 @@ begin Nb_cantons_Sig:=3; ServeurRetroCDM:=1; algo_Unisemaf:=1; - TailleFonte:=12; + TailleFonte:=10; Nb_Det_Dist:=3; genere_config; assign(fichier,NomConfig); @@ -3180,13 +3224,13 @@ begin change_srv:=Srvc_Aig<>CheckBoxServAig.checked; change_srv:=Srvc_Det<>CheckBoxServDet.checked or change_srv; change_srv:=Srvc_Act<>CheckBoxServAct.checked or change_srv; - change_srv:=Srvc_PosTrain<>CheckServPosTrains.checked or change_srv; + change_srv:=Srvc_Pos<>CheckServPosTrains.checked or change_srv; change_srv:=Srvc_Sig<>CheckBoxSrvSig.checked or change_srv; Srvc_Aig:=CheckBoxServAig.checked; Srvc_Det:=CheckBoxServDet.checked; Srvc_Act:=CheckBoxServAct.checked; - Srvc_PosTrain:=CheckServPosTrains.checked; + Srvc_Pos:=CheckServPosTrains.checked; Srvc_Sig:=CheckBoxSrvSig.checked; Raz_Acc_signaux:=CheckBoxRazSignaux.checked; AvecInitAiguillages:=CheckBoxInitAig.Checked; @@ -3227,8 +3271,8 @@ begin end; end; -// LC=Adresse du feu -procedure clicListeFeu(lc : integer); +// LC=Adresse du signal +procedure clicListeSignal(lc : integer); var AncAdresse,index,adresse,erreur : integer; s : string; begin @@ -3350,7 +3394,9 @@ begin CheckBoxServAig.checked:=Srvc_Aig; CheckBoxServDet.checked:=Srvc_Det; CheckBoxServAct.checked:=Srvc_Act; - CheckServPosTrains.checked:=Srvc_PosTrain; + CheckServPosTrains.checked:=Srvc_Pos; + CheckBoxSrvSig.Checked:=Srvc_Sig; + CheckBoxRazSignaux.checked:=Raz_Acc_signaux; CheckBoxInitAig.checked:=AvecInitAiguillages; CheckPosAig.checked:=AvecDemandeAiguillages; @@ -3466,7 +3512,7 @@ begin Perform(EM_SCROLLCARET,0,0); end; - if clicproprietes then clicListeFeu(Adressefeuclic); + if clicproprietes then clicListeSignal(Adressefeuclic); clicproprietes:=false; i:=1; @@ -3509,9 +3555,12 @@ begin clicListe:=false; if AvecRoulage=1 then LabelInfVitesse.Visible:=false else LabelInfVitesse.Visible:=true; ConfigPrete:=true; - + richBranche.HideSelection:=false; // pour pouvoir copier coller la fenetre groupBox21.Top:=304; GroupBox21.Left:=8; + + // création de l'icone de déplacement du train + end; @@ -3906,6 +3955,7 @@ begin editact2.Visible:=false; LabelActionneur.Caption:='Actionneur Détecteur'; EditEtatActionneur.Hint:='0 ou 1'; + EditAct.Hint:='Actionneur/Détecteur '; end; end; @@ -3921,6 +3971,7 @@ begin editact2.Visible:=true; LabelActionneur.Caption:='Mémoire de Zone'; EditEtatActionneur.Hint:='0 ou 1'; + EditAct.Hint:='Détecteur '; end; end; @@ -3937,6 +3988,7 @@ begin editact2.Visible:=false; LabelActionneur.Caption:='Aiguillage'; EditEtatActionneur.Hint:='1 ou S=dévié 2 ou D=droit'; + EditAct.Hint:='Aiguillage '; end; end; @@ -4054,7 +4106,7 @@ begin begin Editdet2.Text:=IntToSTR(j);EditSuiv2.Text:=TypeEl_To_char(feux[i].Btype_suiv2)+IntToSTR(feux[i].Adr_el_suiv2); EditSuiv2.Hint:=chaine_element(feux[i].Btype_suiv2,feux[i].Adr_el_suiv2); - end else begin EditDet2.Text:='';EditSuiv2.Text:='';EditSuiv2.Hint:='';end; + end else begin EditDet2.Text:='';EditSuiv2.Text:='';EditSuiv2.Hint:='';end; j:=feux[i].Adr_det3; if j<>0 then begin @@ -4164,11 +4216,8 @@ begin end; end; - //if det then s2:='Détecteur ' else s2:='Actionneur '; - s2:='Détecteur ou actionneur '; - s2:=s2+intToSTR(Tablo_actionneur[i].adresse); - FormConfig.EditAct.Hint:=s2; - + s2:=FormConfig.EditAct.Hint; + FormConfig.EditAct.Hint:=s2+intToSTR(Tablo_actionneur[i].adresse); // Actionneur fonction F loco if Tablo_actionneur[i].loco then @@ -4246,7 +4295,7 @@ begin radioButtonActDet.Checked:=true; radioButtonZones.Checked:=false; editAct2.Visible:=false; - LabelActionneur.Caption:='Actionneur DétecteurZ'; + LabelActionneur.Caption:='Actionneur Détecteur'; end; if typ=1 then with formconfig do begin @@ -4962,7 +5011,7 @@ begin if i<1 then exit; decodeur:=ComboBoxDec.ItemIndex; feux[i].decodeur:=decodeur; - Maj_Hint_feu(i); + Maj_Hint_Signal(i); s:=encode_sig_feux(i); formconfig.RichSig.Lines[ligneclicSig]:=s; @@ -4982,7 +5031,7 @@ begin begin i:=Selstart; lc:=Perform(EM_LINEFROMCHAR,i,0); // numéro de la lignée cliquée - clicListeFeu(feux[lc+1].adresse); + clicListeSignal(feux[lc+1].adresse); end; end; @@ -5002,7 +5051,7 @@ begin if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur1 ';exit;end; LabelInfo.caption:=' '; feux[ligneClicSig+1].Adr_det1:=i; - maj_hint_feu(ligneClicSig+1); + maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); RichSig.Lines[ligneClicSig]:=s; feux[ligneClicSig+1].modifie:=true; @@ -5020,11 +5069,12 @@ begin tempo_feu:=i; end; + procedure Suiv1; var s : string; i,erreur : integer; bt : Tequipement; -begin +begin if clicliste or (ligneClicSig<0) then exit; if affevt then Affiche('Evt Element suivant1',clOrange); @@ -5082,7 +5132,7 @@ begin if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur2 ';exit;end; LabelInfo.caption:=' '; feux[ligneClicSig+1].Adr_det2:=i; - maj_hint_feu(ligneClicSig+1); + maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); RichSig.Lines[ligneClicSig]:=s; feux[ligneClicSig+1].modifie:=true; @@ -5093,7 +5143,7 @@ procedure TFormConfig.EditDet2Change(Sender: TObject); begin det2; end; - + procedure TFormConfig.CheckVerrouCarreClick(Sender: TObject); var s : string; @@ -5185,7 +5235,7 @@ begin if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur3 ';exit;end; LabelInfo.caption:=' '; feux[ligneClicSig+1].Adr_det3:=i; - maj_hint_feu(ligneClicSig+1); + maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); RichSig.Lines[ligneClicSig]:=s; feux[ligneClicSig+1].modifie:=true; @@ -5260,7 +5310,7 @@ begin if (s<>'') and (erreur<>0) then begin LabelInfo.caption:='Erreur détecteur4 ';exit;end; LabelInfo.caption:=' '; feux[ligneClicSig+1].Adr_det4:=i; - maj_hint_feu(ligneClicSig+1); + maj_hint_Signal(ligneClicSig+1); s:=encode_sig_feux(ligneClicSig+1); RichSig.Lines[ligneClicSig]:=s; feux[ligneClicSig+1].modifie:=true; @@ -5322,8 +5372,9 @@ end; procedure TFormConfig.EditActChange(Sender: TObject); var s,s2 : string; - act,erreur : integer; - det : boolean; + act,erreur,det1,det2,suiv : integer; + elsuiv : tEquipement; + de : boolean; begin if clicliste then exit; if affevt then affiche('Evt Edit act Change',clyellow); @@ -5336,11 +5387,19 @@ begin begin Val(s,act,erreur); if s='' then exit; - det:=pos('Z',s)<>0; // si détecteur - if det then s2:='Détecteur ' else s2:='Actionneur '; - s2:=s2+intToSTR(act); - EditAct.Hint:=s2; - if det then delete(s,erreur,1); + + // 0=actionneur/détecteur 2=evt aig 3=MemZone + if (Tablo_Actionneur[ligneClicAct+1].typdeclenche=3) or (Tablo_Actionneur[ligneClicAct+1].typdeclenche=0) then + s2:='Actionneur/Détecteur '; + if (Tablo_Actionneur[ligneClicAct+1].typdeclenche=2) then s2:='Aiguillage '; + + EditAct.Hint:=s2+intToSTR(act); + + + + + de:=pos('Z',s)<>0; // si détecteur + if de then delete(s,erreur,1); Val(s,act,erreur); if erreur<>0 then begin @@ -5350,6 +5409,18 @@ begin tablo_actionneur[ligneClicAct+1].adresse:=act; s:=encode_act_loc_son(ligneClicAct+1); RichAct.Lines[ligneClicAct]:=s; + + // vérifier si les détecteurs sont contigus si on est en zone + if Tablo_Actionneur[ligneClicAct+1].typdeclenche=3 then + begin + Val(EditAct2.Text,det2,erreur); + if erreur<>0 then exit; + det_contigu(act,det2,suiv,elSuiv); + if (suiv=0) or (suiv>9995) then LabelInfo.Caption:='Les détecteurs '+intToSTR(act)+' et '+intToSTR(det2)+' ne sont pas contigus' + else LabelInfo.Caption:=''; + end + else LabelInfo.Caption:=''; + end; end; end; @@ -5357,7 +5428,8 @@ end; procedure TFormConfig.EditAct2Change(Sender: TObject); var s : string; - det2,erreur : integer; + det1,det2,erreur,suiv : integer; + elSuiv : Tequipement; begin if clicliste then exit; if affevt then affiche('Evt Edit act2 Change',clyellow); @@ -5378,6 +5450,14 @@ begin tablo_actionneur[ligneClicAct+1].adresse2:=det2; s:=encode_act_loc_son(ligneClicAct+1); RichAct.Lines[ligneClicAct]:=s; + + // vérifier si les détecteurs sont contigus + Val(EditAct.Text,det1,erreur); + if erreur<>0 then exit; + det_contigu(det1,det2,suiv,elSuiv); + if (suiv=0) or (suiv>9995) then LabelInfo.Caption:='Les détecteurs '+intToSTR(det1)+' et '+intToSTR(det2)+' ne sont pas contigus' + else LabelInfo.Caption:=''; + end; end; end; @@ -5650,7 +5730,7 @@ begin feux[ligneClicSig+1].adresse:=i; s:=encode_sig_feux(ligneClicSig+1); RichSig.Lines[ligneClicSig]:=s; - Maj_Hint_feu(ligneClicSig+1); + Maj_Hint_Signal(ligneClicSig+1); end; end; @@ -5823,8 +5903,6 @@ begin end; end; - - procedure TFormConfig.ButtonrestaureClick(Sender: TObject); var index : integer; begin @@ -5835,7 +5913,7 @@ begin feux[index]:=Feu_sauve; RichSig.Lines[ligneClicSig]:=encode_sig_feux(index); aff_champs_sig_feux(index); // réaffiche les champs - Maj_Hint_feu(index); + Maj_Hint_Signal(index); // change l'image du feu dans la feuille graphique principale Feux[index].Img.picture.Bitmap:=Select_dessin_feu(feux[index].aspect); dessine_feu_mx(Feux[index].Img.Canvas,0,0,1,1,feux[index].adresse,1); // dessine les feux du signal @@ -5941,7 +6019,6 @@ var i,ligne : integer; begin clicliste:=true; - // désactive la sélection des actionneurs RE_ColorLine(Formconfig.RichAct,ligneclicAct,ClAqua); ligneclicAct:=-1; @@ -6408,7 +6485,7 @@ begin with formconfig do begin RichAct.Lines.Add(s); RE_ColorLine(RichAct,RichAct.lines.count-1,ClAqua); - end; + end; end; AncligneClicAct:=-1; ligneClicAct:=-1; @@ -6766,11 +6843,12 @@ end; function verif_coherence : boolean; var AncAdr,i,j,k,l,Indexaig,adr,adr2,extr,detect,condcarre,nc,index2,SuivAdr, - x,y,extr2,adr3,index3,det1Br,det2Br,det1index,det2index,adresse,dec,nc2 : integer; + x,y,extr2,adr3,index3,det1Br,det2Br,det1index,det2index,adresse,Adresse2,dec,nc2 : integer; modAig,AncModel,model,km,SuivModel,model2: TEquipement; c : char; vitesse : longint; ok,trouveSuiv,TrouvePrec,AdrOk : boolean; + s : string; begin // vérification de la cohérence1 // parcoure les branches jusqu'à trouver un aiguillage pour voir s'il a été décrit @@ -6857,7 +6935,7 @@ begin begin Affiche('Erreur 31: détecteur '+intToSTR(adr)+' décrit dans l''aiguillage '+intToSTR(aiguillage[Indexaig].adresse)+' mais absent dans la description des branches',clRed); ok:=false; - end; + end; end; adr:=aiguillage[Indexaig].Apointe; if ( ((aiguillage[Indexaig].ApointeB='Z') or (aiguillage[Indexaig].ApointeB=#0)) and (aiguillage[Indexaig].modele=aig) ) then @@ -6898,7 +6976,7 @@ begin end; for i:=Indexaig+1 to maxaiguillage do begin - if adr=aiguillage[i].Adresse then + if adr=aiguillage[i].Adresse then begin affiche('Erreur 6.2: aiguillage '+intToSTR(adr)+' défini deux fois',clred); ok:=false; @@ -7274,7 +7352,7 @@ begin extr:=aiguillage[index2].ADroit; if adr<>extr then Affiche('Erreur 10.33: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'D différent de '+intToSTR(extr),clred); end; - if c='S' then + if c='S' then begin extr:=aiguillage[index2].ADevie; if adr<>extr then Affiche('Erreur 10.34: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'S différent de '+intToSTR(extr),clred); @@ -7326,7 +7404,7 @@ begin extr:=aiguillage[index2].ADroit; if adr<>extr then Affiche('Erreur 10.43: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'D différent de '+intToSTR(extr),clred); end; - if c='S' then + if c='S' then begin extr:=aiguillage[index2].ADevie; if adr<>extr then Affiche('Erreur 10.44: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'S différent de '+intToSTR(extr),clred); @@ -7342,7 +7420,7 @@ begin end; end; end; - + // cohérence 8 // parcoure les branches pour voir si les aiguillages aux extrémités sont cohérentes avec leurs déclarations for i:=1 to NbreBranches do @@ -7517,6 +7595,7 @@ begin AdrOk:=True; if Verif_AdrXpressNet=1 then begin + for i:=1 to maxaiguillage do begin adresse:=aiguillage[i].Adresse ; @@ -7570,6 +7649,24 @@ begin end; end; + // actionneurs de zone + for i:=1 to maxTablo_act do + begin + if Tablo_actionneur[i].typdeclenche=3 then // si actionneur de zone + begin + adresse:=Tablo_actionneur[i].Adresse; + adresse2:=Tablo_actionneur[i].Adresse2; + det_contigu(adresse,adresse2,suivant,SuivModel); + if (suivant=0) or (suivant>9995) then + begin + ok:=false; + s:='Erreur 18: l''actionneur '+IntToSTR(Tablo_actionneur[i].adresse)+' est enclenché par les détecteurs '+intToSTR(adresse)+' ' +intToSTR(adresse2)+' qui ne sont pas contigus'; + Affiche(s,clred); + end; + + end; + end; + verif_coherence:=ok; end; @@ -8117,8 +8214,6 @@ begin clicliste:=true; Aff_champs_aig_tablo(i); clicliste:=false; - - end; procedure valide_branches; @@ -8784,14 +8879,14 @@ begin i:=ligneClicAct+1; if AffEvt then Affiche('RadioBoutonActDet '+IntToSTR(i),clyellow); Tablo_Actionneur[i].typdeclenche:=0; - LabelActionneur.Caption:='Actionneur DétecteurZ'; + LabelActionneur.Caption:='Actionneur Détecteur'; editAct2.Visible:=false; EditTrainDecl.Visible:=true; LabelTrain.Visible:=true; EditEtatActionneur.Hint:='Etat 0 ou 1'; Tablo_Actionneur[i].trainDecl:=trainSauve; EditTrainDecl.Text:=trainSauve; - + val(editact.Text,champ,erreur); Tablo_actionneur[i].adresse:=champ ; val(editEtatActionneur.Text,champ,erreur); @@ -8807,6 +8902,8 @@ begin s:=encode_act_loc_son(i); RichAct.Lines[ligneClicAct]:=s; + EditAct.Hint:='Actionneur/Détecteur '+intToSTR(Tablo_actionneur[i].adresse); + end; @@ -8839,6 +8936,9 @@ begin tablo_actionneur[i].Raz:=checkRaz.checked; s:=encode_act_loc_son(i); RichAct.Lines[ligneClicAct]:=s; + + EditAct.Hint:='Actionneur/Détecteur '+intToSTR(Tablo_actionneur[i].adresse); + end; procedure TFormConfig.RadioButtonAigClick(Sender: TObject); @@ -8870,6 +8970,7 @@ begin tablo_actionneur[i].Raz:=checkRaz.checked; s:=encode_act_loc_son(i); RichAct.Lines[ligneClicAct]:=s; + EditAct.Hint:='Aiguillage '+intToSTR(Tablo_actionneur[i].adresse); end; @@ -9589,7 +9690,7 @@ begin end; end; -procedure TFormConfig.Button1Click(Sender: TObject); +procedure TFormConfig.ButtonTestFermeClick(Sender: TObject); var adr,cmd,erreur : integer; ts : Taccessoire; begin @@ -9602,7 +9703,7 @@ begin aff_acc:=false; end; -procedure TFormConfig.Button3Click(Sender: TObject); +procedure TFormConfig.ButtonTestOuvreClick(Sender: TObject); var adr,cmd,erreur : integer; ts : Taccessoire; begin @@ -9898,7 +9999,7 @@ begin config_modifie:=true; FormConfig.RichEdittrains.Clear; - // réafficher le richsig + // réafficher le richEditTrains for i:=1 to ntrains do begin s:=trains[i].nom_train+','+inttostr(trains[i].adresse)+','+intToSTR(trains[i].vitmax); @@ -10184,6 +10285,7 @@ procedure TFormConfig.Coller1Click(Sender: TObject); end; end; + end. diff --git a/UnitConfigTCO.pas b/UnitConfigTCO.pas index d806f7e..a9f664a 100644 --- a/UnitConfigTCO.pas +++ b/UnitConfigTCO.pas @@ -426,7 +426,6 @@ begin ok:=false; end; - AvecGrille:=checkDessineGrille.Checked; if ok then begin diff --git a/UnitPareFeu.pas b/UnitPareFeu.pas index bae5a3f..2348985 100644 --- a/UnitPareFeu.pas +++ b/UnitPareFeu.pas @@ -9,17 +9,17 @@ implementation uses SysUtils,ActiveX,ComObj,Variants,UnitPrinc,Graphics,unitConfig,verif_version; Const - NET_FW_ACTION_ALLOW = 1; - NET_FW_IP_PROTOCOL_TCP = 6; - NET_FW_IP_PROTOCOL_UDP = 17; - NET_FW_IP_PROTOCOL_ANY = 256; + NET_FW_ACTION_ALLOW=1; + NET_FW_IP_PROTOCOL_TCP=6; + NET_FW_IP_PROTOCOL_UDP=17; + NET_FW_IP_PROTOCOL_ANY=256; net_fw_profile2_private=2; net_fw_profile2_public=4; net_fw_rule_dir_out=2; net_fw_rule_dir_in=1; - NET_FW_MODIFY_STATE_OK = 0; - NET_FW_MODIFY_STATE_GP_OVERRIDE = 1; - NET_FW_MODIFY_STATE_INBOUND_BLOCKED = 2; + NET_FW_MODIFY_STATE_OK=0; + NET_FW_MODIFY_STATE_GP_OVERRIDE=1; + NET_FW_MODIFY_STATE_INBOUND_BLOCKED=2; nom_regle_cdm='CDM rail'; // Ajoute une règle à un programme en utilisant Microsoft Windows Firewall APIs. @@ -34,7 +34,7 @@ begin // Crée l'objet FwPolicy2 fwPolicy2:=CreateOleObject('HNetCfg.FwPolicy2'); RulesObject:=fwPolicy2.Rules; - CurrentProfiles:= fwPolicy2.CurrentProfileTypes; + CurrentProfiles:=fwPolicy2.CurrentProfileTypes; //CurrentProfiles:=net_fw_profile2_private or net_fw_profile2_public; //Crée l'objet de la règle. @@ -110,41 +110,41 @@ end; // =2 oui et active function CheckingRuleEnabled : integer; var - fwPolicy2,RulesObject,rule : OleVariant; - PolicyModifyState,CurrentProfiles : Integer; + fwPolicy2,RulesObject,regle : OleVariant; + CurrentProfiles : Integer; bIsEnabled,trouve : Boolean; oEnum : IEnumvariant; iValue : LongWord; s : string; begin - fwPolicy2:= CreateOleObject('HNetCfg.FwPolicy2'); + fwPolicy2:=CreateOleObject('HNetCfg.FwPolicy2'); RulesObject:=fwPolicy2.Rules; CurrentProfiles:=fwPolicy2.CurrentProfileTypes; trouve:=false ; oEnum:=IUnknown(Rulesobject._NewEnum) as IEnumVariant; - while (oEnum.Next(1,rule,iValue)=0) and not(trouve) do + while (oEnum.Next(1,regle,iValue)=0) and not(trouve) do begin - if (rule.Profiles And CurrentProfiles)<>0 then + if (regle.Profiles And CurrentProfiles)<>0 then begin - s:=rule.Name; + s:=regle.Name; trouve:=s=nom_regle_cdm; if trouve then begin Affiche('Description de l''autorisation socket pour CDM rail dans le pare-feu Windows',clyellow); Affiche('Nom : ' + s,clLime); - Affiche('Description : ' + rule.Description,clLime); - Affiche('Nom d''application: ' + rule.ApplicationName,clLime); - Affiche('Nom du service: ' + rule.ServiceName,clLime); - bIsEnabled:=rule.enabled; + Affiche('Description : ' + regle.Description,clLime); + Affiche('Nom d''application: ' + regle.ApplicationName,clLime); + Affiche('Nom du service: ' + regle.ServiceName,clLime); + bIsEnabled:=regle.enabled; if bisEnabled then affiche('Activée',clLime) else affiche('désactivée',clLime) ; - if (rule.Protocol=NET_FW_IP_PROTOCOL_TCP) or (rule.Protocol=NET_FW_IP_PROTOCOL_UDP) then + if (regle.Protocol=NET_FW_IP_PROTOCOL_TCP) or (regle.Protocol=NET_FW_IP_PROTOCOL_UDP) then begin - if (rule.Protocol=NET_FW_IP_PROTOCOL_TCP) then Affiche('Protocole : TCP',clLime); - if (rule.Protocol=NET_FW_IP_PROTOCOL_UDP) then Affiche('Protocole : UDP',clLime); - Affiche('Ports locaux : ' + rule.LocalPorts,clLime); - Affiche('Ports distants : ' + rule.RemotePorts,clLime); - Affiche('Adresses locales : ' + rule.LocalAddresses,clLime); - Affiche('Adresses distantes : ' + rule.RemoteAddresses,clLime); + if (regle.Protocol=NET_FW_IP_PROTOCOL_TCP) then Affiche('Protocole : TCP',clLime); + if (regle.Protocol=NET_FW_IP_PROTOCOL_UDP) then Affiche('Protocole : UDP',clLime); + Affiche('Ports locaux : ' + regle.LocalPorts,clLime); + Affiche('Ports distants : ' + regle.RemotePorts,clLime); + Affiche('Adresses locales : ' + regle.LocalAddresses,clLime); + Affiche('Adresses distantes : ' + regle.RemoteAddresses,clLime); end; end; end; diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index bf62417..806a977 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -1,6 +1,6 @@ object FormPrinc: TFormPrinc - Left = 86 - Top = 188 + Left = 22 + Top = 241 Width = 1227 Height = 671 Caption = 'Signaux complexes' @@ -17,8 +17,8 @@ object FormPrinc: TFormPrinc OnClose = FormClose OnCreate = FormCreate DesignSize = ( - 1211 - 612) + 1219 + 620) PixelsPerInch = 96 TextHeight = 13 object LabelTitre: TLabel @@ -1203,12 +1203,12 @@ object FormPrinc: TFormPrinc object SplitterH: TSplitter Left = 0 Top = 0 - Height = 590 + Height = 598 end object ScrollBox1: TScrollBox - Left = 646 + Left = 630 Top = 200 - Width = 546 + Width = 563 Height = 392 HorzScrollBar.Increment = 48 HorzScrollBar.Tracking = True @@ -1220,9 +1220,9 @@ object FormPrinc: TFormPrinc TabOrder = 0 end object GroupBox1: TGroupBox - Left = 646 + Left = 630 Top = 5 - Width = 266 + Width = 265 Height = 52 Anchors = [akTop, akRight] Caption = 'Commande d'#39'accessoires' @@ -1268,8 +1268,8 @@ object FormPrinc: TFormPrinc end object StatusBar1: TStatusBar Left = 0 - Top = 590 - Width = 1211 + Top = 598 + Width = 1219 Height = 22 Panels = <> SimplePanel = True @@ -1324,9 +1324,9 @@ object FormPrinc: TFormPrinc OnClick = BoutonRafClick end object ButtonArretSimu: TButton - Left = 8 - Top = 48 - Width = 89 + Left = 192 + Top = 88 + Width = 81 Height = 33 Caption = 'Arret simulation' TabOrder = 1 @@ -1377,11 +1377,11 @@ object FormPrinc: TFormPrinc OnClick = BoutonRazTrainsClick end object ButtonAffAnalyseCDM: TButton - Left = 184 - Top = 88 + Left = 8 + Top = 48 Width = 89 Height = 33 - Caption = 'Affiche fen'#234'tre analyse CDM' + Caption = 'Affiche le r'#233'seau CDM' TabOrder = 6 Visible = False WordWrap = True @@ -1460,7 +1460,7 @@ object FormPrinc: TFormPrinc end end object GroupBox3: TGroupBox - Left = 646 + Left = 630 Top = 64 Width = 265 Height = 129 @@ -1927,9 +1927,15 @@ object FormPrinc: TFormPrinc end object Analyser1: TMenuItem Caption = 'Importer le r'#233'seau CDM Rail' - Hint = 'Importer le r'#233'seau CDM rail (aiguillages)' + Hint = + 'Importer le r'#233'seau CDM rail (aiguillages, branches) et cr'#233'e le f' + + 'ichier de segments CDM' OnClick = Analyser1Click end + object Affiche_fenetre_CDM: TMenuItem + Caption = 'Affiche la fen'#234'tre du r'#233'seau CDM' + OnClick = Affiche_fenetre_CDMClick + end object N9: TMenuItem Caption = '-' end @@ -1990,7 +1996,7 @@ object FormPrinc: TFormPrinc OnClick = Copier1Click end object Coller1: TMenuItem - Caption = 'Coller' + Caption = 'Coller, compiler et importer le r'#233'seau CDM rail' OnClick = Coller1Click end end diff --git a/UnitPrinc.pas b/UnitPrinc.pas index 0a2ffd9..668deb6 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -38,8 +38,8 @@ Unit UnitPrinc; // Une loco sur un détecteur au lancement ne renvoie pas son état. Seuls les changements // d'état sont renvoyés par la centrale. -{$Q-} // pas de vérification du débordement des opérations de calcul -{$R-} // pas de vérification des limites d'index du tableau et des variables +//{$Q-} // pas de vérification du débordement des opérations de calcul +//{$R-} // pas de vérification des limites d'index du tableau et des variables interface @@ -168,6 +168,7 @@ type Analyser1: TMenuItem; Coller1: TMenuItem; ButtonAffAnalyseCDM: TButton; + Affiche_fenetre_CDM: TMenuItem; procedure FormCreate(Sender: TObject); procedure MSCommUSBLenzComm(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); @@ -250,6 +251,7 @@ type procedure Analyser1Click(Sender: TObject); procedure Coller1Click(Sender: TObject); procedure ButtonAffAnalyseCDMClick(Sender: TObject); + procedure Affiche_fenetre_CDMClick(Sender: TObject); private { Déclarations privées } procedure DoHint(Sender : Tobject); @@ -351,7 +353,7 @@ Taiguillage = record end; TFeu = record - adresse, aspect : integer; // adresse du feu, aspect (2 feux..9 feux 12=direction 2 feux .. 16=direction 6 feux) + adresse, aspect : integer; // adresse du signal, aspect (2 feux..9 feux 12=direction 2 feux .. 16=direction 6 feux) Img : TImage; // Pointeur sur structure TImage du feu Lbl : TLabel; // pointeur sur structure Tlabel du feu checkFB : TCheckBox; // pointeur sur structure Checkbox "demande feu blanc" @@ -409,13 +411,13 @@ var ack,portCommOuvert,traceTrames,AffMem,CDM_connecte,dupliqueEvt,affiche_retour_dcc, Raz_Acc_signaux,AvecInit,AvecTCO,terminal,Srvc_Aig,Srvc_Det,Srvc_Act,MasqueBandeauTCO, - Srvc_PosTrain,Srvc_Sig,debugtrames,LayParParam,AvecFVR,InverseMotif, + Srvc_Pos,Srvc_Sig,debugtrames,LayParParam,AvecFVR,InverseMotif, Hors_tension,traceSign,TraceZone,Ferme,parSocketLenz,ackCdm,PremierFD,doubleclic, NackCDM,MsgSim,StopSimu,succes,recu_cv,AffAigDet,AffTiers,AvecDemandeAiguillages, TraceListe,clignotant,nack,Maj_feux_cours,configNulle,LanceCDM,AvecInitAiguillages, AvecDemandeInterfaceUSB,AvecDemandeInterfaceEth,aff_acc,affiche_aigdcc,modeStkRetro, retEtatDet,roulage,init_aig_cours,affevt,placeAffiche,clicComboTrain,clicAdrTrain, - avec_splitter : boolean; + avec_splitter,fichier_module_cdm,Diffusion : boolean; tick,Premier_tick : longint; @@ -478,8 +480,8 @@ var record etat : boolean; // mémoires de zones des détecteurs train : string; - NumTrain // index du tableau de tous les trains - ,AdrTrain : integer; + NumTrain, // index du tableau de tous les trains + AdrTrain : integer; end; Tablo_actionneur : array[0..Max_actionneurs] of @@ -504,9 +506,9 @@ var commandeOuvre : integer; // commande d'ouverture (1 ou 2) NbVoies : integer; // Nombre de voies du PN Pulse : integer; // 0=commande maintenue 1=Impulsionnel - compteur : integer; // comptage actionneurs fermeture et décomptage actionneurs ouverturef + compteur : integer; // comptage actionneurs fermeture et décomptage actionneurs ouverture Voie : array [1..5] of record - ActFerme,ActOuvre : integer ; // actionneurs provoquant la fermeture et l'ouverture + ActFerme,ActOuvre : integer ; // actionneurs provoquant la fermeture et l'ouverture detZ1F,detZ2F,detZ1O,detZ2O : integer; // Zones de détection end; end; @@ -540,6 +542,9 @@ var TempoArret : integer; // tempo d'arret pour le timer TempoDemarre : integer; index_event_det_train : integer; // index du train en cours de roulage du tableau event_det_train + SbitMap : TBitmap ; // pointeur sur tampon sous l'icone de déplacement du train en page CDM + ax,ay,x,y : integer; // coordonnées du train (anciennes et nouvelles) en points windows + x0,y0,x1,y1 : integer; // ancien contour du tampon end; // éléments scannés et/ou verrouillés @@ -548,12 +553,14 @@ var typ : Tequipement; end; + // liste des trains placés Placement : array[1..10] of record train : string; detecteur,detdir : integer; inverse : boolean; end; + // liste des évènements détecteurs event_det : array[1..Max_event_det] of record adresse : integer; etat : boolean; @@ -561,7 +568,7 @@ var event_det_train : array[0..Max_Trains] of record NbEl,AdrTrain : integer; - signal_rouge : integer ; // si le train est arreté sur un signal au rouge + signal_rouge : integer ; // adresse du signal si le train est arreté sur un signal au rouge nom_train : string; // nom du train suivant : integer; // suivant prévisionnel à det1 et det2 Det : array[1..2] of record @@ -571,7 +578,6 @@ var end; Feu_supprime,Feu_sauve : Tfeu; Aig_supprime,Aig_sauve : TAiguillage; - Fimage : Timage; BrancheN : array[1..MaxBranches,1..MaxElBranches] of TBranche; {$R *.dfm} @@ -627,6 +633,8 @@ function signal_detecteur(detecteur : integer) : integer; function det_suiv_cont(det1,det2,alg : integer) : integer; function BTypeToChaine(BT : TEquipement) : string; function testBit(n : word;position : integer) : boolean; +procedure det_contigu(det1,det2 : integer;var suivant : integer;var ElSuiv : TEquipement); +Function SetBit(n : word;position : integer) : word; implementation @@ -4096,7 +4104,7 @@ begin Adr:=aiguillage[index].Adroit; if adr<>0 then begin - if A='Z' then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig + if (A='Z') or (a=#0) then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig trouve_element(adr,typeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].Btype; end @@ -4127,7 +4135,7 @@ begin Adr:=aiguillage[index].Adevie; if adr<>0 then begin - if A='Z' then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig + if (A='Z') or (a=#0) then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig trouve_element(adr,TypeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].Btype; end @@ -4198,7 +4206,7 @@ begin if adr<>0 then begin // Affiche('trouvé '+intToSTR(adr),clyellow); - if A='Z' then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig + if (A='Z') or (a=#0) then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig trouve_element(adr,TypeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].Btype; end @@ -4304,7 +4312,7 @@ begin end; end; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd 2 états est '+IntToSTR(adr)+a,clyellow); exit; @@ -4322,7 +4330,7 @@ begin Adr:=aiguillage[index].Ddevie; A:=aiguillage[index].DdevieB; end; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd 2 états est '+IntToSTR(adr)+a,clyellow); exit; @@ -4354,7 +4362,7 @@ begin end; end; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd 2 états est '+IntToSTR(adr)+a,clyellow); exit; @@ -4372,7 +4380,7 @@ begin Adr:=aiguillage[index].Ddroit; A:=aiguillage[index].DdroitB; end; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd 2 états est '+IntToSTR(adr)+a,clyellow); exit; @@ -4432,7 +4440,7 @@ begin A:=aiguillage[index2].AdevieB; end; if NivDebug=3 then AfficheDebug('cas1.1 tjd/s: '+s+' Adr='+intToSTR(adr)+A,clYellow); - if A='Z' then typeGen:=det else typeGen:=aig; //TypeEL=(1=détécteur 2=aig + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; //TypeEL=(1=détécteur 2=aig suivant_alg3:=adr; Actuel:=aiguillage[index2].Adresse; // substitution de la TJS if nivDebug=3 then Affichedebug('le port de destination de la tjd/s est '+IntToSTR(adr)+a,clyellow); @@ -4499,7 +4507,7 @@ begin Adr:=aiguillage[index2].Adroit; A:=aiguillage[index2].AdroitB; end; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; Actuel:=aiguillage[index2].Adresse; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd 4 états est '+IntToSTR(adr)+a,clyellow); @@ -4567,7 +4575,7 @@ begin Adr:=aiguillage[index2].Adroit; A:=aiguillage[index2].AdroitB; end; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; Actuel:=aiguillage[index2].Adresse; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd est '+IntToSTR(adr)+a,clyellow); @@ -4622,7 +4630,7 @@ begin A:=aiguillage[index2].AdevieB; end; if NivDebug=3 then AfficheDebug('cas4.1 tjd: '+s+' Adr='+intToSTR(adr)+A,clYellow); - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; Actuel:=aiguillage[index2].Adresse; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd est '+IntToSTR(adr)+a,clyellow); @@ -4636,7 +4644,7 @@ begin if NivDebug=3 then AfficheDebug('cas tjs en courbe1',clYellow); A:=aiguillage[index_aig(AdrTjdP)].AdevieB; Adr:=aiguillage[index_aig(AdrTjdP)].Adevie; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; Actuel:=aiguillage[index2].Adresse; suivant_alg3:=adr; if nivDebug=3 then Affichedebug('le port de destination de la tjd est '+IntToSTR(adr)+a,clyellow); @@ -4650,7 +4658,7 @@ begin if NivDebug=3 then AfficheDebug('cas1 tjs en courbe 2',clYellow); A:=aiguillage[index_aig(AdrTjdP)].AdevieB; Adr:=aiguillage[index_aig(AdrTjdP)].Adevie; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; suivant_alg3:=adr; Actuel:=aiguillage[index2].Adresse; if nivDebug=3 then Affichedebug('le port de destination de la tjd est '+IntToSTR(adr)+a,clyellow); @@ -4681,7 +4689,7 @@ begin if aiguillage[index].Ddevie=prec then begin adr:=aiguillage[index].Adevie;A:=aiguillage[index].AdevieB;end; if aiguillage[index].Ddroit=prec then begin adr:=aiguillage[index].Adroit;A:=aiguillage[index].AdroitB;end; - if A='Z' then typeGen:=det else typeGen:=aig; + if (A='Z') or (a=#0) then typeGen:=det else typeGen:=aig; suivant_alg3:=adr; if a='' then a:=' '; if (nivdebug>1) then Affichedebug('le port de destination du croisement '+intToSTR(aiguillage[index].adresse)+' est '+IntToSTR(adr)+a,clyellow); @@ -4709,7 +4717,7 @@ begin if NivDebug=3 then AfficheDebug('Aiguillage triple pris en pointe droit',clYellow); A:=aiguillage[index].AdroitB; Adr:=aiguillage[index].Adroit; - if A='Z' then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig + if (A='Z') or (a=#0) then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; suivant_alg3:=adr;exit; @@ -4719,7 +4727,7 @@ begin if NivDebug=3 then AfficheDebug('Aiguillage triple dévié1 (à gauche)',clYellow); A:=aiguillage[index].AdevieB; Adr:=aiguillage[index].Adevie; - if A='Z' then TypeEl:=det else TypeEL:=aig; + if (A='Z') or (a=#0) then TypeEl:=det else TypeEL:=aig; trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; suivant_alg3:=adr;exit; @@ -4729,7 +4737,7 @@ begin if NivDebug=3 then AfficheDebug('Aiguillage triple dévié2 (à droite)',clYellow); A:=aiguillage[index].Adevie2B; Adr:=aiguillage[index].Adevie2; - if A='Z' then TypeEl:=det else TypeEL:=aig; + if (A='Z') or (a=#0) then TypeEl:=det else TypeEL:=aig; trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; suivant_alg3:=adr; @@ -4790,7 +4798,7 @@ begin end; A:=aiguillage[index].ApointeB; Adr:=aiguillage[index].Apointe; - if A='Z' then TypeEl:=det else TypeEL:=aig; + if (A='Z') or (a=#0) then TypeEl:=det else TypeEL:=aig; trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; suivant_alg3:=Adr; @@ -4914,6 +4922,7 @@ end; // renvoie l'élément avant det2 si det1 et det2 sont contigus ou ne sont séparés que par des aiguillages +// les aiguillages n'ont pas besoin d'être positionnés // si det1 et det2 sont contigus sans aiguillages entre eux, çà renvoie det1 sinon renvoie l'aiguillage entre les 2 // s'ils ne sont pas contigus, renvoie 0 // Si un élément est inconnu, renvoie 9999 @@ -5237,6 +5246,7 @@ begin end; // renvoie les adresses des détecteurs adjacents au détecteur "adresse" (avant, après) +// les aiguillages entre det1 et det2 doivent être positionnés // résultat dans adj1 et adj2 en variable globale procedure Det_Adj(adresse : integer); var Adr,AdrFonc,Branche,AdrPrec,IndexBranche,i,Dir : integer; @@ -7383,13 +7393,16 @@ begin if iMaxZones then n:=1; - with TrainZone[i] do + if n>0 then begin - Nbre:=n; - Zone[n].det1:=det3; - Zone[n].det2:=AdrSuiv; - Nbre:=n; + if n>MaxZones then n:=1; + with TrainZone[i] do + begin + Nbre:=n; + Zone[n].det1:=det3; + Zone[n].det2:=AdrSuiv; + Nbre:=n; + end; end; // zone suivante en prévision det4:=detecteur_suivant_EL(det3,det,AdrSuiv,det,1); @@ -7665,7 +7678,7 @@ begin if traceListe then AfficheDebug('1-1 Traitement Train n°'+intToSTR(i)+' 1 détecteur',clyellow); // vérifier si l'élément du tableau et le nouveau sont contigus Det_Adj(det1); // renvoie les adresses des détecteurs adjacents au détecteur "det1" résultat dans adj1 et adj2 - suivok:=(Adj1=det3) or (Adj2=det3); + suivok:=((Adj1=det3) and (adj1<9999)) or ((Adj2=det3) and (adj2<9990)); if suivok then begin Train_ch:=event_det_train[i].nom_train; @@ -7742,7 +7755,7 @@ begin // test si det1, det2 et det3 sont contigus malgré aig mal positionnés det_suiv:=det_suiv_cont(det1,det2,1); // test si le suivant de det1 à det2 est bien le nouveau détecteur (det3) if traceliste then affichedebug('Le suivant aux '+intToSTR(det1)+' '+intToSTR(det2)+' est '+intToSTR(det_suiv),couleur); - SuivOk:=det_suiv=det3; + SuivOk:=(det_suiv=det3) and (det_suiv<9990); CasAig:=false; if not(SuivOk) then @@ -7768,7 +7781,7 @@ begin // ici on cherche le suivant à det2 det3, algo=1 event_det_tick[N_event_tick].train:=i; if not(casAig) then AdrSuiv:=detecteur_suivant_el(det2,det,det3,det,0); // dans le cas de CasAig, alors adrSuiv=9996 donc AdrSuiv est calculé plus haut - event_det_train[i].suivant:=AdrSuiv; + if AdrSuiv<9990 then event_det_train[i].suivant:=AdrSuiv; if TraceListe then AfficheDebug('le sursuivant est '+intToSTR(adrsuiv),couleur); if (Adrsuiv>=9990) and not(casaig) then begin @@ -7943,7 +7956,7 @@ begin // front descendant sur détecteur 2 det_suiv:=det_suiv_cont(det1,det2,1); // test si le suivant de det1 à det2 est bien le nouveau détecteur (det3) if traceliste then affichedebug('Le suivant aux '+intToSTR(det1)+' '+intToSTR(det2)+' est '+intToSTR(det_suiv),clWhite); - if (det_suiv=det3) then + if (det_suiv=det3) and (det_suiv<9990) then begin event_det_tick[N_event_tick].train:=i; if TraceListe then AfficheDebug('La route est valide car les détecteurs '+intToSTR(det2)+' '+intToSTR(det3)+' sont contigus',couleur); @@ -7987,17 +8000,20 @@ begin if idet2) or (TrainZone[i].Zone[n].det2<>det3) then + if n>0 then begin - n:=TrainZone[i].Nbre+1; - if n>MaxZones then n:=1; - TrainZone[i].Nbre:=n; - TrainZone[i].Zone[n].det1:=det2; - TrainZone[i].Zone[n].det2:=det3; - TrainZone[i].Nbre:=n; - // zone suivante en prévision - det4:=detecteur_suivant_EL(det2,det,det3,det,1); - TrainPrevZone[i][1]:=det4; + if (TrainZone[i].Zone[n].det1<>det2) or (TrainZone[i].Zone[n].det2<>det3) then + begin + n:=TrainZone[i].Nbre+1; + if n>MaxZones then n:=1; + TrainZone[i].Nbre:=n; + TrainZone[i].Zone[n].det1:=det2; + TrainZone[i].Zone[n].det2:=det3; + TrainZone[i].Nbre:=n; + // zone suivante en prévision + det4:=detecteur_suivant_EL(det2,det,det3,det,1); + TrainPrevZone[i][1]:=det4; + end; end; end; // affichages @@ -8045,6 +8061,7 @@ begin for i:=1 to N_trains do begin i2:=event_det_train[i].Suivant; + if i2>NbMemZone then begin AfficheDebug('Erreur 715 : détecteur '+intToSTR(i2)+' trop grand',clred);exit;end; SuivOk:=event_det_train[i].Det[2].etat ; det_adj(det3); if (adj1=i2) or (adj2=i2) then @@ -8664,14 +8681,17 @@ begin if idet2) or (TrainZone[i].Zone[n].det2<>det3) then + if n>0 then begin - n:=TrainZone[i].Nbre+1; - if n>MaxZones then n:=1; - TrainZone[i].Nbre:=n; - TrainZone[i].Zone[n].det1:=det2; - TrainZone[i].Zone[n].det2:=det3; - TrainZone[i].Nbre:=n; + if (TrainZone[i].Zone[n].det1<>det2) or (TrainZone[i].Zone[n].det2<>det3) then + begin + n:=TrainZone[i].Nbre+1; + if n>MaxZones then n:=1; + TrainZone[i].Nbre:=n; + TrainZone[i].Zone[n].det1:=det2; + TrainZone[i].Zone[n].det2:=det3; + TrainZone[i].Nbre:=n; + end; // zone suivante en prévision det4:=detecteur_suivant_EL(det2,det,det3,det,1); TrainPrevZone[i][1]:=det4; @@ -9994,7 +10014,7 @@ begin result:=''; end; -// décodage d'une chaine simple de la rétrosignalisation de la centrale +// décodage d'une chaine simple Xpressnet de la rétrosignalisation de la centrale // en sortie, la chaine chaineINT est supprimée de la partie traitée function decode_chaine_retro_Xpress(chaineINT : string) : string ; var msg : string; @@ -10369,24 +10389,24 @@ begin InputMode:=comInputModeBinary; end; - portCommOuvert:=true; - try - Formprinc.MSCommUSBLenz.portopen:=true; - except - portCommOuvert:=false; - end; + portCommOuvert:=true; + try + Formprinc.MSCommUSBLenz.portopen:=true; + except + portCommOuvert:=false; + end; - if portCommOuvert then + if portCommOuvert then + begin + Affiche('Port COM'+intToSTR(port)+' ouvert',clLime); + sleep(1000); + trouve:=test_protocole; + if not(trouve) then begin - Affiche('Port COM'+intToSTR(port)+' ouvert',clLime); - sleep(1000); - trouve:=test_protocole; - if not(trouve) then - begin - portCommOuvert:=false; - Formprinc.MSCommUSBLenz.portopen:=false; - end; + portCommOuvert:=false; + Formprinc.MSCommUSBLenz.portopen:=false; end; + end; if trouve then result:=port else result:=0; end; @@ -10422,7 +10442,7 @@ end; procedure connecte_interface_ethernet; begin etat_init_interface:=0; - // sinon ouvrir socket vers la centrale + // ouvrir socket vers la centrale // Initialisation de la comm socket LENZ if AdresseIP<>'0' then begin @@ -10439,6 +10459,7 @@ begin end; end; +// connecte la centrale en USB/COM en explorant les ports USB/COM de 1 à MaxComPort procedure connecte_usb; var numport,erreur : integer; s : string; @@ -10496,6 +10517,7 @@ begin end; end; +// renvoie le handle de la frnêtre du programme de processID (CDMrail) Function GetWindowFromID(ProcessID : Cardinal): THandle; Var TestID : Cardinal; TestHandle : Thandle; @@ -10661,7 +10683,7 @@ begin end else begin - ShowMessage('CDM rail introuvable : '+#13#10+'Erreur='+intToSTR(retour)); + Affiche('CDM rail introuvable. Erreur='+intToSTR(retour),clred); lance_CDM:=false; exit; end; @@ -10674,7 +10696,7 @@ begin Affiche('Lance les fonctions automatiques de CDM',clyellow); Sleep(3000); ProcessRunning(s); // récupérer le handle de CDM - SetForegroundWindow(CDMhd); + SetForegroundWindow(CDMhd); // met CDM en premier plan pour le télécommander par le clavier simulé Application.ProcessMessages; // démarre le serveur IP : il faut avoir chargé un réseau sinon le permier menu est fermé------------------------------------ @@ -10765,7 +10787,7 @@ end; procedure Raz_reservations ; var i : integer; begin - // raz des réservations + // raz des réservations for i:=1 to MaxAiguillage do aiguillage[i].AdrTrain:=0; end; @@ -10916,24 +10938,21 @@ function GetMACAdress: string; var NCB: PNCB; Adapter: PAdapterStatus; - - URetCode: PChar; - RetCode: char; + RetCode: Ansichar; I: integer; Lenum: PlanaEnum; _SystemID: string; - TMPSTR: string; begin - Result := ''; - _SystemID := ''; - Getmem(NCB, SizeOf(TNCB)); - Fillchar(NCB^, SizeOf(TNCB), 0); + Result:=''; + _SystemID:=''; + Getmem(NCB,SizeOf(TNCB)); + Fillchar(NCB^,SizeOf(TNCB),0); - Getmem(Lenum, SizeOf(TLanaEnum)); - Fillchar(Lenum^, SizeOf(TLanaEnum), 0); + Getmem(Lenum,SizeOf(TLanaEnum)); + Fillchar(Lenum^,SizeOf(TLanaEnum),0); - Getmem(Adapter, SizeOf(TAdapterStatus)); - Fillchar(Adapter^, SizeOf(TAdapterStatus), 0); + Getmem(Adapter,SizeOf(TAdapterStatus)); + Fillchar(Adapter^,SizeOf(TAdapterStatus),0); Lenum.Length := chr(0); NCB.ncb_command := chr(NCBENUM); @@ -10941,76 +10960,76 @@ begin NCB.ncb_length := SizeOf(Lenum); RetCode := Netbios(NCB); - i := 0; + i:=0; repeat - Fillchar(NCB^, SizeOf(TNCB), 0); - Ncb.ncb_command := chr(NCBRESET); - Ncb.ncb_lana_num := lenum.lana[I]; - RetCode := Netbios(Ncb); + Fillchar(NCB^,SizeOf(TNCB), 0); + Ncb.ncb_command:=chr(NCBRESET); + Ncb.ncb_lana_num:=lenum.lana[I]; + RetCode:=Netbios(Ncb); - Fillchar(NCB^, SizeOf(TNCB), 0); - Ncb.ncb_command := chr(NCBASTAT); - Ncb.ncb_lana_num := lenum.lana[I]; + Fillchar(NCB^,SizeOf(TNCB), 0); + Ncb.ncb_command:=chr(NCBASTAT); + Ncb.ncb_lana_num:=lenum.lana[I]; // Must be 16 - Ncb.ncb_callname := '* '; + Ncb.ncb_callname:='* '; - Ncb.ncb_buffer := Pointer(Adapter); + Ncb.ncb_buffer:=Pointer(Adapter); - Ncb.ncb_length := SizeOf(TAdapterStatus); - RetCode := Netbios(Ncb); - //---- calc _systemId from mac-address[2-5] XOR mac-address[1]... - if (RetCode = chr(0)) or (RetCode = chr(6)) then + Ncb.ncb_length:=SizeOf(TAdapterStatus); + RetCode:=Netbios(Ncb); + //---- calc _systemId de la mac-address[2-5] XOR mac-address[1]... + if (RetCode=chr(0)) or (RetCode=chr(6)) then begin _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' + - IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' + - IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' + - IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' + - IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' + - IntToHex(Ord(Adapter.adapter_address[5]), 2); + IntToHex(Ord(Adapter.adapter_address[1]),2) + '-' + + IntToHex(Ord(Adapter.adapter_address[2]),2) + '-' + + IntToHex(Ord(Adapter.adapter_address[3]),2) + '-' + + IntToHex(Ord(Adapter.adapter_address[4]),2) + '-' + + IntToHex(Ord(Adapter.adapter_address[5]),2); end; Inc(i); - until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00'); + until (i>=Ord(Lenum.Length)) or (_SystemID<>'00-00-00-00-00-00'); FreeMem(NCB); FreeMem(Adapter); FreeMem(Lenum); - GetMacAdress := _SystemID; + GetMacAdress:=_SystemID; end; // ex2 -function GetAdapterInfo(Lana: Char): String; +function GetAdapterInfo(Lana: AnsiChar): String; var Adapter: TAdapterStatus; NCB: TNCB; begin - FillChar(NCB, SizeOf(NCB), 0); - NCB.ncb_command := Char(NCBRESET); - NCB.ncb_lana_num := Lana; - if Netbios(@NCB) <> Char(NRC_GOODRET) then + FillChar(NCB,SizeOf(NCB),0); + NCB.ncb_command:=Char(NCBRESET); + NCB.ncb_lana_num:=Lana; + if Netbios(@NCB)<>Char(NRC_GOODRET) then begin - Result := 'mac not found'; + Result:='mac non trouvée'; Exit; end; - FillChar(NCB, SizeOf(NCB), 0); - NCB.ncb_command := Char(NCBASTAT); - NCB.ncb_lana_num := Lana; - NCB.ncb_callname := '*'; + FillChar(NCB,SizeOf(NCB), 0); + NCB.ncb_command:=Char(NCBASTAT); + NCB.ncb_lana_num:=Lana; + NCB.ncb_callname:='*'; - FillChar(Adapter, SizeOf(Adapter), 0); - NCB.ncb_buffer := @Adapter; - NCB.ncb_length := SizeOf(Adapter); - if Netbios(@NCB) <> Char(NRC_GOODRET) then + FillChar(Adapter,SizeOf(Adapter), 0); + NCB.ncb_buffer:=@Adapter; + NCB.ncb_length:=SizeOf(Adapter); + if Netbios(@NCB)<>Char(NRC_GOODRET) then begin - Result := 'mac not found'; + Result:='mac non trouvée'; Exit; end; - Result := - IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' + - IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' + - IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' + - IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' + - IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' + - IntToHex(Byte(Adapter.adapter_address[5]), 2); + Result:= + IntToHex(Byte(Adapter.adapter_address[0]),2) + '-' + + IntToHex(Byte(Adapter.adapter_address[1]),2) + '-' + + IntToHex(Byte(Adapter.adapter_address[2]),2) + '-' + + IntToHex(Byte(Adapter.adapter_address[3]),2) + '-' + + IntToHex(Byte(Adapter.adapter_address[4]),2) + '-' + + IntToHex(Byte(Adapter.adapter_address[5]),2); end; function GetMACAddress: string; @@ -11018,15 +11037,15 @@ var AdapterList: TLanaEnum; NCB: TNCB; begin - FillChar(NCB, SizeOf(NCB), 0); - NCB.ncb_command := Char(NCBENUM); - NCB.ncb_buffer := @AdapterList; - NCB.ncb_length := SizeOf(AdapterList); + FillChar(NCB,SizeOf(NCB),0); + NCB.ncb_command:=Char(NCBENUM); + NCB.ncb_buffer:=@AdapterList; + NCB.ncb_length:=SizeOf(AdapterList); Netbios(@NCB); - if Byte(AdapterList.length) > 0 then - Result := GetAdapterInfo(AdapterList.lana[0]) + if Byte(AdapterList.length)>0 then + Result:=GetAdapterInfo(AdapterList.lana[0]) else - Result := 'mac not found'; + Result:='mac non trouvée'; end; // démarrage principal du programme signaux_complexes @@ -11049,7 +11068,7 @@ begin Srvc_Aig:=true; Srvc_Det:=true; Srvc_Act:=true; - Srvc_PosTrain:=false; + Srvc_Pos:=false; Srvc_sig:=false; DebugAffiche:=false; @@ -11066,7 +11085,9 @@ begin // box3=vitesses et fonctions F GroupBox3.Left:=633; GroupBox3.Top:=60; + GroupBox1.Left:=633; GroupBox3.visible:=true; + ScrollBox1.Left:=633; procetape(''); //0 @@ -11092,14 +11113,14 @@ begin avecRoulage:=0; formatY:=-1; AvecInit:=true; // &&&& avec initialisation des aiguillages ou pas - Diffusion:=AvecInit; // mode diffusion publique + Diffusion:=AvecInit; // mode diffusion publique + debug mise au point etc roulage1.visible:=false; FenRich.MaxLength:=$7FFFFFF0; OsBits:=0; if IsWow64Process then begin - OsBits:=64; + OsBits:=64; CheminProgrammes:=GetCurrentProcessEnvVar('PROGRAMFILES(X86)'); end else @@ -11108,6 +11129,8 @@ begin CheminProgrammes:=GetCurrentProcessEnvVar('PROGRAMFILES'); end; // version d'OS pour info + application.ProcessMessages; + if OsBits=64 then s:='OS 64 Bits' else s:='OS 32 Bits'; s:=DateToStr(date)+' '+TimeToStr(Time)+' '+s; Affiche(s,clLime); @@ -11226,6 +11249,8 @@ begin end; Application.HintHidePause:=30000; + Application.HintColor:=$70FFFF; + Application.HintPause:=400; visible:=true; // rend la form visible plus tot for i:=1 to MaxCdeDccpp do CdeDccpp[i]:=''; @@ -11289,6 +11314,14 @@ begin Affiche_memoire; modeStkRetro:=false; + // création des tampons de sauvegarde graphique pour le mouvement du train sur la fenetre cdm + for i:=1 to Max_Trains do + begin + trains[i].sbitmap:=Tbitmap.Create; + trains[i].SbitMap.width:=300; + trains[i].SbitMap.height:=300; + end; + // lancer CDM rail et le connecte si on le demande ; à faire après la création des feux et du tco procetape('Test CDM et son lancement'); @@ -11382,6 +11415,16 @@ begin procetape('Terminé !!'); Maj_feux(false); + // vérifier si le fichier de segments existe + fichier_module_CDM:=fileExists(NomModuleCDM); + formprinc.ButtonAffAnalyseCDM.Visible:=fichier_module_cdm; + if fichier_module_CDM then + begin + Affiche_fenetre_CDM.Enabled:=true; + lit_fichier_segments_cdm; + end + else Affiche_fenetre_CDM.Enabled:=false; + { With FenRich do begin ReadOnly:=false; @@ -12484,8 +12527,8 @@ begin begin train:=copy(commandeCDM,i+6,l-i-6); Delete(commandeCDM,i,l-i+1); - end; - + end; + i:=posEx('STATE=',commandeCDM,1);l:=posEx(';',commandeCDM,i); if (i<>0) and (l<>0) then begin @@ -12493,14 +12536,14 @@ begin val(ss,etat,erreur); Delete(commandeCDM,i,l-i+1); end; - + i:=posEx('NAME=',commandeCDM,1);l:=posEx(';',commandeCDM,i); if (i<>0) and (l<>0) then begin nom:=copy(commandeCDM,i+6,l-i-6); Delete(commandeCDM,i,l-i+1); end; - + i:=posEx('OBJ=',commandeCDM,1);l:=posEx(';',commandeCDM,i); if (i<>0) and (l<>0) then begin @@ -12508,7 +12551,7 @@ begin val(ss,objet,erreur); Delete(commandeCDM,i,l-i+1); end; - + Event_detecteur(Adr,etat=1,train); end ; @@ -12615,7 +12658,7 @@ begin // évènement position des trains - non stocké ni interprété // S-E-01-0039-CDMTRN-SPDXY|063|07|NAME=TRAIN_3;AD=0;SPEED=3;X=24735;Y=19630;X2=16874;Y2=19630; - i:=pos('CDMTRN-SPDXY',commandeCDM); + i:=pos('CMDTRN-SPDXY',commandeCDM); if i<>0 then begin Delete(commandeCDM,i,12); @@ -12680,13 +12723,13 @@ begin s:=s+' Y2='+IntTostr(y2); Delete(commandeCDM,i,l-i+1); end; - + if fichier_module_CDM then Aff_train(adr,train,x,y,x2,y2); if afftiers then afficheDebug(s,clAqua); end; // évènement vitesse des trains - non stocké ni interprété //S-E-01-0189-CDMTRN-SPEED|054|06|NAME=TRAIN_3;AD=0;SPEED=99;RMAX=120;CMAX=120;REQ=8; - i:=pos('CDMTRN-SPEED',commandeCDM); + i:=pos('CMDTRN-SPEED',commandeCDM); if i<>0 then begin Delete(commandeCDM,i,12); @@ -12715,7 +12758,7 @@ begin s:=s+' SPEED='+IntToSTR(vitesse); Delete(commandeCDM,i,l-i+1); end; - + i:=posEx('RMAX=',commandeCDM,1);l:=posEx(';',commandeCDM,i); if (i<>0) and (l<>0) then begin @@ -12744,12 +12787,12 @@ begin end; if afftiers then afficheDebug(s,clAqua); - - end; - + + end; + // évènement port CDM - non stocké ni interprété // S-E-01-0188-CDMTRN-P_CDM|060|07|NAME=TRAIN_3;AD=0;SPEED=99;SEG=38;PORT=1;X=35565;Y=12364; - i:=pos('CDMTRN-P_CDM',commandeCDM); + i:=pos('CMDTRN-P_CDM',commandeCDM); if i<>0 then begin Delete(commandeCDM,i,12); @@ -12778,7 +12821,7 @@ begin s:=s+' SPEED='+IntToSTR(vitesse); Delete(commandeCDM,i,l-i+1); end; - + i:=posEx('SEG=',commandeCDM,1);l:=posEx(';',commandeCDM,i); if (i<>0) and (l<>0) then begin @@ -13900,11 +13943,13 @@ begin begin Affiche('Pas de module détecté',clyellow); Affiche('Procédure: dans CDM RAIL ouvrez votre réseau ; Menu ... / TrackDrawing / Module Display',clLime); + Affiche('Attention : nécessite la version >=23.05 de CDM',clLime); Affiche('Cela ouvre une fenêtre DEBUG dans cdm',clLime); Affiche('Dans cette fenêtre, faire Clic droit puis "sélectionner tout" et "copier"',clLime); - Affiche('Dans Signaux complexes, clic droit et "coller ; puis menu divers / Analyse des modules ',clLime); - Affiche('Dans la fenêtre graphique d''importation cliquer sur importer',clLime); - Affiche('Attention : nécessite la version >=23.05 de CDM',clLime); + Affiche(' ',clLime); + Affiche('Dans Signaux complexes, clic droit et "coller, compiler et importer le réseau CDM rail" ',clLime); + Affiche('Dans la fenêtre graphique d''importation cliquer sur "compiler"',clLime); + if lance_cdm(false) then @@ -13923,7 +13968,7 @@ begin KeybdInput(VK_DOWN,0); KeybdInput(VK_DOWN,KEYEVENTF_KEYUP); - KeybdInput(VK_RETURN,0); + KeybdInput(VK_RETURN,0); KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); KeybdInput(VK_RETURN,0); // valide le menu "track drawing" KeybdInput(VK_RETURN,KEYEVENTF_KEYUP); @@ -13942,7 +13987,6 @@ begin exit; end; - Analyse_seg; end; @@ -13956,16 +14000,24 @@ begin PasteFromClipboard; SetFocus; ReadOnly:=true; - end; + end; + compilation; end; procedure TFormPrinc.ButtonAffAnalyseCDMClick(Sender: TObject); begin - FormAnalyseCDM.WindowState:=wsMaximized; + //FormAnalyseCDM.WindowState:=wsMaximized; formAnalyseCDM.Show; end; + +procedure TFormPrinc.Affiche_fenetre_CDMClick(Sender: TObject); +begin + formAnalyseCDM.Show; + +end; + end. diff --git a/UnitSR.pas b/UnitSR.pas index 6707799..3713de0 100644 --- a/UnitSR.pas +++ b/UnitSR.pas @@ -428,7 +428,6 @@ begin labelCV26.Caption:='CV='+IntToSTR(etat2); feux[indexSig].SR[7].sortie1:=i; maj_db; - end; procedure TFormSR.ComboBoxAdr14Change(Sender: TObject); @@ -464,30 +463,28 @@ begin maj_db; end; - - procedure TFormSR.FormCreate(Sender: TObject); var i : integer; begin - for i:=0 to 19 do - begin - ComboBoxAdr1.items.add(etats[i]); - ComboBoxAdr2.items.add(etats[i]); - ComboBoxAdr3.items.add(etats[i]); - ComboBoxAdr4.items.add(etats[i]); - ComboBoxAdr5.items.add(etats[i]); - ComboBoxAdr6.items.add(etats[i]); - ComboBoxAdr7.items.add(etats[i]); - ComboBoxAdr8.items.add(etats[i]); - ComboBoxAdr9.items.add(etats[i]); - ComboBoxAdr10.items.add(etats[i]); - ComboBoxAdr11.items.add(etats[i]); - ComboBoxAdr12.items.add(etats[i]); - ComboBoxAdr13.items.add(etats[i]); - ComboBoxAdr14.items.add(etats[i]); - ComboBoxAdr15.items.add(etats[i]); - ComboBoxAdr16.items.add(etats[i]); - end; + for i:=0 to 19 do + begin + ComboBoxAdr1.items.add(etats[i]); + ComboBoxAdr2.items.add(etats[i]); + ComboBoxAdr3.items.add(etats[i]); + ComboBoxAdr4.items.add(etats[i]); + ComboBoxAdr5.items.add(etats[i]); + ComboBoxAdr6.items.add(etats[i]); + ComboBoxAdr7.items.add(etats[i]); + ComboBoxAdr8.items.add(etats[i]); + ComboBoxAdr9.items.add(etats[i]); + ComboBoxAdr10.items.add(etats[i]); + ComboBoxAdr11.items.add(etats[i]); + ComboBoxAdr12.items.add(etats[i]); + ComboBoxAdr13.items.add(etats[i]); + ComboBoxAdr14.items.add(etats[i]); + ComboBoxAdr15.items.add(etats[i]); + ComboBoxAdr16.items.add(etats[i]); + end; end; procedure TFormSR.BitBtnokClick(Sender: TObject); diff --git a/UnitTCO.dfm b/UnitTCO.dfm index 32f3124..2a53384 100644 --- a/UnitTCO.dfm +++ b/UnitTCO.dfm @@ -1,6 +1,6 @@ object FormTCO: TFormTCO - Left = 155 - Top = 53 + Left = 163 + Top = 46 Width = 1142 Height = 678 VertScrollBar.Visible = False @@ -22,8 +22,8 @@ object FormTCO: TFormTCO OnKeyPress = FormKeyPress OnMouseWheel = FormMouseWheel DesignSize = ( - 1126 - 639) + 1134 + 647) PixelsPerInch = 96 TextHeight = 13 object LabelCoord: TLabel @@ -81,13 +81,13 @@ object FormTCO: TFormTCO ParentFont = False end object ImageTemp: TImage - Left = 976 + Left = 888 Top = 96 Width = 97 Height = 97 end object ImageTemp2: TImage - Left = 976 + Left = 888 Top = 208 Width = 97 Height = 97 diff --git a/UnitTCO.pas b/UnitTCO.pas index 21d8d3b..ca02521 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -383,7 +383,7 @@ var FormTCO: TFormTCO; - Forminit,sourisclic,SelectionAffichee,TamponAffecte,entoure,Diffusion,TCO_modifie, + Forminit,sourisclic,SelectionAffichee,TamponAffecte,entoure,TCO_modifie, clicTCO,piloteAig,BandeauMasque,eval_format,sauve_tco,formConfCellTCOAff, drag,TCOActive,TCOCree : boolean; @@ -3251,6 +3251,7 @@ procedure affiche_cellule(x,y : integer); var i,repr,Xorg,Yorg,xt,yt,mode,adresse,Bimage,aspect,oriente,pied : integer; s : string; begin + //if tco[x,y].BImage=0 then exit; //Affiche('Affiche_cellule',clLime); PcanvasTCO.pen.Mode:=PmCopy; adresse:=tco[x,y].Adresse; @@ -5286,27 +5287,28 @@ begin if XclicCell>NbreCellX then exit; if YclicCell>NbreCellY then exit; Bimage:=tco[XClicCell,YClicCell].Bimage; + if formConfCellTCOAff then begin - - // si aiguillage, mettre à jour l'option de pilotage inverse - if (bimage=2) or (bimage=3) or (bimage=4) or (bimage=5) or (bimage=12) or (bimage=13) - or (bimage=14) or (bimage=15) or (bimage=24) then - begin - // aiguillage inversé - with FormConfCellTCO.CheckPinv do + // si aiguillage, mettre à jour l'option de pilotage inverse + if (bimage=2) or (bimage=3) or (bimage=4) or (bimage=5) or (bimage=12) or (bimage=13) + or (bimage=14) or (bimage=15) or (bimage=24) then begin - enabled:=true; - checked:=TCO[XClicCell,YClicCell].inverse; + + // aiguillage inversé + with FormConfCellTCO.CheckPinv do + begin + enabled:=true; + checked:=TCO[XClicCell,YClicCell].inverse; + end; + CheckPinv.checked:=TCO[XClicCell,YClicCell].inverse; + CheckPinv.enabled:=true ; + end + else + begin + CheckPinv.enabled:=false; + FormConfCellTCO.checkPinv.enabled:=false; end; - CheckPinv.checked:=TCO[XClicCell,YClicCell].inverse; - CheckPinv.enabled:=true ; - end - else - begin - CheckPinv.enabled:=false; - FormConfCellTCO.checkPinv.enabled:=false; - end; end; // si voie ou rien ou signal ou quai @@ -5333,6 +5335,10 @@ begin ComboRepr.ItemIndex:=tco[XClicCell,yClicCell].repr; ShapeCoulFond.Brush.Color:=tco[XClicCell,yClicCell].CouleurFond; + s:='El='+intToSTR(tco[XClicCell,YClicCell].BImage); + if tco[XClicCell,YClicCell].adresse<>0 then s:=s+' Adr='+intToSTR(tco[XClicCell,YClicCell].adresse); + //hint:=s; + if not(selectionaffichee) then _entoure_cell_clic; actualise; // actualise la fenetre de config cellule clicTCO:=false; diff --git a/Unitplace.pas b/Unitplace.pas index 4d87237..4692b21 100644 --- a/Unitplace.pas +++ b/Unitplace.pas @@ -174,20 +174,6 @@ begin if (prec<9990) then begin inc(it); - //detecteur[detect].adrTrain:=trains[i].adresse; - //event_detecteur(detect,true,trains[i].nom_train); - { - SauvefiltrageDet0:=filtrageDet0; - filtrageDet0:=0; - Affiche(intToSTR(prec)+' 1',clyellow); - event_detecteur(prec,true,NomTrain); - Affiche(intToSTR(prec)+' 0',clyellow); - event_detecteur(prec,false,NomTrain); - - Affiche(intToSTR(detect)+' 1',clyellow); - event_detecteur(detect,true,NomTrain); - filtrageDet0:=SauveFiltrageDet0; - } detecteur[detect].etat:=true; detecteur[detect].AdrTrain:=trains[i].adresse; @@ -366,7 +352,7 @@ begin trouve:=true; roulage:=true; AdrTrain:=detecteur[AdrDet].AdrTrain; - AdrFeu:=signal_detecteur(AdrDet); // trouve l'adresse du feu correspondant au détecteur + AdrFeu:=signal_detecteur(AdrDet); // trouve l'adresse du signal correspondant au détecteur // si il y a un signal sur le détecteur de démarrage du train est il au rouge? if adrFeu<>0 then diff --git a/reseau_gily_signal_ajoute_top.cdm b/reseau_gily_signal_ajoute_top.cdm new file mode 100644 index 0000000..8e44c2b --- /dev/null +++ b/reseau_gily_signal_ajoute_top.cdm @@ -0,0 +1,3583 @@ +reseau_gily_signal_ajoute_top.cdm + +Segment=2 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=23760 Ymin=11880 Xmax=28131 Ymax=14159 +StartAngle=4500 ArcAngle=4500 Rayon=5050 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24160 lYc=8709 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=-1 xc0=0 yc0=-1 +DeltaDev2=0 xc=0 yc=-1 +Adresse=126 Adresse2=0 Duree=0 + Port=3 port x=27731 y=12280 z=0 + Angle=13500 Local=0 Connecte=1 + ConnecteAuPort=15 ConnecteAuSegment=13 + Port=4 port x=24160 y=13759 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=1028 ConnecteAuSegment=1026 + Periph=2744 Type=detector Pere=2 x=24172 y=13759 z=0 + Angle=8986 Bright=1 Bdown=1 + Location=99 Adresse=521 Status=1 + +Segment=13 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=27331 Ymin=8310 Xmax=29610 Ymax=12680 +StartAngle=0 ArcAngle=4500 Rayon=5050 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24160 lYc=8710 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=14 port x=29210 y=8710 z=0 + Angle=9000 Local=0 Connecte=1 + ConnecteAuPort=1017 ConnecteAuSegment=1016 + Port=15 port x=27731 y=12280 z=0 + Angle=-4500 Local=1 Connecte=1 + ConnecteAuPort=3 ConnecteAuSegment=2 + Periph=2745 Type=detector Pere=13 x=29209 y=8795 z=0 + Angle=162 Bright=0 Bdown=0 + Location=2 Adresse=521 Status=1 + +Segment=16 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=3636 Ymin=12324 Xmax=6189 Ymax=13474 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=10 Adresse2=0 Duree=2 + Port=17 port x=4036 y=13073 z=0 + Angle=3 Local=0 Connecte=1 + ConnecteAuPort=795 ConnecteAuSegment=791 + Port=18 port x=5716 y=13074 z=0 + Angle=-17997 Local=1 Connecte=1 + ConnecteAuPort=8775 ConnecteAuSegment=8774 + Port=19 port x=5789 y=12724 z=0 + Angle=15867 Local=2 Connecte=1 + ConnecteAuPort=1453 ConnecteAuSegment=1452 + +Segment=20 arc +Nport=2 Nperiph=0 Ninter=1 +Xmin=23750 Ymin=11387 Xmax=27647 Ymax=13470 +StartAngle=4500 ArcAngle=4500 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24150 lYc=8690 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=21 port x=27247 y=11787 z=0 + Angle=13500 Local=0 Connecte=1 + ConnecteAuPort=1339 ConnecteAuSegment=1334 + Port=22 port x=24150 y=13070 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=1023 ConnecteAuSegment=1021 + x=26148 y=12588 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=110 straight +Nport=2 Nperiph=1 Ninter=2 +Xmin=12020 Ymin=13359 Xmax=19520 Ymax=14160 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=111 port x=19120 y=13760 z=0 + Angle=-17999 Local=0 Connecte=1 + ConnecteAuPort=1027 ConnecteAuSegment=1026 + Port=112 port x=12420 y=13759 z=0 + Angle=1 Local=1 Connecte=1 + ConnecteAuPort=8825 ConnecteAuSegment=8823 + Periph=2763 Type=detector Pere=110 x=12456 y=13759 z=0 + Angle=9001 Bright=0 Bdown=1 + Location=99 Adresse=524 Status=1 + x=19120 y=13760 z=0 + MirrorZ=1000 MirrorParent=0 + x=12420 y=13759 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=133 straight +Nport=2 Nperiph=1 Ninter=2 +Xmin=1960 Ymin=13359 Xmax=6120 Ymax=14170 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=134 port x=5720 y=13759 z=0 + Angle=17981 Local=0 Connecte=1 + ConnecteAuPort=8801 ConnecteAuSegment=8800 + Port=135 port x=2360 y=13770 z=0 + Angle=-19 Local=1 Connecte=1 + ConnecteAuPort=863 ConnecteAuSegment=861 + Periph=8772 Type=actuator Pere=133 x=2586 y=13769 z=0 + Angle=8981 Bright=0 Bdown=1 + Location=93 Adresse=834 Status=23 + x=5720 y=13759 z=0 + MirrorZ=1000 MirrorParent=0 + x=2970 y=13603 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=160 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=-4100 Ymin=8289 Xmax=-2017 Ymax=12187 +StartAngle=13500 ArcAngle=4500 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=680 lYc=8689 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=161 port x=-2417 y=11787 z=0 + Angle=-13500 Local=0 Connecte=1 + ConnecteAuPort=3700 ConnecteAuSegment=3695 + Port=162 port x=-3700 y=8689 z=0 + Angle=9000 Local=1 Connecte=1 + ConnecteAuPort=170 ConnecteAuSegment=169 + Periph=9947 Type=detector Pere=160 x=-3083 y=10930 z=0 + Angle=14922 Bright=0 Bdown=1 + Location=31 Adresse=531 Status=1 + +Segment=169 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=-4100 Ymin=5192 Xmax=-2017 Ymax=9089 +StartAngle=18000 ArcAngle=4500 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=680 lYc=8689 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=170 port x=-3700 y=8689 z=0 + Angle=-9000 Local=0 Connecte=1 + ConnecteAuPort=162 ConnecteAuSegment=160 + Port=171 port x=-2417 y=5592 z=0 + Angle=13500 Local=1 Connecte=1 + ConnecteAuPort=173 ConnecteAuSegment=172 + Periph=2756 Type=detector Pere=169 x=-3699 y=8611 z=0 + Angle=-17898 Bright=0 Bdown=0 + Location=2 Adresse=518 Status=1 + +Segment=172 arc +Nport=2 Nperiph=4 Ninter=0 +Xmin=-2817 Ymin=3909 Xmax=1081 Ymax=5992 +StartAngle=-13500 ArcAngle=4500 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=681 lYc=8689 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=173 port x=-2417 y=5592 z=0 + Angle=-4500 Local=0 Connecte=1 + ConnecteAuPort=171 ConnecteAuSegment=169 + Port=174 port x=681 y=4309 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=501 ConnecteAuSegment=500 + Periph=2271 Type=signal Pere=172 x=-731 y=4543 z=0 + Angle=-10881 Bright=0 Bdown=0 + Location=58 Adresse=47 Status=1 + Periph=2272 Type=detector Pere=172 x=-731 y=4543 z=0 + Angle=-10881 Bright=0 Bdown=0 + Location=58 Adresse=0 Status=0 + Periph=2757 Type=detector Pere=172 x=-731 y=4543 z=0 + Angle=-10907 Bright=1 Bdown=1 + Location=58 Adresse=518 Status=1 + Periph=4544 Type=actuator Pere=172 x=-212 y=4401 z=0 + Angle=-10176 Bright=0 Bdown=0 + Location=73 Adresse=817 Status=23 + +Segment=202 crossing +Nport=4 Nperiph=0 Ninter=0 +Xmin=1961 Ymin=3588 Xmax=4441 Ymax=5030 +StartAngle=18000 ArcAngle=2250 Rayon=3529 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=1680 longueurDev=1552 +DeltaDev=643 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=100 Adresse2=0 Duree=0 + Port=203 port x=4041 y=4309 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=214 ConnecteAuSegment=213 + Port=204 port x=3977 y=4630 z=0 + Angle=-15750 Local=1 Connecte=1 + ConnecteAuPort=2082 ConnecteAuSegment=2079 + Port=205 port x=2361 y=4309 z=0 + Angle=0 Local=2 Connecte=1 + ConnecteAuPort=502 ConnecteAuSegment=500 + Port=206 port x=2425 y=3988 z=0 + Angle=2250 Local=3 Connecte=1 + ConnecteAuPort=2102 ConnecteAuSegment=2099 + +Segment=213 straight +Nport=2 Nperiph=3 Ninter=0 +Xmin=3641 Ymin=3909 Xmax=7791 Ymax=4709 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=214 port x=4041 y=4309 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=203 ConnecteAuSegment=202 + Port=215 port x=7391 y=4309 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=258 ConnecteAuSegment=257 + Periph=966 Type=signal Pere=213 x=5232 y=4309 z=0 + Angle=-9000 Bright=1 Bdown=1 + Location=35 Adresse=0 Status=0 + Periph=967 Type=detector Pere=213 x=5232 y=4309 z=0 + Angle=-9000 Bright=1 Bdown=1 + Location=35 Adresse=0 Status=0 + Periph=4542 Type=actuator Pere=213 x=4816 y=4309 z=0 + Angle=-9000 Bright=0 Bdown=0 + Location=23 Adresse=813 Status=23 + +Segment=218 straight +Nport=2 Nperiph=4 Ninter=0 +Xmin=2028 Ymin=3253 Xmax=6178 Ymax=4054 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=219 port x=2428 y=3654 z=0 + Angle=-2 Local=0 Connecte=1 + ConnecteAuPort=2101 ConnecteAuSegment=2099 + Port=220 port x=5778 y=3653 z=0 + Angle=17998 Local=1 Connecte=1 + ConnecteAuPort=2138 ConnecteAuSegment=2137 + Periph=2259 Type=signal Pere=218 x=2865 y=3654 z=0 + Angle=-9002 Bright=0 Bdown=1 + Location=13 Adresse=57 Status=1 + Periph=2260 Type=detector Pere=218 x=2865 y=3654 z=0 + Angle=-9002 Bright=0 Bdown=1 + Location=13 Adresse=0 Status=0 + Periph=3655 Type=actuator Pere=218 x=2718 y=3654 z=0 + Angle=-9002 Bright=1 Bdown=1 + Location=8 Adresse=808 Status=23 + Periph=2758 Type=detector Pere=218 x=3930 y=3654 z=0 + Angle=-9002 Bright=0 Bdown=0 + Location=44 Adresse=519 Status=1 + +Segment=257 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=6991 Ymin=3909 Xmax=11141 Ymax=4709 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=258 port x=7391 y=4309 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=215 ConnecteAuSegment=213 + Port=259 port x=10741 y=4309 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=261 ConnecteAuSegment=260 + +Segment=260 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=10341 Ymin=3909 Xmax=14491 Ymax=4709 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=261 port x=10741 y=4309 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=259 ConnecteAuSegment=257 + Port=262 port x=14091 y=4309 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=296 ConnecteAuSegment=295 + Periph=2750 Type=detector Pere=260 x=11873 y=4309 z=0 + Angle=-9000 Bright=1 Bdown=0 + Location=33 Adresse=523 Status=1 + +Segment=266 arc +Nport=2 Nperiph=3 Ninter=0 +Xmin=27331 Ymin=1389 Xmax=29610 Ymax=5760 +StartAngle=-4500 ArcAngle=4500 Rayon=5050 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24161 lYc=5360 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=267 port x=27731 y=1789 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=271 ConnecteAuSegment=269 + Port=268 port x=29210 y=5360 z=0 + Angle=-9000 Local=1 Connecte=1 + ConnecteAuPort=1255 ConnecteAuSegment=1254 + Periph=1534 Type=signal Pere=266 x=28724 y=3197 z=0 + Angle=-2536 Bright=1 Bdown=0 + Location=43 Adresse=0 Status=0 + Periph=1535 Type=detector Pere=266 x=28724 y=3197 z=0 + Angle=-2536 Bright=1 Bdown=0 + Location=43 Adresse=0 Status=0 + Periph=3656 Type=actuator Pere=266 x=29052 y=4102 z=0 + Angle=-1442 Bright=1 Bdown=1 + Location=67 Adresse=812 Status=23 + +Segment=269 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=23761 Ymin=-90 Xmax=28131 Ymax=2189 +StartAngle=-9000 ArcAngle=4500 Rayon=5050 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24161 lYc=5360 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=270 port x=24161 y=310 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=283 ConnecteAuSegment=281 + Port=271 port x=27731 y=1789 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=267 ConnecteAuSegment=266 + +Segment=275 arc +Nport=2 Nperiph=4 Ninter=0 +Xmin=26847 Ymin=1843 Xmax=28930 Ymax=5740 +StartAngle=-4500 ArcAngle=4500 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24150 lYc=5340 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=276 port x=27247 y=2243 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=280 ConnecteAuSegment=278 + Port=277 port x=28530 y=5340 z=0 + Angle=-9000 Local=1 Connecte=1 + ConnecteAuPort=1251 ConnecteAuSegment=1250 + Periph=2273 Type=signal Pere=275 x=28523 y=5097 z=0 + Angle=-318 Bright=0 Bdown=0 + Location=92 Adresse=53 Status=1 + Periph=2274 Type=detector Pere=275 x=28523 y=5097 z=0 + Angle=-318 Bright=0 Bdown=0 + Location=92 Adresse=0 Status=0 + Periph=2749 Type=detector Pere=275 x=28358 y=4126 z=0 + Angle=-1661 Bright=1 Bdown=1 + Location=64 Adresse=526 Status=1 + Periph=5500 Type=actuator Pere=275 x=28377 y=4193 z=0 + Angle=-1518 Bright=1 Bdown=0 + Location=66 Adresse=820 Status=23 + +Segment=278 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=23750 Ymin=560 Xmax=27647 Ymax=2643 +StartAngle=-9000 ArcAngle=4500 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24150 lYc=5340 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=279 port x=24150 y=960 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=286 ConnecteAuSegment=284 + Port=280 port x=27247 y=2243 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=276 ConnecteAuSegment=275 + +Segment=281 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=20190 Ymin=-90 Xmax=24561 Ymax=2189 +StartAngle=-13500 ArcAngle=4500 Rayon=5050 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24161 lYc=5359 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=282 port x=20590 y=1789 z=0 + Angle=-4500 Local=0 Connecte=1 + ConnecteAuPort=2205 ConnecteAuSegment=2200 + Port=283 port x=24161 y=310 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=270 ConnecteAuSegment=269 + Periph=3645 Type=detector Pere=281 x=24156 y=309 z=0 + Angle=-9006 Bright=0 Bdown=1 + Location=99 Adresse=527 Status=1 + +Segment=284 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=20653 Ymin=560 Xmax=24550 Ymax=2643 +StartAngle=-13500 ArcAngle=4500 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24150 lYc=5340 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=285 port x=21053 y=2243 z=0 + Angle=-4500 Local=0 Connecte=1 + ConnecteAuPort=315 ConnecteAuSegment=313 + Port=286 port x=24150 y=960 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=279 ConnecteAuSegment=278 + Periph=2748 Type=detector Pere=284 x=22466 y=1297 z=0 + Angle=-11261 Bright=0 Bdown=0 + Location=49 Adresse=526 Status=1 + +Segment=287 straight +Nport=2 Nperiph=2 Ninter=0 +Xmin=10178 Ymin=3250 Xmax=14328 Ymax=4051 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=288 port x=10578 y=3651 z=0 + Angle=-2 Local=0 Connecte=1 + ConnecteAuPort=2139 ConnecteAuSegment=2137 + Port=289 port x=13928 y=3650 z=0 + Angle=17998 Local=1 Connecte=1 + ConnecteAuPort=2145 ConnecteAuSegment=2144 + Periph=1674 Type=signal Pere=287 x=13569 y=3650 z=0 + Angle=-9002 Bright=0 Bdown=0 + Location=89 Adresse=0 Status=0 + Periph=1675 Type=detector Pere=287 x=13569 y=3650 z=0 + Angle=-9002 Bright=0 Bdown=0 + Location=89 Adresse=0 Status=0 + +Segment=295 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=13691 Ymin=3909 Xmax=17841 Ymax=4709 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=296 port x=14091 y=4309 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=262 ConnecteAuSegment=260 + Port=297 port x=17441 y=4309 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=300 ConnecteAuSegment=298 + Periph=2751 Type=detector Pere=295 x=17359 y=4309 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=97 Adresse=523 Status=1 + +Segment=298 arc +Nport=2 Nperiph=5 Ninter=0 +Xmin=17041 Ymin=2822 Xmax=20464 Ymax=4709 +StartAngle=4500 ArcAngle=4500 Rayon=3710 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=17441 lYc=599 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=299 port x=20064 y=3222 z=0 + Angle=13500 Local=0 Connecte=1 + ConnecteAuPort=314 ConnecteAuSegment=313 + Port=300 port x=17441 y=4309 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=297 ConnecteAuSegment=295 + Periph=1722 Type=signal Pere=298 x=17945 y=4275 z=0 + Angle=8220 Bright=0 Bdown=1 + Location=82 Adresse=37 Status=1 + Periph=1723 Type=detector Pere=298 x=17945 y=4275 z=0 + Angle=8220 Bright=0 Bdown=1 + Location=82 Adresse=0 Status=0 + Periph=2703 Type=signal Pere=298 x=17945 y=4275 z=0 + Angle=8017 Bright=0 Bdown=0 + Location=82 Adresse=0 Status=0 + Periph=2704 Type=detector Pere=298 x=17945 y=4275 z=0 + Angle=8017 Bright=0 Bdown=0 + Location=82 Adresse=0 Status=0 + Periph=2774 Type=actuator Pere=298 x=18767 y=4064 z=0 + Angle=6906 Bright=0 Bdown=1 + Location=53 Adresse=801 Status=23 + +Segment=313 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=19664 Ymin=1843 Xmax=21453 Ymax=3622 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=314 port x=20064 y=3222 z=0 + Angle=-4471 Local=0 Connecte=1 + ConnecteAuPort=299 ConnecteAuSegment=298 + Port=315 port x=21053 y=2243 z=0 + Angle=13529 Local=1 Connecte=1 + ConnecteAuPort=285 ConnecteAuSegment=284 + +Segment=500 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=281 Ymin=3909 Xmax=2761 Ymax=5043 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=1 Adresse2=0 Duree=3 + Port=501 port x=681 y=4309 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=174 ConnecteAuSegment=172 + Port=502 port x=2361 y=4309 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=205 ConnecteAuSegment=202 + Port=503 port x=2358 y=4643 z=0 + Angle=-15749 Local=2 Connecte=1 + ConnecteAuPort=2073 ConnecteAuSegment=2072 + +Segment=635 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=12010 Ymin=12669 Xmax=19510 Ymax=13469 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=636 port x=19110 y=13069 z=0 + Angle=-18000 Local=0 Connecte=1 + ConnecteAuPort=1022 ConnecteAuSegment=1021 + Port=637 port x=12410 y=13069 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=8784 ConnecteAuSegment=8782 + Periph=2767 Type=detector Pere=635 x=13249 y=13069 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=87 Adresse=513 Status=1 + +Segment=791 crossing +Nport=4 Nperiph=0 Ninter=1 +Xmin=1957 Ymin=12330 Xmax=4436 Ymax=13813 +StartAngle=-2397 ArcAngle=2400 Rayon=3638 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=1680 longueurDev=1535 +DeltaDev=683 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=101 Adresse2=0 Duree=0 + Port=792 port x=2429 y=13413 z=0 + Angle=-2397 Local=0 Connecte=1 + ConnecteAuPort=864 ConnecteAuSegment=861 + Port=793 port x=2357 y=13071 z=0 + Angle=3 Local=1 Connecte=1 + ConnecteAuPort=3690 ConnecteAuSegment=3689 + Port=794 port x=3964 y=12730 z=0 + Angle=15603 Local=2 Connecte=1 + ConnecteAuPort=886 ConnecteAuSegment=884 + Port=795 port x=4036 y=13073 z=0 + Angle=-17997 Local=3 Connecte=1 + ConnecteAuPort=17 ConnecteAuSegment=16 + x=3150 y=13273 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=861 turnout +Nport=3 Nperiph=0 Ninter=1 +Xmin=280 Ymin=13010 Xmax=2839 Ymax=14176 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=11 Adresse2=0 Duree=2 + Port=862 port x=680 y=13776 z=0 + Angle=-19 Local=0 Connecte=1 + ConnecteAuPort=3730 ConnecteAuSegment=3729 + Port=863 port x=2360 y=13770 z=0 + Angle=17981 Local=1 Connecte=1 + ConnecteAuPort=135 ConnecteAuSegment=133 + Port=864 port x=2439 y=13410 z=0 + Angle=15669 Local=2 Connecte=1 + ConnecteAuPort=792 ConnecteAuSegment=791 + x=2372 y=13438 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=884 straight +Nport=2 Nperiph=3 Ninter=0 +Xmin=3564 Ymin=9607 Xmax=10486 Ymax=13130 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=885 port x=10086 y=10007 z=1000 + Angle=15602 Local=0 Connecte=1 + ConnecteAuPort=1152 ConnecteAuSegment=1151 + Port=886 port x=3964 y=12730 z=0 + Angle=-2398 Local=1 Connecte=1 + ConnecteAuPort=794 ConnecteAuSegment=791 + Periph=1530 Type=signal Pere=884 x=5743 y=11939 z=0 + Angle=6602 Bright=0 Bdown=0 + Location=70 Adresse=0 Status=0 + Periph=1531 Type=detector Pere=884 x=5743 y=11939 z=0 + Angle=6602 Bright=0 Bdown=0 + Location=70 Adresse=0 Status=0 + Periph=2772 Type=actuator Pere=884 x=4622 y=12437 z=0 + Angle=6602 Bright=0 Bdown=1 + Location=89 Adresse=802 Status=23 + +Segment=1016 straight +Nport=2 Nperiph=2 Ninter=0 +Xmin=28810 Ymin=6640 Xmax=29610 Ymax=9110 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1017 port x=29210 y=8710 z=0 + Angle=-9000 Local=0 Connecte=1 + ConnecteAuPort=14 ConnecteAuSegment=13 + Port=1018 port x=29210 y=7040 z=0 + Angle=9000 Local=1 Connecte=1 + ConnecteAuPort=1256 ConnecteAuSegment=1254 + Periph=2275 Type=signal Pere=1016 x=29210 y=7843 z=0 + Angle=18000 Bright=0 Bdown=0 + Location=51 Adresse=77 Status=1 + Periph=2276 Type=detector Pere=1016 x=29210 y=7843 z=0 + Angle=18000 Bright=0 Bdown=0 + Location=51 Adresse=0 Status=0 + +Segment=1021 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=18710 Ymin=12669 Xmax=24550 Ymax=13469 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1022 port x=19110 y=13069 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=636 ConnecteAuSegment=635 + Port=1023 port x=24150 y=13069 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=22 ConnecteAuSegment=20 + +Segment=1026 straight +Nport=2 Nperiph=3 Ninter=2 +Xmin=18720 Ymin=13360 Xmax=24560 Ymax=14161 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1027 port x=19120 y=13760 z=0 + Angle=1 Local=0 Connecte=1 + ConnecteAuPort=111 ConnecteAuSegment=110 + Port=1028 port x=24160 y=13761 z=0 + Angle=-17999 Local=1 Connecte=1 + ConnecteAuPort=4 ConnecteAuSegment=2 + Periph=1726 Type=signal Pere=1026 x=19187 y=13760 z=0 + Angle=-8999 Bright=0 Bdown=0 + Location=1 Adresse=49 Status=1 + Periph=1727 Type=detector Pere=1026 x=19187 y=13760 z=0 + Angle=-8999 Bright=0 Bdown=0 + Location=1 Adresse=0 Status=0 + Periph=2762 Type=detector Pere=1026 x=21522 y=13760 z=0 + Angle=-8999 Bright=1 Bdown=1 + Location=47 Adresse=524 Status=1 + x=23891 y=13596 z=0 + MirrorZ=1000 MirrorParent=0 + x=19120 y=13760 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=1043 arc +Nport=2 Nperiph=3 Ninter=4 +Xmin=25962 Ymin=6690 Xmax=28622 Ymax=9523 +StartAngle=1996 ArcAngle=4500 Rayon=3600 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24838 lYc=5861 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1044 port x=28222 y=7090 z=0 + Angle=10996 Local=0 Connecte=1 + ConnecteAuPort=1253 ConnecteAuSegment=1250 + Port=1045 port x=26362 y=9123 z=0 + Angle=-2504 Local=1 Connecte=1 + ConnecteAuPort=1393 ConnecteAuSegment=1392 + Periph=1737 Type=signal Pere=1043 x=27285 y=8502 z=0 + Angle=4718 Bright=0 Bdown=1 + Location=60 Adresse=0 Status=0 + Periph=1738 Type=detector Pere=1043 x=27285 y=8502 z=0 + Angle=4718 Bright=0 Bdown=1 + Location=60 Adresse=0 Status=0 + Periph=3029 Type=actuator Pere=1043 x=28111 y=7360 z=0 + Angle=2461 Bright=0 Bdown=0 + Location=10 Adresse=810 Status=23 + x=27810 y=7583 z=0 + MirrorZ=1000 MirrorParent=0 + x=27713 y=8028 z=0 + MirrorZ=1000 MirrorParent=0 + x=27605 y=8414 z=0 + MirrorZ=1000 MirrorParent=0 + x=27698 y=8048 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=1090 straight +Nport=2 Nperiph=4 Ninter=0 +Xmin=5315 Ymin=4577 Xmax=10245 Ymax=5377 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1091 port x=5715 y=4977 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=2080 ConnecteAuSegment=2079 + Port=1092 port x=9845 y=4977 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=1344 ConnecteAuSegment=1343 + Periph=2263 Type=signal Pere=1090 x=6820 y=4977 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=26 Adresse=55 Status=1 + Periph=2264 Type=detector Pere=1090 x=6820 y=4977 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=26 Adresse=0 Status=0 + Periph=2754 Type=detector Pere=1090 x=6820 y=4977 z=0 + Angle=-9000 Bright=0 Bdown=0 + Location=26 Adresse=515 Status=1 + Periph=4545 Type=actuator Pere=1090 x=5769 y=4977 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=1 Adresse=818 Status=23 + +Segment=1097 straight +Nport=2 Nperiph=4 Ninter=0 +Xmin=5187 Ymin=5220 Xmax=8987 Ymax=6020 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1098 port x=5587 y=5620 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=2086 ConnecteAuSegment=2083 + Port=1099 port x=8587 y=5620 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=1679 ConnecteAuSegment=1678 + Periph=2261 Type=signal Pere=1097 x=7760 y=5620 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=72 Adresse=0 Status=0 + Periph=2262 Type=detector Pere=1097 x=7760 y=5620 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=72 Adresse=0 Status=0 + Periph=3017 Type=detector Pere=1097 x=5669 y=5620 z=0 + Angle=-9000 Bright=0 Bdown=0 + Location=2 Adresse=514 Status=1 + Periph=3030 Type=actuator Pere=1097 x=6219 y=5620 z=0 + Angle=-9000 Bright=0 Bdown=0 + Location=21 Adresse=816 Status=23 + +Segment=1145 straight +Nport=2 Nperiph=3 Ninter=0 +Xmin=6739 Ymin=5863 Xmax=11539 Ymax=6663 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1146 port x=7139 y=6263 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=2092 ConnecteAuSegment=2091 + Port=1147 port x=11139 y=6263 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=1149 ConnecteAuSegment=1148 + Periph=1858 Type=signal Pere=1145 x=8845 y=6263 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=42 Adresse=43 Status=1 + Periph=1859 Type=detector Pere=1145 x=8845 y=6263 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=42 Adresse=0 Status=0 + Periph=3015 Type=detector Pere=1145 x=8845 y=6263 z=0 + Angle=-9000 Bright=0 Bdown=0 + Location=42 Adresse=516 Status=1 + +Segment=1148 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=10739 Ymin=5863 Xmax=15539 Ymax=6663 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1149 port x=11139 y=6263 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1147 ConnecteAuSegment=1145 + Port=1150 port x=15139 y=6263 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=2192 ConnecteAuSegment=2191 + Periph=3016 Type=detector Pere=1148 x=12450 y=6263 z=0 + Angle=-9000 Bright=1 Bdown=1 + Location=32 Adresse=516 Status=1 + +Segment=1151 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=9686 Ymin=7982 Xmax=14141 Ymax=10407 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1152 port x=10086 y=10007 z=1000 + Angle=-2397 Local=0 Connecte=1 + ConnecteAuPort=885 ConnecteAuSegment=884 + Port=1153 port x=13741 y=8382 z=1000 + Angle=15603 Local=1 Connecte=1 + ConnecteAuPort=1437 ConnecteAuSegment=1436 + +Segment=1250 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=27822 Ymin=4940 Xmax=28930 Ymax=7490 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=9 Adresse2=0 Duree=2 + Port=1251 port x=28530 y=5340 z=0 + Angle=9000 Local=0 Connecte=1 + ConnecteAuPort=277 ConnecteAuSegment=275 + Port=1252 port x=28530 y=7020 z=0 + Angle=-9000 Local=1 Connecte=1 + ConnecteAuPort=1261 ConnecteAuSegment=1258 + Port=1253 port x=28222 y=7090 z=0 + Angle=-7004 Local=2 Connecte=1 + ConnecteAuPort=1044 ConnecteAuSegment=1043 + +Segment=1254 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=28507 Ymin=4960 Xmax=29610 Ymax=7484 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=8 Adresse2=0 Duree=2 + Port=1255 port x=29210 y=5360 z=0 + Angle=9000 Local=0 Connecte=1 + ConnecteAuPort=268 ConnecteAuSegment=266 + Port=1256 port x=29210 y=7040 z=0 + Angle=-9000 Local=1 Connecte=1 + ConnecteAuPort=1018 ConnecteAuSegment=1016 + Port=1257 port x=28907 y=7084 z=0 + Angle=-7004 Local=2 Connecte=1 + ConnecteAuPort=1262 ConnecteAuSegment=1258 + +Segment=1258 crossing +Nport=4 Nperiph=0 Ninter=0 +Xmin=27754 Ymin=6620 Xmax=29306 Ymax=9620 +StartAngle=-9000 ArcAngle=2000 Rayon=5955 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=2200 longueurDev=2067 +DeltaDev=752 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=102 Adresse2=0 Duree=0 + Port=1259 port x=28530 y=9220 z=0 + Angle=-9000 Local=0 Connecte=1 + ConnecteAuPort=1341 ConnecteAuSegment=1336 + Port=1260 port x=28154 y=9154 z=0 + Angle=-7000 Local=1 Connecte=1 + ConnecteAuPort=1863 ConnecteAuSegment=1862 + Port=1261 port x=28530 y=7020 z=0 + Angle=9000 Local=2 Connecte=1 + ConnecteAuPort=1252 ConnecteAuSegment=1250 + Port=1262 port x=28906 y=7086 z=0 + Angle=11000 Local=3 Connecte=1 + ConnecteAuPort=1257 ConnecteAuSegment=1254 + +Segment=1334 pre_curve +Nport=2 Nperiph=0 Ninter=1 +Xmin=26847 Ymin=11012 Xmax=28022 Ymax=12187 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1339 port x=27247 y=11787 z=0 + Angle=-4500 Local=0 Connecte=1 + ConnecteAuPort=21 ConnecteAuSegment=20 + Port=1340 port x=27622 y=11412 z=0 + Angle=13500 Local=1 Connecte=1 + ConnecteAuPort=1337 ConnecteAuSegment=1335 + x=27358 y=11442 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=1335 curve +Nport=2 Nperiph=3 Ninter=0 +Xmin=27222 Ymin=8820 Xmax=28930 Ymax=11812 +StartAngle=4500 ArcAngle=-4500 Rayon=3100 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=25430 lYc=9220 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1337 port x=27622 y=11412 z=0 + Angle=-4500 Local=0 Connecte=1 + ConnecteAuPort=1340 ConnecteAuSegment=1334 + Port=1338 port x=28530 y=9220 z=0 + Angle=9000 Local=1 Connecte=1 + ConnecteAuPort=1342 ConnecteAuSegment=1336 + Periph=964 Type=signal Pere=1335 x=27898 y=11096 z=0 + Angle=-14275 Bright=1 Bdown=0 + Location=17 Adresse=0 Status=0 + Periph=965 Type=detector Pere=1335 x=27898 y=11096 z=0 + Angle=-14275 Bright=1 Bdown=0 + Location=17 Adresse=0 Status=0 + Periph=3024 Type=actuator Pere=1335 x=28529 y=9295 z=0 + Angle=-17861 Bright=1 Bdown=1 + Location=96 Adresse=806 Status=23 + +Segment=1336 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=28130 Ymin=8820 Xmax=28930 Ymax=9620 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1341 port x=28530 y=9220 z=0 + Angle=9000 Local=0 Connecte=1 + ConnecteAuPort=1259 ConnecteAuSegment=1258 + Port=1342 port x=28530 y=9220 z=0 + Angle=-9000 Local=1 Connecte=1 + ConnecteAuPort=1338 ConnecteAuSegment=1335 + +Segment=1343 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=9437 Ymin=4581 Xmax=15277 Ymax=5381 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1344 port x=9837 y=4981 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1092 ConnecteAuSegment=1090 + Port=1345 port x=14877 y=4981 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=1347 ConnecteAuSegment=1346 + Periph=2755 Type=detector Pere=1343 x=12903 y=4981 z=0 + Angle=-9000 Bright=1 Bdown=1 + Location=60 Adresse=515 Status=1 + +Segment=1346 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=14477 Ymin=4581 Xmax=17277 Ymax=5381 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1347 port x=14877 y=4981 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1345 ConnecteAuSegment=1343 + Port=1348 port x=16877 y=4981 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=1382 ConnecteAuSegment=1381 + +Segment=1373 arc +Nport=2 Nperiph=0 Ninter=1 +Xmin=16539 Ymin=5863 Xmax=19061 Ymax=7006 +StartAngle=-9000 ArcAngle=2250 Rayon=4500 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=16939 lYc=10763 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1374 port x=16939 y=6263 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=2193 ConnecteAuSegment=2191 + Port=1375 port x=18661 y=6606 z=0 + Angle=-15750 Local=1 Connecte=1 + ConnecteAuPort=1377 ConnecteAuSegment=1376 + x=18139 y=6426 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=1376 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=18261 Ymin=6206 Xmax=20521 Ymax=7981 +StartAngle=-6750 ArcAngle=2250 Rayon=4500 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=16939 lYc=10763 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1377 port x=18661 y=6606 z=0 + Angle=2250 Local=0 Connecte=1 + ConnecteAuPort=1375 ConnecteAuSegment=1373 + Port=1378 port x=20121 y=7581 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=1407 ConnecteAuSegment=1406 + +Segment=1381 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=16477 Ymin=4581 Xmax=18999 Ymax=5724 +StartAngle=-9000 ArcAngle=2250 Rayon=4500 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=16877 lYc=9481 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1382 port x=16877 y=4981 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1348 ConnecteAuSegment=1346 + Port=1383 port x=18599 y=5324 z=0 + Angle=-15750 Local=1 Connecte=1 + ConnecteAuPort=1385 ConnecteAuSegment=1384 + +Segment=1384 arc +Nport=2 Nperiph=0 Ninter=1 +Xmin=18199 Ymin=4924 Xmax=20431 Ymax=6672 +StartAngle=-6750 ArcAngle=2200 Rayon=4500 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=16877 lYc=9481 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1385 port x=18599 y=5324 z=0 + Angle=2250 Local=0 Connecte=1 + ConnecteAuPort=1383 ConnecteAuSegment=1381 + Port=1386 port x=20031 y=6272 z=0 + Angle=-13550 Local=1 Connecte=1 + ConnecteAuPort=1398 ConnecteAuSegment=1397 + x=19497 y=5823 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=1389 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=22009 Ymin=8118 Xmax=24010 Ymax=9646 +StartAngle=10996 ArcAngle=2250 Rayon=3600 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24839 lYc=5862 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1390 port x=23610 y=9246 z=0 + Angle=-16004 Local=0 Connecte=1 + ConnecteAuPort=1394 ConnecteAuSegment=1392 + Port=1391 port x=22409 y=8518 z=0 + Angle=4246 Local=1 Connecte=1 + ConnecteAuPort=1399 ConnecteAuSegment=1397 + +Segment=1392 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=23210 Ymin=8723 Xmax=26762 Ymax=9861 +StartAngle=6496 ArcAngle=4500 Rayon=3600 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24838 lYc=5861 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1393 port x=26362 y=9123 z=0 + Angle=15496 Local=0 Connecte=1 + ConnecteAuPort=1045 ConnecteAuSegment=1043 + Port=1394 port x=23610 y=9246 z=0 + Angle=1996 Local=1 Connecte=1 + ConnecteAuPort=1390 ConnecteAuSegment=1389 + +Segment=1397 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=19631 Ymin=5872 Xmax=22809 Ymax=8918 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1398 port x=20031 y=6272 z=0 + Angle=4336 Local=0 Connecte=1 + ConnecteAuPort=1386 ConnecteAuSegment=1384 + Port=1399 port x=22409 y=8518 z=0 + Angle=-13664 Local=1 Connecte=1 + ConnecteAuPort=1391 ConnecteAuSegment=1389 + +Segment=1406 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=19721 Ymin=7181 Xmax=22784 Ymax=10244 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1407 port x=20121 y=7581 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=1378 ConnecteAuSegment=1376 + Port=1408 port x=22384 y=9844 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=1877 ConnecteAuSegment=1876 + +Segment=1436 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=13341 Ymin=6357 Xmax=17796 Ymax=8782 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1437 port x=13741 y=8382 z=1000 + Angle=-2397 Local=0 Connecte=1 + ConnecteAuPort=1153 ConnecteAuSegment=1151 + Port=1438 port x=17396 y=6757 z=1000 + Angle=15603 Local=1 Connecte=1 + ConnecteAuPort=1440 ConnecteAuSegment=1439 + Periph=7076 Type=detector Pere=1436 x=13794 y=8359 z=0 + Angle=-11397 Bright=0 Bdown=0 + Location=1 Adresse=525 Status=1 + +Segment=1439 straight +Nport=2 Nperiph=0 Ninter=3 +Xmin=16996 Ymin=5138 Xmax=20537 Ymax=7157 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1440 port x=17396 y=6757 z=1000 + Angle=-2398 Local=0 Connecte=1 + ConnecteAuPort=1438 ConnecteAuSegment=1436 + Port=1441 port x=20137 y=5538 z=1000 + Angle=15602 Local=1 Connecte=1 + ConnecteAuPort=1467 ConnecteAuSegment=1466 + x=18139 y=6426 z=1000 + MirrorZ=0 MirrorParent=0 + x=19497 y=5823 z=1000 + MirrorZ=0 MirrorParent=0 + x=18890 y=6093 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=1449 straight +Nport=2 Nperiph=4 Ninter=0 +Xmin=7110 Ymin=12026 Xmax=14607 Ymax=12826 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1450 port x=14207 y=12426 z=1000 + Angle=-18000 Local=0 Connecte=1 + ConnecteAuPort=1464 ConnecteAuSegment=1463 + Port=1451 port x=7510 y=12426 z=1000 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=1454 ConnecteAuSegment=1452 + Periph=1532 Type=signal Pere=1449 x=8257 y=12426 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=88 Adresse=59 Status=1 + Periph=1533 Type=detector Pere=1449 x=8257 y=12426 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=88 Adresse=0 Status=0 + Periph=3022 Type=actuator Pere=1449 x=8809 y=12426 z=0 + Angle=9000 Bright=1 Bdown=0 + Location=80 Adresse=804 Status=23 + Periph=2765 Type=detector Pere=1449 x=8257 y=12426 z=0 + Angle=9000 Bright=1 Bdown=1 + Location=88 Adresse=528 Status=1 + +Segment=1452 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=5389 Ymin=12024 Xmax=7910 Ymax=13124 +StartAngle=-11133 ArcAngle=2300 Rayon=4380 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=7382 lYc=16804 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1453 port x=5789 y=12724 z=0 + Angle=-2133 Local=0 Connecte=1 + ConnecteAuPort=19 ConnecteAuSegment=16 + Port=1454 port x=7510 y=12426 z=1000 + Angle=-17833 Local=1 Connecte=1 + ConnecteAuPort=1451 ConnecteAuSegment=1449 + +Segment=1463 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=13807 Ymin=12026 Xmax=21307 Ymax=12826 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1464 port x=14207 y=12426 z=1000 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1450 ConnecteAuSegment=1449 + Port=1465 port x=20907 y=12426 z=1000 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=4880 ConnecteAuSegment=4879 + Periph=2766 Type=detector Pere=1463 x=20719 y=12426 z=0 + Angle=-9000 Bright=1 Bdown=1 + Location=97 Adresse=528 Status=1 + +Segment=1466 arc +Nport=2 Nperiph=4 Ninter=0 +Xmin=19737 Ymin=4647 Xmax=21338 Ymax=5938 +StartAngle=6602 ArcAngle=-1500 Rayon=3599 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=18674 lYc=2250 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1467 port x=20137 y=5538 z=1000 + Angle=-2398 Local=0 Connecte=1 + ConnecteAuPort=1441 ConnecteAuSegment=1439 + Port=1468 port x=20938 y=5047 z=1000 + Angle=14102 Local=1 Connecte=1 + ConnecteAuPort=4857 ConnecteAuSegment=4856 + Periph=7084 Type=signal Pere=1466 x=20799 y=5155 z=0 + Angle=-12619 Bright=0 Bdown=0 + Location=81 Adresse=41 Status=1 + Periph=7085 Type=detector Pere=1466 x=20799 y=5155 z=0 + Angle=-12619 Bright=0 Bdown=0 + Location=81 Adresse=0 Status=0 + Periph=7088 Type=signal Pere=1466 x=20799 y=5155 z=0 + Angle=-12631 Bright=0 Bdown=1 + Location=81 Adresse=0 Status=0 + Periph=7089 Type=detector Pere=1466 x=20799 y=5155 z=0 + Angle=-12631 Bright=0 Bdown=1 + Location=81 Adresse=0 Status=0 + +Segment=1678 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=8187 Ymin=5220 Xmax=14489 Ymax=6020 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1679 port x=8587 y=5620 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1099 ConnecteAuSegment=1097 + Port=1680 port x=14089 y=5620 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=2189 ConnecteAuSegment=2188 + +Segment=1681 arc +Nport=2 Nperiph=2 Ninter=1 +Xmin=16491 Ymin=5224 Xmax=20473 Ymax=7342 +StartAngle=-9000 ArcAngle=4500 Rayon=4500 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=16891 lYc=10124 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1682 port x=16891 y=5624 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=2190 ConnecteAuSegment=2188 + Port=1683 port x=20073 y=6942 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=1687 ConnecteAuSegment=1686 + Periph=2746 Type=detector Pere=1681 x=18015 y=5767 z=0 + Angle=-7553 Bright=0 Bdown=0 + Location=32 Adresse=522 Status=1 + Periph=3018 Type=detector Pere=1681 x=17297 y=5642 z=0 + Angle=-8283 Bright=1 Bdown=1 + Location=11 Adresse=514 Status=1 + x=18890 y=6093 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=1686 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=19673 Ymin=6542 Xmax=22721 Ymax=9590 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1687 port x=20073 y=6942 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=1683 ConnecteAuSegment=1681 + Port=1688 port x=22321 y=9190 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=1872 ConnecteAuSegment=1867 + +Segment=1810 straight +Nport=2 Nperiph=2 Ninter=0 +Xmin=2059 Ymin=5863 Xmax=5859 Ymax=6663 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1811 port x=5459 y=6263 z=0 + Angle=-18000 Local=0 Connecte=1 + ConnecteAuPort=2093 ConnecteAuSegment=2091 + Port=1812 port x=2459 y=6263 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=5503 ConnecteAuSegment=5502 + Periph=1860 Type=signal Pere=1810 x=4752 y=6263 z=0 + Angle=9000 Bright=0 Bdown=1 + Location=23 Adresse=45 Status=1 + Periph=1861 Type=detector Pere=1810 x=4752 y=6263 z=0 + Angle=9000 Bright=0 Bdown=1 + Location=23 Adresse=0 Status=0 + +Segment=1862 arc +Nport=2 Nperiph=2 Ninter=3 +Xmin=26081 Ymin=8754 Xmax=28554 Ymax=11227 +StartAngle=2000 ArcAngle=5000 Rayon=2800 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=25523 lYc=8196 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1863 port x=28154 y=9154 z=0 + Angle=11000 Local=0 Connecte=1 + ConnecteAuPort=1260 ConnecteAuSegment=1258 + Port=1864 port x=26481 y=10827 z=0 + Angle=-2000 Local=1 Connecte=1 + ConnecteAuPort=1874 ConnecteAuSegment=1869 + Periph=2747 Type=detector Pere=1862 x=27278 y=10378 z=0 + Angle=4961 Bright=0 Bdown=0 + Location=62 Adresse=522 Status=1 + Periph=6125 Type=actuator Pere=1862 x=28130 y=9218 z=0 + Angle=2140 Bright=1 Bdown=1 + Location=2 Adresse=821 Status=23 + x=27723 y=9928 z=0 + MirrorZ=1000 MirrorParent=0 + x=27726 y=9641 z=0 + MirrorZ=1000 MirrorParent=0 + x=27319 y=10344 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=1867 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=21921 Ymin=8790 Xmax=23639 Ymax=10508 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1872 port x=22321 y=9190 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=1688 ConnecteAuSegment=1686 + Port=1873 port x=23239 y=10108 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=1870 ConnecteAuSegment=1868 + +Segment=1868 curve +Nport=2 Nperiph=2 Ninter=0 +Xmin=22839 Ymin=9708 Xmax=26881 Ymax=11413 +StartAngle=13500 ArcAngle=-6500 Rayon=3090 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=25424 lYc=7923 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1870 port x=23239 y=10108 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=1873 ConnecteAuSegment=1867 + Port=1871 port x=26481 y=10827 z=0 + Angle=16000 Local=1 Connecte=1 + ConnecteAuPort=1875 ConnecteAuSegment=1869 + Periph=1526 Type=signal Pere=1868 x=23517 y=10354 z=0 + Angle=-5188 Bright=0 Bdown=0 + Location=10 Adresse=51 Status=1 + Periph=1527 Type=detector Pere=1868 x=23517 y=10354 z=0 + Angle=-5188 Bright=0 Bdown=0 + Location=10 Adresse=0 Status=0 + +Segment=1869 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=26081 Ymin=10427 Xmax=26881 Ymax=11227 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1874 port x=26481 y=10827 z=0 + Angle=16000 Local=0 Connecte=1 + ConnecteAuPort=1864 ConnecteAuSegment=1862 + Port=1875 port x=26481 y=10827 z=0 + Angle=-2000 Local=1 Connecte=1 + ConnecteAuPort=1871 ConnecteAuSegment=1868 + +Segment=1876 bumper_stop +Nport=2 Nperiph=0 Ninter=0 +Xmin=21984 Ymin=9444 Xmax=23491 Ymax=10951 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=1877 port x=22384 y=9844 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=1408 ConnecteAuSegment=1406 + Port=1878 dummy_port x=23091 y=10551 z=0 + Angle=-13500 Local=1 Connecte=0 + ConnecteAuPort=0 ConnecteAuSegment=0 + +Segment=2072 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=1958 Ymin=4243 Xmax=4435 Ymax=5686 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=3 Adresse2=0 Duree=2 + Port=2073 port x=2358 y=4643 z=0 + Angle=2251 Local=0 Connecte=1 + ConnecteAuPort=503 ConnecteAuSegment=500 + Port=2074 port x=3910 y=5286 z=0 + Angle=-15749 Local=1 Connecte=1 + ConnecteAuPort=2084 ConnecteAuSegment=2083 + Port=2075 port x=4035 y=4977 z=0 + Angle=18000 Local=2 Connecte=1 + ConnecteAuPort=2081 ConnecteAuSegment=2079 + +Segment=2079 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=3583 Ymin=4220 Xmax=6115 Ymax=5377 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=5 Adresse2=0 Duree=0 + Port=2080 port x=5715 y=4977 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=1091 ConnecteAuSegment=1090 + Port=2081 port x=4035 y=4977 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=2075 ConnecteAuSegment=2072 + Port=2082 port x=3983 y=4620 z=0 + Angle=2251 Local=2 Connecte=1 + ConnecteAuPort=204 ConnecteAuSegment=202 + +Segment=2083 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=3510 Ymin=4886 Xmax=5987 Ymax=6329 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=4 Adresse2=0 Duree=2 + Port=2084 port x=3910 y=5286 z=0 + Angle=2251 Local=0 Connecte=1 + ConnecteAuPort=2074 ConnecteAuSegment=2072 + Port=2085 port x=5462 y=5929 z=0 + Angle=-15749 Local=1 Connecte=1 + ConnecteAuPort=2094 ConnecteAuSegment=2091 + Port=2086 port x=5587 y=5620 z=0 + Angle=18000 Local=2 Connecte=1 + ConnecteAuPort=1098 ConnecteAuSegment=1097 + +Segment=2091 turnout +Nport=3 Nperiph=1 Ninter=0 +Xmin=5059 Ymin=5529 Xmax=7539 Ymax=6663 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=6 Adresse2=0 Duree=3 + Port=2092 port x=7139 y=6263 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=1146 ConnecteAuSegment=1145 + Port=2093 port x=5459 y=6263 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=1811 ConnecteAuSegment=1810 + Port=2094 port x=5462 y=5929 z=0 + Angle=2251 Local=2 Connecte=1 + ConnecteAuPort=2085 ConnecteAuSegment=2083 + Periph=3028 Type=actuator Pere=2091 x=5462 y=5929 z=0 + Angle=-6749 Bright=0 Bdown=0 + Location=0 Adresse=814 Status=23 + +Segment=2099 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=348 Ymin=3254 Xmax=2828 Ymax=4388 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=2 Adresse2=0 Duree=0 + Port=2100 port x=748 y=3654 z=0 + Angle=-1 Local=0 Connecte=1 + ConnecteAuPort=6692 ConnecteAuSegment=6691 + Port=2101 port x=2428 y=3654 z=0 + Angle=17999 Local=1 Connecte=1 + ConnecteAuPort=219 ConnecteAuSegment=218 + Port=2102 port x=2425 y=3988 z=0 + Angle=-15750 Local=2 Connecte=1 + ConnecteAuPort=206 ConnecteAuSegment=202 + +Segment=2133 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=14956 Ymin=2892 Xmax=17488 Ymax=4049 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=7 Adresse2=0 Duree=3 + Port=2134 port x=17088 y=3648 z=0 + Angle=17996 Local=0 Connecte=1 + ConnecteAuPort=2203 ConnecteAuSegment=2198 + Port=2135 port x=15408 y=3649 z=0 + Angle=-4 Local=1 Connecte=1 + ConnecteAuPort=2146 ConnecteAuSegment=2144 + Port=2136 port x=15356 y=3292 z=0 + Angle=2247 Local=2 Connecte=1 + ConnecteAuPort=6720 ConnecteAuSegment=6715 + +Segment=2137 straight +Nport=2 Nperiph=2 Ninter=0 +Xmin=5378 Ymin=3251 Xmax=10978 Ymax=4053 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=2138 port x=5778 y=3653 z=0 + Angle=-2 Local=0 Connecte=1 + ConnecteAuPort=220 ConnecteAuSegment=218 + Port=2139 port x=10578 y=3651 z=0 + Angle=17998 Local=1 Connecte=1 + ConnecteAuPort=288 ConnecteAuSegment=287 + Periph=2759 Type=detector Pere=2137 x=9479 y=3651 z=0 + Angle=-9002 Bright=1 Bdown=1 + Location=77 Adresse=519 Status=1 + Periph=3657 Type=actuator Pere=2137 x=6765 y=3653 z=0 + Angle=-9002 Bright=1 Bdown=1 + Location=20 Adresse=800 Status=23 + +Segment=2144 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=13528 Ymin=3249 Xmax=15808 Ymax=4050 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=2145 port x=13928 y=3650 z=0 + Angle=-4 Local=0 Connecte=1 + ConnecteAuPort=289 ConnecteAuSegment=287 + Port=2146 port x=15408 y=3649 z=0 + Angle=17996 Local=1 Connecte=1 + ConnecteAuPort=2135 ConnecteAuSegment=2133 + +Segment=2188 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=13689 Ymin=5220 Xmax=17289 Ymax=6020 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=2189 port x=14089 y=5620 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1680 ConnecteAuSegment=1678 + Port=2190 port x=16889 y=5620 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=1682 ConnecteAuSegment=1681 + +Segment=2191 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=14739 Ymin=5863 Xmax=17339 Ymax=6663 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=2192 port x=15139 y=6263 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1150 ConnecteAuSegment=1148 + Port=2193 port x=16939 y=6263 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=1374 ConnecteAuSegment=1373 + +Segment=2198 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=16688 Ymin=3248 Xmax=17488 Ymax=4048 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=2203 port x=17088 y=3648 z=0 + Angle=-4 Local=0 Connecte=1 + ConnecteAuPort=2134 ConnecteAuSegment=2133 + Port=2204 port x=17088 y=3648 z=0 + Angle=17996 Local=1 Connecte=1 + ConnecteAuPort=2201 ConnecteAuSegment=2199 + +Segment=2199 curve +Nport=2 Nperiph=4 Ninter=0 +Xmin=16688 Ymin=2084 Xmax=20295 Ymax=4048 +StartAngle=8996 ArcAngle=-4496 Rayon=3973 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=17085 lYc=-325 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=2201 port x=17088 y=3648 z=0 + Angle=-4 Local=0 Connecte=1 + ConnecteAuPort=2204 ConnecteAuSegment=2198 + Port=2202 port x=19895 y=2484 z=0 + Angle=13500 Local=1 Connecte=1 + ConnecteAuPort=2206 ConnecteAuSegment=2200 + Periph=2776 Type=signal Pere=2199 x=18268 y=3468 z=0 + Angle=-10733 Bright=0 Bdown=1 + Location=38 Adresse=39 Status=1 + Periph=2777 Type=detector Pere=2199 x=18268 y=3468 z=0 + Angle=-10733 Bright=0 Bdown=1 + Location=38 Adresse=0 Status=0 + Periph=3644 Type=detector Pere=2199 x=18268 y=3468 z=0 + Angle=-10795 Bright=1 Bdown=0 + Location=38 Adresse=527 Status=1 + Periph=7102 Type=actuator Pere=2199 x=18160 y=3500 z=0 + Angle=-10570 Bright=1 Bdown=1 + Location=34 Adresse=833 Status=23 + +Segment=2200 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=19495 Ymin=1389 Xmax=20990 Ymax=2884 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=2205 port x=20590 y=1789 z=0 + Angle=13500 Local=0 Connecte=1 + ConnecteAuPort=282 ConnecteAuSegment=281 + Port=2206 port x=19895 y=2484 z=0 + Angle=-4500 Local=1 Connecte=1 + ConnecteAuPort=2202 ConnecteAuSegment=2199 + +Segment=3682 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=-1480 Ymin=12309 Xmax=1080 Ymax=13470 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=19 Adresse2=0 Duree=3 + Port=3683 port x=680 y=13070 z=0 + Angle=-17997 Local=0 Connecte=1 + ConnecteAuPort=3691 ConnecteAuSegment=3689 + Port=3684 port x=-1000 y=13070 z=0 + Angle=3 Local=1 Connecte=1 + ConnecteAuPort=3736 ConnecteAuSegment=3733 + Port=3685 port x=-1080 y=12709 z=0 + Angle=2315 Local=2 Connecte=1 + ConnecteAuPort=3702 ConnecteAuSegment=3697 + +Segment=3689 straight +Nport=2 Nperiph=1 Ninter=0 +Xmin=280 Ymin=12670 Xmax=2757 Ymax=13471 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=3690 port x=2357 y=13071 z=0 + Angle=-17997 Local=0 Connecte=1 + ConnecteAuPort=793 ConnecteAuSegment=791 + Port=3691 port x=680 y=13070 z=0 + Angle=3 Local=1 Connecte=1 + ConnecteAuPort=3683 ConnecteAuSegment=3682 + Periph=3780 Type=actuator Pere=3689 x=1675 y=13071 z=0 + Angle=9003 Bright=0 Bdown=0 + Location=40 Adresse=803 Status=23 + +Segment=3695 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-2817 Ymin=11387 Xmax=-1963 Ymax=12241 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=3700 port x=-2417 y=11787 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=161 ConnecteAuSegment=160 + Port=3701 port x=-2363 y=11841 z=0 + Angle=-13500 Local=1 Connecte=1 + ConnecteAuPort=3698 ConnecteAuSegment=3696 + +Segment=3696 curve +Nport=2 Nperiph=4 Ninter=0 +Xmin=-2763 Ymin=11441 Xmax=-680 Ymax=13109 +StartAngle=13500 ArcAngle=-2185 Rayon=4085 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=526 lYc=8953 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=3698 port x=-2363 y=11841 z=0 + Angle=4500 Local=0 Connecte=1 + ConnecteAuPort=3701 ConnecteAuSegment=3695 + Port=3699 port x=-1080 y=12709 z=0 + Angle=-15685 Local=1 Connecte=1 + ConnecteAuPort=3703 ConnecteAuSegment=3697 + Periph=3760 Type=signal Pere=3696 x=-1631 y=12422 z=0 + Angle=-5813 Bright=1 Bdown=0 + Location=60 Adresse=0 Status=0 + Periph=3761 Type=detector Pere=3696 x=-1631 y=12422 z=0 + Angle=-5813 Bright=1 Bdown=0 + Location=60 Adresse=0 Status=0 + Periph=7100 Type=actuator Pere=3696 x=-1173 y=12668 z=0 + Angle=-6542 Bright=0 Bdown=1 + Location=93 Adresse=832 Status=23 + Periph=9948 Type=detector Pere=3696 x=-1631 y=12422 z=0 + Angle=-5681 Bright=1 Bdown=1 + Location=60 Adresse=531 Status=1 + +Segment=3697 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-1480 Ymin=12309 Xmax=-680 Ymax=13109 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=3702 port x=-1080 y=12709 z=0 + Angle=-15685 Local=0 Connecte=1 + ConnecteAuPort=3685 ConnecteAuSegment=3682 + Port=3703 port x=-1080 y=12709 z=0 + Angle=2315 Local=1 Connecte=1 + ConnecteAuPort=3699 ConnecteAuSegment=3696 + +Segment=3729 turnout +Nport=3 Nperiph=0 Ninter=1 +Xmin=-1481 Ymin=13022 Xmax=1080 Ymax=14182 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=18 Adresse2=0 Duree=7 + Port=3730 port x=680 y=13776 z=0 + Angle=17981 Local=0 Connecte=1 + ConnecteAuPort=862 ConnecteAuSegment=861 + Port=3731 port x=-1000 y=13782 z=0 + Angle=-19 Local=1 Connecte=1 + ConnecteAuPort=6233 ConnecteAuSegment=6231 + Port=3732 port x=-1081 y=13422 z=0 + Angle=2293 Local=2 Connecte=1 + ConnecteAuPort=3737 ConnecteAuSegment=3733 + x=-1042 y=13438 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=3733 crossing +Nport=4 Nperiph=0 Ninter=1 +Xmin=-3079 Ymin=12328 Xmax=-600 Ymax=13812 +StartAngle=3 ArcAngle=2400 Rayon=3638 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=1680 longueurDev=1535 +DeltaDev=683 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=103 Adresse2=0 Duree=0 + Port=3734 port x=-2679 y=13069 z=0 + Angle=3 Local=0 Connecte=1 + ConnecteAuPort=6201 ConnecteAuSegment=6200 + Port=3735 port x=-2606 y=12728 z=0 + Angle=2403 Local=1 Connecte=1 + ConnecteAuPort=6727 ConnecteAuSegment=6722 + Port=3736 port x=-1000 y=13070 z=0 + Angle=-17997 Local=2 Connecte=1 + ConnecteAuPort=3684 ConnecteAuSegment=3682 + Port=3737 port x=-1073 y=13412 z=0 + Angle=-15597 Local=3 Connecte=1 + ConnecteAuPort=3732 ConnecteAuSegment=3729 + x=-1790 y=13273 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=4856 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=20538 Ymin=3774 Xmax=23302 Ymax=5447 +StartAngle=-12898 ArcAngle=3000 Rayon=4152 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=23550 lYc=8275 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=4857 port x=20938 y=5047 z=1000 + Angle=-3898 Local=0 Connecte=1 + ConnecteAuPort=1468 ConnecteAuSegment=1466 + Port=4858 port x=22902 y=4174 z=1000 + Angle=17102 Local=1 Connecte=1 + ConnecteAuPort=4860 ConnecteAuSegment=4859 + Periph=7077 Type=detector Pere=4856 x=22880 y=4177 z=0 + Angle=-9928 Bright=1 Bdown=1 + Location=98 Adresse=525 Status=1 + +Segment=4859 arc +Nport=2 Nperiph=1 Ninter=0 +Xmin=22502 Ymin=3723 Xmax=25439 Ymax=4799 +StartAngle=-9898 ArcAngle=3000 Rayon=4152 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=23550 lYc=8275 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=4860 port x=22902 y=4174 z=1000 + Angle=-898 Local=0 Connecte=1 + ConnecteAuPort=4858 ConnecteAuSegment=4856 + Port=4861 port x=25039 y=4399 z=1000 + Angle=-15898 Local=1 Connecte=1 + ConnecteAuPort=4863 ConnecteAuSegment=4862 + Periph=4892 Type=actuator Pere=4859 x=24620 y=4263 z=0 + Angle=-7507 Bright=0 Bdown=0 + Location=79 Adresse=811 Status=23 + +Segment=4862 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=24639 Ymin=3999 Xmax=27177 Ymax=6063 +StartAngle=-6898 ArcAngle=3000 Rayon=4152 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=23550 lYc=8275 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=4863 port x=25039 y=4399 z=1000 + Angle=2102 Local=0 Connecte=1 + ConnecteAuPort=4861 ConnecteAuSegment=4859 + Port=4864 port x=26777 y=5663 z=1000 + Angle=-12898 Local=1 Connecte=1 + ConnecteAuPort=4866 ConnecteAuSegment=4865 + +Segment=4865 arc +Nport=2 Nperiph=0 Ninter=1 +Xmin=26377 Ymin=5263 Xmax=28050 Ymax=8027 +StartAngle=-3898 ArcAngle=3000 Rayon=4152 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=23549 lYc=8275 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=4866 port x=26777 y=5663 z=1000 + Angle=5102 Local=0 Connecte=1 + ConnecteAuPort=4864 ConnecteAuSegment=4862 + Port=4867 port x=27650 y=7627 z=1000 + Angle=-9898 Local=1 Connecte=1 + ConnecteAuPort=4876 ConnecteAuSegment=4875 + x=27810 y=7583 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=4875 turnout_curved +Nport=3 Nperiph=0 Ninter=5 +Xmin=26978 Ymin=7227 Xmax=28050 Ymax=11209 +StartAngle=8102 ArcAngle=3000 Rayon=5000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=3116 longueurDev=2500 +DeltaDev=670 CurveOffset=0 xc0=-8929 yc0=1411 +DeltaDev2=670 xc=-4939 yc=780 +Adresse=17 Adresse2=0 Duree=2 + Port=4876 port x=27650 y=7627 z=1000 + Angle=8102 Local=0 Connecte=1 + ConnecteAuPort=4867 ConnecteAuSegment=4865 + Port=4877 port x=27475 y=10809 z=1000 + Angle=-6898 Local=1 Connecte=1 + ConnecteAuPort=4894 ConnecteAuSegment=4893 + Port=4878 port x=27378 y=10201 z=1000 + Angle=-6898 Local=2 Connecte=1 + ConnecteAuPort=4883 ConnecteAuSegment=4882 + x=27713 y=8028 z=1000 + MirrorZ=0 MirrorParent=0 + x=27605 y=8414 z=1000 + MirrorZ=0 MirrorParent=0 + x=27698 y=8048 z=1000 + MirrorZ=0 MirrorParent=0 + x=27723 y=9928 z=1000 + MirrorZ=0 MirrorParent=0 + x=27726 y=9641 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=4879 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=20507 Ymin=12026 Xmax=24537 Ymax=12826 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=4880 port x=20907 y=12426 z=1000 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=1465 ConnecteAuSegment=1463 + Port=4881 port x=24137 y=12426 z=1000 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=4884 ConnecteAuSegment=4882 + +Segment=4882 arc +Nport=2 Nperiph=3 Ninter=1 +Xmin=23739 Ymin=9801 Xmax=27778 Ymax=12826 +StartAngle=2102 ArcAngle=6898 Rayon=3469 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=24139 lYc=8957 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=4883 port x=27378 y=10201 z=1000 + Angle=11102 Local=0 Connecte=1 + ConnecteAuPort=4878 ConnecteAuSegment=4875 + Port=4884 port x=24139 y=12426 z=1000 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=4881 ConnecteAuSegment=4879 + Periph=4901 Type=signal Pere=4882 x=25055 y=12303 z=0 + Angle=7469 Bright=0 Bdown=1 + Location=77 Adresse=0 Status=0 + Periph=4902 Type=detector Pere=4882 x=25055 y=12303 z=0 + Angle=7469 Bright=0 Bdown=1 + Location=77 Adresse=0 Status=0 + Periph=4905 Type=actuator Pere=4882 x=26673 y=11326 z=0 + Angle=4308 Bright=0 Bdown=0 + Location=31 Adresse=819 Status=23 + x=27319 y=10344 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=4893 arc +Nport=2 Nperiph=3 Ninter=3 +Xmin=23248 Ymin=10409 Xmax=27875 Ymax=13838 +StartAngle=2102 ArcAngle=6898 Rayon=4100 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=23648 lYc=9338 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=4894 port x=27475 y=10809 z=1000 + Angle=11102 Local=0 Connecte=1 + ConnecteAuPort=4877 ConnecteAuSegment=4875 + Port=4895 port x=23648 y=13438 z=1000 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=6237 ConnecteAuSegment=6236 + Periph=4903 Type=signal Pere=4893 x=25972 y=12716 z=0 + Angle=5547 Bright=0 Bdown=1 + Location=49 Adresse=0 Status=0 + Periph=4904 Type=detector Pere=4893 x=25972 y=12716 z=0 + Angle=5547 Bright=0 Bdown=1 + Location=49 Adresse=0 Status=0 + Periph=7092 Type=actuator Pere=4893 x=27447 y=10881 z=0 + Angle=2210 Bright=1 Bdown=0 + Location=1 Adresse=830 Status=23 + x=26148 y=12588 z=1000 + MirrorZ=0 MirrorParent=0 + x=23891 y=13596 z=1000 + MirrorZ=0 MirrorParent=0 + x=27358 y=11442 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=5502 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-1191 Ymin=5863 Xmax=2859 Ymax=7534 +StartAngle=-9000 ArcAngle=-3000 Rayon=6500 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=2459 lYc=12763 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=5503 port x=2459 y=6263 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=1812 ConnecteAuSegment=1810 + Port=5504 port x=-791 y=7134 z=0 + Angle=-3000 Local=1 Connecte=1 + ConnecteAuPort=5506 ConnecteAuSegment=5505 + +Segment=5505 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=-2490 Ymin=6734 Xmax=-391 Ymax=8284 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=5506 port x=-791 y=7134 z=0 + Angle=15000 Local=0 Connecte=1 + ConnecteAuPort=5504 ConnecteAuSegment=5502 + Port=5507 port x=-2090 y=7884 z=0 + Angle=-3000 Local=1 Connecte=1 + ConnecteAuPort=5509 ConnecteAuSegment=5508 + +Segment=5508 bumper_stop +Nport=2 Nperiph=0 Ninter=0 +Xmin=-3356 Ymin=7084 Xmax=-1290 Ymax=8784 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=5509 port x=-2090 y=7884 z=0 + Angle=15000 Local=0 Connecte=1 + ConnecteAuPort=5507 ConnecteAuSegment=5505 + Port=5510 dummy_port x=-2956 y=8384 z=0 + Angle=-3000 Local=1 Connecte=0 + ConnecteAuPort=0 ConnecteAuSegment=0 + +Segment=6196 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=-4777 Ymin=13368 Xmax=-2212 Ymax=14525 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=23 Adresse2=0 Duree=3 + Port=6197 port x=-2612 y=13780 z=0 + Angle=-17959 Local=0 Connecte=1 + ConnecteAuPort=6232 ConnecteAuSegment=6231 + Port=6198 port x=-4294 y=13768 z=0 + Angle=41 Local=1 Connecte=1 + ConnecteAuPort=6208 ConnecteAuSegment=6204 + Port=6199 port x=-4377 y=14125 z=0 + Angle=-2271 Local=2 Connecte=1 + ConnecteAuPort=6282 ConnecteAuSegment=6281 + +Segment=6200 turnout +Nport=3 Nperiph=0 Ninter=1 +Xmin=-4839 Ymin=12668 Xmax=-2279 Ymax=13827 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=22 Adresse2=0 Duree=2 + Port=6201 port x=-2679 y=13069 z=0 + Angle=-17997 Local=0 Connecte=1 + ConnecteAuPort=3734 ConnecteAuSegment=3733 + Port=6202 port x=-4359 y=13068 z=0 + Angle=3 Local=1 Connecte=1 + ConnecteAuPort=6606 ConnecteAuSegment=6605 + Port=6203 port x=-4439 y=13427 z=0 + Angle=-2309 Local=2 Connecte=1 + ConnecteAuPort=6207 ConnecteAuSegment=6204 + x=-3260 y=13273 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=6204 crossing +Nport=4 Nperiph=0 Ninter=2 +Xmin=-6548 Ymin=13027 Xmax=-3894 Ymax=14494 +StartAngle=-2309 ArcAngle=2350 Rayon=3966 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=1700 longueurDev=1700 +DeltaDev=739 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=104 Adresse2=0 Duree=0 + Port=6205 port x=-6003 y=14094 z=0 + Angle=-2309 Local=0 Connecte=1 + ConnecteAuPort=6294 ConnecteAuSegment=6293 + Port=6206 port x=-6148 y=13754 z=0 + Angle=41 Local=1 Connecte=1 + ConnecteAuPort=6819 ConnecteAuSegment=6814 + Port=6207 port x=-4439 y=13427 z=0 + Angle=15691 Local=2 Connecte=1 + ConnecteAuPort=6203 ConnecteAuSegment=6200 + Port=6208 port x=-4294 y=13768 z=0 + Angle=-17959 Local=3 Connecte=1 + ConnecteAuPort=6198 ConnecteAuSegment=6196 + x=-4465 y=13438 z=0 + MirrorZ=1000 MirrorParent=0 + x=-6148 y=13754 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=6231 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=-3012 Ymin=13380 Xmax=-602 Ymax=14192 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6232 port x=-2612 y=13780 z=0 + Angle=43 Local=0 Connecte=1 + ConnecteAuPort=6197 ConnecteAuSegment=6196 + Port=6233 port x=-1002 y=13792 z=0 + Angle=-17957 Local=1 Connecte=1 + ConnecteAuPort=3731 ConnecteAuSegment=3729 + +Segment=6236 straight +Nport=2 Nperiph=0 Ninter=2 +Xmin=13248 Ymin=13038 Xmax=24048 Ymax=13838 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6237 port x=23648 y=13438 z=1000 + Angle=-18000 Local=0 Connecte=1 + ConnecteAuPort=4895 ConnecteAuSegment=4893 + Port=6238 port x=13648 y=13438 z=1000 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=6240 ConnecteAuSegment=6239 + x=19120 y=13760 z=1000 + MirrorZ=0 MirrorParent=0 + x=19120 y=13760 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=6239 straight +Nport=2 Nperiph=5 Ninter=10 +Xmin=3248 Ymin=13038 Xmax=14048 Ymax=13838 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6240 port x=13648 y=13438 z=1000 + Angle=-18000 Local=0 Connecte=1 + ConnecteAuPort=6238 ConnecteAuSegment=6236 + Port=6241 port x=3648 y=13438 z=1000 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=6243 ConnecteAuSegment=6242 + Periph=7042 Type=signal Pere=6239 x=4798 y=13438 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=88 Adresse=63 Status=1 + Periph=7043 Type=detector Pere=6239 x=4798 y=13438 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=88 Adresse=535 Status=1 + Periph=7062 Type=detector Pere=6239 x=13597 y=13438 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=0 Adresse=535 Status=1 + Periph=7072 Type=signal Pere=6239 x=4798 y=13438 z=0 + Angle=9000 Bright=0 Bdown=1 + Location=88 Adresse=0 Status=0 + Periph=7073 Type=detector Pere=6239 x=4798 y=13438 z=0 + Angle=9000 Bright=0 Bdown=1 + Location=88 Adresse=535 Status=1 + x=12420 y=13759 z=1000 + MirrorZ=0 MirrorParent=0 + x=5720 y=13759 z=1000 + MirrorZ=0 MirrorParent=0 + x=6498 y=13273 z=1000 + MirrorZ=0 MirrorParent=0 + x=7879 y=13327 z=1000 + MirrorZ=0 MirrorParent=0 + x=10865 y=13755 z=1000 + MirrorZ=0 MirrorParent=0 + x=8931 y=13551 z=1000 + MirrorZ=0 MirrorParent=0 + x=8701 y=13502 z=1000 + MirrorZ=0 MirrorParent=0 + x=5720 y=13759 z=1000 + MirrorZ=0 MirrorParent=0 + x=8400 y=13438 z=1000 + MirrorZ=0 MirrorParent=0 + x=10865 y=13755 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=6242 straight +Nport=2 Nperiph=1 Ninter=8 +Xmin=-6752 Ymin=13038 Xmax=4048 Ymax=13838 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6243 port x=3648 y=13438 z=1000 + Angle=-18000 Local=0 Connecte=1 + ConnecteAuPort=6241 ConnecteAuSegment=6239 + Port=6244 port x=-6352 y=13438 z=1000 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=6457 ConnecteAuSegment=6456 + Periph=7083 Type=detector Pere=6242 x=418 y=13438 z=0 + Angle=9000 Bright=1 Bdown=1 + Location=32 Adresse=535 Status=1 + x=2970 y=13603 z=1000 + MirrorZ=0 MirrorParent=0 + x=3150 y=13273 z=1000 + MirrorZ=0 MirrorParent=0 + x=2372 y=13438 z=1000 + MirrorZ=0 MirrorParent=0 + x=-1042 y=13438 z=1000 + MirrorZ=0 MirrorParent=0 + x=-1790 y=13273 z=1000 + MirrorZ=0 MirrorParent=0 + x=-3260 y=13273 z=1000 + MirrorZ=0 MirrorParent=0 + x=-4465 y=13438 z=1000 + MirrorZ=0 MirrorParent=0 + x=-6148 y=13754 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=6250 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=-16826 Ymin=17449 Xmax=-13836 Ymax=18501 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=32 Adresse2=0 Duree=5 + Port=6251 port x=-14236 y=18101 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=6301 ConnecteAuSegment=6296 + Port=6252 port x=-16426 y=18101 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=6255 ConnecteAuSegment=6254 + Port=6253 port x=-16399 y=17849 z=0 + Angle=1200 Local=2 Connecte=1 + ConnecteAuPort=6451 ConnecteAuSegment=6449 + +Segment=6254 crossing +Nport=4 Nperiph=0 Ninter=0 +Xmin=-19302 Ymin=17444 Xmax=-16026 Ymax=18758 +StartAngle=18000 ArcAngle=1200 Rayon=11779 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=2476 longueurDev=2422 +DeltaDev=515 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=105 Adresse2=0 Duree=0 + Port=6255 port x=-16426 y=18101 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=6252 ConnecteAuSegment=6250 + Port=6256 port x=-16453 y=18358 z=0 + Angle=-16800 Local=1 Connecte=1 + ConnecteAuPort=6262 ConnecteAuSegment=6259 + Port=6257 port x=-18902 y=18101 z=0 + Angle=0 Local=2 Connecte=1 + ConnecteAuPort=9805 ConnecteAuSegment=9802 + Port=6258 port x=-18875 y=17844 z=0 + Angle=1200 Local=3 Connecte=1 + ConnecteAuPort=6311 ConnecteAuSegment=6310 + +Segment=6259 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=-16880 Ymin=17958 Xmax=-13890 Ymax=19010 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=31 Adresse2=0 Duree=5 + Port=6260 port x=-14290 y=18610 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=6289 ConnecteAuSegment=6284 + Port=6261 port x=-16480 y=18610 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=9819 ConnecteAuSegment=9814 + Port=6262 port x=-16453 y=18358 z=0 + Angle=1200 Local=2 Connecte=1 + ConnecteAuPort=6256 ConnecteAuSegment=6254 + +Segment=6281 arc +Nport=2 Nperiph=4 Ninter=0 +Xmin=-7803 Ymin=13725 Xmax=-3977 Ymax=16532 +StartAngle=-11271 ArcAngle=-2169 Rayon=9650 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-652 lYc=23027 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6282 port x=-4377 y=14125 z=0 + Angle=15729 Local=0 Connecte=1 + ConnecteAuPort=6199 ConnecteAuSegment=6196 + Port=6283 port x=-7403 y=16132 z=0 + Angle=-4440 Local=1 Connecte=1 + ConnecteAuPort=6291 ConnecteAuSegment=6286 + Periph=7056 Type=detector Pere=6281 x=-4486 y=14171 z=0 + Angle=6626 Bright=1 Bdown=0 + Location=3 Adresse=534 Status=1 + Periph=7097 Type=actuator Pere=6281 x=-5114 y=14470 z=0 + Angle=6246 Bright=0 Bdown=1 + Location=22 Adresse=827 Status=23 + Periph=9830 Type=signal Pere=6281 x=-5525 y=14698 z=0 + Angle=5967 Bright=0 Bdown=1 + Location=35 Adresse=79 Status=1 + Periph=9831 Type=detector Pere=6281 x=-5525 y=14698 z=0 + Angle=5967 Bright=0 Bdown=1 + Location=35 Adresse=0 Status=0 + +Segment=6284 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-14690 Ymin=18210 Xmax=-13075 Ymax=19010 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6289 port x=-14290 y=18610 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=6260 ConnecteAuSegment=6259 + Port=6290 port x=-13475 y=18610 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=6287 ConnecteAuSegment=6285 + +Segment=6285 curve +Nport=2 Nperiph=1 Ninter=0 +Xmin=-13875 Ymin=15732 Xmax=-7003 Ymax=19010 +StartAngle=9000 ArcAngle=-4440 Rayon=8679 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-13475 lYc=9931 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6287 port x=-13475 y=18610 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=6290 ConnecteAuSegment=6284 + Port=6288 port x=-7403 y=16132 z=0 + Angle=13560 Local=1 Connecte=1 + ConnecteAuPort=6292 ConnecteAuSegment=6286 + Periph=7055 Type=detector Pere=6285 x=-11176 y=18300 z=0 + Angle=-10536 Bright=0 Bdown=0 + Location=34 Adresse=534 Status=1 + +Segment=6286 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-7803 Ymin=15732 Xmax=-7003 Ymax=16532 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6291 port x=-7403 y=16132 z=0 + Angle=13560 Local=0 Connecte=1 + ConnecteAuPort=6283 ConnecteAuSegment=6281 + Port=6292 port x=-7403 y=16132 z=0 + Angle=-4440 Local=1 Connecte=1 + ConnecteAuPort=6288 ConnecteAuSegment=6285 + +Segment=6293 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-9416 Ymin=13694 Xmax=-5603 Ymax=16521 +StartAngle=-11309 ArcAngle=-2169 Rayon=9650 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-2219 lYc=22971 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6294 port x=-6003 y=14094 z=0 + Angle=15691 Local=0 Connecte=1 + ConnecteAuPort=6205 ConnecteAuSegment=6204 + Port=6295 port x=-9016 y=16121 z=0 + Angle=-4478 Local=1 Connecte=1 + ConnecteAuPort=6303 ConnecteAuSegment=6298 + +Segment=6296 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-14636 Ymin=17701 Xmax=-13422 Ymax=18501 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6301 port x=-14236 y=18101 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=6251 ConnecteAuSegment=6250 + Port=6302 port x=-13822 y=18101 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=6299 ConnecteAuSegment=6297 + +Segment=6297 curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-14222 Ymin=15721 Xmax=-8616 Ymax=18501 +StartAngle=9000 ArcAngle=-4478 Rayon=6823 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-13822 lYc=11278 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6299 port x=-13822 y=18101 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=6302 ConnecteAuSegment=6296 + Port=6300 port x=-9016 y=16121 z=0 + Angle=13522 Local=1 Connecte=1 + ConnecteAuPort=6304 ConnecteAuSegment=6298 + +Segment=6298 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-9416 Ymin=15721 Xmax=-8616 Ymax=16521 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6303 port x=-9016 y=16121 z=0 + Angle=13522 Local=0 Connecte=1 + ConnecteAuPort=6295 ConnecteAuSegment=6293 + Port=6304 port x=-9016 y=16121 z=0 + Angle=-4478 Local=1 Connecte=1 + ConnecteAuPort=6300 ConnecteAuSegment=6297 + +Segment=6310 turnout_curved +Nport=3 Nperiph=0 Ninter=0 +Xmin=-22183 Ymin=16141 Xmax=-18475 Ymax=18244 +StartAngle=-16800 ArcAngle=3000 Rayon=5000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=3116 longueurDev=2500 +DeltaDev=670 CurveOffset=0 xc0=1880 yc0=-8842 +DeltaDev2=670 xc=1040 yc=-4891 +Adresse=25 Adresse2=0 Duree=2 + Port=6311 port x=-18875 y=17844 z=0 + Angle=-16800 Local=0 Connecte=1 + ConnecteAuPort=6258 ConnecteAuSegment=6254 + Port=6312 port x=-21783 y=16541 z=0 + Angle=4200 Local=1 Connecte=1 + ConnecteAuPort=6984 ConnecteAuSegment=6979 + Port=6313 port x=-21181 y=16668 z=0 + Angle=4200 Local=2 Connecte=1 + ConnecteAuPort=6968 ConnecteAuSegment=6967 + +Segment=6449 turnout_curved +Nport=3 Nperiph=0 Ninter=0 +Xmin=-19563 Ymin=15862 Xmax=-15999 Ymax=18249 +StartAngle=4200 ArcAngle=3000 Rayon=5000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=3116 longueurDev=2500 +DeltaDev=670 CurveOffset=0 xc0=-6049 yc0=6718 +DeltaDev2=670 xc=-3346 yc=3716 +Adresse=24 Adresse2=0 Duree=2 + Port=6450 port x=-19163 y=16262 z=0 + Angle=4200 Local=0 Connecte=1 + ConnecteAuPort=6801 ConnecteAuSegment=6800 + Port=6451 port x=-16399 y=17849 z=0 + Angle=-16800 Local=1 Connecte=1 + ConnecteAuPort=6253 ConnecteAuSegment=6250 + Port=6452 port x=-16857 y=17437 z=0 + Angle=-16800 Local=2 Connecte=1 + ConnecteAuPort=6466 ConnecteAuSegment=6461 + +Segment=6456 arc +Nport=2 Nperiph=0 Ninter=1 +Xmin=-8607 Ymin=13038 Xmax=-5952 Ymax=14335 +StartAngle=-9000 ArcAngle=-3000 Rayon=3710 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-6352 lYc=17148 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6457 port x=-6352 y=13438 z=1000 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=6244 ConnecteAuSegment=6242 + Port=6458 port x=-8207 y=13935 z=1000 + Angle=-3000 Local=1 Connecte=1 + ConnecteAuPort=6464 ConnecteAuSegment=6459 + x=-7681 y=13684 z=1000 + MirrorZ=0 MirrorParent=0 + +Segment=6459 pre_curve +Nport=2 Nperiph=1 Ninter=0 +Xmin=-13696 Ymin=13535 Xmax=-7807 Ymax=17273 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6464 port x=-8207 y=13935 z=1000 + Angle=15000 Local=0 Connecte=1 + ConnecteAuPort=6458 ConnecteAuSegment=6456 + Port=6465 port x=-13296 y=16873 z=386 + Angle=-3000 Local=1 Connecte=1 + ConnecteAuPort=6462 ConnecteAuSegment=6460 + Periph=7053 Type=detector Pere=6459 x=-8214 y=13939 z=0 + Angle=6000 Bright=0 Bdown=0 + Location=0 Adresse=533 Status=1 + +Segment=6460 curve +Nport=2 Nperiph=4 Ninter=0 +Xmin=-17257 Ymin=16473 Xmax=-12896 Ymax=17947 +StartAngle=6000 ArcAngle=4200 Rayon=5031 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-15811 lYc=12516 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6462 port x=-13296 y=16873 z=386 + Angle=15000 Local=0 Connecte=1 + ConnecteAuPort=6465 ConnecteAuSegment=6459 + Port=6463 port x=-16857 y=17437 z=0 + Angle=1200 Local=1 Connecte=1 + ConnecteAuPort=6467 ConnecteAuSegment=6461 + Periph=7022 Type=signal Pere=6460 x=-15752 y=17547 z=0 + Angle=8933 Bright=0 Bdown=0 + Location=69 Adresse=71 Status=1 + Periph=7023 Type=detector Pere=6460 x=-15752 y=17547 z=0 + Angle=8933 Bright=0 Bdown=0 + Location=69 Adresse=0 Status=0 + Periph=7054 Type=detector Pere=6460 x=-15253 y=17516 z=0 + Angle=8363 Bright=1 Bdown=1 + Location=56 Adresse=533 Status=1 + Periph=7096 Type=actuator Pere=6460 x=-15907 y=17546 z=0 + Angle=9109 Bright=0 Bdown=0 + Location=74 Adresse=831 Status=23 + +Segment=6461 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-17257 Ymin=17037 Xmax=-16457 Ymax=17837 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6466 port x=-16857 y=17437 z=0 + Angle=1200 Local=0 Connecte=1 + ConnecteAuPort=6452 ConnecteAuSegment=6449 + Port=6467 port x=-16857 y=17437 z=0 + Angle=-16800 Local=1 Connecte=1 + ConnecteAuPort=6463 ConnecteAuSegment=6460 + +Segment=6600 dbl_slip_switch +Nport=4 Nperiph=0 Ninter=0 +Xmin=-12501 Ymin=7563 Xmax=-9267 Ymax=9310 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=26 Adresse2=28 Duree=2 + Port=6601 port x=-12101 y=8211 z=0 + Angle=1050 Local=0 Connecte=1 + ConnecteAuPort=6995 ConnecteAuSegment=6990 + Port=6602 port x=-12027 y=7963 z=0 + Angle=2250 Local=1 Connecte=1 + ConnecteAuPort=6986 ConnecteAuSegment=6981 + Port=6603 port x=-9667 y=8662 z=0 + Angle=-16950 Local=2 Connecte=1 + ConnecteAuPort=6965 ConnecteAuSegment=6960 + Port=6604 port x=-9740 y=8910 z=0 + Angle=-15750 Local=3 Connecte=1 + ConnecteAuPort=6935 ConnecteAuSegment=6934 + +Segment=6605 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-6175 Ymin=12386 Xmax=-3959 Ymax=13468 +StartAngle=9003 ArcAngle=2250 Rayon=3700 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-4357 lYc=9368 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6606 port x=-4359 y=13068 z=0 + Angle=-17997 Local=0 Connecte=1 + ConnecteAuPort=6202 ConnecteAuSegment=6200 + Port=6607 port x=-5775 y=12786 z=0 + Angle=2253 Local=1 Connecte=1 + ConnecteAuPort=7004 ConnecteAuSegment=6999 + +Segment=6691 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-1565 Ymin=3254 Xmax=1148 Ymax=4435 +StartAngle=-9001 ArcAngle=-2250 Rayon=5000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=749 lYc=8654 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6692 port x=748 y=3654 z=0 + Angle=17999 Local=0 Connecte=1 + ConnecteAuPort=2100 ConnecteAuSegment=2099 + Port=6693 port x=-1165 y=4035 z=0 + Angle=-2251 Local=1 Connecte=1 + ConnecteAuPort=6705 ConnecteAuSegment=6702 + +Segment=6702 turnout_curved +Nport=3 Nperiph=1 Ninter=0 +Xmin=-3618 Ymin=3146 Xmax=-390 Ymax=6011 +StartAngle=-5251 ArcAngle=3000 Rayon=5000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=3116 longueurDev=2500 +DeltaDev=670 CurveOffset=0 xc0=7173 yc0=5502 +DeltaDev2=670 xc=3967 yc=3043 +Adresse=12 Adresse2=0 Duree=2 + Port=6703 port x=-3218 y=5611 z=0 + Angle=-5251 Local=0 Connecte=1 + ConnecteAuPort=6729 ConnecteAuSegment=6724 + Port=6704 port x=-790 y=3546 z=0 + Angle=15749 Local=1 Connecte=1 + ConnecteAuPort=6711 ConnecteAuSegment=6710 + Port=6705 port x=-1165 y=4035 z=0 + Angle=15749 Local=2 Connecte=1 + ConnecteAuPort=6693 ConnecteAuSegment=6691 + Periph=7091 Type=actuator Pere=6702 x=-790 y=3546 z=0 + Angle=6749 Bright=0 Bdown=0 + Location=0 Adresse=826 Status=23 + +Segment=6706 turnout +Nport=3 Nperiph=1 Ninter=0 +Xmin=-362 Ymin=2467 Xmax=2118 Ymax=3601 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=20 Adresse2=0 Duree=2 + Port=6707 port x=1718 y=2867 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=6718 ConnecteAuSegment=6713 + Port=6708 port x=38 y=2867 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=6753 ConnecteAuSegment=6752 + Port=6709 port x=41 y=3201 z=0 + Angle=-2251 Local=2 Connecte=1 + ConnecteAuPort=6712 ConnecteAuSegment=6710 + Periph=7101 Type=actuator Pere=6706 x=1718 y=2867 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=0 Adresse=815 Status=23 + +Segment=6710 straight +Nport=2 Nperiph=0 Ninter=0 +Xmin=-1190 Ymin=2801 Xmax=441 Ymax=3946 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6711 port x=-790 y=3546 z=0 + Angle=-2255 Local=0 Connecte=1 + ConnecteAuPort=6704 ConnecteAuSegment=6702 + Port=6712 port x=41 y=3201 z=0 + Angle=15745 Local=1 Connecte=1 + ConnecteAuPort=6709 ConnecteAuSegment=6706 + +Segment=6713 pre_curve +Nport=2 Nperiph=4 Ninter=0 +Xmin=1318 Ymin=2467 Xmax=13616 Ymax=3267 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6718 port x=1718 y=2867 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=6707 ConnecteAuSegment=6706 + Port=6719 port x=13216 y=2867 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=6716 ConnecteAuSegment=6714 + Periph=7038 Type=signal Pere=6713 x=2411 y=2867 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=6 Adresse=35 Status=1 + Periph=7039 Type=detector Pere=6713 x=2411 y=2867 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=6 Adresse=0 Status=0 + Periph=7060 Type=detector Pere=6713 x=2411 y=2867 z=0 + Angle=-9000 Bright=1 Bdown=0 + Location=6 Adresse=520 Status=1 + Periph=7061 Type=detector Pere=6713 x=8678 y=2867 z=0 + Angle=-9000 Bright=0 Bdown=1 + Location=60 Adresse=520 Status=1 + +Segment=6714 curve +Nport=2 Nperiph=2 Ninter=0 +Xmin=12816 Ymin=2467 Xmax=15756 Ymax=3692 +StartAngle=-9000 ArcAngle=2247 Rayon=5598 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=13216 lYc=8465 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6716 port x=13216 y=2867 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=6719 ConnecteAuSegment=6713 + Port=6717 port x=15356 y=3292 z=0 + Angle=-15753 Local=1 Connecte=1 + ConnecteAuPort=6721 ConnecteAuSegment=6715 + Periph=7064 Type=signal Pere=6714 x=14051 y=2930 z=0 + Angle=-8142 Bright=0 Bdown=0 + Location=38 Adresse=0 Status=0 + Periph=7065 Type=detector Pere=6714 x=14051 y=2930 z=0 + Angle=-8142 Bright=0 Bdown=0 + Location=38 Adresse=0 Status=0 + +Segment=6715 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=14956 Ymin=2892 Xmax=15756 Ymax=3692 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6720 port x=15356 y=3292 z=0 + Angle=-15753 Local=0 Connecte=1 + ConnecteAuPort=2136 ConnecteAuSegment=2133 + Port=6721 port x=15356 y=3292 z=0 + Angle=2247 Local=1 Connecte=1 + ConnecteAuPort=6717 ConnecteAuSegment=6714 + +Segment=6722 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-3006 Ymin=12328 Xmax=-2206 Ymax=13128 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6727 port x=-2606 y=12728 z=0 + Angle=-15597 Local=0 Connecte=1 + ConnecteAuPort=3735 ConnecteAuSegment=3733 + Port=6728 port x=-2606 y=12728 z=0 + Angle=2403 Local=1 Connecte=1 + ConnecteAuPort=6725 ConnecteAuSegment=6723 + +Segment=6723 curve +Nport=2 Nperiph=5 Ninter=0 +Xmin=-5323 Ymin=6381 Xmax=-2206 Ymax=13128 +StartAngle=11403 ArcAngle=10346 Rayon=3908 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-1015 lYc=9159 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6725 port x=-2606 y=12728 z=0 + Angle=-15597 Local=0 Connecte=1 + ConnecteAuPort=6728 ConnecteAuSegment=6722 + Port=6726 port x=-4115 y=6781 z=0 + Angle=12749 Local=1 Connecte=1 + ConnecteAuPort=6730 ConnecteAuSegment=6724 + Periph=7036 Type=signal Pere=6723 x=-2792 y=12640 z=0 + Angle=11705 Bright=0 Bdown=1 + Location=2 Adresse=61 Status=1 + Periph=7037 Type=detector Pere=6723 x=-2792 y=12640 z=0 + Angle=11705 Bright=0 Bdown=1 + Location=2 Adresse=0 Status=0 + Periph=7057 Type=detector Pere=6723 x=-2792 y=12640 z=0 + Angle=11904 Bright=1 Bdown=0 + Location=2 Adresse=517 Status=1 + Periph=7058 Type=detector Pere=6723 x=-4803 y=8196 z=0 + Angle=-16574 Bright=0 Bdown=1 + Location=77 Adresse=517 Status=1 + Periph=7068 Type=actuator Pere=6723 x=-3282 y=12343 z=0 + Angle=12545 Bright=1 Bdown=1 + Location=11 Adresse=809 Status=23 + +Segment=6724 pre_curve +Nport=2 Nperiph=3 Ninter=0 +Xmin=-4515 Ymin=5211 Xmax=-2818 Ymax=7181 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6729 port x=-3218 y=5611 z=0 + Angle=12749 Local=0 Connecte=1 + ConnecteAuPort=6703 ConnecteAuSegment=6702 + Port=6730 port x=-4115 y=6781 z=0 + Angle=-5251 Local=1 Connecte=1 + ConnecteAuPort=6726 ConnecteAuSegment=6723 + Periph=7066 Type=signal Pere=6724 x=-3241 y=5641 z=0 + Angle=3749 Bright=0 Bdown=1 + Location=2 Adresse=0 Status=0 + Periph=7067 Type=detector Pere=6724 x=-3241 y=5641 z=0 + Angle=3749 Bright=0 Bdown=1 + Location=2 Adresse=0 Status=0 + Periph=7069 Type=actuator Pere=6724 x=-3294 y=5710 z=0 + Angle=3749 Bright=0 Bdown=0 + Location=8 Adresse=807 Status=23 + +Segment=6752 turnout_curved +Nport=3 Nperiph=1 Ninter=0 +Xmin=-3478 Ymin=2467 Xmax=438 Ymax=3937 +StartAngle=18000 ArcAngle=3000 Rayon=5000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=3116 longueurDev=2500 +DeltaDev=670 CurveOffset=0 xc0=0 yc0=-9040 +DeltaDev2=670 xc=0 yc=-5000 +Adresse=21 Adresse2=0 Duree=2 + Port=6753 port x=38 y=2867 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=6708 ConnecteAuSegment=6706 + Port=6754 port x=-3078 y=3537 z=0 + Angle=-3000 Local=1 Connecte=1 + ConnecteAuPort=6956 ConnecteAuSegment=6955 + Port=6755 port x=-2462 y=3537 z=0 + Angle=-3000 Local=2 Connecte=1 + ConnecteAuPort=6947 ConnecteAuSegment=6942 + Periph=7090 Type=actuator Pere=6752 x=38 y=2867 z=0 + Angle=9000 Bright=0 Bdown=0 + Location=0 Adresse=825 Status=23 + +Segment=6800 arc +Nport=2 Nperiph=3 Ninter=0 +Xmin=-20782 Ymin=13306 Xmax=-18763 Ymax=16662 +StartAngle=13200 ArcAngle=4500 Rayon=3700 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-16687 lYc=13512 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6801 port x=-19163 y=16262 z=0 + Angle=-13800 Local=0 Connecte=1 + ConnecteAuPort=6450 ConnecteAuSegment=6449 + Port=6802 port x=-20382 y=13706 z=0 + Angle=8700 Local=1 Connecte=1 + ConnecteAuPort=6804 ConnecteAuSegment=6803 + Periph=7016 Type=signal Pere=6800 x=-19544 y=15862 z=0 + Angle=14056 Bright=0 Bdown=1 + Location=19 Adresse=0 Status=0 + Periph=7017 Type=detector Pere=6800 x=-19544 y=15862 z=0 + Angle=14056 Bright=0 Bdown=1 + Location=19 Adresse=0 Status=0 + Periph=7099 Type=actuator Pere=6800 x=-19290 y=16142 z=0 + Angle=13471 Bright=0 Bdown=0 + Location=6 Adresse=829 Status=23 + +Segment=6803 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-20787 Ymin=10637 Xmax=-19037 Ymax=14106 +StartAngle=17700 ArcAngle=4500 Rayon=3700 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-16687 lYc=13512 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6804 port x=-20382 y=13706 z=0 + Angle=-9300 Local=0 Connecte=1 + ConnecteAuPort=6802 ConnecteAuSegment=6800 + Port=6805 port x=-19437 y=11037 z=0 + Angle=13200 Local=1 Connecte=1 + ConnecteAuPort=6807 ConnecteAuSegment=6806 + +Segment=6806 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-19837 Ymin=9418 Xmax=-16481 Ymax=11437 +StartAngle=-13800 ArcAngle=4500 Rayon=3700 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-16687 lYc=13513 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6807 port x=-19437 y=11037 z=0 + Angle=-4800 Local=0 Connecte=1 + ConnecteAuPort=6805 ConnecteAuSegment=6803 + Port=6808 port x=-16881 y=9818 z=0 + Angle=17700 Local=1 Connecte=1 + ConnecteAuPort=6810 ConnecteAuSegment=6809 + +Segment=6809 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-17281 Ymin=9413 Xmax=-13812 Ymax=11163 +StartAngle=-9300 ArcAngle=4500 Rayon=3700 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-16687 lYc=13513 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6810 port x=-16881 y=9818 z=0 + Angle=-300 Local=0 Connecte=1 + ConnecteAuPort=6808 ConnecteAuSegment=6806 + Port=6811 port x=-14212 y=10763 z=0 + Angle=-13800 Local=1 Connecte=1 + ConnecteAuPort=6817 ConnecteAuSegment=6812 + +Segment=6812 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-14612 Ymin=10363 Xmax=-13812 Ymax=11163 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6817 port x=-14212 y=10763 z=0 + Angle=4200 Local=0 Connecte=1 + ConnecteAuPort=6811 ConnecteAuSegment=6809 + Port=6818 port x=-14212 y=10763 z=0 + Angle=-13800 Local=1 Connecte=1 + ConnecteAuPort=6815 ConnecteAuSegment=6813 + +Segment=6813 curve +Nport=2 Nperiph=4 Ninter=1 +Xmin=-14612 Ymin=10363 Xmax=-6109 Ymax=14151 +StartAngle=13200 ArcAngle=-4159 Rayon=11636 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-6426 lYc=2116 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6815 port x=-14212 y=10763 z=0 + Angle=4200 Local=0 Connecte=1 + ConnecteAuPort=6818 ConnecteAuSegment=6812 + Port=6816 port x=-6509 y=13751 z=0 + Angle=-17959 Local=1 Connecte=1 + ConnecteAuPort=6820 ConnecteAuSegment=6814 + Periph=7032 Type=signal Pere=6813 x=-10151 y=13140 z=0 + Angle=-7133 Bright=0 Bdown=0 + Location=56 Adresse=75 Status=1 + Periph=7033 Type=detector Pere=6813 x=-10151 y=13140 z=0 + Angle=-7133 Bright=0 Bdown=0 + Location=56 Adresse=0 Status=0 + Periph=7050 Type=detector Pere=6813 x=-6538 y=13751 z=0 + Angle=-8945 Bright=1 Bdown=1 + Location=99 Adresse=538 Status=1 + Periph=7051 Type=detector Pere=6813 x=-14209 y=10766 z=0 + Angle=-4802 Bright=0 Bdown=0 + Location=0 Adresse=538 Status=1 + x=-7681 y=13684 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=6814 pre_curve +Nport=2 Nperiph=1 Ninter=0 +Xmin=-6909 Ymin=13351 Xmax=-5748 Ymax=14154 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6819 port x=-6148 y=13754 z=0 + Angle=-17959 Local=0 Connecte=1 + ConnecteAuPort=6206 ConnecteAuSegment=6204 + Port=6820 port x=-6509 y=13751 z=0 + Angle=41 Local=1 Connecte=1 + ConnecteAuPort=6816 ConnecteAuSegment=6813 + Periph=7098 Type=actuator Pere=6814 x=-6352 y=13752 z=0 + Angle=9041 Bright=0 Bdown=1 + Location=56 Adresse=828 Status=23 + +Segment=6934 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-10140 Ymin=8510 Xmax=-6508 Ymax=9592 +StartAngle=11250 ArcAngle=-4500 Rayon=3700 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-8324 lYc=5492 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6935 port x=-9740 y=8910 z=0 + Angle=2250 Local=0 Connecte=1 + ConnecteAuPort=6604 ConnecteAuSegment=6600 + Port=6936 port x=-6908 y=8910 z=0 + Angle=15750 Local=1 Connecte=1 + ConnecteAuPort=6938 ConnecteAuSegment=6937 + +Segment=6937 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-7308 Ymin=6508 Xmax=-4506 Ymax=9310 +StartAngle=6750 ArcAngle=-4500 Rayon=3700 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-8324 lYc=5492 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6938 port x=-6908 y=8910 z=0 + Angle=-2250 Local=0 Connecte=1 + ConnecteAuPort=6936 ConnecteAuSegment=6934 + Port=6939 port x=-4906 y=6908 z=0 + Angle=11250 Local=1 Connecte=1 + ConnecteAuPort=6945 ConnecteAuSegment=6940 + +Segment=6940 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-5306 Ymin=5401 Xmax=-4047 Ymax=7308 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6945 port x=-4906 y=6908 z=0 + Angle=-6750 Local=0 Connecte=1 + ConnecteAuPort=6939 ConnecteAuSegment=6937 + Port=6946 port x=-4447 y=5801 z=0 + Angle=11250 Local=1 Connecte=1 + ConnecteAuPort=6943 ConnecteAuSegment=6941 + +Segment=6941 curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-4847 Ymin=3137 Xmax=-2062 Ymax=6201 +StartAngle=-15750 ArcAngle=3750 Rayon=4684 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-120 lYc=7593 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6943 port x=-4447 y=5801 z=0 + Angle=-6750 Local=0 Connecte=1 + ConnecteAuPort=6946 ConnecteAuSegment=6940 + Port=6944 port x=-2462 y=3537 z=0 + Angle=15000 Local=1 Connecte=1 + ConnecteAuPort=6948 ConnecteAuSegment=6942 + +Segment=6942 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-2862 Ymin=3137 Xmax=-2062 Ymax=3937 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6947 port x=-2462 y=3537 z=0 + Angle=15000 Local=0 Connecte=1 + ConnecteAuPort=6755 ConnecteAuSegment=6752 + Port=6948 port x=-2462 y=3537 z=0 + Angle=-3000 Local=1 Connecte=1 + ConnecteAuPort=6944 ConnecteAuSegment=6941 + +Segment=6955 arc +Nport=2 Nperiph=0 Ninter=0 +Xmin=-4651 Ymin=3137 Xmax=-2678 Ymax=4966 +StartAngle=-12000 ArcAngle=-2250 Rayon=4000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-1078 lYc=7001 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6956 port x=-3078 y=3537 z=0 + Angle=15000 Local=0 Connecte=1 + ConnecteAuPort=6754 ConnecteAuSegment=6752 + Port=6957 port x=-4251 y=4566 z=0 + Angle=-5250 Local=1 Connecte=1 + ConnecteAuPort=6963 ConnecteAuSegment=6958 + +Segment=6958 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-6845 Ymin=4166 Xmax=-3851 Ymax=7825 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6963 port x=-4251 y=4566 z=0 + Angle=12750 Local=0 Connecte=1 + ConnecteAuPort=6957 ConnecteAuSegment=6955 + Port=6964 port x=-6445 y=7425 z=0 + Angle=-5250 Local=1 Connecte=1 + ConnecteAuPort=6961 ConnecteAuSegment=6959 + +Segment=6959 curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-10067 Ymin=7025 Xmax=-6045 Ymax=9118 +StartAngle=3750 ArcAngle=6300 Rayon=3303 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-9065 lYc=5415 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6961 port x=-6445 y=7425 z=0 + Angle=12750 Local=0 Connecte=1 + ConnecteAuPort=6964 ConnecteAuSegment=6958 + Port=6962 port x=-9667 y=8662 z=0 + Angle=1050 Local=1 Connecte=1 + ConnecteAuPort=6966 ConnecteAuSegment=6960 + +Segment=6960 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-10067 Ymin=8262 Xmax=-9267 Ymax=9062 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6965 port x=-9667 y=8662 z=0 + Angle=1050 Local=0 Connecte=1 + ConnecteAuPort=6603 ConnecteAuSegment=6600 + Port=6966 port x=-9667 y=8662 z=0 + Angle=-16950 Local=1 Connecte=1 + ConnecteAuPort=6962 ConnecteAuSegment=6959 + +Segment=6967 turnout_curved +Nport=3 Nperiph=0 Ninter=0 +Xmin=-23448 Ymin=13686 Xmax=-20781 Ymax=17068 +StartAngle=-13800 ArcAngle=3000 Rayon=5000 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=3116 longueurDev=2500 +DeltaDev=670 CurveOffset=0 xc0=6049 yc0=-6717 +DeltaDev2=670 xc=3346 yc=-3716 +Adresse=27 Adresse2=0 Duree=2 + Port=6968 port x=-21181 y=16668 z=0 + Angle=-13800 Local=0 Connecte=1 + ConnecteAuPort=6313 ConnecteAuSegment=6310 + Port=6969 port x=-23048 y=14086 z=0 + Angle=7200 Local=1 Connecte=1 + ConnecteAuPort=6993 ConnecteAuSegment=6988 + Port=6970 port x=-22590 y=14497 z=0 + Angle=7200 Local=2 Connecte=1 + ConnecteAuPort=7002 ConnecteAuSegment=6997 + +Segment=6979 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-22183 Ymin=16141 Xmax=-21383 Ymax=16941 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6984 port x=-21783 y=16541 z=0 + Angle=-13800 Local=0 Connecte=1 + ConnecteAuPort=6312 ConnecteAuSegment=6310 + Port=6985 port x=-21783 y=16541 z=0 + Angle=4200 Local=1 Connecte=1 + ConnecteAuPort=6982 ConnecteAuSegment=6980 + +Segment=6980 curve +Nport=2 Nperiph=5 Ninter=0 +Xmin=-24168 Ymin=5680 Xmax=-15071 Ymax=16941 +StartAngle=13200 ArcAngle=16050 Rayon=6001 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-17767 lYc=12081 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6982 port x=-21783 y=16541 z=0 + Angle=-13800 Local=0 Connecte=1 + ConnecteAuPort=6985 ConnecteAuSegment=6979 + Port=6983 port x=-15471 y=6537 z=0 + Angle=-15750 Local=1 Connecte=1 + ConnecteAuPort=6987 ConnecteAuSegment=6981 + Periph=7010 Type=signal Pere=6980 x=-23762 y=12345 z=0 + Angle=17748 Bright=0 Bdown=1 + Location=28 Adresse=65 Status=1 + Periph=7011 Type=detector Pere=6980 x=-23762 y=12345 z=0 + Angle=17748 Bright=0 Bdown=1 + Location=28 Adresse=0 Status=0 + Periph=7044 Type=detector Pere=6980 x=-23042 y=14942 z=0 + Angle=15148 Bright=1 Bdown=0 + Location=12 Adresse=529 Status=1 + Periph=7047 Type=detector Pere=6980 x=-22800 y=8813 z=0 + Angle=-14701 Bright=0 Bdown=1 + Location=50 Adresse=529 Status=1 + Periph=7093 Type=actuator Pere=6980 x=-23343 y=14299 z=0 + Angle=15831 Bright=0 Bdown=1 + Location=16 Adresse=822 Status=23 + +Segment=6981 pre_curve +Nport=2 Nperiph=3 Ninter=0 +Xmin=-15871 Ymin=6137 Xmax=-11627 Ymax=8363 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6986 port x=-12027 y=7963 z=0 + Angle=-15750 Local=0 Connecte=1 + ConnecteAuPort=6602 ConnecteAuSegment=6600 + Port=6987 port x=-15471 y=6537 z=0 + Angle=2250 Local=1 Connecte=1 + ConnecteAuPort=6983 ConnecteAuSegment=6980 + Periph=7008 Type=signal Pere=6981 x=-13002 y=7559 z=0 + Angle=11250 Bright=0 Bdown=1 + Location=28 Adresse=0 Status=0 + Periph=7009 Type=detector Pere=6981 x=-13002 y=7559 z=0 + Angle=11250 Bright=0 Bdown=1 + Location=28 Adresse=0 Status=0 + Periph=9297 Type=actuator Pere=6981 x=-13032 y=7547 z=0 + Angle=11250 Bright=0 Bdown=0 + Location=29 Adresse=836 Status=23 + +Segment=6988 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-23448 Ymin=13686 Xmax=-22648 Ymax=14486 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6993 port x=-23048 y=14086 z=0 + Angle=-10800 Local=0 Connecte=1 + ConnecteAuPort=6969 ConnecteAuSegment=6967 + Port=6994 port x=-23048 y=14086 z=0 + Angle=7200 Local=1 Connecte=1 + ConnecteAuPort=6991 ConnecteAuSegment=6989 + +Segment=6989 curve +Nport=2 Nperiph=5 Ninter=0 +Xmin=-23705 Ymin=6799 Xmax=-16686 Ymax=14486 +StartAngle=16200 ArcAngle=11850 Rayon=5261 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-18044 lYc=12460 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6991 port x=-23048 y=14086 z=0 + Angle=-10800 Local=0 Connecte=1 + ConnecteAuPort=6994 ConnecteAuSegment=6988 + Port=6992 port x=-17086 y=7287 z=0 + Angle=-16950 Local=1 Connecte=1 + ConnecteAuPort=6996 ConnecteAuSegment=6990 + Periph=7012 Type=signal Pere=6989 x=-23141 y=13762 z=0 + Angle=16567 Bright=0 Bdown=1 + Location=3 Adresse=67 Status=1 + Periph=7013 Type=detector Pere=6989 x=-23141 y=13762 z=0 + Angle=16567 Bright=0 Bdown=1 + Location=3 Adresse=0 Status=0 + Periph=7045 Type=detector Pere=6989 x=-23141 y=13762 z=0 + Angle=16863 Bright=1 Bdown=0 + Location=3 Adresse=530 Status=1 + Periph=7048 Type=detector Pere=6989 x=-20422 y=7767 z=0 + Angle=-11687 Bright=0 Bdown=1 + Location=68 Adresse=530 Status=1 + Periph=7094 Type=actuator Pere=6989 x=-23106 y=13892 z=0 + Angle=16421 Bright=0 Bdown=1 + Location=1 Adresse=823 Status=23 + +Segment=6990 pre_curve +Nport=2 Nperiph=3 Ninter=0 +Xmin=-17486 Ymin=6887 Xmax=-11701 Ymax=8611 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=6995 port x=-12101 y=8211 z=0 + Angle=-16950 Local=0 Connecte=1 + ConnecteAuPort=6601 ConnecteAuSegment=6600 + Port=6996 port x=-17086 y=7287 z=0 + Angle=1050 Local=1 Connecte=1 + ConnecteAuPort=6992 ConnecteAuSegment=6989 + Periph=7006 Type=signal Pere=6990 x=-12866 y=8069 z=0 + Angle=10050 Bright=0 Bdown=1 + Location=15 Adresse=0 Status=0 + Periph=7007 Type=detector Pere=6990 x=-12866 y=8069 z=0 + Angle=10050 Bright=0 Bdown=1 + Location=15 Adresse=0 Status=0 + Periph=9296 Type=actuator Pere=6990 x=-13089 y=8028 z=0 + Angle=10050 Bright=1 Bdown=0 + Location=19 Adresse=835 Status=23 + +Segment=6997 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-22990 Ymin=14097 Xmax=-22190 Ymax=14897 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=7002 port x=-22590 y=14497 z=0 + Angle=-10800 Local=0 Connecte=1 + ConnecteAuPort=6970 ConnecteAuSegment=6967 + Port=7003 port x=-22590 y=14497 z=0 + Angle=7200 Local=1 Connecte=1 + ConnecteAuPort=7000 ConnecteAuSegment=6998 + +Segment=6998 curve +Nport=2 Nperiph=4 Ninter=0 +Xmin=-23228 Ymin=7731 Xmax=-15702 Ymax=14897 +StartAngle=16200 ArcAngle=13053 Rayon=4863 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-17965 lYc=12994 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=7000 port x=-22590 y=14497 z=0 + Angle=-10800 Local=0 Connecte=1 + ConnecteAuPort=7003 ConnecteAuSegment=6997 + Port=7001 port x=-16102 y=8502 z=0 + Angle=-15747 Local=1 Connecte=1 + ConnecteAuPort=7005 ConnecteAuSegment=6999 + Periph=7014 Type=signal Pere=6998 x=-22828 y=12942 z=0 + Angle=-17939 Bright=0 Bdown=1 + Location=14 Adresse=69 Status=1 + Periph=7015 Type=detector Pere=6998 x=-22828 y=12942 z=0 + Angle=-17939 Bright=0 Bdown=1 + Location=14 Adresse=0 Status=0 + Periph=7046 Type=detector Pere=6998 x=-22828 y=12942 z=0 + Angle=-17684 Bright=1 Bdown=0 + Location=14 Adresse=537 Status=1 + Periph=7095 Type=actuator Pere=6998 x=-22821 y=13256 z=0 + Angle=17691 Bright=1 Bdown=1 + Location=11 Adresse=824 Status=23 + +Segment=6999 pre_curve +Nport=2 Nperiph=3 Ninter=0 +Xmin=-16502 Ymin=8102 Xmax=-5375 Ymax=13186 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=7004 port x=-5775 y=12786 z=0 + Angle=-15747 Local=0 Connecte=1 + ConnecteAuPort=6607 ConnecteAuSegment=6605 + Port=7005 port x=-16102 y=8502 z=0 + Angle=2253 Local=1 Connecte=1 + ConnecteAuPort=7001 ConnecteAuSegment=6998 + Periph=7034 Type=signal Pere=6999 x=-6172 y=12621 z=0 + Angle=11253 Bright=0 Bdown=1 + Location=3 Adresse=0 Status=0 + Periph=7035 Type=detector Pere=6999 x=-6172 y=12621 z=0 + Angle=11253 Bright=0 Bdown=1 + Location=3 Adresse=0 Status=0 + Periph=7049 Type=detector Pere=6999 x=-15556 y=8728 z=0 + Angle=11253 Bright=0 Bdown=0 + Location=94 Adresse=537 Status=1 + +Segment=8774 turnout +Nport=3 Nperiph=0 Ninter=2 +Xmin=5316 Ymin=12674 Xmax=8306 Ymax=13727 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=29 Adresse2=0 Duree=2 + Port=8775 port x=5716 y=13074 z=0 + Angle=3 Local=0 Connecte=1 + ConnecteAuPort=18 ConnecteAuSegment=16 + Port=8776 port x=7906 y=13075 z=0 + Angle=-17997 Local=1 Connecte=1 + ConnecteAuPort=8783 ConnecteAuSegment=8782 + Port=8777 port x=7879 y=13327 z=0 + Angle=-16797 Local=2 Connecte=1 + ConnecteAuPort=8812 ConnecteAuSegment=8811 + x=6498 y=13273 z=0 + MirrorZ=1000 MirrorParent=0 + x=7879 y=13327 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=8778 turnout +Nport=3 Nperiph=0 Ninter=3 +Xmin=8275 Ymin=13102 Xmax=11265 Ymax=14155 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=30 Adresse2=0 Duree=5 + Port=8779 port x=10865 y=13755 z=0 + Angle=-17998 Local=0 Connecte=1 + ConnecteAuPort=8824 ConnecteAuSegment=8823 + Port=8780 port x=8675 y=13754 z=0 + Angle=2 Local=1 Connecte=1 + ConnecteAuPort=8802 ConnecteAuSegment=8800 + Port=8781 port x=8701 y=13502 z=0 + Angle=1202 Local=2 Connecte=1 + ConnecteAuPort=8813 ConnecteAuSegment=8811 + x=10865 y=13755 z=0 + MirrorZ=1000 MirrorParent=0 + x=8931 y=13551 z=0 + MirrorZ=1000 MirrorParent=0 + x=8701 y=13502 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=8782 straight +Nport=2 Nperiph=4 Ninter=0 +Xmin=7506 Ymin=12675 Xmax=12806 Ymax=13477 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=8783 port x=7906 y=13075 z=0 + Angle=3 Local=0 Connecte=1 + ConnecteAuPort=8776 ConnecteAuSegment=8774 + Port=8784 port x=12406 y=13077 z=0 + Angle=-17997 Local=1 Connecte=1 + ConnecteAuPort=637 ConnecteAuSegment=635 + Periph=8828 Type=signal Pere=8782 x=9528 y=13076 z=0 + Angle=-8997 Bright=0 Bdown=1 + Location=36 Adresse=73 Status=1 + Periph=8829 Type=detector Pere=8782 x=9528 y=13076 z=0 + Angle=-8997 Bright=0 Bdown=1 + Location=36 Adresse=0 Status=0 + Periph=8830 Type=detector Pere=8782 x=9528 y=13076 z=0 + Angle=-8997 Bright=1 Bdown=0 + Location=36 Adresse=513 Status=1 + Periph=8831 Type=actuator Pere=8782 x=8132 y=13075 z=0 + Angle=-8997 Bright=0 Bdown=1 + Location=5 Adresse=805 Status=23 + +Segment=8800 straight +Nport=2 Nperiph=0 Ninter=1 +Xmin=5320 Ymin=13359 Xmax=9070 Ymax=14159 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=8801 port x=5720 y=13759 z=0 + Angle=0 Local=0 Connecte=1 + ConnecteAuPort=134 ConnecteAuSegment=133 + Port=8802 port x=8670 y=13759 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=8780 ConnecteAuSegment=8778 + x=5720 y=13759 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=8811 straight +Nport=2 Nperiph=0 Ninter=1 +Xmin=7479 Ymin=12927 Xmax=9101 Ymax=13902 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=8812 port x=7879 y=13327 z=0 + Angle=1202 Local=0 Connecte=1 + ConnecteAuPort=8777 ConnecteAuSegment=8774 + Port=8813 port x=8701 y=13502 z=0 + Angle=-16798 Local=1 Connecte=1 + ConnecteAuPort=8781 ConnecteAuSegment=8778 + x=8400 y=13438 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=8823 straight +Nport=2 Nperiph=3 Ninter=1 +Xmin=10465 Ymin=13355 Xmax=12815 Ymax=14156 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=8824 port x=10865 y=13755 z=0 + Angle=4 Local=0 Connecte=1 + ConnecteAuPort=8779 ConnecteAuSegment=8778 + Port=8825 port x=12415 y=13756 z=0 + Angle=-17996 Local=1 Connecte=1 + ConnecteAuPort=112 ConnecteAuSegment=110 + Periph=962 Type=signal Pere=8823 x=12374 y=13756 z=0 + Angle=-8996 Bright=0 Bdown=1 + Location=97 Adresse=0 Status=0 + Periph=963 Type=detector Pere=8823 x=12374 y=13756 z=0 + Angle=-8996 Bright=0 Bdown=1 + Location=97 Adresse=0 Status=0 + Periph=9829 Type=actuator Pere=8823 x=11811 y=13756 z=0 + Angle=-8996 Bright=0 Bdown=0 + Location=61 Adresse=837 Status=23 + x=10865 y=13755 z=0 + MirrorZ=1000 MirrorParent=0 + +Segment=9802 turnout +Nport=3 Nperiph=0 Ninter=0 +Xmin=-21470 Ymin=17498 Xmax=-18502 Ymax=18753 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=34 Adresse2=0 Duree=4 + Port=9803 port x=-21070 y=17898 z=0 + Angle=1200 Local=0 Connecte=1 + ConnecteAuPort=9822 ConnecteAuSegment=9821 + Port=9804 port x=-18928 y=18353 z=0 + Angle=-16800 Local=1 Connecte=1 + ConnecteAuPort=9817 ConnecteAuSegment=9812 + Port=9805 port x=-18902 y=18101 z=0 + Angle=18000 Local=2 Connecte=1 + ConnecteAuPort=6257 ConnecteAuSegment=6254 + +Segment=9812 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-19328 Ymin=17953 Xmax=-18528 Ymax=18753 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=9817 port x=-18928 y=18353 z=0 + Angle=1200 Local=0 Connecte=1 + ConnecteAuPort=9804 ConnecteAuSegment=9802 + Port=9818 port x=-18928 y=18353 z=0 + Angle=-16800 Local=1 Connecte=1 + ConnecteAuPort=9815 ConnecteAuSegment=9813 + +Segment=9813 curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-19328 Ymin=17953 Xmax=-16083 Ymax=19010 +StartAngle=10200 ArcAngle=-1200 Rayon=11761 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=-16483 lYc=6849 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=9815 port x=-18928 y=18353 z=0 + Angle=1200 Local=0 Connecte=1 + ConnecteAuPort=9818 ConnecteAuSegment=9812 + Port=9816 port x=-16483 y=18610 z=0 + Angle=18000 Local=1 Connecte=1 + ConnecteAuPort=9820 ConnecteAuSegment=9814 + +Segment=9814 pre_curve +Nport=2 Nperiph=0 Ninter=0 +Xmin=-16883 Ymin=18210 Xmax=-16080 Ymax=19010 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=9819 port x=-16480 y=18610 z=0 + Angle=18000 Local=0 Connecte=1 + ConnecteAuPort=6261 ConnecteAuSegment=6259 + Port=9820 port x=-16483 y=18610 z=0 + Angle=0 Local=1 Connecte=1 + ConnecteAuPort=9816 ConnecteAuSegment=9813 + +Segment=9821 straight +Nport=2 Nperiph=2 Ninter=0 +Xmin=-22448 Ymin=17290 Xmax=-20670 Ymax=18298 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=9822 port x=-21070 y=17898 z=0 + Angle=-16799 Local=0 Connecte=1 + ConnecteAuPort=9803 ConnecteAuSegment=9802 + Port=9823 port x=-22048 y=17690 z=0 + Angle=1201 Local=1 Connecte=1 + ConnecteAuPort=9825 ConnecteAuSegment=9824 + Periph=9827 Type=signal Pere=9821 x=-21349 y=17839 z=0 + Angle=10200 Bright=0 Bdown=1 + Location=28 Adresse=0 Status=0 + Periph=9828 Type=detector Pere=9821 x=-21349 y=17839 z=0 + Angle=10200 Bright=0 Bdown=1 + Location=28 Adresse=0 Status=0 + +Segment=9824 bumper_stop +Nport=2 Nperiph=0 Ninter=0 +Xmin=-23426 Ymin=16890 Xmax=-21248 Ymax=18490 +StartAngle=0 ArcAngle=0 Rayon=0 Radius0=0 +Angle0=0 Angle=0 Lengthdev=0 Deltadev0=0 +lXc=0 lYc=0 Longueur=0 longueurDev=0 +DeltaDev=0 CurveOffset=0 xc0=0 yc0=0 +DeltaDev2=0 xc=0 yc=0 +Adresse=0 Adresse2=0 Duree=0 + Port=9825 port x=-22048 y=17690 z=0 + Angle=-16800 Local=0 Connecte=1 + ConnecteAuPort=9823 ConnecteAuSegment=9821 + Port=9826 dummy_port x=-23026 y=17482 z=0 + Angle=1200 Local=1 Connecte=0 + ConnecteAuPort=0 ConnecteAuSegment=0 + diff --git a/verif_version.pas b/verif_version.pas index 40a9b6f..9b68ea0 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -23,7 +23,7 @@ var Lance_verif : integer; verifVersion,notificationVersion : boolean; -Const Version='6.0'; // sert à la comparaison de la version publiée +Const Version='6.1'; // sert à la comparaison de la version publiée SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace function GetCurrentProcessEnvVar(const VariableName: string): string; @@ -111,7 +111,7 @@ begin end; end; - +// renvoie le numéro de version depuis le forum CDM function verifie_version : real; var s,s2,s3,Version_p,Url,LocalFile,nomfichier : string; trouve_version,trouve_zip,zone_comm,LocZip : boolean; diff --git a/versions.txt b/versions.txt index 3f2172c..90d8ad3 100644 --- a/versions.txt +++ b/versions.txt @@ -165,3 +165,5 @@ version 5.74 : Correction bug cr version 6.0 : Gestion du décodeur de signaux Arcomora. Importation des aiguillages et des branches depuis CDM Rail. Nécessite la version >=23.04 de CDM rail. +version 6.1 : Amélioration de la fenêtre réseau CDM. + Animation des trains dans la fenêtre réseau CDM.