diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Bus.vacc b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Bus.vacc new file mode 100644 index 0000000000000000000000000000000000000000..8ae1ce269631975dc3cda4923cdbe8b7a5377490 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Bus.vacc @@ -0,0 +1,15 @@ +v [km/h] , acc [m/s�] , dec [m/s�] +0 , 0.88 , -0.94 +10 , 1.00 , -0.94 +13 , 1.00 , -0.94 +20 , 1.00 , -0.88 +30 , 0.97 , -0.81 +40 , 0.80 , -0.73 +50 , 0.63 , -0.66 +58 , 0.50 , -0.52 +60 , 0.46 , -0.50 +70 , 0.39 , -0.50 +80 , 0.39 , -0.50 +90 , 0.39 , -0.50 +100 , 0.39 , -0.50 +120 , 0.39 , -0.50 \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/CityBus_AT-P.vecto b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/CityBus_AT-P.vecto new file mode 100644 index 0000000000000000000000000000000000000000..68e4ddc91bee029a32f5c5706a560c955ec7dc68 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/CityBus_AT-P.vecto @@ -0,0 +1,63 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-01-18T16:23:23.1599991Z", + "AppVersion": "3", + "FileVersion": 8 + }, + "Body": { + "SavedInDeclMode": false, + "EngineOnlyMode": false, + "VehicleFile": "CityBus_AT-P.vveh", + "EngineFile": "GenericICE_220kW_7.7l.veng", + "GearboxFile": "GearboxAT-P.vgbx", + "TCU": "ShiftPArameters.vtcu", + "ShiftStrategy": "TUGraz.VectoCore.Models.SimulationComponent.Impl.ATShiftStrategyOptimized", + "HybridStrategyParams": "HybridStrategyParams.vhctl", + "AuxiliaryAssembly": "Classic", + "AuxiliaryVersion": "CLASSIC", + "AdvancedAuxiliaryFilePath": "", + "Aux": [], + "Padd": 5000.0, + "Padd_electric": 0.0, + "VACC": "Bus.vacc", + "EngineStopStartAtVehicleStopThreshold": 2.0, + "EngineStopStartMaxOffTimespan": 30.0, + "EngineStopStartUtilityFactor": 1.0, + "EcoRollMinSpeed": 0.0, + "EcoRollActivationDelay": 0.0, + "EcoRollUnderspeedThreshold": 0.0, + "EcoRollMaxAcceleration": 0.0, + "PCCEnableSpeed": 0.0, + "PCCMinSpeed": 0.0, + "PCCUnderspeed": 0.0, + "PCCOverSpeed": 5.0, + "PCCPreviewDistanceUC1": 0.0, + "PCCPreviewDistanceUC2": 0.0, + "LAC": { + "Enabled": true, + "PreviewDistanceFactor": 10.0, + "DF_offset": 2.5, + "DF_scaling": 1.5, + "DF_targetSpeedLookup": "", + "Df_velocityDropLookup": "", + "MinSpeed": 50.0 + }, + "OverSpeedEcoRoll": { + "Mode": "Off", + "MinSpeed": 50.0, + "OverSpeed": 2.5 + }, + "Cycles": [ + "LongHaul", + "Coach", + "Construction", + "HeavyUrban", + "Interurban", + "RegionalDelivery", + "Suburban", + "Urban", + "UrbanDelivery" + ] + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/CityBus_AT-P.vveh b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/CityBus_AT-P.vveh new file mode 100644 index 0000000000000000000000000000000000000000..434bc9f53ac4e7bab87504a75f9550bd42c2bbb3 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/CityBus_AT-P.vveh @@ -0,0 +1,82 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-02-01T12:49:19.2221328Z", + "AppVersion": "3", + "FileVersion": 10 + }, + "Body": { + "SavedInDeclMode": false, + "VehCat": "CityBus", + "LegislativeClass": "Unknown", + "CurbWeight": 12000.0, + "CurbWeightExtra": 0.0, + "MassMax": 18.0, + "Loading": 1000.0, + "rdyn": 421.0, + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "", + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.4, + "TwinTyres": false, + "RRCISO": 0.0065, + "FzISO": 20850.0, + "Type": "VehicleNonDriven" + }, + { + "Inertia": 6.5, + "Wheels": "265/70 R19.5", + "AxleWeightShare": 0.6, + "TwinTyres": true, + "RRCISO": 0.0075, + "FzISO": 20850.0, + "Type": "VehicleDriven" + } + ] + }, + "EngineStopStart": true, + "EcoRoll": "None", + "PredictiveCruiseControl": "None", + "ATEcoRollReleaseLockupClutch": false, + "CdA": 4.25, + "VehicleHeight": 3.3, + "IdlingSpeed": 600.0, + "Retarder": { + "Type": "None", + "Ratio": 0.0, + "File": "" + }, + "Angledrive": { + "Type": "None", + "Ratio": 0.0, + "LossMap": "" + }, + "PTO": { + "Type": "None", + "LossMap": "", + "Cycle": "" + }, + "TorqueLimits": {}, + "MaxDrivetrainPower": 10000.0, + "InitialSoC": 90.0, + "PowertrainConfiguration": "ParallelHybrid", + "ElectricMotors": [ + { + "Count": 1, + "Ratio": 2.0, + "MechanicalEfficiency": 0.98, + "Position": "P1", + "MotorFile": "GenericEM_15KW_220Nm.vem" + } + ], + "Battery": { + "NumPacks": 1, + "BatteryFile": "Generic Supercap 48V.vreess" + } + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Engine map_7.7l.vmap b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Engine map_7.7l.vmap new file mode 100644 index 0000000000000000000000000000000000000000..0dcbccd5228fc1a5a663a157d584ed14c43533a8 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Engine map_7.7l.vmap @@ -0,0 +1,183 @@ +engine speed [rpm],torque [Nm],fuel consumption [g/h] +600,-156.5714286,0 +600,-56.57142857,0 +600,0,638 +600,216.9,3553.94 +600,433.8,6644.06 +600,650.7,11050.13 +600,867.6,15456.14 +600,1084.5,19862.14 +600,1301.4,24268.15 +600,1518.3,28674.15 +600,1735.2,33080.15 +600,1952.1,37486.16 +600,2169,41892.16 +748.9,-166.0198746,0 +748.9,-66.01987455,0 +748.9,0,843.67 +748.9,216.9,4100.1 +748.9,433.8,7706.21 +748.9,650.7,12298.69 +748.9,867.6,16731.15 +748.9,1084.5,21128.17 +748.9,1301.4,25525.18 +748.9,1518.3,29922.2 +748.9,1735.2,34319.22 +748.9,1952.1,38716.24 +748.9,2169,43113.26 +897.8,-174.5509889,0 +897.8,-74.55098889,0 +897.8,0,1049.35 +897.8,216.9,4646.25 +897.8,433.8,8768.36 +897.8,650.7,13541.46 +897.8,867.6,18156.42 +897.8,1084.5,22760.37 +897.8,1301.4,27362.81 +897.8,1518.3,31965.25 +897.8,1735.2,36567.69 +897.8,1952.1,41170.14 +897.8,2169,45772.58 +1046.7,-183.6305194,0 +1046.7,-83.63051942,0 +1046.7,0,1255.02 +1046.7,216.9,5192.4 +1046.7,433.8,9830.52 +1046.7,650.7,14781.21 +1046.7,867.6,19659.22 +1046.7,1084.5,24580.08 +1046.7,1301.4,29611.62 +1046.7,1518.3,34620.74 +1046.7,1735.2,39629.86 +1046.7,1952.1,44638.98 +1046.7,2169,49648.11 +1195.57,-193.9794114,0 +1195.57,-93.97941143,0 +1195.57,0,1460.65 +1195.57,216.9,5738.45 +1195.57,433.8,10892.45 +1195.57,650.7,16020.7 +1195.57,867.6,21159.59 +1195.57,1084.5,26391.05 +1195.57,1301.4,32095.87 +1195.57,1518.3,37706.84 +1195.57,1735.2,43317.81 +1195.57,1952.1,48928.77 +1195.57,2169,54539.74 +1359.19,-205.6210761,0 +1359.19,-105.6210761,0 +1359.19,0,1846.01 +1359.19,216.9,6560.14 +1359.19,433.8,12332.07 +1359.19,650.7,18097.95 +1359.19,867.6,23937.72 +1359.19,1084.5,29597.59 +1359.19,1301.4,35520.27 +1359.19,1518.3,41402.13 +1359.19,1735.2,47284 +1359.19,1952.1,53165.86 +1359.19,2169,59047.73 +1484,-215.5394502,0 +1484,-115.5394502,0 +1484,0,2131.16 +1484,216.9,7194.66 +1484,433.8,13496.22 +1484,650.7,19795.45 +1484,867.6,26122.03 +1484,1084.5,32222.77 +1484,1301.4,38588.45 +1484,1518.3,44936.74 +1484,1735.2,51285.03 +1484,1952.1,57633.32 +1484,2169,63981.62 +1608.9,-223.6490478,0 +1608.9,-123.6490478,0 +1608.9,0,2412.92 +1608.9,216.9,7832.39 +1608.9,433.8,14689.88 +1608.9,650.7,21533.67 +1608.9,867.6,28332.13 +1608.9,1084.5,34956.02 +1608.9,1301.4,41921.53 +1608.9,1518.3,48882.7 +1608.9,1735.2,55843.86 +1608.9,1952.1,62805.03 +1608.9,2169,69766.19 +1733.8,-228.2687944,0 +1733.8,-128.2687944,0 +1733.8,0,2725.03 +1733.8,216.9,8486.62 +1733.8,433.8,15875.76 +1733.8,650.7,23166.99 +1733.8,867.6,30597.07 +1733.8,1084.5,38101 +1733.8,1301.4,45882.06 +1733.8,1518.3,53661.69 +1733.8,1735.2,61441.31 +1733.8,1952.1,69220.94 +1733.8,2169,77000.57 +1858.61,-233.2770119,0 +1858.61,-133.2770119,0 +1858.61,0,3067.94 +1858.61,216.9,9180.54 +1858.61,433.8,17097.03 +1858.61,650.7,24909.82 +1858.61,867.6,32982.42 +1858.61,1084.5,41176.53 +1858.61,1301.4,49526.09 +1858.61,1518.3,57875.73 +1858.61,1735.2,66225.36 +1858.61,1952.1,74575 +1858.61,2169,82924.64 +1983.51,-239.7011553,0 +1983.51,-139.7011553,0 +1983.51,0,3446.165969 +1983.51,216.9,9920.378324 +1983.51,433.8,18360.13899 +1983.51,650.7,26779.01758 +1983.51,867.6,35507.453 +1983.51,1084.5,44178.34965 +1983.51,1301.4,52818.23622 +1983.51,1518.3,61458.13164 +1983.51,1735.2,70098.02705 +1983.51,1952.1,78737.92246 +1983.51,2169,87377.81788 +2108.41,-250.3624289,0 +2108.41,-150.3624289,0 +2108.41,0,3903.220883 +2108.41,216.9,10693.19834 +2108.41,433.8,19641.08191 +2108.41,650.7,28745.17923 +2108.41,867.6,38180.93551 +2108.41,1084.5,47433.46318 +2108.41,1301.4,56664.44413 +2108.41,1518.3,65895.42508 +2108.41,1735.2,75126.40604 +2108.41,1952.1,84357.38699 +2108.41,2169,93588.36794 +2233.31,-260.6179336,0 +2233.31,-160.6179336,0 +2233.31,0,4363.413897 +2233.31,216.9,11487.86565 +2233.31,433.8,20985.72948 +2233.31,650.7,30841.62288 +2233.31,867.6,41079.19748 +2233.31,1084.5,51089.00489 +2233.31,1301.4,61104.85222 +2233.31,1518.3,71120.69954 +2233.31,1735.2,81136.54686 +2233.31,1952.1,91152.39418 +2233.31,2169,101168.2415 +2358.21,-268.3446286,0 +2358.21,-168.3446286,0 +2358.21,0,4799.266043 +2358.21,216.9,12328.80853 +2358.21,433.8,22498.08244 +2358.21,650.7,33255.73916 +2358.21,867.6,44533.43058 +2358.21,1084.5,55739.63684 +2358.21,1301.4,66947.35734 +2358.21,1518.3,78155.07784 +2358.21,1735.2,89362.79834 +2358.21,1952.1,100570.5188 +2358.21,2169,111778.2393 diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Full-load curve 220kW.vfld b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Full-load curve 220kW.vfld new file mode 100644 index 0000000000000000000000000000000000000000..c886b973fd4999cf55bbd97d57565d78e161fa07 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Full-load curve 220kW.vfld @@ -0,0 +1,14 @@ +engine speed [1/min],full load torque [Nm],motoring torque [Nm] +500,628.5714286,-50.28571429 +600,779.4285714,-56.57142857 +800,942.8571429,-69.14285714 +1000,1131.428571,-80.45714286 +1100,1294.857143,-87.37142857 +1200,1294.857143,-94.28571429 +1300,1294.857143,-101.2 +1600,1294.857143,-123.2 +1800,1150.285714,-130.7428571 +2000,1043.428571,-140.8 +2200,955.4285714,-158.4 +2300,867.4285714,-164.6857143 +2400,779.4285714,-170.9714286 diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GearboxAT-P.vgbx b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GearboxAT-P.vgbx new file mode 100644 index 0000000000000000000000000000000000000000..7f3a3f92be54c5d11b0e7f14921ab7959c884f2e --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GearboxAT-P.vgbx @@ -0,0 +1,61 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-01-18T16:15:44.9706996Z", + "AppVersion": "3", + "FileVersion": 6 + }, + "Body": { + "SavedInDeclMode": false, + "ModelName": "AT PowerSplit", + "Inertia": 0.0, + "TracInt": 0.0, + "Gears": [ + { + "Ratio": 5.8, + "Efficiency": 0.97 + }, + { + "Ratio": 1.43, + "Efficiency": 0.93, + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + }, + { + "Ratio": 1.0, + "Efficiency": 0.93, + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + }, + { + "Ratio": 0.7, + "Efficiency": 0.93, + "ShiftPolygon": "", + "MaxTorque": "", + "MaxSpeed": "" + } + ], + "TqReserve": 0.0, + "ShiftTime": 0.5, + "StartTqReserve": 0.0, + "StartSpeed": 2.0, + "StartAcc": 0.6, + "GearboxType": "ATPowerSplit", + "TorqueConverter": { + "Enabled": true, + "File": "TC Parallel.vtcc", + "RefRPM": 999.99999999999989, + "Inertia": 0.0, + "MaxTCSpeed": 5000.0, + "ShiftPolygon": "", + "CLUpshiftMinAcceleration": 0.0, + "CCUpshiftMinAcceleration": 0.0 + }, + "DownshiftAfterUpshiftDelay": 6.0, + "UpshiftAfterDownshiftDelay": 0.0, + "UpshiftMinAcceleration": 0.0, + "PowershiftShiftTime": 0.8 + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Generic Supercap 48V.vreess b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Generic Supercap 48V.vreess new file mode 100644 index 0000000000000000000000000000000000000000..5cf5a9b538063f4c171bd6dbbb9007a00c01cacf --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/Generic Supercap 48V.vreess @@ -0,0 +1,19 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-01-18T15:17:57.4852109Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "SavedInDeclMode": false, + "REESSType": "SuperCap", + "Model": "Generic Supercap 48V", + "Capacity": 166.0, + "InternalResistance": 0.005, + "U_min": 5.0, + "U_max": 48.6, + "I_maxCharge": 2200.0, + "I_maxDischarge": 2200.0 + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM.vemd b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM.vemd new file mode 100644 index 0000000000000000000000000000000000000000..41157c01c87a2201fb1af0f5aacd5983d7e8e786 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM.vemd @@ -0,0 +1,3 @@ +n [rpm] , T_drag [Nm] +0 , -5.6 +5000 , -28.1 \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_15KW_220Nm.vem b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_15KW_220Nm.vem new file mode 100644 index 0000000000000000000000000000000000000000..a960e797c1258cc5ef401dad878f891c26a526c6 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_15KW_220Nm.vem @@ -0,0 +1,20 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-01-18T16:23:20.3712200Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "SavedInDeclMode": false, + "Model": "Generic 15kW_220Nm", + "FullLoadCurve": "GenericEM_15kW_220Nm.vemp", + "DragCurve": "GenericEM.vemd", + "EfficiencyMap": "GenericEM_32kW_450Nm.vemo", + "Inertia": 0.198, + "ContinuousPower": 15000.0, + "ContinuousPowerSpeed": 651.0, + "OverloadTime": 15.0, + "ThermalOverloadRecoveryFactor": 0.9 + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_15kW_220Nm.vemp b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_15kW_220Nm.vemp new file mode 100644 index 0000000000000000000000000000000000000000..249f3bb3b67d87cdb259a4d730d3d116946d8a03 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_15kW_220Nm.vemp @@ -0,0 +1,75 @@ +n [rpm], T_drive [Nm], T_recuperation [Nm] +0,220,-440 +651.0884036,220,-440 +648.7012987,220,-440 +652.5974026,219.494,-438.988 +656.4935065,218.1905,-436.381 +660.3896104,216.9035,-433.807 +662.3376623,216.2655,-432.531 +681.8181818,210.0835,-420.167 +701.2987013,204.248,-408.496 +720.7792208,198.726,-397.452 +740.2597403,193.501,-387.002 +759.7402597,188.54,-377.08 +779.2207792,183.8265,-367.653 +798.7012987,179.3385,-358.677 +818.1818182,175.0705,-350.141 +837.6623377,171.0005,-342.001 +857.1428571,167.112,-334.224 +876.6233766,163.3995,-326.799 +896.1038961,159.8465,-319.693 +915.5844156,156.4475,-312.895 +935.0649351,153.186,-306.372 +954.5454545,150.062,-300.124 +974.025974,147.059,-294.118 +993.5064935,144.177,-288.354 +1012.987013,141.405,-282.81 +1032.467532,138.7375,-277.475 +1051.948052,136.1635,-272.327 +1071.428571,133.6885,-267.377 +1090.909091,131.3015,-262.603 +1110.38961,128.997,-257.994 +1129.87013,126.775,-253.55 +1149.350649,124.6245,-249.249 +1168.831169,122.551,-245.102 +1188.311688,120.538,-241.076 +1207.792208,118.5965,-237.193 +1227.272727,116.7155,-233.431 +1246.753247,114.8895,-229.779 +1266.233766,113.124,-226.248 +1285.714286,111.408,-222.816 +1305.194805,109.747,-219.494 +1324.675325,108.13,-216.26 +1344.155844,106.5625,-213.125 +1363.636364,105.0445,-210.089 +1383.116883,103.565,-207.13 +1402.597403,102.124,-204.248 +1422.077922,100.727,-201.454 +1441.558442,99.363,-198.726 +1461.038961,98.0375,-196.075 +1480.519481,96.7505,-193.501 +1500,95.491,-190.982 +1519.480519,94.27,-188.54 +1538.961039,93.0765,-186.153 +1558.441558,91.9105,-183.821 +1577.922078,90.7775,-181.555 +1597.402597,89.672,-179.344 +1616.883117,88.5885,-177.177 +1636.363636,87.5325,-175.065 +1655.844156,86.504,-173.008 +1675.324675,85.4975,-170.995 +1694.805195,84.5185,-169.037 +1714.285714,83.556,-167.112 +1733.766234,82.6155,-165.231 +1753.246753,81.697,-163.394 +1772.727273,80.8005,-161.601 +1792.207792,79.926,-159.852 +1811.688312,79.0625,-158.125 +1831.168831,78.221,-156.442 +1850.649351,77.4015,-154.803 +1870.12987,76.593,-153.186 +1889.61039,75.801,-151.602 +1909.090909,75.031,-150.062 +1928.571429,74.272,-148.544 +1948.051948,73.5295,-147.059 +4864.577923,29.44539927,-58.89079854 diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_32kW_450Nm.vemo b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_32kW_450Nm.vemo new file mode 100644 index 0000000000000000000000000000000000000000..d83549939cce849ba212493c65671b81017e72f8 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericEM_32kW_450Nm.vemo @@ -0,0 +1,2016 @@ +n [rpm] , T [Nm] , P_el [kW] +0,-450,5.625657143 +0,-435.9375,5.298228573 +0,-421.875,4.980628573 +0,-407.8125,4.672742858 +0,-393.75,4.374742858 +0,-379.6875,4.086514285 +0,-365.625,3.808057143 +0,-351.5625,3.539428573 +0,-337.5,3.280571428 +0,-323.4375,3.031542858 +0,-309.375,2.792342858 +0,-295.3125,2.562914285 +0,-281.25,2.343257143 +0,-267.1875,2.133428573 +0,-253.125,1.933371428 +0,-239.0625,1.743142858 +0,-225,1.562742858 +0,-210.9375,1.392114285 +0,-196.875,1.231257143 +0,-182.8125,1.080228573 +0,-168.75,0.939028573 +0,-154.6875,0.8076 +0,-140.625,0.685942858 +0,-126.5625,0.574114285 +0,-112.5,0.472097143 +0,-98.4375,0.379874285 +0,-84.375,0.297445715 +0,-70.3125,0.224822858 +0,-56.25,0.161994285 +0,-42.1875,0.108971428 +0,-28.125,0.065748573 +0,-14.0625,0.032323428 +0,0,0.020628573 +0,14.0625,0.049702285 +0,28.125,0.088577143 +0,42.1875,0.137251428 +0,56.25,0.195725715 +0,70.3125,0.264 +0,84.375,0.34208 +0,98.4375,0.429954285 +0,112.5,0.527628573 +0,126.5625,0.635085715 +0,140.625,0.7524 +0,154.6875,0.879485715 +0,168.75,1.016342858 +0,182.8125,1.163028573 +0,196.875,1.319485715 +0,210.9375,1.485771428 +0,225,1.661885715 +0,239.0625,1.847771428 +0,253.125,2.043428573 +0,267.1875,2.248914285 +0,281.25,2.464171428 +0,295.3125,2.689257143 +0,309.375,2.924171428 +0,323.4375,3.168857143 +0,337.5,3.423314285 +0,351.5625,3.6876 +0,365.625,3.961714285 +0,379.6875,4.2456 +0,393.75,4.539257143 +0,407.8125,4.842742858 +0,421.875,5.156057143 +0,435.9375,5.479142858 +0,450,5.812 +46.50584415,-450,3.335257143 +46.50584415,-435.9375,3.080057143 +46.50584415,-421.875,2.834628573 +46.50584415,-407.8125,2.598971428 +46.50584415,-393.75,2.373142858 +46.50584415,-379.6875,2.157142858 +46.50584415,-365.625,1.950914285 +46.50584415,-351.5625,1.754514285 +46.50584415,-337.5,1.567885715 +46.50584415,-323.4375,1.391085715 +46.50584415,-309.375,1.224057143 +46.50584415,-295.3125,1.0668 +46.50584415,-281.25,0.919428573 +46.50584415,-267.1875,0.781771428 +46.50584415,-253.125,0.654 +46.50584415,-239.0625,0.53596 +46.50584415,-225,0.427742858 +46.50584415,-210.9375,0.32988 +46.50584415,-196.875,0.242057143 +46.50584415,-182.8125,0.164377143 +46.50584415,-168.75,0.096302858 +46.50584415,-154.6875,0.037838285 +46.50584415,-140.625,-0.011020573 +46.50584415,-126.5625,-0.050273715 +46.50584415,-112.5,-0.07992 +46.50584415,-98.4375,-0.09996 +46.50584415,-84.375,-0.110394285 +46.50584415,-70.3125,-0.111222858 +46.50584415,-56.25,-0.10244 +46.50584415,-42.1875,-0.084057143 +46.50584415,-28.125,-0.056062858 +46.50584415,-14.0625,-0.018464573 +46.50584415,0,0.0414 +46.50584415,14.0625,0.142691428 +46.50584415,28.125,0.253777143 +46.50584415,42.1875,0.374668573 +46.50584415,56.25,0.505354285 +46.50584415,70.3125,0.645828573 +46.50584415,84.375,0.796114285 +46.50584415,98.4375,0.956228573 +46.50584415,112.5,1.126114285 +46.50584415,126.5625,1.305828573 +46.50584415,140.625,1.495314285 +46.50584415,154.6875,1.694571428 +46.50584415,168.75,1.903714285 +46.50584415,182.8125,2.122571428 +46.50584415,196.875,2.351257143 +46.50584415,210.9375,2.589771428 +46.50584415,225,2.838057143 +46.50584415,239.0625,3.096171428 +46.50584415,253.125,3.364057143 +46.50584415,267.1875,3.641771428 +46.50584415,281.25,3.929257143 +46.50584415,295.3125,4.226571428 +46.50584415,309.375,4.533657143 +46.50584415,323.4375,4.850571428 +46.50584415,337.5,5.177257143 +46.50584415,351.5625,5.513771428 +46.50584415,365.625,5.86 +46.50584415,379.6875,6.216 +46.50584415,393.75,6.582285715 +46.50584415,407.8125,6.957714285 +46.50584415,421.875,7.343428573 +46.50584415,435.9375,7.738285715 +46.50584415,450,8.143428573 +93.01266235,-450,1.045885715 +93.01266235,-435.9375,0.862914285 +93.01266235,-421.875,0.69 +93.01266235,-407.8125,0.528325715 +93.01266235,-393.75,0.377337143 +93.01266235,-379.6875,0.235954285 +93.01266235,-365.625,0.104177143 +93.01266235,-351.5625,-0.017996 +93.01266235,-337.5,-0.13056 +93.01266235,-323.4375,-0.23352 +93.01266235,-309.375,-0.326868573 +93.01266235,-295.3125,-0.410617143 +93.01266235,-281.25,-0.484754285 +93.01266235,-267.1875,-0.549285715 +93.01266235,-253.125,-0.604228573 +93.01266235,-239.0625,-0.649542858 +93.01266235,-225,-0.685257143 +93.01266235,-210.9375,-0.711371428 +93.01266235,-196.875,-0.727828573 +93.01266235,-182.8125,-0.734742858 +93.01266235,-168.75,-0.732057143 +93.01266235,-154.6875,-0.719714285 +93.01266235,-140.625,-0.697771428 +93.01266235,-126.5625,-0.666228573 +93.01266235,-112.5,-0.625085715 +93.01266235,-98.4375,-0.574342858 +93.01266235,-84.375,-0.514017143 +93.01266235,-70.3125,-0.444057143 +93.01266235,-56.25,-0.364497143 +93.01266235,-42.1875,-0.275325715 +93.01266235,-28.125,-0.176548573 +93.01266235,-14.0625,-0.068165715 +93.01266235,0,0.063228573 +93.01266235,14.0625,0.236731428 +93.01266235,28.125,0.42004 +93.01266235,42.1875,0.613142858 +93.01266235,56.25,0.816057143 +93.01266235,70.3125,1.028742858 +93.01266235,84.375,1.251257143 +93.01266235,98.4375,1.483542858 +93.01266235,112.5,1.725657143 +93.01266235,126.5625,1.9776 +93.01266235,140.625,2.239314285 +93.01266235,154.6875,2.5108 +93.01266235,168.75,2.792114285 +93.01266235,182.8125,3.0832 +93.01266235,196.875,3.384114285 +93.01266235,210.9375,3.694857143 +93.01266235,225,4.015371428 +93.01266235,239.0625,4.345657143 +93.01266235,253.125,4.685771428 +93.01266235,267.1875,5.035657143 +93.01266235,281.25,5.395371428 +93.01266235,295.3125,5.765142858 +93.01266235,309.375,6.144 +93.01266235,323.4375,6.533142858 +93.01266235,337.5,6.932 +93.01266235,351.5625,7.341142858 +93.01266235,365.625,7.759428573 +93.01266235,379.6875,8.188 +93.01266235,393.75,8.625714285 +93.01266235,407.8125,9.073714285 +93.01266235,421.875,9.531428573 +93.01266235,435.9375,9.998857143 +93.01266235,450,10.47657143 +139.5194805,-450,-1.204057143 +139.5194805,-435.9375,-1.313085715 +139.5194805,-421.875,-1.412514285 +139.5194805,-407.8125,-1.502285715 +139.5194805,-393.75,-1.582514285 +139.5194805,-379.6875,-1.653085715 +139.5194805,-365.625,-1.714114285 +139.5194805,-351.5625,-1.765485715 +139.5194805,-337.5,-1.807257143 +139.5194805,-323.4375,-1.839428573 +139.5194805,-309.375,-1.862 +139.5194805,-295.3125,-1.874971428 +139.5194805,-281.25,-1.878342858 +139.5194805,-267.1875,-1.872057143 +139.5194805,-253.125,-1.856228573 +139.5194805,-239.0625,-1.830742858 +139.5194805,-225,-1.795657143 +139.5194805,-210.9375,-1.750971428 +139.5194805,-196.875,-1.696685715 +139.5194805,-182.8125,-1.6328 +139.5194805,-168.75,-1.559314285 +139.5194805,-154.6875,-1.476228573 +139.5194805,-140.625,-1.383485715 +139.5194805,-126.5625,-1.2812 +139.5194805,-112.5,-1.169257143 +139.5194805,-98.4375,-1.047714285 +139.5194805,-84.375,-0.916571428 +139.5194805,-70.3125,-0.775828573 +139.5194805,-56.25,-0.625485715 +139.5194805,-42.1875,-0.465548573 +139.5194805,-28.125,-0.295988573 +139.5194805,-14.0625,-0.116822858 +139.5194805,0,0.086125715 +139.5194805,14.0625,0.33184 +139.5194805,28.125,0.587371428 +139.5194805,42.1875,0.852685715 +139.5194805,56.25,1.127828573 +139.5194805,70.3125,1.412742858 +139.5194805,84.375,1.707428573 +139.5194805,98.4375,2.011942858 +139.5194805,112.5,2.326285715 +139.5194805,126.5625,2.6504 +139.5194805,140.625,2.984342858 +139.5194805,154.6875,3.328057143 +139.5194805,168.75,3.6816 +139.5194805,182.8125,4.044914285 +139.5194805,196.875,4.418 +139.5194805,210.9375,4.800971428 +139.5194805,225,5.193657143 +139.5194805,239.0625,5.596228573 +139.5194805,253.125,6.008571428 +139.5194805,267.1875,6.430857143 +139.5194805,281.25,6.862857143 +139.5194805,295.3125,7.304571428 +139.5194805,309.375,7.756 +139.5194805,323.4375,8.217142858 +139.5194805,337.5,8.688571428 +139.5194805,351.5625,9.169142858 +139.5194805,365.625,9.66 +139.5194805,379.6875,10.16057143 +139.5194805,393.75,10.67085714 +139.5194805,407.8125,11.19085714 +139.5194805,421.875,11.72114286 +139.5194805,435.9375,12.26057143 +139.5194805,450,12.81028572 +186.0292208,-450,-3.446 +186.0292208,-435.9375,-3.484228573 +186.0292208,-421.875,-3.512857143 +186.0292208,-407.8125,-3.531885715 +186.0292208,-393.75,-3.541314285 +186.0292208,-379.6875,-3.541142858 +186.0292208,-365.625,-3.531371428 +186.0292208,-351.5625,-3.511942858 +186.0292208,-337.5,-3.482914285 +186.0292208,-323.4375,-3.444342858 +186.0292208,-309.375,-3.396114285 +186.0292208,-295.3125,-3.338285715 +186.0292208,-281.25,-3.270857143 +186.0292208,-267.1875,-3.193828573 +186.0292208,-253.125,-3.1072 +186.0292208,-239.0625,-3.010914285 +186.0292208,-225,-2.905085715 +186.0292208,-210.9375,-2.7896 +186.0292208,-196.875,-2.664514285 +186.0292208,-182.8125,-2.529828573 +186.0292208,-168.75,-2.3856 +186.0292208,-154.6875,-2.231657143 +186.0292208,-140.625,-2.068171428 +186.0292208,-126.5625,-1.895085715 +186.0292208,-112.5,-1.7124 +186.0292208,-98.4375,-1.520057143 +186.0292208,-84.375,-1.318114285 +186.0292208,-70.3125,-1.106628573 +186.0292208,-56.25,-0.885485715 +186.0292208,-42.1875,-0.654742858 +186.0292208,-28.125,-0.414394285 +186.0292208,-14.0625,-0.16444 +186.0292208,0,0.11008 +186.0292208,14.0625,0.428011428 +186.0292208,28.125,0.755771428 +186.0292208,42.1875,1.093257143 +186.0292208,56.25,1.440628573 +186.0292208,70.3125,1.797771428 +186.0292208,84.375,2.164685715 +186.0292208,98.4375,2.541428573 +186.0292208,112.5,2.927942858 +186.0292208,126.5625,3.324285715 +186.0292208,140.625,3.730457143 +186.0292208,154.6875,4.146342858 +186.0292208,168.75,4.572114285 +186.0292208,182.8125,5.007657143 +186.0292208,196.875,5.452971428 +186.0292208,210.9375,5.908 +186.0292208,225,6.373142858 +186.0292208,239.0625,6.848 +186.0292208,253.125,7.332571428 +186.0292208,267.1875,7.826857143 +186.0292208,281.25,8.330857143 +186.0292208,295.3125,8.844571428 +186.0292208,309.375,9.368571428 +186.0292208,323.4375,9.902285715 +186.0292208,337.5,10.44514286 +186.0292208,351.5625,10.99828572 +186.0292208,365.625,11.56171429 +186.0292208,379.6875,12.13428572 +186.0292208,393.75,12.71657143 +186.0292208,407.8125,13.30914286 +186.0292208,421.875,13.91142857 +186.0292208,435.9375,14.52342857 +186.0292208,450,15.14514286 +232.5292208,-450,-5.686914285 +232.5292208,-435.9375,-5.654342858 +232.5292208,-421.875,-5.612228573 +232.5292208,-407.8125,-5.560457143 +232.5292208,-393.75,-5.499085715 +232.5292208,-379.6875,-5.428114285 +232.5292208,-365.625,-5.347542858 +232.5292208,-351.5625,-5.257371428 +232.5292208,-337.5,-5.1576 +232.5292208,-323.4375,-5.048171428 +232.5292208,-309.375,-4.929142858 +232.5292208,-295.3125,-4.800571428 +232.5292208,-281.25,-4.662342858 +232.5292208,-267.1875,-4.514514285 +232.5292208,-253.125,-4.357085715 +232.5292208,-239.0625,-4.190057143 +232.5292208,-225,-4.013428573 +232.5292208,-210.9375,-3.827142858 +232.5292208,-196.875,-3.631314285 +232.5292208,-182.8125,-3.425828573 +232.5292208,-168.75,-3.2108 +232.5292208,-154.6875,-2.986114285 +232.5292208,-140.625,-2.751828573 +232.5292208,-126.5625,-2.507942858 +232.5292208,-112.5,-2.254457143 +232.5292208,-98.4375,-1.991371428 +232.5292208,-84.375,-1.718628573 +232.5292208,-70.3125,-1.436342858 +232.5292208,-56.25,-1.1444 +232.5292208,-42.1875,-0.842857143 +232.5292208,-28.125,-0.531754285 +232.5292208,-14.0625,-0.211017143 +232.5292208,0,0.135091428 +232.5292208,14.0625,0.52524 +232.5292208,28.125,0.9252 +232.5292208,42.1875,1.334914285 +232.5292208,56.25,1.754514285 +232.5292208,70.3125,2.183828573 +232.5292208,84.375,2.622971428 +232.5292208,98.4375,3.071942858 +232.5292208,112.5,3.530685715 +232.5292208,126.5625,3.999257143 +232.5292208,140.625,4.4776 +232.5292208,154.6875,4.965771428 +232.5292208,168.75,5.463714285 +232.5292208,182.8125,5.971428573 +232.5292208,196.875,6.489142858 +232.5292208,210.9375,7.016571428 +232.5292208,225,7.553714285 +232.5292208,239.0625,8.100571428 +232.5292208,253.125,8.657142858 +232.5292208,267.1875,9.224 +232.5292208,281.25,9.8 +232.5292208,295.3125,10.38628572 +232.5292208,309.375,10.98228572 +232.5292208,323.4375,11.588 +232.5292208,337.5,12.20342857 +232.5292208,351.5625,12.82914286 +232.5292208,365.625,13.464 +232.5292208,379.6875,14.10914286 +232.5292208,393.75,14.764 +232.5292208,407.8125,15.42857143 +232.5292208,421.875,16.10285714 +232.5292208,435.9375,16.78685714 +232.5292208,450,17.48114286 +279.038961,-450,-7.926857143 +279.038961,-435.9375,-7.823428573 +279.038961,-421.875,-7.710285715 +279.038961,-407.8125,-7.588 +279.038961,-393.75,-7.456 +279.038961,-379.6875,-7.314285715 +279.038961,-365.625,-7.162857143 +279.038961,-351.5625,-7.001714285 +279.038961,-337.5,-6.831428573 +279.038961,-323.4375,-6.650857143 +279.038961,-309.375,-6.461142858 +279.038961,-295.3125,-6.261714285 +279.038961,-281.25,-6.052571428 +279.038961,-267.1875,-5.834285715 +279.038961,-253.125,-5.606 +279.038961,-239.0625,-5.368171428 +279.038961,-225,-5.120742858 +279.038961,-210.9375,-4.863714285 +279.038961,-196.875,-4.597028573 +279.038961,-182.8125,-4.3208 +279.038961,-168.75,-4.034971428 +279.038961,-154.6875,-3.739485715 +279.038961,-140.625,-3.434457143 +279.038961,-126.5625,-3.119771428 +279.038961,-112.5,-2.795485715 +279.038961,-98.4375,-2.4616 +279.038961,-84.375,-2.118114285 +279.038961,-70.3125,-1.765028573 +279.038961,-56.25,-1.402285715 +279.038961,-42.1875,-1.03 +279.038961,-28.125,-0.648057143 +279.038961,-14.0625,-0.256548573 +279.038961,0,0.161171428 +279.038961,14.0625,0.623542858 +279.038961,28.125,1.095714285 +279.038961,42.1875,1.577657143 +279.038961,56.25,2.069428573 +279.038961,70.3125,2.570971428 +279.038961,84.375,3.082342858 +279.038961,98.4375,3.603542858 +279.038961,112.5,4.134514285 +279.038961,126.5625,4.675257143 +279.038961,140.625,5.225828573 +279.038961,154.6875,5.786285715 +279.038961,168.75,6.356571428 +279.038961,182.8125,6.936571428 +279.038961,196.875,7.526285715 +279.038961,210.9375,8.125714285 +279.038961,225,8.734857143 +279.038961,239.0625,9.354285715 +279.038961,253.125,9.983428573 +279.038961,267.1875,10.62171429 +279.038961,281.25,11.27028572 +279.038961,295.3125,11.92914286 +279.038961,309.375,12.59714286 +279.038961,323.4375,13.27485714 +279.038961,337.5,13.96285714 +279.038961,351.5625,14.66057143 +279.038961,365.625,15.368 +279.038961,379.6875,16.08514286 +279.038961,393.75,16.812 +279.038961,407.8125,17.54857143 +279.038961,421.875,18.29542857 +279.038961,435.9375,19.05142857 +279.038961,450,19.81771429 +325.5487013,-450,-10.16571429 +325.5487013,-435.9375,-9.991428573 +325.5487013,-421.875,-9.808 +325.5487013,-407.8125,-9.614285715 +325.5487013,-393.75,-9.411428573 +325.5487013,-379.6875,-9.198857143 +325.5487013,-365.625,-8.976571428 +325.5487013,-351.5625,-8.745142858 +325.5487013,-337.5,-8.503428573 +325.5487013,-323.4375,-8.252571428 +325.5487013,-309.375,-7.992 +325.5487013,-295.3125,-7.721714285 +325.5487013,-281.25,-7.442285715 +325.5487013,-267.1875,-7.152571428 +325.5487013,-253.125,-6.853714285 +325.5487013,-239.0625,-6.545142858 +325.5487013,-225,-6.226857143 +325.5487013,-210.9375,-5.899428573 +325.5487013,-196.875,-5.561771428 +325.5487013,-182.8125,-5.214742858 +325.5487013,-168.75,-4.858057143 +325.5487013,-154.6875,-4.491828573 +325.5487013,-140.625,-4.116 +325.5487013,-126.5625,-3.730514285 +325.5487013,-112.5,-3.335485715 +325.5487013,-98.4375,-2.9308 +325.5487013,-84.375,-2.516514285 +325.5487013,-70.3125,-2.092628573 +325.5487013,-56.25,-1.659142858 +325.5487013,-42.1875,-1.216057143 +325.5487013,-28.125,-0.763371428 +325.5487013,-14.0625,-0.301045715 +325.5487013,0,0.188308573 +325.5487013,14.0625,0.722914285 +325.5487013,28.125,1.267257143 +325.5487013,42.1875,1.821428573 +325.5487013,56.25,2.385428573 +325.5487013,70.3125,2.9592 +325.5487013,84.375,3.5428 +325.5487013,98.4375,4.136171428 +325.5487013,112.5,4.739371428 +325.5487013,126.5625,5.352342858 +325.5487013,140.625,5.974857143 +325.5487013,154.6875,6.607428573 +325.5487013,168.75,7.250285715 +325.5487013,182.8125,7.902285715 +325.5487013,196.875,8.564 +325.5487013,210.9375,9.236 +325.5487013,225,9.917714285 +325.5487013,239.0625,10.60914286 +325.5487013,253.125,11.31028572 +325.5487013,267.1875,12.02114286 +325.5487013,281.25,12.74171429 +325.5487013,295.3125,13.47257143 +325.5487013,309.375,14.21314286 +325.5487013,323.4375,14.96285714 +325.5487013,337.5,15.72285714 +325.5487013,351.5625,16.49314286 +325.5487013,365.625,17.27257143 +325.5487013,379.6875,18.06171429 +325.5487013,393.75,18.86114286 +325.5487013,407.8125,19.67028572 +325.5487013,421.875,20.48914286 +325.5487013,435.9375,21.31771429 +325.5487013,450,22.156 +372.0487013,-450,-12.40342857 +372.0487013,-435.9375,-12.15828572 +372.0487013,-421.875,-11.904 +372.0487013,-407.8125,-11.64 +372.0487013,-393.75,-11.36628572 +372.0487013,-379.6875,-11.08285714 +372.0487013,-365.625,-10.78971429 +372.0487013,-351.5625,-10.48742857 +372.0487013,-337.5,-10.17542857 +372.0487013,-323.4375,-9.853714285 +372.0487013,-309.375,-9.522285715 +372.0487013,-295.3125,-9.181142858 +372.0487013,-281.25,-8.830857143 +372.0487013,-267.1875,-8.470285715 +372.0487013,-253.125,-8.100571428 +372.0487013,-239.0625,-7.721142858 +372.0487013,-225,-7.332 +372.0487013,-210.9375,-6.933714285 +372.0487013,-196.875,-6.525142858 +372.0487013,-182.8125,-6.107428573 +372.0487013,-168.75,-5.680171428 +372.0487013,-154.6875,-5.243142858 +372.0487013,-140.625,-4.796514285 +372.0487013,-126.5625,-4.340285715 +372.0487013,-112.5,-3.8744 +372.0487013,-98.4375,-3.398971428 +372.0487013,-84.375,-2.913885715 +372.0487013,-70.3125,-2.419257143 +372.0487013,-56.25,-1.914971428 +372.0487013,-42.1875,-1.401085715 +372.0487013,-28.125,-0.8776 +372.0487013,-14.0625,-0.344502858 +372.0487013,0,0.216508573 +372.0487013,14.0625,0.823314285 +372.0487013,28.125,1.439885715 +372.0487013,42.1875,2.066285715 +372.0487013,56.25,2.702457143 +372.0487013,70.3125,3.348457143 +372.0487013,84.375,4.004285715 +372.0487013,98.4375,4.669885715 +372.0487013,112.5,5.345257143 +372.0487013,126.5625,6.030285715 +372.0487013,140.625,6.725714285 +372.0487013,154.6875,7.430285715 +372.0487013,168.75,8.145142858 +372.0487013,182.8125,8.869142858 +372.0487013,196.875,9.603428573 +372.0487013,210.9375,10.34742857 +372.0487013,225,11.10114286 +372.0487013,239.0625,11.86514286 +372.0487013,253.125,12.63828572 +372.0487013,267.1875,13.42171429 +372.0487013,281.25,14.21428572 +372.0487013,295.3125,15.01714286 +372.0487013,309.375,15.82971429 +372.0487013,323.4375,16.652 +372.0487013,337.5,17.48457143 +372.0487013,351.5625,18.32628572 +372.0487013,365.625,19.17828572 +372.0487013,379.6875,20.04 +372.0487013,393.75,20.91142857 +372.0487013,407.8125,21.79257143 +372.0487013,421.875,22.68342857 +372.0487013,435.9375,23.58457143 +372.0487013,450,24.49485714 +418.5584415,-450,-14.64 +418.5584415,-435.9375,-14.32457143 +418.5584415,-421.875,-13.99942857 +418.5584415,-407.8125,-13.664 +418.5584415,-393.75,-13.32 +418.5584415,-379.6875,-12.96571429 +418.5584415,-365.625,-12.60171429 +418.5584415,-351.5625,-12.22857143 +418.5584415,-337.5,-11.84571429 +418.5584415,-323.4375,-11.45314286 +418.5584415,-309.375,-11.05085714 +418.5584415,-295.3125,-10.63942857 +418.5584415,-281.25,-10.21771429 +418.5584415,-267.1875,-9.786857143 +418.5584415,-253.125,-9.346285715 +418.5584415,-239.0625,-8.896 +418.5584415,-225,-8.436571428 +418.5584415,-210.9375,-7.966857143 +418.5584415,-196.875,-7.488 +418.5584415,-182.8125,-6.999428573 +418.5584415,-168.75,-6.501142858 +418.5584415,-154.6875,-5.993142858 +418.5584415,-140.625,-5.476 +418.5584415,-126.5625,-4.948971428 +418.5584415,-112.5,-4.412342858 +418.5584415,-98.4375,-3.866114285 +418.5584415,-84.375,-3.310228573 +418.5584415,-70.3125,-2.7448 +418.5584415,-56.25,-2.169714285 +418.5584415,-42.1875,-1.585085715 +418.5584415,-28.125,-0.9908 +418.5584415,-14.0625,-0.38692 +418.5584415,0,0.245771428 +418.5584415,14.0625,0.9248 +418.5584415,28.125,1.6136 +418.5584415,42.1875,2.312171428 +418.5584415,56.25,3.020628573 +418.5584415,70.3125,3.7388 +418.5584415,84.375,4.4668 +418.5584415,98.4375,5.204628573 +418.5584415,112.5,5.952 +418.5584415,126.5625,6.709714285 +418.5584415,140.625,7.477142858 +418.5584415,154.6875,8.253714285 +418.5584415,168.75,9.040571428 +418.5584415,182.8125,9.837142858 +418.5584415,196.875,10.644 +418.5584415,210.9375,11.46 +418.5584415,225,12.28571429 +418.5584415,239.0625,13.12171429 +418.5584415,253.125,13.96742857 +418.5584415,267.1875,14.82285714 +418.5584415,281.25,15.688 +418.5584415,295.3125,16.56285714 +418.5584415,309.375,17.448 +418.5584415,323.4375,18.34228572 +418.5584415,337.5,19.24685714 +418.5584415,351.5625,20.16114286 +418.5584415,365.625,21.08514286 +418.5584415,379.6875,22.01885714 +418.5584415,393.75,22.96285714 +418.5584415,407.8125,23.916 +418.5584415,421.875,24.87942857 +418.5584415,435.9375,25.852 +418.5584415,450,26.83485715 +465.0584415,-450,-16.876 +465.0584415,-435.9375,-16.48914286 +465.0584415,-421.875,-16.09314286 +465.0584415,-407.8125,-15.68742857 +465.0584415,-393.75,-15.27257143 +465.0584415,-379.6875,-14.84742857 +465.0584415,-365.625,-14.41314286 +465.0584415,-351.5625,-13.96857143 +465.0584415,-337.5,-13.51485714 +465.0584415,-323.4375,-13.052 +465.0584415,-309.375,-12.57885714 +465.0584415,-295.3125,-12.09657143 +465.0584415,-281.25,-11.604 +465.0584415,-267.1875,-11.10228572 +465.0584415,-253.125,-10.59085714 +465.0584415,-239.0625,-10.07028572 +465.0584415,-225,-9.539428573 +465.0584415,-210.9375,-8.999428573 +465.0584415,-196.875,-8.449714285 +465.0584415,-182.8125,-7.890285715 +465.0584415,-168.75,-7.321142858 +465.0584415,-154.6875,-6.742857143 +465.0584415,-140.625,-6.154285715 +465.0584415,-126.5625,-5.556628573 +465.0584415,-112.5,-4.9492 +465.0584415,-98.4375,-4.332171428 +465.0584415,-84.375,-3.705542858 +465.0584415,-70.3125,-3.069314285 +465.0584415,-56.25,-2.423485715 +465.0584415,-42.1875,-1.768 +465.0584415,-28.125,-1.102971428 +465.0584415,-14.0625,-0.428291428 +465.0584415,0,0.276097143 +465.0584415,14.0625,1.027314285 +465.0584415,28.125,1.788342858 +465.0584415,42.1875,2.559142858 +465.0584415,56.25,3.339771428 +465.0584415,70.3125,4.130228573 +465.0584415,84.375,4.930457143 +465.0584415,98.4375,5.740571428 +465.0584415,112.5,6.560571428 +465.0584415,126.5625,7.389714285 +465.0584415,140.625,8.229142858 +465.0584415,154.6875,9.078857143 +465.0584415,168.75,9.937714285 +465.0584415,182.8125,10.80628572 +465.0584415,196.875,11.68514286 +465.0584415,210.9375,12.57371429 +465.0584415,225,13.472 +465.0584415,239.0625,14.38 +465.0584415,253.125,15.29771429 +465.0584415,267.1875,16.22514286 +465.0584415,281.25,17.16285714 +465.0584415,295.3125,18.10971429 +465.0584415,309.375,19.06685714 +465.0584415,323.4375,20.03371429 +465.0584415,337.5,21.01028572 +465.0584415,351.5625,21.99657143 +465.0584415,365.625,22.99314286 +465.0584415,379.6875,23.99885714 +465.0584415,393.75,25.01485715 +465.0584415,407.8125,26.04057143 +465.0584415,421.875,27.076 +465.0584415,435.9375,28.12114285 +465.0584415,450,29.176 +511.5681818,-450,-19.11028572 +511.5681818,-435.9375,-18.65314286 +511.5681818,-421.875,-18.18628572 +511.5681818,-407.8125,-17.70971429 +511.5681818,-393.75,-17.224 +511.5681818,-379.6875,-16.728 +511.5681818,-365.625,-16.22285714 +511.5681818,-351.5625,-15.708 +511.5681818,-337.5,-15.18342857 +511.5681818,-323.4375,-14.64914286 +511.5681818,-309.375,-14.10571429 +511.5681818,-295.3125,-13.55257143 +511.5681818,-281.25,-12.98971429 +511.5681818,-267.1875,-12.41714286 +511.5681818,-253.125,-11.83485714 +511.5681818,-239.0625,-11.24285714 +511.5681818,-225,-10.64171429 +511.5681818,-210.9375,-10.03085714 +511.5681818,-196.875,-9.410285715 +511.5681818,-182.8125,-8.78 +511.5681818,-168.75,-8.14 +511.5681818,-154.6875,-7.490857143 +511.5681818,-140.625,-6.832 +511.5681818,-126.5625,-6.163428573 +511.5681818,-112.5,-5.485028573 +511.5681818,-98.4375,-4.7972 +511.5681818,-84.375,-4.099828573 +511.5681818,-70.3125,-3.3928 +511.5681818,-56.25,-2.676171428 +511.5681818,-42.1875,-1.949942858 +511.5681818,-28.125,-1.214057143 +511.5681818,-14.0625,-0.468622858 +511.5681818,0,0.30748 +511.5681818,14.0625,1.130914285 +511.5681818,28.125,1.964171428 +511.5681818,42.1875,2.8072 +511.5681818,56.25,3.660057143 +511.5681818,70.3125,4.522685715 +511.5681818,84.375,5.395085715 +511.5681818,98.4375,6.277142858 +511.5681818,112.5,7.169142858 +511.5681818,126.5625,8.071428573 +511.5681818,140.625,8.982857143 +511.5681818,154.6875,9.904571428 +511.5681818,168.75,10.83542857 +511.5681818,182.8125,11.77657143 +511.5681818,196.875,12.72742857 +511.5681818,210.9375,13.688 +511.5681818,225,14.65828572 +511.5681818,239.0625,15.63885714 +511.5681818,253.125,16.62857143 +511.5681818,267.1875,17.62857143 +511.5681818,281.25,18.63828572 +511.5681818,295.3125,19.65771429 +511.5681818,309.375,20.68685714 +511.5681818,323.4375,21.72628572 +511.5681818,337.5,22.77485714 +511.5681818,351.5625,23.83371429 +511.5681818,365.625,24.90228572 +511.5681818,379.6875,25.98 +511.5681818,393.75,27.06857143 +511.5681818,407.8125,28.16628573 +511.5681818,421.875,29.27371428 +511.5681818,435.9375,30.39142858 +511.5681818,450,31.51828573 +558.077922,-450,-21.344 +558.077922,-435.9375,-20.816 +558.077922,-421.875,-20.27828572 +558.077922,-407.8125,-19.73142857 +558.077922,-393.75,-19.17428572 +558.077922,-379.6875,-18.608 +558.077922,-365.625,-18.032 +558.077922,-351.5625,-17.44628572 +558.077922,-337.5,-16.85085714 +558.077922,-323.4375,-16.24571429 +558.077922,-309.375,-15.63142857 +558.077922,-295.3125,-15.00742857 +558.077922,-281.25,-14.37371429 +558.077922,-267.1875,-13.73028572 +558.077922,-253.125,-13.07714286 +558.077922,-239.0625,-12.41485714 +558.077922,-225,-11.74285714 +558.077922,-210.9375,-11.06114286 +558.077922,-196.875,-10.36971429 +558.077922,-182.8125,-9.668571428 +558.077922,-168.75,-8.958285715 +558.077922,-154.6875,-8.237714285 +558.077922,-140.625,-7.508 +558.077922,-126.5625,-6.768571428 +558.077922,-112.5,-6.02 +558.077922,-98.4375,-5.2612 +558.077922,-84.375,-4.493028573 +558.077922,-70.3125,-3.7152 +558.077922,-56.25,-2.927771428 +558.077922,-42.1875,-2.1308 +558.077922,-28.125,-1.324171428 +558.077922,-14.0625,-0.50792 +558.077922,0,0.339925715 +558.077922,14.0625,1.2356 +558.077922,28.125,2.141028573 +558.077922,42.1875,3.056285715 +558.077922,56.25,3.981314285 +558.077922,70.3125,4.916171428 +558.077922,84.375,5.860571428 +558.077922,98.4375,6.815428573 +558.077922,112.5,7.779428573 +558.077922,126.5625,8.753714285 +558.077922,140.625,9.737714285 +558.077922,154.6875,10.73085714 +558.077922,168.75,11.73485714 +558.077922,182.8125,12.748 +558.077922,196.875,13.77085714 +558.077922,210.9375,14.804 +558.077922,225,15.84628572 +558.077922,239.0625,16.89885714 +558.077922,253.125,17.96114286 +558.077922,267.1875,19.03314286 +558.077922,281.25,20.11485714 +558.077922,295.3125,21.20685714 +558.077922,309.375,22.308 +558.077922,323.4375,23.41942857 +558.077922,337.5,24.54057143 +558.077922,351.5625,25.67142858 +558.077922,365.625,26.812 +558.077922,379.6875,27.96228573 +558.077922,393.75,29.12285715 +558.077922,407.8125,30.29257143 +558.077922,421.875,31.47257143 +558.077922,435.9375,32.66228573 +558.077922,450,33.86171428 +930.1266235,-450,-39.17542858 +930.1266235,-435.9375,-38.08114285 +930.1266235,-421.875,-36.97771428 +930.1266235,-407.8125,-35.864 +930.1266235,-393.75,-34.74057143 +930.1266235,-379.6875,-33.608 +930.1266235,-365.625,-32.46571428 +930.1266235,-351.5625,-31.31371428 +930.1266235,-337.5,-30.152 +930.1266235,-323.4375,-28.98114285 +930.1266235,-309.375,-27.8 +930.1266235,-295.3125,-26.60971428 +930.1266235,-281.25,-25.40971428 +930.1266235,-267.1875,-24.2 +930.1266235,-253.125,-22.98114286 +930.1266235,-239.0625,-21.752 +930.1266235,-225,-20.51371429 +930.1266235,-210.9375,-19.26571429 +930.1266235,-196.875,-18.008 +930.1266235,-182.8125,-16.74114286 +930.1266235,-168.75,-15.464 +930.1266235,-154.6875,-14.17771429 +930.1266235,-140.625,-12.88171429 +930.1266235,-126.5625,-11.576 +930.1266235,-112.5,-10.26057143 +930.1266235,-98.4375,-8.936 +930.1266235,-84.375,-7.601142858 +930.1266235,-70.3125,-6.257142858 +930.1266235,-56.25,-4.903542858 +930.1266235,-42.1875,-3.540228573 +930.1266235,-28.125,-2.167314285 +930.1266235,-14.0625,-0.7848 +930.1266235,0,0.637714285 +930.1266235,14.0625,2.111085715 +930.1266235,28.125,3.594285715 +930.1266235,42.1875,5.087257143 +930.1266235,56.25,6.590285715 +930.1266235,70.3125,8.102857143 +930.1266235,84.375,9.625142858 +930.1266235,98.4375,11.15714286 +930.1266235,112.5,12.69885714 +930.1266235,126.5625,14.25085714 +930.1266235,140.625,15.81257143 +930.1266235,154.6875,17.384 +930.1266235,168.75,18.96514286 +930.1266235,182.8125,20.556 +930.1266235,196.875,22.15657143 +930.1266235,210.9375,23.76742857 +930.1266235,225,25.388 +930.1266235,239.0625,27.01771428 +930.1266235,253.125,28.65771428 +930.1266235,267.1875,30.30742858 +930.1266235,281.25,31.96742858 +930.1266235,295.3125,33.63657143 +930.1266235,309.375,35.316 +930.1266235,323.4375,37.00457143 +930.1266235,337.5,38.70342858 +930.1266235,351.5625,40.412 +930.1266235,365.625,42.13028573 +930.1266235,379.6875,43.85885715 +930.1266235,393.75,45.59657143 +930.1266235,407.8125,47.34457143 +930.1266235,421.875,49.10228573 +930.1266235,435.9375,50.86971428 +930.1266235,450,52.64685715 +1162.694805,-450,-50.28685715 +1162.694805,-435.9375,-48.83828573 +1162.694805,-421.875,-47.38057143 +1162.694805,-407.8125,-45.91314285 +1162.694805,-393.75,-44.436 +1162.694805,-379.6875,-42.94914285 +1162.694805,-365.625,-41.45314285 +1162.694805,-351.5625,-39.94742858 +1162.694805,-337.5,-38.43142858 +1162.694805,-323.4375,-36.90628573 +1162.694805,-309.375,-35.372 +1162.694805,-295.3125,-33.82742858 +1162.694805,-281.25,-32.27371428 +1162.694805,-267.1875,-30.71028573 +1162.694805,-253.125,-29.13714285 +1162.694805,-239.0625,-27.55428573 +1162.694805,-225,-25.96171428 +1162.694805,-210.9375,-24.36 +1162.694805,-196.875,-22.74857143 +1162.694805,-182.8125,-21.12742857 +1162.694805,-168.75,-19.49657143 +1162.694805,-154.6875,-17.856 +1162.694805,-140.625,-16.20628572 +1162.694805,-126.5625,-14.54628572 +1162.694805,-112.5,-12.87714286 +1162.694805,-98.4375,-11.19828572 +1162.694805,-84.375,-9.510285715 +1162.694805,-70.3125,-7.812 +1162.694805,-56.25,-6.104571428 +1162.694805,-42.1875,-4.387314285 +1162.694805,-28.125,-2.660457143 +1162.694805,-14.0625,-0.924057143 +1162.694805,0,0.858342858 +1162.694805,14.0625,2.6928 +1162.694805,28.125,4.537028573 +1162.694805,42.1875,6.390857143 +1162.694805,56.25,8.254857143 +1162.694805,70.3125,10.12857143 +1162.694805,84.375,12.012 +1162.694805,98.4375,13.90514286 +1162.694805,112.5,15.80857143 +1162.694805,126.5625,17.72114286 +1162.694805,140.625,19.644 +1162.694805,154.6875,21.576 +1162.694805,168.75,23.51828572 +1162.694805,182.8125,25.47085715 +1162.694805,196.875,27.43257143 +1162.694805,210.9375,29.404 +1162.694805,225,31.38571428 +1162.694805,239.0625,33.37657143 +1162.694805,253.125,35.37771428 +1162.694805,267.1875,37.38857143 +1162.694805,281.25,39.40914285 +1162.694805,295.3125,41.44 +1162.694805,309.375,43.48 +1162.694805,323.4375,45.53028573 +1162.694805,337.5,47.58971428 +1162.694805,351.5625,49.65942858 +1162.694805,365.625,51.73885715 +1162.694805,379.6875,53.82857143 +1162.694805,393.75,55.92742858 +1162.694805,407.8125,58.03428573 +1162.694805,421.875,60.15428573 +1162.694805,435.9375,62.28571428 +1162.694805,450,64.42285715 +1395.194805,-450,-61.37142858 +1395.194805,-435.9375,-59.57142858 +1395.194805,-421.875,-57.76 +1395.194805,-407.8125,-55.936 +1395.194805,-393.75,-54.10514285 +1395.194805,-379.6875,-52.26457143 +1395.194805,-365.625,-50.41428573 +1395.194805,-351.5625,-48.55428573 +1395.194805,-337.5,-46.68514285 +1395.194805,-323.4375,-44.80628573 +1395.194805,-309.375,-42.91771428 +1395.194805,-295.3125,-41.01942858 +1395.194805,-281.25,-39.11142858 +1395.194805,-267.1875,-37.19371428 +1395.194805,-253.125,-35.26685715 +1395.194805,-239.0625,-33.33028573 +1395.194805,-225,-31.384 +1395.194805,-210.9375,-29.428 +1395.194805,-196.875,-27.46285715 +1395.194805,-182.8125,-25.48742858 +1395.194805,-168.75,-23.50285714 +1395.194805,-154.6875,-21.50857143 +1395.194805,-140.625,-19.50457143 +1395.194805,-126.5625,-17.49142857 +1395.194805,-112.5,-15.468 +1395.194805,-98.4375,-13.43542857 +1395.194805,-84.375,-11.39314286 +1395.194805,-70.3125,-9.341142858 +1395.194805,-56.25,-7.279428573 +1395.194805,-42.1875,-5.2084 +1395.194805,-28.125,-3.127657143 +1395.194805,-14.0625,-1.037257143 +1395.194805,0,1.105485715 +1395.194805,14.0625,3.301028573 +1395.194805,28.125,5.506342858 +1395.194805,42.1875,7.721714285 +1395.194805,56.25,9.946285715 +1395.194805,70.3125,12.18114286 +1395.194805,84.375,14.42571429 +1395.194805,98.4375,16.68 +1395.194805,112.5,18.944 +1395.194805,126.5625,21.21771429 +1395.194805,140.625,23.50171429 +1395.194805,154.6875,25.79542858 +1395.194805,168.75,28.09885715 +1395.194805,182.8125,30.41142858 +1395.194805,196.875,32.73485715 +1395.194805,210.9375,35.06742858 +1395.194805,225,37.40971428 +1395.194805,239.0625,39.76228573 +1395.194805,253.125,42.12457143 +1395.194805,267.1875,44.496 +1395.194805,281.25,46.87828573 +1395.194805,295.3125,49.26971428 +1395.194805,309.375,51.67085715 +1395.194805,323.4375,54.08228573 +1395.194805,337.5,56.50285715 +1395.194805,351.5625,58.93142858 +1395.194805,365.625,61.37142858 +1395.194805,379.6875,63.82285715 +1395.194805,393.75,66.28571428 +1395.194805,407.8125,68.75428573 +1395.194805,421.875,71.23428573 +1395.194805,435.9375,73.72571428 +1395.194805,450,76.22285715 +1627.694805,-450,-72.42857143 +1627.694805,-435.9375,-70.27428573 +1627.694805,-421.875,-68.10857143 +1627.694805,-407.8125,-65.93142858 +1627.694805,-393.75,-63.74857143 +1627.694805,-379.6875,-61.55428573 +1627.694805,-365.625,-59.34857143 +1627.694805,-351.5625,-57.136 +1627.694805,-337.5,-54.91257143 +1627.694805,-323.4375,-52.67942858 +1627.694805,-309.375,-50.43714285 +1627.694805,-295.3125,-48.18514285 +1627.694805,-281.25,-45.92342858 +1627.694805,-267.1875,-43.652 +1627.694805,-253.125,-41.37085715 +1627.694805,-239.0625,-39.08057143 +1627.694805,-225,-36.78 +1627.694805,-210.9375,-34.47028573 +1627.694805,-196.875,-32.15085715 +1627.694805,-182.8125,-29.82171428 +1627.694805,-168.75,-27.48342858 +1627.694805,-154.6875,-25.13485715 +1627.694805,-140.625,-22.77714286 +1627.694805,-126.5625,-20.40971429 +1627.694805,-112.5,-18.03257143 +1627.694805,-98.4375,-15.64628572 +1627.694805,-84.375,-13.24971429 +1627.694805,-70.3125,-10.844 +1627.694805,-56.25,-8.428571428 +1627.694805,-42.1875,-6.003428573 +1627.694805,-28.125,-3.568742858 +1627.694805,-14.0625,-1.124457143 +1627.694805,0,1.3792 +1627.694805,14.0625,3.935771428 +1627.694805,28.125,6.502285715 +1627.694805,42.1875,9.078285715 +1627.694805,56.25,11.66457143 +1627.694805,70.3125,14.26 +1627.694805,84.375,16.86571429 +1627.694805,98.4375,19.48114286 +1627.694805,112.5,22.10628572 +1627.694805,126.5625,24.74114286 +1627.694805,140.625,27.38628573 +1627.694805,154.6875,30.04057143 +1627.694805,168.75,32.70514285 +1627.694805,182.8125,35.37942858 +1627.694805,196.875,38.06342858 +1627.694805,210.9375,40.75714285 +1627.694805,225,43.46057143 +1627.694805,239.0625,46.17428573 +1627.694805,253.125,48.89714285 +1627.694805,267.1875,51.63028573 +1627.694805,281.25,54.37314285 +1627.694805,295.3125,57.12571428 +1627.694805,309.375,59.88571428 +1627.694805,323.4375,62.66285715 +1627.694805,337.5,65.44 +1627.694805,351.5625,68.23428573 +1627.694805,365.625,71.03428573 +1627.694805,379.6875,73.84571428 +1627.694805,393.75,76.66857143 +1627.694805,407.8125,79.49714285 +1627.694805,421.875,82.34285715 +1627.694805,435.9375,85.18857143 +1627.694805,450,88.05142858 +1860.292208,-450,-83.46285715 +1860.292208,-435.9375,-80.95428573 +1860.292208,-421.875,-78.43428573 +1860.292208,-407.8125,-75.90285715 +1860.292208,-393.75,-73.36571428 +1860.292208,-379.6875,-70.81714285 +1860.292208,-365.625,-68.25714285 +1860.292208,-351.5625,-65.69142858 +1860.292208,-337.5,-63.11428573 +1860.292208,-323.4375,-60.52571428 +1860.292208,-309.375,-57.93142858 +1860.292208,-295.3125,-55.32457143 +1860.292208,-281.25,-52.70914285 +1860.292208,-267.1875,-50.08342858 +1860.292208,-253.125,-47.44857143 +1860.292208,-239.0625,-44.804 +1860.292208,-225,-42.15028573 +1860.292208,-210.9375,-39.48628573 +1860.292208,-196.875,-36.81314285 +1860.292208,-182.8125,-34.13028573 +1860.292208,-168.75,-31.43771428 +1860.292208,-154.6875,-28.73542858 +1860.292208,-140.625,-26.024 +1860.292208,-126.5625,-23.30228572 +1860.292208,-112.5,-20.57142857 +1860.292208,-98.4375,-17.83085714 +1860.292208,-84.375,-15.08057143 +1860.292208,-70.3125,-12.32114286 +1860.292208,-56.25,-9.551428573 +1860.292208,-42.1875,-6.772571428 +1860.292208,-28.125,-3.983885715 +1860.292208,-14.0625,-1.185657143 +1860.292208,0,1.679428573 +1860.292208,14.0625,4.597085715 +1860.292208,28.125,7.524571428 +1860.292208,42.1875,10.46171429 +1860.292208,56.25,13.40914286 +1860.292208,70.3125,16.36571429 +1860.292208,84.375,19.33257143 +1860.292208,98.4375,22.30914286 +1860.292208,112.5,25.29542858 +1860.292208,126.5625,28.29142858 +1860.292208,140.625,31.29714285 +1860.292208,154.6875,34.31257143 +1860.292208,168.75,37.33828573 +1860.292208,182.8125,40.37371428 +1860.292208,196.875,43.41885715 +1860.292208,210.9375,46.47371428 +1860.292208,225,49.53828573 +1860.292208,239.0625,52.61257143 +1860.292208,253.125,55.69714285 +1860.292208,267.1875,58.78857143 +1860.292208,281.25,61.89714285 +1860.292208,295.3125,65.01142858 +1860.292208,309.375,68.13142858 +1860.292208,323.4375,71.26285715 +1860.292208,337.5,74.40571428 +1860.292208,351.5625,77.56 +1860.292208,365.625,80.72571428 +1860.292208,379.6875,83.89714285 +1860.292208,393.75,87.08 +1860.292208,407.8125,90.26857143 +1860.292208,421.875,93.47428573 +1860.292208,435.9375,96.68571428 +1860.292208,450,99.90857143 +2092.792208,-450,-94.46857143 +2092.792208,-435.9375,-91.60571428 +2092.792208,-421.875,-88.73142858 +2092.792208,-407.8125,-85.85142858 +2092.792208,-393.75,-82.95428573 +2092.792208,-379.6875,-80.05714285 +2092.792208,-365.625,-77.14285715 +2092.792208,-351.5625,-74.22285715 +2092.792208,-337.5,-71.29142858 +2092.792208,-323.4375,-68.34857143 +2092.792208,-309.375,-65.4 +2092.792208,-295.3125,-62.44 +2092.792208,-281.25,-59.46857143 +2092.792208,-267.1875,-56.48971428 +2092.792208,-253.125,-53.50057143 +2092.792208,-239.0625,-50.50228573 +2092.792208,-225,-47.49428573 +2092.792208,-210.9375,-44.47657143 +2092.792208,-196.875,-41.44914285 +2092.792208,-182.8125,-38.41257143 +2092.792208,-168.75,-35.36628573 +2092.792208,-154.6875,-32.30971428 +2092.792208,-140.625,-29.244 +2092.792208,-126.5625,-26.16914285 +2092.792208,-112.5,-23.084 +2092.792208,-98.4375,-19.98971429 +2092.792208,-84.375,-16.88571429 +2092.792208,-70.3125,-13.772 +2092.792208,-56.25,-10.64857143 +2092.792208,-42.1875,-7.515428573 +2092.792208,-28.125,-4.373028573 +2092.792208,-14.0625,-1.220857143 +2092.792208,0,2.006171428 +2092.792208,14.0625,5.284914285 +2092.792208,28.125,8.573714285 +2092.792208,42.1875,11.872 +2092.792208,56.25,15.18 +2092.792208,70.3125,18.49771429 +2092.792208,84.375,21.82571429 +2092.792208,98.4375,25.16342858 +2092.792208,112.5,28.51028573 +2092.792208,126.5625,31.86742858 +2092.792208,140.625,35.23485715 +2092.792208,154.6875,38.61142858 +2092.792208,168.75,41.99771428 +2092.792208,182.8125,45.39428573 +2092.792208,196.875,48.80057143 +2092.792208,210.9375,52.21657143 +2092.792208,225,55.64228573 +2092.792208,239.0625,59.08 +2092.792208,253.125,62.52571428 +2092.792208,267.1875,65.97714285 +2092.792208,281.25,69.44571428 +2092.792208,295.3125,72.92 +2092.792208,309.375,76.4 +2092.792208,323.4375,79.89714285 +2092.792208,337.5,83.4 +2092.792208,351.5625,86.91428573 +2092.792208,365.625,90.44 +2092.792208,379.6875,93.97142858 +2092.792208,393.75,97.51428573 +2092.792208,407.8125,101.0685714 +2092.792208,421.875,104.6342857 +2092.792208,435.9375,108.2057143 +2092.792208,450,111.7885714 +2325.292208,-450,-105.4514286 +2325.292208,-435.9375,-102.2342857 +2325.292208,-421.875,-99.00571428 +2325.292208,-407.8125,-95.76571428 +2325.292208,-393.75,-92.52 +2325.292208,-379.6875,-89.26285715 +2325.292208,-365.625,-86 +2325.292208,-351.5625,-82.72571428 +2325.292208,-337.5,-79.44 +2325.292208,-323.4375,-76.14285715 +2325.292208,-309.375,-72.84 +2325.292208,-295.3125,-69.52571428 +2325.292208,-281.25,-66.2 +2325.292208,-267.1875,-62.86857143 +2325.292208,-253.125,-59.52571428 +2325.292208,-239.0625,-56.17428573 +2325.292208,-225,-52.812 +2325.292208,-210.9375,-49.44057143 +2325.292208,-196.875,-46.05942858 +2325.292208,-182.8125,-42.66857143 +2325.292208,-168.75,-39.26857143 +2325.292208,-154.6875,-35.85828573 +2325.292208,-140.625,-32.43885715 +2325.292208,-126.5625,-29.00971428 +2325.292208,-112.5,-25.57085715 +2325.292208,-98.4375,-22.12228572 +2325.292208,-84.375,-18.664 +2325.292208,-70.3125,-15.19657143 +2325.292208,-56.25,-11.71942857 +2325.292208,-42.1875,-8.232571428 +2325.292208,-28.125,-4.736114285 +2325.292208,-14.0625,-1.230057143 +2325.292208,0,2.359485715 +2325.292208,14.0625,5.999428573 +2325.292208,28.125,9.649142858 +2325.292208,42.1875,13.30857143 +2325.292208,56.25,16.97771429 +2325.292208,70.3125,20.65657143 +2325.292208,84.375,24.34514286 +2325.292208,98.4375,28.044 +2325.292208,112.5,31.75257143 +2325.292208,126.5625,35.47085715 +2325.292208,140.625,39.19885715 +2325.292208,154.6875,42.93657143 +2325.292208,168.75,46.684 +2325.292208,182.8125,50.44171428 +2325.292208,196.875,54.20857143 +2325.292208,210.9375,57.98857143 +2325.292208,225,61.77142858 +2325.292208,239.0625,65.57142858 +2325.292208,253.125,69.37714285 +2325.292208,267.1875,73.19428573 +2325.292208,281.25,77.01714285 +2325.292208,295.3125,80.85142858 +2325.292208,309.375,84.69714285 +2325.292208,323.4375,88.55428573 +2325.292208,337.5,92.42285715 +2325.292208,351.5625,96.29714285 +2325.292208,365.625,100.1771429 +2325.292208,379.6875,104.0742857 +2325.292208,393.75,107.9771429 +2325.292208,407.8125,111.8914286 +2325.292208,421.875,115.8171429 +2325.292208,435.9375,119.7485714 +2325.292208,450,123.6971429 +2557.88961,-450,-116.4057143 +2557.88961,-435.9375,-112.8342857 +2557.88961,-421.875,-109.2514286 +2557.88961,-407.8125,-105.6628572 +2557.88961,-393.75,-102.0628572 +2557.88961,-379.6875,-98.45142858 +2557.88961,-365.625,-94.82857143 +2557.88961,-351.5625,-91.2 +2557.88961,-337.5,-87.56 +2557.88961,-323.4375,-83.91428573 +2557.88961,-309.375,-80.25714285 +2557.88961,-295.3125,-76.58857143 +2557.88961,-281.25,-72.90857143 +2557.88961,-267.1875,-69.22285715 +2557.88961,-253.125,-65.52571428 +2557.88961,-239.0625,-61.82285715 +2557.88961,-225,-58.10285715 +2557.88961,-210.9375,-54.37885715 +2557.88961,-196.875,-50.64342858 +2557.88961,-182.8125,-46.89885715 +2557.88961,-168.75,-43.14457143 +2557.88961,-154.6875,-39.38057143 +2557.88961,-140.625,-35.60742858 +2557.88961,-126.5625,-31.824 +2557.88961,-112.5,-28.03142858 +2557.88961,-98.4375,-24.22914286 +2557.88961,-84.375,-20.41714286 +2557.88961,-70.3125,-16.59542857 +2557.88961,-56.25,-12.76457143 +2557.88961,-42.1875,-8.923428573 +2557.88961,-28.125,-5.0732 +2557.88961,-14.0625,-1.2132 +2557.88961,0,2.739314285 +2557.88961,14.0625,6.74 +2557.88961,28.125,10.75085714 +2557.88961,42.1875,14.77142857 +2557.88961,56.25,18.80171429 +2557.88961,70.3125,22.84171429 +2557.88961,84.375,26.89142858 +2557.88961,98.4375,30.95142858 +2557.88961,112.5,35.02114285 +2557.88961,126.5625,39.1 +2557.88961,140.625,43.18914285 +2557.88961,154.6875,47.288 +2557.88961,168.75,51.39714285 +2557.88961,182.8125,55.51542858 +2557.88961,196.875,59.64571428 +2557.88961,210.9375,63.78285715 +2557.88961,225,67.93142858 +2557.88961,239.0625,72.08571428 +2557.88961,253.125,76.25714285 +2557.88961,267.1875,80.43428573 +2557.88961,281.25,84.61714285 +2557.88961,295.3125,88.81714285 +2557.88961,309.375,93.02285715 +2557.88961,323.4375,97.24 +2557.88961,337.5,101.4685714 +2557.88961,351.5625,105.7028572 +2557.88961,365.625,109.9485714 +2557.88961,379.6875,114.2057143 +2557.88961,393.75,118.4685714 +2557.88961,407.8125,122.7428572 +2557.88961,421.875,127.0285714 +2557.88961,435.9375,131.3257143 +2557.88961,450,135.6285714 +2790.38961,-450,-127.3371429 +2790.38961,-435.9375,-123.4114286 +2790.38961,-421.875,-119.4742857 +2790.38961,-407.8125,-115.5314286 +2790.38961,-393.75,-111.5714286 +2790.38961,-379.6875,-107.6114286 +2790.38961,-365.625,-103.6342857 +2790.38961,-351.5625,-99.65142858 +2790.38961,-337.5,-95.65714285 +2790.38961,-323.4375,-91.65714285 +2790.38961,-309.375,-87.64571428 +2790.38961,-295.3125,-83.62285715 +2790.38961,-281.25,-79.59428573 +2790.38961,-267.1875,-75.54857143 +2790.38961,-253.125,-71.50285715 +2790.38961,-239.0625,-67.44 +2790.38961,-225,-63.37142858 +2790.38961,-210.9375,-59.29142858 +2790.38961,-196.875,-55.20171428 +2790.38961,-182.8125,-51.10342858 +2790.38961,-168.75,-46.99485715 +2790.38961,-154.6875,-42.87714285 +2790.38961,-140.625,-38.74971428 +2790.38961,-126.5625,-34.61257143 +2790.38961,-112.5,-30.46571428 +2790.38961,-98.4375,-26.30971428 +2790.38961,-84.375,-22.144 +2790.38961,-70.3125,-17.96857143 +2790.38961,-56.25,-13.78342857 +2790.38961,-42.1875,-9.588571428 +2790.38961,-28.125,-5.384285715 +2790.38961,-14.0625,-1.170342858 +2790.38961,0,3.145714285 +2790.38961,14.0625,7.507428573 +2790.38961,28.125,11.87942857 +2790.38961,42.1875,16.26114286 +2790.38961,56.25,20.65257143 +2790.38961,70.3125,25.05371428 +2790.38961,84.375,29.46457143 +2790.38961,98.4375,33.88514285 +2790.38961,112.5,38.316 +2790.38961,126.5625,42.756 +2790.38961,140.625,47.20628573 +2790.38961,154.6875,51.66628573 +2790.38961,168.75,56.136 +2790.38961,182.8125,60.61714285 +2790.38961,196.875,65.10285715 +2790.38961,210.9375,69.60571428 +2790.38961,225,74.11428573 +2790.38961,239.0625,78.63428573 +2790.38961,253.125,83.16 +2790.38961,267.1875,87.69714285 +2790.38961,281.25,92.24571428 +2790.38961,295.3125,96.80571428 +2790.38961,309.375,101.3714286 +2790.38961,323.4375,105.9485714 +2790.38961,337.5,110.5371429 +2790.38961,351.5625,115.1371429 +2790.38961,365.625,119.7428572 +2790.38961,379.6875,124.36 +2790.38961,393.75,128.9828572 +2790.38961,407.8125,133.6228572 +2790.38961,421.875,138.2685714 +2790.38961,435.9375,142.9257143 +2790.38961,450,147.5885714 +3022.88961,-450,-138.24 +3022.88961,-435.9375,-133.96 +3022.88961,-421.875,-129.6685714 +3022.88961,-407.8125,-125.3714286 +3022.88961,-393.75,-121.0628572 +3022.88961,-379.6875,-116.7428572 +3022.88961,-365.625,-112.4171429 +3022.88961,-351.5625,-108.08 +3022.88961,-337.5,-103.7314286 +3022.88961,-323.4375,-99.37714285 +3022.88961,-309.375,-95.01142858 +3022.88961,-295.3125,-90.63428573 +3022.88961,-281.25,-86.24571428 +3022.88961,-267.1875,-81.85142858 +3022.88961,-253.125,-77.44571428 +3022.88961,-239.0625,-73.03428573 +3022.88961,-225,-68.61142858 +3022.88961,-210.9375,-64.17714285 +3022.88961,-196.875,-59.73142858 +3022.88961,-182.8125,-55.28171428 +3022.88961,-168.75,-50.81942858 +3022.88961,-154.6875,-46.34742858 +3022.88961,-140.625,-41.86628573 +3022.88961,-126.5625,-37.37542858 +3022.88961,-112.5,-32.87485715 +3022.88961,-98.4375,-28.36457143 +3022.88961,-84.375,-23.84457143 +3022.88961,-70.3125,-19.31542857 +3022.88961,-56.25,-14.776 +3022.88961,-42.1875,-10.22742857 +3022.88961,-28.125,-5.669314285 +3022.88961,-14.0625,-1.101485715 +3022.88961,0,3.578628573 +3022.88961,14.0625,8.301714285 +3022.88961,28.125,13.03428572 +3022.88961,42.1875,17.77714286 +3022.88961,56.25,22.52971429 +3022.88961,70.3125,27.292 +3022.88961,84.375,32.064 +3022.88961,98.4375,36.84571428 +3022.88961,112.5,41.63714285 +3022.88961,126.5625,46.43885715 +3022.88961,140.625,51.25028573 +3022.88961,154.6875,56.07142858 +3022.88961,168.75,60.90285715 +3022.88961,182.8125,65.74285715 +3022.88961,196.875,70.59428573 +3022.88961,210.9375,75.45142858 +3022.88961,225,80.32571428 +3022.88961,239.0625,85.20571428 +3022.88961,253.125,90.09142858 +3022.88961,267.1875,94.99428573 +3022.88961,281.25,99.90285715 +3022.88961,295.3125,104.8228572 +3022.88961,309.375,109.7485714 +3022.88961,323.4375,114.6857143 +3022.88961,337.5,119.6342857 +3022.88961,351.5625,124.5942857 +3022.88961,365.625,129.5657143 +3022.88961,379.6875,134.5428572 +3022.88961,393.75,139.5257143 +3022.88961,407.8125,144.5257143 +3022.88961,421.875,149.5314286 +3022.88961,435.9375,154.5485714 +3022.88961,450,159.5771429 +3255.487013,-450,-149.1142857 +3255.487013,-435.9375,-144.48 +3255.487013,-421.875,-139.84 +3255.487013,-407.8125,-135.1828572 +3255.487013,-393.75,-130.52 +3255.487013,-379.6875,-125.8514286 +3255.487013,-365.625,-121.1714286 +3255.487013,-351.5625,-116.48 +3255.487013,-337.5,-111.7771429 +3255.487013,-323.4375,-107.0685714 +3255.487013,-309.375,-102.3485714 +3255.487013,-295.3125,-97.61714285 +3255.487013,-281.25,-92.88 +3255.487013,-267.1875,-88.12571428 +3255.487013,-253.125,-83.37142858 +3255.487013,-239.0625,-78.6 +3255.487013,-225,-73.82285715 +3255.487013,-210.9375,-69.03428573 +3255.487013,-196.875,-64.24 +3255.487013,-182.8125,-59.43428573 +3255.487013,-168.75,-54.61771428 +3255.487013,-154.6875,-49.792 +3255.487013,-140.625,-44.95657143 +3255.487013,-126.5625,-40.11142858 +3255.487013,-112.5,-35.25714285 +3255.487013,-98.4375,-30.39314285 +3255.487013,-84.375,-25.51942858 +3255.487013,-70.3125,-20.636 +3255.487013,-56.25,-15.74285714 +3255.487013,-42.1875,-10.84057143 +3255.487013,-28.125,-5.928571428 +3255.487013,-14.0625,-1.006628573 +3255.487013,0,4.038114285 +3255.487013,14.0625,9.122285715 +3255.487013,28.125,14.216 +3255.487013,42.1875,19.32 +3255.487013,56.25,24.43314286 +3255.487013,70.3125,29.55657143 +3255.487013,84.375,34.68971428 +3255.487013,98.4375,39.83257143 +3255.487013,112.5,44.98571428 +3255.487013,126.5625,50.148 +3255.487013,140.625,55.32057143 +3255.487013,154.6875,60.50285715 +3255.487013,168.75,65.69714285 +3255.487013,182.8125,70.89714285 +3255.487013,196.875,76.10857143 +3255.487013,210.9375,81.33142858 +3255.487013,225,86.56 +3255.487013,239.0625,91.8 +3255.487013,253.125,97.05142858 +3255.487013,267.1875,102.3142857 +3255.487013,281.25,107.5828572 +3255.487013,295.3125,112.8628572 +3255.487013,309.375,118.1542857 +3255.487013,323.4375,123.4514286 +3255.487013,337.5,128.76 +3255.487013,351.5625,134.08 +3255.487013,365.625,139.4114286 +3255.487013,379.6875,144.7485714 +3255.487013,393.75,150.0971429 +3255.487013,407.8125,155.4571429 +3255.487013,421.875,160.8228572 +3255.487013,435.9375,166.2057143 +3255.487013,450,171.5885714 +3487.987013,-450,-159.9657143 +3487.987013,-435.9375,-154.9771429 +3487.987013,-421.875,-149.9828572 +3487.987013,-407.8125,-144.9714286 +3487.987013,-393.75,-139.96 +3487.987013,-379.6875,-134.9314286 +3487.987013,-365.625,-129.8971429 +3487.987013,-351.5625,-124.8514286 +3487.987013,-337.5,-119.7942857 +3487.987013,-323.4375,-114.7314286 +3487.987013,-309.375,-109.6571429 +3487.987013,-295.3125,-104.5714286 +3487.987013,-281.25,-99.48 +3487.987013,-267.1875,-94.37714285 +3487.987013,-253.125,-89.26857143 +3487.987013,-239.0625,-84.14285715 +3487.987013,-225,-79.01142858 +3487.987013,-210.9375,-73.86857143 +3487.987013,-196.875,-68.72 +3487.987013,-182.8125,-63.56 +3487.987013,-168.75,-58.38857143 +3487.987013,-154.6875,-53.21028573 +3487.987013,-140.625,-48.02114285 +3487.987013,-126.5625,-42.82228573 +3487.987013,-112.5,-37.61371428 +3487.987013,-98.4375,-32.396 +3487.987013,-84.375,-27.168 +3487.987013,-70.3125,-21.93085714 +3487.987013,-56.25,-16.684 +3487.987013,-42.1875,-11.42742857 +3487.987013,-28.125,-6.161142858 +3487.987013,-14.0625,-0.885714285 +3487.987013,0,4.524114285 +3487.987013,14.0625,9.969142858 +3487.987013,28.125,15.42457143 +3487.987013,42.1875,20.88914286 +3487.987013,56.25,26.36342858 +3487.987013,70.3125,31.848 +3487.987013,84.375,37.34228573 +3487.987013,98.4375,42.84628573 +3487.987013,112.5,48.36 +3487.987013,126.5625,53.88342858 +3487.987013,140.625,59.41714285 +3487.987013,154.6875,64.96 +3487.987013,168.75,70.51428573 +3487.987013,182.8125,76.07428573 +3487.987013,196.875,81.65142858 +3487.987013,210.9375,87.22857143 +3487.987013,225,92.82285715 +3487.987013,239.0625,98.42285715 +3487.987013,253.125,104.0342857 +3487.987013,267.1875,109.6571429 +3487.987013,281.25,115.2914286 +3487.987013,295.3125,120.9314286 +3487.987013,309.375,126.5828572 +3487.987013,323.4375,132.2457143 +3487.987013,337.5,137.9142857 +3487.987013,351.5625,143.5942857 +3487.987013,365.625,149.2857143 +3487.987013,379.6875,154.9828572 +3487.987013,393.75,160.6914286 +3487.987013,407.8125,166.4114286 +3487.987013,421.875,172.1428572 +3487.987013,435.9375,177.88 +3487.987013,450,183.6285714 +3720.487013,-450,-170.7885714 +3720.487013,-435.9375,-165.4457143 +3720.487013,-421.875,-160.0971429 +3720.487013,-407.8125,-154.7371429 +3720.487013,-393.75,-149.3657143 +3720.487013,-379.6875,-143.9885714 +3720.487013,-365.625,-138.5942857 +3720.487013,-351.5625,-133.2 +3720.487013,-337.5,-127.7885714 +3720.487013,-323.4375,-122.3714286 +3720.487013,-309.375,-116.9428572 +3720.487013,-295.3125,-111.5085714 +3720.487013,-281.25,-106.0571429 +3720.487013,-267.1875,-100.6 +3720.487013,-253.125,-95.13714285 +3720.487013,-239.0625,-89.65714285 +3720.487013,-225,-84.17142858 +3720.487013,-210.9375,-78.68 +3720.487013,-196.875,-73.17714285 +3720.487013,-182.8125,-67.66285715 +3720.487013,-168.75,-62.13714285 +3720.487013,-154.6875,-56.60285715 +3720.487013,-140.625,-51.05942858 +3720.487013,-126.5625,-45.50685715 +3720.487013,-112.5,-39.94457143 +3720.487013,-98.4375,-34.37257143 +3720.487013,-84.375,-28.79085715 +3720.487013,-70.3125,-23.19942857 +3720.487013,-56.25,-17.59885714 +3720.487013,-42.1875,-11.98857143 +3720.487013,-28.125,-6.368571428 +3720.487013,-14.0625,-0.7388 +3720.487013,0,5.036628573 +3720.487013,14.0625,10.84285714 +3720.487013,28.125,16.65885714 +3720.487013,42.1875,22.48457143 +3720.487013,56.25,28.32057143 +3720.487013,70.3125,34.16571428 +3720.487013,84.375,40.02114285 +3720.487013,98.4375,45.88628573 +3720.487013,112.5,51.76114285 +3720.487013,126.5625,57.64571428 +3720.487013,140.625,63.54285715 +3720.487013,154.6875,69.44571428 +3720.487013,168.75,75.36 +3720.487013,182.8125,81.28 +3720.487013,196.875,87.21714285 +3720.487013,210.9375,93.16 +3720.487013,225,99.11428573 +3720.487013,239.0625,105.0742857 +3720.487013,253.125,111.0514286 +3720.487013,267.1875,117.0342857 +3720.487013,281.25,123.0228572 +3720.487013,295.3125,129.0285714 +3720.487013,309.375,135.04 +3720.487013,323.4375,141.0628572 +3720.487013,337.5,147.0914286 +3720.487013,351.5625,153.1314286 +3720.487013,365.625,159.1828572 +3720.487013,379.6875,165.2457143 +3720.487013,393.75,171.3142857 +3720.487013,407.8125,177.4 +3720.487013,421.875,183.4857143 +3720.487013,435.9375,189.5885714 +3720.487013,450,195.6971429 +3953.084415,-450,-181.5885714 +3953.084415,-435.9375,-175.8914286 +3953.084415,-421.875,-170.1885714 +3953.084415,-407.8125,-164.4742857 +3953.084415,-393.75,-158.7485714 +3953.084415,-379.6875,-153.0171429 +3953.084415,-365.625,-147.2742857 +3953.084415,-351.5625,-141.52 +3953.084415,-337.5,-135.7542857 +3953.084415,-323.4375,-129.9828572 +3953.084415,-309.375,-124.2 +3953.084415,-295.3125,-118.4114286 +3953.084415,-281.25,-112.6114286 +3953.084415,-267.1875,-106.8 +3953.084415,-253.125,-100.9771429 +3953.084415,-239.0625,-95.14857143 +3953.084415,-225,-89.30857143 +3953.084415,-210.9375,-83.46285715 +3953.084415,-196.875,-77.6 +3953.084415,-182.8125,-71.73142858 +3953.084415,-168.75,-65.85714285 +3953.084415,-154.6875,-59.97142858 +3953.084415,-140.625,-54.072 +3953.084415,-126.5625,-48.16514285 +3953.084415,-112.5,-42.24914285 +3953.084415,-98.4375,-36.32285715 +3953.084415,-84.375,-30.38742858 +3953.084415,-70.3125,-24.44228572 +3953.084415,-56.25,-18.48742857 +3953.084415,-42.1875,-12.52342857 +3953.084415,-28.125,-6.549714285 +3953.084415,-14.0625,-0.565897143 +3953.084415,0,5.575714285 +3953.084415,14.0625,11.74285714 +3953.084415,28.125,17.92 +3953.084415,42.1875,24.10742857 +3953.084415,56.25,30.304 +3953.084415,70.3125,36.51028573 +3953.084415,84.375,42.72685715 +3953.084415,98.4375,48.95314285 +3953.084415,112.5,55.18914285 +3953.084415,126.5625,61.43428573 +3953.084415,140.625,67.69142858 +3953.084415,154.6875,73.95428573 +3953.084415,168.75,80.22857143 +3953.084415,182.8125,86.51428573 +3953.084415,196.875,92.81142858 +3953.084415,210.9375,99.11428573 +3953.084415,225,105.4285714 +3953.084415,239.0625,111.7542857 +3953.084415,253.125,118.0857143 +3953.084415,267.1875,124.4285714 +3953.084415,281.25,130.7828572 +3953.084415,295.3125,137.1485714 +3953.084415,309.375,143.52 +3953.084415,323.4375,149.9028572 +3953.084415,337.5,156.2971429 +3953.084415,351.5625,162.6971429 +3953.084415,365.625,169.1142857 +3953.084415,379.6875,175.5314286 +3953.084415,393.75,181.9657143 +3953.084415,407.8125,188.4057143 +3953.084415,421.875,194.8571429 +3953.084415,435.9375,201.32 +3953.084415,450,207.7942857 +4185.584415,-450,-192.36 +4185.584415,-435.9375,-186.3142857 +4185.584415,-421.875,-180.2514286 +4185.584415,-407.8125,-174.1828572 +4185.584415,-393.75,-168.1085714 +4185.584415,-379.6875,-162.0171429 +4185.584415,-365.625,-155.92 +4185.584415,-351.5625,-149.8171429 +4185.584415,-337.5,-143.6971429 +4185.584415,-323.4375,-137.5714286 +4185.584415,-309.375,-131.4342857 +4185.584415,-295.3125,-125.2914286 +4185.584415,-281.25,-119.1371429 +4185.584415,-267.1875,-112.9714286 +4185.584415,-253.125,-106.8 +4185.584415,-239.0625,-100.6114286 +4185.584415,-225,-94.42285715 +4185.584415,-210.9375,-88.21714285 +4185.584415,-196.875,-82.00571428 +4185.584415,-182.8125,-75.78285715 +4185.584415,-168.75,-69.54857143 +4185.584415,-154.6875,-63.30857143 +4185.584415,-140.625,-57.05828573 +4185.584415,-126.5625,-50.79771428 +4185.584415,-112.5,-44.52742858 +4185.584415,-98.4375,-38.24742858 +4185.584415,-84.375,-31.95828573 +4185.584415,-70.3125,-25.65942858 +4185.584415,-56.25,-19.35028572 +4185.584415,-42.1875,-13.032 +4185.584415,-28.125,-6.704571428 +4185.584415,-14.0625,-0.366965715 +4185.584415,0,6.141142858 +4185.584415,14.0625,12.66971429 +4185.584415,28.125,19.208 +4185.584415,42.1875,25.756 +4185.584415,56.25,32.31371428 +4185.584415,70.3125,38.88171428 +4185.584415,84.375,45.45885715 +4185.584415,98.4375,52.04628573 +4185.584415,112.5,58.64571428 +4185.584415,126.5625,65.25142858 +4185.584415,140.625,71.86857143 +4185.584415,154.6875,78.49142858 +4185.584415,168.75,85.13142858 +4185.584415,182.8125,91.77714285 +4185.584415,196.875,98.42857143 +4185.584415,210.9375,105.0971429 +4185.584415,225,111.7714286 +4185.584415,239.0625,118.4571429 +4185.584415,253.125,125.1542857 +4185.584415,267.1875,131.8571429 +4185.584415,281.25,138.5714286 +4185.584415,295.3125,145.2971429 +4185.584415,309.375,152.0285714 +4185.584415,323.4375,158.7771429 +4185.584415,337.5,165.5257143 +4185.584415,351.5625,172.2914286 +4185.584415,365.625,179.0628572 +4185.584415,379.6875,185.8457143 +4185.584415,393.75,192.64 +4185.584415,407.8125,199.4457143 +4185.584415,421.875,206.2571429 +4185.584415,435.9375,213.08 +4185.584415,450,219.9142857 +4418.084415,-450,-203.1085714 +4418.084415,-435.9375,-196.7028572 +4418.084415,-421.875,-190.2914286 +4418.084415,-407.8125,-183.8685714 +4418.084415,-393.75,-177.44 +4418.084415,-379.6875,-170.9942857 +4418.084415,-365.625,-164.5428572 +4418.084415,-351.5625,-158.0857143 +4418.084415,-337.5,-151.6114286 +4418.084415,-323.4375,-145.1314286 +4418.084415,-309.375,-138.6457143 +4418.084415,-295.3125,-132.1428572 +4418.084415,-281.25,-125.6342857 +4418.084415,-267.1875,-119.1142857 +4418.084415,-253.125,-112.5885714 +4418.084415,-239.0625,-106.0514286 +4418.084415,-225,-99.50285715 +4418.084415,-210.9375,-92.94857143 +4418.084415,-196.875,-86.38285715 +4418.084415,-182.8125,-79.80571428 +4418.084415,-168.75,-73.21714285 +4418.084415,-154.6875,-66.62285715 +4418.084415,-140.625,-60.01714285 +4418.084415,-126.5625,-53.404 +4418.084415,-112.5,-46.78 +4418.084415,-98.4375,-40.14628573 +4418.084415,-84.375,-33.50285715 +4418.084415,-70.3125,-26.84971428 +4418.084415,-56.25,-20.18742857 +4418.084415,-42.1875,-13.51542857 +4418.084415,-28.125,-6.833142858 +4418.084415,-14.0625,-0.142028573 +4418.084415,0,6.733714285 +4418.084415,14.0625,13.62285714 +4418.084415,28.125,20.52228572 +4418.084415,42.1875,27.43142858 +4418.084415,56.25,34.35028573 +4418.084415,70.3125,41.27885715 +4418.084415,84.375,48.21771428 +4418.084415,98.4375,55.16571428 +4418.084415,112.5,62.12571428 +4418.084415,126.5625,69.09142858 +4418.084415,140.625,76.06857143 +4418.084415,154.6875,83.05714285 +4418.084415,168.75,90.05142858 +4418.084415,182.8125,97.06285715 +4418.084415,196.875,104.08 +4418.084415,210.9375,111.1028572 +4418.084415,225,118.1428572 +4418.084415,239.0625,125.1885714 +4418.084415,253.125,132.2457143 +4418.084415,267.1875,139.3085714 +4418.084415,281.25,146.3828572 +4418.084415,295.3125,153.4685714 +4418.084415,309.375,160.5657143 +4418.084415,323.4375,167.6685714 +4418.084415,337.5,174.7885714 +4418.084415,351.5625,181.9085714 +4418.084415,365.625,189.0457143 +4418.084415,379.6875,196.1885714 +4418.084415,393.75,203.3428572 +4418.084415,407.8125,210.5085714 +4418.084415,421.875,217.68 +4418.084415,435.9375,224.8628572 +4418.084415,450,232.0571429 +4650.584415,-450,-213.8285714 +4650.584415,-435.9375,-207.0742857 +4650.584415,-421.875,-200.3028572 +4650.584415,-407.8125,-193.5257143 +4650.584415,-393.75,-186.7428572 +4650.584415,-379.6875,-179.9485714 +4650.584415,-365.625,-173.1428572 +4650.584415,-351.5625,-166.3257143 +4650.584415,-337.5,-159.5028572 +4650.584415,-323.4375,-152.6685714 +4650.584415,-309.375,-145.8228572 +4650.584415,-295.3125,-138.9714286 +4650.584415,-281.25,-132.1085714 +4650.584415,-267.1875,-125.2342857 +4650.584415,-253.125,-118.3542857 +4650.584415,-239.0625,-111.4628572 +4650.584415,-225,-104.56 +4650.584415,-210.9375,-97.65142858 +4650.584415,-196.875,-90.73142858 +4650.584415,-182.8125,-83.8 +4650.584415,-168.75,-76.86285715 +4650.584415,-154.6875,-69.91428573 +4650.584415,-140.625,-62.95428573 +4650.584415,-126.5625,-55.98457143 +4650.584415,-112.5,-49.00628573 +4650.584415,-98.4375,-42.01885715 +4650.584415,-84.375,-35.02171428 +4650.584415,-70.3125,-28.01485715 +4650.584415,-56.25,-20.99828572 +4650.584415,-42.1875,-13.972 +4650.584415,-28.125,-6.936571428 +4650.584415,-14.0625,0.111422858 +4650.584415,0,7.352 +4650.584415,14.0625,14.60285714 +4650.584415,28.125,21.86285714 +4650.584415,42.1875,29.13314285 +4650.584415,56.25,36.41314285 +4650.584415,70.3125,43.70285715 +4650.584415,84.375,51.00285715 +4650.584415,98.4375,58.31428573 +4650.584415,112.5,65.62857143 +4650.584415,126.5625,72.96 +4650.584415,140.625,80.29714285 +4650.584415,154.6875,87.64571428 +4650.584415,168.75,95.00571428 +4650.584415,182.8125,102.3714286 +4650.584415,196.875,109.7542857 +4650.584415,210.9375,117.1371429 +4650.584415,225,124.5371429 +4650.584415,239.0625,131.9428572 +4650.584415,253.125,139.36 +4650.584415,267.1875,146.7885714 +4650.584415,281.25,154.2228572 +4650.584415,295.3125,161.6742857 +4650.584415,309.375,169.1257143 +4650.584415,323.4375,176.5942857 +4650.584415,337.5,184.0685714 +4650.584415,351.5625,191.5542857 +4650.584415,365.625,199.0514286 +4650.584415,379.6875,206.56 +4650.584415,393.75,214.0742857 +4650.584415,407.8125,221.6 +4650.584415,421.875,229.1314286 +4650.584415,435.9375,236.6742857 +4650.584415,450,244.2285714 +4864.577923,-450,-223.6685714 +4864.577923,-435.9375,-216.5885714 +4864.577923,-421.875,-209.4914286 +4864.577923,-407.8125,-202.3942857 +4864.577923,-393.75,-195.28 +4864.577923,-379.6875,-188.16 +4864.577923,-365.625,-181.0285714 +4864.577923,-351.5625,-173.8857143 +4864.577923,-337.5,-166.7371429 +4864.577923,-323.4375,-159.5771429 +4864.577923,-309.375,-152.4114286 +4864.577923,-295.3125,-145.2285714 +4864.577923,-281.25,-138.04 +4864.577923,-267.1875,-130.8457143 +4864.577923,-253.125,-123.6342857 +4864.577923,-239.0625,-116.4171429 +4864.577923,-225,-109.1942857 +4864.577923,-210.9375,-101.9542857 +4864.577923,-196.875,-94.70857143 +4864.577923,-182.8125,-87.45142858 +4864.577923,-168.75,-80.18857143 +4864.577923,-154.6875,-72.91428573 +4864.577923,-140.625,-65.62857143 +4864.577923,-126.5625,-58.33714285 +4864.577923,-112.5,-51.032 +4864.577923,-98.4375,-43.71885715 +4864.577923,-84.375,-36.396 +4864.577923,-70.3125,-29.06342858 +4864.577923,-56.25,-21.72114286 +4864.577923,-42.1875,-14.36971429 +4864.577923,-28.125,-7.008 +4864.577923,-14.0625,0.371868573 +4864.577923,0,7.944571428 +4864.577923,14.0625,15.52742857 +4864.577923,28.125,23.12 +4864.577923,42.1875,30.72228573 +4864.577923,56.25,38.33485715 +4864.577923,70.3125,45.95657143 +4864.577923,84.375,53.58857143 +4864.577923,98.4375,61.22857143 +4864.577923,112.5,68.88 +4864.577923,126.5625,76.54285715 +4864.577923,140.625,84.21142858 +4864.577923,154.6875,91.89142858 +4864.577923,168.75,99.58285715 +4864.577923,182.8125,107.2857143 +4864.577923,196.875,114.9942857 +4864.577923,210.9375,122.7142857 +4864.577923,225,130.4457143 +4864.577923,239.0625,138.1828572 +4864.577923,253.125,145.9314286 +4864.577923,267.1875,153.6914286 +4864.577923,281.25,161.4628572 +4864.577923,295.3125,169.24 +4864.577923,309.375,177.0285714 +4864.577923,323.4375,184.8285714 +4864.577923,337.5,192.6342857 +4864.577923,351.5625,200.4514286 +4864.577923,365.625,208.28 +4864.577923,379.6875,216.12 +4864.577923,393.75,223.9657143 +4864.577923,407.8125,231.8228572 +4864.577923,421.875,239.6914286 +4864.577923,435.9375,247.5657143 +4864.577923,450,255.4514285 diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericICE_220kW_7.7l.veng b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericICE_220kW_7.7l.veng new file mode 100644 index 0000000000000000000000000000000000000000..cca85ad4876bc8468233a5ea42647d710327f230 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/GenericICE_220kW_7.7l.veng @@ -0,0 +1,35 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2021-01-18T16:15:30.8161241Z", + "AppVersion": "3", + "FileVersion": 5 + }, + "Body": { + "SavedInDeclMode": false, + "ModelName": "Generic 220kW 7.7l", + "Displacement": "7700", + "IdlingSpeed": 600.0, + "Inertia": 3.789, + "Fuels": [ + { + "WHTC-Urban": 0.0, + "WHTC-Rural": 0.0, + "WHTC-Motorway": 0.0, + "WHTC-Engineering": 1.02, + "ColdHotBalancingFactor": 0.0, + "CFRegPer": 0.0, + "FuelMap": "Engine map_7.7l.vmap", + "FuelType": "DieselCI" + } + ], + "RatedPower": 220000.0, + "RatedSpeed": 2200.0, + "MaxTorque": 1295.0, + "FullLoadCurve": "Full-load curve 220kW.vfld", + "WHRType": [ + "None" + ], + "WHRCorrectionFactors": {} + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/HybridStrategyParams.vhctl b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/HybridStrategyParams.vhctl new file mode 100644 index 0000000000000000000000000000000000000000..7a28da155f1ad000e68fff3b98cc3c652d01a6c6 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/HybridStrategyParams.vhctl @@ -0,0 +1,18 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2020-08-04T07:11:24.0318977Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "EquivalenceFactorDischarge": 2.5, + "EquivalenceFactorCharge": 1.5, + "MinSoC": 10.0, + "MaxSoC": 90.0, + "TargetSoC": 50.0, + "MinICEOnTime": 3, + "AuxBufferTime": 5, + "AuxBufferChgTime": 3 + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/MaxCurrent.vimax b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/MaxCurrent.vimax new file mode 100644 index 0000000000000000000000000000000000000000..d802d5d760daf410bca1fa2b9aa42c231188f3ad --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/MaxCurrent.vimax @@ -0,0 +1,4 @@ +SOC, I_charge, I_discharge +0, 375, 375 +50, 375, 375 +100, 375, 375 \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/ShiftParameters.vtcu b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/ShiftParameters.vtcu new file mode 100644 index 0000000000000000000000000000000000000000..623d9125b82cd7ca4c1760b3938de57a76ae8ea1 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/ShiftParameters.vtcu @@ -0,0 +1,13 @@ +{ + "Header": { + "CreatedBy": " ()", + "Date": "2016-10-13T15:52:04.0766564Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + + "GearRangeUp": 1, + "GearRangeDown": 1 + } +} \ No newline at end of file diff --git a/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/TC Parallel.vtcc b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/TC Parallel.vtcc new file mode 100644 index 0000000000000000000000000000000000000000..4860d3fa3c67c70269e124cd0116d1bdb6973d49 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/Citybus_P1-APT-P-220kW-7.7l/TC Parallel.vtcc @@ -0,0 +1,13 @@ +Speed Ratio, Torque Ratio,MP1000 +0,5.434,436.7877021 +0.06993007,3.984933333,400.388727 +0.13986014,3.384710267,363.9897518 +0.20979021,2.92414291,327.5907766 +0.27972028,2.535866667,291.1918014 +0.34965035,2.193788429,254.7928262 +0.41958042,1.884526063,218.3938511 +0.48951049,1.600129967,167.4352858 +0.559440559,1.335420534,116.4767206 +0.629370629,1.0868,65.51815532 +0.699300699,0.9295,0 +3.496503497,1.287,-1747.150809 diff --git a/Generic Vehicles/Engineering Mode/GenericVehicle_Group2_P2_EM/SuperCap.vreess b/Generic Vehicles/Engineering Mode/GenericVehicle_Group2_P2_EM/SuperCap.vreess new file mode 100644 index 0000000000000000000000000000000000000000..fc743eb9cec56a3225dc8741fd63725646cffd52 --- /dev/null +++ b/Generic Vehicles/Engineering Mode/GenericVehicle_Group2_P2_EM/SuperCap.vreess @@ -0,0 +1,19 @@ +{ + "Header": { + "CreatedBy": "", + "Date": "2020-12-02T13:46:10.3043598Z", + "AppVersion": "3", + "FileVersion": 1 + }, + "Body": { + "SavedInDeclMode": false, + "REESSType": "SuperCap", + "Model": "SuperCap", + "Capacity": 161.9, + "InternalResistance": 0.00754, + "U_min": 39.87, + "U_max": 57.0, + "I_maxCharge": 100.0, + "I_maxDischarge": 100.0 + } +} \ No newline at end of file diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings index 72ab10a7f7948db3ba37bf3ac00b510794cd2a0f..5838ac913881193f6c1c9fcfdc398240c300bd8a 100644 --- a/VECTO.sln.DotSettings +++ b/VECTO.sln.DotSettings @@ -2,6 +2,7 @@ <s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/WrapIntoRegions/@EntryValue">True</s:Boolean> <s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=HashingTool_002EAnnotations/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/CodeInspection/CodeAnnotations/NamespacesWithAnnotations/=VECTO3GUI2020_002EAnnotations/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Evdri/@EntryIndexedValue">True</s:Boolean> <s:String x:Key="/Default/CodeStyle/CodeCleanup/SilentCleanupProfile/@EntryValue">Default: Reformat Code</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CommonFormatter/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_TABS_ONLY</s:String> <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGNMENT_TAB_FILL_STYLE/@EntryValue">USE_TABS_ONLY</s:String> @@ -124,4 +125,6 @@ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsWrapperSettingsUpgrader/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EVB_002ECodeStyle_002ESettingsUpgrade_002EVBSpaceAfterUnaryMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EXml_002ECodeStyle_002EFormatSettingsUpgrade_002EXmlMoveToCommonFormatterSettingsUpgrade/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/Housekeeping/ExcludedProjects/ProjectMasksToIgnore/=_002A_002A_002Evdri/@EntryIndexedValue">False</s:Boolean> + <s:Boolean x:Key="/Default/Housekeeping/ExcludedProjects/ProjectMasksToIgnore/=_002A_002Evdri/@EntryIndexedValue">False</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=RESS/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index 8d3fa15223a3f2ec11023195f1810c103e7066ae..22992910309679fb26be528ee45ef286d74f417a 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -620,7 +620,6 @@ Public Class DummyVehicle Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle Public Property VIN As String Implements IVehicleDeclarationInputData.VIN - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration @@ -653,7 +652,8 @@ Public Class DummyVehicle Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1 Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2 - Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology + Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck Public ReadOnly Property NumberPassengersStandingLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengersStandingLowerDeck diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index 3f24eecc22bf20f68c58b07050e50057c4a612d0..317fdaaa86da67c5f78b3aa552b9f9c4cf419bab 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -802,7 +802,6 @@ Public Class MockEngineeringVehicle Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle Public Property VIN As String Implements IVehicleDeclarationInputData.VIN - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration @@ -839,6 +838,7 @@ Public Class MockEngineeringVehicle Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1 Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2 + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck diff --git a/VECTO/Input Files/MockVehicleInputData.vb b/VECTO/Input Files/MockVehicleInputData.vb index 0ff5fff18194700bcd5118c54631dc26b275fbf9..3b484d4c0486e8f5305b31385f504c001eba1d8c 100644 --- a/VECTO/Input Files/MockVehicleInputData.vb +++ b/VECTO/Input Files/MockVehicleInputData.vb @@ -19,7 +19,6 @@ Public Class MockVehicleInputData Public Property Identifier As String Implements IVehicleDeclarationInputData.Identifier Public Property ExemptedVehicle As Boolean Implements IVehicleDeclarationInputData.ExemptedVehicle Public Property VIN As String Implements IVehicleDeclarationInputData.VIN - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory Public Property LegislativeClass As LegislativeClass? Implements IVehicleDeclarationInputData.LegislativeClass Public Property VehicleCategory As VehicleCategory Implements IVehicleDeclarationInputData.VehicleCategory Public Property AxleConfiguration As AxleConfiguration Implements IVehicleDeclarationInputData.AxleConfiguration @@ -41,6 +40,7 @@ Public Class MockVehicleInputData Public Property DualFuelVehicle As Boolean Implements IVehicleDeclarationInputData.DualFuelVehicle Public Property MaxNetPower1 As Watt Implements IVehicleDeclarationInputData.MaxNetPower1 Public Property MaxNetPower2 As Watt Implements IVehicleDeclarationInputData.MaxNetPower2 + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index f501510b56920b19d4761bddbed45fb77e03295d..c2259f8da151268f021b380cb99c489f3220deb8 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -380,8 +380,6 @@ Public Class Vehicle End Get End Property - Public ReadOnly Property LegislativeCategory As String Implements IVehicleDeclarationInputData.LegislativeCategory - Public ReadOnly Property LegislativeClass As LegislativeClass? Implements IVehicleEngineeringInputData.LegislativeClass Get Return legClass @@ -856,7 +854,9 @@ end Property End Get End Property - Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass + Public ReadOnly Property ExemptedTechnology As String Implements IVehicleDeclarationInputData.ExemptedTechnology + + Public ReadOnly Property RegisteredClass As RegistrationClass? Implements IVehicleDeclarationInputData.RegisteredClass Public ReadOnly Property NumberPassengerSeatsUpperDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck Public ReadOnly Property NumberPassengerSeatsLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck Public ReadOnly Property NumberPassengersStandingLowerDeck As Integer? Implements IVehicleDeclarationInputData.NumberPassengersStandingLowerDeck diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs index 86dbd231f7e3dd335f799c6bd9ede924e857af08..9ffa326e265b11f4f4582c5fde25b96b7ff33559 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs @@ -179,8 +179,6 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle set => throw new NotImplementedException(); } - public virtual string LegislativeCategory => throw new NotImplementedException(); - LegislativeClass? IVehicleDeclarationInputData.LegislativeClass { get; } public virtual LegislativeClass LegislativeClass @@ -282,6 +280,8 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle set => throw new NotImplementedException(); } + public string ExemptedTechnology { get; } + RegistrationClass? IVehicleDeclarationInputData.RegisteredClass { get; } int? IVehicleDeclarationInputData.NumberPassengerSeatsUpperDeck { get; } int? IVehicleDeclarationInputData.NumberPassengerSeatsLowerDeck { get; } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs index 1b821df28ef3a6015b17cd255ed236c03cfb330d..e97eaac8d4bac0ae4fe2eb76ff92b34fd311a4c2 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs @@ -695,6 +695,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation #endregion; + public string ExemptedTechnology { get; } + public RegistrationClass? RegisteredClass { get => _registeredClass; @@ -747,10 +749,6 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation #region not implemented - public string LegislativeCategory - { - get => throw new NotImplementedException(); - } public IGearboxDeclarationInputData GearboxInputData => throw new NotImplementedException(); public ITorqueConverterDeclarationInputData TorqueConverterInputData => throw new NotImplementedException(); diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index d9ba954aa970cf40a7b8f64bfd36b1b6552bb622..e643884fb20226ba65ef2781423d63e64baaa711 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -99,8 +99,6 @@ namespace TUGraz.VectoCommon.InputData string VIN { get; } - string LegislativeCategory { get; } - LegislativeClass? LegislativeClass { get; } /// <summary> @@ -169,6 +167,9 @@ namespace TUGraz.VectoCommon.InputData Watt MaxNetPower2 { get; } + string ExemptedTechnology { get; } + + RegistrationClass? RegisteredClass { get; } int? NumberPassengerSeatsUpperDeck { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index aa0e5815a8293e7ae0035bcc8ef301f66b85d5f7..b3521a3aba47e528532f0d1968704257c5a26800 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -233,11 +233,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return VehicleData.VIN; } } - public string LegislativeCategory - { - get { return null; } - } - public LegislativeClass? LegislativeClass { get { return VehicleData.LegislativeClass; } @@ -562,6 +557,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return null; } } + public string ExemptedTechnology + { + get { return null; } + } + public RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index cd231ad39666df421a3091944a5d571dde2b6170..6b4e9b9e9843af3c253d0ddfe9b813524c42b5c2 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -259,11 +259,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return Constants.NOT_AVailABLE; } } - public string LegislativeCategory - { - get { return null; } - } - public virtual LegislativeClass? LegislativeClass { get { @@ -647,6 +642,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return null; } } + public string ExemptedTechnology + { + get { return null; } + } + public virtual RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index 15de858e1ec65989b13ce5c405642bf4f7f3f2d2..def9197ec79295101c7942784ca18c22ce0b990a 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -120,14 +120,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return GetString(XMLNames.Vehicle_VIN); } } - public virtual string LegislativeCategory - { - get { return null; } - } - public virtual LegislativeClass? LegislativeClass { - get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); } + get { return GetString("LegislativeCategory").ParseEnum<LegislativeClass>(); } } public virtual VehicleCategory VehicleCategory @@ -150,7 +145,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual Kilogram GrossVehicleMassRating { - get { return GetDouble(XMLNames.Vehicle_GrossVehicleMass).SI<Kilogram>(); } + get { return GetDouble(XMLNames.Vehicle_TPMLM).SI<Kilogram>(); } } public virtual IList<ITorqueLimitInputData> TorqueLimits @@ -278,6 +273,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + public virtual string ExemptedTechnology + { + get { return null; } + } + public virtual RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown; } @@ -741,6 +741,123 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #endregion } + public class XMLDeclarationExemptedPrimaryBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20 + { + public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; + + public new const string XSD_TYPE = "ExemptedPrimaryHeavyBusType"; + + public new static readonly string QUALIFIED_XSD_TYPE = + XMLHelper.CombineNamespace(NAMESPACE_URI.NamespaceName, XSD_TYPE); + + public XMLDeclarationExemptedPrimaryBusDataProviderV26( + IXMLDeclarationJobInputData jobData, XmlNode xmlNode, string sourceFile) : base(jobData, xmlNode, sourceFile) + { + SourceType = DataSourceType.XMLEmbedded; + + } + + #region Overrides of AbstractXMLResource + + protected override XNamespace SchemaNamespace { + get { return NAMESPACE_URI; } + } + + protected override DataSourceType SourceType { get; } + + #endregion + + public override VehicleCategory VehicleCategory { + get { return VehicleCategory.HeavyBusPrimaryVehicle; } + } + + public override bool ExemptedVehicle { + get { return true; } + } + + + public override IList<ITorqueLimitInputData> TorqueLimits { + get { return new List<ITorqueLimitInputData>(); } + } + + public override PerSecond EngineIdleSpeed { + get { return null; } + } + + public override bool VocationalVehicle { + get { return false; } + } + + public override bool SleeperCab { + get { return false; } + } + + public override TankSystem? TankSystem { + get { return null; } + } + + public override IAdvancedDriverAssistantSystemDeclarationInputData ADAS { + get { return null; } + } + + public override bool ZeroEmissionVehicle { + get { return XmlConvert.ToBoolean(GetString(XMLNames.Vehicle_ZeroEmissionVehicle)); } + } + + public override bool HybridElectricHDV { + get { return false; } + } + + public override bool DualFuelVehicle { + get { return false; } + } + + public override Watt MaxNetPower1 { + get { return GetDouble("SumNetPower").SI<Watt>(); } + } + + public override Watt MaxNetPower2 { + get { return null; } + } + + public override string ExemptedTechnology + { + get { return GetString("Technology"); } + } + + public override IVehicleComponentsDeclaration Components { + get { return null; } + } + + public override XmlElement ComponentNode { + get { return null; } + } + + public override XmlElement PTONode { + get { return null; } + } + + public override XmlElement ADASNode { + get { return null; } + } + + public override AngledriveType AngledriveType { + get { return AngledriveType.None; } + } + + public override RetarderType RetarderType { + get { return RetarderType.None; } + } + + public override double RetarderRatio { + get { return 0; } + } + + public override IPTOTransmissionInputData PTOTransmissionInputData { + get { return null; } + } + } + public class XMLDeclarationMediumLorryVehicleDataProviderV26 : XMLDeclarationVehicleDataProviderV21 { public new static readonly XNamespace NAMESPACE_URI = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V26; @@ -804,6 +921,28 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider protected override DataSourceType SourceType { get; } #endregion + + public override XmlElement ComponentNode { + get { return null; } + } + + + public override XmlElement ADASNode { + get { return null; } + } + + public override AngledriveType AngledriveType { + get { return AngledriveType.None; } + } + + public override RetarderType RetarderType { + get { return RetarderType.None; } + } + + public override double RetarderRatio { + get { return 0; } + } + } public class XMLDeclarationCompletedBusDataProviderV26 : XMLDeclarationVehicleDataProviderV20 @@ -970,9 +1109,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return GetString(XMLNames.Vehicle_VIN); } } - public string LegislativeCategory + public LegislativeClass? LegislativeClass { - get { return GetString(XMLNames.Bus_LegislativeCategory); } + get { return GetString(XMLNames.Bus_LegislativeCategory)?.ParseEnum<LegislativeClass>(); } } public VehicleCategory VehicleCategory @@ -1070,7 +1209,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public string Identifier { get; } public bool ExemptedVehicle { get; } - public LegislativeClass? LegislativeClass { get; } public int? NumberPassengerSeatsUpperDeck { get; } public int? NumberPassengerSeatsLowerDeck { get; } public int? NumberPassengersStandingLowerDeck { get; } @@ -1090,6 +1228,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public bool DualFuelVehicle { get; } public Watt MaxNetPower1 { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } public RegistrationClass? RegisteredClass { get; } public VehicleCode? VehicleCode { get; } public bool? LowEntry { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs index d2a946a414c4cdb9f521cf0bb662b866d5d027a3..ab7b6e506f1d8f1e309a108317c953ea8937663d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/NinjectModules/XMLDeclarationInputDataV26InjectModule.cs @@ -18,6 +18,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules { Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationCompletedBusDataProviderV26>() .Named(XMLDeclarationCompletedBusDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLDeclarationVehicleData>().To<XMLDeclarationExemptedPrimaryBusDataProviderV26>() + .Named(XMLDeclarationExemptedPrimaryBusDataProviderV26.QUALIFIED_XSD_TYPE); + Bind<IXMLVehicleComponentsDeclaration>().To<XMLDeclarationPrimaryBusComponentsDataProviderV26>() .Named(XMLDeclarationPrimaryBusComponentsDataProviderV26.QUALIFIED_XSD_TYPE); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs index aca0d0a9e7f3ca929114984d2e52b9c9455e3bf2..3fe5644d8b92b3fe9f706c581bd1c7ea2e52c5f9 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs @@ -13,6 +13,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.OutputData.XML; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl @@ -468,11 +469,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl get { return _manufacturingStages.First().Vehicle.VIN; } } - public string LegislativeCategory - { - get { return null; } - } - public VehicleDeclarationType VehicleDeclarationType { get { return _manufacturingStages.First().Vehicle.VehicleDeclarationType; } @@ -633,6 +629,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl public bool DualFuelVehicle { get; } public Watt MaxNetPower1 { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } + public CubicMeter CargoVolume { get; } public bool Articulated { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs index 0856567215232a6ed62cf5190ef0a5f62c8a6a18..e2fc9ac0e0478d775e7f9389a50c21822aa1bbde 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs @@ -108,11 +108,6 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider get { return GetString(XMLNames.Vehicle_VIN); } } - public string LegislativeCategory - { - get { return null; } - } - public virtual LegislativeClass? LegislativeClass { get { return GetString(XMLNames.Vehicle_LegislativeClass).ParseEnum<LegislativeClass>(); } @@ -206,6 +201,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider get { return null; } } + public string ExemptedTechnology { get; } + public virtual RegistrationClass? RegisteredClass { get { return RegistrationClass.unknown;} } public virtual int? NumberPassengerSeatsUpperDeck { get { return 0; } } public virtual int? NumberPassengerSeatsLowerDeck { get { return 0; } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index f7b09265fd25ac83a610590545459d9b1481b567..bac7250881df05bb3fd71949d9bf92a0034e5901 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -34,11 +34,41 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Segment segment, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, bool allowVocational) { var retVal = base.CreateVehicleData(data, segment, mission, loading, allowVocational); + if (data.ExemptedVehicle) { + return retVal; + } retVal.CurbMass = mission.CurbMass; retVal.GrossVehicleMass = 40000.SI<Kilogram>(); return retVal; } + protected override VehicleData CreateExemptedVehicleData(IVehicleDeclarationInputData data) + { + var exempted = new VehicleData { + InputData = data, + SavedInDeclarationMode = data.SavedInDeclarationMode, + Manufacturer = data.Manufacturer, + ModelName = data.Model, + Date = data.Date, + //CertificationNumber = data.CertificationNumber, + DigestValueInput = data.DigestValue != null ? data.DigestValue.DigestValue : "", + VehicleCategory = data.VehicleCategory, + //CurbMass = data.CurbMassChassis, + GrossVehicleMass = data.GrossVehicleMassRating, + AirDensity = Physics.AirDensity, + }; + exempted.VIN = data.VIN; + exempted.ManufacturerAddress = data.ManufacturerAddress; + exempted.LegislativeClass = data.LegislativeClass; + exempted.ZeroEmissionVehicle = data.ZeroEmissionVehicle; + exempted.HybridElectricHDV = data.HybridElectricHDV; + exempted.DualFuelVehicle = data.DualFuelVehicle; + exempted.MaxNetPower1 = data.MaxNetPower1; + exempted.MaxNetPower2 = data.MaxNetPower2; + exempted.AxleConfiguration = data.AxleConfiguration; + return exempted; + } + public override PTOData CreatePTOTransmissionData(IPTOTransmissionInputData pto) { return null; diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs index 20791a0cba50fc7257b62fd843df3e1009534885..7a1382a8113bc322fb78da49fa896a68f0ac4d69 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeHeavyLorryVectoRunDataFactory.cs @@ -191,6 +191,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl return simulationRunData; } - + } } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs index fa3fcf02e873933a62d93bf7e6da95d303f654ed..31de49f7708027e99af34e5faae4e896eb30c63f 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModePrimaryBusVectoRunDataFactory.cs @@ -32,10 +32,19 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected override IEnumerable<VectoRunData> GetNextRun() { if (InputDataProvider.JobInputData.Vehicle.VehicleCategory == VehicleCategory.HeavyBusPrimaryVehicle) { - return VectoRunDataHeavyBusPrimary(); + if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) { + yield return CreateVectoRunData(InputDataProvider.JobInputData.Vehicle, 0, null, + new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>()); + } else { + foreach (var vectoRunData in VectoRunDataHeavyBusPrimary()) { + yield return vectoRunData; + } + } } - return new List<VectoRunData>(); + foreach (var entry in new List<VectoRunData>()) { + yield return entry; + } } protected override Segment GetSegment(IVehicleDeclarationInputData vehicle) @@ -80,6 +89,19 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected override VectoRunData CreateVectoRunData( IVehicleDeclarationInputData vehicle, int modeIdx, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading) { + if (InputDataProvider.JobInputData.Vehicle.ExemptedVehicle) { + return new VectoRunData() { + Exempted = true, + Report = Report, + Mission = new Mission() { MissionType = MissionType.ExemptedMission }, + VehicleData = DataAdapter.CreateVehicleData(InputDataProvider.JobInputData.Vehicle, new Segment(), + null, + new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(LoadingType.ReferenceLoad, + Tuple.Create<Kilogram, double?>(0.SI<Kilogram>(), null)), _allowVocational), + InputDataHash = InputDataProvider.XMLHash + }; + } + var engine = vehicle.Components.EngineInputData; var engineModes = engine.EngineModes; var engineMode = engineModes[modeIdx]; diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..dc7e48050a1b6f7231f33dc1115e4db6f7f820ef --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/IXMLCustomerReport.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile +{ + public interface IXMLCustomerReport + { + void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); + XDocument Report { get; } + void WriteResult(XMLDeclarationReport.ResultEntry resultValue); + void GenerateReport(XElement resultSignature); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs similarity index 95% rename from VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs index 7f3224de4d1eb39ec16adee55e5b8e057a41157f..5cb19313b4e8233fd8f9d162bf6bf4aa8e9c5b36 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReport.cs @@ -1,296 +1,319 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Linq; -using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Resources; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.Models.Declaration; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Models.Simulation.Impl; -using TUGraz.VectoCore.Models.SimulationComponent.Data; -using TUGraz.VectoCore.Utils; -using TUGraz.VectoHashing; - -namespace TUGraz.VectoCore.OutputData.XML -{ - public class XMLCustomerReport - { - public const string CURRENT_SCHEMA_VERSION = "0.8"; - - protected readonly XElement VehiclePart; - - protected XElement InputDataIntegrity; - - protected readonly XElement Results; - - protected readonly XNamespace rootNS = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput"); - protected readonly XNamespace tns = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v" + CURRENT_SCHEMA_VERSION); - protected readonly XNamespace di = XNamespace.Get("http://www.w3.org/2000/09/xmldsig#"); - protected readonly XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - - protected bool _allSuccess = true; - - protected KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>(); - - protected Kilogram _weightedPayload = 0.SI<Kilogram>(); - protected double _passengerCount = 0; - - - public XMLCustomerReport() - { - - VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); - Results = new XElement(tns + XMLNames.Report_Results); - } - - public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - var exempted = modelData.Exempted; - VehiclePart.Add( - new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), - new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), - new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), - new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), - new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()), - new XElement( - tns + XMLNames.Vehicle_GrossVehicleMass, - XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)), - new XElement( - tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), - new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), - new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV), - new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle) - ); - - if (exempted) { - VehiclePart.Add(new XAttribute(xsi + "type", "ExemptedVehicleType"), - ExemptedData(modelData)); - Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); - } else { - VehiclePart.Add( - new XAttribute(xsi + "type", "VehicleType"), - new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), - new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), - new XElement(tns + XMLNames.Vehicle_VocationalVehicle, modelData.VehicleData.VocationalVehicle), - new XElement(tns + XMLNames.Vehicle_SleeperCab, modelData.VehicleData.SleeperCab), - GetADAS(modelData.VehicleData.ADAS), - ComponentData(modelData, fuelModes) - ); - } - InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature, - modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash)); - } - - private object[] ExemptedData(VectoRunData modelData) - { - return new object[] { - modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower1, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)) : null, - modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower2, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower2, XMLNames.Unit_W)) : null - }; - } - - protected XElement GetADAS(VehicleData.ADASData adasData) - { - return new XElement(tns + XMLNames.Vehicle_ADAS, - new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()), - new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()), - new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None) - ); - } - - protected virtual XElement[] ComponentData(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - return new[] { - new XElement( - tns + XMLNames.Report_Vehicle_EngineRatedPower, - XMLHelper.ValueAsUnit(modelData.EngineData.RatedPowerDeclared, XMLNames.Unit_kW)), - new XElement( - tns + XMLNames.Report_Vehicle_EngineDisplacement, - XMLHelper.ValueAsUnit(modelData.EngineData.Displacement, XMLNames.Unit_ltr, 1)), - new XElement( - tns + XMLNames.Report_Vehicle_FuelTypes, - fuelModes.SelectMany(x => x.Select(f => f.FuelType.ToXMLFormat())).Distinct() - .Select(x => new XElement(tns + XMLNames.Engine_FuelType, x)) - ), - new XElement( - tns + XMLNames.Report_Vehicle_TransmissionCertificationMethod, - modelData.GearboxData.CertificationMethod.ToXMLFormat()), - new XElement(tns + XMLNames.Gearbox_TransmissionType, modelData.GearboxData.Type.ToXMLFormat()), - new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, modelData.GearboxData.Gears.Count), - new XElement(tns + XMLNames.Report_Vehicle_Retarder, modelData.Retarder.Type.IsDedicatedComponent()), - new XElement(tns + XMLNames.Report_Vehicle_AxleRatio, modelData.AxleGearData.AxleGear.Ratio.ToXMLFormat(3)), - new XElement( - tns + XMLNames.Report_Vehicle_AverageRRC, modelData.VehicleData.AverageRollingResistanceTruck.ToXMLFormat(4)), - - //new XElement( - // tns + XMLNames.Report_Vehicle_AverageRRCLabel, - // DeclarationData.Wheels.TyreClass.Lookup(modelData.VehicleData.AverageRollingResistanceTruck)) - }.Concat( - modelData.VehicleData.AxleData.Where(x => x.AxleType != AxleType.Trailer).Select( - (x, idx) => new XElement(tns + "FuelEfficiencyLabelMotorVehicleTyre", - new XAttribute("axleNbr", idx+1), - x.FuelEfficiencyClass))).ToArray(); - - } - - - - public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) - { - //foreach (var resultEntry in entry.ResultEntry) { - _allSuccess &= resultEntry.Status == VectoRun.Status.Success; - if (resultEntry.Status == VectoRun.Status.Success) { - _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; - _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; - _passengerCount += (resultEntry.PassengerCount ?? 0) * resultEntry.WeightingFactor; - } - Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); - } - - private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry) - { - var content = new object[] { }; - switch (resultEntry.Status) { - case VectoRun.Status.Pending: - case VectoRun.Status.Running: - content = null; // should not happen! - break; - case VectoRun.Status.Canceled: - case VectoRun.Status.Aborted: - content = new object[] { - new XElement(tns + "Error", resultEntry.Error) - }; - break; - default: - throw new ArgumentOutOfRangeException(); - } - - return new XElement(tns + XMLNames.Report_Result_Result, - new XAttribute(XMLNames.Report_Result_Status_Attr, "error"), - new XAttribute(xsi + "type", "ResultErrorType"), - new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), - content); - } - - private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) - { - return new XElement( - tns + XMLNames.Report_Result_Result, - new XAttribute(XMLNames.Report_Result_Status_Attr, "success"), - new XAttribute(xsi + "type", "ResultSuccessType"), - new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()), - new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass, - XMLHelper.ValueAsUnit(result.TotalVehicleMass, XMLNames.Unit_kg)), - new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)), - result.PassengerCount.HasValue && result.PassengerCount.Value > 0 - ? new XElement(tns + "PassengerCount", result.PassengerCount.Value.ToMinSignificantDigits(3, 1)) - : null, - new XElement(tns + XMLNames.Report_Result_FuelMode, - result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single), - new XElement(tns + XMLNames.Report_Results_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), - XMLDeclarationReport.GetResults(result, tns, false).Cast<object>().ToArray() - ); - } - - protected XElement GetApplicationInfo() - { - var versionNumber = VectoSimulationCore.VersionNumber; -#if CERTIFICATION_RELEASE - // add nothing to version number -#else - versionNumber += " !!NOT FOR CERTIFICATION!!"; -#endif - return new XElement(tns + XMLNames.Report_ApplicationInfo_ApplicationInformation, - new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, versionNumber), - new XElement(tns + XMLNames.Report_ApplicationInfo_Date, - XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc))); - } - - public virtual void GenerateReport(XElement resultSignature) - { - - var retVal = new XDocument(); - var results = new XElement(Results); - results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); - var summary = _allSuccess && _weightedPayload > 0 - ? new XElement(tns + XMLNames.Report_Results_Summary, - new XElement(tns + XMLNames.Report_SpecificCO2Emissions, - new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_gCO2Pertkm), - (_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1) - ), - new XElement(tns + XMLNames.Report_AveragePayload, - new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t), - _weightedPayload.ConvertToTon().ToXMLFormat(3) - ), - _passengerCount > 0 ? new XElement(tns + "AveragePAssengerCount", _passengerCount.ToMinSignificantDigits(2)) : null - ) - : null; - results.Add(summary); - var vehicle = new XElement(VehiclePart); - vehicle.Add(InputDataIntegrity); - retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); - retVal.Add(new XElement(rootNS + XMLNames.VectoCustomerReport, - //new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), - new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), - new XAttribute(XNamespace.Xmlns + "tns", rootNS), - new XAttribute(XNamespace.Xmlns + "di", di), - new XAttribute(xsi + "schemaLocation", - string.Format("{0} {1}DEV/VectoOutputCustomer.xsd", rootNS, AbstractXMLWriter.SchemaLocationBaseUrl)), - new XElement(rootNS + XMLNames.Report_DataWrap, - new XAttribute(xsi + "type", "VectoOutputDataType"), - vehicle, - new XElement(tns + XMLNames.Report_ResultData_Signature, resultSignature), - results, - GetApplicationInfo()) - ) - ); - var stream = new MemoryStream(); - var writer = new StreamWriter(stream); - writer.Write(retVal); - writer.Flush(); - stream.Seek(0, SeekOrigin.Begin); - var h = VectoHash.Load(stream); - Report = h.AddHash(); - } - - public XDocument Report { get; protected set; } - } -} +/* +* This file is part of VECTO. +* +* Copyright © 2012-2019 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using TUGraz.IVT.VectoXML.Writer; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Utils; +using TUGraz.VectoHashing; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile +{ + public class XMLCustomerReport : IXMLCustomerReport + { + public const string CURRENT_SCHEMA_VERSION = "0.8"; + + protected readonly XElement VehiclePart; + + protected XElement InputDataIntegrity; + + protected readonly XElement Results; + + protected readonly XNamespace rootNS = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput"); + protected readonly XNamespace tns = XNamespace.Get("urn:tugraz:ivt:VectoAPI:CustomerOutput:v" + CURRENT_SCHEMA_VERSION); + protected readonly XNamespace di = XNamespace.Get("http://www.w3.org/2000/09/xmldsig#"); + protected readonly XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); + + protected bool _allSuccess = true; + + protected KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>(); + + protected Kilogram _weightedPayload = 0.SI<Kilogram>(); + protected double _passengerCount = 0; + + + public XMLCustomerReport() + { + + VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); + Results = new XElement(tns + XMLNames.Report_Results); + } + + public virtual void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + var exempted = modelData.Exempted; + VehiclePart.Add( + new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), + new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement(tns + XMLNames.Vehicle_LegislativeClass, modelData.VehicleData.LegislativeClass.ToXMLFormat()), + new XElement( + tns + XMLNames.Vehicle_GrossVehicleMass, + XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)), + new XElement( + tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), + new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV), + new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle) + ); + + if (exempted) { + VehiclePart.Add(new XAttribute(xsi + "type", "ExemptedVehicleType"), + ExemptedData(modelData)); + Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); + } else { + VehiclePart.Add( + new XAttribute(xsi + "type", "VehicleType"), + new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), + new XElement(tns + XMLNames.Vehicle_VocationalVehicle, modelData.VehicleData.VocationalVehicle), + new XElement(tns + XMLNames.Vehicle_SleeperCab, modelData.VehicleData.SleeperCab), + GetADAS(modelData.VehicleData.ADAS), + ComponentData(modelData, fuelModes) + ); + } + InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature, + modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash)); + } + + private object[] ExemptedData(VectoRunData modelData) + { + return new object[] { + modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower1, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)) : null, + modelData.VehicleData.HybridElectricHDV ? new XElement(tns + XMLNames.Vehicle_MaxNetPower2, XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower2, XMLNames.Unit_W)) : null + }; + } + + protected XElement GetADAS(VehicleData.ADASData adasData) + { + return new XElement(tns + XMLNames.Vehicle_ADAS, + new XElement(tns + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, adasData.EcoRoll.WithoutEngineStop()), + new XElement(tns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, adasData.EcoRoll.WithEngineStop()), + new XElement(tns + XMLNames.Vehicle_ADAS_PCC, adasData.PredictiveCruiseControl != PredictiveCruiseControlType.None) + ); + } + + protected virtual XElement[] ComponentData(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + return new[] { + new XElement( + tns + XMLNames.Report_Vehicle_EngineRatedPower, + XMLHelper.ValueAsUnit(modelData.EngineData.RatedPowerDeclared, XMLNames.Unit_kW)), + new XElement( + tns + XMLNames.Report_Vehicle_EngineDisplacement, + XMLHelper.ValueAsUnit(modelData.EngineData.Displacement, XMLNames.Unit_ltr, 1)), + new XElement( + tns + XMLNames.Report_Vehicle_FuelTypes, + fuelModes.SelectMany(x => x.Select(f => f.FuelType.ToXMLFormat())).Distinct() + .Select(x => new XElement(tns + XMLNames.Engine_FuelType, x)) + ), + new XElement( + tns + XMLNames.Report_Vehicle_TransmissionCertificationMethod, + modelData.GearboxData.CertificationMethod.ToXMLFormat()), + new XElement(tns + XMLNames.Gearbox_TransmissionType, modelData.GearboxData.Type.ToXMLFormat()), + new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, modelData.GearboxData.Gears.Count), + new XElement(tns + XMLNames.Report_Vehicle_Retarder, modelData.Retarder.Type.IsDedicatedComponent()), + new XElement(tns + XMLNames.Report_Vehicle_AxleRatio, modelData.AxleGearData.AxleGear.Ratio.ToXMLFormat(3)), + new XElement( + tns + XMLNames.Report_Vehicle_AverageRRC, modelData.VehicleData.AverageRollingResistanceTruck.ToXMLFormat(4)), + + //new XElement( + // tns + XMLNames.Report_Vehicle_AverageRRCLabel, + // DeclarationData.Wheels.TyreClass.Lookup(modelData.VehicleData.AverageRollingResistanceTruck)) + }.Concat( + modelData.VehicleData.AxleData.Where(x => x.AxleType != AxleType.Trailer).Select( + (x, idx) => new XElement(tns + "FuelEfficiencyLabelMotorVehicleTyre", + new XAttribute("axleNbr", idx+1), + x.FuelEfficiencyClass))).ToArray(); + + } + + + + public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + { + //foreach (var resultEntry in entry.ResultEntry) { + _allSuccess &= resultEntry.Status == VectoRun.Status.Success; + if (resultEntry.Status == VectoRun.Status.Success) { + _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; + _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; + _passengerCount += (resultEntry.PassengerCount ?? 0) * resultEntry.WeightingFactor; + } + Results.Add(resultEntry.Status == VectoRun.Status.Success ? GetSuccessResult(resultEntry) : GetErrorResult(resultEntry)); + } + + private XElement GetErrorResult(XMLDeclarationReport.ResultEntry resultEntry) + { + var content = new object[] { }; + switch (resultEntry.Status) { + case VectoRun.Status.Pending: + case VectoRun.Status.Running: + content = null; // should not happen! + break; + case VectoRun.Status.Canceled: + case VectoRun.Status.Aborted: + content = new object[] { + new XElement(tns + "Error", resultEntry.Error) + }; + break; + default: + throw new ArgumentOutOfRangeException(); + } + + return new XElement(tns + XMLNames.Report_Result_Result, + new XAttribute(XMLNames.Report_Result_Status_Attr, "error"), + new XAttribute(xsi + "type", "ResultErrorType"), + new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), + content); + } + + private XElement GetSuccessResult(XMLDeclarationReport.ResultEntry result) + { + return new XElement( + tns + XMLNames.Report_Result_Result, + new XAttribute(XMLNames.Report_Result_Status_Attr, "success"), + new XAttribute(xsi + "type", "ResultSuccessType"), + new XElement(tns + XMLNames.Report_Result_Mission, result.Mission.ToXMLFormat()), + new XElement(tns + XMLNames.Report_ResultEntry_TotalVehicleMass, + XMLHelper.ValueAsUnit(result.TotalVehicleMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)), + result.PassengerCount.HasValue && result.PassengerCount.Value > 0 + ? new XElement(tns + "PassengerCount", result.PassengerCount.Value.ToMinSignificantDigits(3, 1)) + : null, + new XElement(tns + XMLNames.Report_Result_FuelMode, + result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single), + new XElement(tns + XMLNames.Report_Results_AverageSpeed, XMLHelper.ValueAsUnit(result.AverageSpeed, XMLNames.Unit_kmph, 1)), + XMLDeclarationReport.GetResults(result, tns, false).Cast<object>().ToArray() + ); + } + + protected XElement GetApplicationInfo() + { + var versionNumber = VectoSimulationCore.VersionNumber; +#if CERTIFICATION_RELEASE + // add nothing to version number +#else + versionNumber += " !!NOT FOR CERTIFICATION!!"; +#endif + return new XElement(tns + XMLNames.Report_ApplicationInfo_ApplicationInformation, + new XElement(tns + XMLNames.Report_ApplicationInfo_SimulationToolVersion, versionNumber), + new XElement(tns + XMLNames.Report_ApplicationInfo_Date, + XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc))); + } + + public virtual void GenerateReport(XElement resultSignature) + { + + var retVal = new XDocument(); + var results = new XElement(Results); + results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); + var summary = _allSuccess && _weightedPayload > 0 + ? new XElement(tns + XMLNames.Report_Results_Summary, + new XElement(tns + XMLNames.Report_SpecificCO2Emissions, + new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_gCO2Pertkm), + (_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1) + ), + new XElement(tns + XMLNames.Report_AveragePayload, + new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t), + _weightedPayload.ConvertToTon().ToXMLFormat(3) + ), + _passengerCount > 0 ? new XElement(tns + "AveragePAssengerCount", _passengerCount.ToMinSignificantDigits(2)) : null + ) + : null; + results.Add(summary); + var vehicle = new XElement(VehiclePart); + vehicle.Add(InputDataIntegrity); + retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); + retVal.Add(new XElement(rootNS + XMLNames.VectoCustomerReport, + //new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), + new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), + new XAttribute("xmlns", tns), + new XAttribute(XNamespace.Xmlns + "tns", rootNS), + new XAttribute(XNamespace.Xmlns + "di", di), + new XAttribute(xsi + "schemaLocation", + string.Format("{0} {1}DEV/VectoOutputCustomer.xsd", rootNS, AbstractXMLWriter.SchemaLocationBaseUrl)), + new XElement(rootNS + XMLNames.Report_DataWrap, + new XAttribute(xsi + "type", "VectoOutputDataType"), + vehicle, + new XElement(tns + XMLNames.Report_ResultData_Signature, resultSignature), + results, + GetApplicationInfo()) + ) + ); + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(retVal); + writer.Flush(); + stream.Seek(0, SeekOrigin.Begin); + var h = VectoHash.Load(stream); + Report = h.AddHash(); + } + + public XDocument Report { get; protected set; } + } + + public class XMLCustomerReportExemptedPrimaryBus : IXMLCustomerReport + { + #region Implementation of IXMLCustomerReport + + public void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + // MQ 2021-06-14 TODO: fill with meat + } + + public XDocument Report { get; } + public void WriteResult(XMLDeclarationReport.ResultEntry resultValue) + { + // MQ 2021-06-14 TODO: fill with meat + } + + public void GenerateReport(XElement resultSignature) + { + // MQ 2021-06-14 TODO: fill with meat + } + + #endregion + } +} diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs similarity index 98% rename from VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs index c53f43e48c30f4c0edda372a091e6565e2d88afd..56d42396c3b5628f6107076c810dce734116b727 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReportCompletedBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/CustomerInformationFile/XMLCustomerReportCompletedBus.cs @@ -4,7 +4,6 @@ using System.IO; using System.Linq; using System.Xml.Linq; using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; @@ -12,10 +11,11 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; -namespace TUGraz.VectoCore.OutputData.XML { +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile { public class XMLCustomerReportCompletedBus : XMLCustomerReport { private int _resultCount = 0; diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs similarity index 97% rename from VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs index 920521811ccf9fe1ca1e7da7da910299abe3c67e..7663933f52c73121d047fffb3717456d59108425 100644 --- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/AbstractXMLManufacturerReport.cs @@ -18,16 +18,8 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport { - public interface IXMLManufacturerReport - { - void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); - XDocument Report { get; } - void WriteResult(XMLDeclarationReport.ResultEntry resultValue); - void GenerateReport(); - } - public abstract class AbstractXMLManufacturerReport : IXMLManufacturerReport { protected XElement VehiclePart; @@ -38,10 +30,12 @@ namespace TUGraz.VectoCore.OutputData.XML protected XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8"; + protected XNamespace vns; protected XNamespace di = "http://www.w3.org/2000/09/xmldsig#"; protected AbstractXMLManufacturerReport() { + vns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8"; VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); Results = new XElement(tns + XMLNames.Report_Results); } @@ -67,16 +61,17 @@ namespace TUGraz.VectoCore.OutputData.XML //new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), + new XAttribute("xmlns", vns), new XAttribute(XNamespace.Xmlns + "di", di), - //new XAttribute(XNamespace.Xmlns + "tns", tns), - new XAttribute(XNamespace.Xmlns + "mrf", mrf), + new XAttribute(XNamespace.Xmlns + "tns", tns), + new XAttribute(XNamespace.Xmlns + "vns", vns), + new XAttribute(XNamespace.Xmlns + "mrf", mrf), new XAttribute( xsi + "schemaLocation", string.Format("{0} {1}/DEV/VectoOutputManufacturer.xsd", mrf, AbstractXMLWriter.SchemaLocationBaseUrl)), new XElement( mrf + XMLNames.Report_DataWrap, - new XAttribute(xsi + "type", "VectoOutputDataType"), + new XAttribute(xsi + "type", "tns:VectoOutputDataType"), vehicle, results, GetApplicationInfo()) @@ -229,7 +224,7 @@ namespace TUGraz.VectoCore.OutputData.XML protected virtual XElement GetInputDataSignature(VectoRunData modelData) { return new XElement( - tns + XMLNames.Report_Input_Signature, + vns + XMLNames.Report_Input_Signature, modelData.InputDataHash == null ? CreateDummySig() : new XElement(modelData.InputDataHash)); } diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..7bc13048203c9b0ff9e7fdfcb92f36b5b4a96ef3 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/IXMLManufacturerReport.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport +{ + public interface IXMLManufacturerReport + { + void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); + XDocument Report { get; } + void WriteResult(XMLDeclarationReport.ResultEntry resultValue); + void GenerateReport(); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs similarity index 99% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs index cb166c50c44758fb2ae47b81f43b93ef549b4a77..e4bf8ccf77b7ba003da38c2cde71de7d4752d87f 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportCompletedBus.cs @@ -14,7 +14,7 @@ using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.OutputData.XML { +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport { public class XMLManufacturerReportCompletedBus : AbstractXMLManufacturerReport { diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs similarity index 96% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs index 510bae3f30ee10216dfb476141a512a27cdbaac8..1fe9400d30dc7511c957873c074bad77509cf8f8 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportExemptedTruck.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExemptedTruck.cs @@ -6,7 +6,8 @@ using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.OutputData.XML { +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport +{ public class XMLManufacturerReportExemptedTruck : AbstractXMLManufacturerReport { public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs new file mode 100644 index 0000000000000000000000000000000000000000..0a656e0ccb5aa32e35a6da4ec96096efea66852c --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportExeptedPrimaryBus.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport +{ + public class XMLManufacturerReportExeptedPrimaryBus : AbstractXMLManufacturerReport + { + + public XMLManufacturerReportExeptedPrimaryBus() + { + vns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1"; + } + + public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + VehiclePart.Add( + new XAttribute(xsi + "type", "VehicleExemptedPrimaryBusType"), + new XElement(vns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(vns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), + new XElement(vns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(vns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement(vns + "LegislativeCategory", modelData.VehicleData.LegislativeClass.ToXMLFormat()), + new XElement(vns + XMLNames.Bus_ChassisConfiguration, "Bus"), + new XElement(vns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(vns + XMLNames.Vehicle_Articulated, modelData.VehicleData.InputData.Articulated), + new XElement( + vns + XMLNames.Vehicle_TPMLM, + XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_kg, 1)), + //new XElement( + // tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), + new XElement(vns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), + new XElement(vns + "SumNetPower", XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)), + new XElement(vns + "Technology", modelData.VehicleData.InputData.ExemptedTechnology) + + ); + Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); + + InputDataIntegrity = GetInputDataSignature(modelData); + } + + protected override XElement VehicleComponents(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + return null; + } + + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs similarity index 97% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs index f1b62a28de21ca8620866c8eff7e573c2160194a..3b8604cb9a67c21b1ab5831b6223a1ba366b55e0 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportPrimaryBus.cs @@ -5,6 +5,7 @@ using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.OutputData.XML { diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs similarity index 98% rename from VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs index d14364d2369ebc7cc0e80d85e1e480ed1c8981b2..e65b7972036240c0cb70f326d8f2520c4e9ac991 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/ManufacturerReport/XMLManufacturerReportTruck.cs @@ -38,7 +38,7 @@ using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport { public class XMLManufacturerReportTruck : AbstractXMLManufacturerReport { diff --git a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VTPReport/XMLVTPReport.cs similarity index 100% rename from VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VTPReport/XMLVTPReport.cs diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..8111f0f90327ad62916024eb1a0593f6d8343f86 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLMultistageReport.cs @@ -0,0 +1,12 @@ +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile +{ + public interface IXMLMultistageReport + { + void Initialize(VectoRunData modelData); + XDocument Report { get; } + void GenerateReport(); + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..f28672258a5e8043e12bedfe8736f3b5c85ba629 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/IXMLPrimaryVehicleReport.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile +{ + public interface IXMLPrimaryVehicleReport + { + void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); + void WriteResult(XMLDeclarationReport.ResultEntry result); + void GenerateReport(XElement fullReportHash); + XDocument Report { get; } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs new file mode 100644 index 0000000000000000000000000000000000000000..7857a92f0ad86356aad18f5c8e50bfc8381b162c --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLExemptedPrimaryBusVehicleReport.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Xml.Linq; +using TUGraz.VectoCommon.Hashing; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile +{ + public class XMLExemptedPrimaryBusVehicleReport : XMLPrimaryBusVehicleReport + { + #region Implementation of IXMLPrimaryVehicleReport + + public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + VehiclePart.Add( + new XAttribute(xsi + "type", "VehicleExemptedPrimaryBusType"), + new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), + new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement(tns + "LegislativeCategory", modelData.VehicleData.LegislativeClass.ToXMLFormat()), + new XElement(tns + XMLNames.Bus_ChassisConfiguration, "Bus"), + new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(tns + XMLNames.Vehicle_Articulated, modelData.VehicleData.InputData.Articulated), + new XElement( + tns + XMLNames.Vehicle_TPMLM, + XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_kg, 1)), + //new XElement( + // tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), + new XElement(tns + "SumNetPower", XMLHelper.ValueAsUnit(modelData.VehicleData.MaxNetPower1, XMLNames.Unit_W)), + new XElement(tns + "Technology", modelData.VehicleData.InputData.ExemptedTechnology) + + ); + Results.Add(new XElement(tns + XMLNames.Report_ExemptedVehicle)); + + InputDataIntegrity = new XElement(tns + XMLNames.Report_InputDataSignature, + modelData.InputDataHash == null ? XMLHelper.CreateDummySig(di) : new XElement(modelData.InputDataHash)); + + } + + public override void WriteResult(XMLDeclarationReport.ResultEntry result) + { + // no results for exempted vehicle + } + + + #endregion + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs similarity index 99% rename from VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs index 106ef6b5d02102fa977ed58382f0fc881e618764..f4689b1324c787fa7526d0271e3d2bac3ccd04dc 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLMultistageBusReport.cs @@ -18,16 +18,8 @@ using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; - -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile { - public interface IXMLMultistageReport - { - void Initialize(VectoRunData modelData); - XDocument Report { get; } - void GenerateReport(); - } - public class XMLMultistageBusReport: IXMLMultistageReport { protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"; diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs similarity index 97% rename from VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs rename to VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs index 1f3a72425991957da71fba810e05e09fb421965b..378038f5ebc7d5cf1206ebcfe94cf4e55527b007 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/DeclarationReports/VehicleInformationFile/XMLPrimaryBusVehicleReport.cs @@ -21,9 +21,9 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; -namespace TUGraz.VectoCore.OutputData.XML +namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile { - public class XMLPrimaryVehicleReport + public class XMLPrimaryBusVehicleReport : IXMLPrimaryVehicleReport { protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1"; protected XNamespace di = "http://www.w3.org/2000/09/xmldsig#"; @@ -40,19 +40,19 @@ namespace TUGraz.VectoCore.OutputData.XML protected XElement InputDataIntegrity; protected XElement Results; - private bool _allSuccess = true; + protected bool _allSuccess = true; - public XMLPrimaryVehicleReport() + public XMLPrimaryBusVehicleReport() { VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); Results = new XElement(tns + XMLNames.Report_Results); } - public XDocument Report { get; private set; } + public XDocument Report { get; protected set; } - public void GenerateReport(XElement resultSignature) + public virtual void GenerateReport(XElement resultSignature) { var retVal = new XDocument(); retVal.Add( @@ -73,7 +73,7 @@ namespace TUGraz.VectoCore.OutputData.XML Report = retVal; } - private XElement GeneratePrimaryVehicle(XElement resultSignature) + protected virtual XElement GeneratePrimaryVehicle(XElement resultSignature) { var results = new XElement(Results); results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); @@ -95,7 +95,7 @@ namespace TUGraz.VectoCore.OutputData.XML return primaryVehicle; } - private XElement GetSignatureElement(XElement stage) + protected XElement GetSignatureElement(XElement stage) { var stream = new MemoryStream(); var writer = new StreamWriter(stream); @@ -108,7 +108,7 @@ namespace TUGraz.VectoCore.OutputData.XML (VectoHash.DefaultCanonicalizationMethod, VectoHash.DefaultDigestMethod)); } - private XElement GetApplicationInfo() + protected XElement GetApplicationInfo() { var versionNumber = VectoSimulationCore.VersionNumber; #if CERTIFICATION_RELEASE // add nothing to version number @@ -518,7 +518,7 @@ namespace TUGraz.VectoCore.OutputData.XML }; } - public void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) { _allSuccess &= resultEntry.Status == VectoRun.Status.Success; @@ -594,11 +594,10 @@ namespace TUGraz.VectoCore.OutputData.XML return retVal.Cast<object>().ToArray(); } - - private string GetGUID() + + protected string GetGUID() { return Guid.NewGuid().ToString("n").Substring(0, 20); } } - } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index 8c9264c404579050ee16321ea83fdad749140bbb..5cc169a643ce6acb7c6808e221e0d0a942e76e74 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -46,6 +46,8 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; namespace TUGraz.VectoCore.OutputData.XML { @@ -53,7 +55,7 @@ namespace TUGraz.VectoCore.OutputData.XML { protected IXMLManufacturerReport ManufacturerRpt; - protected XMLCustomerReport CustomerRpt; + protected IXMLCustomerReport CustomerRpt; protected IDictionary<Tuple<MissionType, LoadingType>, double> _weightingFactors; diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs index 918d4055ff4f250e6a92d9c409665bb04dffcd10..22c3b6e80a1e91c72f5e8dff42444b1feedef5d2 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs @@ -7,6 +7,8 @@ using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; namespace TUGraz.VectoCore.OutputData.XML { public class XMLDeclarationReportCompletedVehicle : XMLDeclarationReport diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs index b26cbb222e3baf40aac3ad94d5c32aad7dd04f69..b203ee8c5b9066368ad1ff5429bd4a31eb589ca9 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportMultistageBusVehicle.cs @@ -5,12 +5,13 @@ using System.Text; using System.Threading.Tasks; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; namespace TUGraz.VectoCore.OutputData.XML { public class XMLDeclarationReportMultistageBusVehicle : XMLDeclarationReport { - private readonly XMLMultistageBusReport _multistageBusReport; + private readonly IXMLMultistageReport _multistageBusReport; public XMLDeclarationReportMultistageBusVehicle(IReportWriter writer) : base(writer) diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs index 55b66e65deed1369944482d30ae80a0b61a208f7..276ef4230de386f53001e20d07498e2b1712604a 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle.cs @@ -3,16 +3,18 @@ using System.Collections.Generic; using System.Xml.Linq; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; namespace TUGraz.VectoCore.OutputData.XML { public class XMLDeclarationReportPrimaryVehicle : XMLDeclarationReport { - private XMLPrimaryVehicleReport _primaryReport; + protected IXMLPrimaryVehicleReport PrimaryReport; public XMLDeclarationReportPrimaryVehicle(IReportWriter writer, bool writePIF = false) : base(writer) { - _primaryReport = new XMLPrimaryVehicleReport(); } public override XDocument CustomerReport @@ -22,7 +24,7 @@ namespace TUGraz.VectoCore.OutputData.XML { public override XDocument PrimaryVehicleReport { - get { return _primaryReport?.Report; } + get { return PrimaryReport?.Report; } } @@ -30,14 +32,24 @@ namespace TUGraz.VectoCore.OutputData.XML { protected override void InstantiateReports(VectoRunData modelData) { - ManufacturerRpt = new XMLManufacturerReportPrimaryBus(); - CustomerRpt = new XMLCustomerReport(); + if (modelData.Exempted) { + ManufacturerRpt = new XMLManufacturerReportExeptedPrimaryBus(); + CustomerRpt = new XMLCustomerReportExemptedPrimaryBus(); + PrimaryReport = new XMLExemptedPrimaryBusVehicleReport(); + + } else { + ManufacturerRpt = new XMLManufacturerReportPrimaryBus(); + CustomerRpt = new XMLCustomerReport(); + PrimaryReport = new XMLPrimaryBusVehicleReport(); + } + + } public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) { base.InitializeReport(modelData, fuelModes); - _primaryReport.Initialize(modelData,fuelModes); + PrimaryReport.Initialize(modelData,fuelModes); } @@ -45,7 +57,7 @@ namespace TUGraz.VectoCore.OutputData.XML { protected override void WriteResult(ResultEntry result) { base.WriteResult(result); - _primaryReport.WriteResult(result); + PrimaryReport.WriteResult(result); } protected override void GenerateReports() @@ -53,7 +65,7 @@ namespace TUGraz.VectoCore.OutputData.XML { ManufacturerRpt.GenerateReport(); var fullReportHash = GetSignature(ManufacturerRpt.Report); CustomerRpt.GenerateReport(fullReportHash); - _primaryReport.GenerateReport(fullReportHash); + PrimaryReport.GenerateReport(fullReportHash); } @@ -61,7 +73,7 @@ namespace TUGraz.VectoCore.OutputData.XML { protected override void OutputReports() { Writer.WriteReport(ReportType.DeclarationReportManufacturerXML, ManufacturerRpt.Report); - Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, _primaryReport.Report); + Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, PrimaryReport.Report); } #endregion diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs deleted file mode 100644 index fee1b8a01c79260c085be20696ce3b4a61710c4b..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCore/OutputData/XML/XMLMonitoringReport.cs +++ /dev/null @@ -1,218 +0,0 @@ -/* -* This file is part of VECTO. -* -* Copyright © 2012-2019 European Union -* -* Developed by Graz University of Technology, -* Institute of Internal Combustion Engines and Thermodynamics, -* Institute of Technical Informatics -* -* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved -* by the European Commission - subsequent versions of the EUPL (the "Licence"); -* You may not use VECTO except in compliance with the Licence. -* You may obtain a copy of the Licence at: -* -* https://joinup.ec.europa.eu/community/eupl/og_page/eupl -* -* Unless required by applicable law or agreed to in writing, VECTO -* distributed under the Licence is distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the Licence for the specific language governing permissions and -* limitations under the Licence. -* -* Authors: -* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology -* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology -* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology -* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology -* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology -* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml; -using System.Xml.Linq; -using System.Xml.Schema; -using System.Xml.XPath; -using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCore.Models.Simulation.Data; -using TUGraz.VectoCore.Utils; -using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; - -namespace TUGraz.VectoCore.OutputData.XML -{ - public class XMLMonitoringReport - { - public const string CURRENT_SCHEMA_VERSION = "0.8"; - - public const string NAMESPACE_BASE_URI = "urn:tugraz:ivt:VectoAPI:MonitoringOutput"; - - private readonly IXMLManufacturerReport _manufacturerReport; - - protected XNamespace tns; - protected XNamespace di; - private XElement _additionalFields; - - - public XMLMonitoringReport(IXMLManufacturerReport manufacturerReport) - { - di = "http://www.w3.org/2000/09/xmldsig#"; - tns = NAMESPACE_BASE_URI + ":v" + CURRENT_SCHEMA_VERSION; - _manufacturerReport = manufacturerReport; - } - - public XDocument Report - { - get { - var mrf = _manufacturerReport.Report; - if (mrf == null) { - return null; - } - - var errors = new List<string>(); - var mrfErrors = false; - mrf.Validate(XMLValidator.GetXMLSchema(XmlDocumentType.ManufacturerReport), (o, e) => { - mrfErrors = true; - errors.Add(e.Message); - }, true); - if (mrfErrors) { - LogManager.GetLogger(typeof(XMLMonitoringReport).FullName).Warn("XML Validation of manufacturer record failed! errors: {0}", string.Join(System.Environment.NewLine, errors)); - } - - var mrfType = mrf.Root?.GetSchemaInfo()?.SchemaType?.QualifiedName ?? new XmlQualifiedName("urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:AbstractVectoOutputManufacturerType"); - - var retVal = GenerateReport(); - var prefix = "mrf" + mrfType.Namespace.Split(':').Last(); - - var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - - retVal.Root?.Add( - new XAttribute(XNamespace.Xmlns + prefix, mrfType.Namespace), - new XElement( - tns + "ManufacturerRecord", - new XAttribute(xsi + "type", string.Format("{0}:{1}", prefix, mrfType.Name)), - new XAttribute("xmlns", mrfType.Namespace), - new XAttribute(XNamespace.Xmlns + "m", tns), - GetManufacturerData(mrf)), - _additionalFields - ); - return retVal; - } - } - - private XmlQualifiedName GetXMLType(XElement mrfRoot) - { - var si = mrfRoot.GetSchemaInfo(); - - return si?.SchemaType?.BaseXmlSchemaType.QualifiedName; - } - - - private object[] GetManufacturerData(XDocument mrf) - { - return mrf.Root?.XPathSelectElements("./*").ToArray<object>(); - } - - private XDocument GenerateReport() - { - var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); - var retVal = new XDocument(); - - //retVal.Add( - // new XProcessingInstruction( - // "xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); - retVal.Add( - new XElement( - tns + "VectoMonitoring", - new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), - new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), - new XAttribute("xmlns", tns), - new XAttribute(XNamespace.Xmlns + "di", di), - new XAttribute( - xsi + "schemaLocation", - string.Format( - "{0} {1}VectoMonitoring.xsd", NAMESPACE_BASE_URI, AbstractXMLWriter.SchemaLocationBaseUrl)) - ) - ); - return retVal; - } - - public void Initialize(VectoRunData modelData) - { - var numAxles = modelData.VehicleData.AxleData?.Count(x => x.AxleType != AxleType.Trailer) ?? 0; - var axleData = new object[numAxles]; - for (var i = 0; i < axleData.Length; i++) { - axleData[i] = new XElement(tns + "Axle", - new XAttribute("axleNumber", i+1), - new XElement(tns + "Tyre", GetStandardFields(string.Format("TYRE_{0}", i+1)) - )); - } - - var components = new object[0]; - if (!modelData.Exempted) { - components = new object[] { - new XElement( - tns + "Engine", - new XElement( - tns + "WHTC", - new XElement(tns + "CO2", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)), - new XElement(tns + "FuelConsumption", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)) - ), - new XElement( - tns + "WHSC", - new XElement(tns + "CO2", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)), - new XElement(tns + "FuelConsumption", XMLHelper.ValueAsUnit(double.NaN, "g/kWh", 0)) - ) - ), - new XElement(tns + "Gearbox", GetStandardFields("GEARBOX")), - new XElement(tns + "Axlegear", GetStandardFields("AXLEGEAR")), - new XElement(tns + "AxleWheels", axleData), - }; - } - _additionalFields = new XElement( - tns + "AdditionalData", - new XElement(tns + "Vehicle", - new XElement(tns + "Make", "##VEHICLE_MAKE##")), - components, - new XElement(tns + "AdvancedReducingTechnologies", new XComment(GetReducingTechnologiesExample())), - new XElement(tns + "VectoLicenseNbr", "##VECTO_LICENSE_NUMBER##") - ); - } - - private object[] GetStandardFields(string prefix) - { - return new[] { - new XElement(tns + "Manufacturer", string.Format("##{0}_MANUFACTURER##", prefix)), - new XElement(tns + "ManufacturerAddress", string.Format("##{0}_MANUFACTURERADDRESS##", prefix)), - new XElement(tns + "Make", string.Format("##{0}_MAKE##", prefix)) - }; - } - - private string GetReducingTechnologiesExample() - { - var categories = new[] { - "advanced aerodynamic measures", - "advanced rolling resistance measures", - "advanced drivetrain technologies", - "advanced engine technologies", - "advanced auxiliary technologies", - "additional ADAS technologies", - "advanced powertrain integration and hybridisation", - "other" - }; - var retVal = new object[categories.Length]; - //var tmp = new XElement(tns + "foo"); - for (var i = 0; i < retVal.Length; i++) { - retVal[i] = new XElement("Entry", - new XAttribute("category", categories[i]), - "##TECHNOLOGY_BRAND_NAME##" - ); - } - - return Environment.NewLine + string.Join(Environment.NewLine, retVal.Select(x => x.ToString())) + Environment.NewLine; - } - } -} diff --git a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd index d326dd477692891a60ebeaa3bba600af1ab05c09..6bb0fa8e1e20a64fc317c3642108a725dfca7c93 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoDeclarationDefinitions.2.6_Buses.xsd @@ -640,4 +640,73 @@ <xs:enumeration value="CJ"/> </xs:restriction> </xs:simpleType> + <xs:complexType name="ExemptedPrimaryHeavyBusType"> + <xs:complexContent> + <xs:extension base="v2.0:AbstractVehicleDeclarationType"> + <xs:sequence> + <xs:element name="Manufacturer" type="v1.0:ManufacturerType"/> + <xs:element name="ManufacturerAddress" type="v1.0:ManufacturerAddressType"/> + <xs:element name="Model" type="v1.0:ModelType"> + <xs:annotation> + <xs:documentation>P236</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="v1.0:VINType"> + <xs:annotation> + <xs:documentation>P238</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> + <xs:annotation> + <xs:documentation>P239</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeCategory" type="v2.6:LegislativeClassDeclarationType"> + <xs:annotation> + <xs:documentation>P251 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P036 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Articulated" type="xs:boolean"/> + <xs:element name="TechnicalPermissibleMaximumLadenMass" type="v1.0:VehicleGrossVehicleMassType"> + <xs:annotation> + <xs:documentation>P041 - [kg]</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ZeroEmissionVehicle" type="xs:boolean"/> + <xs:element name="SumNetPower" type="xs:int"> + <xs:annotation> + <xs:documentation>P331 - [W]</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Technology"> + <xs:annotation> + <xs:documentation>P332 - enum</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="HEV Article 9 exempted"/> + <xs:enumeration value="PEV Article 9 exempted"/> + <xs:enumeration value="HV Article 9 exempted"/> + <xs:enumeration value="Fuel cell vehicle"/> + <xs:enumeration value="H2 ICE"/> + <xs:enumeration value="Dual fuel vehicle Article 9 exempted"/> + <xs:enumeration value="In-motion charging Article 9 exempted"/> + <xs:enumeration value="Other technology Article 9 exempted"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> </xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd index c04dc2a75dbde19273614fbe58362afd065ba69f..43f695abf03d9dea35bb2ed2c9c895186263f487 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputDefinitions.xsd @@ -1,8 +1,35 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> <xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:ns1="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8"> - <xs:complexType name="AbstractVTPReportDataType" abstract="true"/> <xs:complexType name="AbstractPrimaryVehicleDataPIFType" abstract="true"/> - <xs:complexType name="AbstractVectoOutputManufacturerDataType" abstract="true"/> <xs:complexType name="AbstractVectoOutputCustomerDataType" abstract="true"/> + <xs:complexType name="AbstractVectoOutputManufacturerDataType" abstract="true"/> + <xs:complexType name="AbstractVTPReportDataType" abstract="true"/> + <xs:simpleType name="DistanceUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="MassUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="kg"/> + <xs:enumeration value="t"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PercentType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="%"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PowerUnitType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="kW"/> + <xs:enumeration value="W"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="SpeedUnitType"> + <xs:restriction base="xs:token"> + <xs:enumeration value="km/h"/> + </xs:restriction> + </xs:simpleType> </xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd index e1bfb206fc04705a054f38d017b2744360ed5a9c..c40ec091c6ba6181f0b65687458adf411c5e3fa3 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> <!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)--> <xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8"> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> @@ -1126,6 +1126,9 @@ </xs:sequence> </xs:complexType> <xs:complexType name="VehiclePrimaryBusType"> + <xs:annotation> + <xs:documentation>No longer neede?</xs:documentation> + </xs:annotation> <xs:complexContent> <xs:extension base="AbstractVehicleType"> <xs:sequence> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd new file mode 100644 index 0000000000000000000000000000000000000000..522aca77427222263adc183917fc0eb7b5fa128b --- /dev/null +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.9.1.xsd @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> +<!--W3C XML Schema generated by XMLSpy vXMLSpy Professional Edition v2016 rel. 2 (x64) (http://www.altova.com)--> +<xs:schema xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vdecdef="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.8"> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" schemaLocation="VectoDeclarationDefinitions.2.0.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" schemaLocation="VectoDeclarationDefinitions.2.1.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" schemaLocation="VectoDeclarationDefinitions.2.6_Buses.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" schemaLocation="VectoOutputManufacturer.0.8.xsd"/> + <xs:complexType name="VehicleExemptedPrimaryBusType"> + <xs:complexContent> + <xs:extension base="v0.8:AbstractVehicleType"> + <xs:sequence> + <xs:element name="Manufacturer" type="vdecdef:ManufacturerType"> + <xs:annotation> + <xs:documentation>P235 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="vdecdef:ManufacturerAddressType"> + <xs:annotation> + <xs:documentation>P252 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Model" type="vdecdef:ModelType"> + <xs:annotation> + <xs:documentation>P236 / I.1.1.2</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="vdecdef:VINType"> + <xs:annotation> + <xs:documentation>P238 / I.1.1.3 / #1</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeCategory"> + <xs:annotation> + <xs:documentation>P251 / I.1.1.4 / #10</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P036 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Articulated" type="xs:boolean"/> + <xs:element name="TechnicalPermissibleMaximumLadenMass"> + <xs:annotation> + <xs:documentation>P041 / I.1.1.6 / #12</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="ZeroEmissionVehicle" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P269 / I.1.1.10</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="SumNetPower"> + <xs:annotation> + <xs:documentation>P277</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Technology"> + <xs:annotation> + <xs:documentation>P332 - enum</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="HEV Article 9 exempted"/> + <xs:enumeration value="PEV Article 9 exempted"/> + <xs:enumeration value="HV Article 9 exempted"/> + <xs:enumeration value="Fuel cell vehicle"/> + <xs:enumeration value="H2 ICE"/> + <xs:enumeration value="Dual fuel vehicle Article 9 exempted"/> + <xs:enumeration value="In-motion charging Article 9 exempted"/> + <xs:enumeration value="Other technology Article 9 exempted"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="InputDataSignature" type="vdecdef:SignatureType"> + <xs:annotation> + <xs:documentation>I.3.1.3</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> +</xs:schema> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd index 1c14db9cfee97f8591d562778b16f074e6af2593..946f5f9d82887fc1f54f77d1239061f21b1cb9ff 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.xsd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Helmut Eichlseder (TU Graz/Inst. f. VKM und THD) --> -<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:mrf0.5="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:mrf0.6="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" xmlns:mrf0.7="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" xmlns:mrf0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mrf="urn:tugraz:ivt:VectoAPI:DeclarationOutput" xmlns:mrf0.5="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:mrf0.6="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" xmlns:mrf0.7="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" xmlns:mrf0.8="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" xmlns:mrf0.9.1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.9.1" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:ns1="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> <!-- This is a convienience file that imports the schema for all supported versions of manufacturer records file and all supported declaration definitions @@ -11,6 +11,7 @@ <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.6" schemaLocation="VectoOutputManufacturer.0.6.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.7" schemaLocation="VectoOutputManufacturer.0.7.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8" schemaLocation="VectoOutputManufacturer.0.8.xsd"/> + <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:DEV:v0.9.1" schemaLocation="VectoOutputManufacturer.0.9.1.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" schemaLocation="VectoDeclarationDefinitions.1.0.xsd"/> <xs:element name="VectoOutput" type="mrf:VectoOutputManufacturerType"> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd index a85e0519d4d3deebc3ca5035b4cddf972fb61ad2..7aee298418b965f64503b298a1b99cf40a4b1dc4 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputMultistage.0.1.xsd @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Franz Josef Kober (Technische Universität Graz) --> +<!-- edited with XMLSpy v2021 (x64) (http://www.altova.com) by Markus Quaritsch (Technische Universität Graz) --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" xmlns:v1.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xmlns:v2.4="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.4" xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:out="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" xmlns:common="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" targetNamespace="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:ParameterDocumentation ParameterDocumentation.xsd"> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationOutputDefinitions" schemaLocation="VectoOutputDefinitions.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions" schemaLocation="VectoDeclarationDefinitions.xsd"/> @@ -9,47 +9,88 @@ <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" schemaLocation="VectoDeclarationDefinitions.2.3_DEV.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" schemaLocation="VectoDeclarationDefinitions.2.6_Buses.xsd"/> <xs:import namespace="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" schemaLocation="VectoDeclarationDefinitions.2.8_Stage.xsd"/> - <xs:complexType name="AbstractAxleWheelsComponentPIFType" abstract="true"/> - <xs:complexType name="AbstractAxleWheelsDataPIFType" abstract="true"/> - <xs:complexType name="AxleWheelsComponentPIFType"> - <xs:complexContent> - <xs:extension base="vif:AbstractAxleWheelsComponentPIFType"> - <xs:sequence> - <xs:element name="Data" type="vif:AbstractAxleWheelsDataPIFType"/> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AxleWheelsDataPIFType"> - <xs:annotation> - <xs:documentation>Axles & Wheels Component</xs:documentation> - </xs:annotation> - <xs:complexContent> - <xs:extension base="vif:AbstractAxleWheelsDataPIFType"> - <xs:sequence> - <xs:element name="Axles"> - <xs:complexType> - <xs:sequence> - <xs:element name="Axle" type="v2.0:AbstractAxleDataDeclarationType" minOccurs="2" maxOccurs="4"/> - </xs:sequence> - </xs:complexType> - </xs:element> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> <xs:element name="VectoOutputMultistage" type="vif:VectoOutputMultistageType"> <xs:annotation> <xs:documentation>Comment describing your root element</xs:documentation> </xs:annotation> </xs:element> <xs:complexType name="AbstractAngledriveDataPIFType" abstract="true"/> + <xs:complexType name="AbstractAuxiliaryDataPIFType" abstract="true"/> <xs:complexType name="AbstractAxlegearDataPIFType" abstract="true"/> + <xs:complexType name="AbstractAxleWheelsComponentPIFType" abstract="true"/> + <xs:complexType name="AbstractAxleWheelsDataPIFType" abstract="true"/> <xs:complexType name="AbstractEngineDataPIFType" abstract="true"/> <xs:complexType name="AbstractManufacturingStageDataType" abstract="true"> <xs:attribute name="id" type="xs:NCName" use="required"/> </xs:complexType> - <xs:complexType name="AbstractAuxiliaryDataPIFType" abstract="true"/> + <xs:complexType name="AbstractPrimaryVehicleType" abstract="true"/> + <xs:complexType name="AbstractTorqueConverterDataPIFType" abstract="true"/> + <xs:complexType name="AbstractTransmissionDataPIFType" abstract="true"/> + <xs:complexType name="AbstractTransmissionGearsPIFType" abstract="true"/> + <xs:complexType name="AbstractVehicleComponentsPIFType" abstract="true"/> + <xs:complexType name="AngledriveDataPIFType"> + <xs:complexContent> + <xs:extension base="vif:AbstractAngledriveDataPIFType"> + <xs:sequence> + <xs:element name="Manufacturer" type="v1.0:ManufacturerType"> + <xs:annotation> + <xs:documentation>P220</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Model" type="v1.0:ModelType"> + <xs:annotation> + <xs:documentation>P221</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationMethod" type="v1.0:AngledriveCertificationOptionType"> + <xs:annotation> + <xs:documentation>P258 - [-]</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="CertificationNumber" type="v1.0:CertificationNumberType" minOccurs="0"> + <xs:annotation> + <xs:documentation>P265</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> + <xs:annotation> + <xs:documentation>P223</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AppVersion" type="v1.0:AppVersionType"> + <xs:annotation> + <xs:documentation>P224</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Ratio"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="AngledrivePIFType"> + <xs:sequence> + <xs:element name="Data" type="vif:AbstractAngledriveDataPIFType"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ApplicationInformationPrimaryVehicleType"> + <xs:sequence> + <xs:element name="SimulationToolVersion" type="xs:string"> + <xs:annotation> + <xs:documentation>II.2.5</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> + <xs:annotation> + <xs:documentation>II.2.5</xs:documentation> + </xs:annotation> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="AuxiliaryComponentPIFType"> + <xs:sequence> + <xs:element name="Data" type="vif:AbstractAuxiliaryDataPIFType"/> + </xs:sequence> + </xs:complexType> <xs:complexType name="AuxiliaryDataPIFType"> <xs:complexContent> <xs:extension base="vif:AbstractAuxiliaryDataPIFType"> @@ -254,72 +295,9 @@ </xs:extension> </xs:complexContent> </xs:complexType> - <xs:complexType name="AbstractPrimaryVehicleType" abstract="true"/> - <xs:complexType name="AbstractTorqueConverterDataPIFType" abstract="true"/> - <xs:complexType name="AbstractTransmissionDataPIFType" abstract="true"/> - <xs:complexType name="AbstractTransmissionGearsPIFType" abstract="true"/> - <xs:complexType name="AbstractVehicleComponentsPIFType" abstract="true"/> - <xs:complexType name="AngledriveDataPIFType"> - <xs:complexContent> - <xs:extension base="vif:AbstractAngledriveDataPIFType"> - <xs:sequence> - <xs:element name="Manufacturer" type="v1.0:ManufacturerType"> - <xs:annotation> - <xs:documentation>P220</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Model" type="v1.0:ModelType"> - <xs:annotation> - <xs:documentation>P221</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="CertificationMethod" type="v1.0:AngledriveCertificationOptionType"> - <xs:annotation> - <xs:documentation>P258 - [-]</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="CertificationNumber" type="v1.0:CertificationNumberType" minOccurs="0"> - <xs:annotation> - <xs:documentation>P265</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> - <xs:annotation> - <xs:documentation>P223</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="AppVersion" type="v1.0:AppVersionType"> - <xs:annotation> - <xs:documentation>P224</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Ratio"/> - </xs:sequence> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="AngledrivePIFType"> - <xs:sequence> - <xs:element name="Data" type="vif:AbstractAngledriveDataPIFType"/> - </xs:sequence> - </xs:complexType> - <xs:complexType name="ApplicationInformationPrimaryVehicleType"> - <xs:sequence> - <xs:element name="SimulationToolVersion" type="xs:string"> - <xs:annotation> - <xs:documentation>II.2.5</xs:documentation> - </xs:annotation> - </xs:element> - <xs:element name="Date" type="v1.0:DateTimeWithTimezone"> - <xs:annotation> - <xs:documentation>II.2.5</xs:documentation> - </xs:annotation> - </xs:element> - </xs:sequence> - </xs:complexType> - <xs:complexType name="AuxiliaryComponentPIFType"> + <xs:complexType name="AxlegearComponentPIFType"> <xs:sequence> - <xs:element name="Data" type="vif:AbstractAuxiliaryDataPIFType"/> + <xs:element name="Data" type="vif:AbstractAxlegearDataPIFType"/> </xs:sequence> </xs:complexType> <xs:complexType name="AxlegearDataPIFType"> @@ -362,10 +340,32 @@ </xs:extension> </xs:complexContent> </xs:complexType> - <xs:complexType name="AxlegearComponentPIFType"> - <xs:sequence> - <xs:element name="Data" type="vif:AbstractAxlegearDataPIFType"/> - </xs:sequence> + <xs:complexType name="AxleWheelsComponentPIFType"> + <xs:complexContent> + <xs:extension base="vif:AbstractAxleWheelsComponentPIFType"> + <xs:sequence> + <xs:element name="Data" type="vif:AbstractAxleWheelsDataPIFType"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="AxleWheelsDataPIFType"> + <xs:annotation> + <xs:documentation>Axles & Wheels Component</xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="vif:AbstractAxleWheelsDataPIFType"> + <xs:sequence> + <xs:element name="Axles"> + <xs:complexType> + <xs:sequence> + <xs:element name="Axle" type="v2.0:AbstractAxleDataDeclarationType" minOccurs="2" maxOccurs="4"/> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> </xs:complexType> <xs:complexType name="BusManufacturingStageDataType"> <xs:complexContent> @@ -551,7 +551,12 @@ <xs:complexType name="ResultsPrimaryVehicleType"> <xs:sequence> <xs:element name="Status"/> - <xs:element name="Result" type="vif:ResultPrimaryVehicleType" maxOccurs="unbounded"/> + <xs:choice> + <xs:element name="Result" type="vif:ResultPrimaryVehicleType" maxOccurs="unbounded"/> + <xs:element name="ExemptedVehicle"> + <xs:complexType/> + </xs:element> + </xs:choice> </xs:sequence> </xs:complexType> <xs:complexType name="SimulationParametersType"> @@ -717,6 +722,12 @@ </xs:extension> </xs:complexContent> </xs:complexType> + <xs:complexType name="VectoOutputMultistageType"> + <xs:sequence> + <xs:element name="PrimaryVehicle" type="vif:PrimaryVehicleType"/> + <xs:element name="ManufacturingStage" type="vif:ManufacturingStageType" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> <xs:complexType name="VehicleComponentsPIFType"> <xs:complexContent> <xs:extension base="vif:AbstractVehicleComponentsPIFType"> @@ -732,6 +743,101 @@ </xs:extension> </xs:complexContent> </xs:complexType> + <xs:complexType name="VehicleExemptedPrimaryBusType"> + <xs:complexContent> + <xs:extension base="vif:AbstractPrimaryVehicleType"> + <xs:sequence> + <xs:element name="Manufacturer" type="v1.0:ManufacturerType"> + <xs:annotation> + <xs:documentation>P235 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="ManufacturerAddress" type="v1.0:ManufacturerAddressType"> + <xs:annotation> + <xs:documentation>P252 / I.1.1.1 / #14</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Model" type="v1.0:ModelType"> + <xs:annotation> + <xs:documentation>P236 / I.1.1.2</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="VIN" type="v1.0:VINType"> + <xs:annotation> + <xs:documentation>P238 / I.1.1.3 / #1</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="LegislativeCategory"> + <xs:annotation> + <xs:documentation>P251 / I.1.1.4 / #10</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:minLength value="1"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + <xs:element name="ChassisConfiguration" type="v2.6:ChassisConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P036 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="AxleConfiguration" type="v2.6:VehicleAxleConfigurationDeclarationType"> + <xs:annotation> + <xs:documentation>P037 - enum</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="Articulated" type="xs:boolean"/> + <xs:element name="TechnicalPermissibleMaximumLadenMass"> + <xs:annotation> + <xs:documentation>P041 / I.1.1.6 / #12</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:MassUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="ZeroEmissionVehicle" type="xs:boolean"> + <xs:annotation> + <xs:documentation>P269 / I.1.1.10</xs:documentation> + </xs:annotation> + </xs:element> + <xs:element name="SumNetPower"> + <xs:annotation> + <xs:documentation>P277</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:double"> + <xs:attribute name="unit" type="out:PowerUnitType" use="required"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element name="Technology"> + <xs:annotation> + <xs:documentation>P332 - enum</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="HEV Article 9 exempted"/> + <xs:enumeration value="PEV Article 9 exempted"/> + <xs:enumeration value="HV Article 9 exempted"/> + <xs:enumeration value="Fuel cell vehicle"/> + <xs:enumeration value="H2 ICE"/> + <xs:enumeration value="Dual fuel vehicle Article 9 exempted"/> + <xs:enumeration value="In-motion charging Article 9 exempted"/> + <xs:enumeration value="Other technology Article 9 exempted"/> + </xs:restriction> + </xs:simpleType> + </xs:element> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> <xs:complexType name="VehiclePIFType"> <xs:complexContent> <xs:extension base="vif:AbstractPrimaryVehicleType"> @@ -805,10 +911,4 @@ <xs:enumeration value="Coach"/> </xs:restriction> </xs:simpleType> - <xs:complexType name="VectoOutputMultistageType"> - <xs:sequence> - <xs:element name="PrimaryVehicle" type="vif:PrimaryVehicleType"/> - <xs:element name="ManufacturingStage" type="vif:ManufacturingStageType" minOccurs="0" maxOccurs="unbounded"/> - </xs:sequence> - </xs:complexType> </xs:schema> diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs index 40bb4f8bfba89009be7ebc34c710d9a85b937017..b7fa13ed4ea1c2734174056deae5059cf148ee01 100644 --- a/VectoCore/VectoCore/Utils/XMLValidator.cs +++ b/VectoCore/VectoCore/Utils/XMLValidator.cs @@ -30,6 +30,7 @@ */ using System; +using System.Collections.Generic; using System.IO; using System.Xml; using System.Xml.Schema; @@ -44,6 +45,7 @@ namespace TUGraz.VectoCore.Utils private readonly Action<bool> _resultAction; private bool _valid; private XmlDocument _doc; + private List<string> _validationErrors = new List<string>(); private XMLValidator(Action<bool> resultaction, Action<XmlSeverityType, ValidationEvent> validationErrorAction) { @@ -70,6 +72,7 @@ namespace TUGraz.VectoCore.Utils public bool ValidateXML(XmlDocumentType docType) { _valid = true; + _validationErrors.Clear(); if (_doc.DocumentElement == null) { throw new Exception("empty XML document"); } @@ -91,11 +94,14 @@ namespace TUGraz.VectoCore.Utils { _resultAction(false); _valid = false; - ValidationError = args?.Message ?? "no schema found"; + _validationErrors.Add(args?.Message ?? "no schema found"); _validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args }); } - public string ValidationError { get; private set; } + public string ValidationError + { + get { return string.Join(Environment.NewLine, _validationErrors); } + } public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt) { diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 63c6b8e93a9af4c6cf0071b1d677cbf6506d34cd..1e978ac418ae35528bd0b40c7dcd5e86096641e9 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -445,8 +445,12 @@ <Compile Include="OutputData\FileIO\FileOutputVIFWriter.cs" /> <Compile Include="OutputData\FileIO\JSONFileWriter.cs" /> <Compile Include="OutputData\ModalDataPostprocessingCorrection.cs" /> - <Compile Include="OutputData\XML\AbstractXMLManufacturerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\IXMLCustomerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\AbstractXMLManufacturerReport.cs" /> <Compile Include="OutputData\XML\DeclarationJobs\XMLCompletedBusWriter.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\IXMLManufacturerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\IXMLMultistageReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\IXMLPrimaryVehicleReport.cs" /> <Compile Include="OutputData\XML\Engineering\Factory\EngineeringWriterFactory.cs" /> <Compile Include="OutputData\XML\Engineering\Factory\IEngineeringWriterInjectFactory.cs" /> <Compile Include="OutputData\XML\Engineering\Interfaces\IXMLEngineeringComponentWriter.cs" /> @@ -481,15 +485,17 @@ <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriter.cs" /> <Compile Include="OutputData\XML\Engineering\XMLEngineeringWriterInjectModule.cs" /> <Compile Include="OutputData\XML\Engineering\XMLWriterMapping.cs" /> - <Compile Include="OutputData\XML\XMLCustomerReportCompletedBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\XMLCustomerReportCompletedBus.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportCompletedVehicle.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportMultistageBusVehicle.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportPrimaryVehicle.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReportCompletedBus.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReportExemptedTruck.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReportPrimaryBus.cs" /> - <Compile Include="OutputData\XML\XMLMultistageBusReport.cs" /> - <Compile Include="OutputData\XML\XMLPrimaryVehicleReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportCompletedBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportExemptedTruck.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportExeptedPrimaryBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportPrimaryBus.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLExemptedPrimaryBusVehicleReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLMultistageBusReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VehicleInformationFile\XMLPrimaryBusVehicleReport.cs" /> <Compile Include="Utils\Ninject\UseFirstArgumentAsInstanceProvider.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\NinjectModules\XMLDeclarationReaderInjectModule.cs" /> <Compile Include="InputData\FileIO\XML\Declaration\DataProvider\XMLDeclarationVehicleDataProvider.cs" /> @@ -578,17 +584,16 @@ <Compile Include="Models\SimulationComponent\Impl\VTPCycle.cs" /> <Compile Include="Models\Simulation\Data\ShiftStrategyParameters.cs" /> <Compile Include="Models\Simulation\Impl\ExemptedRun.cs" /> - <Compile Include="OutputData\XML\XMLMonitoringReport.cs" /> - <Compile Include="OutputData\XML\XMLVTPReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\VTPReport\XMLVTPReport.cs" /> <Compile Include="OutputData\VTPReport.cs" /> <Compile Include="OutputData\ModFilter\ActualModalDataFilter.cs" /> <Compile Include="OutputData\ModFilter\ModalData1HzFilter.cs" /> <Compile Include="OutputData\XML\AbstractXMLWriter.cs" /> <Compile Include="OutputData\XML\AttributeMappings.cs" /> - <Compile Include="OutputData\XML\XMLCustomerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\CustomerInformationFile\XMLCustomerReport.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReport.cs" /> <Compile Include="OutputData\XML\XMLDeclarationWriter.cs" /> - <Compile Include="OutputData\XML\XMLManufacturerReport.cs" /> + <Compile Include="OutputData\XML\DeclarationReports\ManufacturerReport\XMLManufacturerReportTruck.cs" /> <Compile Include="Utils\Interpolate2D.cs" /> <Compile Include="Utils\DataIntegrityHelper.cs" /> <Compile Include="Utils\MeanShiftClustering.cs" /> @@ -968,6 +973,9 @@ <EmbeddedResource Include="Resources\XSD\VectoOutputMultistage.0.1.xsd"> <SubType>Designer</SubType> </EmbeddedResource> + <EmbeddedResource Include="Resources\XSD\VectoOutputManufacturer.0.9.1.xsd"> + <SubType>Designer</SubType> + </EmbeddedResource> <None Include="Utils\VectoVersionCore.tt"> <Generator>TextTemplatingFileGenerator</Generator> <LastGenOutput>VectoVersionCore.cs</LastGenOutput> diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs index 4be58cff7d127124e6c66da1ed51a13de0c68ccc..62a0412fc13bcfe52a349c88f59c3797b3ca5c45 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/ExemptedVehicleTest.cs @@ -58,6 +58,8 @@ namespace TUGraz.VectoCore.Tests.Integration { const string ExemptedVehicle = @"Testdata\Integration\DeclarationMode\ExemptedVehicle\vecto_vehicle-sample_exempted.xml"; + const string ExemptedPrimaryBus = @"TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml"; + protected IXMLInputDataReader xmlInputReader; private IKernel _kernel; @@ -287,5 +289,57 @@ namespace TUGraz.VectoCore.Tests.Integration manager); hybridNode.SetValue(hybrid.ToString().ToLowerInvariant()); } + + [TestCase(ExemptedPrimaryBus, 1)] + public void TestSimulationExemptedPrimaryBusVehicle(string filename, int numRuns) + { + var writer = new FileOutputWriter(filename); + + var primaryReportFile = writer.XMLPrimaryVehicleReportName; + var manufactuerFile = writer.XMLFullReportName; + var monitoringFile = writer.XMLMonitoringReportName; + if (File.Exists(primaryReportFile)) { + File.Delete(primaryReportFile); + } + if (File.Exists(manufactuerFile)) { + File.Delete(manufactuerFile); + } + if (File.Exists(monitoringFile)) { + File.Delete(monitoringFile); + } + + var inputData = xmlInputReader.CreateDeclaration(filename); + + var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) { + WriteModalResults = true, + ActualModalData = true + }; + var jobContainer = new JobContainer(new MockSumWriter()); + + var runs = factory.SimulationRuns().ToList(); + Assert.AreEqual(numRuns, runs.Count); + foreach (var run in runs) { + jobContainer.AddRun(run); + } + //jobContainer.AddRuns(factory); + + jobContainer.Execute(); + jobContainer.WaitFinished(); + var progress = jobContainer.GetProgress(); + Assert.IsTrue(progress.All(r => r.Value.Success), string.Concat<Exception>(progress.Select(r => r.Value.Error))); + + Assert.IsTrue(File.Exists(manufactuerFile)); + Assert.IsTrue(File.Exists(primaryReportFile)); + + var validator = new XMLValidator(XmlReader.Create(manufactuerFile)); + Assert.IsTrue(validator.ValidateXML(XmlDocumentType.ManufacturerReport), validator.ValidationError); + + var val2 = new XMLValidator(XmlReader.Create(primaryReportFile)); + Assert.IsTrue(val2.ValidateXML(XmlDocumentType.MultistageOutputData), val2.ValidationError); + + //var val3 = new XMLValidator(XmlReader.Create(monitoringFile)); + //Assert.IsTrue(val3.ValidateXML(XmlDocumentType.MonitoringReport), val3.ValidationError); + + } } } diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs index ed000eb7d38711d7a9c60e0cdecf0debe6f78020..237476aff8d48a99fa0cf09f0c26f0988f27d203 100644 --- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs @@ -451,7 +451,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage Assert.AreEqual("Generic Model", vehicleData.Model); Assert.AreEqual("VEH-1234567890", vehicleData.VIN); Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicleData.Date); - Assert.AreEqual("M3", vehicleData.LegislativeCategory); + Assert.AreEqual(LegislativeClass.M3, vehicleData.LegislativeClass); Assert.AreEqual("Bus", vehicleData.VehicleCategory.ToXMLFormat()); Assert.AreEqual(AxleConfiguration.AxleConfig_4x2, vehicleData.AxleConfiguration); Assert.AreEqual(false, vehicleData.Articulated); diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml new file mode 100644 index 0000000000000000000000000000000000000000..aef216779b96bd7d1342f7324dd2323928faf9fe --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/exempted_primary_heavyBus.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputDeclaration schemaVersion="2.0" +xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" +xmlns:v2.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.1="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" +xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" +xmlns:di="http://www.w3.org/2000/09/xmldsig#" +xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob v:\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> + <v2.0:Vehicle id="VEH-1234567890" xsi:type="v2.6:ExemptedPrimaryHeavyBusType"> + <Manufacturer>Some Manufacturer</Manufacturer> + <ManufacturerAddress>Infinite Loop 1</ManufacturerAddress> + <Model>Sample Bus Model</Model> + <VIN>VEH-1234567890</VIN> + <Date>2020-01-09T11:00:00Z</Date> + <LegislativeCategory>N2</LegislativeCategory> + <ChassisConfiguration>Bus</ChassisConfiguration> + <AxleConfiguration>6x2</AxleConfiguration> + <Articulated>false</Articulated> + <TechnicalPermissibleMaximumLadenMass>15400</TechnicalPermissibleMaximumLadenMass> + <ZeroEmissionVehicle>true</ZeroEmissionVehicle> + <SumNetPower>350000</SumNetPower> + <Technology>Fuel cell vehicle</Technology> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> diff --git a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs index aa367932f79de368166442fa0ad64adad3873a48..aa2acbcdee3d47cc2740d73e1ab42fc81e783f40 100644 --- a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs +++ b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs @@ -29,7 +29,6 @@ namespace TUGraz.VectoCore.Tests.Utils { public string Identifier { get; } public bool ExemptedVehicle { get; } public string VIN { get; } - public string LegislativeCategory { get; } public LegislativeClass? LegislativeClass { get; } public VehicleCategory VehicleCategory { get; } public AxleConfiguration AxleConfiguration { get; } @@ -48,6 +47,7 @@ namespace TUGraz.VectoCore.Tests.Utils { public bool DualFuelVehicle { get; } public Watt MaxNetPower1 { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } public RegistrationClass? RegisteredClass { get; set; } public int? NumberPassengerSeatsUpperDeck { get; set; } public int? NumberPassengerSeatsLowerDeck { get; set; } @@ -121,6 +121,7 @@ namespace TUGraz.VectoCore.Tests.Utils { public ConsumerTechnology? DoorDriveTechnology { get; } public VehicleDeclarationType VehicleDeclarationType { get; } public Watt MaxNetPower2 { get; } + public string ExemptedTechnology { get; } public RegistrationClass? RegisteredClass { get; set; } public int? NumberPassengerSeatsUpperDeck { get; set; } public int? NumberPassengerSeatsLowerDeck { get; set; } @@ -141,7 +142,6 @@ namespace TUGraz.VectoCore.Tests.Utils { public string Identifier { get; } public bool ExemptedVehicle { get; } public string VIN { get; } - public string LegislativeCategory { get; } public LegislativeClass? LegislativeClass { get; } public VehicleCategory VehicleCategory { get; } public AxleConfiguration AxleConfiguration { get; } diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index 2572f74355af024a922237b63b58f9c65bc2c0f1..41e878b0fee06f2e2809b2bac3467bdd2a4315ee 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -5837,6 +5837,9 @@ <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.3\vehicle_sampleDualModeDualFuel.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs index 6a337e3dace079efaf26bb6f597f22ec8429f4db..3f32009dea4d138c7d586b2e699900819b738c70 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs @@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual("Generic Model", vehicleData.Model); Assert.AreEqual("VEH-1234567890_nonSmart-ESS", vehicleData.VIN); Assert.AreEqual(DateTime.Parse("2017-02-15T11:00:00Z").ToUniversalTime(), vehicleData.Date); - Assert.AreEqual("M3", vehicleData.LegislativeCategory); + Assert.AreEqual(LegislativeClass.M3, vehicleData.LegislativeClass); Assert.AreEqual("Bus", vehicleData.VehicleCategory.ToXMLFormat()); Assert.AreEqual(AxleConfiguration.AxleConfig_8x2, vehicleData.AxleConfiguration); Assert.AreEqual(true, vehicleData.Articulated); diff --git a/VectoCore/VectoXML.spp b/VectoCore/VectoXML.spp index a18bdad0c3e962a29e4afe556f0a5240f7d01bf0..3c9d46d22cdd49c04e596088943c3471af999618 100644 --- a/VectoCore/VectoXML.spp +++ b/VectoCore/VectoXML.spp @@ -15,6 +15,7 @@ <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.3\vehicle_sampleDualModeDualFuel.xml" HomeFolder="Yes"/> </Folder> <Folder FolderName="Schema 2.6DEV Buses ML"> + <File FilePath="E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCoreTest\bin\Debug\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\exempted_primary_heavyBus.xml" HomeFolder="Yes"/> <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\PIF-heavyBus-sample.xml" HomeFolder="Yes"/> <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-completed_heavyBus-sample.xml" HomeFolder="Yes"/> <File FilePath="VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.6_Buses\vecto_vehicle-medium_lorryFWD-sample.xml" HomeFolder="Yes"/> @@ -144,6 +145,7 @@ <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.6.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.7.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.8.xsd" HomeFolder="Yes"/> + <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.0.9.1.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputManufacturer.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputMultistage.0.1.xsd" HomeFolder="Yes"/> <File FilePath="VectoCore\Resources\XSD\VectoOutputPrimaryBus.xsd" HomeFolder="Yes"/>