diff --git a/.gitignore b/.gitignore index c6bd82666dc58816bf38a74bb24c6c789340fe7c..a5db239d276f18d59dd1c4ad912650da92e797c3 100644 --- a/.gitignore +++ b/.gitignore @@ -211,3 +211,4 @@ Documentation/VehiclesReleaseComparisonDeclarationMode/tmp/ .vs/ **/dev/*.vmod **/dev/*.vsum +/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/testVif.VIF_Report_5.xml diff --git a/Tools/GraphDrawer/bin/Debug/TestData/Integration/Buses/FactorMethod/vecto_vehicle-primary_heavyBus_ESS_electricFanSTP.xml b/Tools/GraphDrawer/bin/Debug/TestData/Integration/Buses/FactorMethod/vecto_vehicle-primary_heavyBus_ESS_electricFanSTP.xml deleted file mode 100644 index f663ecd741dd7f0e49a33ed3a01d2e1d8eff7067..0000000000000000000000000000000000000000 --- a/Tools/GraphDrawer/bin/Debug/TestData/Integration/Buses/FactorMethod/vecto_vehicle-primary_heavyBus_ESS_electricFanSTP.xml +++ /dev/null @@ -1,3288 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<tns:VectoInputDeclaration schemaVersion="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" 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 E:\QUAM\Workspace\VECTO_DEV_Buses\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> - <v2.0:Vehicle id="VEH-PrimaryBus_nonSmart" xsi:type="PrimaryVehicleDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6"> - <Manufacturer>Generic Truck Manufacturer</Manufacturer> - <ManufacturerAddress>Street, ZIP City</ManufacturerAddress> - <Model>Generic Model</Model> - <VIN>VEH-1234567890_nonSmart</VIN> - <Date>2017-02-15T11:00:00Z</Date> - <VehicleCategory>Bus</VehicleCategory> - <AxleConfiguration>4x2</AxleConfiguration> - <Articulated>false</Articulated> - <TechnicalPermissibleMaximumLadenMass>25000</TechnicalPermissibleMaximumLadenMass> - <IdlingSpeed>600</IdlingSpeed> - <RetarderType>Transmission Output Retarder</RetarderType> - <RetarderRatio>1.000</RetarderRatio> - <AngledriveType>None</AngledriveType> - <ZeroEmissionVehicle>false</ZeroEmissionVehicle> - <v2.6:ADAS xsi:type="v2.1:AdvancedDriverAssistantSystemsType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1"> - <EngineStopStart>true</EngineStopStart> - <EcoRollWithoutEngineStop>false</EcoRollWithoutEngineStop> - <EcoRollWithEngineStop>true</EcoRollWithEngineStop> - <PredictiveCruiseControl>none</PredictiveCruiseControl> - </v2.6:ADAS> - <v2.6:TorqueLimits xsi:type="TorqueLimitsType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> - <Entry gear="6" maxTorque="1800"/> - <Entry gear="1" maxTorque="2500"/> - <Entry gear="12" maxTorque="1900"/> - </v2.6:TorqueLimits> - <Components xsi:type="PrimaryVehicleComponentsDeclarationType"> - <v2.6:Engine xsi:type="v2.0:EngineComponentDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> - <v2.0:Data id="ENG-gooZah3D" xsi:type="v2.1:EngineDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1"> - <Manufacturer>Generic Engine Manufacturer</Manufacturer> - <Model>Generic 40t Long Haul Truck Engine</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-02-15T11:00:00Z</Date> - <AppVersion>VectoEngine x.y</AppVersion> - <Displacement>12730</Displacement> - <IdlingSpeed>560</IdlingSpeed> - <RatedSpeed>2200</RatedSpeed> - <RatedPower>380000</RatedPower> - <MaxEngineTorque>2400</MaxEngineTorque> - <WHTCUrban>1.0097</WHTCUrban> - <WHTCRural>1.0035</WHTCRural> - <WHTCMotorway>1.0200</WHTCMotorway> - <BFColdHot>1.0000</BFColdHot> - <CFRegPer>1.0000</CFRegPer> - <CFNCV>1.0000</CFNCV> - <FuelType>NG CI</FuelType> - <FuelConsumptionMap> - <Entry engineSpeed="560.00" torque="-149.00" fuelConsumption="0.00"/> - <Entry engineSpeed="560.00" torque="0.00" fuelConsumption="1256.00"/> - <Entry engineSpeed="560.00" torque="200.00" fuelConsumption="3197.00"/> - <Entry engineSpeed="560.00" torque="400.00" fuelConsumption="5295.00"/> - <Entry engineSpeed="560.00" torque="600.00" fuelConsumption="7615.00"/> - <Entry engineSpeed="560.00" torque="800.00" fuelConsumption="9375.00"/> - <Entry engineSpeed="560.00" torque="1000.00" fuelConsumption="11239.00"/> - <Entry engineSpeed="560.00" torque="1180.00" fuelConsumption="12869.00"/> - <Entry engineSpeed="600.00" torque="-148.00" fuelConsumption="0.00"/> - <Entry engineSpeed="600.00" torque="0.00" fuelConsumption="1459.00"/> - <Entry engineSpeed="600.00" torque="200.00" fuelConsumption="3358.00"/> - <Entry engineSpeed="600.00" torque="400.00" fuelConsumption="5498.00"/> - <Entry engineSpeed="600.00" torque="600.00" fuelConsumption="8101.00"/> - <Entry engineSpeed="600.00" torque="800.00" fuelConsumption="10014.00"/> - <Entry engineSpeed="600.00" torque="1000.00" fuelConsumption="12071.00"/> - <Entry engineSpeed="600.00" torque="1200.00" fuelConsumption="14201.00"/> - <Entry engineSpeed="600.00" torque="1282.00" fuelConsumption="15304.00"/> - <Entry engineSpeed="800.00" torque="-149.00" fuelConsumption="0.00"/> - <Entry engineSpeed="800.00" torque="0.00" fuelConsumption="1879.00"/> - <Entry engineSpeed="800.00" torque="200.00" fuelConsumption="4286.00"/> - <Entry engineSpeed="800.00" torque="400.00" fuelConsumption="7021.00"/> - <Entry engineSpeed="800.00" torque="600.00" fuelConsumption="10059.00"/> - <Entry engineSpeed="800.00" torque="800.00" fuelConsumption="13086.00"/> - <Entry engineSpeed="800.00" torque="1000.00" fuelConsumption="16015.00"/> - <Entry engineSpeed="800.00" torque="1200.00" fuelConsumption="19239.00"/> - <Entry engineSpeed="800.00" torque="1400.00" fuelConsumption="22426.00"/> - <Entry engineSpeed="800.00" torque="1600.00" fuelConsumption="25483.00"/> - <Entry engineSpeed="800.00" torque="1791.00" fuelConsumption="28905.00"/> - <Entry engineSpeed="1000.00" torque="-160.00" fuelConsumption="0.00"/> - <Entry engineSpeed="1000.00" torque="0.00" fuelConsumption="2865.00"/> - <Entry engineSpeed="1000.00" torque="200.00" fuelConsumption="5963.00"/> - <Entry engineSpeed="1000.00" torque="400.00" fuelConsumption="9198.00"/> - <Entry engineSpeed="1000.00" torque="600.00" fuelConsumption="12354.00"/> - <Entry engineSpeed="1000.00" torque="800.00" fuelConsumption="15965.00"/> - <Entry engineSpeed="1000.00" torque="1000.00" fuelConsumption="19864.00"/> - <Entry engineSpeed="1000.00" torque="1200.00" fuelConsumption="23530.00"/> - <Entry engineSpeed="1000.00" torque="1400.00" fuelConsumption="27202.00"/> - <Entry engineSpeed="1000.00" torque="1600.00" fuelConsumption="31165.00"/> - <Entry engineSpeed="1000.00" torque="1800.00" fuelConsumption="35103.00"/> - <Entry engineSpeed="1000.00" torque="2000.00" fuelConsumption="39360.00"/> - <Entry engineSpeed="1000.00" torque="2200.00" fuelConsumption="44120.00"/> - <Entry engineSpeed="1000.00" torque="2300.00" fuelConsumption="46836.00"/> - <Entry engineSpeed="1200.00" torque="-179.00" fuelConsumption="0.00"/> - <Entry engineSpeed="1200.00" torque="0.00" fuelConsumption="3307.00"/> - <Entry engineSpeed="1200.00" torque="200.00" fuelConsumption="6897.00"/> - <Entry engineSpeed="1200.00" torque="400.00" fuelConsumption="10651.00"/> - <Entry engineSpeed="1200.00" torque="600.00" fuelConsumption="14645.00"/> - <Entry engineSpeed="1200.00" torque="800.00" fuelConsumption="19115.00"/> - <Entry engineSpeed="1200.00" torque="1000.00" fuelConsumption="23677.00"/> - <Entry engineSpeed="1200.00" torque="1200.00" fuelConsumption="28180.00"/> - <Entry engineSpeed="1200.00" torque="1400.00" fuelConsumption="32431.00"/> - <Entry engineSpeed="1200.00" torque="1600.00" fuelConsumption="36698.00"/> - <Entry engineSpeed="1200.00" torque="1800.00" fuelConsumption="41691.00"/> - <Entry engineSpeed="1200.00" torque="2000.00" fuelConsumption="46915.00"/> - <Entry engineSpeed="1200.00" torque="2200.00" fuelConsumption="51783.00"/> - <Entry engineSpeed="1200.00" torque="2300.00" fuelConsumption="54932.00"/> - <Entry engineSpeed="1400.00" torque="-203.00" fuelConsumption="0.00"/> - <Entry engineSpeed="1400.00" torque="0.00" fuelConsumption="4306.00"/> - <Entry engineSpeed="1400.00" torque="200.00" fuelConsumption="8143.00"/> - <Entry engineSpeed="1400.00" torque="400.00" fuelConsumption="12723.00"/> - <Entry engineSpeed="1400.00" torque="600.00" fuelConsumption="17523.00"/> - <Entry engineSpeed="1400.00" torque="800.00" fuelConsumption="22288.00"/> - <Entry engineSpeed="1400.00" torque="1000.00" fuelConsumption="27093.00"/> - <Entry engineSpeed="1400.00" torque="1200.00" fuelConsumption="32536.00"/> - <Entry engineSpeed="1400.00" torque="1400.00" fuelConsumption="37746.00"/> - <Entry engineSpeed="1400.00" torque="1600.00" fuelConsumption="43194.00"/> - <Entry engineSpeed="1400.00" torque="1800.00" fuelConsumption="49453.00"/> - <Entry engineSpeed="1400.00" torque="2000.00" fuelConsumption="55830.00"/> - <Entry engineSpeed="1400.00" torque="2200.00" fuelConsumption="61072.00"/> - <Entry engineSpeed="1400.00" torque="2300.00" fuelConsumption="64377.00"/> - <Entry engineSpeed="1600.00" torque="-235.00" fuelConsumption="0.00"/> - <Entry engineSpeed="1600.00" torque="0.00" fuelConsumption="5209.00"/> - <Entry engineSpeed="1600.00" torque="200.00" fuelConsumption="9669.00"/> - <Entry engineSpeed="1600.00" torque="400.00" fuelConsumption="14838.00"/> - <Entry engineSpeed="1600.00" torque="600.00" fuelConsumption="20127.00"/> - <Entry engineSpeed="1600.00" torque="800.00" fuelConsumption="25894.00"/> - <Entry engineSpeed="1600.00" torque="1000.00" fuelConsumption="31631.00"/> - <Entry engineSpeed="1600.00" torque="1200.00" fuelConsumption="37248.00"/> - <Entry engineSpeed="1600.00" torque="1400.00" fuelConsumption="42826.00"/> - <Entry engineSpeed="1600.00" torque="1600.00" fuelConsumption="49752.00"/> - <Entry engineSpeed="1600.00" torque="1800.00" fuelConsumption="57020.00"/> - <Entry engineSpeed="1600.00" torque="2000.00" fuelConsumption="63914.00"/> - <Entry engineSpeed="1600.00" torque="2079.00" fuelConsumption="66520.00"/> - <Entry engineSpeed="1800.00" torque="-264.00" fuelConsumption="0.00"/> - <Entry engineSpeed="1800.00" torque="0.00" fuelConsumption="6409.00"/> - <Entry engineSpeed="1800.00" torque="200.00" fuelConsumption="11777.00"/> - <Entry engineSpeed="1800.00" torque="400.00" fuelConsumption="17320.00"/> - <Entry engineSpeed="1800.00" torque="600.00" fuelConsumption="23394.00"/> - <Entry engineSpeed="1800.00" torque="800.00" fuelConsumption="30501.00"/> - <Entry engineSpeed="1800.00" torque="1000.00" fuelConsumption="36378.00"/> - <Entry engineSpeed="1800.00" torque="1200.00" fuelConsumption="43079.00"/> - <Entry engineSpeed="1800.00" torque="1400.00" fuelConsumption="49796.00"/> - <Entry engineSpeed="1800.00" torque="1600.00" fuelConsumption="57436.00"/> - <Entry engineSpeed="1800.00" torque="1800.00" fuelConsumption="65157.00"/> - <Entry engineSpeed="1800.00" torque="1857.00" fuelConsumption="67574.00"/> - <Entry engineSpeed="2000.00" torque="-301.00" fuelConsumption="0.00"/> - <Entry engineSpeed="2000.00" torque="0.00" fuelConsumption="9127.00"/> - <Entry engineSpeed="2000.00" torque="200.00" fuelConsumption="14822.00"/> - <Entry engineSpeed="2000.00" torque="400.00" fuelConsumption="20655.00"/> - <Entry engineSpeed="2000.00" torque="600.00" fuelConsumption="27076.00"/> - <Entry engineSpeed="2000.00" torque="800.00" fuelConsumption="34188.00"/> - <Entry engineSpeed="2000.00" torque="1000.00" fuelConsumption="42837.00"/> - <Entry engineSpeed="2000.00" torque="1200.00" fuelConsumption="51018.00"/> - <Entry engineSpeed="2000.00" torque="1352.00" fuelConsumption="56618.00"/> - <Entry engineSpeed="2100.00" torque="-320.00" fuelConsumption="0.00"/> - <Entry engineSpeed="2100.00" torque="0.00" fuelConsumption="10470.00"/> - <Entry engineSpeed="2100.00" torque="200.00" fuelConsumption="16332.00"/> - <Entry engineSpeed="2100.00" torque="400.00" fuelConsumption="22396.00"/> - <Entry engineSpeed="2100.00" torque="600.00" fuelConsumption="28914.00"/> - <Entry engineSpeed="2100.00" torque="800.00" fuelConsumption="35717.00"/> - <Entry engineSpeed="2100.00" torque="1000.00" fuelConsumption="45643.00"/> - <Entry engineSpeed="2100.00" torque="1100.00" fuelConsumption="50653.00"/> - </FuelConsumptionMap> - <FullLoadAndDragCurve> - <Entry engineSpeed="560.00" maxTorque="1180.00" dragTorque="-149.00"/> - <Entry engineSpeed="600.00" maxTorque="1282.00" dragTorque="-148.00"/> - <Entry engineSpeed="800.00" maxTorque="1791.00" dragTorque="-149.00"/> - <Entry engineSpeed="1000.00" maxTorque="2300.00" dragTorque="-160.00"/> - <Entry engineSpeed="1200.00" maxTorque="2300.00" dragTorque="-179.00"/> - <Entry engineSpeed="1400.00" maxTorque="2300.00" dragTorque="-203.00"/> - <Entry engineSpeed="1600.00" maxTorque="2079.00" dragTorque="-235.00"/> - <Entry engineSpeed="1800.00" maxTorque="1857.00" dragTorque="-264.00"/> - <Entry engineSpeed="2000.00" maxTorque="1352.00" dragTorque="-301.00"/> - <Entry engineSpeed="2100.00" maxTorque="1100.00" dragTorque="-320.00"/> - </FullLoadAndDragCurve> - </v2.0:Data> - <Signature> - <di:Reference URI="#ENG-gooZah3D"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>sNtMe9udO39TyKXzgwYEpVKImWizFalaBVqq3jLktuo=</di:DigestValue> - </di:Reference> - </Signature> - </v2.6:Engine> - <v2.6:Gearbox xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="GearboxComponentDeclarationType"> - <Data id="gbx-vi2Oak2N" xsi:type="GearboxDataDeclarationType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic 40t Long Haul Truck Gearbox</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <TransmissionType>AMT</TransmissionType> - <MainCertificationMethod>Standard values</MainCertificationMethod> - <Gears xsi:type="GearsDeclarationType"> - <Gear number="1"> - <Ratio>14.930</Ratio> - <MaxTorque>1900</MaxTorque> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="2"> - <Ratio>11.640</Ratio> - <MaxTorque>1900</MaxTorque> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="3"> - <Ratio>9.020</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="4"> - <Ratio>7.040</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="5"> - <Ratio>5.640</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="6"> - <Ratio>4.400</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="7"> - <Ratio>3.390</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="8"> - <Ratio>2.650</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="9"> - <Ratio>2.050</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="10"> - <Ratio>1.600</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="11"> - <Ratio>1.280</Ratio> - <MaxSpeed>2000</MaxSpeed> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="12.06"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="8.06"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="6.06"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="10.06"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="14.06"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="18.06"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="22.06"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="26.06"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="30.06"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="34.06"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="38.06"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="42.06"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="46.06"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="50.06"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="54.06"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="12.56"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="8.56"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="6.56"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="10.56"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="14.56"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="18.56"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="22.56"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="26.56"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="30.56"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="34.56"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="38.56"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="42.56"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="46.56"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="50.56"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="54.56"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="13.58"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="9.58"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="7.58"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="11.58"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="15.58"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="19.58"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="23.58"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="27.58"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="31.58"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="35.58"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="39.58"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="43.58"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="47.58"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="51.58"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="55.58"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="14.59"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="10.59"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="8.59"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="12.59"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="16.59"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="20.59"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="24.59"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="28.59"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="32.59"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="36.59"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="40.59"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="44.59"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="48.59"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="52.59"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="56.59"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="15.60"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="11.60"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="9.60"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="13.60"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="17.60"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="21.60"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="25.60"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="29.60"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="33.60"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="37.60"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="41.60"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="45.60"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="49.60"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="53.60"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="57.60"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="16.61"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="12.61"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="10.61"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="14.61"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="18.61"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="22.61"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="26.61"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="30.61"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="34.61"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="38.61"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="42.61"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="46.61"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="50.61"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="54.61"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="58.61"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="17.63"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="13.63"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="11.63"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="15.63"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="19.63"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="23.63"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="27.63"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="31.63"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="35.63"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="39.63"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="43.63"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="47.63"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="51.63"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="55.63"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="59.63"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="18.64"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="14.64"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="12.64"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="16.64"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="20.64"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="24.64"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="28.64"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="32.64"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="36.64"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="40.64"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="44.64"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="48.64"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="52.64"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="56.64"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="60.64"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="19.65"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="15.65"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="13.65"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="17.65"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="21.65"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="25.65"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="29.65"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="33.65"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="37.65"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="41.65"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="45.65"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="49.65"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="53.65"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="57.65"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="61.65"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="20.66"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="16.66"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="14.66"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="18.66"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="22.66"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="26.66"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="30.66"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="34.66"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="38.66"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="42.66"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="46.66"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="50.66"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="54.66"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="58.66"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="62.66"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="21.67"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="17.67"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="15.67"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="19.67"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="23.67"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="27.67"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="31.67"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="35.67"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="39.67"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="43.67"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="47.67"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="51.67"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="55.67"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="59.67"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="63.67"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="22.69"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="18.69"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="16.69"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="20.69"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="24.69"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="28.69"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="32.69"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="36.69"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="40.69"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="44.69"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="48.69"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="52.69"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="56.69"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="60.69"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="64.69"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="25.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="25.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="26.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="27.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="28.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="29.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="30.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="31.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="32.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="33.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="34.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="35.69"/> - </TorqueLossMap> - </Gear> - <Gear number="12"> - <Ratio>1.000</Ratio> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-350.00" torqueLoss="6.81"/> - <Entry inputSpeed="0.00" inputTorque="-150.00" torqueLoss="5.81"/> - <Entry inputSpeed="0.00" inputTorque="50.00" torqueLoss="5.31"/> - <Entry inputSpeed="0.00" inputTorque="250.00" torqueLoss="6.31"/> - <Entry inputSpeed="0.00" inputTorque="450.00" torqueLoss="7.31"/> - <Entry inputSpeed="0.00" inputTorque="650.00" torqueLoss="8.31"/> - <Entry inputSpeed="0.00" inputTorque="850.00" torqueLoss="9.31"/> - <Entry inputSpeed="0.00" inputTorque="1050.00" torqueLoss="10.31"/> - <Entry inputSpeed="0.00" inputTorque="1250.00" torqueLoss="11.31"/> - <Entry inputSpeed="0.00" inputTorque="1450.00" torqueLoss="12.31"/> - <Entry inputSpeed="0.00" inputTorque="1650.00" torqueLoss="13.31"/> - <Entry inputSpeed="0.00" inputTorque="1850.00" torqueLoss="14.31"/> - <Entry inputSpeed="0.00" inputTorque="2050.00" torqueLoss="15.31"/> - <Entry inputSpeed="0.00" inputTorque="2250.00" torqueLoss="16.31"/> - <Entry inputSpeed="0.00" inputTorque="2800.00" torqueLoss="17.31"/> - <Entry inputSpeed="100.00" inputTorque="-350.00" torqueLoss="7.32"/> - <Entry inputSpeed="100.00" inputTorque="-150.00" torqueLoss="6.32"/> - <Entry inputSpeed="100.00" inputTorque="50.00" torqueLoss="5.82"/> - <Entry inputSpeed="100.00" inputTorque="250.00" torqueLoss="6.82"/> - <Entry inputSpeed="100.00" inputTorque="450.00" torqueLoss="7.82"/> - <Entry inputSpeed="100.00" inputTorque="650.00" torqueLoss="8.82"/> - <Entry inputSpeed="100.00" inputTorque="850.00" torqueLoss="9.82"/> - <Entry inputSpeed="100.00" inputTorque="1050.00" torqueLoss="10.82"/> - <Entry inputSpeed="100.00" inputTorque="1250.00" torqueLoss="11.82"/> - <Entry inputSpeed="100.00" inputTorque="1450.00" torqueLoss="12.82"/> - <Entry inputSpeed="100.00" inputTorque="1650.00" torqueLoss="13.82"/> - <Entry inputSpeed="100.00" inputTorque="1850.00" torqueLoss="14.82"/> - <Entry inputSpeed="100.00" inputTorque="2050.00" torqueLoss="15.82"/> - <Entry inputSpeed="100.00" inputTorque="2250.00" torqueLoss="16.82"/> - <Entry inputSpeed="100.00" inputTorque="2800.00" torqueLoss="17.82"/> - <Entry inputSpeed="300.00" inputTorque="-350.00" torqueLoss="8.33"/> - <Entry inputSpeed="300.00" inputTorque="-150.00" torqueLoss="7.33"/> - <Entry inputSpeed="300.00" inputTorque="50.00" torqueLoss="6.83"/> - <Entry inputSpeed="300.00" inputTorque="250.00" torqueLoss="7.83"/> - <Entry inputSpeed="300.00" inputTorque="450.00" torqueLoss="8.83"/> - <Entry inputSpeed="300.00" inputTorque="650.00" torqueLoss="9.83"/> - <Entry inputSpeed="300.00" inputTorque="850.00" torqueLoss="10.83"/> - <Entry inputSpeed="300.00" inputTorque="1050.00" torqueLoss="11.83"/> - <Entry inputSpeed="300.00" inputTorque="1250.00" torqueLoss="12.83"/> - <Entry inputSpeed="300.00" inputTorque="1450.00" torqueLoss="13.83"/> - <Entry inputSpeed="300.00" inputTorque="1650.00" torqueLoss="14.83"/> - <Entry inputSpeed="300.00" inputTorque="1850.00" torqueLoss="15.83"/> - <Entry inputSpeed="300.00" inputTorque="2050.00" torqueLoss="16.83"/> - <Entry inputSpeed="300.00" inputTorque="2250.00" torqueLoss="17.83"/> - <Entry inputSpeed="300.00" inputTorque="2800.00" torqueLoss="18.83"/> - <Entry inputSpeed="500.00" inputTorque="-350.00" torqueLoss="9.34"/> - <Entry inputSpeed="500.00" inputTorque="-150.00" torqueLoss="8.34"/> - <Entry inputSpeed="500.00" inputTorque="50.00" torqueLoss="7.84"/> - <Entry inputSpeed="500.00" inputTorque="250.00" torqueLoss="8.84"/> - <Entry inputSpeed="500.00" inputTorque="450.00" torqueLoss="9.84"/> - <Entry inputSpeed="500.00" inputTorque="650.00" torqueLoss="10.84"/> - <Entry inputSpeed="500.00" inputTorque="850.00" torqueLoss="11.84"/> - <Entry inputSpeed="500.00" inputTorque="1050.00" torqueLoss="12.84"/> - <Entry inputSpeed="500.00" inputTorque="1250.00" torqueLoss="13.84"/> - <Entry inputSpeed="500.00" inputTorque="1450.00" torqueLoss="14.84"/> - <Entry inputSpeed="500.00" inputTorque="1650.00" torqueLoss="15.84"/> - <Entry inputSpeed="500.00" inputTorque="1850.00" torqueLoss="16.84"/> - <Entry inputSpeed="500.00" inputTorque="2050.00" torqueLoss="17.84"/> - <Entry inputSpeed="500.00" inputTorque="2250.00" torqueLoss="18.84"/> - <Entry inputSpeed="500.00" inputTorque="2800.00" torqueLoss="19.84"/> - <Entry inputSpeed="700.00" inputTorque="-350.00" torqueLoss="10.35"/> - <Entry inputSpeed="700.00" inputTorque="-150.00" torqueLoss="9.35"/> - <Entry inputSpeed="700.00" inputTorque="50.00" torqueLoss="8.85"/> - <Entry inputSpeed="700.00" inputTorque="250.00" torqueLoss="9.85"/> - <Entry inputSpeed="700.00" inputTorque="450.00" torqueLoss="10.85"/> - <Entry inputSpeed="700.00" inputTorque="650.00" torqueLoss="11.85"/> - <Entry inputSpeed="700.00" inputTorque="850.00" torqueLoss="12.85"/> - <Entry inputSpeed="700.00" inputTorque="1050.00" torqueLoss="13.85"/> - <Entry inputSpeed="700.00" inputTorque="1250.00" torqueLoss="14.85"/> - <Entry inputSpeed="700.00" inputTorque="1450.00" torqueLoss="15.85"/> - <Entry inputSpeed="700.00" inputTorque="1650.00" torqueLoss="16.85"/> - <Entry inputSpeed="700.00" inputTorque="1850.00" torqueLoss="17.85"/> - <Entry inputSpeed="700.00" inputTorque="2050.00" torqueLoss="18.85"/> - <Entry inputSpeed="700.00" inputTorque="2250.00" torqueLoss="19.85"/> - <Entry inputSpeed="700.00" inputTorque="2800.00" torqueLoss="20.85"/> - <Entry inputSpeed="900.00" inputTorque="-350.00" torqueLoss="11.36"/> - <Entry inputSpeed="900.00" inputTorque="-150.00" torqueLoss="10.36"/> - <Entry inputSpeed="900.00" inputTorque="50.00" torqueLoss="9.86"/> - <Entry inputSpeed="900.00" inputTorque="250.00" torqueLoss="10.86"/> - <Entry inputSpeed="900.00" inputTorque="450.00" torqueLoss="11.86"/> - <Entry inputSpeed="900.00" inputTorque="650.00" torqueLoss="12.86"/> - <Entry inputSpeed="900.00" inputTorque="850.00" torqueLoss="13.86"/> - <Entry inputSpeed="900.00" inputTorque="1050.00" torqueLoss="14.86"/> - <Entry inputSpeed="900.00" inputTorque="1250.00" torqueLoss="15.86"/> - <Entry inputSpeed="900.00" inputTorque="1450.00" torqueLoss="16.86"/> - <Entry inputSpeed="900.00" inputTorque="1650.00" torqueLoss="17.86"/> - <Entry inputSpeed="900.00" inputTorque="1850.00" torqueLoss="18.86"/> - <Entry inputSpeed="900.00" inputTorque="2050.00" torqueLoss="19.86"/> - <Entry inputSpeed="900.00" inputTorque="2250.00" torqueLoss="20.86"/> - <Entry inputSpeed="900.00" inputTorque="2800.00" torqueLoss="21.86"/> - <Entry inputSpeed="1100.00" inputTorque="-350.00" torqueLoss="12.37"/> - <Entry inputSpeed="1100.00" inputTorque="-150.00" torqueLoss="11.37"/> - <Entry inputSpeed="1100.00" inputTorque="50.00" torqueLoss="10.88"/> - <Entry inputSpeed="1100.00" inputTorque="250.00" torqueLoss="11.88"/> - <Entry inputSpeed="1100.00" inputTorque="450.00" torqueLoss="12.88"/> - <Entry inputSpeed="1100.00" inputTorque="650.00" torqueLoss="13.88"/> - <Entry inputSpeed="1100.00" inputTorque="850.00" torqueLoss="14.88"/> - <Entry inputSpeed="1100.00" inputTorque="1050.00" torqueLoss="15.88"/> - <Entry inputSpeed="1100.00" inputTorque="1250.00" torqueLoss="16.88"/> - <Entry inputSpeed="1100.00" inputTorque="1450.00" torqueLoss="17.88"/> - <Entry inputSpeed="1100.00" inputTorque="1650.00" torqueLoss="18.88"/> - <Entry inputSpeed="1100.00" inputTorque="1850.00" torqueLoss="19.88"/> - <Entry inputSpeed="1100.00" inputTorque="2050.00" torqueLoss="20.88"/> - <Entry inputSpeed="1100.00" inputTorque="2250.00" torqueLoss="21.88"/> - <Entry inputSpeed="1100.00" inputTorque="2800.00" torqueLoss="22.88"/> - <Entry inputSpeed="1300.00" inputTorque="-350.00" torqueLoss="13.39"/> - <Entry inputSpeed="1300.00" inputTorque="-150.00" torqueLoss="12.39"/> - <Entry inputSpeed="1300.00" inputTorque="50.00" torqueLoss="11.89"/> - <Entry inputSpeed="1300.00" inputTorque="250.00" torqueLoss="12.89"/> - <Entry inputSpeed="1300.00" inputTorque="450.00" torqueLoss="13.89"/> - <Entry inputSpeed="1300.00" inputTorque="650.00" torqueLoss="14.89"/> - <Entry inputSpeed="1300.00" inputTorque="850.00" torqueLoss="15.89"/> - <Entry inputSpeed="1300.00" inputTorque="1050.00" torqueLoss="16.89"/> - <Entry inputSpeed="1300.00" inputTorque="1250.00" torqueLoss="17.89"/> - <Entry inputSpeed="1300.00" inputTorque="1450.00" torqueLoss="18.89"/> - <Entry inputSpeed="1300.00" inputTorque="1650.00" torqueLoss="19.89"/> - <Entry inputSpeed="1300.00" inputTorque="1850.00" torqueLoss="20.89"/> - <Entry inputSpeed="1300.00" inputTorque="2050.00" torqueLoss="21.89"/> - <Entry inputSpeed="1300.00" inputTorque="2250.00" torqueLoss="22.89"/> - <Entry inputSpeed="1300.00" inputTorque="2800.00" torqueLoss="23.89"/> - <Entry inputSpeed="1500.00" inputTorque="-350.00" torqueLoss="14.40"/> - <Entry inputSpeed="1500.00" inputTorque="-150.00" torqueLoss="13.40"/> - <Entry inputSpeed="1500.00" inputTorque="50.00" torqueLoss="12.90"/> - <Entry inputSpeed="1500.00" inputTorque="250.00" torqueLoss="13.90"/> - <Entry inputSpeed="1500.00" inputTorque="450.00" torqueLoss="14.90"/> - <Entry inputSpeed="1500.00" inputTorque="650.00" torqueLoss="15.90"/> - <Entry inputSpeed="1500.00" inputTorque="850.00" torqueLoss="16.90"/> - <Entry inputSpeed="1500.00" inputTorque="1050.00" torqueLoss="17.90"/> - <Entry inputSpeed="1500.00" inputTorque="1250.00" torqueLoss="18.90"/> - <Entry inputSpeed="1500.00" inputTorque="1450.00" torqueLoss="19.90"/> - <Entry inputSpeed="1500.00" inputTorque="1650.00" torqueLoss="20.90"/> - <Entry inputSpeed="1500.00" inputTorque="1850.00" torqueLoss="21.90"/> - <Entry inputSpeed="1500.00" inputTorque="2050.00" torqueLoss="22.90"/> - <Entry inputSpeed="1500.00" inputTorque="2250.00" torqueLoss="23.90"/> - <Entry inputSpeed="1500.00" inputTorque="2800.00" torqueLoss="24.90"/> - <Entry inputSpeed="1700.00" inputTorque="-350.00" torqueLoss="15.41"/> - <Entry inputSpeed="1700.00" inputTorque="-150.00" torqueLoss="14.41"/> - <Entry inputSpeed="1700.00" inputTorque="50.00" torqueLoss="13.91"/> - <Entry inputSpeed="1700.00" inputTorque="250.00" torqueLoss="14.91"/> - <Entry inputSpeed="1700.00" inputTorque="450.00" torqueLoss="15.91"/> - <Entry inputSpeed="1700.00" inputTorque="650.00" torqueLoss="16.91"/> - <Entry inputSpeed="1700.00" inputTorque="850.00" torqueLoss="17.91"/> - <Entry inputSpeed="1700.00" inputTorque="1050.00" torqueLoss="18.91"/> - <Entry inputSpeed="1700.00" inputTorque="1250.00" torqueLoss="19.91"/> - <Entry inputSpeed="1700.00" inputTorque="1450.00" torqueLoss="20.91"/> - <Entry inputSpeed="1700.00" inputTorque="1650.00" torqueLoss="21.91"/> - <Entry inputSpeed="1700.00" inputTorque="1850.00" torqueLoss="22.91"/> - <Entry inputSpeed="1700.00" inputTorque="2050.00" torqueLoss="23.91"/> - <Entry inputSpeed="1700.00" inputTorque="2250.00" torqueLoss="24.91"/> - <Entry inputSpeed="1700.00" inputTorque="2800.00" torqueLoss="25.91"/> - <Entry inputSpeed="1900.00" inputTorque="-350.00" torqueLoss="16.42"/> - <Entry inputSpeed="1900.00" inputTorque="-150.00" torqueLoss="15.42"/> - <Entry inputSpeed="1900.00" inputTorque="50.00" torqueLoss="14.92"/> - <Entry inputSpeed="1900.00" inputTorque="250.00" torqueLoss="15.92"/> - <Entry inputSpeed="1900.00" inputTorque="450.00" torqueLoss="16.92"/> - <Entry inputSpeed="1900.00" inputTorque="650.00" torqueLoss="17.92"/> - <Entry inputSpeed="1900.00" inputTorque="850.00" torqueLoss="18.92"/> - <Entry inputSpeed="1900.00" inputTorque="1050.00" torqueLoss="19.92"/> - <Entry inputSpeed="1900.00" inputTorque="1250.00" torqueLoss="20.92"/> - <Entry inputSpeed="1900.00" inputTorque="1450.00" torqueLoss="21.92"/> - <Entry inputSpeed="1900.00" inputTorque="1650.00" torqueLoss="22.92"/> - <Entry inputSpeed="1900.00" inputTorque="1850.00" torqueLoss="23.92"/> - <Entry inputSpeed="1900.00" inputTorque="2050.00" torqueLoss="24.92"/> - <Entry inputSpeed="1900.00" inputTorque="2250.00" torqueLoss="25.92"/> - <Entry inputSpeed="1900.00" inputTorque="2800.00" torqueLoss="26.92"/> - <Entry inputSpeed="2100.00" inputTorque="-350.00" torqueLoss="17.43"/> - <Entry inputSpeed="2100.00" inputTorque="-150.00" torqueLoss="16.43"/> - <Entry inputSpeed="2100.00" inputTorque="50.00" torqueLoss="15.94"/> - <Entry inputSpeed="2100.00" inputTorque="250.00" torqueLoss="16.94"/> - <Entry inputSpeed="2100.00" inputTorque="450.00" torqueLoss="17.94"/> - <Entry inputSpeed="2100.00" inputTorque="650.00" torqueLoss="18.94"/> - <Entry inputSpeed="2100.00" inputTorque="850.00" torqueLoss="19.94"/> - <Entry inputSpeed="2100.00" inputTorque="1050.00" torqueLoss="20.94"/> - <Entry inputSpeed="2100.00" inputTorque="1250.00" torqueLoss="21.94"/> - <Entry inputSpeed="2100.00" inputTorque="1450.00" torqueLoss="22.94"/> - <Entry inputSpeed="2100.00" inputTorque="1650.00" torqueLoss="23.94"/> - <Entry inputSpeed="2100.00" inputTorque="1850.00" torqueLoss="24.94"/> - <Entry inputSpeed="2100.00" inputTorque="2050.00" torqueLoss="25.94"/> - <Entry inputSpeed="2100.00" inputTorque="2250.00" torqueLoss="26.94"/> - <Entry inputSpeed="2100.00" inputTorque="2800.00" torqueLoss="27.94"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="10.06"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="10.56"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="11.58"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="12.59"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="13.60"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="14.61"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="15.63"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="16.64"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="17.65"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="18.66"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="19.67"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="20.69"/> - </TorqueLossMap> - </Gear> - </Gears> - </Data> - <Signature> - <di:Reference URI="#gbx-vi2Oak2N"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>ieNmjofFObDBGnB7+GX9of3HYe3ydK/ra+YvmULVJIk=</di:DigestValue> - </di:Reference> - </Signature> - </v2.6:Gearbox> - <v2.6:TorqueConverter xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="TorqueConverterComponentDeclarationType"> - <Data id="tc-123xyz" xsi:type="TorqueConverterDataDeclarationType"> - <Manufacturer>Some Manufacturer</Manufacturer> - <Model>Some Model</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-02-15T11:00:00Z</Date> - <AppVersion>TC CalcApp 123</AppVersion> - <CertificationMethod>Standard values</CertificationMethod> - <Characteristics> - <Entry speedRatio="0.0000" torqueRatio="1.00" inputTorqueRef="300.00"/> - <Entry speedRatio="0.5000" torqueRatio="1.00" inputTorqueRef="200.00"/> - <Entry speedRatio="0.9000" torqueRatio="0.90" inputTorqueRef="200.00"/> - </Characteristics> - </Data> - <Signature> - <di:Reference URI="#tc-123xyz"> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>q2sumDwsqQKLw4xwkEllgsygF5bHBwZPSS66UNaXXis=</di:DigestValue> - </di:Reference> - </Signature> - </v2.6:TorqueConverter> - <v2.6:Angledrive xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="AngledriveComponentDeclarationType"> - <Data id="agl-vi2Oak2N" xsi:type="AngledriveDataDeclarationType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic 40t Long Haul Truck Gearbox</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <Ratio>2.345</Ratio> - <CertificationMethod>Standard values</CertificationMethod> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-10000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1000.00" inputTorque="-1000.00" torqueLoss="100.00"/> - <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="10.00"/> - <Entry inputSpeed="1000.00" inputTorque="0.00" torqueLoss="10.00"/> - <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1000.00" inputTorque="1000.00" torqueLoss="100.00"/> - </TorqueLossMap> - </Data> - <Signature> - <di:Reference URI="#agl-vi2Oak2N"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>1tuF9SoA8luoUBQGym4bYi1TurDSmcYqBDJ6AP20OSs=</di:DigestValue> - </di:Reference> - </Signature> - </v2.6:Angledrive> - <v2.6:Retarder xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="RetarderComponentDeclarationType"> - <Data id="RET-Shai9imi" xsi:type="RetarderDataDeclarationType"> - <Manufacturer>Generic Retarder Manufacturer</Manufacturer> - <Model>Generic Retarder</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <CertificationMethod>Standard values</CertificationMethod> - <RetarderLossMap> - <Entry retarderSpeed="0.00" torqueLoss="10.00"/> - <Entry retarderSpeed="100.00" torqueLoss="10.02"/> - <Entry retarderSpeed="200.00" torqueLoss="10.08"/> - <Entry retarderSpeed="300.00" torqueLoss="10.18"/> - <Entry retarderSpeed="400.00" torqueLoss="10.32"/> - <Entry retarderSpeed="500.00" torqueLoss="10.50"/> - <Entry retarderSpeed="600.00" torqueLoss="10.72"/> - <Entry retarderSpeed="700.00" torqueLoss="10.98"/> - <Entry retarderSpeed="800.00" torqueLoss="11.28"/> - <Entry retarderSpeed="900.00" torqueLoss="11.62"/> - <Entry retarderSpeed="1000.00" torqueLoss="12.00"/> - <Entry retarderSpeed="1100.00" torqueLoss="12.42"/> - <Entry retarderSpeed="1200.00" torqueLoss="12.88"/> - <Entry retarderSpeed="1300.00" torqueLoss="13.38"/> - <Entry retarderSpeed="1400.00" torqueLoss="13.92"/> - <Entry retarderSpeed="1500.00" torqueLoss="14.50"/> - <Entry retarderSpeed="1600.00" torqueLoss="15.12"/> - <Entry retarderSpeed="1700.00" torqueLoss="15.78"/> - <Entry retarderSpeed="1800.00" torqueLoss="16.48"/> - <Entry retarderSpeed="1900.00" torqueLoss="17.22"/> - <Entry retarderSpeed="2000.00" torqueLoss="18.00"/> - <Entry retarderSpeed="2100.00" torqueLoss="18.82"/> - <Entry retarderSpeed="2200.00" torqueLoss="19.68"/> - <Entry retarderSpeed="2300.00" torqueLoss="20.58"/> - </RetarderLossMap> - </Data> - <Signature> - <di:Reference URI="#RET-Shai9imi"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>fcEtYfDAbfuRq0xpuzapmEj+Py1PIPUZwVmx+amNvcc=</di:DigestValue> - </di:Reference> - </Signature> - </v2.6:Retarder> - <v2.6:Axlegear xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="AxlegearComponentDeclarationType"> - <Data id="AXL-EC3ohnoh" xsi:type="AxlegearDataDeclarationType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic 40t Long Haul Truck AxleGear</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <LineType>Single portal axle</LineType> - <Ratio>2.590</Ratio> - <CertificationMethod>Standard values</CertificationMethod> - <TorqueLossMap> - <Entry inputSpeed="0.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="0.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="0.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="300.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="300.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="300.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="300.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="300.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="300.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="300.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="300.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="0.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="0.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="0.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="0.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="0.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="0.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="0.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="0.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="0.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="0.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="0.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="0.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="0.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="0.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="0.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="0.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="0.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="0.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="100.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="100.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="100.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="100.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="100.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="100.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="100.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="100.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="0.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="0.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="0.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="0.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="0.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="0.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="0.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="0.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="0.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="0.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="0.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="0.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="0.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="0.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="0.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="0.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="100.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="100.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="100.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="100.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="0.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="0.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="0.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="0.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="100.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="100.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="100.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="100.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="100.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="100.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="100.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="100.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="100.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="100.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="100.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="100.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="100.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="100.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="100.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="100.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="100.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="100.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="100.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="100.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="100.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="100.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="100.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="100.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="100.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="100.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="100.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="100.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="100.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="300.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="300.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="300.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="300.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="300.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="300.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="300.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="300.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="300.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="300.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="300.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="300.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="300.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="300.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="300.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="300.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="300.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="300.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="300.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="300.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="300.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="300.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="300.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="300.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="300.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="300.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="300.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="300.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="300.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="300.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="300.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="300.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="300.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="500.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="500.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="500.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="500.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="500.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="500.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="500.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="500.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="500.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="500.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="500.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="500.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="500.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="500.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="500.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="500.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="500.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="500.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="500.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="500.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="500.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="500.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="500.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="500.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="500.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="500.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="500.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="500.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="500.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="500.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="500.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="500.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="500.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="500.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="500.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="500.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="500.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="500.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="500.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="500.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="500.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="700.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="700.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="700.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="700.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="700.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="700.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="700.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="700.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="700.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="700.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="700.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="700.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="700.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="700.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="700.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="700.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="700.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="700.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="700.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="700.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="700.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="700.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="700.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="700.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="700.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="700.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="700.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="700.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="700.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="700.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="700.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="700.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="700.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="700.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="700.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="700.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="700.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="700.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="700.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="700.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="700.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="900.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="900.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="900.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="900.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="900.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="900.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="900.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="900.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="900.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="900.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="900.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="900.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="900.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="900.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="900.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="900.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="900.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="900.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="900.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="900.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="900.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="900.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="900.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="900.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="900.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="900.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="900.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="900.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="900.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="900.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="900.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="900.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="900.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="900.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="900.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="900.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="900.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="900.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="900.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="900.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="900.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="1100.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1100.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1100.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1100.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1100.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1100.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="1100.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1100.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1100.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1100.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1100.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1100.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="1100.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="1100.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="1100.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="1100.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="1100.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="1100.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="1100.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="1100.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="1100.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="1100.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="1100.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="1100.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="1100.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="1100.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="1100.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="1100.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="1100.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="1100.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="1100.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="1100.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="1100.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="1100.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="1100.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="1100.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="1100.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="1100.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="1100.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="1100.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="1100.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="1300.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1300.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1300.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1300.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1300.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1300.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="1300.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1300.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1300.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1300.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1300.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1300.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="1300.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="1300.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="1300.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="1300.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="1300.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="1300.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="1300.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="1300.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="1300.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="1300.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="1300.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="1300.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="1300.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="1300.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="1300.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="1300.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="1300.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="1300.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="1300.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="1300.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="1300.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="1300.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="1300.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="1300.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="1300.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="1300.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="1300.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="1300.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="1300.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="1500.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1500.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1500.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1500.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1500.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1500.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="1500.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1500.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1500.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1500.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1500.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1500.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="1500.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="1500.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="1500.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="1500.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="1500.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="1500.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="1500.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="1500.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="1500.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="1500.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="1500.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="1500.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="1500.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="1500.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="1500.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="1500.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="1500.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="1500.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="1500.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="1500.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="1500.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="1500.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="1500.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="1500.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="1500.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="1500.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="1500.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="1500.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="1500.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="1700.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1700.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1700.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1700.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1700.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1700.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="1700.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1700.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1700.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1700.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1700.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1700.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="1700.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="1700.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="1700.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="1700.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="1700.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="1700.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="1700.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="1700.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="1700.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="1700.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="1700.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="1700.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="1700.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="1700.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="1700.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="1700.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="1700.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="1700.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="1700.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="1700.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="1700.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="1700.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="1700.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="1700.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="1700.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="1700.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="1700.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="1700.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="1700.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="1900.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1900.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1900.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1900.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1900.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1900.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="1900.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="1900.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="1900.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="1900.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="1900.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="1900.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="1900.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="1900.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="1900.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="1900.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="1900.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="1900.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="1900.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="1900.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="1900.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="1900.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="1900.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="1900.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="1900.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="1900.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="1900.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="1900.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="1900.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="1900.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="1900.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="1900.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="1900.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="1900.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="1900.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="1900.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="1900.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="1900.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="1900.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="1900.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="1900.00" inputTorque="35000.00" torqueLoss="565.00"/> - <Entry inputSpeed="2100.00" inputTorque="-5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="2100.00" inputTorque="-4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="2100.00" inputTorque="-3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="2100.00" inputTorque="-2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="2100.00" inputTorque="-1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="2100.00" inputTorque="0.00" torqueLoss="40.00"/> - <Entry inputSpeed="2100.00" inputTorque="1000.00" torqueLoss="55.00"/> - <Entry inputSpeed="2100.00" inputTorque="2000.00" torqueLoss="70.00"/> - <Entry inputSpeed="2100.00" inputTorque="3000.00" torqueLoss="85.00"/> - <Entry inputSpeed="2100.00" inputTorque="4000.00" torqueLoss="100.00"/> - <Entry inputSpeed="2100.00" inputTorque="5000.00" torqueLoss="115.00"/> - <Entry inputSpeed="2100.00" inputTorque="6000.00" torqueLoss="130.00"/> - <Entry inputSpeed="2100.00" inputTorque="7000.00" torqueLoss="145.00"/> - <Entry inputSpeed="2100.00" inputTorque="8000.00" torqueLoss="160.00"/> - <Entry inputSpeed="2100.00" inputTorque="9000.00" torqueLoss="175.00"/> - <Entry inputSpeed="2100.00" inputTorque="10000.00" torqueLoss="190.00"/> - <Entry inputSpeed="2100.00" inputTorque="11000.00" torqueLoss="205.00"/> - <Entry inputSpeed="2100.00" inputTorque="12000.00" torqueLoss="220.00"/> - <Entry inputSpeed="2100.00" inputTorque="13000.00" torqueLoss="235.00"/> - <Entry inputSpeed="2100.00" inputTorque="14000.00" torqueLoss="250.00"/> - <Entry inputSpeed="2100.00" inputTorque="15000.00" torqueLoss="265.00"/> - <Entry inputSpeed="2100.00" inputTorque="16000.00" torqueLoss="280.00"/> - <Entry inputSpeed="2100.00" inputTorque="17000.00" torqueLoss="295.00"/> - <Entry inputSpeed="2100.00" inputTorque="18000.00" torqueLoss="310.00"/> - <Entry inputSpeed="2100.00" inputTorque="19000.00" torqueLoss="325.00"/> - <Entry inputSpeed="2100.00" inputTorque="20000.00" torqueLoss="340.00"/> - <Entry inputSpeed="2100.00" inputTorque="21000.00" torqueLoss="355.00"/> - <Entry inputSpeed="2100.00" inputTorque="22000.00" torqueLoss="370.00"/> - <Entry inputSpeed="2100.00" inputTorque="23000.00" torqueLoss="385.00"/> - <Entry inputSpeed="2100.00" inputTorque="24000.00" torqueLoss="400.00"/> - <Entry inputSpeed="2100.00" inputTorque="25000.00" torqueLoss="415.00"/> - <Entry inputSpeed="2100.00" inputTorque="26000.00" torqueLoss="430.00"/> - <Entry inputSpeed="2100.00" inputTorque="27000.00" torqueLoss="445.00"/> - <Entry inputSpeed="2100.00" inputTorque="28000.00" torqueLoss="460.00"/> - <Entry inputSpeed="2100.00" inputTorque="29000.00" torqueLoss="475.00"/> - <Entry inputSpeed="2100.00" inputTorque="30000.00" torqueLoss="490.00"/> - <Entry inputSpeed="2100.00" inputTorque="31000.00" torqueLoss="505.00"/> - <Entry inputSpeed="2100.00" inputTorque="32000.00" torqueLoss="520.00"/> - <Entry inputSpeed="2100.00" inputTorque="33000.00" torqueLoss="535.00"/> - <Entry inputSpeed="2100.00" inputTorque="34000.00" torqueLoss="550.00"/> - <Entry inputSpeed="2100.00" inputTorque="35000.00" torqueLoss="565.00"/> - </TorqueLossMap> - </Data> - <Signature> - <di:Reference URI="#AXL-EC3ohnoh"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>o4nYTajmWKaduxys5ShmnfJbYd23rpxZ01JbuG6dmzU=</di:DigestValue> - </di:Reference> - </Signature> - </v2.6:Axlegear> - <v2.6:AxleWheels xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="AxleWheelsComponentDeclarationType"> - <Data xsi:type="AxleWheelsDataDeclarationType"> - <Axles> - <Axle axleNumber="1" xsi:type="AxleDataDeclarationType"> - <AxleType>VehicleNonDriven</AxleType> - <TwinTyres>false</TwinTyres> - <Steered>true</Steered> - <Tyre> - <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> - <Manufacturer>Generic Wheels Manufacturer</Manufacturer> - <Model>Generic Wheel</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T14:00:00Z</Date> - <AppVersion>Tyre Generation App 1.0</AppVersion> - <Dimension>315/70 R22.5</Dimension> - <RRCDeclared>0.0055</RRCDeclared> - <FzISO>31300</FzISO> - </Data> - <Signature> - <di:Reference URI="#WHL-5432198760-315-70-R22.5"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> - </di:Reference> - </Signature> - </Tyre> - </Axle> - <Axle axleNumber="2" xsi:type="AxleDataDeclarationType"> - <AxleType>VehicleDriven</AxleType> - <TwinTyres>true</TwinTyres> - <Steered>false</Steered> - <Tyre> - <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> - <Manufacturer>Generic Wheels Manufacturer</Manufacturer> - <Model>Generic Wheel</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T14:00:00Z</Date> - <AppVersion>Tyre Generation App 1.0</AppVersion> - <Dimension>315/70 R22.5</Dimension> - <RRCDeclared>0.0063</RRCDeclared> - <FzISO>31300</FzISO> - </Data> - <Signature> - <di:Reference URI="#WHL-5432198760-315-70-R22.5"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> - <di:DigestValue>KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=</di:DigestValue> - </di:Reference> - </Signature> - </Tyre> - </Axle> - </Axles> - </Data> - </v2.6:AxleWheels> - <v2.6:Auxiliaries xsi:type="PrimaryVehicleAuxiliariesComponentDeclarationType"> - <Data xsi:type="PrimaryVehicleAuxiliaryDataDeclarationType"> - <Fan> - <Technology>Electrically driven - Electronically controlled</Technology> - </Fan> - <SteeringPump> - <Technology axleNumber="1">Full electric steering gear</Technology> - </SteeringPump> - <ElectricSystem> - <AlternatorTechnology>default</AlternatorTechnology> - <SmartElectrics>false</SmartElectrics> - </ElectricSystem> - <PneumaticSystem> - <SizeOfAirSupply>Large Supply 2-stage</SizeOfAirSupply> - <Clutch>none</Clutch> - <CompressorRatio>1.000</CompressorRatio> - <SmartCompressionSystem>false</SmartCompressionSystem> - <SmartRegenerationSystem>false</SmartRegenerationSystem> - <AirsuspensionControl>electronically</AirsuspensionControl> - <AdBlueDosing>true</AdBlueDosing> - </PneumaticSystem> - <HVAC> - <AdjustableCoolantThermostat>true</AdjustableCoolantThermostat> - <EngineWasteGasHeatExchanger>true</EngineWasteGasHeatExchanger> - </HVAC> - </Data> - </v2.6:Auxiliaries> - </Components> - </v2.0:Vehicle> -</tns:VectoInputDeclaration> diff --git a/Tools/GraphDrawer/bin/Debug/TestData/Integration/VTPMode/GenericVehicle/CityBus_AT_Ser.RSLT_MANUFACTURER.xml b/Tools/GraphDrawer/bin/Debug/TestData/Integration/VTPMode/GenericVehicle/CityBus_AT_Ser.RSLT_MANUFACTURER.xml deleted file mode 100644 index 3069eb40a95836621bde9462d3ccdbe35bc0b9d6..0000000000000000000000000000000000000000 --- a/Tools/GraphDrawer/bin/Debug/TestData/Integration/VTPMode/GenericVehicle/CityBus_AT_Ser.RSLT_MANUFACTURER.xml +++ /dev/null @@ -1,323 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<?xml-stylesheet href="https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css"?> -<VectoOutput schemaVersion="0.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.5 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoOutputManufacturer.0.5.xsd"> - <Data id="RESULT-bf220343fe634daa8708"> - <Vehicle> - <VIN>1234</VIN> - <LegislativeClass>N2</LegislativeClass> - <VehicleGroup>2</VehicleGroup> - <AxleConfiguration>4x2</AxleConfiguration> - <GrossVehicleMass unit="t">12.0</GrossVehicleMass> - <CurbMassChassis unit="kg">4670</CurbMassChassis> - <PTO>false</PTO> - <Components> - <Engine> - <Model>175kW 6.8l Engine</Model> - <CertificationNumber>1234</CertificationNumber> - <DigestValue>JZmOioDqDbJWb3SWfxl/wSaxs9/WN5mLPh8vtJjs8Vs=</DigestValue> - <RatedPower unit="kW">0</RatedPower> - <IdlingSpeed unit="rpm">650</IdlingSpeed> - <RatedSpeed unit="rpm">2200</RatedSpeed> - <Displacement unit="ltr">6.9</Displacement> - <FuelType>Diesel CI</FuelType> - </Engine> - <Gearbox> - <Model>AT Serial</Model> - <CertificationMethod>Standard values</CertificationMethod> - <DigestValue>XopOvOsapfoRb6Px3dioaWrK2gzG4ICU22YvmCA3YEU=</DigestValue> - <TransmissionType>APT-S</TransmissionType> - <GearsCount>6</GearsCount> - <TransmissionRatioFinalGear>0.620</TransmissionRatioFinalGear> - </Gearbox> - <TorqueConverter> - <Model /> - <CertificationMethod>Standard values</CertificationMethod> - <DigestValue /> - </TorqueConverter> - <Retarder> - <RetarderType>None</RetarderType> - </Retarder> - <Axlegear> - <Model>N.A.</Model> - <CertificationMethod>Standard values</CertificationMethod> - <DigestValue>6SDJDUVv0NR59jxJVNVERv65KBwvwbqAPNuOa1b+3HM=</DigestValue> - <LineType>Single reduction axle</LineType> - <Ratio>6.200</Ratio> - </Axlegear> - <AirDrag> - <Model>N.A.</Model> - <CertificationMethod>Measured</CertificationMethod> - <CertificationNumber>1234</CertificationNumber> - <DigestValue>IkK48GO1AjmbFybyld4/BYI0ymwJTnaglLqwALludTw=</DigestValue> - <CdxA>4.83</CdxA> - </AirDrag> - <AxleWheels> - <Axle axleNumber="1"> - <TyreDimension>265/70 R19.5</TyreDimension> - <TyreCertificationNumber>e12*0815/8051*2017/05E0000*00</TyreCertificationNumber> - <DigestValue>m5RsKXsyG5IZ5K397SrIGJjsuXbmdVOuTmdRY3RSdcM=</DigestValue> - <TyreRRCDeclared>0.0055</TyreRRCDeclared> - <TwinTyres>false</TwinTyres> - </Axle> - <Axle axleNumber="2"> - <TyreDimension>265/70 R19.5</TyreDimension> - <TyreCertificationNumber>e12*0815/8051*2017/05E0000*00</TyreCertificationNumber> - <DigestValue>N8+9tAQ3TWT7He9gM/aHRmcU76J2keixu8ONXE7sMjM=</DigestValue> - <TyreRRCDeclared>0.0063</TyreRRCDeclared> - <TwinTyres>true</TwinTyres> - </Axle> - </AxleWheels> - <Auxiliaries> - <FanTechnology>Hydraulic driven - Constant displacement pump</FanTechnology> - <SteeringPumpTechnology>Variable displacement elec. controlled</SteeringPumpTechnology> - <ElectricSystemTechnology>Standard technology - LED headlights, all</ElectricSystemTechnology> - <PneumaticSystemTechnology>Medium Supply 2-stage + ESS</PneumaticSystemTechnology> - <HVACTechnology>Default</HVACTechnology> - </Auxiliaries> - </Components> - <InputDataSignature> - <di:Reference URI="#VEH-N.A."> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>d1VI47bzCHCfd2bpCt4fZwDwwze/OUK3U0vDY1s1QYQ=</di:DigestValue> - </di:Reference> - </InputDataSignature> - </Vehicle> - <Results> - <Status>success</Status> - <Result status="success"> - <Mission>Long Haul</Mission> - <Distance unit="km">100.185</Distance> - <SimulationParameters> - <TotalVehicleMass unit="kg">11274</TotalVehicleMass> - <Payload unit="kg">1304</Payload> - <FuelType>Diesel CI</FuelType> - </SimulationParameters> - <VehiclePerformance> - <AverageSpeed unit="km/h">79.8</AverageSpeed> - <AverageDrivingSpeed unit="km/h">81.0</AverageDrivingSpeed> - <MinSpeed unit="km/h">0.0</MinSpeed> - <MaxSpeed unit="km/h">85.0</MaxSpeed> - <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> - <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> - <FullLoadDrivingtimePercentage>4.59</FullLoadDrivingtimePercentage> - <GearshiftCount>33</GearshiftCount> - <EngineSpeedDriving> - <Min unit="rpm">683.7</Min> - <Average unit="rpm">1977.1</Average> - <Max unit="rpm">2059.4</Max> - </EngineSpeedDriving> - </VehiclePerformance> - <FuelConsumption unit="g/km">207.6</FuelConsumption> - <FuelConsumption unit="g/t-km">159.2</FuelConsumption> - <FuelConsumption unit="g/m³-km">2.44</FuelConsumption> - <FuelConsumption unit="MJ/km">8.86</FuelConsumption> - <FuelConsumption unit="MJ/t-km">6.80</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.104</FuelConsumption> - <FuelConsumption unit="l/100km">24.8</FuelConsumption> - <FuelConsumption unit="l/t-km">0.190</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00292</FuelConsumption> - <CO2 unit="g/km">649.8</CO2> - <CO2 unit="g/t-km">498.3</CO2> - <CO2 unit="g/m³-km">7.64</CO2> - </Result> - <Result status="success"> - <Mission>Long Haul</Mission> - <Distance unit="km">100.185</Distance> - <SimulationParameters> - <TotalVehicleMass unit="kg">19811</TotalVehicleMass> - <Payload unit="kg">9841</Payload> - <FuelType>Diesel CI</FuelType> - </SimulationParameters> - <VehiclePerformance> - <AverageSpeed unit="km/h">78.3</AverageSpeed> - <AverageDrivingSpeed unit="km/h">79.4</AverageDrivingSpeed> - <MinSpeed unit="km/h">0.0</MinSpeed> - <MaxSpeed unit="km/h">87.5</MaxSpeed> - <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> - <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> - <FullLoadDrivingtimePercentage>17.09</FullLoadDrivingtimePercentage> - <GearshiftCount>39</GearshiftCount> - <EngineSpeedDriving> - <Min unit="rpm">677.3</Min> - <Average unit="rpm">1954.9</Average> - <Max unit="rpm">2192.7</Max> - </EngineSpeedDriving> - </VehiclePerformance> - <FuelConsumption unit="g/km">241.1</FuelConsumption> - <FuelConsumption unit="g/t-km">24.5</FuelConsumption> - <FuelConsumption unit="g/m³-km">2.84</FuelConsumption> - <FuelConsumption unit="MJ/km">10.3</FuelConsumption> - <FuelConsumption unit="MJ/t-km">1.05</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.121</FuelConsumption> - <FuelConsumption unit="l/100km">28.8</FuelConsumption> - <FuelConsumption unit="l/t-km">0.0293</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00339</FuelConsumption> - <CO2 unit="g/km">754.7</CO2> - <CO2 unit="g/t-km">76.7</CO2> - <CO2 unit="g/m³-km">8.88</CO2> - </Result> - <Result status="success"> - <Mission>Regional Delivery</Mission> - <Distance unit="km">100.000</Distance> - <SimulationParameters> - <TotalVehicleMass unit="kg">7174</TotalVehicleMass> - <Payload unit="kg">604</Payload> - <FuelType>Diesel CI</FuelType> - </SimulationParameters> - <VehiclePerformance> - <AverageSpeed unit="km/h">61.1</AverageSpeed> - <AverageDrivingSpeed unit="km/h">70.0</AverageDrivingSpeed> - <MinSpeed unit="km/h">0.0</MinSpeed> - <MaxSpeed unit="km/h">85.0</MaxSpeed> - <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> - <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> - <FullLoadDrivingtimePercentage>1.41</FullLoadDrivingtimePercentage> - <GearshiftCount>127</GearshiftCount> - <EngineSpeedDriving> - <Min unit="rpm">650.0</Min> - <Average unit="rpm">1738.4</Average> - <Max unit="rpm">2059.4</Max> - </EngineSpeedDriving> - </VehiclePerformance> - <FuelConsumption unit="g/km">153.8</FuelConsumption> - <FuelConsumption unit="g/t-km">254.7</FuelConsumption> - <FuelConsumption unit="g/m³-km">3.40</FuelConsumption> - <FuelConsumption unit="MJ/km">6.57</FuelConsumption> - <FuelConsumption unit="MJ/t-km">10.9</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.145</FuelConsumption> - <FuelConsumption unit="l/100km">18.4</FuelConsumption> - <FuelConsumption unit="l/t-km">0.305</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00407</FuelConsumption> - <CO2 unit="g/km">481.4</CO2> - <CO2 unit="g/t-km">797.1</CO2> - <CO2 unit="g/m³-km">10.6</CO2> - </Result> - <Result status="success"> - <Mission>Regional Delivery</Mission> - <Distance unit="km">100.000</Distance> - <SimulationParameters> - <TotalVehicleMass unit="kg">9590</TotalVehicleMass> - <Payload unit="kg">3020</Payload> - <FuelType>Diesel CI</FuelType> - </SimulationParameters> - <VehiclePerformance> - <AverageSpeed unit="km/h">61.0</AverageSpeed> - <AverageDrivingSpeed unit="km/h">69.9</AverageDrivingSpeed> - <MinSpeed unit="km/h">0.0</MinSpeed> - <MaxSpeed unit="km/h">86.1</MaxSpeed> - <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> - <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> - <FullLoadDrivingtimePercentage>3.85</FullLoadDrivingtimePercentage> - <GearshiftCount>127</GearshiftCount> - <EngineSpeedDriving> - <Min unit="rpm">662.6</Min> - <Average unit="rpm">1736.9</Average> - <Max unit="rpm">2086.8</Max> - </EngineSpeedDriving> - </VehiclePerformance> - <FuelConsumption unit="g/km">166.2</FuelConsumption> - <FuelConsumption unit="g/t-km">55.1</FuelConsumption> - <FuelConsumption unit="g/m³-km">3.68</FuelConsumption> - <FuelConsumption unit="MJ/km">7.10</FuelConsumption> - <FuelConsumption unit="MJ/t-km">2.35</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.157</FuelConsumption> - <FuelConsumption unit="l/100km">19.9</FuelConsumption> - <FuelConsumption unit="l/t-km">0.0659</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00440</FuelConsumption> - <CO2 unit="g/km">520.4</CO2> - <CO2 unit="g/t-km">172.3</CO2> - <CO2 unit="g/m³-km">11.5</CO2> - </Result> - <Result status="success"> - <Mission>Urban Delivery</Mission> - <Distance unit="km">99.999</Distance> - <SimulationParameters> - <TotalVehicleMass unit="kg">7174</TotalVehicleMass> - <Payload unit="kg">604</Payload> - <FuelType>Diesel CI</FuelType> - </SimulationParameters> - <VehiclePerformance> - <AverageSpeed unit="km/h">26.6</AverageSpeed> - <AverageDrivingSpeed unit="km/h">35.4</AverageDrivingSpeed> - <MinSpeed unit="km/h">0.0</MinSpeed> - <MaxSpeed unit="km/h">86.4</MaxSpeed> - <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> - <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> - <FullLoadDrivingtimePercentage>3.10</FullLoadDrivingtimePercentage> - <GearshiftCount>1351</GearshiftCount> - <EngineSpeedDriving> - <Min unit="rpm">650.0</Min> - <Average unit="rpm">1133.3</Average> - <Max unit="rpm">2093.8</Max> - </EngineSpeedDriving> - </VehiclePerformance> - <FuelConsumption unit="g/km">183.8</FuelConsumption> - <FuelConsumption unit="g/t-km">304.4</FuelConsumption> - <FuelConsumption unit="g/m³-km">4.07</FuelConsumption> - <FuelConsumption unit="MJ/km">7.85</FuelConsumption> - <FuelConsumption unit="MJ/t-km">13.0</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.174</FuelConsumption> - <FuelConsumption unit="l/100km">22.0</FuelConsumption> - <FuelConsumption unit="l/t-km">0.364</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00486</FuelConsumption> - <CO2 unit="g/km">575.4</CO2> - <CO2 unit="g/t-km">952.7</CO2> - <CO2 unit="g/m³-km">12.7</CO2> - </Result> - <Result status="success"> - <Mission>Urban Delivery</Mission> - <Distance unit="km">99.999</Distance> - <SimulationParameters> - <TotalVehicleMass unit="kg">9590</TotalVehicleMass> - <Payload unit="kg">3020</Payload> - <FuelType>Diesel CI</FuelType> - </SimulationParameters> - <VehiclePerformance> - <AverageSpeed unit="km/h">26.5</AverageSpeed> - <AverageDrivingSpeed unit="km/h">35.2</AverageDrivingSpeed> - <MinSpeed unit="km/h">0.0</MinSpeed> - <MaxSpeed unit="km/h">87.5</MaxSpeed> - <MaxDeceleration unit="m/s²">1.00</MaxDeceleration> - <MaxAcceleration unit="m/s²">1.00</MaxAcceleration> - <FullLoadDrivingtimePercentage>6.91</FullLoadDrivingtimePercentage> - <GearshiftCount>1355</GearshiftCount> - <EngineSpeedDriving> - <Min unit="rpm">650.0</Min> - <Average unit="rpm">1136.5</Average> - <Max unit="rpm">2119.9</Max> - </EngineSpeedDriving> - </VehiclePerformance> - <FuelConsumption unit="g/km">214.4</FuelConsumption> - <FuelConsumption unit="g/t-km">71.0</FuelConsumption> - <FuelConsumption unit="g/m³-km">4.74</FuelConsumption> - <FuelConsumption unit="MJ/km">9.16</FuelConsumption> - <FuelConsumption unit="MJ/t-km">3.03</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.203</FuelConsumption> - <FuelConsumption unit="l/100km">25.6</FuelConsumption> - <FuelConsumption unit="l/t-km">0.0849</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00567</FuelConsumption> - <CO2 unit="g/km">671.1</CO2> - <CO2 unit="g/t-km">222.2</CO2> - <CO2 unit="g/m³-km">14.8</CO2> - </Result> - </Results> - <ApplicationInformation> - <SimulationToolVersion>3.3.0.1250</SimulationToolVersion> - <Date>2018-06-12T11:38:13.0616599Z</Date> - </ApplicationInformation> - </Data> - <Signature> - <di:Reference URI="#RESULT-bf220343fe634daa8708"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>jqnxgZOnQyrwc2f4Is+7/vmp6Kps8zck64lYx2YFU+w=</di:DigestValue> - </di:Reference> - </Signature> -</VectoOutput> \ No newline at end of file diff --git a/VECTO.sln b/VECTO.sln index 8e434e31ea257b6b7293634cc0b7c2fd4ebb028b..a27ebbaf909b63ddb6baff238ef00d3acac4ee12 100644 --- a/VECTO.sln +++ b/VECTO.sln @@ -74,6 +74,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoAPI", "..\VECTO_API_DE EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VECTO3GUI2020", "VECTO3GUI2020\VECTO3GUI2020.csproj", "{7E9172D4-07E3-4077-814E-7117AB2B3E22}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vecto3GUI2020Test", "Vecto3GUI2020Test\Vecto3GUI2020Test.csproj", "{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug PerformanceStats|Any CPU = Debug PerformanceStats|Any CPU @@ -908,6 +910,48 @@ Global {7E9172D4-07E3-4077-814E-7117AB2B3E22}.ReleaseTUG|x64.Build.0 = Release|Any CPU {7E9172D4-07E3-4077-814E-7117AB2B3E22}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU {7E9172D4-07E3-4077-814E-7117AB2B3E22}.ReleaseTUG|x86.Build.0 = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceStats|Any CPU.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceStats|Any CPU.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceStats|x64.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceStats|x64.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceStats|x86.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceStats|x86.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceTrace|Any CPU.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceTrace|Any CPU.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceTrace|x64.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceTrace|x64.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceTrace|x86.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug PerformanceTrace|x86.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|x64.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|x86.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|x86.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.DebugTUG|Any CPU.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.DebugTUG|Any CPU.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.DebugTUG|x64.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.DebugTUG|x64.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.DebugTUG|x86.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.DebugTUG|x86.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|Any CPU.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|x64.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|x64.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|x86.ActiveCfg = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|x86.Build.0 = Debug|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|Any CPU.Build.0 = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|x64.ActiveCfg = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|x64.Build.0 = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|x86.ActiveCfg = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|x86.Build.0 = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|Any CPU.ActiveCfg = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|Any CPU.Build.0 = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|x64.ActiveCfg = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|x64.Build.0 = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|x86.ActiveCfg = Release|Any CPU + {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.ReleaseTUG|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/VECTO.sln.DotSettings b/VECTO.sln.DotSettings index 24395e4cff50468dfca3a81fd3dbf9dde40ed7ce..58f30963b2546225ba4b9e4a0c81f806aa4a2759 100644 --- a/VECTO.sln.DotSettings +++ b/VECTO.sln.DotSettings @@ -1,5 +1,6 @@ <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <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: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> diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index 9bc9ac04993380fb8b7e39ac968c2afc792d6e1d..6e168b0210ca3c2a039590aa76ab39193e94e9b6 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -619,6 +619,7 @@ 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 diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb index 70a4c0d266761e0eb7387b828cdc2c41324e72d5..b934593d01fd1230c40c4500098900893a4b2161 100644 --- a/VECTO/Input Files/Gearbox.vb +++ b/VECTO/Input Files/Gearbox.vb @@ -801,6 +801,7 @@ 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 diff --git a/VECTO/Input Files/MockVehicleInputData.vb b/VECTO/Input Files/MockVehicleInputData.vb index ecc845ec7e8570eed5e94907110905f4fc1ab560..1f7a3f1295683574ba845fb9d97eb31516f93980 100644 --- a/VECTO/Input Files/MockVehicleInputData.vb +++ b/VECTO/Input Files/MockVehicleInputData.vb @@ -19,6 +19,7 @@ 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 diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb index bd5eeabb6cb5a3b0aa879a02e788ffbd684e7669..fe41cc90754dafe8a604b00332836df6131b22a6 100644 --- a/VECTO/Input Files/Vehicle.vb +++ b/VECTO/Input Files/Vehicle.vb @@ -362,6 +362,8 @@ 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 @@ -406,6 +408,9 @@ Public Class Vehicle End Get End Property + Public ReadOnly Property TransferredAirDragArea As SquareMeter Implements IAirdragDeclarationInputData.TransferredAirDragArea + Public ReadOnly Property AirDragArea_0 As SquareMeter Implements IAirdragDeclarationInputData.AirDragArea_0 + Public ReadOnly Property IVehicleEngineeringInputData_Axles As IList(Of IAxleEngineeringInputData) _ Implements IAxlesEngineeringInputData.AxlesEngineering Get diff --git a/VECTO3GUI2020/App.xaml b/VECTO3GUI2020/App.xaml index 44bd4cf47012233781ed3a2b8b7e533696fc39ca..b82b65b9f27c4520086b1634ee67f5893b6906a4 100644 --- a/VECTO3GUI2020/App.xaml +++ b/VECTO3GUI2020/App.xaml @@ -1,19 +1,24 @@ <Application x:Class="VECTO3GUI2020.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:local="clr-namespace:VECTO3GUI2020"> + xmlns:local="clr-namespace:VECTO3GUI2020" + ShutdownMode="OnMainWindowClose"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!-- Add new ResourceDictionaries here--> <ResourceDictionary Source="Resources/ViewModelBindings.xaml"/> <ResourceDictionary Source="Resources/Converter.xaml"/> - <ResourceDictionary Source="Resources/GlobalStyles.xaml"/> - <ResourceDictionary Source="Resources/Colors.xaml"/> + <ResourceDictionary Source="Resources\Styles\ButtonStyles.xaml"/> + <ResourceDictionary Source="Resources/Styles/GlobalStyles.xaml"/> + <ResourceDictionary Source="Resources/Styles/Colors.xaml"/> + <ResourceDictionary Source="Resources/Styles/ButtonStyles.xaml"/> <ResourceDictionary Source="DataGridStyles.xaml"/> - <ResourceDictionary Source="ButtonTemplates.xaml"/> - <ResourceDictionary Source="ButtonStyles.xaml"/> + <ResourceDictionary Source="Resources/Templates/ErrorTemplates.xaml"/> + <ResourceDictionary Source="Resources/ObjectProvider.xaml"/> + <ResourceDictionary Source="Resources/Icons/drawables.xaml"></ResourceDictionary> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> + </Application> diff --git a/VECTO3GUI2020/App.xaml.cs b/VECTO3GUI2020/App.xaml.cs index a74dff5f5731900c42404cb38ef88b35ffc23b58..7475864d68bb7ac004fc538fce28a7ddd985a8b9 100644 --- a/VECTO3GUI2020/App.xaml.cs +++ b/VECTO3GUI2020/App.xaml.cs @@ -48,7 +48,7 @@ namespace VECTO3GUI2020 container.Bind<ISettingsModel>().To<SettingsModel>(); - container.Bind<IDialogHelper>().To<DialogHelper>(); + container.Bind<IDialogHelper>().To<DialogHelper>().InSingletonScope(); container.Bind<IWindowHelper>().To<WindowHelper>(); } @@ -63,6 +63,7 @@ namespace VECTO3GUI2020 var mainwindow = container.Get<MainWindow>(); this.MainWindow = mainwindow; + Application.Current.MainWindow = mainwindow; this.MainWindow.Show(); diff --git a/VECTO3GUI2020/ButtonTemplates.xaml b/VECTO3GUI2020/ButtonTemplates.xaml deleted file mode 100644 index 825650eb6df891a96416069bcd74d751ad009751..0000000000000000000000000000000000000000 --- a/VECTO3GUI2020/ButtonTemplates.xaml +++ /dev/null @@ -1,4 +0,0 @@ -<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - -</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/DataGridStyles.xaml b/VECTO3GUI2020/DataGridStyles.xaml index 8082415bcfc97d6c0f34d4b69ff8cb847dc3a05b..71273451d233039b3dca9760cbe966e2d8dbd21e 100644 --- a/VECTO3GUI2020/DataGridStyles.xaml +++ b/VECTO3GUI2020/DataGridStyles.xaml @@ -1,7 +1,76 @@ <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:local="clr-namespace:VECTO3GUI2020" xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2"> + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2"> - + <Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}"> + <Setter Property="Width" Value="8"/> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="Cursor" Value="SizeWE"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type Thumb}"> + <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="JobListDataGridHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"> + <Setter Property="VerticalContentAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> + <Grid> + <Themes:DataGridHeaderBorder BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}"> + <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Themes:DataGridHeaderBorder> + <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/> + <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + <Setter Property="Padding" Value="4 0 0 0"/> + <Setter Property="Foreground" Value="Black"/> + <Setter Property="Background" Value="White"/> + </Style> + + + <Style x:Key="DataGridCellStyle1" TargetType="{x:Type DataGridCell}"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="Transparent"/> + <Setter Property="BorderThickness" Value="1"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type DataGridCell}"> + <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> + <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> + </Border> + </ControlTemplate> + </Setter.Value> + </Setter> + <Style.Triggers> + <Trigger Property="IsSelected" Value="True"> + <Setter Property="Background" Value="{StaticResource ButtonHighlightColor}"/> + <!-- <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> + <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> --> + <Setter Property="Foreground" Value="Black"/> + <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> + </Trigger> + <Trigger Property="IsKeyboardFocusWithin" Value="True"> + <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/> + </Trigger> + <MultiTrigger> + <MultiTrigger.Conditions> + <Condition Property="IsSelected" Value="true"/> + <Condition Property="Selector.IsSelectionActive" Value="false"/> + </MultiTrigger.Conditions> + <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> + <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> + <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/> + </MultiTrigger> + <Trigger Property="IsEnabled" Value="false"> + <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> + </Trigger> + </Style.Triggers> + </Style> </ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/ConvertedSIDummyCreator.cs b/VECTO3GUI2020/Helper/ConvertedSIDummyCreator.cs new file mode 100644 index 0000000000000000000000000000000000000000..e1486e008581a0e6e0cef599630f72ecc5499aa9 --- /dev/null +++ b/VECTO3GUI2020/Helper/ConvertedSIDummyCreator.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TUGraz.VectoCommon.Utils; + +namespace VECTO3GUI2020.Helper +{ + public static class ConvertedSIDummyCreator + { + public static ConvertedSI CreateMillimeterDummy() + { + return new ConvertedSI(0, "mm"); + } + + } +} diff --git a/VECTO3GUI2020/Helper/Converter/EnumConverter.cs b/VECTO3GUI2020/Helper/Converter/EnumConverter.cs new file mode 100644 index 0000000000000000000000000000000000000000..d5e45906213b5576229869a5d46f94f9a5e4f55f --- /dev/null +++ b/VECTO3GUI2020/Helper/Converter/EnumConverter.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Data; +using Castle.Core.Internal; +using TUGraz.VectoCommon.Utils; + +namespace VECTO3GUI2020.Helper.Converter +{ + class EnumConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value == null) { + return Binding.DoNothing; + } + + Type valueType = value.GetType(); + if (!valueType.IsEnum) { + return value; + } + + var attributes = + valueType.GetField(value.ToString())?.GetCustomAttributes( typeof(GuiLabelAttribute),false); + + GuiLabelAttribute attribute = attributes.IsNullOrEmpty() ? null : attributes.First() as GuiLabelAttribute; + if (attribute == null) { + return value; + } else { + return attribute.Label; + } + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + return value; + } + } +} diff --git a/VECTO3GUI2020/Helper/Converter/MultistageParameterModeToVisibilityConverter.cs b/VECTO3GUI2020/Helper/Converter/MultistageParameterModeToVisibilityConverter.cs new file mode 100644 index 0000000000000000000000000000000000000000..ab76e59ead75e5d6672a564df8ec264dc40ec3ae --- /dev/null +++ b/VECTO3GUI2020/Helper/Converter/MultistageParameterModeToVisibilityConverter.cs @@ -0,0 +1,30 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; +using VECTO3GUI2020.Views.Multistage.CustomControls; + +namespace VECTO3GUI2020.Helper.Converter +{ + public class MultistageParameterModeToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var selectedMode = (MultistageParameterViewMode)value; + if (parameter is MultistageParameterViewMode mode) { + if (selectedMode == mode) { + return Visibility.Visible; + } else { + return Visibility.Collapsed; + } + } else { + throw new ArgumentException("Provide a MultiStageParameter.MODE as parameter!"); + } + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/Converter/NullToUnsetValueConverter.cs b/VECTO3GUI2020/Helper/Converter/NullToUnsetValueConverter.cs new file mode 100644 index 0000000000000000000000000000000000000000..893afb505aeb96bcd11c7ea181c7fd3b6b53b761 --- /dev/null +++ b/VECTO3GUI2020/Helper/Converter/NullToUnsetValueConverter.cs @@ -0,0 +1,28 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace VECTO3GUI2020.Helper.Converter +{ + public class NullToUnsetValueConverter : IValueConverter + { + #region Implementation of IValueConverter + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value == null) { + return DependencyProperty.UnsetValue; + } else { + return value; + } + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs b/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs index ff16a9cd1879495210144c2e44cf3c189c05a3e6..8857067710a76694bdc98b0584885eaad55cbd8f 100644 --- a/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs +++ b/VECTO3GUI2020/Helper/Converter/NullToVisibilityConverter.cs @@ -7,16 +7,30 @@ namespace VECTO3GUI2020.Helper.Converter { class NullToVisibilityConverter : IValueConverter { + /// <summary> + /// + /// </summary> + /// <param name="value"></param> + /// <param name="targetType"></param> + /// <param name="parameter">set to "invert" to invert the result</param> + /// <param name="culture"></param> + /// <returns></returns> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if(value == null) + { + bool invert = parameter as string == "invert"; + if (value == null) { + if (invert) { + return Visibility.Visible; + } return Visibility.Collapsed; } - else - { - return Binding.DoNothing; - } + else { + if (invert) { + return Visibility.Collapsed; + } + return Visibility.Visible; + } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs b/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs index 54701cba7670eff3e1c0a00357e25c191460c6d9..23cb170b8d864236c93d0776fc229da8718df7f5 100644 --- a/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs +++ b/VECTO3GUI2020/Helper/Converter/SIToUnitString.cs @@ -9,36 +9,64 @@ namespace VECTO3GUI2020.Helper.Converter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - - if(value is SI SIValue) - { - if (SIValue.UnitString == "1/s") - { - return "rpm"; - } - return SIValue.UnitString; - } else { - try { - dynamic type = value?.GetType(); - if (type == null) { - return Binding.DoNothing; - } - return type.GetUnitString(); - } catch { - return Binding.DoNothing; - } - + var unitString = getUnitString(value); + if (unitString != null) { + unitString = unitString.Replace("^2", ((char)0xB2).ToString()); + unitString = unitString.Replace("^3", ((char)0xB3).ToString()); + return unitString; + } else { + return Binding.DoNothing; + } - } - return Binding.DoNothing; + //if (value == null) { + // return Binding.DoNothing; + //} + // if(value is SI SIValue) + // { + // if (SIValue.UnitString == "1/s") + // { + // return "rpm"; + // } + // return SIValue.UnitString; + // } - } + //if (value is ConvertedSI convertedSI) { + // return convertedSI.Units; + //} + + //return Binding.DoNothing; + + } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } + + private string getUnitString(object value) + { + if (value == null) { + return null; + } + + + if (value is SI SIValue) + { + if (SIValue.UnitString == "1/s") + { + return "rpm"; + } + return SIValue.UnitString; + } + + if (value is ConvertedSI convertedSI) + { + return convertedSI.Units; + } + + return null; + } } } diff --git a/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs b/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs index 985d766feadc7b6f5e094ead3c00a9b0578e6797..7ed47de2dde5fcc675e1072cdb9be68f339cf7b1 100644 --- a/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs +++ b/VECTO3GUI2020/Helper/Converter/SIValueToStringConverter.cs @@ -13,10 +13,10 @@ namespace VECTO3GUI2020.Helper.Converter class SIValueToStringConverter : IValueConverter { private SI _si; + private ConvertedSI _convertedSI; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { + { if (value == null) { - _si = null; return value; } if(value is SI SIvalue) { @@ -24,22 +24,38 @@ namespace VECTO3GUI2020.Helper.Converter return SIvalue.ToGUIFormat(); } + if (value is ConvertedSI convertedSI) { + _convertedSI = convertedSI; + return convertedSI.ToOutputFormat(showUnit: false, decimals:0); + } - return Binding.DoNothing; - } + return value?.ToString(); + } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { - if (_si == null) { - return value; - } - try { - var newSi = SIUtils.CreateSIValue(_si.GetType(), Double.Parse(value as string)); - return newSi; - } catch (Exception e) { + var hackedString = value as string; + hackedString = hackedString.Replace(",", "."); + //if (!hackedString.Contains(".")) { + // hackedString = hackedString + ".0"; + //} + var doubleVal = Double.Parse(hackedString, CultureInfo.InvariantCulture); + if (_convertedSI != null) { + return new ConvertedSI(doubleVal, _convertedSI.Units); + } + if (_si != null) + { + var newSi = SIUtils.CreateSIValue(_si.GetType(), doubleVal); + return newSi; + } + + } + catch (Exception e) { return value; } + + return value; } } } diff --git a/VECTO3GUI2020/Helper/Converter/XToBoolConverter.cs b/VECTO3GUI2020/Helper/Converter/XToBoolConverter.cs new file mode 100644 index 0000000000000000000000000000000000000000..0e53d526652abe4aff86a34bf81bc29e0484151e --- /dev/null +++ b/VECTO3GUI2020/Helper/Converter/XToBoolConverter.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Windows.Data; + +namespace VECTO3GUI2020.Helper.Converter +{ + /// <summary> + /// Converts bool to bool and object to null; used to avoid errors in collapsed checkboxes; + /// </summary> + public class XToBoolConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + bool? b = value as bool?; + + + return b; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/DialogHelper.cs b/VECTO3GUI2020/Helper/DialogHelper.cs index 1e6c7bdfe2dff2828217665b667bb9fe5f551d00..190866f8a6e2fe1eebb9703db9deca096a41a2d3 100644 --- a/VECTO3GUI2020/Helper/DialogHelper.cs +++ b/VECTO3GUI2020/Helper/DialogHelper.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -14,23 +15,31 @@ namespace VECTO3GUI2020.Helper { public class DialogHelper : IDialogHelper { - private readonly string _defaultInitialDirectory = System.IO.Path.GetDirectoryName( - System.Reflection.Assembly.GetExecutingAssembly().Location); - + private readonly string _defaultInitialDirectory = Settings.Default.DefaultFilePath; #region File and Folder Dialogs private string _xmlFilter = "XML Files (*.xml)|*.xml"; + + private Dictionary<string, string> lastUsedDirectories = new Dictionary<string, string>(); + + private string lastUsedDirectoryFolderPicker = null; private string[] OpenFilesDialog(string filter, string initialDirectory, bool multiselect) { + if (initialDirectory == null) { + initialDirectory = LookUpLastDir(filter); + } + + using (OpenFileDialog fd = new OpenFileDialog { InitialDirectory = initialDirectory ?? _defaultInitialDirectory, Multiselect = multiselect, - Filter = filter + Filter = filter, + RestoreDirectory = true }) { var result = fd.ShowDialog(); - if (result == DialogResult.OK) - { + if (result == DialogResult.OK) { + lastUsedDirectories[filter] = Path.GetDirectoryName(fd.FileName); return fd.FileNames; } } @@ -39,6 +48,16 @@ namespace VECTO3GUI2020.Helper return null; } + private string LookUpLastDir(string filter) + { + string lastUsedDirectory = null; + if (lastUsedDirectories.TryGetValue(filter, out lastUsedDirectory)) { + return lastUsedDirectory; + } else { + return Settings.Default.DefaultFilePath; + } + } + public string OpenFileDialog(string filter = "All files (*.*)|*.*", string initialDirectory = null) { return OpenFilesDialog(filter, initialDirectory)?[0]; @@ -49,12 +68,19 @@ namespace VECTO3GUI2020.Helper return OpenFilesDialog(filter, initialDirectory, true); } + public string OpenXMLFileDialog() + { + return OpenXMLFileDialog(null); + } + + + public string[] OpenXMLFilesDialog(string initialDirectory) { return OpenFilesDialog(_xmlFilter, initialDirectory); } - public string OpenXMLFileDialog(string initialDirectory = null) + public string OpenXMLFileDialog(string initialDirectory) { return OpenFilesDialog(_xmlFilter, initialDirectory, false)?[0]; } @@ -62,14 +88,20 @@ namespace VECTO3GUI2020.Helper public string OpenFolderDialog(string initialDirectory = null) { + + if (initialDirectory == null) { + initialDirectory = lastUsedDirectoryFolderPicker; + } using (var dialog = new CommonOpenFileDialog()) { dialog.InitialDirectory = initialDirectory; dialog.IsFolderPicker = true; + dialog.Multiselect = false; + dialog.RestoreDirectory = true; var result = dialog.ShowDialog(); - if (result == CommonFileDialogResult.Ok) - { + if (result == CommonFileDialogResult.Ok) { + lastUsedDirectoryFolderPicker = Path.GetDirectoryName(dialog.FileName); return dialog.FileName; } } @@ -138,7 +170,9 @@ namespace VECTO3GUI2020.Helper /// </summary> /// <param name="initialDirectory">If no directory is specified the location of the assembly is used</param> /// <returns></returns> - string OpenXMLFileDialog(string initialDirectory = null); + string OpenXMLFileDialog(string initialDirectory); + + string OpenXMLFileDialog(); /// <summary> diff --git a/VECTO3GUI2020/Helper/Exceptions.cs b/VECTO3GUI2020/Helper/Exceptions.cs new file mode 100644 index 0000000000000000000000000000000000000000..6b8ce5755c34720b168c921200c5e7b7185a6828 --- /dev/null +++ b/VECTO3GUI2020/Helper/Exceptions.cs @@ -0,0 +1,26 @@ +using System; + +namespace VECTO3GUI2020.Helper +{ + /// <summary> + /// Exception to notify the view that a field is not allowed to be empty. Should be ignored by the debugger + /// </summary> + public class VectoEmptyFieldException : Exception + { + public VectoEmptyFieldException() + : base("Field must not be empty") + { + + } + + public VectoEmptyFieldException(string message) + : base(message) + { + } + + public VectoEmptyFieldException(string message, Exception inner) + : base(message, inner) + { + } + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/XMLExtension.cs b/VECTO3GUI2020/Helper/XMLExtension.cs index e9e391f6569f1fea53e142d13abf5be4a6ca1a82..ecfbba62efee447803d1bec4f8cb22d7f5387dab 100644 --- a/VECTO3GUI2020/Helper/XMLExtension.cs +++ b/VECTO3GUI2020/Helper/XMLExtension.cs @@ -1,9 +1,13 @@ using System; using System.Diagnostics; +using System.Windows.Forms; +using System.Xml; using System.Xml.Linq; +using System.Xml.Schema; using Castle.Core.Resource; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing.Impl; using VECTO3GUI2020.Util.XML; using VECTO3GUI2020.Util.XML.Interfaces; @@ -18,7 +22,7 @@ namespace VECTO3GUI2020.Helper { var di = XMLNamespaces.Di; var signatureElement = new XElement(nameSpace + XMLNames.DI_Signature); - signatureElement.Add(new XElement(di + XMLNames.DI_Signature_Reference, new XAttribute(XMLNames.DI_Signature_Reference_URI_Attr, uri))); + signatureElement.Add(new XElement(di + XMLNames.DI_Signature_Reference, new XAttribute(XMLNames.DI_Signature_Reference_URI_Attr, digestData.Reference))); var refElement = signatureElement.FirstNode as XElement; refElement?.Add(new XElement(di + XMLNames.DI_Signature_Reference_Transforms)); @@ -34,10 +38,70 @@ namespace VECTO3GUI2020.Helper if (hash) { throw new NotImplementedException("Hashing not implemented"); } - refElement?.Add(new XElement(di + XMLNames.DI_Signature_Reference_DigestValue, "")); + refElement?.Add(new XElement(di + XMLNames.DI_Signature_Reference_DigestValue, digestData.DigestValue)); return signatureElement; } - } + + + public static XmlDocument ToXmlDocument(this XDocument xDocument) + { + var xmlDocument = new XmlDocument(); + using (var reader = xDocument.CreateReader()) + { + xmlDocument.Load(reader); + } + + var xDeclaration = xDocument.Declaration; + if (xDeclaration != null) + { + var xmlDeclaration = xmlDocument.CreateXmlDeclaration( + xDeclaration.Version, + xDeclaration.Encoding, + xDeclaration.Standalone); + + xmlDocument.InsertBefore(xmlDeclaration, xmlDocument.FirstChild); + } + + return xmlDocument; + } + + public static XmlNode ToXmlNode(this XElement element) + { + using (XmlReader xmlReader = element.CreateReader()) + { + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(xmlReader); + return xmlDocument; + } + } + + public static string GetVersion(this XElement element) + { + return element.ToXmlNode().GetVersion(); + } + + public static string GetVersion(this XmlNode node) + { + if (node == null) + { + return null; + } + var version = XMLHelper.GetXsdType(node.SchemaInfo.SchemaType); + if (string.IsNullOrWhiteSpace(version)) + { + version = XMLHelper.GetVersionFromNamespaceUri((node.SchemaInfo.SchemaType?.Parent as XmlSchemaElement)?.QualifiedName.Namespace); + } + + return version; + } + + + public static string ToXmlFormat(this DateTime dateTime) + { + return XmlConvert.ToString(dateTime, XmlDateTimeSerializationMode.Utc); + } + +} } \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/XmlHelper.cs b/VECTO3GUI2020/Helper/XmlHelper.cs new file mode 100644 index 0000000000000000000000000000000000000000..2db50eed495027b1c6d4bd7d60bad969eb4fd559 --- /dev/null +++ b/VECTO3GUI2020/Helper/XmlHelper.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using System.Xml.Schema; +using Castle.Core.Internal; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCore.Utils; +using VECTO3GUI2020.Util.XML; +using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; + +namespace VECTO3GUI2020.Helper +{ + public static class XmlHelper + { + public static XmlDocument ReadXmlDocument(string filePath) + { + if (filePath.IsNullOrEmpty()) + return null; + + var xmlDocument = new XmlDocument(); + + + xmlDocument.Load(filePath); + + return xmlDocument; + } + + + public static XmlNodeList GetComponentNodes(XmlDocument xmlDocument, string parentNode, string nodeName) + { + if (xmlDocument == null || parentNode.IsNullOrEmpty() || nodeName.IsNullOrEmpty()) + return null; + + return xmlDocument.SelectNodes($"//*[local-name()='{parentNode}']//*[local-name()='{nodeName}']"); + } + + public static bool ValidateXDocument(XDocument xDocument, Action<bool> resultAction = null, + Action<XmlSeverityType, ValidationEvent> validationErrorAction = null) + { + var xmlDocument = xDocument.ToXmlDocument(); + if (xmlDocument == null) + return false; + + var documentType = XMLHelper.GetDocumentType(xmlDocument.DocumentElement.LocalName); + if (documentType == null) + { + throw new VectoException("unknown xml file! {0}", xmlDocument.DocumentElement.LocalName); + } + + var validator = new XMLValidator(xmlDocument, resultAction, validationErrorAction); + return validator.ValidateXML(documentType.Value); ; + } + + public static string GetXmlAbsoluteFilePath(string baseUri) + { + if (baseUri == null) + return null; + + return Uri.UnescapeDataString(new Uri(baseUri).AbsolutePath); + } + + public static XDocument CreateWrapperDocument(this XElement xElement, XNamespace defaultNamespace, + XmlDocumentType docType = XmlDocumentType.DeclarationJobData) + { + var prefixMap = new Dictionary<string, XNamespace>(); + + var xDocument = new XDocument(); + var rootElement = new XElement(XMLNamespaces.Tns_v20 + XMLNames.VectoInputDeclaration, new XAttribute(XNamespace.Xmlns + "tns", + XMLNamespaces.Tns_v20)); + Debug.WriteLine(rootElement.ToString()); + + rootElement.Add(new XAttribute("xmlns", defaultNamespace)); + rootElement.Add(new XAttribute("schemaVersion", XMLHelper.GetVersionFromNamespaceUri(defaultNamespace))); + + xDocument.Add(rootElement); + + + + Dictionary<string, XNamespace> nsAttributes = new Dictionary<string, XNamespace> { + ["xsi"] = XMLNamespaces.Xsi + }; + + foreach (var element in xElement.DescendantsAndSelf()) { + var ns = element.Name.Namespace; + if (ns != defaultNamespace) { + var prefix = XMLNamespaces.GetPrefix(ns); + if(prefix != null) + nsAttributes[prefix] = ns; + } + } + + + foreach (var nsAttribute in nsAttributes) { + rootElement.Add(new XAttribute(XNamespace.Xmlns + nsAttribute.Key, nsAttribute.Value)); + } + + var LocalSchemaLocation = @"V:\VectoCore\VectoCore\Resources\XSD\"; + + rootElement.Add(new XAttribute(XMLNamespaces.Xsi + "schemaLocation", + $"{XMLNamespaces.DeclarationRootNamespace} {LocalSchemaLocation}VectoDeclarationJob.xsd")); + + + rootElement.Add(xElement); + + return xDocument; + } + } +} diff --git a/VECTO3GUI2020/MainWindow.xaml b/VECTO3GUI2020/MainWindow.xaml index afeefc53a4804071803ec61adb0eae8a52df5e12..a0a3a80ffade2c760efa51bf512dc669a704c3fa 100644 --- a/VECTO3GUI2020/MainWindow.xaml +++ b/VECTO3GUI2020/MainWindow.xaml @@ -4,7 +4,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:VECTO3GUI2020" - xmlns:Implementation="clr-namespace:VECTO3GUI2020.ViewModel.Implementation" x:Class="VECTO3GUI2020.MainWindow" + xmlns:Implementation="clr-namespace:VECTO3GUI2020.ViewModel.Implementation" d:DataContext="{d:DesignInstance Type=Implementation:MainWindowViewModel}" x:Class="VECTO3GUI2020.MainWindow" mc:Ignorable="d" Title="Vecto" Height="450" Width="820" WindowStartupLocation="CenterScreen"> @@ -16,27 +16,28 @@ <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> - <RowDefinition Height="20"/> + <RowDefinition Height="40"/> <RowDefinition Height="1.5*"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> - <Grid Grid.Row="0" Margin="0,0,0,0"> + <Grid Grid.Row="0"> <StackPanel Orientation="Vertical"> <Menu IsMainMenu="True"> - <MenuItem Header="File" VerticalAlignment="Center"> + <MenuItem Header="File" VerticalAlignment="Stretch"> <MenuItem Header="Settings" Command="{Binding OpenSettings}"/> <MenuItem Header="New File" Command="{Binding NewInterimFile}"/> + <MenuItem Header="Open File" Command="{Binding AddJob}"/> </MenuItem> </Menu> </StackPanel> </Grid> - <Grid Grid.Row="1" Margin="0,0,0,0"> + <Grid Grid.Row="1" Margin="0,4,0,0"> <ContentControl Content="{Binding CurrentViewModelTop}"/> </Grid> - <Grid Grid.Row="2" Visibility="Collapsed" Margin="0,0,0,0"> + <Grid Grid.Row="2" Margin="0,0,0,0"> <ContentControl Content="{Binding CurrentViewModelBottom}"/> </Grid> diff --git a/VECTO3GUI2020/Ninject/FactoryModule.cs b/VECTO3GUI2020/Ninject/FactoryModule.cs index 7e127993df48a043e1437ae08ca09501a7f84bf9..8dffd4b7be9e5c7ca138b2a6952be477c2b709b8 100644 --- a/VECTO3GUI2020/Ninject/FactoryModule.cs +++ b/VECTO3GUI2020/Ninject/FactoryModule.cs @@ -18,8 +18,9 @@ namespace VECTO3GUI2020.Ninject { public override void Load() { - Bind<IXMLWriterFactory>().ToFactory(() => new UseFirstArgumentTypeAsNameInstanceProvider()); - Bind<IMultiStageViewModelFactory>().ToFactory(() => new UseFirstArgumentAsNameInstanceProvider(skipFirstArgument: true, fallback: true)); + Bind<IXMLWriterFactory>().ToFactory(() => new UseFirstArgumentTypeAsNameInstanceProvider(fallback:true)); + //Bind<IMultiStageViewModelFactory>().ToFactory(() => new UseFirstArgumentAsNameInstanceProvider(skipFirstArgument: true, fallback: true)); + Bind<IMultiStageViewModelFactory>().ToFactory(); Bind<IJobEditViewModelFactory>().ToFactory(() => new UseFirstArgumentTypeAsNameInstanceProvider()); Bind<IDocumentViewModelFactory>().ToFactory(() => new UseFirstArgumentAsNameInstanceProvider(false)); Bind<IComponentViewModelFactory>().ToFactory( diff --git a/VECTO3GUI2020/Ninject/IMultistageDependencies.cs b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs new file mode 100644 index 0000000000000000000000000000000000000000..bc5671491c7ab8d4f854be1583524a0e9e892288 --- /dev/null +++ b/VECTO3GUI2020/Ninject/IMultistageDependencies.cs @@ -0,0 +1,24 @@ +using System; +using System.Windows.Forms; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; +using TUGraz.VectoCore.Utils; +using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Util.XML.Interfaces; +using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; + +namespace VECTO3GUI2020.Ninject +{ + public interface IMultistageDependencies + { + Lazy<IDialogHelper> DialogHelperLazy { get; } + Lazy<IXMLInputDataReader> InputDataReaderLazy { get; } + + IDialogHelper DialogHelper { get; } + IXMLInputDataReader InputDataReader { get; } + IDeclarationInjectFactory InjectFactory { get; } + IComponentViewModelFactory ComponentViewModelFactory { get; } + + IXMLWriterFactory XMLWriterFactory { get; } + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs new file mode 100644 index 0000000000000000000000000000000000000000..9468ee481300a52eee98ec43fb30c03f56d4cb59 --- /dev/null +++ b/VECTO3GUI2020/Ninject/MultistageLazyDependencies.cs @@ -0,0 +1,54 @@ +using System; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; +using TUGraz.VectoCore.Utils; +using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Util.XML.Interfaces; +using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; +using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; + +namespace VECTO3GUI2020.Ninject +{ + public class MultistageLazyDependencies : IMultistageDependencies + { + + private readonly Lazy<IDialogHelper> _dialogHelper; + public Lazy<IDialogHelper> DialogHelperLazy => _dialogHelper; + public IDialogHelper DialogHelper => _dialogHelper.Value; + + + private readonly Lazy<IXMLInputDataReader> _inputDataReader; + public Lazy<IXMLInputDataReader> InputDataReaderLazy => _inputDataReader; + public IXMLInputDataReader InputDataReader => _inputDataReader.Value; + + //private readonly Lazy<XMLValidator> _xmlValidator = new Lazy<XMLValidator>(() => {return }); + //public Lazy<XMLValidator> XMLValidatorLazy => _xmlValidator; + //public XMLValidator XMLValidator => _xmlValidator.Value; + + + public IDeclarationInjectFactory InjectFactory => _injectFactory.Value; + public IComponentViewModelFactory ComponentViewModelFactory => _componentViewModelFactory.Value; + public IXMLWriterFactory XMLWriterFactory => _xmlWriterFactory.Value; + + private Lazy<IXMLWriterFactory> _xmlWriterFactory; + + + private readonly Lazy<IDeclarationInjectFactory> _injectFactory; + private readonly Lazy<IComponentViewModelFactory> _componentViewModelFactory; + public MultistageLazyDependencies( + Lazy<IDialogHelper> dialogHelper, + Lazy<IXMLInputDataReader> inputDataReader, + Lazy<IDeclarationInjectFactory> injectFactory, + Lazy<IComponentViewModelFactory> componentViewModelFactory, + Lazy<IXMLWriterFactory> xmlWriterFactory, + Lazy<IMultiStageViewModelFactory> viewModelFactory) + { + _dialogHelper = dialogHelper; + _inputDataReader = inputDataReader; + _componentViewModelFactory = componentViewModelFactory; + _injectFactory = injectFactory; + _xmlWriterFactory = xmlWriterFactory; + + } + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Ninject/MultistageModule.cs b/VECTO3GUI2020/Ninject/MultistageModule.cs index 9a3de4889e5aac7a009fee69d8fd8c3f126fa8ce..c36e13772ffe0bc172f7b9eb92b7bbd1cc8c750b 100644 --- a/VECTO3GUI2020/Ninject/MultistageModule.cs +++ b/VECTO3GUI2020/Ninject/MultistageModule.cs @@ -3,8 +3,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Automation.Peers; using Ninject.Extensions.Factory; using Ninject.Modules; +using TUGraz.VectoCore.Models.SimulationComponent; using VECTO3GUI2020.Ninject.Util; using VECTO3GUI2020.ViewModel.Interfaces.Common; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; @@ -18,19 +20,25 @@ namespace VECTO3GUI2020.Ninject public override void Load() { - Bind<IViewModelBase>().To<NewMultiStageJobViewModel>(); + Bind<IViewModelBase>().To<NewMultiStageJobViewModel>(). + NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetNewMultistageJobViewModel()); + Bind<IMultiStageJobViewModel>().To<MultiStageJobViewModel_v0_1>(). + NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetMultiStageJobViewModel(null)); - Bind<IMultiStageJobViewModel>().To<MultiStageJobViewModel_v0_1>() - .Named(MultiStageJobViewModel_v0_1.INPUTPROVIDERTYPE); + Bind<IVehicleViewModel>().To<DeclarationInterimStageBusVehicleViewModel_v2_8>(). + NamedLikeFactoryMethod((IMultiStageViewModelFactory f)=>f.GetInterimStageVehicleViewModel()); - Bind<IVehicleViewModel>().To<DeclarationInterimStageBusVehicleViewModel_v2_8>() - .Named(DeclarationInterimStageBusVehicleViewModel_v2_8.INPUTPROVIDERTYPE); + Bind<IManufacturingStageViewModel>().To<ManufacturingStageViewModel_v0_1>(). + NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetManufacturingStageViewModel(null)); - Bind<IManufacturingStageViewModel>().To<ManufacturingStageViewModel_v0_1>() - .Named(ManufacturingStageViewModel_v0_1.INPUTPROVIDERTYPE); + Bind<IMultistageAirdragViewModel>().To<MultistageAirdragViewModel>(). + NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetMultistageAirdragViewModel()); - Bind<IMultistageAirdragViewModel>().To<MultistageAirdragViewModel>(); + Bind<IMultistageAuxiliariesViewModel>().To<MultistageAuxiliariesViewModel>(). + NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetAuxiliariesViewModel(null)); + + Bind<IMultistageDependencies>().To<MultistageLazyDependencies>(); } } } diff --git a/VECTO3GUI2020/Ninject/Vehicle/ComponentModule.cs b/VECTO3GUI2020/Ninject/Vehicle/ComponentModule.cs index f065c4e26e315c38da7b5e11167467b06a238fc4..edbbce58125ff6731a7d06984f093e08a7a5814c 100644 --- a/VECTO3GUI2020/Ninject/Vehicle/ComponentModule.cs +++ b/VECTO3GUI2020/Ninject/Vehicle/ComponentModule.cs @@ -35,6 +35,7 @@ namespace VECTO3GUI2020.Ninject.Vehicle Bind<IComponentViewModel>().To<AirDragViewModel_v1_0>().Named(AirDragViewModel_v1_0.VERSION); Bind<IComponentViewModel>().To<AirDragViewModel_v2_0>().Named(AirDragViewModel_v2_0.VERSION); + Bind<IComponentViewModel>().To<AirDragViewModel_v2_8>().Named(AirDragViewModel_v2_8.VERSION); Bind<IComponentViewModel>().To<AxleWheelsViewModel_v1_0>().Named(AxleWheelsViewModel_v1_0.VERSION); Bind<IComponentViewModel>().To<AxleWheelsViewModel_v2_0>().Named(AxleWheelsViewModel_v2_0.VERSION); diff --git a/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs b/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs index 9791fa3362f830d1daddf78578b56ce5e00fa80d..9c9912f5a1c1c854eea2f24d8ddf0fe621aef886 100644 --- a/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs +++ b/VECTO3GUI2020/Ninject/XMLWriterFactoryModule.cs @@ -44,6 +44,11 @@ namespace VECTO3GUI2020.Ninject sv => Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_0>().Named(sv)); + Array.ForEach( + XMLVehicleWriter_v2_8.SUPPORTEDVERSIONS, + sv => + Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_8>().Named(sv)); + Array.ForEach( XMLComponentsWriter_v1_0.SUPPORTED_VERSIONS, sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v1_0>().Named(sv)); @@ -95,6 +100,8 @@ namespace VECTO3GUI2020.Ninject XMLAirDragWriter_v2_0.SUPPORTED_VERSIONS, sv => Bind<IXMLComponentWriter>().To<XMLAirDragWriter_v2_0>().Named(sv)); + Bind<IXMLBusAuxiliariesWriter>().To<XMLBusAuxiliariesWriterMultistage>(); + } } } diff --git a/VECTO3GUI2020/Properties/Annotations.cs b/VECTO3GUI2020/Properties/Annotations.cs new file mode 100644 index 0000000000000000000000000000000000000000..7e0233fb501b144de5f328486cb484e776e71d70 --- /dev/null +++ b/VECTO3GUI2020/Properties/Annotations.cs @@ -0,0 +1,1236 @@ +/* MIT License + +Copyright (c) 2016 JetBrains http://www.jetbrains.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. */ + +using System; +// ReSharper disable InheritdocConsiderUsage + +#pragma warning disable 1591 +// ReSharper disable UnusedMember.Global +// ReSharper disable MemberCanBePrivate.Global +// ReSharper disable UnusedAutoPropertyAccessor.Global +// ReSharper disable IntroduceOptionalParameters.Global +// ReSharper disable MemberCanBeProtected.Global +// ReSharper disable InconsistentNaming + +namespace VECTO3GUI2020.Annotations +{ + /// <summary> + /// Indicates that the value of the marked element could be <c>null</c> sometimes, + /// so checking for <c>null</c> is required before its usage. + /// </summary> + /// <example><code> + /// [CanBeNull] object Test() => null; + /// + /// void UseTest() { + /// var p = Test(); + /// var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | + AttributeTargets.Delegate | AttributeTargets.Field | AttributeTargets.Event | + AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.GenericParameter)] + public sealed class CanBeNullAttribute : Attribute { } + + /// <summary> + /// Indicates that the value of the marked element can never be <c>null</c>. + /// </summary> + /// <example><code> + /// [NotNull] object Foo() { + /// return null; // Warning: Possible 'null' assignment + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | + AttributeTargets.Delegate | AttributeTargets.Field | AttributeTargets.Event | + AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.GenericParameter)] + public sealed class NotNullAttribute : Attribute { } + + /// <summary> + /// Can be applied to symbols of types derived from IEnumerable as well as to symbols of Task + /// and Lazy classes to indicate that the value of a collection item, of the Task.Result property + /// or of the Lazy.Value property can never be null. + /// </summary> + /// <example><code> + /// public void Foo([ItemNotNull]List<string> books) + /// { + /// foreach (var book in books) { + /// if (book != null) // Warning: Expression is always true + /// Console.WriteLine(book.ToUpper()); + /// } + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | + AttributeTargets.Delegate | AttributeTargets.Field)] + public sealed class ItemNotNullAttribute : Attribute { } + + /// <summary> + /// Can be applied to symbols of types derived from IEnumerable as well as to symbols of Task + /// and Lazy classes to indicate that the value of a collection item, of the Task.Result property + /// or of the Lazy.Value property can be null. + /// </summary> + /// <example><code> + /// public void Foo([ItemCanBeNull]List<string> books) + /// { + /// foreach (var book in books) + /// { + /// // Warning: Possible 'System.NullReferenceException' + /// Console.WriteLine(book.ToUpper()); + /// } + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | + AttributeTargets.Delegate | AttributeTargets.Field)] + public sealed class ItemCanBeNullAttribute : Attribute { } + + /// <summary> + /// Indicates that the marked method builds string by the format pattern and (optional) arguments. + /// The parameter, which contains the format string, should be given in constructor. The format string + /// should be in <see cref="string.Format(IFormatProvider,string,object[])"/>-like form. + /// </summary> + /// <example><code> + /// [StringFormatMethod("message")] + /// void ShowError(string message, params object[] args) { /* do something */ } + /// + /// void Foo() { + /// ShowError("Failed: {0}"); // Warning: Non-existing argument in format string + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Constructor | AttributeTargets.Method | + AttributeTargets.Property | AttributeTargets.Delegate)] + public sealed class StringFormatMethodAttribute : Attribute + { + /// <param name="formatParameterName"> + /// Specifies which parameter of an annotated method should be treated as the format string + /// </param> + public StringFormatMethodAttribute([NotNull] string formatParameterName) + { + FormatParameterName = formatParameterName; + } + + [NotNull] public string FormatParameterName { get; } + } + + /// <summary> + /// Use this annotation to specify a type that contains static or const fields + /// with values for the annotated property/field/parameter. + /// The specified type will be used to improve completion suggestions. + /// </summary> + /// <example><code> + /// namespace TestNamespace + /// { + /// public class Constants + /// { + /// public static int INT_CONST = 1; + /// public const string STRING_CONST = "1"; + /// } + /// + /// public class Class1 + /// { + /// [ValueProvider("TestNamespace.Constants")] public int myField; + /// public void Foo([ValueProvider("TestNamespace.Constants")] string str) { } + /// + /// public void Test() + /// { + /// Foo(/*try completion here*/);// + /// myField = /*try completion here*/ + /// } + /// } + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Field, + AllowMultiple = true)] + public sealed class ValueProviderAttribute : Attribute + { + public ValueProviderAttribute([NotNull] string name) + { + Name = name; + } + + [NotNull] public string Name { get; } + } + + /// <summary> + /// Indicates that the integral value falls into the specified interval. + /// It's allowed to specify multiple non-intersecting intervals. + /// Values of interval boundaries are inclusive. + /// </summary> + /// <example><code> + /// void Foo([ValueRange(0, 100)] int value) { + /// if (value == -1) { // Warning: Expression is always 'false' + /// ... + /// } + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property | + AttributeTargets.Method | AttributeTargets.Delegate, + AllowMultiple = true)] + public sealed class ValueRangeAttribute : Attribute + { + public object From { get; } + public object To { get; } + + public ValueRangeAttribute(long from, long to) + { + From = from; + To = to; + } + + public ValueRangeAttribute(ulong from, ulong to) + { + From = from; + To = to; + } + + public ValueRangeAttribute(long value) + { + From = To = value; + } + + public ValueRangeAttribute(ulong value) + { + From = To = value; + } + } + + /// <summary> + /// Indicates that the integral value never falls below zero. + /// </summary> + /// <example><code> + /// void Foo([NonNegativeValue] int value) { + /// if (value == -1) { // Warning: Expression is always 'false' + /// ... + /// } + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property | + AttributeTargets.Method | AttributeTargets.Delegate)] + public sealed class NonNegativeValueAttribute : Attribute { } + + /// <summary> + /// Indicates that the function argument should be a string literal and match one + /// of the parameters of the caller function. For example, ReSharper annotates + /// the parameter of <see cref="System.ArgumentNullException"/>. + /// </summary> + /// <example><code> + /// void Foo(string param) { + /// if (param == null) + /// throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol + /// } + /// </code></example> + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class InvokerParameterNameAttribute : Attribute { } + + /// <summary> + /// Indicates that the method is contained in a type that implements + /// <c>System.ComponentModel.INotifyPropertyChanged</c> interface and this method + /// is used to notify that some property value changed. + /// </summary> + /// <remarks> + /// The method should be non-static and conform to one of the supported signatures: + /// <list> + /// <item><c>NotifyChanged(string)</c></item> + /// <item><c>NotifyChanged(params string[])</c></item> + /// <item><c>NotifyChanged{T}(Expression{Func{T}})</c></item> + /// <item><c>NotifyChanged{T,U}(Expression{Func{T,U}})</c></item> + /// <item><c>SetProperty{T}(ref T, T, string)</c></item> + /// </list> + /// </remarks> + /// <example><code> + /// public class Foo : INotifyPropertyChanged { + /// public event PropertyChangedEventHandler PropertyChanged; + /// + /// [NotifyPropertyChangedInvocator] + /// protected virtual void NotifyChanged(string propertyName) { ... } + /// + /// string _name; + /// + /// public string Name { + /// get { return _name; } + /// set { _name = value; NotifyChanged("LastName"); /* Warning */ } + /// } + /// } + /// </code> + /// Examples of generated notifications: + /// <list> + /// <item><c>NotifyChanged("Property")</c></item> + /// <item><c>NotifyChanged(() => Property)</c></item> + /// <item><c>NotifyChanged((VM x) => x.Property)</c></item> + /// <item><c>SetProperty(ref myField, value, "Property")</c></item> + /// </list> + /// </example> + [AttributeUsage(AttributeTargets.Method)] + public sealed class NotifyPropertyChangedInvocatorAttribute : Attribute + { + public NotifyPropertyChangedInvocatorAttribute() { } + public NotifyPropertyChangedInvocatorAttribute([NotNull] string parameterName) + { + ParameterName = parameterName; + } + + [CanBeNull] public string ParameterName { get; } + } + + /// <summary> + /// Describes dependency between method input and output. + /// </summary> + /// <syntax> + /// <p>Function Definition Table syntax:</p> + /// <list> + /// <item>FDT ::= FDTRow [;FDTRow]*</item> + /// <item>FDTRow ::= Input => Output | Output <= Input</item> + /// <item>Input ::= ParameterName: Value [, Input]*</item> + /// <item>Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value}</item> + /// <item>Value ::= true | false | null | notnull | canbenull</item> + /// </list> + /// If the method has a single input parameter, its name could be omitted.<br/> + /// Using <c>halt</c> (or <c>void</c>/<c>nothing</c>, which is the same) for the method output + /// means that the method doesn't return normally (throws or terminates the process).<br/> + /// Value <c>canbenull</c> is only applicable for output parameters.<br/> + /// You can use multiple <c>[ContractAnnotation]</c> for each FDT row, or use single attribute + /// with rows separated by semicolon. There is no notion of order rows, all rows are checked + /// for applicability and applied per each program state tracked by the analysis engine.<br/> + /// </syntax> + /// <examples><list> + /// <item><code> + /// [ContractAnnotation("=> halt")] + /// public void TerminationMethod() + /// </code></item> + /// <item><code> + /// [ContractAnnotation("null <= param:null")] // reverse condition syntax + /// public string GetName(string surname) + /// </code></item> + /// <item><code> + /// [ContractAnnotation("s:null => true")] + /// public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty() + /// </code></item> + /// <item><code> + /// // A method that returns null if the parameter is null, + /// // and not null if the parameter is not null + /// [ContractAnnotation("null => null; notnull => notnull")] + /// public object Transform(object data) + /// </code></item> + /// <item><code> + /// [ContractAnnotation("=> true, result: notnull; => false, result: null")] + /// public bool TryParse(string s, out Person result) + /// </code></item> + /// </list></examples> + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public sealed class ContractAnnotationAttribute : Attribute + { + public ContractAnnotationAttribute([NotNull] string contract) + : this(contract, false) { } + + public ContractAnnotationAttribute([NotNull] string contract, bool forceFullStates) + { + Contract = contract; + ForceFullStates = forceFullStates; + } + + [NotNull] public string Contract { get; } + + public bool ForceFullStates { get; } + } + + /// <summary> + /// Indicates whether the marked element should be localized. + /// </summary> + /// <example><code> + /// [LocalizationRequiredAttribute(true)] + /// class Foo { + /// string str = "my string"; // Warning: Localizable string + /// } + /// </code></example> + [AttributeUsage(AttributeTargets.All)] + public sealed class LocalizationRequiredAttribute : Attribute + { + public LocalizationRequiredAttribute() : this(true) { } + + public LocalizationRequiredAttribute(bool required) + { + Required = required; + } + + public bool Required { get; } + } + + /// <summary> + /// Indicates that the value of the marked type (or its derivatives) + /// cannot be compared using '==' or '!=' operators and <c>Equals()</c> + /// should be used instead. However, using '==' or '!=' for comparison + /// with <c>null</c> is always permitted. + /// </summary> + /// <example><code> + /// [CannotApplyEqualityOperator] + /// class NoEquality { } + /// + /// class UsesNoEquality { + /// void Test() { + /// var ca1 = new NoEquality(); + /// var ca2 = new NoEquality(); + /// if (ca1 != null) { // OK + /// bool condition = ca1 == ca2; // Warning + /// } + /// } + /// } + /// </code></example> + [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Struct)] + public sealed class CannotApplyEqualityOperatorAttribute : Attribute { } + + /// <summary> + /// When applied to a target attribute, specifies a requirement for any type marked + /// with the target attribute to implement or inherit specific type or types. + /// </summary> + /// <example><code> + /// [BaseTypeRequired(typeof(IComponent)] // Specify requirement + /// class ComponentAttribute : Attribute { } + /// + /// [Component] // ComponentAttribute requires implementing IComponent interface + /// class MyComponent : IComponent { } + /// </code></example> + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + [BaseTypeRequired(typeof(Attribute))] + public sealed class BaseTypeRequiredAttribute : Attribute + { + public BaseTypeRequiredAttribute([NotNull] Type baseType) + { + BaseType = baseType; + } + + [NotNull] public Type BaseType { get; } + } + + /// <summary> + /// Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), + /// so this symbol will not be reported as unused (as well as by other usage inspections). + /// </summary> + [AttributeUsage(AttributeTargets.All)] + public sealed class UsedImplicitlyAttribute : Attribute + { + public UsedImplicitlyAttribute() + : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } + + public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags) + : this(useKindFlags, ImplicitUseTargetFlags.Default) { } + + public UsedImplicitlyAttribute(ImplicitUseTargetFlags targetFlags) + : this(ImplicitUseKindFlags.Default, targetFlags) { } + + public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) + { + UseKindFlags = useKindFlags; + TargetFlags = targetFlags; + } + + public ImplicitUseKindFlags UseKindFlags { get; } + + public ImplicitUseTargetFlags TargetFlags { get; } + } + + /// <summary> + /// Can be applied to attributes, type parameters, and parameters of a type assignable from <see cref="System.Type"/> . + /// When applied to an attribute, the decorated attribute behaves the same as <see cref="UsedImplicitlyAttribute"/>. + /// When applied to a type parameter or to a parameter of type <see cref="System.Type"/>, indicates that the corresponding type + /// is used implicitly. + /// </summary> + [AttributeUsage(AttributeTargets.Class | AttributeTargets.GenericParameter | AttributeTargets.Parameter)] + public sealed class MeansImplicitUseAttribute : Attribute + { + public MeansImplicitUseAttribute() + : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } + + public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags) + : this(useKindFlags, ImplicitUseTargetFlags.Default) { } + + public MeansImplicitUseAttribute(ImplicitUseTargetFlags targetFlags) + : this(ImplicitUseKindFlags.Default, targetFlags) { } + + public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) + { + UseKindFlags = useKindFlags; + TargetFlags = targetFlags; + } + + [UsedImplicitly] public ImplicitUseKindFlags UseKindFlags { get; } + + [UsedImplicitly] public ImplicitUseTargetFlags TargetFlags { get; } + } + + /// <summary> + /// Specify the details of implicitly used symbol when it is marked + /// with <see cref="MeansImplicitUseAttribute"/> or <see cref="UsedImplicitlyAttribute"/>. + /// </summary> + [Flags] + public enum ImplicitUseKindFlags + { + Default = Access | Assign | InstantiatedWithFixedConstructorSignature, + /// <summary>Only entity marked with attribute considered used.</summary> + Access = 1, + /// <summary>Indicates implicit assignment to a member.</summary> + Assign = 2, + /// <summary> + /// Indicates implicit instantiation of a type with fixed constructor signature. + /// That means any unused constructor parameters won't be reported as such. + /// </summary> + InstantiatedWithFixedConstructorSignature = 4, + /// <summary>Indicates implicit instantiation of a type.</summary> + InstantiatedNoFixedConstructorSignature = 8, + } + + /// <summary> + /// Specify what is considered to be used implicitly when marked + /// with <see cref="MeansImplicitUseAttribute"/> or <see cref="UsedImplicitlyAttribute"/>. + /// </summary> + [Flags] + public enum ImplicitUseTargetFlags + { + Default = Itself, + Itself = 1, + /// <summary>Members of entity marked with attribute are considered used.</summary> + Members = 2, + /// <summary> Inherited entities are considered used. </summary> + WithInheritors = 4, + /// <summary>Entity marked with attribute and all its members considered used.</summary> + WithMembers = Itself | Members + } + + /// <summary> + /// This attribute is intended to mark publicly available API + /// which should not be removed and so is treated as used. + /// </summary> + [MeansImplicitUse(ImplicitUseTargetFlags.WithMembers)] + [AttributeUsage(AttributeTargets.All, Inherited = false)] + public sealed class PublicAPIAttribute : Attribute + { + public PublicAPIAttribute() { } + + public PublicAPIAttribute([NotNull] string comment) + { + Comment = comment; + } + + [CanBeNull] public string Comment { get; } + } + + /// <summary> + /// Tells code analysis engine if the parameter is completely handled when the invoked method is on stack. + /// If the parameter is a delegate, indicates that delegate is executed while the method is executed. + /// If the parameter is an enumerable, indicates that it is enumerated while the method is executed. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class InstantHandleAttribute : Attribute { } + + /// <summary> + /// Indicates that a method does not make any observable state changes. + /// The same as <c>System.Diagnostics.Contracts.PureAttribute</c>. + /// </summary> + /// <example><code> + /// [Pure] int Multiply(int x, int y) => x * y; + /// + /// void M() { + /// Multiply(123, 42); // Warning: Return value of pure method is not used + /// } + /// </code></example> + [AttributeUsage(AttributeTargets.Method)] + public sealed class PureAttribute : Attribute { } + + /// <summary> + /// Indicates that the return value of the method invocation must be used. + /// </summary> + /// <remarks> + /// Methods decorated with this attribute (in contrast to pure methods) might change state, + /// but make no sense without using their return value. <br/> + /// Similarly to <see cref="PureAttribute"/>, this attribute + /// will help detecting usages of the method when the return value in not used. + /// Additionally, you can optionally specify a custom message, which will be used when showing warnings, e.g. + /// <code>[MustUseReturnValue("Use the return value to...")]</code>. + /// </remarks> + [AttributeUsage(AttributeTargets.Method)] + public sealed class MustUseReturnValueAttribute : Attribute + { + public MustUseReturnValueAttribute() { } + + public MustUseReturnValueAttribute([NotNull] string justification) + { + Justification = justification; + } + + [CanBeNull] public string Justification { get; } + } + + /// <summary> + /// Indicates the type member or parameter of some type, that should be used instead of all other ways + /// to get the value of that type. This annotation is useful when you have some "context" value evaluated + /// and stored somewhere, meaning that all other ways to get this value must be consolidated with existing one. + /// </summary> + /// <example><code> + /// class Foo { + /// [ProvidesContext] IBarService _barService = ...; + /// + /// void ProcessNode(INode node) { + /// DoSomething(node, node.GetGlobalServices().Bar); + /// // ^ Warning: use value of '_barService' field + /// } + /// } + /// </code></example> + [AttributeUsage( + AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.Method | + AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Struct | AttributeTargets.GenericParameter)] + public sealed class ProvidesContextAttribute : Attribute { } + + /// <summary> + /// Indicates that a parameter is a path to a file or a folder within a web project. + /// Path can be relative or absolute, starting from web root (~). + /// </summary> + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class PathReferenceAttribute : Attribute + { + public PathReferenceAttribute() { } + + public PathReferenceAttribute([NotNull, PathReference] string basePath) + { + BasePath = basePath; + } + + [CanBeNull] public string BasePath { get; } + } + + /// <summary> + /// An extension method marked with this attribute is processed by code completion + /// as a 'Source Template'. When the extension method is completed over some expression, its source code + /// is automatically expanded like a template at call site. + /// </summary> + /// <remarks> + /// Template method body can contain valid source code and/or special comments starting with '$'. + /// Text inside these comments is added as source code when the template is applied. Template parameters + /// can be used either as additional method parameters or as identifiers wrapped in two '$' signs. + /// Use the <see cref="MacroAttribute"/> attribute to specify macros for parameters. + /// </remarks> + /// <example> + /// In this example, the 'forEach' method is a source template available over all values + /// of enumerable types, producing ordinary C# 'foreach' statement and placing caret inside block: + /// <code> + /// [SourceTemplate] + /// public static void forEach<T>(this IEnumerable<T> xs) { + /// foreach (var x in xs) { + /// //$ $END$ + /// } + /// } + /// </code> + /// </example> + [AttributeUsage(AttributeTargets.Method)] + public sealed class SourceTemplateAttribute : Attribute { } + + /// <summary> + /// Allows specifying a macro for a parameter of a <see cref="SourceTemplateAttribute">source template</see>. + /// </summary> + /// <remarks> + /// You can apply the attribute on the whole method or on any of its additional parameters. The macro expression + /// is defined in the <see cref="MacroAttribute.Expression"/> property. When applied on a method, the target + /// template parameter is defined in the <see cref="MacroAttribute.Target"/> property. To apply the macro silently + /// for the parameter, set the <see cref="MacroAttribute.Editable"/> property value = -1. + /// </remarks> + /// <example> + /// Applying the attribute on a source template method: + /// <code> + /// [SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")] + /// public static void forEach<T>(this IEnumerable<T> collection) { + /// foreach (var item in collection) { + /// //$ $END$ + /// } + /// } + /// </code> + /// Applying the attribute on a template method parameter: + /// <code> + /// [SourceTemplate] + /// public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) { + /// /*$ var $x$Id = "$newguid$" + x.ToString(); + /// x.DoSomething($x$Id); */ + /// } + /// </code> + /// </example> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method, AllowMultiple = true)] + public sealed class MacroAttribute : Attribute + { + /// <summary> + /// Allows specifying a macro that will be executed for a <see cref="SourceTemplateAttribute">source template</see> + /// parameter when the template is expanded. + /// </summary> + [CanBeNull] public string Expression { get; set; } + + /// <summary> + /// Allows specifying which occurrence of the target parameter becomes editable when the template is deployed. + /// </summary> + /// <remarks> + /// If the target parameter is used several times in the template, only one occurrence becomes editable; + /// other occurrences are changed synchronously. To specify the zero-based index of the editable occurrence, + /// use values >= 0. To make the parameter non-editable when the template is expanded, use -1. + /// </remarks> + public int Editable { get; set; } + + /// <summary> + /// Identifies the target parameter of a <see cref="SourceTemplateAttribute">source template</see> if the + /// <see cref="MacroAttribute"/> is applied on a template method. + /// </summary> + [CanBeNull] public string Target { get; set; } + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] + public sealed class AspMvcAreaMasterLocationFormatAttribute : Attribute + { + public AspMvcAreaMasterLocationFormatAttribute([NotNull] string format) + { + Format = format; + } + + [NotNull] public string Format { get; } + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] + public sealed class AspMvcAreaPartialViewLocationFormatAttribute : Attribute + { + public AspMvcAreaPartialViewLocationFormatAttribute([NotNull] string format) + { + Format = format; + } + + [NotNull] public string Format { get; } + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] + public sealed class AspMvcAreaViewLocationFormatAttribute : Attribute + { + public AspMvcAreaViewLocationFormatAttribute([NotNull] string format) + { + Format = format; + } + + [NotNull] public string Format { get; } + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] + public sealed class AspMvcMasterLocationFormatAttribute : Attribute + { + public AspMvcMasterLocationFormatAttribute([NotNull] string format) + { + Format = format; + } + + [NotNull] public string Format { get; } + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] + public sealed class AspMvcPartialViewLocationFormatAttribute : Attribute + { + public AspMvcPartialViewLocationFormatAttribute([NotNull] string format) + { + Format = format; + } + + [NotNull] public string Format { get; } + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true)] + public sealed class AspMvcViewLocationFormatAttribute : Attribute + { + public AspMvcViewLocationFormatAttribute([NotNull] string format) + { + Format = format; + } + + [NotNull] public string Format { get; } + } + + /// <summary> + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + /// is an MVC action. If applied to a method, the MVC action name is calculated + /// implicitly from the context. Use this attribute for custom wrappers similar to + /// <c>System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcActionAttribute : Attribute + { + public AspMvcActionAttribute() { } + + public AspMvcActionAttribute([NotNull] string anonymousProperty) + { + AnonymousProperty = anonymousProperty; + } + + [CanBeNull] public string AnonymousProperty { get; } + } + + /// <summary> + /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC area. + /// Use this attribute for custom wrappers similar to + /// <c>System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcAreaAttribute : Attribute + { + public AspMvcAreaAttribute() { } + + public AspMvcAreaAttribute([NotNull] string anonymousProperty) + { + AnonymousProperty = anonymousProperty; + } + + [CanBeNull] public string AnonymousProperty { get; } + } + + /// <summary> + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is + /// an MVC controller. If applied to a method, the MVC controller name is calculated + /// implicitly from the context. Use this attribute for custom wrappers similar to + /// <c>System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcControllerAttribute : Attribute + { + public AspMvcControllerAttribute() { } + + public AspMvcControllerAttribute([NotNull] string anonymousProperty) + { + AnonymousProperty = anonymousProperty; + } + + [CanBeNull] public string AnonymousProperty { get; } + } + + /// <summary> + /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC Master. Use this attribute + /// for custom wrappers similar to <c>System.Web.Mvc.Controller.View(String, String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcMasterAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC model type. Use this attribute + /// for custom wrappers similar to <c>System.Web.Mvc.Controller.View(String, Object)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AspMvcModelTypeAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC + /// partial view. If applied to a method, the MVC partial view name is calculated implicitly + /// from the context. Use this attribute for custom wrappers similar to + /// <c>System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcPartialViewAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. Allows disabling inspections for MVC views within a class or a method. + /// </summary> + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] + public sealed class AspMvcSuppressViewErrorAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. Indicates that a parameter is an MVC display template. + /// Use this attribute for custom wrappers similar to + /// <c>System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcDisplayTemplateAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC editor template. + /// Use this attribute for custom wrappers similar to + /// <c>System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcEditorTemplateAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. Indicates that the marked parameter is an MVC template. + /// Use this attribute for custom wrappers similar to + /// <c>System.ComponentModel.DataAnnotations.UIHintAttribute(System.String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcTemplateAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + /// is an MVC view component. If applied to a method, the MVC view name is calculated implicitly + /// from the context. Use this attribute for custom wrappers similar to + /// <c>System.Web.Mvc.Controller.View(Object)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcViewAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + /// is an MVC view component name. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcViewComponentAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + /// is an MVC view component view. If applied to a method, the MVC view component view name is default. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class AspMvcViewComponentViewAttribute : Attribute { } + + /// <summary> + /// ASP.NET MVC attribute. When applied to a parameter of an attribute, + /// indicates that this parameter is an MVC action name. + /// </summary> + /// <example><code> + /// [ActionName("Foo")] + /// public ActionResult Login(string returnUrl) { + /// ViewBag.ReturnUrl = Url.Action("Foo"); // OK + /// return RedirectToAction("Bar"); // Error: Cannot resolve action + /// } + /// </code></example> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property)] + public sealed class AspMvcActionSelectorAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Field)] + public sealed class HtmlElementAttributesAttribute : Attribute + { + public HtmlElementAttributesAttribute() { } + + public HtmlElementAttributesAttribute([NotNull] string name) + { + Name = name; + } + + [CanBeNull] public string Name { get; } + } + + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class HtmlAttributeValueAttribute : Attribute + { + public HtmlAttributeValueAttribute([NotNull] string name) + { + Name = name; + } + + [NotNull] public string Name { get; } + } + + /// <summary> + /// Razor attribute. Indicates that the marked parameter or method is a Razor section. + /// Use this attribute for custom wrappers similar to + /// <c>System.Web.WebPages.WebPageBase.RenderSection(String)</c>. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] + public sealed class RazorSectionAttribute : Attribute { } + + /// <summary> + /// Indicates how method, constructor invocation, or property access + /// over collection type affects the contents of the collection. + /// Use <see cref="CollectionAccessType"/> to specify the access type. + /// </summary> + /// <remarks> + /// Using this attribute only makes sense if all collection methods are marked with this attribute. + /// </remarks> + /// <example><code> + /// public class MyStringCollection : List<string> + /// { + /// [CollectionAccess(CollectionAccessType.Read)] + /// public string GetFirstString() + /// { + /// return this.ElementAt(0); + /// } + /// } + /// class Test + /// { + /// public void Foo() + /// { + /// // Warning: Contents of the collection is never updated + /// var col = new MyStringCollection(); + /// string x = col.GetFirstString(); + /// } + /// } + /// </code></example> + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property)] + public sealed class CollectionAccessAttribute : Attribute + { + public CollectionAccessAttribute(CollectionAccessType collectionAccessType) + { + CollectionAccessType = collectionAccessType; + } + + public CollectionAccessType CollectionAccessType { get; } + } + + /// <summary> + /// Provides a value for the <see cref="CollectionAccessAttribute"/> to define + /// how the collection method invocation affects the contents of the collection. + /// </summary> + [Flags] + public enum CollectionAccessType + { + /// <summary>Method does not use or modify content of the collection.</summary> + None = 0, + /// <summary>Method only reads content of the collection but does not modify it.</summary> + Read = 1, + /// <summary>Method can change content of the collection but does not add new elements.</summary> + ModifyExistingContent = 2, + /// <summary>Method can add new elements to the collection.</summary> + UpdatedContent = ModifyExistingContent | 4 + } + + /// <summary> + /// Indicates that the marked method is assertion method, i.e. it halts the control flow if + /// one of the conditions is satisfied. To set the condition, mark one of the parameters with + /// <see cref="AssertionConditionAttribute"/> attribute. + /// </summary> + [AttributeUsage(AttributeTargets.Method)] + public sealed class AssertionMethodAttribute : Attribute { } + + /// <summary> + /// Indicates the condition parameter of the assertion method. The method itself should be + /// marked by <see cref="AssertionMethodAttribute"/> attribute. The mandatory argument of + /// the attribute is the assertion type. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AssertionConditionAttribute : Attribute + { + public AssertionConditionAttribute(AssertionConditionType conditionType) + { + ConditionType = conditionType; + } + + public AssertionConditionType ConditionType { get; } + } + + /// <summary> + /// Specifies assertion type. If the assertion method argument satisfies the condition, + /// then the execution continues. Otherwise, execution is assumed to be halted. + /// </summary> + public enum AssertionConditionType + { + /// <summary>Marked parameter should be evaluated to true.</summary> + IS_TRUE = 0, + /// <summary>Marked parameter should be evaluated to false.</summary> + IS_FALSE = 1, + /// <summary>Marked parameter should be evaluated to null value.</summary> + IS_NULL = 2, + /// <summary>Marked parameter should be evaluated to not null value.</summary> + IS_NOT_NULL = 3, + } + + /// <summary> + /// Indicates that the marked method unconditionally terminates control flow execution. + /// For example, it could unconditionally throw exception. + /// </summary> + [Obsolete("Use [ContractAnnotation('=> halt')] instead")] + [AttributeUsage(AttributeTargets.Method)] + public sealed class TerminatesProgramAttribute : Attribute { } + + /// <summary> + /// Indicates that method is pure LINQ method, with postponed enumeration (like Enumerable.Select, + /// .Where). This annotation allows inference of [InstantHandle] annotation for parameters + /// of delegate type by analyzing LINQ method chains. + /// </summary> + [AttributeUsage(AttributeTargets.Method)] + public sealed class LinqTunnelAttribute : Attribute { } + + /// <summary> + /// Indicates that IEnumerable passed as a parameter is not enumerated. + /// Use this annotation to suppress the 'Possible multiple enumeration of IEnumerable' inspection. + /// </summary> + /// <example><code> + /// static void ThrowIfNull<T>([NoEnumeration] T v, string n) where T : class + /// { + /// // custom check for null but no enumeration + /// } + /// + /// void Foo(IEnumerable<string> values) + /// { + /// ThrowIfNull(values, nameof(values)); + /// var x = values.ToList(); // No warnings about multiple enumeration + /// } + /// </code></example> + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class NoEnumerationAttribute : Attribute { } + + /// <summary> + /// Indicates that the marked parameter is a regular expression pattern. + /// </summary> + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property)] + public sealed class RegexPatternAttribute : Attribute { } + + /// <summary> + /// Prevents the Member Reordering feature from tossing members of the marked class. + /// </summary> + /// <remarks> + /// The attribute must be mentioned in your member reordering patterns. + /// </remarks> + [AttributeUsage( + AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Struct | AttributeTargets.Enum)] + public sealed class NoReorderAttribute : Attribute { } + + /// <summary> + /// XAML attribute. Indicates the type that has <c>ItemsSource</c> property and should be treated + /// as <c>ItemsControl</c>-derived type, to enable inner items <c>DataContext</c> type resolve. + /// </summary> + [AttributeUsage(AttributeTargets.Class)] + public sealed class XamlItemsControlAttribute : Attribute { } + + /// <summary> + /// XAML attribute. Indicates the property of some <c>BindingBase</c>-derived type, that + /// is used to bind some item of <c>ItemsControl</c>-derived type. This annotation will + /// enable the <c>DataContext</c> type resolve for XAML bindings for such properties. + /// </summary> + /// <remarks> + /// Property should have the tree ancestor of the <c>ItemsControl</c> type or + /// marked with the <see cref="XamlItemsControlAttribute"/> attribute. + /// </remarks> + [AttributeUsage(AttributeTargets.Property)] + public sealed class XamlItemBindingOfItemsControlAttribute : Attribute { } + + /// <summary> + /// XAML attribute. Indicates the property of some <c>Style</c>-derived type, that + /// is used to style items of <c>ItemsControl</c>-derived type. This annotation will + /// enable the <c>DataContext</c> type resolve for XAML bindings for such properties. + /// </summary> + /// <remarks> + /// Property should have the tree ancestor of the <c>ItemsControl</c> type or + /// marked with the <see cref="XamlItemsControlAttribute"/> attribute. + /// </remarks> + [AttributeUsage(AttributeTargets.Property)] + public sealed class XamlItemStyleOfItemsControlAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + public sealed class AspChildControlTypeAttribute : Attribute + { + public AspChildControlTypeAttribute([NotNull] string tagName, [NotNull] Type controlType) + { + TagName = tagName; + ControlType = controlType; + } + + [NotNull] public string TagName { get; } + + [NotNull] public Type ControlType { get; } + } + + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method)] + public sealed class AspDataFieldAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method)] + public sealed class AspDataFieldsAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Property)] + public sealed class AspMethodPropertyAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + public sealed class AspRequiredAttributeAttribute : Attribute + { + public AspRequiredAttributeAttribute([NotNull] string attribute) + { + Attribute = attribute; + } + + [NotNull] public string Attribute { get; } + } + + [AttributeUsage(AttributeTargets.Property)] + public sealed class AspTypePropertyAttribute : Attribute + { + public bool CreateConstructorReferences { get; } + + public AspTypePropertyAttribute(bool createConstructorReferences) + { + CreateConstructorReferences = createConstructorReferences; + } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class RazorImportNamespaceAttribute : Attribute + { + public RazorImportNamespaceAttribute([NotNull] string name) + { + Name = name; + } + + [NotNull] public string Name { get; } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class RazorInjectionAttribute : Attribute + { + public RazorInjectionAttribute([NotNull] string type, [NotNull] string fieldName) + { + Type = type; + FieldName = fieldName; + } + + [NotNull] public string Type { get; } + + [NotNull] public string FieldName { get; } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class RazorDirectiveAttribute : Attribute + { + public RazorDirectiveAttribute([NotNull] string directive) + { + Directive = directive; + } + + [NotNull] public string Directive { get; } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class RazorPageBaseTypeAttribute : Attribute + { + public RazorPageBaseTypeAttribute([NotNull] string baseType) + { + BaseType = baseType; + } + public RazorPageBaseTypeAttribute([NotNull] string baseType, string pageName) + { + BaseType = baseType; + PageName = pageName; + } + + [NotNull] public string BaseType { get; } + [CanBeNull] public string PageName { get; } + } + + [AttributeUsage(AttributeTargets.Method)] + public sealed class RazorHelperCommonAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Property)] + public sealed class RazorLayoutAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Method)] + public sealed class RazorWriteLiteralMethodAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Method)] + public sealed class RazorWriteMethodAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class RazorWriteMethodParameterAttribute : Attribute { } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Properties/Strings.Designer.cs b/VECTO3GUI2020/Properties/Strings.Designer.cs index 522ce734b94cd98ad63e2a908fc4ea30da29f80e..89bcc4dc547641e67f3dc60b23e4d2f61354ada5 100644 --- a/VECTO3GUI2020/Properties/Strings.Designer.cs +++ b/VECTO3GUI2020/Properties/Strings.Designer.cs @@ -60,6 +60,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Adjustable Auxiliary Heater. + /// </summary> + public static string AdjustableAuxiliaryHeater { + get { + return ResourceManager.GetString("AdjustableAuxiliaryHeater", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Airdrag Area. /// </summary> @@ -69,6 +78,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Air Electric Heater. + /// </summary> + public static string AirElectricHeater { + get { + return ResourceManager.GetString("AirElectricHeater", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Angledrive Type. /// </summary> @@ -78,6 +96,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Heater Power. + /// </summary> + public static string AuxHeaterPower { + get { + return ResourceManager.GetString("AuxHeaterPower", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Axle Configuration. /// </summary> @@ -96,6 +123,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Brake Lights LED. + /// </summary> + public static string BrakelightsLED { + get { + return ResourceManager.GetString("BrakelightsLED", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Certification Number. /// </summary> @@ -132,6 +168,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Dayrunning Lights LED. + /// </summary> + public static string DayrunninglightsLED { + get { + return ResourceManager.GetString("DayrunninglightsLED", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Dimension. /// </summary> @@ -150,6 +195,24 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Doordrive Technology. + /// </summary> + public static string DoorDriveTechnology { + get { + return ResourceManager.GetString("DoorDriveTechnology", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Double Glazing. + /// </summary> + public static string DoubleGlazing { + get { + return ResourceManager.GetString("DoubleGlazing", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Efficiency. /// </summary> @@ -168,6 +231,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Entrance Height. + /// </summary> + public static string EntranceHeight { + get { + return ResourceManager.GetString("EntranceHeight", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Gross Vehicle Mass. /// </summary> @@ -186,6 +258,60 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Head Lights LED. + /// </summary> + public static string HeadlightsLED { + get { + return ResourceManager.GetString("HeadlightsLED", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Heat Pump Mode Driver. + /// </summary> + public static string HeatPumpModeDriverCompartment { + get { + return ResourceManager.GetString("HeatPumpModeDriverCompartment", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Heat Pump Mode Passenger. + /// </summary> + public static string HeatPumpModePassengerCompartment { + get { + return ResourceManager.GetString("HeatPumpModePassengerCompartment", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Heat Pump Type Driver. + /// </summary> + public static string HeatPumpTypeDriverCompartment { + get { + return ResourceManager.GetString("HeatPumpTypeDriverCompartment", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Heat Pump Type Passenger. + /// </summary> + public static string HeatPumpTypePassengerCompartment { + get { + return ResourceManager.GetString("HeatPumpTypePassengerCompartment", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Height. + /// </summary> + public static string Height { + get { + return ResourceManager.GetString("Height", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Idling Speed. /// </summary> @@ -195,6 +321,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Interior Lights LED. + /// </summary> + public static string InteriorLightsLED { + get { + return ResourceManager.GetString("InteriorLightsLED", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Legislative Class. /// </summary> @@ -204,6 +339,24 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Length. + /// </summary> + public static string Length { + get { + return ResourceManager.GetString("Length", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Low Entry. + /// </summary> + public static string LowEntry { + get { + return ResourceManager.GetString("LowEntry", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Manufacturer. /// </summary> @@ -249,6 +402,42 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Passengers Lower Deck. + /// </summary> + public static string NumberOfPassengersLowerDeck { + get { + return ResourceManager.GetString("NumberOfPassengersLowerDeck", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Passengers Upper Deck. + /// </summary> + public static string NumberOfPassengersUpperDeck { + get { + return ResourceManager.GetString("NumberOfPassengersUpperDeck", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Other Heating Technology. + /// </summary> + public static string OtherHeatingTechnology { + get { + return ResourceManager.GetString("OtherHeatingTechnology", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Position Lights LED. + /// </summary> + public static string PositionlightsLED { + get { + return ResourceManager.GetString("PositionlightsLED", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Predictive Cruise Control. /// </summary> @@ -294,6 +483,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Registered Class. + /// </summary> + public static string RegisteredClass { + get { + return ResourceManager.GetString("RegisteredClass", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Retarder Ratio. /// </summary> @@ -331,6 +529,33 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Seperate Air Distribution Ducts. + /// </summary> + public static string SeparateAirDistributionDucts { + get { + return ResourceManager.GetString("SeparateAirDistributionDucts", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to System Configuration. + /// </summary> + public static string SystemConfiguration { + get { + return ResourceManager.GetString("SystemConfiguration", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Tank System. + /// </summary> + public static string TankSystem { + get { + return ResourceManager.GetString("TankSystem", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Transmission Type. /// </summary> @@ -358,6 +583,24 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Vehicle Code. + /// </summary> + public static string VehicleCode { + get { + return ResourceManager.GetString("VehicleCode", resourceCulture); + } + } + + /// <summary> + /// Looks up a localized string similar to Declaration Type. + /// </summary> + public static string VehicleDeclarationType { + get { + return ResourceManager.GetString("VehicleDeclarationType", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Vehicle Identification Number. /// </summary> @@ -376,6 +619,15 @@ namespace VECTO3GUI2020.Properties { } } + /// <summary> + /// Looks up a localized string similar to Water Electric Heater. + /// </summary> + public static string WaterElectricHeater { + get { + return ResourceManager.GetString("WaterElectricHeater", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Waste Heat Recovery. /// </summary> @@ -384,5 +636,14 @@ namespace VECTO3GUI2020.Properties { return ResourceManager.GetString("WHRType", resourceCulture); } } + + /// <summary> + /// Looks up a localized string similar to Width. + /// </summary> + public static string Width { + get { + return ResourceManager.GetString("Width", resourceCulture); + } + } } } diff --git a/VECTO3GUI2020/Properties/Strings.resx b/VECTO3GUI2020/Properties/Strings.resx index 27a2216137c3bfb8aa5a61496bce1a291f9c8e7c..ae1fe2220c2a1ef102fc18eae4a3bee106b94fed 100644 --- a/VECTO3GUI2020/Properties/Strings.resx +++ b/VECTO3GUI2020/Properties/Strings.resx @@ -226,4 +226,91 @@ <value>Do you want to overwrite </value> </data> + <data name="AdjustableAuxiliaryHeater" xml:space="preserve"> + <value>Adjustable Auxiliary Heater</value> + </data> + <data name="AirElectricHeater" xml:space="preserve"> + <value>Air Electric Heater</value> + </data> + <data name="AuxHeaterPower" xml:space="preserve"> + <value>Heater Power</value> + </data> + <data name="BrakelightsLED" xml:space="preserve"> + <value>Brake Lights LED</value> + </data> + <data name="DayrunninglightsLED" xml:space="preserve"> + <value>Dayrunning Lights LED</value> + </data> + <data name="DoorDriveTechnology" xml:space="preserve"> + <value>Doordrive Technology</value> + </data> + <data name="DoubleGlazing" xml:space="preserve"> + <value>Double Glazing</value> + </data> + <data name="EntranceHeight" xml:space="preserve"> + <value>Entrance Height</value> + </data> + <data name="HeadlightsLED" xml:space="preserve"> + <value>Head Lights LED</value> + </data> + <data name="HeatPumpModeDriverCompartment" xml:space="preserve"> + <value>Heat Pump Mode Driver</value> + </data> + <data name="HeatPumpModePassengerCompartment" xml:space="preserve"> + <value>Heat Pump Mode Passenger</value> + </data> + <data name="HeatPumpTypeDriverCompartment" xml:space="preserve"> + <value>Heat Pump Type Driver</value> + </data> + <data name="HeatPumpTypePassengerCompartment" xml:space="preserve"> + <value>Heat Pump Type Passenger</value> + </data> + <data name="Height" xml:space="preserve"> + <value>Height</value> + </data> + <data name="InteriorLightsLED" xml:space="preserve"> + <value>Interior Lights LED</value> + </data> + <data name="Length" xml:space="preserve"> + <value>Length</value> + </data> + <data name="LowEntry" xml:space="preserve"> + <value>Low Entry</value> + </data> + <data name="NumberOfPassengersLowerDeck" xml:space="preserve"> + <value>Passengers Lower Deck</value> + </data> + <data name="NumberOfPassengersUpperDeck" xml:space="preserve"> + <value>Passengers Upper Deck</value> + </data> + <data name="OtherHeatingTechnology" xml:space="preserve"> + <value>Other Heating Technology</value> + </data> + <data name="PositionlightsLED" xml:space="preserve"> + <value>Position Lights LED</value> + </data> + <data name="RegisteredClass" xml:space="preserve"> + <value>Registered Class</value> + </data> + <data name="SeparateAirDistributionDucts" xml:space="preserve"> + <value>Seperate Air Distribution Ducts</value> + </data> + <data name="SystemConfiguration" xml:space="preserve"> + <value>System Configuration</value> + </data> + <data name="TankSystem" xml:space="preserve"> + <value>Tank System</value> + </data> + <data name="VehicleCode" xml:space="preserve"> + <value>Vehicle Code</value> + </data> + <data name="VehicleDeclarationType" xml:space="preserve"> + <value>Declaration Type</value> + </data> + <data name="WaterElectricHeater" xml:space="preserve"> + <value>Water Electric Heater</value> + </data> + <data name="Width" xml:space="preserve"> + <value>Width</value> + </data> </root> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Colors.xaml b/VECTO3GUI2020/Resources/Colors.xaml deleted file mode 100644 index 3aa47eae7766b209bfa61eaaf78799418cce4e4f..0000000000000000000000000000000000000000 --- a/VECTO3GUI2020/Resources/Colors.xaml +++ /dev/null @@ -1,12 +0,0 @@ -<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:local="clr-namespace:VECTO3GUI2020"> - <SolidColorBrush x:Key="AccentColorButton" Color="#FF10796B"/> - <Color x:Key="ButtonBackgroundColor">White</Color> - <LinearGradientBrush x:Key="ButtonBackgroundBrush" EndPoint="0,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0"> - <GradientStop Color="Black" Offset="1"/> - <GradientStop Color="{DynamicResource ButtonBackgroundColor}" Offset="0.187"/> - <GradientStop Color="#FF494949" Offset="0.906"/> - </LinearGradientBrush> - -</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Converter.xaml b/VECTO3GUI2020/Resources/Converter.xaml index 361e9aed132af07521cfde8ef0c3ba90b47fb793..32b306aa638ed36e577f99cc2d95a75c02ac69c5 100644 --- a/VECTO3GUI2020/Resources/Converter.xaml +++ b/VECTO3GUI2020/Resources/Converter.xaml @@ -3,13 +3,17 @@ xmlns:converter="clr-namespace:VECTO3GUI2020.Helper.Converter"> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> - <converter:SIToUnitString x:Key="SIToUnitStringConverter"/> - <converter:SIValueToStringConverter x:Key="SIValueToStringConverter"/> + <converter:SIToUnitString x:Shared="False" x:Key="SIToUnitStringConverter"/> + <converter:SIValueToStringConverter x:Shared="False" x:Key="SIValueToStringConverter"/> <converter:NullToVisibilityConverter x:Key="NullToVisibilityConverter"/> <converter:AlwaysVisibleConverter x:Key="AlwaysVisibleConverter"/> <converter:LabledTextBoxConverter x:Key="LabledTextBoxConverter" x:Shared="false" /> <converter:LabledTextBoxLabelConverter x:Key="LabledTextBoxLabelConverter" /> <converter:InvertBoolConverter x:Key="InvertBoolConverter"/> - <converter:InvertedBoolToVisibilityConverter x:Key="InvertedBoolToVisibilityConverter"></converter:InvertedBoolToVisibilityConverter> + <converter:InvertedBoolToVisibilityConverter x:Key="InvertedBoolToVisibilityConverter"/> + <converter:MultistageParameterModeToVisibilityConverter x:Key="ParameterModeToVisibilityConverter"/> + <converter:XToBoolConverter x:Key="XToBoolConverter"/> + <converter:EnumConverter x:Key="EnumConverter"></converter:EnumConverter> + <converter:NullToUnsetValueConverter x:Key="NullToUnsetValue"></converter:NullToUnsetValueConverter> </ResourceDictionary> diff --git a/VECTO3GUI2020/Resources/GlobalStyles.xaml b/VECTO3GUI2020/Resources/GlobalStyles.xaml deleted file mode 100644 index 34fc7f3116542fd540da6507dc1ad6601fab2c74..0000000000000000000000000000000000000000 --- a/VECTO3GUI2020/Resources/GlobalStyles.xaml +++ /dev/null @@ -1,126 +0,0 @@ -<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - - - - <Style x:Key="ListViewStyle" TargetType="ListView"> - <Setter Property="Background" Value="DimGray"/> - <Setter Property="Foreground" Value="White" /> - </Style> - <SolidColorBrush x:Key="Button.Static.Background" Color="#FFDFFFFA"/> - <SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/> - <SolidColorBrush x:Key="Button.Static.Border" Color="#FF02888B"/> - - <SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/> - <SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/> - <SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/> - <SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/> - <SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/> - <SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/> - - - <ControlTemplate x:Key="MainViewButtonStyle" TargetType="{x:Type ButtonBase}"> - <Border x:Name="border" SnapsToDevicePixels="True" BorderBrush="{DynamicResource AccentColorButton}" BorderThickness="2" Background="{DynamicResource Button.Static.Background}"> - <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - <ControlTemplate.Triggers> - <Trigger Property="Button.IsDefaulted" Value="True"> - <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> - </Trigger> - <Trigger Property="IsMouseOver" Value="True"> - <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/> - <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/> - </Trigger> - <Trigger Property="IsPressed" Value="True"> - <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/> - <Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/> - </Trigger> - <Trigger Property="ToggleButton.IsChecked" Value="True"> - <Setter Property="Background" TargetName="border" Value="#FFBCDDEE"/> - <Setter Property="BorderBrush" TargetName="border" Value="#FF245A83"/> - </Trigger> - <Trigger Property="IsEnabled" Value="False"> - <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/> - <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/> - <!--Setter Property="Foreground" Value="#FF838383"/--> - </Trigger> - </ControlTemplate.Triggers> - </ControlTemplate> - <Style x:Key="FocusVisual"> - <Setter Property="Control.Template"> - <Setter.Value> - <ControlTemplate> - <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="MainViewButton" TargetType="{x:Type Button}"> - <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/> - <Setter Property="Background" Value="{StaticResource Button.Static.Background}"/> - <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/> - <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> - <Setter Property="BorderThickness" Value="1"/> - <Setter Property="HorizontalContentAlignment" Value="Center"/> - <Setter Property="VerticalContentAlignment" Value="Center"/> - <Setter Property="Padding" Value="1"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type Button}"> - <Border x:Name="border" BorderBrush="#FF1E716A" BorderThickness="{TemplateBinding BorderThickness}" Background="White" SnapsToDevicePixels="true"> - <Border.OpacityMask> - <RadialGradientBrush> - <GradientStop Color="Black" Offset="0.133"/> - <GradientStop Color="White" Offset="0.6"/> - </RadialGradientBrush> - </Border.OpacityMask> - <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - <ControlTemplate.Triggers> - <Trigger Property="IsDefaulted" Value="true"> - <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> - </Trigger> - <Trigger Property="IsMouseOver" Value="true"> - <Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/> - <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/> - </Trigger> - <Trigger Property="IsPressed" Value="true"> - <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/> - <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/> - </Trigger> - <Trigger Property="IsEnabled" Value="false"> - <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/> - <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/> - <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/> - </Trigger> - </ControlTemplate.Triggers> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="LabelStyleSubView" TargetType="{x:Type Label}"> - <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="Padding" Value="5"/> - <Setter Property="HorizontalContentAlignment" Value="Left"/> - <Setter Property="VerticalContentAlignment" Value="Top"/> - <Setter Property="FontWeight" Value="DemiBold"/> - <Setter Property="FontSize" Value="14"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="{x:Type Label}"> - <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> - <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - <ControlTemplate.Triggers> - <Trigger Property="IsEnabled" Value="false"> - <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> - </Trigger> - </ControlTemplate.Triggers> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - -</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Icons/AddDocument_16x.xaml b/VECTO3GUI2020/Resources/Icons/AddDocument_16x.xaml new file mode 100644 index 0000000000000000000000000000000000000000..6b3473284c5fb261a1f15daf4f501b0eed1fef22 --- /dev/null +++ b/VECTO3GUI2020/Resources/Icons/AddDocument_16x.xaml @@ -0,0 +1,27 @@ +<!-- This file was generated by the AiToXaml tool.--> +<!-- Tool Version: 14.0.22307.0 --> +<Viewbox Width="16" Height="16" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M1.9998,-0.000199999999999534L1.9998,2.0188 0.9998,2.0188 0.9998,5.9998 1.9998,5.9998 1.9998,15.9998 15.0008,15.9998 15.0008,4.3788 10.6208,-0.000199999999999534z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FF388A34" Geometry="F1M8,3.0181L6,3.0181 6,1.0001 4.019,1.0001 4.019,3.0181 2,3.0181 2,5.0001 4.019,5.0001 4.019,7.0001 6,7.0001 6,5.0001 8,5.0001z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> +</Viewbox> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Icon2.ico b/VECTO3GUI2020/Resources/Icons/Icon2.ico similarity index 100% rename from VECTO3GUI2020/Resources/Icon2.ico rename to VECTO3GUI2020/Resources/Icons/Icon2.ico diff --git a/VECTO3GUI2020/Resources/Icons/Trash_16x.ico b/VECTO3GUI2020/Resources/Icons/Trash_16x.ico new file mode 100644 index 0000000000000000000000000000000000000000..9bba79cd42607f14c1e052e5e61c40863707236d Binary files /dev/null and b/VECTO3GUI2020/Resources/Icons/Trash_16x.ico differ diff --git a/VECTO3GUI2020/Resources/Icons/Trash_16x.xaml b/VECTO3GUI2020/Resources/Icons/Trash_16x.xaml new file mode 100644 index 0000000000000000000000000000000000000000..79f4d2fe3bd45ea19611b8d758fbf0077b7a2a52 --- /dev/null +++ b/VECTO3GUI2020/Resources/Icons/Trash_16x.xaml @@ -0,0 +1,20 @@ +<!-- This file was generated by the AiToXaml tool.--> +<!-- Tool Version: 14.0.22307.0 --> +<Viewbox Width="16" Height="16" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M4,16C2.897,16,2,15.103,2,14L2,5 1,5 1,2 4,2C4,0.897,4.897,0,6,0L9,0C10.103,0,11,0.897,11,2L14,2 14,5 13,5 13,14C13,15.103,12.103,16,11,16z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,12L9,12 9,6 10,6z M8,12L7,12 7,6 8,6z M6,12L5,12 5,6 6,6z M4,14L11,14 11,4 4,4z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M11,4L4,4 4,14 11,14z M6,3L9,3 9,2 6,2z M13,3L13,4 12,4 12,14C12,14.552,11.552,15,11,15L4,15C3.448,15,3,14.552,3,14L3,4 2,4 2,3 5,3 5,2C5,1.448,5.448,1,6,1L9,1C9.552,1,10,1.448,10,2L10,3z M10,6L9,6 9,12 10,12z M8,6L7,6 7,12 8,12z M6,12L5,12 5,6 6,6z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> +</Viewbox> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Icons/drawables.xaml b/VECTO3GUI2020/Resources/Icons/drawables.xaml new file mode 100644 index 0000000000000000000000000000000000000000..80c941c266efa76b9cbd07a5733cf99eba203d00 --- /dev/null +++ b/VECTO3GUI2020/Resources/Icons/drawables.xaml @@ -0,0 +1,50 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + <DataTemplate x:Key="TrashIcon"> + <Viewbox Stretch="Uniform" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M4,16C2.897,16,2,15.103,2,14L2,5 1,5 1,2 4,2C4,0.897,4.897,0,6,0L9,0C10.103,0,11,0.897,11,2L14,2 14,5 13,5 13,14C13,15.103,12.103,16,11,16z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,12L9,12 9,6 10,6z M8,12L7,12 7,6 8,6z M6,12L5,12 5,6 6,6z M4,14L11,14 11,4 4,4z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M11,4L4,4 4,14 11,14z M6,3L9,3 9,2 6,2z M13,3L13,4 12,4 12,14C12,14.552,11.552,15,11,15L4,15C3.448,15,3,14.552,3,14L3,4 2,4 2,3 5,3 5,2C5,1.448,5.448,1,6,1L9,1C9.552,1,10,1.448,10,2L10,3z M10,6L9,6 9,12 10,12z M8,6L7,6 7,12 8,12z M6,12L5,12 5,6 6,6z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> + </Viewbox> + </DataTemplate> + <DataTemplate x:Key="AddDocumentIcon"> + <Viewbox Stretch="Uniform" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> + <Rectangle Width="16" Height="16"> + <Rectangle.Fill> + <DrawingBrush> + <DrawingBrush.Drawing> + <DrawingGroup> + <DrawingGroup.Children> + <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> + <GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M1.9998,-0.000199999999999534L1.9998,2.0188 0.9998,2.0188 0.9998,5.9998 1.9998,5.9998 1.9998,15.9998 15.0008,15.9998 15.0008,4.3788 10.6208,-0.000199999999999534z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FF424242" Geometry="F1M10,5L10,2.207 12.793,5z M10.207,1L7,1 7,2 9,2 9,2.018 9,6 13,6 13,14 4,14 4,8 3.019,8 3,15 14,15 14,4.793z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M7,2.018L9,2.018 9,1.999 7,1.999z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M10,2.207L10,5 12.793,5z" /> + <GeometryDrawing Brush="#FFEFEFF0" Geometry="F1M9,6L7,6 7,8 4,8 4,14 13,14 13,6z" /> + <GeometryDrawing Brush="#FF388A34" Geometry="F1M8,3.0181L6,3.0181 6,1.0001 4.019,1.0001 4.019,3.0181 2,3.0181 2,5.0001 4.019,5.0001 4.019,7.0001 6,7.0001 6,5.0001 8,5.0001z" /> + </DrawingGroup.Children> + </DrawingGroup> + </DrawingBrush.Drawing> + </DrawingBrush> + </Rectangle.Fill> + </Rectangle> + </Viewbox> + </DataTemplate> +</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/folderpicker.ico b/VECTO3GUI2020/Resources/Icons/folderpicker.ico similarity index 100% rename from VECTO3GUI2020/Resources/folderpicker.ico rename to VECTO3GUI2020/Resources/Icons/folderpicker.ico diff --git a/VECTO3GUI2020/Resources/ObjectProvider.xaml b/VECTO3GUI2020/Resources/ObjectProvider.xaml new file mode 100644 index 0000000000000000000000000000000000000000..3a81ded5705d19ff629abc157468c868091a9a04 --- /dev/null +++ b/VECTO3GUI2020/Resources/ObjectProvider.xaml @@ -0,0 +1,7 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:helper="clr-namespace:VECTO3GUI2020.Helper"> + <ObjectDataProvider x:Key="milimeterDummy" + ObjectType="{x:Type helper:ConvertedSIDummyCreator}" + MethodName="CreateMillimeterDummy"/> +</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/ButtonStyles.xaml b/VECTO3GUI2020/Resources/Styles/ButtonStyles.xaml similarity index 51% rename from VECTO3GUI2020/ButtonStyles.xaml rename to VECTO3GUI2020/Resources/Styles/ButtonStyles.xaml index d109e55647522754237bb1f3d332caa7d8fa9052..b5b95eb545e5061c7af04fcb4599cfaba6de5a33 100644 --- a/VECTO3GUI2020/ButtonStyles.xaml +++ b/VECTO3GUI2020/Resources/Styles/ButtonStyles.xaml @@ -3,6 +3,8 @@ <SolidColorBrush x:Key="Button.Static.Background2" Color="#FFDDDDDD"/> <SolidColorBrush x:Key="Button.Static.Border2" Color="#FF707070"/> <SolidColorBrush x:Key="MultiStageButtonMouseOverBackGround" Color="#FFBEE6FD"/> + + <Style x:Key="MultiStageButtonStyle1" TargetType="{x:Type Button}"> <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/> <Setter Property="Background" Value="{StaticResource Button.Static.Background2}"/> @@ -15,7 +17,7 @@ <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> - <Border x:Name="border" BorderBrush="{DynamicResource AccentColorButton}" BorderThickness="0,0,0,1" Background="White" SnapsToDevicePixels="true" Width="80" Height="30"> + <Border x:Name="border" BorderBrush="{DynamicResource AccentColorButton}" BorderThickness="0,0,0,1" Background="White" SnapsToDevicePixels="true" Width="Auto" Height="30"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualStateGroup.Transitions> @@ -34,12 +36,58 @@ <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> </Trigger> <Trigger Property="IsMouseOver" Value="true"> - <Setter Property="Background" TargetName="border" Value="{StaticResource MultiStageButtonMouseOverBackGround}"/> + <Setter Property="Background" TargetName="border" Value="{StaticResource ButtonHighlightColor}"/> <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource AccentColorButton}"/> </Trigger> <Trigger Property="IsPressed" Value="true"> - <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/> - <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/> + <Setter Property="Background" TargetName="border" Value="{StaticResource ButtonHightlightPressedColor}"/> + <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource AccentColorButton}"/> + </Trigger> + <Trigger Property="IsEnabled" Value="false"> + <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/> + <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/> + <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/> + </Trigger> + </ControlTemplate.Triggers> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="FocusVisual"> + <Setter Property="Control.Template"> + <Setter.Value> + <ControlTemplate> + <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="FilePickerButtonStyle" TargetType="{x:Type Button}"> + <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/> + <Setter Property="Background" Value="{StaticResource Button.Static.Background}"/> + <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/> + <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> + <Setter Property="BorderThickness" Value="1"/> + <Setter Property="HorizontalContentAlignment" Value="Center"/> + <Setter Property="VerticalContentAlignment" Value="Center"/> + <Setter Property="Padding" Value="1"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type Button}"> + <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true"> + <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + <ControlTemplate.Triggers> + <Trigger Property="IsDefaulted" Value="true"> + <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> + </Trigger> + <Trigger Property="IsMouseOver" Value="true"> + <Setter Property="Background" TargetName="border" Value="{DynamicResource ButtonHighlightColor}"/> + <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource AccentColorButton}"/> + </Trigger> + <Trigger Property="IsPressed" Value="true"> + <Setter Property="Background" TargetName="border" Value="{StaticResource ButtonHightlightPressedColor}"/> + <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource AccentColorButton}"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/> diff --git a/VECTO3GUI2020/Resources/Styles/Colors.xaml b/VECTO3GUI2020/Resources/Styles/Colors.xaml new file mode 100644 index 0000000000000000000000000000000000000000..b1d145a181bfb441ea7927d55f31595ac7b1a19c --- /dev/null +++ b/VECTO3GUI2020/Resources/Styles/Colors.xaml @@ -0,0 +1,16 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="clr-namespace:VECTO3GUI2020"> + + <Color x:Key="SystemAccentColor"> + </Color> + <SolidColorBrush x:Key="AccentColorButton" Color="{x:Static SystemParameters.WindowGlassColor}"/> + <!-- <SolidColorBrush x:Key="AccentColorButton" Color="#FF10796B"/>--> + <Color x:Key="ButtonBackgroundColor">White</Color> + <SolidColorBrush x:Key="ButtonHighlightColor" Opacity="0.3" + Color="{Binding Color, Source={StaticResource AccentColorButton}, Mode=OneWay}" /> + <SolidColorBrush x:Key="ButtonHightlightPressedColor" Opacity="0.4" + Color="{Binding Color, Source={StaticResource AccentColorButton}, Mode=OneWay}" /> + + +</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Styles/GlobalStyles.xaml b/VECTO3GUI2020/Resources/Styles/GlobalStyles.xaml new file mode 100644 index 0000000000000000000000000000000000000000..c4aa2d9608b97ce62f93e9d2981762524524cc18 --- /dev/null +++ b/VECTO3GUI2020/Resources/Styles/GlobalStyles.xaml @@ -0,0 +1,91 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + + + + <Style x:Key="ListViewStyle" TargetType="ListView"> + <Setter Property="Background" Value="DimGray"/> + <Setter Property="Foreground" Value="White" /> + </Style> + <SolidColorBrush x:Key="Button.Static.Background" Color="#FFDDDDDD"/> + <SolidColorBrush x:Key="Button.Pressed.Border" Color="#FF2C628B"/> + <SolidColorBrush x:Key="Button.Static.Border" Color="#FF707070"/> + + <SolidColorBrush x:Key="Button.MouseOver.Background" Color="#FFBEE6FD"/> + <SolidColorBrush x:Key="Button.MouseOver.Border" Color="#FF3C7FB1"/> + <SolidColorBrush x:Key="Button.Pressed.Background" Color="#FFC4E5F6"/> + <SolidColorBrush x:Key="Button.Disabled.Background" Color="#FFF4F4F4"/> + <SolidColorBrush x:Key="Button.Disabled.Border" Color="#FFADB2B5"/> + <SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383"/> + <SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/> + <SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/> + <SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/> + <Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}"> + <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> + <Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/> + <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> + <Setter Property="BorderThickness" Value="1"/> + <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> + <Setter Property="HorizontalContentAlignment" Value="Left"/> + <Setter Property="FocusVisualStyle" Value="{x:Null}"/> + <Setter Property="AllowDrop" Value="true"/> + <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> + <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type TextBox}"> + <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> + <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/> + </Border> + <ControlTemplate.Triggers> + <Trigger Property="IsEnabled" Value="false"> + <Setter Property="Opacity" TargetName="border" Value="0.56"/> + </Trigger> + <Trigger Property="IsMouseOver" Value="true"> + <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource ButtonHighlightColor}"/> + <!--<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>--> + </Trigger> + <Trigger Property="IsKeyboardFocused" Value="true"> + <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource ButtonHighlightColor}"/> + + <!--<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>--> + </Trigger> + </ControlTemplate.Triggers> + </ControlTemplate> + </Setter.Value> + </Setter> + <Style.Triggers> + <MultiTrigger> + <MultiTrigger.Conditions> + <Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/> + <Condition Property="IsSelectionActive" Value="false"/> + </MultiTrigger.Conditions> + <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> + </MultiTrigger> + </Style.Triggers> + </Style> + <Style x:Key="LabelStyle1" TargetType="{x:Type Label}"> + <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> + <Setter Property="Background" Value="{DynamicResource ButtonHighlightColor}"/> + <Setter Property="Padding" Value="5"/> + <Setter Property="HorizontalContentAlignment" Value="Left"/> + <Setter Property="VerticalContentAlignment" Value="Top"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="{x:Type Label}"> + <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> + <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + <ControlTemplate.Triggers> + <Trigger Property="IsEnabled" Value="false"> + <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> + </Trigger> + </ControlTemplate.Triggers> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + + +</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/Templates/ErrorTemplates.xaml b/VECTO3GUI2020/Resources/Templates/ErrorTemplates.xaml new file mode 100644 index 0000000000000000000000000000000000000000..52b5e05bc231e372f69c23b87b291383e8116d4c --- /dev/null +++ b/VECTO3GUI2020/Resources/Templates/ErrorTemplates.xaml @@ -0,0 +1,12 @@ +<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls"> + +<ControlTemplate x:Key="multistageParameterControlErrorTemplate"> + <Grid> + <AdornedElementPlaceholder></AdornedElementPlaceholder> + <TextBlock Text="!" Height="Auto" FontWeight="ExtraBold" Foreground="OrangeRed" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="4"></TextBlock> + </Grid> + +</ControlTemplate> +</ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Resources/ViewModelBindings.xaml b/VECTO3GUI2020/Resources/ViewModelBindings.xaml index 993c2c434cb59d23be5c9c3ab0b8fd7db5685b8a..3934f0b971503fa7856d55e3c26f0c0184140215 100644 --- a/VECTO3GUI2020/Resources/ViewModelBindings.xaml +++ b/VECTO3GUI2020/Resources/ViewModelBindings.xaml @@ -36,10 +36,10 @@ <DataTemplate DataType="{x:Type jobeditimpl:DeclarationJobEditViewModel_v2_0}"> <jobeditviews:DeclarationJobEditView/> </DataTemplate> - - - + + + <!--#region HeavyLorry --> <DataTemplate DataType="{x:Type vehicleimpl:VehicleViewModel_v1_0 }"> <vehicleviews:VehicleView_v2_0/> </DataTemplate> @@ -51,7 +51,7 @@ <DataTemplate DataType="{x:Type componentimpl:CommonComponentViewModel}"> <componentviews:CommonComponentView/> </DataTemplate> - + <DataTemplate DataType="{x:Type componentimpl:EngineViewModel_v2_0}"> <componentviews:EngineView_v2_0/> </DataTemplate> @@ -79,7 +79,7 @@ <DataTemplate DataType="{x:Type componentimpl:AxleGearViewModel_v1_0}"> <componentviews:AxleGearView_v2_0/> </DataTemplate> - + <DataTemplate DataType="{x:Type componentviews:AxleGearView_v2_0}"> <componentviews:AxleGearView_v2_0/> </DataTemplate> @@ -192,8 +192,13 @@ <DataTemplate DataType="{x:Type componentimpl:EngineFuelViewModel}"> <componentviews:EngineFuelView/> </DataTemplate> + <!--#endregion--> + + <DataTemplate DataType="{x:Type componentimpl:AirDragViewModel_v2_8}"> + <multistageviews:AirDragView_v2_8></multistageviews:AirDragView_v2_8> + </DataTemplate> - + <!--#region Multistage --> <DataTemplate DataType="{x:Type multistageimpl:NewMultiStageJobViewModel}"> <multistageviews:NewMultistageFileView/> </DataTemplate> @@ -214,4 +219,13 @@ <multistageviews:MultistageAirDragView/> </DataTemplate> + <DataTemplate DataType="{x:Type multistageimpl:MultistageAuxiliariesViewModel}"> + <multistageviews:ManufacturingStageAuxiliariesView/> + </DataTemplate> + <!--#endregion--> + + <DataTemplate DataType="{x:Type local:TestViewModel}"> + <local:Test></local:Test> + </DataTemplate> + </ResourceDictionary> \ No newline at end of file diff --git a/VECTO3GUI2020/Test.xaml b/VECTO3GUI2020/Test.xaml index 9eeaeb40e20548db7319e1ec1ed23420ba7ac135..d0a30c571dbb38c00615b6e6196b05c7854722c8 100644 --- a/VECTO3GUI2020/Test.xaml +++ b/VECTO3GUI2020/Test.xaml @@ -1,37 +1,24 @@ -<Window x:Class="VECTO3GUI2020.Views.Test" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:local="clr-namespace:VECTO3GUI2020.Views" - xmlns:custom="clr-namespace:VECTO3GUI2020.Views.CustomControls" - mc:Ignorable="d" - Title="Test" Height="450" Width="800"> - <Grid> - <Grid.RowDefinitions> - <RowDefinition Height="1*"/> - <RowDefinition Height="1*"/> - <RowDefinition Height="1*"/> - </Grid.RowDefinitions> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="1*"/> - <ColumnDefinition Width="1*"/> - </Grid.ColumnDefinitions> - - - <custom:LabledTextBox - Grid.Row="0" Grid.Column="0" - Label="{Binding TestProperty}" - Text="{Binding TestProperty}" - Height="20" - /> - <custom:LabledTextBoxUnit Grid.Row="0" Grid.Column="1" Height="20" /> +<UserControl x:Class="VECTO3GUI2020.Test" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:VECTO3GUI2020" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" + xmlns:helper="clr-namespace:VECTO3GUI2020.Helper" + mc:Ignorable="d" + d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance local:TestViewModel }"> - <custom:LabledTextBoxAutomatic Grid.Row="2" Content="{Binding TestProperty}"></custom:LabledTextBoxAutomatic> + <Grid> - <DataGrid Grid.ColumnSpan="3" Grid.Row="1"> - - </DataGrid> + <!--https://www.thomasclaudiushuber.com/2008/01/10/bind-to-methods-with-objectdataprovider/--> + <StackPanel> + <customControls:MultiStageParameter Content="{Binding ConvertedSI}" DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <customControls:MultiStageParameter Content="{Binding ConvertedSI1}" DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <customControls:MultiStageParameter Content="{Binding Meter}"/> + <customControls:MultiStageParameter Mode="COMBOBOX" Content="{Binding HeatPumpMode}" ListItems="{Binding HeatPumpModeListItems}"></customControls:MultiStageParameter> + <customControls:MultiStageParameter Mode="COMBOBOX" Content="{Binding HeatPumpMode2}"></customControls:MultiStageParameter> + <customControls:MultiStageParameter Mode="TEXTBOX" Content="{Binding TestString, ValidatesOnExceptions=True}"></customControls:MultiStageParameter> + </StackPanel> </Grid> -</Window> +</UserControl> diff --git a/VECTO3GUI2020/Test.xaml.cs b/VECTO3GUI2020/Test.xaml.cs index 325d6af67fc508a0ceb415e5d4c8a509f8fe6028..540ccaf6e0de93263e7cdb24146e548c883950f0 100644 --- a/VECTO3GUI2020/Test.xaml.cs +++ b/VECTO3GUI2020/Test.xaml.cs @@ -1,26 +1,28 @@ -using System.Windows; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; -namespace VECTO3GUI2020.Views +namespace VECTO3GUI2020 { /// <summary> - /// Interaktionslogik für Test.xaml + /// Interaction logic for Test.xaml /// </summary> - public partial class Test : Window + public partial class Test : UserControl { - public string TestProperty { get; set; } = "hi"; - - - private enum TestEnum - { - Hallo = 0, Welt, ich, bin, eine, Aufzählung - } - - - public Test() { InitializeComponent(); - this.DataContext = this; } } } diff --git a/VECTO3GUI2020/TestViewModel.cs b/VECTO3GUI2020/TestViewModel.cs new file mode 100644 index 0000000000000000000000000000000000000000..6a66b18a75787d54e94ad2a1c1d0f7911ca31bfa --- /dev/null +++ b/VECTO3GUI2020/TestViewModel.cs @@ -0,0 +1,92 @@ +using System; +using System.CodeDom; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Castle.Components.DictionaryAdapter; +using Castle.Core.Internal; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.Utils; +using VECTO3GUI2020.Helper; +using VECTO3GUI2020.ViewModel.Implementation.Common; +using VECTO3GUI2020.ViewModel.Interfaces; +using VECTO3GUI2020.ViewModel.Interfaces.Common; + +namespace VECTO3GUI2020 +{ + public class TestViewModel : ViewModelBase, IMainViewModel + { + private ConvertedSI _convertedSI; + + public ConvertedSI ConvertedSI + { + get => _convertedSI; + set => SetProperty(ref _convertedSI, value); + + } + + private ConvertedSI _convertedSI1; + + public ConvertedSI ConvertedSI1 + { + get => _convertedSI1; + set => SetProperty(ref _convertedSI1, value); + + } + + + private Meter _meter; + private HeatPumpMode? _heatpumpMode; + private string _testString; + + public Meter Meter + { + get => _meter; + set => SetProperty(ref _meter, value); + } + + public HeatPumpMode? HeatPumpMode + { + get => _heatpumpMode; + set => SetProperty(ref _heatpumpMode, value); + } + + private IList<HeatPumpMode> allowedValues = new List<HeatPumpMode>(){ + TUGraz.VectoCommon.BusAuxiliaries.HeatPumpMode.cooling, + TUGraz.VectoCommon.BusAuxiliaries.HeatPumpMode.heating_and_cooling + }; + + private HeatPumpMode? _heatpumpMode2; + + public HeatPumpMode? HeatPumpMode2 + { + get => _heatpumpMode2; + set => SetProperty(ref _heatpumpMode2, value); + } + + public ObservableCollection<Enum> HeatPumpModeListItems + { + get => new ObservableCollection<Enum>(allowedValues.Cast<Enum>()); + } + + public String TestString + { + get => _testString; + set + { + if (value.IsNullOrEmpty()) { + throw new VectoEmptyFieldException(); + } + SetProperty(ref _testString, value); + } + } + + + public TestViewModel() + { + + } + } +} diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs index 0156742325a64d3f6103dfb2fd4703ca71be7756..0ef9bc19890062b7f1d15363ed3cc40064e645bb 100644 --- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs +++ b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLAirDragWriter.cs @@ -4,12 +4,14 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; +using Castle.Core.Internal; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Interfaces; using VECTO3GUI2020.Helper; using VECTO3GUI2020.Util.XML.Interfaces; using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter { @@ -23,6 +25,7 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter public XMLAirDragWriter(IAirdragDeclarationInputData inputData) { _inputData = inputData; + _uri = inputData.DigestValue.Reference.Replace("#",""); } public XElement GetElement() @@ -31,11 +34,18 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter Initialize(); CreateDataElements(); - _xElement.Add(this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue)); + var signatureElemnet = this.CreateSignatureElement(_defaultNamespace, _uri, _inputData.DigestValue); + _xElement.Add(signatureElemnet); } return _xElement; } + + public XElement GetElement(XNamespace wrapperNamespace) + { + throw new NotImplementedException(); + } + protected abstract void Initialize(); protected abstract void CreateDataElements(); @@ -45,7 +55,8 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter public class XMLAirDragWriter_v2_0 : XMLAirDragWriter { public static readonly string[] SUPPORTED_VERSIONS = { - typeof(AirDragViewModel_v2_0).ToString() + typeof(AirDragViewModel_v2_0).ToString(), + typeof(MultistageAirdragViewModel).ToString() }; public XMLAirDragWriter_v2_0(IAirdragDeclarationInputData inputData) : base(inputData) { } protected override void CreateDataElements() @@ -53,23 +64,26 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper); _xElement.Add(dataElement); - dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri), new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, XMLNames.AirDrag_Data_Type_Attr)); + dataElement.Add(new XAttribute(XMLNames.Component_ID_Attr, _uri), new XAttribute(XMLNamespaces.Xsi + XMLNames.Component_Type_Attr, "v2.0:" + + XMLNames.AirDrag_Data_Type_Attr)); dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer)); dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model)); dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_CertificationNumber, _inputData.CertificationNumber)); dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, _inputData.Date)); dataElement.Add(new XElement(_defaultNamespace + XMLNames.Component_AppVersion, _inputData.AppVersion)); - dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_CdxA_0, _inputData.AirDragArea.ToXMLFormat(2))); - dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_TransferredCDxA, _inputData.AirDragArea.ToXMLFormat(2))); + dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_CdxA_0, _inputData.AirDragArea_0.ToXMLFormat(2))); + dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_TransferredCDxA, _inputData.TransferredAirDragArea.ToXMLFormat(2))); dataElement.Add(new XElement(_defaultNamespace + XMLNames.AirDrag_DeclaredCdxA, _inputData.AirDragArea.ToXMLFormat(2))); + + dataElement.DescendantsAndSelf().Where(e => e.Value.IsNullOrEmpty()).Remove(); } protected override void Initialize() { _defaultNamespace = XMLNamespaces.V20; - _xElement = new XElement(_defaultNamespace + XMLNames.Component_AirDrag); + _xElement = new XElement(XMLNames.Component_AirDrag); } } } diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs new file mode 100644 index 0000000000000000000000000000000000000000..c54b57651bf7dc6016f7277fa4b53f7766df1f52 --- /dev/null +++ b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLBusAuxiliariesWriter.cs @@ -0,0 +1,106 @@ +using System.Linq; +using System.Xml.Linq; +using Castle.Core.Internal; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Resources; +using VECTO3GUI2020.Util.XML.Interfaces; + +namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter +{ + public interface IXMLBusAuxiliariesWriter : IXMLComponentWriter + { + + } + + public abstract class XMLBusAuxiliariesWriter : IXMLBusAuxiliariesWriter + { + protected readonly IBusAuxiliariesDeclarationData _inputData; + protected XElement _xElement; + + protected XMLBusAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData) + { + _inputData = inputData; + } + + public XElement GetElement() + { + if (_xElement == null) + { + Initialize(); + CreateElements(); + } + + return _xElement; + } + + public XElement GetElement(XNamespace wrapperNamespace) + { + throw new System.NotImplementedException(); + } + + public abstract void Initialize(); + + public abstract void CreateElements(); + } + + + + public class XMLBusAuxiliariesWriterMultistage : XMLBusAuxiliariesWriter + { + + + private XNamespace _defaultNamespace; + public XMLBusAuxiliariesWriterMultistage(IBusAuxiliariesDeclarationData inputData) : base(inputData) { } + + #region Overrides of XMLBusAuxiliariesWriter + + public override void Initialize() + { + _defaultNamespace = XMLNamespaces.V28; + _xElement = new XElement(_defaultNamespace + XMLNames.Component_Auxiliaries); + } + + public override void CreateElements() + { + + var dataElement = new XElement(_defaultNamespace + XMLNames.ComponentDataWrapper, + new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, "CompletedVehicleAuxiliaryDataDeclarationType")); + _xElement.Add(dataElement); + + + if (_inputData.ElectricConsumers != null) { + var electricSystemElement = new XElement(_defaultNamespace + XMLNames.BusAux_ElectricSystem); + var ledLightsElement = new XElement(_defaultNamespace + "LEDLights"); + ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Interiorlights, _inputData.ElectricConsumers.InteriorLightsLED)); + ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Dayrunninglights, _inputData.ElectricConsumers.DayrunninglightsLED)); + ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Positionlights, _inputData.ElectricConsumers.PositionlightsLED)); + ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Brakelights, _inputData.ElectricConsumers.BrakelightsLED)); + ledLightsElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_Headlights, _inputData.ElectricConsumers.HeadlightsLED)); + electricSystemElement.Add(ledLightsElement); + dataElement.Add(electricSystemElement); + } + + if (_inputData.HVACAux != null) { + var hvacElement = new XElement(_defaultNamespace + "HVAC"); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_SystemConfiguration, _inputData.HVACAux.SystemConfiguration.GetXmlFormat())); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_HeatPumpTypeDriver, _inputData.HVACAux.HeatPumpTypeDriverCompartment.GetLabel())); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_HeatPumpModeDriver, _inputData.HVACAux.HeatPumpModeDriverCompartment.GetLabel())); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_HeatPumpTypePassenger, _inputData.HVACAux.HeatPumpTypePassengerCompartment.GetLabel())); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_HeatPumpModePassenger, _inputData.HVACAux.HeatPumpModePassengerCompartment.GetLabel())); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AuxiliaryHeaterPower, _inputData.HVACAux.AuxHeaterPower?.ToXMLFormat(0))); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_DoubleGlazing, _inputData.HVACAux.DoubleGlazing)); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AdjustableAuxiliaryHeater, _inputData.HVACAux.AdjustableAuxiliaryHeater)); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_SeparateAirDistributionDucts, _inputData.HVACAux.SeparateAirDistributionDucts)); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_WaterElectricHeater, _inputData.HVACAux.WaterElectricHeater)); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AirElectricHeater, _inputData.HVACAux.AirElectricHeater)); + hvacElement.Add(new XElement(_defaultNamespace + XMLNames.Bus_OtherHeatingTechnology, _inputData.HVACAux.OtherHeatingTechnology)); + dataElement.Add(hvacElement); + } + + dataElement.DescendantsAndSelf().Where(e => e.Value.IsNullOrEmpty()).Remove(); + } + + #endregion + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs index 8090a5e16cf82193f3d65b965e29958c1954cb75..47b010a3725167ad694ae8c71f1170031affc8e3 100644 --- a/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs +++ b/VECTO3GUI2020/Util/XML/Implementation/ComponentWriter/XMLVehicleWriter.cs @@ -1,16 +1,22 @@ using System; +using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Xml.Linq; +using Castle.Core.Internal; using TUGraz.IVT.VectoXML.Writer; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using VECTO3GUI2020.Helper; using VECTO3GUI2020.Util.XML.Interfaces; using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; namespace VECTO3GUI2020.Util.XML.Implementation { @@ -184,4 +190,124 @@ namespace VECTO3GUI2020.Util.XML.Implementation public class XMLVehicleWriter_ExcemptedVehicle_v2_2 { } + public class XMLVehicleWriter_v2_8 : XMLVehicleWriter + { + public static readonly string[] SUPPORTEDVERSIONS = { + typeof(DeclarationInterimStageBusVehicleViewModel_v2_8).ToString() + }; + public XMLVehicleWriter_v2_8(IVehicleDeclarationInputData inputData, IXMLWriterFactory xmlWriterFactory) : base(inputData, xmlWriterFactory) + { + + + } + + #region Overrides of XMLVehicleWriter + + protected override void Initialize() + { + _defaultNamespace = XMLNamespaces.V28; + + _Xelement = new XElement(XMLNamespaces.V20 + XMLNames.Component_Vehicle); + + _Xelement.Add(new XAttribute(XMLNames.Component_ID_Attr, "TODO_ADDIDENTIFIER")); + _Xelement.Add(new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, "InterimStageInputType")); + } + + protected override void CreateElements() + { + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Manufacturer, _inputData.Manufacturer)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_ManufacturerAddress, + _inputData.ManufacturerAddress)); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_VIN, _inputData.VIN)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Date, DateTime.Today.ToXmlFormat())); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Component_Model, _inputData.Model)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_LegislativeCategory, _inputData.LegislativeClass.ToXMLFormat())); + + + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_CorrectedActualMass, _inputData.CurbMassChassis?.ToXMLFormat(0))); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_TPMLM, + _inputData.GrossVehicleMassRating?.ToXMLFormat(0))); + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_AirdragModifiedMultistage, _inputData.AirdragModifiedMultistage)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_NgTankSystem, _inputData.TankSystem)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_RegisteredClass, _inputData.RegisteredClass.ToXMLFormat())); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengersLowerDeck, _inputData.NumberOfPassengersLowerDeck)); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_NumberPassengersUpperDeck, _inputData.NumberOfPassengersUpperDeck)); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Vehicle_VehicleCode, _inputData.VehicleCode.ToXMLFormat())); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_LowEntry, _inputData.LowEntry)); + + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_HeighIntegratedBody, _inputData.Height?.ConvertToMilliMeter())); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleLength, _inputData.Length?.ConvertToMilliMeter())); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_VehicleWidth, _inputData.Width?.ConvertToMilliMeter())); + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_EntranceHeight, _inputData.EntranceHeight?.ConvertToMilliMeter())); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.BusAux_PneumaticSystem_DoorDriveTechnology, + _inputData.DoorDriveTechnology != null + ? _inputData.DoorDriveTechnology.ToXMLFormat() + : null)); + + _Xelement.Add(new XElement(_defaultNamespace + XMLNames.Bus_DeclarationType, _inputData.VehicleDeclarationType)); + + if (_inputData.ADAS != null) { + var adasNamespace = XMLNamespaces.V23; + var aDASElement = new XElement(_defaultNamespace + XMLNames.Vehicle_ADAS); + _Xelement.Add(aDASElement); + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EngineStopStart, _inputData.ADAS.EngineStopStart)); + + bool ecoRollWithoutEngineStop = _inputData.ADAS.EcoRoll == EcoRollType.WithoutEngineStop; + bool ecoRollWithEngineStop = _inputData.ADAS.EcoRoll == EcoRollType.WithEngineStop; + + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, ecoRollWithoutEngineStop)); + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, ecoRollWithEngineStop)); + aDASElement.Add(new XElement(adasNamespace + XMLNames.Vehicle_ADAS_PCC, + _inputData.ADAS.PredictiveCruiseControl.ToXMLFormat())); + } + _Xelement.DescendantsAndSelf().Where(e => e.Value.IsNullOrEmpty()).Remove(); + + if (_inputData.Components != null) { + var componentElement = new XElement( + _defaultNamespace + XMLNames.Vehicle_Components, + new XAttribute(XMLNamespaces.Xsi + XMLNames.Attr_Type, + "CompletedVehicleComponentsDeclarationType")); + + //Airdrag + if (_inputData.Components.AirdragInputData != null) { + var airDragElement = _xmlWriterFactory.CreateComponentWriter(_inputData.Components.AirdragInputData) + .GetElement(); + var tempAirDragElement = new XElement(_defaultNamespace + XMLNames.Component_AirDrag); + + airDragElement.Name = tempAirDragElement.Name; + componentElement.Add(airDragElement); + } + + //auxiliaries + if (_inputData.Components.BusAuxiliaries != null) { + var auxiliaryElement = _xmlWriterFactory.CreateBuxAuxiliariesWriter(_inputData.Components.BusAuxiliaries) + .GetElement(); + + componentElement.Add(auxiliaryElement); + + } + + + _Xelement.Add(componentElement); + } + + + } + + #endregion + } + } diff --git a/VECTO3GUI2020/Util/XML/Interfaces/IXMLWriterFactory.cs b/VECTO3GUI2020/Util/XML/Interfaces/IXMLWriterFactory.cs index aca85fc6179225530ab42bf6a87313c5ad54013c..94c82c81bd5e50e00ded437f64ef98ca70e7fd71 100644 --- a/VECTO3GUI2020/Util/XML/Interfaces/IXMLWriterFactory.cs +++ b/VECTO3GUI2020/Util/XML/Interfaces/IXMLWriterFactory.cs @@ -2,6 +2,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; using TUGraz.VectoCore.OutputData.XML.Engineering.Writer; +using VECTO3GUI2020.Util.XML.Implementation.ComponentWriter; namespace VECTO3GUI2020.Util.XML.Interfaces { @@ -17,5 +18,7 @@ namespace VECTO3GUI2020.Util.XML.Interfaces IXMLComponentWriter CreateComponentWriter(IPTOTransmissionInputData inputData); IXMLComponentsWriter CreateComponentsWriter(IVehicleComponentsDeclaration inputData); + + IXMLBusAuxiliariesWriter CreateBuxAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData); } } diff --git a/VECTO3GUI2020/Util/XML/XMLNamespaces.cs b/VECTO3GUI2020/Util/XML/XMLNamespaces.cs index f2852d486bea1bbc2e2444933b36afcc02cc1313..6c7d84fa0140d844cd795c7c8ce886fedf7933d6 100644 --- a/VECTO3GUI2020/Util/XML/XMLNamespaces.cs +++ b/VECTO3GUI2020/Util/XML/XMLNamespaces.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; +using Castle.Core.Internal; namespace VECTO3GUI2020.Util.XML { @@ -16,14 +17,44 @@ namespace VECTO3GUI2020.Util.XML public static XNamespace Tns_v20 = Tns.NamespaceName + ":v2.0"; public static XNamespace V26 = DeclarationDefinition + ":DEV:v2.6"; public static XNamespace V21 = DeclarationDefinition + ":v2.1"; - public static XNamespace V23 = DeclarationDefinition + ":v2.3"; + public static XNamespace V23 = DeclarationDefinition + ":DEV:v2.3"; public static XNamespace V20 = DeclarationDefinition + ":v2.0"; public static XNamespace V10 = DeclarationDefinition + ":v1.0"; + public static XNamespace V28 = DeclarationDefinition + ":DEV:v2.8"; public static XNamespace Di = "http://www.w3.org/2000/09/xmldsig#"; public static string DeclarationRootNamespace = "urn:tugraz:ivt:VectoAPI:DeclarationJob"; - - } + + + private static readonly Dictionary<XNamespace, string> NamespacePrefix + = new Dictionary<XNamespace, string> { + { Xsi, "xsi" }, + { Tns, "tns" }, + { Tns_v20, "tns" }, + { V10, "v1.0"}, + { V20, "v2.0"}, + { V21, "v2.1"}, + { V23, "v2.3"}, + { V26, "v2.6"}, + { Di, "di"}, + { V28, "v2.8"}, + }; + + public static string GetPrefix(XNamespace xNamespace) + { + if (xNamespace.NamespaceName.IsNullOrEmpty()) { + return null; + } + string prefix = NamespacePrefix[xNamespace]; + return prefix; + } + + public static string GetPrefix(string nameSpaceName) + { + XNamespace ns = nameSpaceName; + return GetPrefix(ns); + } + } } diff --git a/VECTO3GUI2020/VECTO3GUI2020.csproj b/VECTO3GUI2020/VECTO3GUI2020.csproj index 1f446f5be99ccb67d3953a08789dc9a8ccd6bc17..8f8bbfc551b2a3b7f807ab7819f193314d2b74df 100644 --- a/VECTO3GUI2020/VECTO3GUI2020.csproj +++ b/VECTO3GUI2020/VECTO3GUI2020.csproj @@ -50,7 +50,7 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <PropertyGroup> - <ApplicationIcon>Resources\Icon2.ico</ApplicationIcon> + <ApplicationIcon>Resources\Icons\Icon2.ico</ApplicationIcon> </PropertyGroup> <ItemGroup> <Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> @@ -59,6 +59,7 @@ <Reference Include="InteractiveDataDisplay.WPF, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\InteractiveDataDisplay.WPF.1.0.0\lib\net452\InteractiveDataDisplay.WPF.dll</HintPath> </Reference> + <Reference Include="Microsoft.Build.Framework" /> <Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.Maps.MapControl.WPF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Maps.MapControl.WPF.1.0.0.3\lib\net40-Client\Microsoft.Maps.MapControl.WPF.dll</HintPath> @@ -119,24 +120,39 @@ <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </ApplicationDefinition> + <Compile Include="Helper\ConvertedSIDummyCreator.cs" /> <Compile Include="Helper\Converter\AlwaysVisibleConverter.cs" /> <Compile Include="Helper\Converter\BoolToVisibilityConverter.cs" /> + <Compile Include="Helper\Converter\EnumConverter.cs" /> <Compile Include="Helper\Converter\InvertBoolConverter.cs" /> <Compile Include="Helper\Converter\JobTypeStringConverter.cs" /> <Compile Include="Helper\Converter\LabledTextBoxLabelConverter.cs" /> + <Compile Include="Helper\Converter\MultistageParameterModeToVisibilityConverter.cs" /> + <Compile Include="Helper\Converter\NullToUnsetValueConverter.cs" /> <Compile Include="Helper\Converter\NullToVisibilityConverter.cs" /> <Compile Include="Helper\Converter\LabledTextBoxConverter.cs" /> <Compile Include="Helper\Converter\SIToUnitString.cs" /> <Compile Include="Helper\Converter\SIValueToStringConverter.cs" /> <Compile Include="Helper\Converter\VehicleCategoryToStringConverter.cs" /> + <Compile Include="Helper\Converter\XToBoolConverter.cs" /> <Compile Include="Helper\DoubleValidation.cs" /> + <Compile Include="Helper\Exceptions.cs" /> <Compile Include="Helper\Extension.cs" /> <Compile Include="Helper\IWindowHelper.cs" /> <Compile Include="Helper\DialogHelper.cs" /> <Compile Include="Helper\WindowHelper.cs" /> <Compile Include="Helper\XMLExtension.cs" /> + <Compile Include="Helper\XmlHelper.cs" /> <Compile Include="Ninject\FactoryModule.cs" /> + <Compile Include="Ninject\IMultistageDependencies.cs" /> + <Compile Include="Ninject\MultistageLazyDependencies.cs" /> <Compile Include="Ninject\MultistageModule.cs" /> + <Compile Include="Properties\Annotations.cs" /> + <Compile Include="Test.xaml.cs"> + <DependentUpon>Test.xaml</DependentUpon> + </Compile> + <Compile Include="TestViewModel.cs" /> + <Compile Include="Util\XML\Implementation\ComponentWriter\XMLBusAuxiliariesWriter.cs" /> <Compile Include="Util\XML\Implementation\ComponentWriter\XMLPTOWriter.cs" /> <Compile Include="ViewModel\Implementation\Document\DeclarationJobViewModel.cs" /> <Compile Include="ViewModel\Implementation\Document\DeclarationTrailerJobDocumentViewModel.cs" /> @@ -242,11 +258,10 @@ <Compile Include="ViewModel\Interfaces\JobEdit\Vehicle\Components\ITorqueConverterViewModel.cs" /> <Compile Include="ViewModel\Interfaces\JobEdit\Vehicle\Components\ITyreViewModel.cs" /> <Compile Include="ViewModel\Interfaces\JobEdit\Vehicle\IVehicleViewModel.cs" /> - <Compile Include="ViewModel\MultiStage\Implementation\DeclarationInterimStageBusVehicleViewModel_v2_8.cs" /> - <Compile Include="ViewModel\MultiStage\Implementation\InterimStageBusAuxiliariesViewModel_v2_8.cs" /> - <Compile Include="ViewModel\MultiStage\Implementation\InterimStageViewModel.cs" /> + <Compile Include="ViewModel\MultiStage\Implementation\InterimStageBusVehicleViewModel_v2_8.cs" /> <Compile Include="ViewModel\MultiStage\Implementation\ManufacturingStageViewModel_v0_1.cs" /> <Compile Include="ViewModel\MultiStage\Implementation\MultistageAirdragViewModel.cs" /> + <Compile Include="ViewModel\MultiStage\Implementation\MultistageAuxiliariesViewModel.cs" /> <Compile Include="ViewModel\MultiStage\Implementation\NewMultiStageJobViewModel.cs" /> <Compile Include="ViewModel\MultiStage\Implementation\MultistageJobViewModel_v0_1.cs" /> <Compile Include="ViewModel\MultiStage\Interfaces\IMultistageAirdragViewModel.cs" /> @@ -342,12 +357,21 @@ <Compile Include="Views\MessageView.xaml.cs"> <DependentUpon>MessageView.xaml</DependentUpon> </Compile> + <Compile Include="Views\Multistage\AirDragView_v2_8.xaml.cs"> + <DependentUpon>AirDragView_v2_8.xaml</DependentUpon> + </Compile> <Compile Include="Views\Multistage\CustomControls\FilePicker.xaml.cs"> <DependentUpon>FilePicker.xaml</DependentUpon> </Compile> + <Compile Include="Views\Multistage\CustomControls\LabledTextBoxMultistage.xaml.cs"> + <DependentUpon>LabledTextBoxMultistage.xaml</DependentUpon> + </Compile> <Compile Include="Views\Multistage\CustomControls\MultiStageParameter.xaml.cs"> <DependentUpon>MultiStageParameter.xaml</DependentUpon> </Compile> + <Compile Include="Views\Multistage\ManufacturingStageAuxiliariesView.xaml.cs"> + <DependentUpon>ManufacturingStageAuxiliariesView.xaml</DependentUpon> + </Compile> <Compile Include="Views\Multistage\MultistageAirDragView.xaml.cs"> <DependentUpon>MultistageAirDragView.xaml</DependentUpon> </Compile> @@ -366,23 +390,32 @@ <Compile Include="Views\SettingsView.xaml.cs"> <DependentUpon>SettingsView.xaml</DependentUpon> </Compile> - <Compile Include="Test.xaml.cs"> - <DependentUpon>Test.xaml</DependentUpon> - </Compile> <Compile Include="Views\XMLViewer.xaml.cs"> <DependentUpon>XMLViewer.xaml</DependentUpon> </Compile> - <Page Include="ButtonStyles.xaml"> + <Page Include="DataGridStyles.xaml"> + <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="Resources\Icons\AddDocument_16x.xaml"> <Generator>MSBuild:Compile</Generator> + <SubType>Designer</SubType> </Page> - <Page Include="ButtonTemplates.xaml"> + <Page Include="Resources\Icons\drawables.xaml"> + <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="DataGridStyles.xaml"> + <Page Include="Resources\Icons\Trash_16x.xaml"> + <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> + </Page> + <Page Include="Resources\ObjectProvider.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="Resources\Styles\ButtonStyles.xaml"> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Resources\Colors.xaml"> + <Page Include="Resources\Styles\Colors.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> @@ -402,7 +435,11 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Resources\GlobalStyles.xaml"> + <Page Include="Resources\Styles\GlobalStyles.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="Resources\Templates\ErrorTemplates.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> @@ -410,6 +447,10 @@ <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </Page> + <Page Include="Test.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\CustomControls\ComboParameter.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -530,14 +571,26 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Views\Multistage\AirDragView_v2_8.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\Multistage\CustomControls\FilePicker.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Views\Multistage\CustomControls\LabledTextBoxMultistage.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\Multistage\CustomControls\MultiStageParameter.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> + <Page Include="Views\Multistage\ManufacturingStageAuxiliariesView.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> <Page Include="Views\Multistage\MultistageAirDragView.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -562,10 +615,6 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="Test.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> <Page Include="Views\XMLViewer.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> @@ -626,7 +675,7 @@ </BootstrapperPackage> </ItemGroup> <ItemGroup> - <Resource Include="Resources\Icon2.ico" /> + <Resource Include="Resources\Icons\Icon2.ico" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\VectoCommon\VectoCommon\VectoCommon.csproj"> @@ -637,17 +686,24 @@ <Project>{B673E12F-D323-4C4C-8805-9915B2C72D3D}</Project> <Name>VectoHashing</Name> </ProjectReference> + <ProjectReference Include="..\VectoCore\VectoCoreTest\VectoCoreTest.csproj"> + <Project>{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}</Project> + <Name>VectoCoreTest</Name> + </ProjectReference> <ProjectReference Include="..\VectoCore\VectoCore\VectoCore.csproj"> <Project>{cd36938a-add9-4c65-96da-b397cdeea90a}</Project> <Name>VectoCore</Name> </ProjectReference> </ItemGroup> <ItemGroup> - <Resource Include="Resources\folderpicker.ico" /> + <Resource Include="Resources\Icons\folderpicker.ico" /> </ItemGroup> <ItemGroup> <Folder Include="Model\Multistage\" /> </ItemGroup> + <ItemGroup> + <Resource Include="Resources\Icons\Trash_16x.ico" /> + </ItemGroup> <!-- ItemGroup> <Analyzer Include="..\packages\Microsoft.DependencyValidation.Analyzers.0.11.0\analyzers\dotnet\cs\Microsoft.DependencyValidation.Analyzers.resources.dll" /> </-ItemGroup --> diff --git a/VECTO3GUI2020/ViewModel/Implementation/Common/ViewModelBase.cs b/VECTO3GUI2020/ViewModel/Implementation/Common/ViewModelBase.cs index 227bebb57dda2ef521ab6b2a8098cf105aab3bec..876ef38084047d02775fd175a3c4f5df826c610d 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/Common/ViewModelBase.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/Common/ViewModelBase.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; +using System.Windows; +using VECTO3GUI2020.Helper; using VECTO3GUI2020.ViewModel.Interfaces.Common; namespace VECTO3GUI2020.ViewModel.Implementation.Common @@ -40,5 +42,21 @@ namespace VECTO3GUI2020.ViewModel.Implementation.Common } public virtual string Title { get; set; } = "No Title Set"; + + protected void CloseWindow(Window window, IDialogHelper dialogHelper, bool showDialog = true) + { + MessageBoxResult result; + if (showDialog) { + result = dialogHelper.ShowMessageBox("Do you really want to close?", "Close", MessageBoxButton.YesNo, + MessageBoxImage.Question); + } else { + result = MessageBoxResult.Yes; + } + + + if (result == MessageBoxResult.Yes) { + window?.Close(); + } + } } } diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs index c71ea3f14bb2a4bd5418357de2a9c9187636ca1e..6e6b830b0fc1f34771b536e77449dc2a5867f112 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/DeclarationJobEditViewModel.cs @@ -104,6 +104,7 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit private ICommand _saveAsCommand; private DataSource _dataSource; private IDialogHelper _dialogHelper; + private VectoSimulationJobType _jobType; private void UpdateDataSource(string filename) @@ -166,6 +167,8 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit public string JobName => Name; public string ShiftStrategy => throw new NotImplementedException(); + + public VectoSimulationJobType JobType => _jobType; } public class DeclarationJobEditViewModel_v1_0 : DeclarationJobEditViewModel diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/Components/AirDragViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/Components/AirDragViewModel.cs index 7be3d7fc23cb761ff1e4d61933da7cec3e9132f7..f4314ec98e0f6a2fbc1593d45c110d0182017b80 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/Components/AirDragViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/Components/AirDragViewModel.cs @@ -1,5 +1,7 @@ using System; using System.Diagnostics; +using System.Reflection.Emit; +using System.Xml; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -16,6 +18,8 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components protected IAirdragDeclarationInputData _inputData; + public XmlNode XMLSource { get; } + private ICommonComponentViewModel _commonComponentViewModel; public ICommonComponentViewModel CommonComponentViewModel { @@ -31,11 +35,15 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components public AirDragViewModel(IXMLAirdragDeclarationInputData inputData, IComponentViewModelFactory vmFactory) - { + { + LabelVisible = true; + IsReadOnly = false; _inputData = inputData as IAirdragDeclarationInputData; Debug.Assert(_inputData != null); _isPresent = (_inputData?.DataSource?.SourceFile != null); + XMLSource = (inputData as AbstractCommonComponentType)?.XMLSource; + _commonComponentViewModel = vmFactory.CreateCommonComponentViewModel(_inputData); SetProperties(); } @@ -49,6 +57,11 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components #region Implementation of IAirDragDeclarationInputData protected SquareMeter _airDragArea; + protected SquareMeter _transferredAirDragArea; + protected SquareMeter _airDragArea_0; + private bool _isReadOnly; + private bool _labelVisible; + public DataSource DataSource { get => _commonComponentViewModel.DataSource; @@ -100,9 +113,33 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components public string AppVersion => _commonComponentViewModel.AppVersion; - public virtual SquareMeter AirDragArea {get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public virtual SquareMeter AirDragArea + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public virtual SquareMeter TransferredAirDragArea { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + public virtual SquareMeter AirDragArea_0 { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } #endregion + + public bool LabelVisible + { + get => _labelVisible; + set => SetProperty(ref _labelVisible, value); + } + + public bool IsReadOnly + { + get => _isReadOnly; + set => SetProperty(ref _isReadOnly, value); + } } @@ -132,6 +169,8 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components public override void SetProperties() { _airDragArea = _inputData.AirDragArea; + _airDragArea_0 = _inputData.AirDragArea_0; + _transferredAirDragArea = _inputData.TransferredAirDragArea; } public override SquareMeter AirDragArea @@ -139,5 +178,33 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components get => _airDragArea; set => SetProperty(ref _airDragArea, value); } + + public override SquareMeter TransferredAirDragArea { + get => _transferredAirDragArea; + set => SetProperty(ref _transferredAirDragArea, value); + } + + public override SquareMeter AirDragArea_0 + { + get => _airDragArea_0; + set => SetProperty(ref _airDragArea_0, value); + } + } + + public class AirDragViewModel_v2_8 : AirDragViewModel_v2_0 + { + public new static readonly string VERSION = typeof(XMLDeclarationAirdragDataProviderV28).FullName; + + public AirDragViewModel_v2_8(IXMLAirdragDeclarationInputData inputData, IComponentViewModelFactory vmFactory) : base(inputData, vmFactory) + { + LabelVisible = false; + IsReadOnly = true; + } + + public override void SetProperties() + { + base.SetProperties(); + + } } } diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs index 2a3c6c6d995823bbd3986dead333fa01a33feba3..acb4986d545aaceafcced71f60eef36ab701326c 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs @@ -179,6 +179,8 @@ 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 diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs index c957de3f19c6615fdea7feea11a70f92ce67fb24..014b95dc66735ba0c4d905237ddba2ac2db8dd0e 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs @@ -101,7 +101,7 @@ namespace VECTO3GUI2020.ViewModel.Implementation private void NewManufacturingStageFileExecute() { - _windowHelper.ShowWindow(_multiStageViewModelFactory.CreateNewMultiStageJobViewModel()); + _windowHelper.ShowWindow(_multiStageViewModelFactory.GetNewMultistageJobViewModel()); } @@ -122,9 +122,7 @@ namespace VECTO3GUI2020.ViewModel.Implementation private void AddJobExecute() { IsLoading = true; - string path = _settings.DefaultFilePath; - var filename = _dialogHelper.OpenXMLFileDialog(path); - + var filename = _dialogHelper.OpenXMLFileDialog(); if (filename != null) { fileReadingBackgroundWorker.RunWorkerAsync(filename); @@ -278,25 +276,29 @@ namespace VECTO3GUI2020.ViewModel.Implementation string filename = e.Argument as string; Debug.Assert(filename != null); - //TODO: update usage of GetDocumentType; - // //Loading the file - //try { - // var xElement = new System.Xml.XmlDocument(); - // xElement.Load(filename); - // var documentType = XMLHelper.GetDocumentType(xElement.); - // if (documentType == null) { - // Debug.WriteLine("Unknown Document Type"); - // e.Cancel = true; - // return; - // } - - // var result = _documentViewModelFactory.CreateDocumentViewModel((XmlDocumentType)documentType, filename); - // e.Result = result; - //} catch (Exception) { - // e.Cancel = true; - // throw; - //} - } + //TODO: update usage of GetDocumentType; + //Loading the file + try + { + var xElement = new System.Xml.XmlDocument(); + xElement.Load(filename); + var documentType = XMLHelper.GetDocumentType(xElement?.DocumentElement?.LocalName); + if (documentType == null) + { + Debug.WriteLine("Unknown Document Type"); + e.Cancel = true; + return; + } + + var result = _documentViewModelFactory.CreateDocumentViewModel((XmlDocumentType)documentType, filename); + e.Result = result; + } + catch (Exception) + { + e.Cancel = true; + throw; + } + } void fileworker_ProgressChanged(object sender, ProgressChangedEventArgs e) { diff --git a/VECTO3GUI2020/ViewModel/Implementation/MainWindowViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/MainWindowViewModel.cs index 2da740c78e3c7d774b85b513df3fde4c538937a2..f1d16c06613bb306b61d69a04869a30f48ae7f7e 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/MainWindowViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/MainWindowViewModel.cs @@ -32,6 +32,7 @@ namespace VECTO3GUI2020.ViewModel.Implementation _windowHelper = windowHelper; _settingsViewModel = settingsViewModel; _jobListVm = jobListViewModel; + _bottomView = new TestViewModel(); } public IMainViewModel CurrentViewModelTop diff --git a/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/Components/IAirDragViewModel.cs b/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/Components/IAirDragViewModel.cs index 866e9164f3d8b1c42d062ff3b109bfa460076c34..9f49b555da963b5bdf7872909d9d99abbdf376a9 100644 --- a/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/Components/IAirDragViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/Components/IAirDragViewModel.cs @@ -1,8 +1,12 @@ -using TUGraz.VectoCommon.InputData; +using System.Xml; +using TUGraz.VectoCommon.InputData; namespace VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components { public interface IAirDragViewModel : IAirdragDeclarationInputData, IComponentViewModel { - } + bool LabelVisible { get; set; } + bool IsReadOnly { get; set; } + XmlNode XMLSource { get; } + } } diff --git a/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/IVehicleViewModel.cs b/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/IVehicleViewModel.cs index 3eda515a55158ba019041928f43fa574901514ce..0360dcf829e5bd985bde6007684dc0c16297b034 100644 --- a/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/IVehicleViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Interfaces/JobEdit/Vehicle/IVehicleViewModel.cs @@ -14,11 +14,11 @@ namespace VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle //TODO: Move to IVehicleDeclarationInputData RetarderType RetarderType { get; } double RetarderRatio { get; } - AngledriveType AngledriveType { get; } - IPTOTransmissionInputData PTOTransmissionInputData { get; } + ObservableCollection<IComponentViewModel> ComponentViewModels { get; set; } + } } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/DeclarationInterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/DeclarationInterimStageBusVehicleViewModel_v2_8.cs deleted file mode 100644 index 5b76925e0e12aad2ad17fe1f295e026f592f5bb0..0000000000000000000000000000000000000000 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/DeclarationInterimStageBusVehicleViewModel_v2_8.cs +++ /dev/null @@ -1,421 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Configuration; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml; -using Castle.Core.Internal; -using TUGraz.VectoCommon.BusAuxiliaries; -using TUGraz.VectoCommon.InputData; -using TUGraz.VectoCommon.Models; -using TUGraz.VectoCommon.Utils; -using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; -using VECTO3GUI2020.Properties; -using VECTO3GUI2020.ViewModel.Implementation.Common; -using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; -using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; -using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; - -namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation -{ - class DeclarationInterimStageBusVehicleViewModel_v2_8 : ViewModelBase, IVehicleViewModel - { - public static readonly string INPUTPROVIDERTYPE = typeof(XMLDeclarationInterimStageBusDataProviderV28).ToString(); - - public string Name - { - get { return "Vehicle"; } - } - - public bool IsPresent - { - get { return true; } - } - - public DataSource DataSource - { - get { throw new NotImplementedException(); } - } - - public bool SavedInDeclarationMode - { - get { throw new NotImplementedException(); } - } - - #region Implementation used fields in IVehicleInputData - private string _manufacturer; - private string _model; - private string _vin; - private string _manufacturerAddress; - - private bool _measurementsGroupEditingEnabled = false; - private bool _numberOfPassengersEditingEnabled = false; - private int? _numberOfPassengersUpperDeck; - private int? _numberOfPassengersLowerDeck; - private Kilogram _grossVehicleMassRating; - private Meter _entranceHeight; - private bool? _lowEntry; - private VehicleCode? _vehicleCode; - private RegistrationClass? _registeredClass; - private bool? _airdragModifiedMultistage; - private LegislativeClass? _legislativeClass; - private ConsumerTechnology? _doorDriveTechnology; - private TankSystem? _tankSystem; - private Kilogram _curbMassChassis; - private Meter _length; - private Meter _height; - private Meter _width; - - - - public string Manufacturer - { - get { return _manufacturer; } - set - { - SetProperty(ref _manufacturer, value); - } - } - - public string Model - { - get { return _model; } - set { SetProperty(ref _model, value); } - } - - public string VIN - { - get { return _vin; } - set { SetProperty(ref _vin, value); } - } - - public string ManufacturerAddress - { - get { return String.IsNullOrEmpty(_manufacturerAddress) ? null : _manufacturerAddress; } - set { SetProperty(ref _manufacturerAddress, value); } - } - - - public bool MeasurementsGroupEditingEnabled - { - get { return _measurementsGroupEditingEnabled; } - set { SetProperty(ref _measurementsGroupEditingEnabled, value); } - } - - - public Meter Height - { - get { return _height; } - set { SetProperty(ref _height, value); } - } - - - public Meter Length - { - get { return _length; } - set { SetProperty(ref _length, value); } - } - - public Meter Width - { - get { return _width; } - set { SetProperty(ref _width, value); } - } - - - public Kilogram CurbMassChassis //Corrected Actual Mass - { - get { return _curbMassChassis; } - set { SetProperty(ref _curbMassChassis, value); } - } - - public bool NumberOfPassengersEditingEnabled - { - get { return _numberOfPassengersEditingEnabled; } - set { SetProperty(ref _numberOfPassengersEditingEnabled, value); } - } - - - public int? NumberOfPassengersUpperDeck - { - get { return _numberOfPassengersUpperDeck; } - set { SetProperty(ref _numberOfPassengersUpperDeck, value); } - } - - public int? NumberOfPassengersLowerDeck - { - get { return _numberOfPassengersLowerDeck; } - set { SetProperty(ref _numberOfPassengersLowerDeck, value); } - } - - - public TankSystem? TankSystem - { - get { return _tankSystem; } - set { SetProperty(ref _tankSystem, value); } - } - - public Kilogram GrossVehicleMassRating //Technical Permissible Maximum Laden Mass - { - get =>_grossVehicleMassRating; - set => SetProperty(ref _grossVehicleMassRating, value); - } - - public ConsumerTechnology? DoorDriveTechnology - { - get => _doorDriveTechnology; - set => SetProperty(ref _doorDriveTechnology, value); - } - - public LegislativeClass? LegislativeClass - { - get => _legislativeClass; - set => SetProperty(ref _legislativeClass, value); - } - - public bool? AirdragModifiedMultistage - { - get => _airdragModifiedMultistage; - set => SetProperty(ref _airdragModifiedMultistage, value); - } - - public RegistrationClass? RegisteredClass - { - get => _registeredClass; - set => SetProperty(ref _registeredClass , value); - } - - public VehicleCode? VehicleCode - { - get => _vehicleCode; - set => SetProperty(ref _vehicleCode, value); - } - - public bool? LowEntry - { - get => _lowEntry; - set => SetProperty(ref _lowEntry, value); - } - - - public Meter EntranceHeight - { - get => _entranceHeight; - set => SetProperty(ref _entranceHeight, value); - } - - public VehicleDeclarationType VehicleDeclarationType - { - get => _vehicleDeclarationType; - set => SetProperty(ref _vehicleDeclarationType, value); - } - - #endregion - - private IList<IComponentViewModel> _componentViewModels; - private IVehicleDeclarationInputData _inputData; - - private Dictionary<string, object> _accumulatedProperties = new Dictionary<string, object>(); - private IVehicleViewModel _prevStageVehicleViewModel; - private IVehicleDeclarationInputData _prevStageInputData; - private VehicleDeclarationType _vehicleDeclarationType; - - public ObservableCollection<IComponentViewModel> ComponentViewModels - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - public IVehicleViewModel PreviousStageVehicleViewModel - { - get => _prevStageVehicleViewModel; - } - - - public DeclarationInterimStageBusVehicleViewModel_v2_8() - { - - } - - - public DeclarationInterimStageBusVehicleViewModel_v2_8(IVehicleDeclarationInputData prevStageInputData, IMultiStageViewModelFactory vmFactory) - { - PrevStageInputData = prevStageInputData; - } - - public IVehicleDeclarationInputData PrevStageInputData - { - get { return _prevStageInputData; } - set { SetProperty(ref _prevStageInputData, value); } - } - - - #region implementation of IVehicleDeclarationInputData; - public DateTime Date - { - get { throw new NotImplementedException(); } - } - - public string AppVersion - { - get { throw new NotImplementedException(); } - } - - public CertificationMethod CertificationMethod - { - get { throw new NotImplementedException(); } - } - - public string CertificationNumber - { - get { throw new NotImplementedException(); } - } - - public DigestData DigestValue - { - get { throw new NotImplementedException(); } - } - - public string Identifier - { - get { throw new NotImplementedException(); } - } - - public bool ExemptedVehicle - { - get { throw new NotImplementedException(); } - } - - - - public VehicleCategory VehicleCategory - { - get { throw new NotImplementedException(); } - } - - public AxleConfiguration AxleConfiguration - { - get { throw new NotImplementedException(); } - } - - - - - public IList<ITorqueLimitInputData> TorqueLimits - { - get { throw new NotImplementedException(); } - } - - - public PerSecond EngineIdleSpeed - { - get { throw new NotImplementedException(); } - } - - public bool VocationalVehicle - { - get { throw new NotImplementedException(); } - } - - public bool SleeperCab - { - get { throw new NotImplementedException(); } - } - - - - - - public IAdvancedDriverAssistantSystemDeclarationInputData ADAS - { - get { throw new NotImplementedException(); } - } - - public bool ZeroEmissionVehicle - { - get { throw new NotImplementedException(); } - } - - public bool HybridElectricHDV - { - get { throw new NotImplementedException(); } - } - - public bool DualFuelVehicle - { - get { throw new NotImplementedException(); } - } - - public Watt MaxNetPower1 - { - get { throw new NotImplementedException(); } - } - - public Watt MaxNetPower2 - { - get { throw new NotImplementedException(); } - } - - - - public CubicMeter CargoVolume - { - get { throw new NotImplementedException(); } - } - - - public bool Articulated - { - get { throw new NotImplementedException(); } - } - - - - - - public IVehicleComponentsDeclaration Components - { - get { throw new NotImplementedException(); } - } - - public XmlNode XMLSource - { - get { throw new NotImplementedException(); } - } - - public IPTOViewModel PTOViewModel - { - get { throw new NotImplementedException(); } - } - - public RetarderType RetarderType - { - get { throw new NotImplementedException(); } - } - - public double RetarderRatio - { - get { throw new NotImplementedException(); } - } - - public AngledriveType AngledriveType - { - get { throw new NotImplementedException(); } - } - - public IPTOTransmissionInputData PTOTransmissionInputData - { - get { throw new NotImplementedException(); } - } - - public Dictionary<string, object> AccumulatedProperties - { - get => _accumulatedProperties; - set => throw new NotImplementedException(); - } - - #endregion; - } -} diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusAuxiliariesViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusAuxiliariesViewModel_v2_8.cs deleted file mode 100644 index a225e9ed44900653a491d88102202f2341ad7aeb..0000000000000000000000000000000000000000 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusAuxiliariesViewModel_v2_8.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using VECTO3GUI2020.ViewModel.Implementation.Common; - -namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation -{ - public class InterimStageBusAuxiliariesViewModel_v2_8 : ViewModelBase - { - } -} diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs new file mode 100644 index 0000000000000000000000000000000000000000..c43d35ebfec72e6e48c0f8ffc43c1e4a6c940abe --- /dev/null +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs @@ -0,0 +1,869 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Configuration; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using Castle.Core.Internal; +using Microsoft.Build.Framework; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Ninject; +using VECTO3GUI2020.Properties; +using VECTO3GUI2020.ViewModel.Implementation.Common; +using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; +using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; +using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; +using Convert = System.Convert; + +namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation +{ + public enum AIRDRAGMODIFIED + { + [GuiLabel("Unknown")] + UNKNOWN = 0, + [GuiLabel("True")] + TRUE = 1, + [GuiLabel("False")] + FALSE = 2, + + } + + public static class AirdragModifiedEnumHelper + { + public static AIRDRAGMODIFIED toAirdragModifiedEnum(this bool? nullableBool) + { + if (nullableBool.HasValue) { + return nullableBool.Value == true ? AIRDRAGMODIFIED.TRUE : AIRDRAGMODIFIED.FALSE; + + } + return AIRDRAGMODIFIED.UNKNOWN; + } + + + public static bool? toNullableBool(this AIRDRAGMODIFIED airdragModified) + { + switch (airdragModified) { + case AIRDRAGMODIFIED.TRUE: + return true; + case AIRDRAGMODIFIED.FALSE: + return false; + default: + return null; + } + } + } + + public interface IMultistageVehicleViewModel : IVehicleViewModel + { + bool HasErrors { get; } + Dictionary<string, string> Errors { get; } + IMultistageAirdragViewModel MultistageAirdragViewModel { get; set; } + IMultistageAuxiliariesViewModel MultistageAuxiliariesViewModel { get; set; } + void SetAirdragData(IAirdragDeclarationInputData airdragData); + void SetVehicleInputData(IVehicleDeclarationInputData vehicleInputData); + } + + + public class DeclarationInterimStageBusVehicleViewModel_v2_8 : ViewModelBase, IMultistageVehicleViewModel, + IVehicleComponentsDeclaration, IAdvancedDriverAssistantSystemDeclarationInputData, IDataErrorInfo + { + + private readonly IMultiStageViewModelFactory _multiStageViewModelFactory; + + #region Subcomponents + private IMultistageAirdragViewModel _multistageAirdragViewModel; + private IMultistageAuxiliariesViewModel _multistageAuxiliariesViewModel; + public IMultistageAirdragViewModel MultistageAirdragViewModel + { + get => _multistageAirdragViewModel; + set => SetProperty(ref _multistageAirdragViewModel, value); + } + + public IMultistageAuxiliariesViewModel MultistageAuxiliariesViewModel + { + get => _multistageAuxiliariesViewModel; + set => SetProperty(ref _multistageAuxiliariesViewModel, value); + } + + #endregion + + public static readonly string INPUTPROVIDERTYPE = + typeof(XMLDeclarationInterimStageBusDataProviderV28).ToString(); + + public string Name => "Vehicle"; + + public bool IsPresent => true; + + public DataSource DataSource => throw new NotImplementedException(); + + public bool SavedInDeclarationMode => true; + + public ObservableCollection<IComponentViewModel> ComponentViewModels + { + get { throw new NotImplementedException(); } + set { throw new NotImplementedException(); } + } + + + public DeclarationInterimStageBusVehicleViewModel_v2_8(IVehicleDeclarationInputData consolidatedVehicleData, + IMultiStageViewModelFactory multistageViewModelFactory) + { + ConsolidatedVehicleData = consolidatedVehicleData; + _multiStageViewModelFactory = multistageViewModelFactory; + + MultistageAirdragViewModel = _multiStageViewModelFactory.GetMultistageAirdragViewModel(consolidatedVehicleData?.Components?.AirdragInputData); + MultistageAuxiliariesViewModel = + _multiStageViewModelFactory.GetAuxiliariesViewModel(consolidatedVehicleData?.Components? + .BusAuxiliaries); + AirdragModifiedMultistageEditingEnabled = false; + } + + public IVehicleDeclarationInputData ConsolidatedVehicleData + { + get { return _consolidatedVehicleData; } + set { SetProperty(ref _consolidatedVehicleData, value); } + } + + public void SetAirdragData(IAirdragDeclarationInputData airdragData) + { + throw new NotImplementedException(); + MultistageAirdragViewModel.SetAirdragInputData(airdragInputData: airdragData); + } + + public void SetBusAuxiliaries(IBusAuxiliariesDeclarationData busAuxData) + { + throw new NotImplementedException(); + } + + public void SetVehicleInputData(IVehicleDeclarationInputData vehicleInputData) + { + Manufacturer = vehicleInputData.Manufacturer; + Identifier = vehicleInputData.Identifier; + ManufacturerAddress = vehicleInputData.ManufacturerAddress; + VIN = vehicleInputData.VIN; + Model = vehicleInputData.Model; + LegislativeClass = vehicleInputData.LegislativeClass; + CurbMassChassis = vehicleInputData.CurbMassChassis; + GrossVehicleMassRating = vehicleInputData.GrossVehicleMassRating; + AirdragModifiedMultistage = vehicleInputData.AirdragModifiedMultistage; + TankSystem = vehicleInputData.TankSystem; + RegisteredClass = vehicleInputData.RegisteredClass; + NumberOfPassengersUpperDeck = vehicleInputData.NumberOfPassengersUpperDeck; + NumberOfPassengersLowerDeck = vehicleInputData.NumberOfPassengersLowerDeck; + VehicleCode = vehicleInputData.VehicleCode; + LowEntry = vehicleInputData.LowEntry; + Height = vehicleInputData.Height; + Width = vehicleInputData.Width; + Length = vehicleInputData.Length; + EntranceHeight = vehicleInputData.EntranceHeight; + DoorDriveTechnology = vehicleInputData.DoorDriveTechnology; + VehicleDeclarationType = vehicleInputData.VehicleDeclarationType; + AdasEditingEnabled = vehicleInputData.ADAS != null; + EngineStopStartNullable = vehicleInputData.ADAS?.EngineStopStart; + EcoRollTypeNullable = vehicleInputData.ADAS?.EcoRoll; + PredictiveCruiseControlNullable = vehicleInputData.ADAS?.PredictiveCruiseControl; + ATEcoRollReleaseLockupClutch = vehicleInputData.ADAS?.ATEcoRollReleaseLockupClutch; + AirdragModifiedMultistage = vehicleInputData.AirdragModifiedMultistage; + AirdragModifiedMultistageEditingEnabled = false; + OnPropertyChanged(String.Empty); + + + } + + + + + #region Implementation used fields in IVehicleInputData + + private string _manufacturer; + private string _model; + private string _vin; + private string _manufacturerAddress; + + private bool _measurementsGroupEditingEnabled = false; + private bool _numberOfPassengersEditingEnabled = false; + private int? _numberOfPassengersUpperDeck; + private int? _numberOfPassengersLowerDeck; + private Kilogram _grossVehicleMassRating; + private Meter _entranceHeight; + private bool? _lowEntry; + private VehicleCode? _vehicleCode; + private RegistrationClass? _registeredClass; + private bool? _airdragModifiedMultistage; + private bool _airdragModifiedEditingEnabled = false; + private LegislativeClass? _legislativeClass; + private ConsumerTechnology? _doorDriveTechnology; + private TankSystem? _tankSystem; + private Kilogram _curbMassChassis; + private Meter _length; + private Meter _height; + private Meter _width; + + + public string Manufacturer + { + get { return _manufacturer; } + set + { + SetProperty(ref _manufacturer, value); + } + } + + public string Model + { + get { return _model; } + set { SetProperty(ref _model, value); } + } + + public string VIN + { + get { return _vin; } + set { SetProperty(ref _vin, value); } + } + + public string ManufacturerAddress + { + get { return String.IsNullOrEmpty(_manufacturerAddress) ? null : _manufacturerAddress; } + set { SetProperty(ref _manufacturerAddress, value); } + } + + #region Measurements + public bool MeasurementsGroupEditingEnabled + { + get { return _measurementsGroupEditingEnabled; } + set { SetProperty(ref _measurementsGroupEditingEnabled, value); } + } + + public ConvertedSI HeightInMm + { + get { return Height?.ConvertToMilliMeter(); } + set { Height = value?.ConvertToMeter(); } + } + + public ConvertedSI ConsolidatedHeightInMm + { + get { return ConsolidatedVehicleData?.Height?.ConvertToMilliMeter(); } + set { throw new NotImplementedException(); } + } + + public Meter Height + { + get { return _height; } + set + { + SetProperty(ref _height, value); + //OnPropertyChanged(nameof(HeightInMm)); + } + } + + public ConvertedSI LengthInMm + { + get { return Length?.ConvertToMilliMeter(); } + set { Length = value?.ConvertToMeter(); } + } + + public ConvertedSI ConsolidatedLengthInMm + { + get { return ConsolidatedVehicleData?.Length?.ConvertToMilliMeter(); } + set { throw new NotImplementedException(); } + } + + + public Meter Length + { + get { return _length; } + set + { + SetProperty(ref _length, value); + //OnPropertyChanged(nameof(LengthInMm)); + } + } + + public ConvertedSI WidthInMm + { + get { return Width?.ConvertToMilliMeter(); } + set { Width = value?.ConvertToMeter(); } + } + + public ConvertedSI ConsolidatedWidthInMm + { + get { return ConsolidatedVehicleData?.Width?.ConvertToMilliMeter(); } + set { throw new NotImplementedException(); } + } + + + public Meter Width + { + get { return _width; } + set + { + SetProperty(ref _width, value); + //OnPropertyChanged(nameof(WidthInMm)); + } + } + + public ConvertedSI ConsolidatedEntranceHeightInMm + { + get { return ConsolidatedVehicleData?.EntranceHeight?.ConvertToMilliMeter(); } + set { throw new NotImplementedException(); } + } + + public ConvertedSI EntranceHeightInMm + { + get { return EntranceHeight?.ConvertToMilliMeter(); } + set + { + EntranceHeight = value?.ConvertToMeter(); + + } + } + + + public Meter EntranceHeight + { + get => _entranceHeight; + set + { + SetProperty(ref _entranceHeight, value); + //OnPropertyChanged(nameof(EntranceHeightInMm)); + } + } + + #endregion + public Kilogram CurbMassChassis //Corrected Actual Mass + { + get { return _curbMassChassis; } + set { SetProperty(ref _curbMassChassis, value); } + } + + public bool NumberOfPassengersEditingEnabled + { + get { return _numberOfPassengersEditingEnabled; } + set { SetProperty(ref _numberOfPassengersEditingEnabled, value); } + } + + + public int? NumberOfPassengersUpperDeck + { + get { return _numberOfPassengersUpperDeck; } + set { SetProperty(ref _numberOfPassengersUpperDeck, value); } + } + + public int? NumberOfPassengersLowerDeck + { + get { return _numberOfPassengersLowerDeck; } + set { SetProperty(ref _numberOfPassengersLowerDeck, value); } + } + + + public TankSystem? TankSystem + { + get { return _tankSystem; } + set { SetProperty(ref _tankSystem, value); } + } + + public Kilogram GrossVehicleMassRating //Technical Permissible Maximum Laden Mass + { + get => _grossVehicleMassRating; + set => SetProperty(ref _grossVehicleMassRating, value); + } + + public ConsumerTechnology? DoorDriveTechnology + { + get => _doorDriveTechnology; + set => SetProperty(ref _doorDriveTechnology, value); + } + + public LegislativeClass? LegislativeClass + { + get => _legislativeClass; + set => SetProperty(ref _legislativeClass, value); + } + + #region AirdragModified + + + public AIRDRAGMODIFIED? AirdragModifiedEnum + { + get + { + if (AirdragModifiedMultistageEditingEnabled) { + return _airdragModifiedMultistage.toAirdragModifiedEnum(); + } else { + return null; + } + } + set { + AirdragModifiedMultistage = value?.toNullableBool(); + } + } + + public AIRDRAGMODIFIED? ConsolidatedAirdragmodified + { + get + { + if (_consolidatedVehicleData?.AirdragModifiedMultistage != null) { + return _consolidatedVehicleData.AirdragModifiedMultistage.toAirdragModifiedEnum(); + } else { + return null; + } + } + set => throw new NotImplementedException(); + } + + public bool? AirdragModifiedMultistage + { + get => _airdragModifiedMultistage; + set => SetProperty(ref _airdragModifiedMultistage, value); + } + + + public bool AirdragModifiedMultistageEditingEnabled + { + get + { + //IF MODIFIED ONCE IT HAS TO BE SET + if (_consolidatedVehicleData?.AirdragModifiedMultistage != null) { + _airdragModifiedEditingEnabled = true; + } + return _airdragModifiedEditingEnabled; + } + set{ + SetProperty(ref _airdragModifiedEditingEnabled, value); + } + + } + #endregion; + + public RegistrationClass? RegisteredClass + { + get => _registeredClass; + set => SetProperty(ref _registeredClass, value); + } + + public VehicleCode? VehicleCode + { + get => _vehicleCode; + set => SetProperty(ref _vehicleCode, value); + } + + public ObservableCollection<Enum> VehicleCodeAllowedValues { get; } = + new ObservableCollection<Enum>(Enum.GetValues(typeof(VehicleCode)).Cast<Enum>().ToList().Where( + (e => (VehicleCode)e != TUGraz.VectoCommon.Models.VehicleCode.NOT_APPLICABLE))); + + + public bool? LowEntry + { + get => _lowEntry; + set => SetProperty(ref _lowEntry, value); + } + + + + + + public VehicleDeclarationType VehicleDeclarationType + { + get => _vehicleDeclarationType; + set => SetProperty(ref _vehicleDeclarationType, value); + } + + #endregion + + + private string _identifier; + private IVehicleDeclarationInputData _consolidatedVehicleData; + private VehicleDeclarationType _vehicleDeclarationType; + + + #region implementation of IVehicleComponentsDeclaration + + public IAirdragDeclarationInputData AirdragInputData + { + get => MultistageAirdragViewModel.AirDragViewModel; + } + + public IBusAuxiliariesDeclarationData BusAuxiliaries + { + get => MultistageAuxiliariesViewModel.HasValues ? MultistageAuxiliariesViewModel : null; + } + + #region not implemented + + public string LegislativeCategory + { + get => throw new NotImplementedException(); + } + public IGearboxDeclarationInputData GearboxInputData => throw new NotImplementedException(); + + public ITorqueConverterDeclarationInputData TorqueConverterInputData => throw new NotImplementedException(); + + public IAxleGearInputData AxleGearInputData => throw new NotImplementedException(); + + public IAngledriveInputData AngledriveInputData => throw new NotImplementedException(); + + public IEngineDeclarationInputData EngineInputData => throw new NotImplementedException(); + + public IAuxiliariesDeclarationInputData AuxiliaryInputData => throw new NotImplementedException(); + + public IRetarderInputData RetarderInputData => throw new NotImplementedException(); + + public IPTOTransmissionInputData PTOTransmissionInputData => throw new NotImplementedException(); + + public IAxlesDeclarationInputData AxleWheels => throw new NotImplementedException(); + + + public IElectricStorageDeclarationInputData ElectricStorage => throw new NotImplementedException(); + + public IElectricMachinesDeclarationInputData ElectricMachines => throw new NotImplementedException(); + + #endregion + + #endregion + + + + #region implementation of IAdvancedDriverAssistantSystemDeclarationInputData + + private PredictiveCruiseControlType _predictiveCruiseControl; + private bool? _atEcoRollReleaseLockupClutch; + private EcoRollType _ecoRoll; + private bool _engineStopStart; + private bool _adasEditingEnabled; + private bool? _engineStopStartNullable; + private EcoRollType? _ecoRollTypeNullable; + private PredictiveCruiseControlType? _predictiveCruiseControlNullable; + + + + public IAdvancedDriverAssistantSystemDeclarationInputData ADAS + { + get + { + if (EngineStopStartNullable.HasValue + || EcoRollTypeNullable.HasValue + || PredictiveCruiseControlNullable.HasValue + || ATEcoRollReleaseLockupClutch.HasValue) { + return this; + } else { + return null; + } + ; + } + + + + } + + public bool AdasEditingEnabled + { + get => _adasEditingEnabled; + set + { + SetProperty(ref _adasEditingEnabled, value); + } + } + + public bool? EngineStopStartNullable + { + get => _engineStopStartNullable; + set + { + SetProperty(ref _engineStopStartNullable, value); + } + } + + public bool EngineStopStart + { + get + { + return _engineStopStartNullable.HasValue ? _engineStopStartNullable.Value : false; + } + } + + public EcoRollType? EcoRollTypeNullable + { + get => _ecoRollTypeNullable; + set + { + SetProperty(ref _ecoRollTypeNullable, value); + } + } + + public EcoRollType EcoRoll + { + get + { + return _ecoRollTypeNullable.HasValue ? _ecoRollTypeNullable.Value : EcoRollType.None; + } + } + + public PredictiveCruiseControlType? PredictiveCruiseControlNullable + { + get => _predictiveCruiseControlNullable; + set + { + SetProperty(ref _predictiveCruiseControlNullable, value); + } + } + + public PredictiveCruiseControlType PredictiveCruiseControl + { + get + { + return _predictiveCruiseControlNullable.HasValue + ? _predictiveCruiseControlNullable.Value + : PredictiveCruiseControlType.None; + } + } + + public bool? ATEcoRollReleaseLockupClutch + { + get => _atEcoRollReleaseLockupClutch; + set + { + SetProperty(ref _atEcoRollReleaseLockupClutch, value); + } + } + + #endregion + + + #region implementation of IVehicleDeclarationInputData; + + public DateTime Date + { + get => DateTime.Today; + } + + public string AppVersion + { + get { throw new NotImplementedException(); } + } + + public CertificationMethod CertificationMethod + { + get { throw new NotImplementedException(); } + } + + public string CertificationNumber + { + get { throw new NotImplementedException(); } + } + + public DigestData DigestValue + { + get { throw new NotImplementedException(); } + } + + public string Identifier + { + get + { + return _identifier; + } + private set + { + SetProperty(ref _identifier, value); + } + } + + public bool ExemptedVehicle + { + get { throw new NotImplementedException(); } + } + + + + public VehicleCategory VehicleCategory + { + get { throw new NotImplementedException(); } + } + + public AxleConfiguration AxleConfiguration + { + get { throw new NotImplementedException(); } + } + + + + + public IList<ITorqueLimitInputData> TorqueLimits + { + get { throw new NotImplementedException(); } + } + + + public PerSecond EngineIdleSpeed + { + get { throw new NotImplementedException(); } + } + + public bool VocationalVehicle + { + get { throw new NotImplementedException(); } + } + + public bool SleeperCab + { + get { throw new NotImplementedException(); } + } + + + + + + + + public bool ZeroEmissionVehicle + { + get { throw new NotImplementedException(); } + } + + public bool HybridElectricHDV + { + get { throw new NotImplementedException(); } + } + + public bool DualFuelVehicle + { + get { throw new NotImplementedException(); } + } + + public Watt MaxNetPower1 + { + get { throw new NotImplementedException(); } + } + + public Watt MaxNetPower2 + { + get { throw new NotImplementedException(); } + } + + + + public CubicMeter CargoVolume + { + get { throw new NotImplementedException(); } + } + + + public bool Articulated + { + get { throw new NotImplementedException(); } + } + + + + + + public IVehicleComponentsDeclaration Components + { + get + { + if (AirdragInputData != null || BusAuxiliaries != null) { + return this; + } else { + return null; + } + } + } + + + public XmlNode XMLSource + { + get { throw new NotImplementedException(); } + } + + public IPTOViewModel PTOViewModel + { + get { throw new NotImplementedException(); } + } + + public RetarderType RetarderType + { + get { throw new NotImplementedException(); } + } + + public double RetarderRatio + { + get { throw new NotImplementedException(); } + } + + public AngledriveType AngledriveType + { + get { throw new NotImplementedException(); } + } + + #endregion; + + + + #region Implementation of IDataErrorInfo + + public Dictionary<string, string> Errors { get; private set; } = new Dictionary<string, string>(); + + public string this[string propertyName] + { + get + { + string result = null; + switch (propertyName) { + case nameof(Manufacturer): + if (string.IsNullOrWhiteSpace(Manufacturer)) { + result = "Manufacturer cannot be empty"; + } + + break; + case nameof(ManufacturerAddress): + if (string.IsNullOrWhiteSpace(ManufacturerAddress)) + { + result = "Manufacturer address cannot be empty"; + } + break; + case nameof(VIN): + if (string.IsNullOrEmpty(VIN)) { + result = "VIN cannot be empty"; + } + break; + case nameof(AirdragModifiedEnum): + if (AirdragModifiedMultistageEditingEnabled && (AirdragModifiedEnum == AIRDRAGMODIFIED.UNKNOWN)) { + result = "Air drag modified has to be set"; + } + break; + } + //https://www.youtube.com/watch?v=5KF0GGObuAQ + + if (result == null) { + if(Errors.ContainsKey(propertyName)) + Errors.Remove(propertyName); + } else { + Errors[propertyName] = result; + } + + + return result; + } + } + + public string Error { get => String.Join(",", Errors.Values); } + public bool HasErrors + { + get + { + return !Error.IsNullOrEmpty(); + } + } + #endregion + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageViewModel.cs deleted file mode 100644 index 3df39723bd1edd2136a2fa2fc7c43564c2dfde48..0000000000000000000000000000000000000000 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageViewModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TUGraz.VectoCommon.InputData; -using VECTO3GUI2020.ViewModel.Implementation.Common; - -namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation -{ - public class InterimStageViewModel : ViewModelBase, IManufacturingStageViewModel - { - private DigestData _hashPreviousStage; - private int _stageCount; - private IVehicleDeclarationInputData _vehicle; - private IApplicationInformation _applicationInformation; - private DigestData _signature; - - public DigestData HashPreviousStage => _hashPreviousStage; - - public int StageCount => _stageCount; - - public IVehicleDeclarationInputData Vehicle => _vehicle; - - public IApplicationInformation ApplicationInformation => _applicationInformation; - - public DigestData Signature => _signature; - } -} diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs index 1bc6d2d42bc1d7205a2e04794b87ae1cc14f8bd9..ae4fa9940d3b4d85fc9c30c304ed02ee30693684 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/ManufacturingStageViewModel_v0_1.cs @@ -22,7 +22,7 @@ using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { - public class ManufacturingStageViewModel_v0_1 : ViewModelBase, IManufacturingStageViewModel + public class ManufacturingStageViewModel_v0_1 : ViewModelBase, IManufacturingStageViewModel { public static readonly string INPUTPROVIDERTYPE = typeof(XMLDeclarationMultistageTypeInputDataV01).ToString(); public static readonly string QualifiedXSD = XMLDeclarationMultistageTypeInputDataV01.QUALIFIED_XSD_TYPE; @@ -51,11 +51,11 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private IApplicationInformation _applicationInformation = new ApplicationInformation { Date = DateTime.Today, }; - private IVehicleViewModel _vehicleViewModel; + private IMultistageVehicleViewModel _vehicleViewModel; private IMultiStageViewModelFactory _viewModelFactory; private IViewModelBase _currentview; - public IVehicleViewModel VehicleViewModel + public IMultistageVehicleViewModel VehicleViewModel { get => _vehicleViewModel; set => SetProperty(ref _vehicleViewModel, value); @@ -68,34 +68,47 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation } public DigestData Signature => throw new NotImplementedException(); + public void SetInputData(IVehicleDeclarationInputData vehicleInputData) + { + _vehicleViewModel.SetVehicleInputData(vehicleInputData); + _vehicleViewModel.MultistageAirdragViewModel.SetAirdragInputData(vehicleInputData?.Components?.AirdragInputData); + _vehicleViewModel.MultistageAuxiliariesViewModel.SetAuxiliariesInputData(vehicleInputData?.Components?.BusAuxiliaries); + + } - public ManufacturingStageViewModel_v0_1(IManufacturingStageInputData prevStageInputData, IMultiStageViewModelFactory viewModelFactory) + public ManufacturingStageViewModel_v0_1(IManufacturingStageInputData consolidatedManufacturingStageInputData, IMultiStageViewModelFactory viewModelFactory) { _viewModelFactory = viewModelFactory; - StageCount = prevStageInputData.StageCount + 1; - HashPreviousStage = prevStageInputData.Signature; - - + + _stageCount = consolidatedManufacturingStageInputData?.StageCount + 1 ?? 2; + _consolidatedManufacturingStageInputData = consolidatedManufacturingStageInputData; + VehicleViewModel = (IMultistageVehicleViewModel)_viewModelFactory.GetInterimStageVehicleViewModel(consolidatedManufacturingStageInputData?.Vehicle); + CurrentView = VehicleViewModel as IViewModelBase; - VehicleViewModel = - _viewModelFactory.CreateInterimStageVehicleViewModel(prevStageInputData.Vehicle.GetType().ToString(), prevStageInputData.Vehicle); - CurrentView = VehicleViewModel as IViewModelBase; Components.Add(VehicleViewModel.Name, VehicleViewModel as IViewModelBase); - var airDragEditViewModel = viewModelFactory.CreateMultistageAirdragViewModel(); - Components.Add("Airdrag", airDragEditViewModel as IViewModelBase); + + Components.Add("Airdrag", VehicleViewModel.MultistageAirdragViewModel as IViewModelBase); + + Components.Add("Auxiliaries", VehicleViewModel.MultistageAuxiliariesViewModel as IViewModelBase); } - private ICommand _switchComponentViewCommand; + private int _stageCount; private DigestData _hashPreviousStage; + private IManufacturingStageInputData _consolidatedManufacturingStageInputData; + + #region Commands + + private ICommand _switchComponentViewCommand; + public ICommand SwitchComponentViewCommand { @@ -113,6 +126,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation } } + #endregion + private class ApplicationInformationMultistage : IApplicationInformation { public string SimulationToolVersion => "VECTO3"; @@ -123,9 +138,6 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public interface IManufacturingStageViewModel : IManufacturingStageInputData { - - - - + void SetInputData(IVehicleDeclarationInputData vehicleInputData); } } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs index 34e78a737068f954bf85d8ef7974b432b52eaee9..e3e54ba60dd8c98fa6469d4c4d09e38ea78c54e6 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAirdragViewModel.cs @@ -1,26 +1,47 @@ using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; using System.Windows; using System.Windows.Input; +using System.Xml; +using System.Xml.Linq; +using System.Xml.Schema; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; +using TUGraz.VectoCore.Utils; using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Ninject; using VECTO3GUI2020.Properties; using VECTO3GUI2020.Util; -using VECTO3GUI2020.ViewModel.Implementation.Common; using VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; +using ViewModelBase = VECTO3GUI2020.ViewModel.Implementation.Common.ViewModelBase; +using XmlDocumentType = System.Xml.XmlDocumentType; namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { public class MultistageAirdragViewModel : ViewModelBase, IMultistageAirdragViewModel { - private IDialogHelper _dialogHelper; - private IXMLInputDataReader _inputDataReader; - private IComponentViewModelFactory _componentViewModelFactory; private IAirDragViewModel _airdragViewModel; - private bool _airdragModified; + public string AirdragFilePath + { + get + { + return AirDragViewModel?.DataSource.SourceFile.ToString(); + } + set => SetProperty(ref _airdragFilePath, value); + } public IAirDragViewModel AirDragViewModel { @@ -28,16 +49,42 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation set => SetProperty(ref _airdragViewModel, value); } - public bool AirdragModified + public void SetAirdragInputData(IAirdragDeclarationInputData airdragInputData) { - get => _airdragModified; - set => SetProperty(ref _airdragModified, value); + Debug.WriteLine("[MultistageAirdragViewModel] loaded AirdragInputData"); + if (airdragInputData == null) { + AirDragViewModel = null; + return; + + } + AirDragViewModel = _dependencies.ComponentViewModelFactory.CreateComponentViewModel(airdragInputData) as IAirDragViewModel; + if (AirDragViewModel != null) { + AirDragViewModel.LabelVisible = false; + AirDragViewModel.IsReadOnly = true; + } + } + + public IAirdragDeclarationInputData ConsolidatedAirdragData + { + get => _consolidatedAirdragInputData; + set => SetProperty(ref _consolidatedAirdragInputData, value); } #region Commands + + private ICommand _loadAirdragFileCommand; + private ICommand _removeAirdragDataCommand; + + + + private Dictionary<string, string> _validationErrors; + + private IAirdragDeclarationInputData _consolidatedAirdragInputData; + private string _airdragFilePath; + private readonly IMultistageDependencies _dependencies; public ICommand LoadAirdragFileCommand { @@ -46,31 +93,126 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public void LoadAirdragFileCommandExecute() { - var fileName = _dialogHelper.OpenXMLFileDialog(Settings.Default.DefaultFilePath); - + var fileName =_dependencies.DialogHelper.OpenXMLFileDialog(); + if (fileName == null) { + return; + } + var success = true; + var errorStringBuilder = new StringBuilder(); try { - IAirdragDeclarationInputData airdragInputData = _inputDataReader.Create(fileName) as IAirdragDeclarationInputData; - AirDragViewModel = (AirDragViewModel)_componentViewModelFactory.CreateComponentViewModel(airdragInputData); - AirdragModified = true; - - + var xDoc = XDocument.Load(fileName); + var doc = new XmlDocument(); + doc.Load(fileName); + + var airdragElements = xDoc.Descendants().Where(e => e.Name.LocalName == XMLNames.Component_AirDrag); + if (airdragElements.Count() == 1) { + + //GET FROM FILE + var dataProviderVersion = XMLDeclarationAirdragDataProviderV20.QUALIFIED_XSD_TYPE; + + + var validator = new XMLValidator(doc); + var valid = validator.ValidateXML(TUGraz.VectoCore.Utils.XmlDocumentType + .DeclarationComponentData); + if (!valid) { + throw new VectoException("Invalid input file"); + } + + //dataProviderVersion = XMLHelper.GetVersion(doc.Node); + + XElement airdragElement = airdragElements.First(); + XmlNode airdragNode = airdragElement.ToXmlNode(); + + var airDragInputData = _dependencies.InjectFactory.CreateAirdragData(dataProviderVersion, null, airdragNode, fileName); + AirDragViewModel = _dependencies.ComponentViewModelFactory.CreateComponentViewModel(airDragInputData) as IAirDragViewModel; + AirDragViewModel.IsReadOnly = true; + AirDragViewModel.LabelVisible = false; + success = true; + } else { + success = false; + } } catch (Exception e) { - _dialogHelper.ShowMessageBox(e.Message, "Invalid File", MessageBoxButton.OK, + _dependencies.DialogHelper.ShowMessageBox(e.Message, + "Invalid File", + MessageBoxButton.OK, MessageBoxImage.Error); + success = false; + return; + } + + if (success) { + AirdragFilePath = fileName; + } else { + _dependencies.DialogHelper.ShowMessageBox("Invalid input file", "Error", MessageBoxButton.OK, + MessageBoxImage.Error); + } + + } + + + + + private void ValidationErrorAction(XmlSeverityType arg1, ValidationEvent arg2) + { + var xmlException = arg2?.ValidationEventArgs?.Exception as XmlSchemaValidationException; + if (xmlException != null) + { + var message = xmlException.InnerException; + var sourceObject = xmlException.SourceObject as XmlElement; + var localName = sourceObject?.LocalName; + + if (sourceObject != null) + _validationErrors.Add(localName, message?.Message); } } + public ICommand RemoveAirdragDataCommand{ + get => _removeAirdragDataCommand ?? new RelayCommand(() => { + AirDragViewModel = null; + OnPropertyChanged(nameof(AirdragFilePath)); + }, () => AirDragViewModel != null); + } + #endregion - public MultistageAirdragViewModel(IDialogHelper dialogHelper, IXMLInputDataReader inputDataReader, IComponentViewModelFactory componentViewModelFactory) + public MultistageAirdragViewModel(IMultistageDependencies dependencies) { - _dialogHelper = dialogHelper; - _inputDataReader = inputDataReader; - _componentViewModelFactory = componentViewModelFactory; + _dependencies = dependencies; + _airdragFilePath = "Select Airdrag File - if no file is selected a default Airdrag Component is loaded"; } + + public MultistageAirdragViewModel(IAirdragDeclarationInputData consolidatedAirdragInputData, + IMultistageDependencies multistageDependencies) : this(multistageDependencies) + { + ConsolidatedAirdragData = consolidatedAirdragInputData; + } + + public DataSource DataSource => _airdragViewModel?.DataSource; + + public bool SavedInDeclarationMode => _airdragViewModel?.SavedInDeclarationMode ?? false; + + public string Manufacturer => _airdragViewModel?.Manufacturer; + + public string Model => _airdragViewModel?.Model; + + public DateTime Date => _airdragViewModel.Date; + + public string AppVersion => _airdragViewModel.AppVersion; + + public CertificationMethod CertificationMethod => _airdragViewModel.CertificationMethod; + + public string CertificationNumber => _airdragViewModel.CertificationNumber; + + public DigestData DigestValue => _airdragViewModel.DigestValue; + + public SquareMeter AirDragArea => _airdragViewModel.AirDragArea; + + public SquareMeter TransferredAirDragArea => _airdragViewModel.TransferredAirDragArea; + + public SquareMeter AirDragArea_0 => _airdragViewModel.AirDragArea_0; } } \ No newline at end of file diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs new file mode 100644 index 0000000000000000000000000000000000000000..f41ebb6fabc2f4b64831af84da257d90ea83b69f --- /dev/null +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs @@ -0,0 +1,367 @@ +using System; +using System.Collections.Generic; +using System.Xml; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces; +using VECTO3GUI2020.ViewModel.Implementation.Common; + +namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation +{ + + public interface IMultistageAuxiliariesViewModel : IBusAuxiliariesDeclarationData, + IElectricSupplyDeclarationData, + IPneumaticSupplyDeclarationData, + IElectricConsumersDeclarationData, + IPneumaticConsumersDeclarationData, + IHVACBusAuxiliariesDeclarationData + { + void SetAuxiliariesInputData(IBusAuxiliariesDeclarationData componentsAuxiliaryInputData); + bool HasValues { get; } + } + + + public class MultistageAuxiliariesViewModel : ViewModelBase, IMultistageAuxiliariesViewModel + { + + private IBusAuxiliariesDeclarationData _consolidatedInputData; + + + public IBusAuxiliariesDeclarationData ConsolidatedInputData + { + get => _consolidatedInputData; + set => SetProperty(ref _consolidatedInputData, value); + } + + public bool HasValues + { + get + { + var hasValues = false; + + + //Check if one of the Implemented properties of is not null + var HVACinterfaceProperties = typeof(IHVACBusAuxiliariesDeclarationData).GetProperties(); + + var notImplemented = new List<string>(new string[] { + nameof(IHVACBusAuxiliariesDeclarationData.AdjustableCoolantThermostat), + nameof(IHVACBusAuxiliariesDeclarationData.EngineWasteGasHeatExchanger) + }); + foreach (var propInfo in HVACinterfaceProperties) { + if (notImplemented.Contains(propInfo.Name)) continue; + hasValues = hasValues || propInfo.GetValue(this) != null; + } + + + var ElectricConsumersInterfaceProperties = typeof(IElectricConsumersDeclarationData).GetProperties(); + foreach (var propInfo in ElectricConsumersInterfaceProperties) { + hasValues = hasValues || propInfo.GetValue(this) != null; + } + + + + return hasValues; + } + } + + + #region HVAC + + private bool _heatPumpGroupEditingEnabled; + private BusHVACSystemConfiguration? _systemConfiguration; + private HeatPumpType? _heatPumpTypeDriverCompartment; + private HeatPumpMode? _heatPumpModeDriverCompartment; + private HeatPumpType? _heatPumpTypePassengerCompartment; + private HeatPumpMode? _heatPumpModePassengerCompartment; + + + + + public IHVACBusAuxiliariesDeclarationData HVACAux + { + get => this; + set => throw new NotImplementedException(); + } + + + private Watt _auxHeaterPower; + private bool? _doubleGlazing; + private bool? _adjustableAuxiliaryHeater; + private bool? _separateAirDistributionDucts; + private bool? _waterElectricHeater; + private bool? _airElectricHeater; + private bool? _otherHeatingTechnology; + + + public Watt AuxHeaterPower + { + get => _auxHeaterPower; + set => SetProperty(ref _auxHeaterPower, value); + } + + public bool? DoubleGlazing + { + get => _doubleGlazing; + set => SetProperty(ref _doubleGlazing, value); + } + + public bool? AdjustableAuxiliaryHeater + { + get => _adjustableAuxiliaryHeater; + set => SetProperty(ref _adjustableAuxiliaryHeater, value); + } + + public bool? SeparateAirDistributionDucts + { + get => _separateAirDistributionDucts; + set => SetProperty(ref _separateAirDistributionDucts, value); + } + + public bool? WaterElectricHeater + { + get => _waterElectricHeater; + set => SetProperty(ref _waterElectricHeater, value); + } + + public bool? AirElectricHeater + { + get => _airElectricHeater; + set => SetProperty(ref _airElectricHeater, value); + } + + public bool? OtherHeatingTechnology + { + get => _otherHeatingTechnology; + set => SetProperty(ref _otherHeatingTechnology, value); + } + + public bool? AdjustableCoolantThermostat => throw new NotImplementedException(); + + public bool EngineWasteGasHeatExchanger => throw new NotImplementedException(); + + public bool HeatPumpGroupEditingEnabled + { + get => _heatPumpGroupEditingEnabled; + set => SetProperty(ref _heatPumpGroupEditingEnabled, value); + } + + public BusHVACSystemConfiguration? SystemConfiguration + { + get => _systemConfiguration; + set => SetProperty(ref _systemConfiguration, value); + } + + public HeatPumpType? HeatPumpTypeDriverCompartment + { + get => _heatPumpTypeDriverCompartment; + set => SetProperty(ref _heatPumpTypeDriverCompartment, value); + } + + public HeatPumpMode? HeatPumpModeDriverCompartment + { + get => _heatPumpModeDriverCompartment; + set => SetProperty(ref _heatPumpModeDriverCompartment, value); + } + + public HeatPumpType? HeatPumpTypePassengerCompartment + { + get => _heatPumpTypePassengerCompartment; + set => SetProperty(ref _heatPumpTypePassengerCompartment, value); + } + + public HeatPumpMode? HeatPumpModePassengerCompartment + { + get => _heatPumpModePassengerCompartment; + set => SetProperty(ref _heatPumpModePassengerCompartment, value); + } + +#endregion + #region IElectricConsumersDeclaration + + //LED lights + private bool? _interiorLightsLed; + private bool? _dayrunninglightsLed; + private bool? _positionlightsLed; + private bool? _headlightsLed; + private bool? _brakelightsLed; + + + public bool? InteriorLightsLED + { + get => _interiorLightsLed; + set => SetProperty(ref _interiorLightsLed, value); + } + + public bool? DayrunninglightsLED + { + get => _dayrunninglightsLed; + set => SetProperty(ref _dayrunninglightsLed, value); + } + + public bool? PositionlightsLED + { + get => _positionlightsLed; + set => SetProperty(ref _positionlightsLed, value); + } + + public bool? HeadlightsLED + { + get => _headlightsLed; + set => SetProperty(ref _headlightsLed, value); + } + + public bool? BrakelightsLED + { + get => _brakelightsLed; + set => SetProperty(ref _brakelightsLed, value); + } + + + + #endregion + #region IPneumaticSuppyDeclarationData + public IPneumaticSupplyDeclarationData PneumaticSupply + { + get => this; + set => throw new NotImplementedException(); + } + + private CompressorDrive _compressorDrive; + public CompressorDrive CompressorDrive + { + get => _compressorDrive; + set => SetProperty(ref _compressorDrive, value); + } + + + #endregion + + + #region Implementation of interfaces (unused Properties); + + public XmlNode XMLSource => throw new NotImplementedException(); + + public string FanTechnology => throw new NotImplementedException(); + + public IList<string> SteeringPumpTechnology => throw new NotImplementedException(); + + public IElectricSupplyDeclarationData ElectricSupply + { + get => this; + set => throw new NotImplementedException(); + } + + public IElectricConsumersDeclarationData ElectricConsumers + { + get => this; + set => throw new NotImplementedException(); + } + + + + public IPneumaticConsumersDeclarationData PneumaticConsumers + { + get => this; + set => throw new NotImplementedException(); + } + + + + + + #endregion + public void SetAuxiliariesInputData(IBusAuxiliariesDeclarationData componentsAuxiliaryInputData) + { + if (componentsAuxiliaryInputData == null) { + return; + } + + HeatPumpGroupEditingEnabled = componentsAuxiliaryInputData.HVACAux != null; + SystemConfiguration = componentsAuxiliaryInputData.HVACAux?.SystemConfiguration; + HeatPumpTypeDriverCompartment = componentsAuxiliaryInputData.HVACAux?.HeatPumpTypeDriverCompartment; + HeatPumpModeDriverCompartment = componentsAuxiliaryInputData.HVACAux?.HeatPumpModeDriverCompartment; + HeatPumpTypePassengerCompartment = componentsAuxiliaryInputData.HVACAux?.HeatPumpTypePassengerCompartment; + HeatPumpModePassengerCompartment = componentsAuxiliaryInputData.HVACAux?.HeatPumpModePassengerCompartment; + + AuxHeaterPower = componentsAuxiliaryInputData.HVACAux?.AuxHeaterPower; + DoubleGlazing = componentsAuxiliaryInputData.HVACAux?.DoubleGlazing; + AdjustableAuxiliaryHeater = componentsAuxiliaryInputData.HVACAux?.AdjustableAuxiliaryHeater; + SeparateAirDistributionDucts = componentsAuxiliaryInputData.HVACAux?.SeparateAirDistributionDucts; + WaterElectricHeater = componentsAuxiliaryInputData.HVACAux?.WaterElectricHeater; + AirElectricHeater = componentsAuxiliaryInputData.HVACAux?.AirElectricHeater; + OtherHeatingTechnology = componentsAuxiliaryInputData.HVACAux?.OtherHeatingTechnology; + + InteriorLightsLED = componentsAuxiliaryInputData.ElectricConsumers?.InteriorLightsLED; + DayrunninglightsLED = componentsAuxiliaryInputData.ElectricConsumers?.DayrunninglightsLED; + PositionlightsLED = componentsAuxiliaryInputData.ElectricConsumers?.PositionlightsLED; + HeadlightsLED = componentsAuxiliaryInputData.ElectricConsumers?.HeadlightsLED; + BrakelightsLED = componentsAuxiliaryInputData.ElectricConsumers?.BrakelightsLED; + } + + private void ResetData() + { + HeatPumpGroupEditingEnabled = false; + SystemConfiguration = null; + HeatPumpTypeDriverCompartment = null; + HeatPumpModeDriverCompartment = null; + HeatPumpTypePassengerCompartment = null; + HeatPumpModePassengerCompartment = null; + + AuxHeaterPower = null; + DoubleGlazing = null; + AdjustableAuxiliaryHeater = null; + SeparateAirDistributionDucts = null; + WaterElectricHeater = null; + AirElectricHeater = null; + OtherHeatingTechnology = null; + + InteriorLightsLED = null; + DayrunninglightsLED = null; + PositionlightsLED = null; + HeadlightsLED = null; + BrakelightsLED = null; + } + + public MultistageAuxiliariesViewModel(IBusAuxiliariesDeclarationData consolidatedAuxiliariesInputData) + { + ConsolidatedInputData = consolidatedAuxiliariesInputData; + } + + #region Implementation of IElectricSupplyDeclarationData + + public IList<IAlternatorDeclarationInputData> Alternators => throw new NotImplementedException(); + + public bool SmartElectrics => throw new NotImplementedException(); + + public Watt MaxAlternatorPower => throw new NotImplementedException(); + + public WattSecond ElectricStorageCapacity => throw new NotImplementedException(); + + #endregion + + #region Implementation of IPneumaticSupplyDeclarationData + + + + public string Clutch => throw new NotImplementedException(); + + public double Ratio => throw new NotImplementedException(); + + public string CompressorSize => throw new NotImplementedException(); + + public bool SmartAirCompression => throw new NotImplementedException(); + + public bool SmartRegeneration => throw new NotImplementedException(); + + #endregion + + #region Implementation of IPneumaticConsumersDeclarationData + + public ConsumerTechnology AirsuspensionControl => throw new NotImplementedException(); + + public ConsumerTechnology AdBlueDosing => throw new NotImplementedException(); + + #endregion + } +} \ No newline at end of file diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs index abc2dfc76a938a9e2c1a9be5db0d2bef7a3f21d1..c24da66929e18e8cdef9752fab1ee663caf01adc 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs @@ -1,67 +1,317 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Runtime.CompilerServices; +using System.Windows; +using System.Windows.Input; +using System.Windows.Navigation; +using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Models.Simulation; using TUGraz.VectoCore.Utils; +using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Ninject; +using VECTO3GUI2020.Properties; +using VECTO3GUI2020.Util; +using VECTO3GUI2020.Util.XML; using VECTO3GUI2020.ViewModel.Implementation.Common; using VECTO3GUI2020.ViewModel.Interfaces; using VECTO3GUI2020.ViewModel.Interfaces.Common; using VECTO3GUI2020.ViewModel.Interfaces.Document; using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle; using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; +using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType; namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { - public class MultiStageJobViewModel_v0_1 : ViewModelBase, IMultiStageJobViewModel - { - #region QualifiedXSD - public static readonly string QUALIFIED_XSD_TYPE = XMLDeclarationInputDataProviderMultistageV01.QUALIFIED_XSD_TYPE; + public interface IMultiStageJobViewModel : IDeclarationMultistageJobInputData, IMultistageVIFInputData, IMultistageBusInputDataProvider + { + IManufacturingStageViewModel ManufacturingStageViewModel { get; } + } - public static readonly string INPUTPROVIDERTYPE = - typeof(XMLDeclarationInputDataProviderMultistageV01).ToString(); + public class MultiStageJobViewModel_v0_1 : ViewModelBase, IMultiStageJobViewModel + { private IDeclarationMultistageJobInputData _jobInputData; - #endregion private IManufacturingStageViewModel _manufacturingStageViewModel; + private IPrimaryVehicleInformationInputDataProvider _primaryVehicle; + private IList<IManufacturingStageInputData> _manufacturingStages; + private IManufacturingStageInputData _consolidateManufacturingStage; + private VectoSimulationJobType _jobType; + private bool _inputComplete; + private readonly IMultiStageViewModelFactory _vmFactory; + public IManufacturingStageViewModel ManufacturingStageViewModel { get => _manufacturingStageViewModel; set => SetProperty(ref _manufacturingStageViewModel, value); } - private IMultiStageViewModelFactory _vmFactory; + #region Commands - public MultiStageJobViewModel_v0_1(IMultistageBusInputDataProvider inputData, IMultiStageViewModelFactory vmFactory) + + + private ICommand _closeWindowCommand; + public ICommand CloseWindowCommand { - _jobInputData = inputData.JobInputData; - _vmFactory = vmFactory; + get + { + return _closeWindowCommand ?? new RelayCommand<Window>(window => CloseWindow(window, _dialogHelper.Value), window => true); + } + } + + private ICommand _saveVifCommand; + public ICommand SaveVIFCommand + { + get + { + return _saveVifCommand ?? new RelayCommand(() => { + var outputFile = _multistageDependencies.DialogHelperLazy.Value.SaveToXMLDialog(Settings.Default.DefaultFilePath); + if (outputFile == null) { + return; + } + SaveVif(this, outputFile); + }, () => true); + } + } + + public static void SaveVif(IMultistageVIFInputData vifData, FileOutputVIFWriter writer) + { + SaveVif(vifData, null, writer); + } + + public static void SaveVif(IMultistageVIFInputData vifData, string outputFile, FileOutputVIFWriter writer = null) + { + if (writer == null) { + var numberOfManufacturingStages = vifData.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? 0; + writer = new FileOutputVIFWriter(outputFile, numberOfManufacturingStages); + } + + var inputData = new XMLDeclarationVIFInputData(vifData.MultistageJobInputData, vifData.VehicleInputData); + + var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer); + + var jobContainer = new JobContainer(new MockSumWriter()); //TODO: Replace with real sumwriter + + var runs = factory.SimulationRuns().ToList(); + foreach (var run in runs) + { + jobContainer.AddRun(run); + } + + jobContainer.Execute(); + jobContainer.WaitFinished(); - var prevStageInputData = _jobInputData.ManufacturingStages.Last(); + var validator = new XMLValidator(XmlReader.Create(writer.XMLMultistageReportFileName)); + var valid = validator.ValidateXML(XmlDocumentType.MultistageOutputData); + if (!valid) { + Debug.WriteLine("Invalid Outputfile"); + } - _manufacturingStageViewModel = - vmFactory.CreateManufacturingStageViewModel(prevStageInputData.GetType().ToString(), - prevStageInputData); + Debug.WriteLine($"Written to {writer.XMLMultistageReportFileName}"); + } + + private ICommand _saveInputDataCommand; + private ICommand _saveInputDataAsCommand; + + public ICommand SaveInputDataCommand => + _saveInputDataCommand ?? new RelayCommand(() => { + SaveInputDataExecute(filename:_vehicleInputDataFilePath); + }, () => _vehicleInputDataFilePath != null); + + public ICommand SaveInputDataAsCommand => + _saveInputDataAsCommand ?? new RelayCommand(() => { + SaveInputDataExecute(filename:null); + }, () => true); - _jobInputData.ManufacturingStages.Add(_manufacturingStageViewModel as IManufacturingStageInputData); + private void SaveInputDataExecute(string filename) + { + if(_manufacturingStageViewModel.Vehicle is IMultistageVehicleViewModel vehicleViewModel) + { + if (vehicleViewModel.HasErrors) { + _dialogHelper.Value.ShowMessageBox(string.Join("\n", vehicleViewModel.Errors.Values), "Error" ); + return; + } + } + + if (filename == null) { + filename = _dialogHelper.Value.SaveToXMLDialog(Settings.Default.DefaultFilePath); + if (filename == null) { + return; + } + } + + var vehicleWriter = + _multistageDependencies.XMLWriterFactory.CreateVehicleWriter(_manufacturingStageViewModel.Vehicle); + + + + var xElement = vehicleWriter.GetElement(); + var xDoc = xElement.CreateWrapperDocument(XMLNamespaces.V28); + Debug.WriteLine(xElement.CreateWrapperDocument(XMLNamespaces.V28).ToString()); + + var validator = new XMLValidator(xDoc.ToXmlDocument()); + var valid = false; + try { + valid = validator.ValidateXML(XmlDocumentType.DeclarationJobData); + } catch (Exception e) { + _dialogHelper.Value.ShowMessageBox(e.Message, "Error"); + } + if (!valid) { + _dialogHelper.Value.ShowMessageBox($"Invalid Document: {validator.ValidationError}", "Error"); + //xDoc.Save(filename, SaveOptions.OmitDuplicateNamespaces); + //LoadVehicleData(filename); + } else { + xDoc.Save(filename, SaveOptions.OmitDuplicateNamespaces); + LoadVehicleData(filename); + } } + private ICommand _loadVehicleDataCommand; + private readonly Lazy<IDialogHelper> _dialogHelper; + private readonly Lazy<IXMLInputDataReader> _inputDataReader; + private string _vehicleInputDataFilePath = null; + private readonly IMultistageDependencies _multistageDependencies; + private readonly DataSource _dataSource; - public IPrimaryVehicleInformationInputDataProvider PrimaryVehicle => throw new NotImplementedException(); + public ICommand LoadVehicleDataCommand + { + get + { + return _loadVehicleDataCommand ?? new RelayCommand(LoadVehicleDataExecute, () => true); + } + } - public IList<IManufacturingStageInputData> ManufacturingStages => throw new NotImplementedException(); - } + private void LoadVehicleDataExecute() + { + var fileName = _dialogHelper.Value.OpenXMLFileDialog(); + if (fileName == null) { + return; + } - public interface IMultiStageJobViewModel : IDeclarationMultistageJobInputData - { - IManufacturingStageViewModel ManufacturingStageViewModel { get; } + LoadVehicleData(fileName); + return; + } + + private bool LoadVehicleData(string fileName) + { + IDeclarationInputDataProvider inputData; + IVehicleDeclarationInputData vehicleInputData; + try { + inputData = (IDeclarationInputDataProvider)_inputDataReader.Value.CreateDeclaration(fileName); + vehicleInputData = inputData.JobInputData.Vehicle; + _manufacturingStageViewModel.SetInputData(vehicleInputData); + + VehicleInputDataFilePath = fileName; + } catch (Exception e) { + _dialogHelper.Value.ShowMessageBox(e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); + return true; + } + + return false; + } + + public string VehicleInputDataFilePath + { + get => _vehicleInputDataFilePath; + set => SetProperty(ref _vehicleInputDataFilePath, value); + } + #endregion + + + public MultiStageJobViewModel_v0_1(IMultistageBusInputDataProvider inputData, IMultiStageViewModelFactory vmFactory, IMultistageDependencies multistageDependencies ) + { + _dataSource = inputData.DataSource; + _jobInputData = inputData.JobInputData; + _vmFactory = vmFactory; + _consolidateManufacturingStage = _jobInputData.ConsolidateManufacturingStage; + _manufacturingStages =_jobInputData.ManufacturingStages; + _primaryVehicle = _jobInputData.PrimaryVehicle; + _dialogHelper = multistageDependencies.DialogHelperLazy; + _inputDataReader = multistageDependencies.InputDataReaderLazy; + _manufacturingStageViewModel = + vmFactory.GetManufacturingStageViewModel(_consolidateManufacturingStage); + _multistageDependencies = multistageDependencies; + } + + + #region Implementation of IInputDataProvider + + public DataSource DataSource => _dataSource; + + #endregion + + #region Implementation of IMultistageVIFInputData + + public IVehicleDeclarationInputData VehicleInputData => _manufacturingStageViewModel.Vehicle; + + public IMultistageBusInputDataProvider MultistageJobInputData => this; + + + #endregion + + #region Implementation of IDeclarationInputDataProvider + + + public IDeclarationMultistageJobInputData JobInputData => _jobInputData; + + IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData => throw new NotImplementedException(); + + public IPrimaryVehicleInformationInputDataProvider PrimaryVehicleData => _primaryVehicle; + + public XElement XMLHash => throw new NotImplementedException(); + + #endregion + + #region Implementation of IDeclarationMultistageJobInputData + + public IPrimaryVehicleInformationInputDataProvider PrimaryVehicle + { + get => _primaryVehicle; + set => _primaryVehicle = value; + } + + public IList<IManufacturingStageInputData> ManufacturingStages + { + get => _manufacturingStages; + set => _manufacturingStages = value; + } + + public IManufacturingStageInputData ConsolidateManufacturingStage + { + get => _consolidateManufacturingStage; + set => _consolidateManufacturingStage = value; + } + + public VectoSimulationJobType JobType + { + get => _jobType; + set => _jobType = value; + } + + public bool InputComplete + { + get => _inputComplete; + set => _inputComplete = value; + } + + + #endregion } + + } \ No newline at end of file diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs index 860a7c77dcc61d23cdb406b4546dcd3215845ba6..33ff82615d8b0ab71de08ad4dde538597463f8ee 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/NewMultiStageJobViewModel.cs @@ -46,7 +46,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation _inputDataReader = inputDataReader; _dialogHelper = dialogHelper; _vmFactory = vmFactory; - Title = "New Multistage file"; + Title = "New Multistage File"; VifPath = "Select VIF File"; } @@ -62,7 +62,10 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private void AddVifFileExecute() { - var fileName = _dialogHelper.OpenXMLFileDialog(_settings.DefaultFilePath); + var fileName = _dialogHelper.OpenXMLFileDialog(); + if (fileName == null) { + return; + } IMultistageBusInputDataProvider inputDataProvider = null; try { inputDataProvider = _inputDataReader.Create(fileName) as IMultistageBusInputDataProvider; @@ -77,12 +80,22 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation return; } + MultiStageJobViewModel = null; MultiStageJobViewModel = - _vmFactory.CreateMultiStageJobViewModel(inputDataProvider.GetType().ToString(), inputDataProvider); + _vmFactory.GetMultiStageJobViewModel(inputDataProvider); VifPath = fileName; } - + + private ICommand _closeWindow; + + public ICommand CloseWindow + { + get => _closeWindow ?? new RelayCommand<Window>(window => base.CloseWindow(window, _dialogHelper, false), + (window) => MultiStageJobViewModel == null); + } + + #endregion diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs index 189839bbb571b7d9ce1b8a34a65c64d20483146b..90e54e472247409ce253f842c908ea3e585edc53 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultiStageViewModelFactory.cs @@ -14,16 +14,32 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Interfaces { public interface IMultiStageViewModelFactory { - IViewModelBase CreateNewMultiStageJobViewModel(); + IViewModelBase GetNewMultistageJobViewModel(); - IMultiStageJobViewModel CreateMultiStageJobViewModel(string inputProviderType, IMultistageBusInputDataProvider inputData); + IMultiStageJobViewModel GetMultiStageJobViewModel(IMultistageBusInputDataProvider inputData); - IVehicleViewModel CreateInterimStageVehicleViewModel(string inputProviderType); + IVehicleViewModel GetInterimStageVehicleViewModel(); - IVehicleViewModel CreateInterimStageVehicleViewModel(string inputProviderType, IVehicleDeclarationInputData prevStageInputData); + IVehicleViewModel GetInterimStageVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData); - IManufacturingStageViewModel CreateManufacturingStageViewModel(string inputProviderType, IManufacturingStageInputData prevStageInputData); + IManufacturingStageViewModel GetManufacturingStageViewModel(IManufacturingStageInputData consolidatedManufacturingStageInputData); + IMultistageAirdragViewModel GetMultistageAirdragViewModel(); - IMultistageAirdragViewModel CreateMultistageAirdragViewModel(); + IMultistageAirdragViewModel GetMultistageAirdragViewModel( + IAirdragDeclarationInputData consolidatedAirdragInputData); + + IMultistageAuxiliariesViewModel GetAuxiliariesViewModel( + IBusAuxiliariesDeclarationData consolidatedAuxiliariesInputData); + //IViewModelBase CreateNewMultiStageJobViewModel(); + + //IMultiStageJobViewModel CreateMultiStageJobViewModel(string inputProviderType, IMultistageBusInputDataProvider inputData); + + //IVehicleViewModel CreateInterimStageVehicleViewModel(string inputProviderType); + + //IVehicleViewModel CreateInterimStageVehicleViewModel(string inputProviderType, IVehicleDeclarationInputData prevStageInputData); + + //IManufacturingStageViewModel CreateManufacturingStageViewModel(string inputProviderType, IManufacturingStageInputData consolidatedManufacturingStageInputData); + + //IMultistageAirdragViewModel CreateMultistageAirdragViewModel(); } } diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageAirdragViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageAirdragViewModel.cs index e4bd94ca779906599e45c1f79fc921fbdaa6ba31..76374ce4a63e6220041f9b79a23420562b9a3574 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageAirdragViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Interfaces/IMultistageAirdragViewModel.cs @@ -1,9 +1,12 @@ -using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; +using TUGraz.VectoCommon.InputData; +using VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components; namespace VECTO3GUI2020.ViewModel.MultiStage.Interfaces { - public interface IMultistageAirdragViewModel + public interface IMultistageAirdragViewModel : IAirdragDeclarationInputData { - + IAirDragViewModel AirDragViewModel { get; set; } + + void SetAirdragInputData(IAirdragDeclarationInputData airdragInputData); } } \ No newline at end of file diff --git a/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs b/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs index 79cb6a1d4efc7ab3a9309ddbcd65fdebc18545db..39c340cab1c0b53be00821ad7b767b3d8b523926 100644 --- a/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs +++ b/VECTO3GUI2020/Views/CustomControls/CustomControlExtensionMethods.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Resources; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; +using TUGraz.VectoCommon.Utils; namespace VECTO3GUI2020.Views.CustomControls { @@ -20,17 +22,17 @@ namespace VECTO3GUI2020.Views.CustomControls public static string GetLabelByPropertyName(this UserControl userControl, DependencyProperty dependencyProperty, ResourceManager resourceManager) { var name = "unresolved"; - var Binding = userControl.GetBindingExpression(dependencyProperty); - var PropertyName = Binding?.ResolvedSourcePropertyName; + var binding = userControl.GetBindingExpression(dependencyProperty); + var propertyName = binding?.ResolvedSourcePropertyName; - if (PropertyName == null || Binding == null) + if (propertyName == null || binding == null) { return name; } - var extendedPropertyName = Binding?.ResolvedSource.GetType().Name + "_" + PropertyName; - name = resourceManager?.GetString(extendedPropertyName) ?? resourceManager?.GetString(PropertyName) ?? (PropertyName + "_"); //_Postfix to label Property Names that are not in strings.resx + var extendedPropertyName = binding?.ResolvedSource.GetType().Name + "_" + propertyName; + name = resourceManager?.GetString(extendedPropertyName) ?? resourceManager?.GetString(propertyName) ?? (propertyName + "_"); //_Postfix to label Property Names that are not in strings.resx return name; } @@ -43,8 +45,59 @@ namespace VECTO3GUI2020.Views.CustomControls if (PropertyName == null || Binding == null) { return typeof(object); } - var PropertyType = Binding?.ResolvedSource.GetType().GetProperty(PropertyName).PropertyType; + var PropertyType = Binding?.ResolvedSource?.GetType().GetProperty(PropertyName).PropertyType; return PropertyType; } + + public static object CreateDummyContent(this UserControl userControl, DependencyPropertyChangedEventArgs e, bool createEnum = false) + { + var type = userControl.GetPropertyType(e.Property); + if (type == null) + { + return null; + } + try + { + dynamic dynType = type; + var baseType = dynType.BaseType; + //Create SI Dummy + + if (baseType?.BaseType != null && baseType.BaseType == typeof(SI)) + { + var createMethod = baseType.GetMethod("Create"); + var dummyContent = createMethod?.Invoke(null, new object[] { (new double()) }); + return dummyContent; + } + else if(createEnum) + { + var bindingProperty = userControl.GetBindingExpression(e.Property); + var dataItemType = bindingProperty?.DataItem.GetType(); + var sourcePropertyType = + dataItemType?.GetProperty(bindingProperty?.ResolvedSourcePropertyName)?.PropertyType; + + var underlyingType = Nullable.GetUnderlyingType(dynType); + Enum dummyEnum; + if (underlyingType != null) + { + dummyEnum = Enum.Parse(underlyingType, underlyingType.GetEnumNames()[0]); + } + else + { + dummyEnum = Enum.Parse(dynType, dynType.GetEnumNames()[0]); + } + + return dummyEnum; + } + + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + return null; + } + + return null; + } + } } diff --git a/VECTO3GUI2020/Views/JoblistView.xaml b/VECTO3GUI2020/Views/JoblistView.xaml index eb9658e8d7527529e0a4bec394444a9a0b72e551..1498fe07bc94389bbf6ebb408054aa68a823e5fd 100644 --- a/VECTO3GUI2020/Views/JoblistView.xaml +++ b/VECTO3GUI2020/Views/JoblistView.xaml @@ -4,73 +4,98 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VECTO3GUI2020.Views" - xmlns:converter="clr-namespace:VECTO3GUI2020.Helper.Converter" + xmlns:converter="clr-namespace:VECTO3GUI2020.Helper.Converter" xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.Implementation" d:DataContext="{d:DesignInstance Type=implementation:JobListViewModel}" mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="800"> + d:DesignHeight="450" d:DesignWidth="1000"> - <Grid Background="Azure"> + <Grid> <Grid.ColumnDefinitions> - <ColumnDefinition Width="1*"/> + <ColumnDefinition MinWidth="140" Width="1*"/> <ColumnDefinition Name="MiddleColumn" Width="6*"/> - <ColumnDefinition Width="1*"/> + <ColumnDefinition MinWidth="140" Width="1*"/> </Grid.ColumnDefinitions> - - <Grid Grid.Column="0"> - <StackPanel> - <Button Template="{DynamicResource MainViewButtonStyle}">Simulieren</Button> - <Button Command="{Binding moveJobUp}" Template="{DynamicResource MainViewButtonStyle}" + <Border BorderBrush="Transparent" BorderThickness="1"> + <Grid> + <StackPanel HorizontalAlignment="Stretch"> + <Button x:Name="button" Margin="4" HorizontalAlignment="Stretch" + Style="{StaticResource MultiStageButtonStyle1}" >Simulation</Button> + <Button x:Name="button1" Margin="4" HorizontalAlignment="Stretch" + Style="{StaticResource MultiStageButtonStyle1}" + Command="{Binding moveJobUp}" CommandParameter="{Binding ElementName=JobDataGrid, Path=SelectedItem}">Up</Button> - <Button Command="{Binding moveJobDown}" Template="{DynamicResource MainViewButtonStyle}" + <Button x:Name="button2" Margin="4" HorizontalAlignment="Stretch" + Style="{StaticResource MultiStageButtonStyle1}" + Command="{Binding moveJobDown}" CommandParameter="{Binding ElementName=JobDataGrid, Path=SelectedItem}">Down</Button> - </StackPanel> - </Grid> + </StackPanel> + </Grid> + </Border> <Grid Grid.Column="1"> - <StackPanel Margin="2 0 2 0"> - <DataGrid ItemsSource="{Binding Jobs}" + <Border BorderBrush="{StaticResource AccentColorButton}" BorderThickness="1"> + <StackPanel VerticalAlignment="Stretch"> + <DataGrid ItemsSource="{Binding Jobs}" Name="JobDataGrid" HorizontalAlignment="Stretch" IsReadOnly="True" CanUserReorderColumns="False" AutoGenerateColumns="False" SelectionMode="Single" - BorderThickness="0" - GridLinesVisibility="Horizontal" - HorizontalScrollBarVisibility="Disabled" RowHeaderWidth="0" + GridLinesVisibility="None" + HorizontalScrollBarVisibility="Disabled" + RowHeaderWidth="0" + ColumnHeaderHeight="30" + VerticalAlignment="Stretch" + VerticalContentAlignment="Stretch" + BorderThickness="0" + ColumnHeaderStyle="{StaticResource JobListDataGridHeaderStyle}" + Height="Auto" + RowHeight="30" + AlternatingRowBackground="LightGray" CellStyle="{DynamicResource DataGridCellStyle1}" > - <DataGrid.Columns> - <DataGridTextColumn Header="Name" Binding="{Binding DocumentName}" Width="1*"/> - <DataGridTextColumn Header="Type" Binding="{Binding DocumentType}" Width="1*"/> - </DataGrid.Columns> - - <DataGrid.RowDetailsTemplate> - <DataTemplate> - <StackPanel Orientation="Vertical"> - <Label Content="Filename"/> - <TextBlock Text="{Binding DataSource.SourceFile}" TextWrapping="Wrap" Margin="10" /> - </StackPanel> - - </DataTemplate> - </DataGrid.RowDetailsTemplate> - <DataGrid.InputBindings> - <MouseBinding + <DataGrid.Columns> + <DataGridTextColumn Header="Name" Binding="{Binding DocumentName}" Width="1*"></DataGridTextColumn> + <DataGridTextColumn Header="Type" Binding="{Binding DocumentType}" Width="1*"></DataGridTextColumn> + </DataGrid.Columns> + <DataGrid.RowDetailsTemplate> + <DataTemplate> + <StackPanel Orientation="Vertical"> + <Label x:Name="label" Content="Filename"/> + <TextBlock x:Name="textBlock" Text="{Binding DataSource.SourceFile}" TextWrapping="Wrap" Margin="10" /> + </StackPanel> + </DataTemplate> + </DataGrid.RowDetailsTemplate> + <DataGrid.InputBindings> + <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding EditJob}" CommandParameter="{Binding ElementName=JobDataGrid, Path=SelectedItem}"></MouseBinding> - </DataGrid.InputBindings> - </DataGrid> - <Label Content="Loading . . ." Visibility="{Binding IsLoading, Converter={StaticResource BooleanToVisibilityConverter}}"/> - </StackPanel> + </DataGrid.InputBindings> + </DataGrid> + <Label x:Name="label" Content="Loading . . ." Visibility="{Binding IsLoading, Converter={StaticResource BooleanToVisibilityConverter}}"/> + </StackPanel> + </Border> </Grid> <Grid Grid.Column="2"> - <StackPanel> - <Button Command="{Binding AddJob}" Template="{DynamicResource MainViewButtonStyle}">OpenFile</Button> - <Button Command="{Binding EditJob}" Template="{DynamicResource MainViewButtonStyle}" - CommandParameter="{Binding ElementName=JobDataGrid, Path=SelectedItem}" Style="{DynamicResource MainViewButton}">EditFile</Button> - <Button Command="{Binding NewManufacturingStageFile}" Template="{DynamicResource MainViewButtonStyle}">New Multistage File</Button> - <Button Command="{Binding RemoveJob}" Template="{DynamicResource MainViewButtonStyle}" + <Border BorderBrush="Transparent" BorderThickness="1"> + <StackPanel > + <Button x:Name="button3" Margin="4" HorizontalAlignment="Stretch" + Style="{StaticResource MultiStageButtonStyle1}" + Command="{Binding AddJob}" Background="#FFDDDDDD"> + OpenFile</Button> + <Button x:Name="button4" Margin ="4" HorizontalAlignment="Stretch" + Style="{StaticResource MultiStageButtonStyle1}" + Command="{Binding EditJob}" + CommandParameter="{Binding ElementName=JobDataGrid, Path=SelectedItem}">EditFile</Button> + <Button x:Name="button5" Margin="4" HorizontalAlignment="Stretch" + Style="{StaticResource MultiStageButtonStyle1}" + Command="{Binding NewManufacturingStageFile}" AutomationProperties.AutomationId="JobListViewNewManufacturingStageFileButton">New Multistage File</Button> + <Button x:Name="button6" Margin="4" HorizontalAlignment="Stretch" + Style="{StaticResource MultiStageButtonStyle1}" + Command="{Binding RemoveJob}" CommandParameter="{Binding ElementName=JobDataGrid, Path=SelectedItem}">DeleteFile</Button> - </StackPanel> + </StackPanel> + </Border> </Grid> </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/AirDragView_v2_8.xaml b/VECTO3GUI2020/Views/Multistage/AirDragView_v2_8.xaml new file mode 100644 index 0000000000000000000000000000000000000000..f09fcfaecd01282da28029b2559b740a029aaecc --- /dev/null +++ b/VECTO3GUI2020/Views/Multistage/AirDragView_v2_8.xaml @@ -0,0 +1,35 @@ +<UserControl x:Class="VECTO3GUI2020.Views.Multistage.AirDragView_v2_8" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" + xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components" d:DataContext="{d:DesignInstance Type=implementation:AirDragViewModel_v2_8}" + mc:Ignorable="d" + d:DesignHeight="450" d:DesignWidth="800"> + <Grid> + <StackPanel> + <Label + Visibility="{Binding LabelVisible, Converter={StaticResourceExtension BooleanToVisibilityConverter}}">Airdrag</Label> + <customControls:LabledTextBoxMultistage + Content="{Binding Manufacturer}" + ReadOnly="{Binding IsReadOnly}"/> + <customControls:LabledTextBoxMultistage + Content="{Binding Model}" + ReadOnly="{Binding IsReadOnly}"/> + <customControls:LabledTextBoxMultistage + Content="{Binding CertificationNumber}" + ReadOnly="{Binding IsReadOnly}"/> + <customControls:LabledTextBoxMultistage + Content="{Binding AirDragArea}" + ReadOnly="{Binding IsReadOnly}"/> + <customControls:LabledTextBoxMultistage + Content="{Binding AirDragArea_0}" + ReadOnly="{Binding IsReadOnly}"/> + <customControls:LabledTextBoxMultistage + Content="{Binding TransferredAirDragArea}" + ReadOnly="{Binding IsReadOnly}"/> + </StackPanel> + </Grid> +</UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/AirDragView_v2_8.xaml.cs b/VECTO3GUI2020/Views/Multistage/AirDragView_v2_8.xaml.cs new file mode 100644 index 0000000000000000000000000000000000000000..581e3209f91c2731f29a91b6a9a7809575b6fb3e --- /dev/null +++ b/VECTO3GUI2020/Views/Multistage/AirDragView_v2_8.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace VECTO3GUI2020.Views.Multistage +{ + /// <summary> + /// Interaction logic for AirDragView_v2_8.xaml + /// </summary> + public partial class AirDragView_v2_8 : UserControl + { + public AirDragView_v2_8() + { + InitializeComponent(); + } + } +} diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml b/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml index 3678da4594f7616e639489fef7dc336aceccb3f6..614ebbf578717fae433d5e08887404b7c31095a6 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/FilePicker.xaml @@ -5,19 +5,21 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" mc:Ignorable="d" - d:DesignHeight="30" d:DesignWidth="800" Name="filepickercustomcontrol"> - <Grid> - <Grid Margin="4" DockPanel.Dock="Top"> - <Grid.ColumnDefinitions> - <ColumnDefinition></ColumnDefinition> - <ColumnDefinition Width="30px"></ColumnDefinition> - </Grid.ColumnDefinitions> - <TextBox VerticalContentAlignment="Center" Height="Auto" Padding="4" Margin = "0 0 0 0" IsReadOnly="True" - Text="{Binding Text, ElementName=filepickercustomcontrol}" HorizontalAlignment="Stretch"/> - <Button Padding="4" Margin="4 0 0 0" Grid.Column="1" Command="{Binding Command, ElementName=filepickercustomcontrol}"> - <Image Source="../../../Resources/folderpicker.ico"> - </Image> - </Button> - </Grid> + d:DesignHeight="30" d:DesignWidth="800" Name="filepickercustomcontrol" MinHeight="40" MinWidth="400"> + <Grid Margin="4" VerticalAlignment="Stretch"> + <Grid.RowDefinitions> + <RowDefinition></RowDefinition> + </Grid.RowDefinitions> + <Grid.ColumnDefinitions> + <ColumnDefinition></ColumnDefinition> + <ColumnDefinition Width="30px"></ColumnDefinition> + </Grid.ColumnDefinitions> + <TextBox x:Name="textBox" VerticalContentAlignment="Center" Padding="4" Margin = "0 0 0 0" IsReadOnly="True" + Text="{Binding Text, ElementName=filepickercustomcontrol}" HorizontalAlignment="Stretch" TextWrapping="Wrap" + Style="{DynamicResource TextBoxStyle1}"/> + <Button x:Name="button" Padding="4" Margin="4 0 0 0" Grid.Column="1" ContentTemplate="{DynamicResource AddDocumentIcon}" + Command="{Binding Command, ElementName=filepickercustomcontrol}" Style="{DynamicResource FilePickerButtonStyle}"> + + </Button> </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml b/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml new file mode 100644 index 0000000000000000000000000000000000000000..70a9405da64668068b8b8f80ad368e5a6eeed25e --- /dev/null +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml @@ -0,0 +1,29 @@ +<UserControl x:Class="VECTO3GUI2020.Views.Multistage.CustomControls.LabledTextBoxMultistage" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" + mc:Ignorable="d" + Name="labledTextBoxMultistage" + d:DesignHeight="450" d:DesignWidth="800"> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="1*" SharedSizeGroup="N"/> + </Grid.ColumnDefinitions> + + <Label Content="{Binding LabelText, ElementName=labledTextBoxMultistage}"/> + <TextBox Grid.Column="1" Name ="TextBoxContent" VerticalAlignment="Center" Margin="2 0 2 0" + Text="{Binding ElementName=labledTextBoxMultistage, Path=Content, + Converter={StaticResourceExtension SIValueToStringConverter}, + ValidatesOnExceptions=True, + UpdateSourceTrigger=PropertyChanged}" + Style="{DynamicResource TextBoxStyle1}" + IsReadOnly="{Binding ElementName=labledTextBoxMultistage, Path=ReadOnly}"/> + <Label Grid.Column="2" x:Name="AutoUnitLabel" + Content="{Binding DummyContent, ElementName=labledTextBoxMultistage, Converter={StaticResource SIToUnitStringConverter}}"> + </Label> + </Grid> +</UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml.cs b/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml.cs new file mode 100644 index 0000000000000000000000000000000000000000..8fd84d304a34df546fd1f5c539263a198f576c5d --- /dev/null +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/LabledTextBoxMultistage.xaml.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using VECTO3GUI2020.Properties; +using VECTO3GUI2020.Views.CustomControls; + +namespace VECTO3GUI2020.Views.Multistage.CustomControls +{ + + + + + /// <summary> + /// Interaction logic for LabledTextBoxMultistage.xaml + /// </summary> + public partial class LabledTextBoxMultistage : UserControl + { + #region Dependency Properties + + public static readonly DependencyProperty ReadOnlyProperty = DependencyProperty.Register( + "ReadOnly", typeof(bool), typeof(LabledTextBoxMultistage), new PropertyMetadata(default(bool))); + + public bool ReadOnly + { + get { return (bool)GetValue(ReadOnlyProperty); } + set { SetValue(ReadOnlyProperty, value); } + } + + + public static readonly DependencyProperty DummyContentProperty = DependencyProperty.Register( + "DummyContent", typeof(object), typeof(LabledTextBoxMultistage), new PropertyMetadata(default(object))); + + public object DummyContent + { + get { return (object)GetValue(DummyContentProperty); } + set { SetValue(DummyContentProperty, value); } + } + + public new static readonly DependencyProperty ContentProperty = + DependencyProperty.Register("Content", + typeof(object), + typeof(LabledTextBoxMultistage), + new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(ContentChanged))); //TODO Default value null breaks it for SIs default value "" for strings + + public new object Content + { + get { return (object)GetValue(ContentProperty); } + set + { + SetCurrentValue(ContentProperty, value); + } + } + + + public static readonly DependencyProperty LabelTextProperty = DependencyProperty.Register( + "LabelText", typeof(string), typeof(LabledTextBoxMultistage), new PropertyMetadata(null)); + + public string LabelText + { + get { return (string)GetValue(LabelTextProperty); } + set { SetValue(LabelTextProperty, value); } + } + + public static readonly DependencyProperty ModeProperty = DependencyProperty.Register( + "Mode", typeof(MultistageParameterViewMode), typeof(LabledTextBoxMultistage), new PropertyMetadata(default(MultistageParameterViewMode))); + + public MultistageParameterViewMode Mode + { + get { return (MultistageParameterViewMode)GetValue(ModeProperty); } + set { SetValue(ModeProperty, value); } + } + + #endregion + + private static void ContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var labledTextBoxMultistage = (CustomControls.LabledTextBoxMultistage)d; + + + labledTextBoxMultistage.DummyContent = labledTextBoxMultistage.CreateDummyContent(e, + createEnum:labledTextBoxMultistage.Mode == MultistageParameterViewMode.COMBOBOX); + + if (labledTextBoxMultistage.LabelText != null) + { + return; + } + labledTextBoxMultistage.LabelText = labledTextBoxMultistage.GetLabelByPropertyName( + LabledTextBoxMultistage.ContentProperty, + Strings.ResourceManager); + } + + public LabledTextBoxMultistage() + { + InitializeComponent(); + } + } +} diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml index 014a3ffecadfd7a46b7c6767b231464cdb3b4b94..f98cf65220b7bd8e10e4894e676a6601ab0e44dd 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml @@ -6,12 +6,15 @@ xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" Name="MultistageParameterControl"> + + + <Grid> <!-- _____________________________________________ Text mode ___________________________________________________________________--> <Grid Visibility="{Binding ElementName=MultistageParameterControl, - Path=ComboBoxMode, - Converter={StaticResource InvertedBoolToVisibilityConverter}}"> + Path=Mode, + Converter={StaticResource ParameterModeToVisibilityConverter}, ConverterParameter={x:Static local:MultistageParameterViewMode.TEXTBOX}}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="4*" SharedSizeGroup="W"/> <ColumnDefinition Width="1*" SharedSizeGroup="N"/> @@ -20,72 +23,130 @@ <ColumnDefinition Width="1*" SharedSizeGroup="N"/> </Grid.ColumnDefinitions> - <Label Content="{Binding LabelText, ElementName=MultistageParameterControl}"></Label> - <CheckBox Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Name="CheckBox" - Visibility="{Binding Optional, + <Label x:Name="label" Content="{Binding LabelText, ElementName=MultistageParameterControl}"></Label> + <CheckBox Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Name="CheckBox" + Visibility="{Binding ShowCheckBox, ElementName=MultistageParameterControl, Converter={StaticResource BooleanToVisibilityConverter}}" IsChecked="{Binding EditingEnabled, ElementName=MultistageParameterControl, Mode=TwoWay}"/> - <TextBox Grid.Column="2" VerticalAlignment="Center" Margin="2 0 2 0" IsReadOnly="True" - Text="{Binding ElementName=MultistageParameterControl, Path=PreviousContent, Converter={StaticResource SIValueToStringConverter}}" + <TextBox x:Name="textBox" Grid.Column="2" VerticalAlignment="Center" Margin="2 0 2 0" IsReadOnly="True" IsTabStop="False" + Text="{Binding ElementName=MultistageParameterControl, Path=PreviousContent, Converter={StaticResource SIValueToStringConverter}}" + + Style="{DynamicResource TextBoxStyle1}" Visibility="{Binding Optional, ElementName=MultistageParameterControl, Converter={StaticResource BooleanToVisibilityConverter}, UpdateSourceTrigger=PropertyChanged}"/> - <TextBox Grid.Column="3" Name ="TextBoxContent" VerticalAlignment="Center" Margin="2 0 2 0" + <TextBox Grid.Column="3" Name ="TextBoxContent" VerticalAlignment="Center" Margin="2 0 2 0" Text="{Binding Content, ElementName=MultistageParameterControl, Converter={StaticResource SIValueToStringConverter}, - ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}" + Style="{DynamicResource TextBoxStyle1}" IsReadOnly="{Binding ElementName=MultistageParameterControl, Path=EditingEnabled, Converter={StaticResource InvertBoolConverter}}" MouseDoubleClick="Control_OnMouseDoubleClick"/> - <Label Grid.Column="4" x:Name="AutoUnitLabel" + <Label Grid.Column="4" x:Name="AutoUnitLabel" Content="{Binding DummyContent, ElementName=MultistageParameterControl, Converter={StaticResource SIToUnitStringConverter}}"> - </Label> - </Grid> + </Label> + </Grid> + + + <!--_________________________________________________ComboBoxMode____________________________________________________________________--> <Grid Visibility="{Binding ElementName=MultistageParameterControl, - Path=ComboBoxMode, - Converter={StaticResource BooleanToVisibilityConverter}}"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="4*" SharedSizeGroup="W"/> - <ColumnDefinition Width="1*" SharedSizeGroup="N"/> - <ColumnDefinition Width="4*" SharedSizeGroup="W"/> - <ColumnDefinition Width="4*" SharedSizeGroup="W"/> - <ColumnDefinition Width="1*" SharedSizeGroup="N"/> - </Grid.ColumnDefinitions> - - <Label Content="{Binding LabelText, ElementName=MultistageParameterControl}"></Label> - <CheckBox Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Name="CheckBoxCombo" - Visibility="{Binding Optional, + Path=Mode, + Converter={StaticResource ParameterModeToVisibilityConverter}, ConverterParameter={x:Static local:MultistageParameterViewMode.COMBOBOX}}"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="1*" SharedSizeGroup="N"/> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="1*" SharedSizeGroup="N"/> + </Grid.ColumnDefinitions> + + <Label x:Name="label1" Content="{Binding LabelText, ElementName=MultistageParameterControl}"></Label> + <CheckBox Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Name="CheckBoxCombo" + Visibility="{Binding ShowCheckBox, ElementName=MultistageParameterControl, Converter={StaticResource BooleanToVisibilityConverter}}" IsChecked="{Binding EditingEnabled, ElementName=MultistageParameterControl, Mode=TwoWay}"/> - <ComboBox Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="2 0 2 0" Visibility="{Binding Optional, + <ComboBox x:Name="comboBox" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="2 0 2 0" IsTabStop="False" Visibility="{Binding Optional, ElementName=MultistageParameterControl, Converter={StaticResource BooleanToVisibilityConverter}}" IsHitTestVisible="False" Focusable="False" IsEditable="False" SelectedValue="{Binding PreviousContent, Mode=TwoWay, ElementName=MultistageParameterControl}" - ItemsSource="{Binding ListItems, ElementName=MultistageParameterControl}"/> + ItemsSource="{Binding GeneratedListItems, ElementName=MultistageParameterControl}"> + <ComboBox.ItemTemplate> + <DataTemplate> + <TextBlock x:Name="textBlock" Text="{Binding Converter={StaticResource EnumConverter}}" /> + </DataTemplate> + </ComboBox.ItemTemplate> + </ComboBox> - <ComboBox Grid.Column="3" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="2 0 2 0" - SelectedValue="{Binding Content, Mode=TwoWay, ElementName=MultistageParameterControl}" - ItemsSource="{Binding ListItems, ElementName=MultistageParameterControl}" - IsHitTestVisible="{Binding ElementName=MultistageParameterControl, - Path=EditingEnabled}" - Focusable="{Binding RelativeSource={RelativeSource Self}, - Path=IsHitTestVisible}" IsEditable="False"/> + <!--ItemsSource="{Binding ListItems, ElementName=MultistageParameterControl}"--> + <ComboBox x:Name="comboBox1" Grid.Column="3" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="2 0 2 0" + SelectedValue="{Binding Content, Mode=TwoWay, ElementName=MultistageParameterControl, ValidatesOnExceptions=True}" + IsEnabled="{Binding EditingEnabled, ElementName=MultistageParameterControl}" + IsEditable="False" MouseDoubleClick="Control_OnMouseDoubleClick"> + <ComboBox.ItemsSource> + <PriorityBinding> + <Binding Path="ListItems" ElementName="MultistageParameterControl" Converter="{StaticResource NullToUnsetValue}"/> + <Binding Path="GeneratedListItems" ElementName="MultistageParameterControl"/> + </PriorityBinding> + </ComboBox.ItemsSource> + <ComboBox.ItemTemplate> + <DataTemplate> + <TextBlock x:Name="textBlock" Text="{Binding Converter={StaticResource EnumConverter}}" /> + </DataTemplate> + </ComboBox.ItemTemplate> + </ComboBox> - - <Label Grid.Column="4" + <Label x:Name="label2" Grid.Column="4" Content="{Binding DummyContent, ElementName=MultistageParameterControl, Converter={StaticResource SIToUnitStringConverter}}"> - </Label> - </Grid> + </Label> + </Grid> + + <!--_________________________________________________CheckBoxMode____________________________________________________________________--> + <Grid Visibility="{Binding ElementName=MultistageParameterControl, + Path=Mode, + Converter={StaticResource ParameterModeToVisibilityConverter}, ConverterParameter={x:Static local:MultistageParameterViewMode.CHECKBOX}}"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="1*" SharedSizeGroup="N"/> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="4*" SharedSizeGroup="W"/> + <ColumnDefinition Width="1*" SharedSizeGroup="N"/> + </Grid.ColumnDefinitions> + + <Label x:Name="label3" Content="{Binding LabelText, ElementName=MultistageParameterControl}"></Label> + <CheckBox Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Name="CheckBoxCheckBox" + Visibility="{Binding ShowCheckBox, + ElementName=MultistageParameterControl, + Converter={StaticResource BooleanToVisibilityConverter}}" + IsChecked="{Binding EditingEnabled, + ElementName=MultistageParameterControl, + Mode=TwoWay}"/> + + <CheckBox x:Name="checkBox" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center" IsTabStop="False" IsChecked="{Binding ElementName=MultistageParameterControl, + Path=PreviousContent, + Converter={StaticResource XToBoolConverter}}" IsEnabled="False"> + </CheckBox> + + <CheckBox x:Name="checkBox1" Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center" IsEnabled="{Binding ElementName=MultistageParameterControl, + Path=EditingEnabled}"> + + </CheckBox> + <Label x:Name="label4" Grid.Column="4" + Content="{Binding DummyContent, ElementName=MultistageParameterControl, Converter={StaticResource SIToUnitStringConverter}}"> + </Label> + </Grid> + + <!-- DatePicker Mode --> + </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs index 4ebc41fb04ebe3732a8902f710fc46428ebfb8c9..56b9132540b91478afe68c9529058223168266a6 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/MultiStageParameter.xaml.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Linq; @@ -17,18 +18,30 @@ using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Castle.Components.DictionaryAdapter.Xml; +using Microsoft.Build.Framework; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Utils; +using VECTO3GUI2020.Annotations; using VECTO3GUI2020.Properties; using VECTO3GUI2020.Views.CustomControls; namespace VECTO3GUI2020.Views.Multistage.CustomControls { - /// <summary> - /// Interaction logic for MultiStageParameter.xaml - /// </summary> - public partial class MultiStageParameter : UserControl + + public enum MultistageParameterViewMode + { + TEXTBOX, + CHECKBOX, + COMBOBOX + } + + + /// <summary> + /// Interaction logic for MultiStageParameter.xaml + /// </summary> + public partial class MultiStageParameter : UserControl, INotifyPropertyChanged { + #region Dependency Properties @@ -50,27 +63,32 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls MultiStageParameter multiStageParameter = (MultiStageParameter)d; if ((bool)e.NewValue == false) { multiStageParameter.EditingEnabled = true; + multiStageParameter.ShowCheckBox = false; + } else { + multiStageParameter.ShowCheckBox = true; } } public bool Optional { get { return (bool)GetValue(OptionalProperty); } - set { SetValue(OptionalProperty, value); } + set + { + SetValue(OptionalProperty, value); + } } - public static readonly DependencyProperty ComboBoxModeProperty = DependencyProperty.Register( - "ComboBoxMode", typeof(bool), typeof(MultiStageParameter), new PropertyMetadata(false)); + public static readonly DependencyProperty ModeProperty = DependencyProperty.Register( + "Mode", typeof(MultistageParameterViewMode), typeof(MultiStageParameter), new PropertyMetadata(MultistageParameterViewMode.TEXTBOX)); - public bool ComboBoxMode + public MultistageParameterViewMode Mode { - get { return (bool)GetValue(ComboBoxModeProperty); } - set { SetValue(ComboBoxModeProperty, value); } + get { return (MultistageParameterViewMode)GetValue(ModeProperty); } + set { SetValue(ModeProperty, value); } } - public static readonly DependencyProperty LabelTextProperty = DependencyProperty.Register( "LabelText", typeof(string), typeof(MultiStageParameter), new PropertyMetadata(null)); @@ -88,7 +106,10 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls public bool EditingEnabled { - get { return (bool)GetValue(EditingEnabledProperty);} + get + { + return (bool)GetValue(EditingEnabledProperty); + } set { SetValue(EditingEnabledProperty, value); @@ -96,7 +117,8 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls } public static readonly DependencyProperty DummyContentProperty = DependencyProperty.Register( - "DummyContent", typeof(object), typeof(MultiStageParameter), new PropertyMetadata(default(object))); + "DummyContent", typeof(object), typeof(MultiStageParameter), + new FrameworkPropertyMetadata(null)); public object DummyContent { @@ -105,13 +127,13 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls } - public static readonly DependencyProperty HideCheckBoxProperty = DependencyProperty.Register( - "HideCheckBox", typeof(bool), typeof(MultiStageParameter), new PropertyMetadata(default(bool))); + public static readonly DependencyProperty ShowCheckBoxProperty = DependencyProperty.Register( + "ShowCheckBox", typeof(bool), typeof(MultiStageParameter), new PropertyMetadata(true)); - public bool HideCheckBox + public bool ShowCheckBox { - get { return (bool)GetValue(HideCheckBoxProperty); } - set { SetValue(HideCheckBoxProperty, value); } + get { return (bool)GetValue(ShowCheckBoxProperty); } + set { SetValue(ShowCheckBoxProperty, value); } } @@ -120,7 +142,7 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls DependencyProperty.Register("Content", typeof(object), typeof(MultiStageParameter), - new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(ContentChanged))); //TODO Default value null breaks it for SIs default value "" for strings + new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, ContentChanged)); //TODO Default value null breaks it for SIs default value "" for strings public new object Content { @@ -132,13 +154,31 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls } public static readonly DependencyProperty ListItemsProperty = DependencyProperty.Register( - "ListItems", typeof(List<object>), typeof(MultiStageParameter), new PropertyMetadata(default(List<object>))); + "ListItems", typeof(ObservableCollection<Enum>), typeof(MultiStageParameter), + new FrameworkPropertyMetadata(default(ObservableCollection<Enum>), ListItemsChanged)); - public List<object> ListItems + private static void ListItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { - get { return (List<object>)GetValue(ListItemsProperty); } + //throw new NotImplementedException(); + } + + public ObservableCollection<Enum> ListItems + { + get { return (ObservableCollection<Enum>)GetValue(ListItemsProperty); } set { SetValue(ListItemsProperty, value); } } + + + public static readonly DependencyProperty GeneratedListItemsProperty = DependencyProperty.Register( + "GeneratedListItems", typeof(List<object>), typeof(MultiStageParameter), new PropertyMetadata(defaultValue:null)); + + public List<object> GeneratedListItems + { + get { return (List<object>)GetValue(GeneratedListItemsProperty); } + set { SetValue(GeneratedListItemsProperty, value); } + } + + #endregion @@ -146,57 +186,87 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls { var multiStageParameter = (CustomControls.MultiStageParameter) d; + if (multiStageParameter.DummyContent == null) { + multiStageParameter.DummyContent = multiStageParameter.CreateDummyContent(e, multiStageParameter); + } - multiStageParameter.DummyContent = multiStageParameter.CreateDummyContent(e, multiStageParameter); + if (multiStageParameter.Content != null) { + multiStageParameter.EditingEnabled = true; + } + if (multiStageParameter.Mode == MultistageParameterViewMode.COMBOBOX) { - multiStageParameter.SetListItems(); + multiStageParameter.GenerateListItemsAndSetComboboxValue(); + } - if (multiStageParameter.LabelText != null) { - return; + if (multiStageParameter.LabelText == null) { + multiStageParameter.LabelText = multiStageParameter.GetLabelByPropertyName( + MultiStageParameter.ContentProperty, + Strings.ResourceManager); } - multiStageParameter.LabelText = multiStageParameter.GetLabelByPropertyName( - MultiStageParameter.ContentProperty, - Strings.ResourceManager); } - private void SetListItems() + private void GenerateListItemsAndSetComboboxValue() { - if (!ComboBoxMode) + if (Mode != MultistageParameterViewMode.COMBOBOX) return; - if(DummyContent is Enum en) { - var enType = en.GetType(); + if (GeneratedListItems == null) { + if (DummyContent is Enum dummyEnum) + { + var enType = dummyEnum.GetType(); + GeneratedListItems = Enum.GetValues(enType).Cast<object>().ToList(); + + + } + + if (Content is Enum contentEnum) + { + var enType = contentEnum.GetType(); + GeneratedListItems = Enum.GetValues(enType).Cast<object>().ToList(); - ListItems = Enum.GetValues(enType).Cast<object>().ToList(); + } + + //ListItems = GeneratedListItems; } } private object CreateDummyContent(DependencyPropertyChangedEventArgs e, UserControl userControl) { - dynamic type = userControl.GetPropertyType(e.Property); + var type = userControl.GetPropertyType(e.Property); + if (type == null) { + return null; + } - var baseType = type.BaseType; + if (type == typeof(ConvertedSI)) { + //var dummyContent = new ConvertedSI(0, (userControl.Content as ConvertedSI).Units); + return null; //dummyContent; + } try { + dynamic dynType = type; + var baseType = dynType.BaseType; //Create SI Dummy - if (baseType.BaseType == typeof(SI)) { + + + + if (baseType?.BaseType != null && baseType.BaseType == typeof(SI)) { var createMethod = baseType.GetMethod("Create"); var dummyContent = createMethod?.Invoke(null, new object[] { (new double()) }); return dummyContent; - } else{ + }else if(Mode == MultistageParameterViewMode.COMBOBOX) { var bindingProperty = userControl.GetBindingExpression(e.Property); - var dataItemType = bindingProperty?.DataItem.GetType(); + var dataItemType = bindingProperty?.DataItem?.GetType(); var sourcePropertyType = dataItemType?.GetProperty(bindingProperty?.ResolvedSourcePropertyName)?.PropertyType; - var underlyingType = Nullable.GetUnderlyingType(type); + var underlyingType = Nullable.GetUnderlyingType(dynType); Enum dummyEnum; if (underlyingType != null) { dummyEnum = Enum.Parse(underlyingType, underlyingType.GetEnumNames()[0]); } else { - dummyEnum = Enum.Parse(type, type.GetEnumNames()[0]); + dummyEnum = Enum.Parse(dynType, dynType.GetEnumNames()[0]); } @@ -215,12 +285,25 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls private static void EditingEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MultiStageParameter multiStageParameter = (MultiStageParameter)d; - if((bool)e.NewValue == false) - { + if((bool)e.NewValue == false) { + if (!Validation.GetHasError(multiStageParameter.TextBoxContent)) { + multiStageParameter.DummyContent = multiStageParameter.Content; + } multiStageParameter.Content = null; } else { - if (multiStageParameter.DummyContent != null) { - multiStageParameter.Content = multiStageParameter.DummyContent; + if (multiStageParameter.Content != null) { + multiStageParameter.DummyContent = multiStageParameter.Content; + }else if (multiStageParameter.DummyContent != null) { + if (multiStageParameter.Mode == MultistageParameterViewMode.COMBOBOX) { + if (multiStageParameter.ListItems != null && !multiStageParameter.ListItems.Contains(multiStageParameter.DummyContent)) { + multiStageParameter.Content = multiStageParameter.ListItems[0]; + } else { + multiStageParameter.Content = multiStageParameter.DummyContent; + } + } else { + multiStageParameter.Content = multiStageParameter.DummyContent; + } + } } } @@ -234,13 +317,19 @@ namespace VECTO3GUI2020.Views.Multistage.CustomControls public MultiStageParameter() { InitializeComponent(); - - //LabelText = this.GetLabelByPropertyName(ContentProperty, Strings.ResourceManager); } private void Control_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) { EditingEnabled = true; } + + public event PropertyChangedEventHandler PropertyChanged; + + [NotifyPropertyChangedInvocator] + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } } } diff --git a/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml new file mode 100644 index 0000000000000000000000000000000000000000..27c7ae37a583c40ddc6409478d4a03b271913bf6 --- /dev/null +++ b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml @@ -0,0 +1,88 @@ +<UserControl x:Class="VECTO3GUI2020.Views.Multistage.ManufacturingStageAuxiliariesView" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" + xmlns:impl="clr-namespace:VECTO3GUI2020.ViewModel.MultiStage.Implementation" + mc:Ignorable="d" + d:DesignHeight="450" d:DesignWidth="800" BorderBrush="{DynamicResource ButtonHighlightColor}" BorderThickness="2" Margin="4" + d:DataContext="{d:DesignInstance impl:MultistageAuxiliariesViewModel}"> + <Grid> + <ScrollViewer> + <DockPanel> + <StackPanel DockPanel.Dock="Top"> + <Label Background="{DynamicResource ButtonHighlightColor}" FontSize="15" HorizontalAlignment="Stretch">AUXILIARIES</Label> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.ElectricConsumers.InteriorLightsLED}" + Content="{Binding InteriorLightsLED}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.ElectricConsumers.DayrunninglightsLED}" + Content="{Binding DayrunninglightsLED}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.ElectricConsumers.PositionlightsLED}" + Content="{Binding PositionlightsLED}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.ElectricConsumers.BrakelightsLED}" + Content="{Binding BrakelightsLED}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.ElectricConsumers.HeadlightsLED}" + Content="{Binding HeadlightsLED}"/> + + <Separator/> + <customControls:MultiStageParameter Mode="COMBOBOX" + EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.SystemConfiguration}" + Content="{Binding HVACAux.SystemConfiguration}"/> + + <customControls:MultiStageParameter Mode="COMBOBOX" + EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.HeatPumpTypeDriverCompartment}" + Content="{Binding HeatPumpTypeDriverCompartment}" + ShowCheckBox="False"/> + <customControls:MultiStageParameter Mode="COMBOBOX" + EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.HeatPumpModeDriverCompartment}" + Content="{Binding HeatPumpModeDriverCompartment}" + ShowCheckBox="False"/> + <customControls:MultiStageParameter Mode="COMBOBOX" + EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.HeatPumpTypePassengerCompartment}" + Content="{Binding HeatPumpTypePassengerCompartment}" + ShowCheckBox="False"/> + <customControls:MultiStageParameter Mode="COMBOBOX" + EditingEnabled="{Binding HeatPumpGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.HeatPumpModePassengerCompartment}" + Content="{Binding HeatPumpModePassengerCompartment}" + ShowCheckBox="False"/> + <Separator/> + <customControls:MultiStageParameter Mode="TEXTBOX" + Validation.ErrorTemplate="{DynamicResource multistageParameterControlErrorTemplate}" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.AuxHeaterPower}" + Content="{Binding AuxHeaterPower}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.DoubleGlazing}" + Content="{Binding DoubleGlazing}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.AdjustableAuxiliaryHeater}" + Content="{Binding AdjustableAuxiliaryHeater}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.SeparateAirDistributionDucts}" + Content="{Binding SeparateAirDistributionDucts}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.WaterElectricHeater}" + Content="{Binding WaterElectricHeater}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.AirElectricHeater}" + Content="{Binding AirElectricHeater}"/> + <customControls:MultiStageParameter Mode="CHECKBOX" + PreviousContent="{Binding ConsolidatedInputData.HVACAux.OtherHeatingTechnology}" + Content="{Binding OtherHeatingTechnology}"/> + + <Separator/> + </StackPanel> + </DockPanel> + </ScrollViewer> + </Grid> +</UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml.cs b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml.cs new file mode 100644 index 0000000000000000000000000000000000000000..1f8b74075cc13d319c4ada8b36a13fcff22ce931 --- /dev/null +++ b/VECTO3GUI2020/Views/Multistage/ManufacturingStageAuxiliariesView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace VECTO3GUI2020.Views.Multistage +{ + /// <summary> + /// Interaction logic for ManufacturingStageAuxiliariesView.xaml + /// </summary> + public partial class ManufacturingStageAuxiliariesView : UserControl + { + public ManufacturingStageAuxiliariesView() + { + InitializeComponent(); + } + } +} diff --git a/VECTO3GUI2020/Views/Multistage/ManufacturingStageView.xaml b/VECTO3GUI2020/Views/Multistage/ManufacturingStageView.xaml index 61edf5344a0221799b0c8ea34275379041434b20..14fdd3e62ef2c5ad1ca3935b4181f9de347d5ef5 100644 --- a/VECTO3GUI2020/Views/Multistage/ManufacturingStageView.xaml +++ b/VECTO3GUI2020/Views/Multistage/ManufacturingStageView.xaml @@ -7,7 +7,7 @@ xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.MultiStage.Implementation" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance implementation:ManufacturingStageViewModel_v0_1 }"> - <Grid MaxWidth="900"> + <Grid> <DockPanel> <Grid Margin="4" DockPanel.Dock="Top"> <Grid.ColumnDefinitions> @@ -16,11 +16,11 @@ </Grid.ColumnDefinitions> </Grid> <DockPanel Grid.Row="1" LastChildFill="False" DockPanel.Dock="Top" > - <Button DockPanel.Dock="Left" Style="{DynamicResource MultiStageButtonStyle1}" + <Button Width="100" DockPanel.Dock="Left" Style="{DynamicResource MultiStageButtonStyle1}" Margin="4" Command="{Binding SwitchComponentViewCommand}" CommandParameter="Vehicle">Vehicle</Button> - <Button DockPanel.Dock="Left" Style="{DynamicResource MultiStageButtonStyle1}" + <Button Width="100" DockPanel.Dock="Left" Style="{DynamicResource MultiStageButtonStyle1}" Margin="4" Command="{Binding SwitchComponentViewCommand}" CommandParameter="Airdrag">Airdrag</Button> - <Button DockPanel.Dock="Left" Style="{DynamicResource MultiStageButtonStyle1}" + <Button Width="100" DockPanel.Dock="Left" Style="{DynamicResource MultiStageButtonStyle1}" Margin="4" Command="{Binding SwitchComponentViewCommand}" CommandParameter="Auxiliaries">Auxiliaries</Button> <StackPanel Orientation="Horizontal" DockPanel.Dock="Right"> @@ -29,7 +29,7 @@ </StackPanel> </DockPanel> - <ContentControl Content="{Binding CurrentView}"></ContentControl> + <ContentControl DockPanel.Dock="Top" Content="{Binding CurrentView}"/> </DockPanel> </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml b/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml index 585ae3f4da309829478e5d7e438c9faf69498a15..449554b41c18f989dc1709a95bfe4b9e3eedfd0e 100644 --- a/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml +++ b/VECTO3GUI2020/Views/Multistage/MultiStageView.xaml @@ -5,13 +5,48 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage" xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.MultiStage.Implementation" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance implementation:MultiStageJobViewModel_v0_1}"> <Grid> - <ScrollViewer> <DockPanel> + <customControls:FilePicker + DockPanel.Dock="Top" + Command="{Binding LoadVehicleDataCommand}" + Text="{Binding VehicleInputDataFilePath, TargetNullValue=Select Vehicle Input Data . . .}"></customControls:FilePicker> + <Border BorderThickness="1" BorderBrush="{DynamicResource ButtonHighlightColor}" Height="40" DockPanel.Dock="Bottom"> + <DockPanel LastChildFill="False"> + <Button DockPanel.Dock="Right" + Width="100" + Command="{Binding CloseWindowCommand}" + CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" + Style="{DynamicResource MultiStageButtonStyle1}" + Margin="4" + Padding="4">Close</Button> + <Button DockPanel.Dock="Right" + Width="100" + Command="{Binding SaveVIFCommand}" + Style="{DynamicResource MultiStageButtonStyle1}" + Margin="4" + Padding="4">Save as new VIF</Button> + <Button + DockPanel.Dock="Right" + Width="100" + Style="{DynamicResource MultiStageButtonStyle1}" + Margin="4" + Padding="4" + Command="{Binding SaveInputDataCommand}">Save Input</Button> + <Button + DockPanel.Dock="Right" + Width="100" + Style="{DynamicResource MultiStageButtonStyle1}" + Margin="4" + Padding="4" + Command="{Binding SaveInputDataAsCommand}">Save Input As ... </Button> + </DockPanel> + </Border> <ContentControl DockPanel.Dock="Top" Content="{Binding ManufacturingStageViewModel}"/> + </DockPanel> - </ScrollViewer> </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml b/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml index 61ba5e753f8159e6f3c0cdea009de6d4e6c65ace..3eb4584508a506adcebea3e1751586bf590a7697 100644 --- a/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml +++ b/VECTO3GUI2020/Views/Multistage/MultistageAirDragView.xaml @@ -4,18 +4,51 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage" - xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" - xmlns:customControls1="clr-namespace:VECTO3GUI2020.Views.CustomControls" + xmlns:customControlsMultistage="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.CustomControls" xmlns:impl="clr-namespace:VECTO3GUI2020.ViewModel.MultiStage.Implementation" + xmlns:properties="clr-namespace:VECTO3GUI2020.Properties" mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="800" BorderBrush="Aquamarine" BorderThickness="2" Margin="4" + d:DesignHeight="450" d:DesignWidth="800" BorderBrush="{DynamicResource ButtonHighlightColor}" BorderThickness="2" Margin="4" d:DataContext="{d:DesignInstance impl:MultistageAirdragViewModel}"> <Grid> - <StackPanel> - <Label Content="AIRDRAG" HorizontalAlignment="Stretch" Background="Aquamarine"/> - <customControls1:LabledCheckBoxAutomatic Content="{Binding AirdragModified}"></customControls1:LabledCheckBoxAutomatic> - <customControls:FilePicker Height="30px" VerticalAlignment="Top" Text="Test" Command="{Binding LoadAirdragFileCommand}"></customControls:FilePicker> - </StackPanel> + <ScrollViewer> + <DockPanel> + <StackPanel DockPanel.Dock="Top"> + <Label Content="AIRDRAG" HorizontalAlignment="Stretch" Background="{DynamicResource ButtonHighlightColor}" Style="{DynamicResource LabelStyle1}"/> + <DockPanel HorizontalAlignment="Stretch" > + <Button Width="30" Margin="4" DockPanel.Dock="Right" + Style="{DynamicResource FilePickerButtonStyle}" + ContentTemplate="{DynamicResource TrashIcon}" + Command="{Binding RemoveAirdragDataCommand}"> + + </Button> + <customControlsMultistage:FilePicker + DockPanel.Dock="Left" + Text="{Binding AirdragFilePath, TargetNullValue=Select Airdrag Input Data}" + Command="{Binding LoadAirdragFileCommand}"/> + </DockPanel> + <StackPanel HorizontalAlignment="Stretch" Margin="4" > + + <StackPanel Visibility="{Binding ConsolidatedAirdragData, Converter={StaticResource NullToVisibilityConverter}}"> + <Label Style="{DynamicResource LabelStyle1}">Consolidated Airdrag Data</Label> + <customControlsMultistage:LabledTextBoxMultistage Content="{Binding ConsolidatedAirdragData.Manufacturer, Mode=OneWay}" ReadOnly="True"/> + <customControlsMultistage:LabledTextBoxMultistage Content="{Binding ConsolidatedAirdragData.Model, Mode=OneWay}" ReadOnly="True"/> + <customControlsMultistage:LabledTextBoxMultistage Content="{Binding ConsolidatedAirdragData.AirDragArea, Mode=OneWay}" ReadOnly="True"/> + </StackPanel> + <Label Style="{DynamicResource LabelStyle1}">Data from File</Label> + <ContentControl Content="{Binding AirDragViewModel}" + Visibility="{Binding AirDragViewModel, Converter={StaticResource NullToVisibilityConverter}}"> + <ContentControl.ContentTemplate> + <DataTemplate> + <local:AirDragView_v2_8 DataContext="{Binding }"/> + </DataTemplate> + </ContentControl.ContentTemplate> + </ContentControl> + </StackPanel> + </StackPanel> + </DockPanel> + </ScrollViewer> </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/Multistage/NewMultistageFileView.xaml b/VECTO3GUI2020/Views/Multistage/NewMultistageFileView.xaml index ac0ac999b7bc8da565663053300b00d0d649d96d..03e223fc519d0201a90adfb8a754447dd5b4b106 100644 --- a/VECTO3GUI2020/Views/Multistage/NewMultistageFileView.xaml +++ b/VECTO3GUI2020/Views/Multistage/NewMultistageFileView.xaml @@ -5,24 +5,24 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage" xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.MultiStage.Implementation" + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance implementation:NewMultiStageJobViewModel }"> + d:DesignHeight="450" x:Name="NewMultistageJobView" d:DesignWidth="800" d:DataContext="{d:DesignInstance implementation:NewMultiStageJobViewModel }"> <Grid> <Grid MaxWidth="900"> <DockPanel> - <Grid Margin="4" DockPanel.Dock="Top"> - <Grid.ColumnDefinitions> - <ColumnDefinition></ColumnDefinition> - <ColumnDefinition Width="30px"></ColumnDefinition> - </Grid.ColumnDefinitions> - <TextBox VerticalContentAlignment="Center" Height="Auto" Padding="4" Margin = "0 0 0 0" IsReadOnly="True" - Text="{Binding VifPath}" HorizontalAlignment="Stretch"/> - <Button Padding="4" Margin="4 0 0 0" Grid.Column="1" Command="{Binding AddVifFile}"> - <Image Source="../../Resources/folderpicker.ico"> - </Image> - </Button> + <Grid DockPanel.Dock="Top"> + <customControls:FilePicker x:Name="NewMultistageFilePicker" Grid.Row="0" Text="{Binding VifPath}" HorizontalAlignment="Stretch" Command="{Binding AddVifFile}"/> </Grid> + <Button Style="{DynamicResource MultiStageButtonStyle1}" + Margin="4" DockPanel.Dock="Bottom" + Visibility="{Binding MultiStageJobViewModel, Converter={StaticResource NullToVisibilityConverter}, ConverterParameter=invert}" + Command="{Binding CloseWindow}" + CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"> + Cancel + </Button> <ContentControl Grid.Row="2" Content="{Binding MultiStageJobViewModel}"/> + </DockPanel> </Grid> </Grid> diff --git a/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml b/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml index 42823fb59c1a3dca9a85e03ff71e37c00b4c5c20..a456f13b2c03dc6d2c06523657b39608076e2496 100644 --- a/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml +++ b/VECTO3GUI2020/Views/Multistage/VehicleView_v2_8.xaml @@ -6,64 +6,152 @@ xmlns:local="clr-namespace:VECTO3GUI2020.Views.Multistage" xmlns:custom="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.MultiStage.Implementation" d:DataContext="{d:DesignInstance Type=implementation:DeclarationInterimStageBusVehicleViewModel_v2_8}" mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="800" BorderBrush="Aquamarine" BorderThickness="2px" Margin="4px"> + d:DesignHeight="450" d:DesignWidth="800" BorderBrush="{DynamicResource ButtonHighlightColor}" BorderThickness="2px" Margin="4px"> <Grid> - <StackPanel> - <Label Content="VEHICLE DATA" HorizontalAlignment="Stretch" Background="Aquamarine"/> - <custom:MultiStageParameter Optional="False" Content="{Binding Manufacturer}"/> - <custom:MultiStageParameter Optional="False" Content="{Binding ManufacturerAddress}"/> - <custom:MultiStageParameter Optional="False" Content="{Binding VIN}"/> - - <custom:MultiStageParameter - PreviousContent="{Binding PrevStageInputData.Model}" - Content="{Binding Model}"/> - <Separator/> - <custom:MultiStageParameter EditingEnabled="{Binding - MeasurementsGroupEditingEnabled}" - PreviousContent="{Binding PrevStageInputData.Height}" - Content="{Binding Height}"/> - <custom:MultiStageParameter EditingEnabled="{Binding - MeasurementsGroupEditingEnabled}" - PreviousContent="{Binding PrevStageInputData.Width}" - Content="{Binding Width}" - HideCheckBox="True"/> - <custom:MultiStageParameter EditingEnabled="{Binding - MeasurementsGroupEditingEnabled}" - PreviousContent="{Binding PrevStageInputData.Length}" - Content="{Binding Length}" - HideCheckBox="True"/> - <Separator/> - <custom:MultiStageParameter EditingEnabled="{Binding - NumberOfPassengersEditingEnabled}" - PreviousContent="{Binding PrevStageInputData.NumberOfPassengersUpperDeck}" - Content="{Binding NumberOfPassengersUpperDeck}"/> - <custom:MultiStageParameter EditingEnabled="{Binding - NumberOfPassengersEditingEnabled}" - PreviousContent="{Binding PrevStageInputData.NumberOfPassengersLowerDeck}" - Content="{Binding NumberOfPassengersLowerDeck}" - HideCheckBox="True"/> - - <Separator/> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.GrossVehicleMassRating}" - Content="{Binding GrossVehicleMassRating}"/> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.DoorDriveTechnology}" - Content="{Binding DoorDriveTechnology}" ComboBoxMode="True" /> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.LegislativeClass}" - Content="{Binding LegislativeClass}" ComboBoxMode="True" /> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.RegisteredClass}" - Content="{Binding RegisteredClass}" ComboBoxMode="True" /> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.VehicleCode}" - Content="{Binding VehicleCode}" ComboBoxMode="True" /> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.LowEntry}" - Content="{Binding LowEntry}" /> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.EntranceHeight}" - Content="{Binding EntranceHeight}" /> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.TankSystem}" - Content="{Binding TankSystem}" ComboBoxMode="True" /> - <custom:MultiStageParameter PreviousContent="{Binding PrevStageInputData.VehicleDeclarationType}" - Content="{Binding VehicleDeclarationType}" ComboBoxMode="True" /> - - - </StackPanel> + <ScrollViewer> + <DockPanel> + <StackPanel> + <Label Content="VEHICLE DATA" HorizontalAlignment="Stretch" FontSize="15" VerticalAlignment="Stretch" + Style="{DynamicResource LabelStyle1}"/> + + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + Optional="False" + Content="{Binding Manufacturer, ValidatesOnDataErrors=True}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + Optional="False" + Content="{Binding ManufacturerAddress, ValidatesOnDataErrors=True}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + Optional="False" + Content="{Binding VIN, ValidatesOnDataErrors=True}"/> + + <custom:MultiStageParameter + PreviousContent="{Binding ConsolidatedVehicleData.Model}" + Content="{Binding Model}"/> + + <custom:MultiStageParameter + PreviousContent="{Binding ConsolidatedVehicleData.LegislativeClass}" + Content="{Binding LegislativeClass}" + Mode="COMBOBOX" /> + + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + PreviousContent="{Binding ConsolidatedVehicleData.CurbMassChassis}" + Content="{Binding CurbMassChassis}"/> + + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + PreviousContent="{Binding ConsolidatedVehicleData.GrossVehicleMassRating}" + Content="{Binding GrossVehicleMassRating}"/> + + + <custom:MultiStageParameter x:Name="AirdragModified" + Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding AirdragModifiedMultistageEditingEnabled}" + PreviousContent="{Binding ConsolidatedAirdragmodified}" + Content="{Binding AirdragModifiedEnum, ValidatesOnDataErrors=True}" + Mode="COMBOBOX"/> + + <custom:MultiStageParameter + PreviousContent="{Binding ConsolidatedVehicleData.TankSystem}" + Content="{Binding TankSystem}" + Mode="COMBOBOX" /> + + <custom:MultiStageParameter + PreviousContent="{Binding ConsolidatedVehicleData.RegisteredClass}" + Content="{Binding RegisteredClass}" + Mode="COMBOBOX" /> + + <Separator/> + <custom:MultiStageParameter + EditingEnabled="{Binding NumberOfPassengersEditingEnabled}" + PreviousContent="{Binding ConsolidatedVehicleData.NumberOfPassengersUpperDeck}" + Content="{Binding NumberOfPassengersUpperDeck}"/> + <custom:MultiStageParameter + EditingEnabled="{Binding NumberOfPassengersEditingEnabled}" + PreviousContent="{Binding ConsolidatedVehicleData.NumberOfPassengersLowerDeck}" + Content="{Binding NumberOfPassengersLowerDeck}" + ShowCheckBox="False"/> + <Separator/> + <custom:MultiStageParameter + PreviousContent="{Binding ConsolidatedVehicleData.VehicleCode}" + ListItems="{Binding VehicleCodeAllowedValues}" + Content="{Binding VehicleCode}" + Mode="COMBOBOX" + /> + + <custom:MultiStageParameter + PreviousContent="{Binding ConsolidatedVehicleData.LowEntry}" + Content="{Binding LowEntry}" + Mode="CHECKBOX" + /> + + <Separator/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding + MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedHeightInMm}" + Content="{Binding HeightInMm, ValidatesOnExceptions=True}" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedWidthInMm}" + Content="{Binding WidthInMm}" + ShowCheckBox="False" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedLengthInMm}" + Content="{Binding LengthInMm}" + ShowCheckBox="False" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + + <custom:MultiStageParameter Validation.ErrorTemplate="{StaticResource multistageParameterControlErrorTemplate}" + EditingEnabled="{Binding MeasurementsGroupEditingEnabled}" + PreviousContent="{Binding ConsolidatedEntranceHeightInMm}" + Content="{Binding EntranceHeightInMm}" + ShowCheckBox="False" + DummyContent="{Binding Source={StaticResource milimeterDummy}}"/> + + <Separator/> + + + <custom:MultiStageParameter + PreviousContent="{Binding ConsolidatedVehicleData.DoorDriveTechnology}" + + Content="{Binding DoorDriveTechnology}" Mode="COMBOBOX" /> + + + <custom:MultiStageParameter + EditingEnabled="True" + ShowCheckBox="False" + PreviousContent="{Binding ConsolidatedVehicleData.VehicleDeclarationType}" + Content="{Binding VehicleDeclarationType}" Mode="COMBOBOX" /> + + <Label Content="ADAS" Style="{DynamicResource LabelStyle1}"/> + <custom:MultiStageParameter + EditingEnabled="{Binding AdasEditingEnabled}" + PreviousContent="{Binding ConsolidatedVehicleData.ADAS.EngineStopStart}" + Content="{Binding EngineStopStartNullable}" + + Mode="CHECKBOX"/> + <custom:MultiStageParameter + EditingEnabled="{Binding AdasEditingEnabled}" + PreviousContent="{Binding ConsolidatedVehicleData.ADAS.EcoRoll}" + Content="{Binding EcoRollTypeNullable}" + ShowCheckBox="False" + Mode="COMBOBOX"/> + <custom:MultiStageParameter + EditingEnabled="{Binding AdasEditingEnabled}" + PreviousContent="{Binding ConsolidatedVehicleData.ADAS.PredictiveCruiseControl}" + Content="{Binding PredictiveCruiseControlNullable}" + ShowCheckBox="False" + Mode="COMBOBOX"/> + <custom:MultiStageParameter + EditingEnabled="{Binding AdasEditingEnabled}" + PreviousContent="{Binding ConsolidatedVehicleData.ADAS.ATEcoRollReleaseLockupClutch}" + Content="{Binding ATEcoRollReleaseLockupClutch}" + ShowCheckBox="False" + Mode="CHECKBOX"/> + </StackPanel> + </DockPanel> + </ScrollViewer> </Grid> </UserControl> diff --git a/VECTO3GUI2020/Views/SettingsView.xaml b/VECTO3GUI2020/Views/SettingsView.xaml index c96f1beb1430f5e72df72de1636b0149f5736b81..b026ea4a7bae84508a5d5df3b98a7e0a4ce289f0 100644 --- a/VECTO3GUI2020/Views/SettingsView.xaml +++ b/VECTO3GUI2020/Views/SettingsView.xaml @@ -4,25 +4,12 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:VECTO3GUI2020.Views" - mc:Ignorable="d" Height="450" Width="800"> + xmlns:customControls="clr-namespace:VECTO3GUI2020.Views.Multistage.CustomControls" + xmlns:implementation="clr-namespace:VECTO3GUI2020.ViewModel.Implementation" + mc:Ignorable="d" Height="450" Width="800" d:DataContext="{d:DesignInstance implementation:SettingsViewModel }"> <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="4*"/> - <ColumnDefinition Width="4*"/> - <ColumnDefinition Width="1*"/> - </Grid.ColumnDefinitions> - <Grid.RowDefinitions> - <RowDefinition Height="40"></RowDefinition> - <RowDefinition/> - <RowDefinition/> - </Grid.RowDefinitions> - - <Label VerticalAlignment="Center" Grid.Column="0" Grid.Row="0" Content="File Path: "></Label> - <TextBox Grid.Column="1" Grid.Row="0" Text="{Binding DefaultFilePath, Mode=OneWay}" IsReadOnly="True" TextWrapping="Wrap"/> - <Button Grid.Column="2" Grid.Row="0" Style="{DynamicResource MainViewButton}" Content="Change Path" Command="{Binding ChangeFilePath}"> - <Button.Background> - <ImageBrush/> - </Button.Background> - </Button> + <StackPanel> + <customControls:FilePicker Width="450" MinWidth="400" Text="{Binding DefaultFilePath}" HorizontalAlignment="Stretch" Command="{Binding ChangeFilePath}"/> + </StackPanel> </Grid> </UserControl> diff --git a/Vecto3GUI2020Test/AllTestWithoutUI.testsession b/Vecto3GUI2020Test/AllTestWithoutUI.testsession new file mode 100644 index 0000000000000000000000000000000000000000..09c416848ccbebfc94be4fd3f62e8923f6fd29a7 --- /dev/null +++ b/Vecto3GUI2020Test/AllTestWithoutUI.testsession @@ -0,0 +1,14 @@ +<SessionState ContinuousTestingMode="0" IsActive="True" Name="AllTestWithoutUI" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.ViewModelTests.VIFTests.LoadPrimaryVehicleAndStageInputThenCreateVif</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.ViewModelTests.VehicleViewModelTests.airdragNotModifiedInPreviousStages</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.ViewModelTests.VIFTests.loadPrimaryVehicleOnlyAndCreateNewVIF</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.ViewModelTests.VIFTests.TestAirdragLoad</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.LoadAndSaveVehicleData.SaveVehicleDataWithMissingFields</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.LoadAndSaveVehicleData.loadPrimaryAndSaveVehicleData</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.LoadAndSaveVehicleData.loadInputFileMultipleStage</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.LoadAndSaveVehicleData</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.ViewModelTests.VIFTests</TestId> + <TestId>NUnit3x::7F4FF473-96B3-461E-9CE6-76D3B75F87CB::.NETFramework,Version=v4.8::Vecto3GUI2020Test.ViewModelTests.VehicleViewModelTests</TestId> + </TestAncestor> +</SessionState> \ No newline at end of file diff --git a/Vecto3GUI2020Test/UI/DesktopSession.cs b/Vecto3GUI2020Test/UI/DesktopSession.cs new file mode 100644 index 0000000000000000000000000000000000000000..d71ebdb97973fcb2f1a3d58f490d86c721289fce --- /dev/null +++ b/Vecto3GUI2020Test/UI/DesktopSession.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OpenQA.Selenium.Appium; +using OpenQA.Selenium.Appium.Windows; +using OpenQA.Selenium.Remote; + +namespace Vecto3GUI2020Test +{ + public class DesktopSession + { + private const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723/"; + WindowsDriver<WindowsElement> desktopSession; + + public DesktopSession() + { + var process = Process.Start(@"C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe"); + + var appCapabilities = new AppiumOptions(); + appCapabilities.AddAdditionalCapability("app", "Root"); + appCapabilities.AddAdditionalCapability("deviceName", "WindowsPC"); + desktopSession = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities); + } + + ~DesktopSession() + { + desktopSession.Quit(); + } + + public WindowsDriver<WindowsElement> DesktopSessionElement + { + get { return desktopSession; } + } + + public WindowsElement FindElementByAbsoluteXPath(string xPath, int nTryCount = 15) + { + WindowsElement uiTarget = null; + + while (nTryCount-- > 0) { + try { + uiTarget = desktopSession.FindElementByXPath(xPath); + } catch { + } + + if (uiTarget != null) { + break; + } else { + System.Threading.Thread.Sleep(200); + } + } + + return uiTarget; + } + } +} diff --git a/Vecto3GUI2020Test/UI/UITests.cs b/Vecto3GUI2020Test/UI/UITests.cs new file mode 100644 index 0000000000000000000000000000000000000000..797da3c10a0538eeb28517b10764df6a37926fdc --- /dev/null +++ b/Vecto3GUI2020Test/UI/UITests.cs @@ -0,0 +1,268 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using NUnit.Framework; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium.Android; +using OpenQA.Selenium.Appium.Windows; +using OpenQA.Selenium.Interactions; +using Vecto3GUI2020Test.UI; + +namespace Vecto3GUI2020Test +{/// <summary> +/// The Application under Test has to run on a Windows 10 Machine on a Desktop called "VE +/// </summary> + [TestFixture] + public class UITests : VECTO3GUI2020Session + { + [SetUp] + public void Setup() + { + Setup(TestContext.CurrentContext); + } + + + [Test] + public void LoadFileSession() + { + session.FindElementByXPath( + "//Button[@Name=\"New Multistage File\"][@AutomationId=\"JobListViewNewManufacturingStageFileButton\"]").Click(); //open new multistageWindow + + + session.SwitchTo().Window(session.WindowHandles.Last()); + Assert.AreEqual(2, session.WindowHandles.Count); + + + session.FindElementByXPath( + ".//Custom[@AutomationId=\"NewMultistageJobView\"]/Custom[@AutomationId=\"NewMultistageFilePicker\"]/Button[@AutomationId=\"button\"]").Click(); + + + + Assert.AreEqual(3, session.WindowHandles); + + + + Thread.Sleep(100000); + } + + + + + #region DesktopSessionTests + + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFile() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_multiple_stages.xml"); + //} + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFileAirdrag() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_multiple_stages_airdrag.xml"); + + //} + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFileheatPump() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_multiple_stages_heatPump.xml"); + + //} + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFilehev() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_multiple_stages_hev.xml"); + + //} + + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFileNGTankSystem() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml"); + //} + + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFileConsolidatedOneStage() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_one_stage.xml"); + //} + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFileConsolidatedTwoStages() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_two_stages.xml"); + //} + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFilePrimaryVehicleOnly() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_primary_vehicle_only.xml"); + //} + + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFilePrimaryVehicleStage_2_3() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_consolidated_one_stage.xml"); + //} + //[Ignore("disabled Desktop Session tests")] + //[Test] + //public void LoadFilePrimaryVehicleOnlyAndCheckFields() + //{ + // LoadFileThroughUIWithDesktopSession(fileName: "vecto_multistage_primary_vehicle_only.xml"); + // //Check vehicle fields + // SelectVehicleTab(); + // focusToActiveWindow(); + // //var element = session.FindElementByXPath() + //} + + //private void LoadFileThroughUIWithDesktopSession(string fileName) + //{ + // // LeftClick on Button "New Multistage File" at (65,28) + // // LeftClick on Button "New Multistage File" at (87,25) + // Console.WriteLine("LeftClick on Button \"New Multistage File\" at (87,25)"); + // string xpath_LeftClickButtonNewMultist_87_25 = "/Pane[@ClassName=\"#32769\"][@Name=\"Vecto\"]/Window[@ClassName=\"Window\"][@Name=\"Vecto\"]/Custom[@ClassName=\"JobListView\"]/Button[@Name=\"New Multistage File\"][@AutomationId=\"JobListViewNewManufacturingStageFileButton\"]"; + // var winElem_LeftClickButtonNewMultist_87_25 = desktopSession.FindElementByAbsoluteXPath(xpath_LeftClickButtonNewMultist_87_25); + + // if (winElem_LeftClickButtonNewMultist_87_25 != null) + // { + // winElem_LeftClickButtonNewMultist_87_25.Click(); + // } + // else + // { + // Console.WriteLine($"Failed to find element using xpath: {xpath_LeftClickButtonNewMultist_87_25}"); + // } + // Assert.NotNull(winElem_LeftClickButtonNewMultist_87_25); + + // // LeftDblClick on Button "" at (11,11) + // Console.WriteLine("LeftDblClick on Button \"\" at (11,11)"); + // string xpath_LeftDblClickButton_11_11 = "/Pane[@ClassName=\"#32769\"][@Name=\"Vecto\"]/Window[@ClassName=\"Window\"][starts-with(@Name,\"VECTO3GUI2020.ViewModel.MultiStage.Implementation.NewMultiStageJ\")]/Custom[@AutomationId=\"NewMultistageJobView\"]/Custom[@AutomationId=\"NewMultistageFilePicker\"]/Button[@AutomationId=\"button\"]"; + // var winElem_LeftDblClickButton_11_11 = desktopSession.FindElementByAbsoluteXPath(xpath_LeftDblClickButton_11_11); + + // if (winElem_LeftDblClickButton_11_11 != null) { + // desktopSession.DesktopSessionElement.Mouse.MouseMove(winElem_LeftDblClickButton_11_11.Coordinates); + // desktopSession.DesktopSessionElement.Mouse.DoubleClick(null); + // } + // else + // { + // Console.WriteLine($"Failed to find element using xpath: {xpath_LeftDblClickButton_11_11}"); + + // } + // Assert.NotNull(winElem_LeftDblClickButton_11_11); + + // // LeftDblClick on Edit "Name" at (284,8) + // Console.WriteLine("LeftDblClick on Edit \"Name\" at (284,8)"); + // string xpath_LeftDblClickEditName_284_8 = $"/Pane[@ClassName=\"#32769\"][@Name=\"Vecto\"]/Window[@ClassName=\"Window\"][starts-with(@Name,\"VECTO3GUI2020.ViewModel.MultiStage.Implementation.NewMultiStageJ\")]/Window[@ClassName=\"#32770\"][@Name=\"Öffnen\"]/Pane[@ClassName=\"DUIViewWndClassName\"]/Pane[@Name=\"Shellordneransicht\"][@AutomationId=\"listview\"]/List[@ClassName=\"UIItemsView\"][@Name=\"Elementansicht\"]/ListItem[@ClassName=\"UIItem\"][@Name={fileName}]/Edit[@Name=\"Name\"][@AutomationId=\"System.ItemNameDisplay\"]"; + // var winElem_LeftDblClickEditName_284_8 = desktopSession.FindElementByAbsoluteXPath(xpath_LeftDblClickEditName_284_8); + // if (winElem_LeftDblClickEditName_284_8 != null) + // { + // desktopSession.DesktopSessionElement.Mouse.MouseMove(winElem_LeftDblClickEditName_284_8.Coordinates); + // desktopSession.DesktopSessionElement.Mouse.DoubleClick(null); + // } + // else + // { + // Console.WriteLine($"Failed to find element using xpath: {xpath_LeftDblClickEditName_284_8}"); + // } + // Assert.NotNull(winElem_LeftDblClickEditName_284_8); + + + + // SelectAirdragTab(); + // SelectAuxiliariesTab(); + // SelectVehicleTab(); + // SelectAuxiliariesTab(); + // SelectAirdragTab(); + + + + + + //} + + + //private void SelectVehicleTab() + //{ + // // LeftClick on Text "Vehicle" at (13,14) + // Console.WriteLine("LeftClick on Text \"Vehicle\" at (13,14)"); + // string xpath_LeftClickTextVehicle_13_14 = "/Pane[@ClassName=\"#32769\"][@Name=\"Vecto\"]/Window[@ClassName=\"Window\"][starts-with(@Name,\"VECTO3GUI2020.ViewModel.MultiStage.Implementation.NewMultiStageJ\")]/Custom[@AutomationId=\"NewMultistageJobView\"]/Custom[@ClassName=\"MultiStageView\"]/Custom[@ClassName=\"ManufacturingStageView\"]/Button[@ClassName=\"Button\"][@Name=\"Vehicle\"]/Text[@ClassName=\"TextBlock\"][@Name=\"Vehicle\"]"; + // var winElem_LeftClickTextVehicle_13_14 = desktopSession.FindElementByAbsoluteXPath(xpath_LeftClickTextVehicle_13_14); + // if (winElem_LeftClickTextVehicle_13_14 != null) + // { + // winElem_LeftClickTextVehicle_13_14.Click(); + // } + // else + // { + // Console.WriteLine($"Failed to find element using xpath: {xpath_LeftClickTextVehicle_13_14}"); + // } + // Assert.NotNull(winElem_LeftClickTextVehicle_13_14); + //} + + //private void SelectAirdragTab() + //{ + // // LeftClick on Text "Airdrag" at (21,13) + // Console.WriteLine("LeftClick on Text \"Airdrag\" at (21,13)"); + // string xpath_LeftClickTextAirdrag_21_13 = "/Pane[@ClassName=\"#32769\"][@Name=\"Vecto\"]/Window[@ClassName=\"Window\"][starts-with(@Name,\"VECTO3GUI2020.ViewModel.MultiStage.Implementation.NewMultiStageJ\")]/Custom[@AutomationId=\"NewMultistageJobView\"]/Custom[@ClassName=\"MultiStageView\"]/Custom[@ClassName=\"ManufacturingStageView\"]/Button[@ClassName=\"Button\"][@Name=\"Airdrag\"]/Text[@ClassName=\"TextBlock\"][@Name=\"Airdrag\"]"; + // var winElem_LeftClickTextAirdrag_21_13 = desktopSession.FindElementByAbsoluteXPath(xpath_LeftClickTextAirdrag_21_13); + // if (winElem_LeftClickTextAirdrag_21_13 != null) + // { + // winElem_LeftClickTextAirdrag_21_13.Click(); + // } + // else + // { + // Console.WriteLine($"Failed to find element using xpath: {xpath_LeftClickTextAirdrag_21_13}"); + // return; + // } + // Assert.NotNull(winElem_LeftClickTextAirdrag_21_13); + //} + + //private void SelectAuxiliariesTab() + //{ + // // LeftClick on Button "Auxiliaries" at (9,13) + // Console.WriteLine("LeftClick on Button \"Auxiliaries\" at (9,13)"); + // string xpath_LeftClickButtonAuxiliarie_9_13 = "/Pane[@ClassName=\"#32769\"][@Name=\"Vecto\"]/Window[@ClassName=\"Window\"][starts-with(@Name,\"VECTO3GUI2020.ViewModel.MultiStage.Implementation.NewMultiStageJ\")]/Custom[@AutomationId=\"NewMultistageJobView\"]/Custom[@ClassName=\"MultiStageView\"]/Custom[@ClassName=\"ManufacturingStageView\"]/Button[@ClassName=\"Button\"][@Name=\"Auxiliaries\"]"; + // var winElem_LeftClickButtonAuxiliarie_9_13 = desktopSession.FindElementByAbsoluteXPath(xpath_LeftClickButtonAuxiliarie_9_13); + // if (winElem_LeftClickButtonAuxiliarie_9_13 != null) + // { + // winElem_LeftClickButtonAuxiliarie_9_13.Click(); + // } + // else + // { + // Console.WriteLine($"Failed to find element using xpath: {xpath_LeftClickButtonAuxiliarie_9_13}"); + // } + // Assert.NotNull(winElem_LeftClickButtonAuxiliarie_9_13); + + + //} + + + #endregion + + + [TearDown] + public void OneTimeTeardown() + { + TearDown(); + Thread.Sleep(0); + } + + + + private void focusToActiveWindow() + { + session.SwitchTo().ActiveElement(); + + } + + + + } +} diff --git a/Vecto3GUI2020Test/UI/VECTO3GUI2020Session.cs b/Vecto3GUI2020Test/UI/VECTO3GUI2020Session.cs new file mode 100644 index 0000000000000000000000000000000000000000..2f9abe2cbe98cdafea63a517581c16353c2479c5 --- /dev/null +++ b/Vecto3GUI2020Test/UI/VECTO3GUI2020Session.cs @@ -0,0 +1,85 @@ +using System; +using System.Diagnostics; +using NUnit.Framework; +using OpenQA.Selenium; +using OpenQA.Selenium.Appium.Windows; +using VECTO3GUI2020.Properties; + +namespace Vecto3GUI2020Test.UI +{ + [TestFixture] + public class VECTO3GUI2020Session + { + protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723"; + private const string NotepadAppId = @"C:\Windows\System32\notepad.exe"; + + private const string vectoLocation = + @"C:\Users\Harry\source\repos\vecto-dev\VECTO3GUI2020\bin\Debug\VECTO3GUI2020.exe"; + + private static Process winappDriverProcess; + + internal static WindowsDriver<WindowsElement> session; + internal static DesktopSession desktopSession; + + public WindowsDriver<WindowsElement> DesktopSessionElement + { + get { return session; } + } + + public static void Setup(TestContext context) + { + // Launch a new instance of VECTO application + if (session == null) { + winappDriverProcess = Process.Start(@"C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe"); + // Create a new session to launch Notepad application + + + var appiumOptions = new OpenQA.Selenium.Appium.AppiumOptions(); + appiumOptions.AddAdditionalCapability("app", @"C:\Users\Harry\source\repos\vecto-dev\VECTO3GUI2020\bin\Debug\VECTO3GUI2020.exe"); + appiumOptions.AddAdditionalCapability("deviceName", "WindowsPC"); + session = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appiumOptions); + session.ActivateApp(vectoLocation); + + // Use the session to control the app + Assert.IsNotNull(session); + Assert.IsNotNull(session.SessionId); + + + // Set implicit timeout to 1.5 seconds to make element search to retry every 500 ms for at most three times + session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5); + } + + desktopSession = new DesktopSession(); + } + + + public static void TearDown() + { + // Close the application and delete the session + if (session != null) + { + session.CloseApp(); + winappDriverProcess.Kill(); + + session = null; + } + } + + public void TestInitialize() + { + // Select all text and delete to clear the edit box + } + + protected static string SanitizeBackslashes(string input) => input.Replace("\\", Keys.Alt + Keys.NumberPad9 + Keys.NumberPad2 + Keys.Alt); + + } + + public static class SessionExtensions{ + + public static void DoubleCLick(this WindowsElement element) + { + element.Click(); + element.Click(); + } + } +} diff --git a/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj new file mode 100644 index 0000000000000000000000000000000000000000..b0a3b15265007fa3ea97c48a0daa1dbd2428712b --- /dev/null +++ b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj @@ -0,0 +1,95 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net48</TargetFramework> + + <IsPackable>false</IsPackable> + </PropertyGroup> + + <ItemGroup> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-exempted_input_full-sample.xml" Link="Testdata\vecto_vehicle-exempted_input_full-sample.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-exempted_input_only_certain_entries01-sample.xml" Link="Testdata\vecto_vehicle-exempted_input_only_certain_entries01-sample.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-exempted_input_only_certain_entries02-sample.xml" Link="Testdata\vecto_vehicle-exempted_input_only_certain_entries02-sample.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-exempted_input_only_mandatory_entries.xml" Link="Testdata\vecto_vehicle-exempted_input_only_mandatory_entries.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_full-sample.xml" Link="Testdata\vecto_vehicle-stage_input_full-sample.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_certain_entries01-sample.xml" Link="Testdata\vecto_vehicle-stage_input_only_certain_entries01-sample.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_certain_entries02-sample.xml" Link="Testdata\vecto_vehicle-stage_input_only_certain_entries02-sample.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_component_nullable_entries.xml" Link="Testdata\vecto_vehicle-stage_input_only_component_nullable_entries.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_mandatory_entries.xml" Link="Testdata\vecto_vehicle-stage_input_only_mandatory_entries.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersion2.8\vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml" Link="Testdata\vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\AidragComponent.xml" Link="Testdata\AidragComponent.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\AirdragLoadTestFile.xml" Link="Testdata\AirdragLoadTestFile.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages.xml" Link="Testdata\vecto_multistage_consolidated_multiple_stages.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_airdrag.xml" Link="Testdata\vecto_multistage_consolidated_multiple_stages_airdrag.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_heatPump.xml" Link="Testdata\vecto_multistage_consolidated_multiple_stages_heatPump.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_hev.xml" Link="Testdata\vecto_multistage_consolidated_multiple_stages_hev.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml" Link="Testdata\vecto_multistage_consolidated_multiple_stages_NGTankSystem.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_one_stage.xml" Link="Testdata\vecto_multistage_consolidated_one_stage.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_consolidated_two_stages.xml" Link="Testdata\vecto_multistage_consolidated_two_stages.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_primary_vehicle_only.xml" Link="Testdata\vecto_multistage_primary_vehicle_only.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_primary_vehicle_stage_2_3.xml" Link="Testdata\vecto_multistage_primary_vehicle_stage_2_3.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_primary_vehicle_stage_2_full.xml" Link="Testdata\vecto_multistage_primary_vehicle_stage_2_full.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="..\VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\SchemaVersionMultistage.0.1\vecto_multistage_primary_vehicle_stage_2_mandatory.xml" Link="Testdata\vecto_multistage_primary_vehicle_stage_2_mandatory.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + + <ItemGroup> + <PackageReference Include="Appium.WebDriver" Version="4.3.1" /> + <PackageReference Include="Moq" Version="4.16.1" /> + <PackageReference Include="Ninject" Version="3.3.4" /> + <PackageReference Include="NUnit" Version="3.12.0" /> + <PackageReference Include="NUnit3TestAdapter" Version="3.16.1" /> + <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" /> + </ItemGroup> + + <ItemGroup> + <ProjectReference Include="..\VECTO3GUI2020\VECTO3GUI2020.csproj" /> + <ProjectReference Include="..\VectoCore\VectoCore\VectoCore.csproj" /> + </ItemGroup> + +</Project> diff --git a/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs new file mode 100644 index 0000000000000000000000000000000000000000..f02da4bbe75be1d903ced5c0be99f5487e147979 --- /dev/null +++ b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs @@ -0,0 +1,316 @@ +using System; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Xml; +using Castle.DynamicProxy.Generators.Emitters.SimpleAST; +using Moq; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Strategies; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Utils; +using VECTO3GUI2020.Helper; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; + +namespace Vecto3GUI2020Test +{ + [TestFixture] + public class LoadAndSaveVehicleData : ViewModelTestBase + { + [Test] + public void loadInputFileMultipleStage() + { + loadFile(consolidated_multiple_stages); + } + + [Test] + public void loadPrimaryAndSaveVehicleData() + { + var newMultiStageJob = loadFile(primary_vehicle_only); + var vehicle = newMultiStageJob.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as DeclarationInterimStageBusVehicleViewModel_v2_8; + Assert.NotNull(vehicle); + vehicle.Manufacturer = "test1"; + vehicle.ManufacturerAddress = "testAddress2"; + vehicle.VIN = "VIN123456789"; + //Remove + + var manufacturingStage = + newMultiStageJob.MultiStageJobViewModel as MultiStageJobViewModel_v0_1; + + Assert.NotNull(manufacturingStage); + + + var fileName = primary_vehicle_only.Replace(".xml", "") + "_output.xml"; + deleteFile(fileName); + _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(fileToSave:fileName).Object); + manufacturingStage.SaveInputDataAsCommand.Execute(null); + Assert.True(checkFileExists(fileName)); + } + + + + + [Ignore("Validation is only performed with gui")] + [TestCase(primary_vehicle_only)] + [TestCase(consolidated_multiple_stages)] + [TestCase(consolidated_one_stage)] + public void SaveVehicleDataWithMissingFields(string fileName) + { + var newMultistageJobViewModel = loadFile(fileName); + var manstage = newMultistageJobViewModel.MultiStageJobViewModel as MultiStageJobViewModel_v0_1; + Assert.NotNull(manstage); + + var saveFileName = fileName.Replace(".xml", "") + "_output.xml"; + deleteFile(saveFileName); + _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(fileToSave: saveFileName).Object); + manstage.SaveInputDataAsCommand.Execute(null); + + Assert.False(checkFileExists(saveFileName)); + + } + + [Test] + public void reloadInputFile() + { + var newMultistageJobViewModel = loadFile(consolidated_multiple_stages_airdrag) as NewMultiStageJobViewModel; + + var vehicle = newMultistageJobViewModel.MultiStageJobViewModel.VehicleInputData as + DeclarationInterimStageBusVehicleViewModel_v2_8; + + Assert.NotNull(vehicle); + + + Assert.True(vehicle.AirdragModifiedMultistageEditingEnabled); + + var mockDialog = getMockDialogHelper(consolidated_multiple_stages); + newMultistageJobViewModel.AddVifFile.Execute(null); + Assert.AreEqual(mockDialog.Object.OpenXMLFileDialog(null), newMultistageJobViewModel.VifPath); + vehicle = newMultistageJobViewModel.MultiStageJobViewModel.VehicleInputData as DeclarationInterimStageBusVehicleViewModel_v2_8; + Assert.IsFalse(vehicle.AirdragModifiedMultistageEditingEnabled); + + + + } + + + [Test] + public void loadInputFileMultipleStageAirdrag() + { + loadFile(consolidated_multiple_stages_airdrag); + } + + [Test] + public void loadInputFileConsolidatedOneStage() + { + loadFile(consolidated_one_stage); + } + + [Test] + public void loadInputFilePrimaryOnly() + { + var vm = loadFile(primary_vehicle_only); + Assert.AreEqual(2, vm.MultiStageJobViewModel.ManufacturingStageViewModel.StageCount); + + var primaryVehicle = vm.MultiStageJobViewModel.PrimaryVehicle; + Assert.NotNull(primaryVehicle); + + var vehicleViewModel = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as IMultistageVehicleViewModel; + Assert.NotNull(vehicleViewModel); + Assert.Null(vehicleViewModel.Manufacturer); + Assert.Null(vehicleViewModel.ManufacturerAddress); + + var vehicleViewModel_v2_8 = vehicleViewModel as DeclarationInterimStageBusVehicleViewModel_v2_8; + Assert.NotNull(vehicleViewModel_v2_8); + + Assert.Null(vehicleViewModel_v2_8.HeightInMm); + Assert.Null(vehicleViewModel_v2_8.LengthInMm); + Assert.Null(vehicleViewModel_v2_8.WidthInMm); + Assert.Null(vehicleViewModel_v2_8.EntranceHeightInMm); + + Assert.Null(vehicleViewModel_v2_8.ConsolidatedHeightInMm); + Assert.Null(vehicleViewModel_v2_8.ConsolidatedLengthInMm); + Assert.Null(vehicleViewModel_v2_8.ConsolidatedWidthInMm); + Assert.Null(vehicleViewModel_v2_8.ConsolidatedEntranceHeightInMm); + + + Assert.IsFalse(vehicleViewModel_v2_8.AirdragModifiedMultistageEditingEnabled); + + Assert.IsNull(vehicleViewModel_v2_8.AirdragModifiedMultistage); + Assert.IsNull(vehicleViewModel_v2_8.ConsolidatedAirdragmodified); + Assert.IsNull(vehicleViewModel_v2_8.AirdragModifiedEnum); + + + + Assert.AreEqual(vehicleViewModel_v2_8.AirdragModifiedMultistageEditingEnabled, false); + Assert.Null(vehicleViewModel_v2_8.BusAuxiliaries); + + + var vifInputData = vm.MultiStageJobViewModel as IMultistageVIFInputData; + + Assert.Null(vifInputData.VehicleInputData.Components); + } + + + + + + + + + + + [Test] + public void loadVehicleDataTest() + { + string multiplestages = ""; + multiplestages = Path.GetFullPath(DirPath + "vecto_multistage_consolidated_multiple_stages.xml"); + + var dialogMockConsolidatedMultipleStage = new Mock<IDialogHelper>(); + dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(multiplestages); + dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(multiplestages); + _kernel.Rebind<IDialogHelper>().ToConstant(dialogMockConsolidatedMultipleStage.Object); + + + var newMultistageJobViewModel = _kernel.Get<NewMultiStageJobViewModel>(); + newMultistageJobViewModel.AddVifFile.Execute(null); + Assert.NotNull(newMultistageJobViewModel.MultiStageJobViewModel); + + var manstageVehicleViewModel = newMultistageJobViewModel.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as IMultistageVehicleViewModel; + Assert.NotNull(manstageVehicleViewModel); + + var auxiliariesViewModel = manstageVehicleViewModel.MultistageAuxiliariesViewModel; + Assert.NotNull(auxiliariesViewModel); + + var multiStageViewModel = + newMultistageJobViewModel.MultiStageJobViewModel as + MultiStageJobViewModel_v0_1; + Assert.NotNull(multiStageViewModel); + + var vehicleInputData = Path.GetFullPath(DirPath + "vecto_vehicle-stage_input_full-sample.xml"); + Assert.IsTrue(File.Exists(vehicleInputData)); + + var vehicleInputDataFiledialogMock = new Mock<IDialogHelper>(); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(vehicleInputData); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(vehicleInputData); + _kernel.Rebind<IDialogHelper>().ToConstant(vehicleInputDataFiledialogMock.Object); + + multiStageViewModel.LoadVehicleDataCommand.Execute(null); + + var vehicle = multiStageViewModel.VehicleInputData as DeclarationInterimStageBusVehicleViewModel_v2_8; + Assert.NotNull(vehicle); + + Assert.AreEqual("VEH-1234567890", vehicle.Identifier); + Assert.AreEqual("Some Manufacturer", vehicle.Manufacturer); + Assert.AreEqual("Some Manufacturer Address", vehicle.ManufacturerAddress); + Assert.AreEqual("VEH-1234567890", vehicle.VIN); + Assert.AreEqual(DateTime.Today, vehicle.Date); + Assert.AreEqual("Sample Bus Model", vehicle.Model); + Assert.AreEqual(LegislativeClass.M3, vehicle.LegislativeClass); + Assert.AreEqual(500, vehicle.CurbMassChassis.Value());//CorrectedActualMass + Assert.AreEqual(3500, vehicle.GrossVehicleMassRating.Value());//TechnicalPermissibleMaximumLadenMass + Assert.AreEqual(false, vehicle.AirdragModifiedMultistage); + Assert.AreEqual(TankSystem.Compressed, vehicle.TankSystem);//NgTankSystem + Assert.AreEqual(RegistrationClass.II_III, vehicle.RegisteredClass);//ClassBus + Assert.AreEqual(0, vehicle.NumberOfPassengersLowerDeck); + Assert.AreEqual(10, vehicle.NumberOfPassengersUpperDeck); + Assert.AreEqual(VehicleCode.CB, vehicle.VehicleCode); + Assert.AreEqual(false, vehicle.LowEntry); + Assert.AreEqual(2.5, vehicle.Height.Value());//HeightIntegratedBody + Assert.AreEqual(9.5, vehicle.Length.Value()); + Assert.AreEqual(2.5, vehicle.Width.Value()); + Assert.AreEqual(2500, vehicle.HeightInMm.Value); + Assert.AreEqual(9500, vehicle.LengthInMm.Value); + Assert.AreEqual(2500, vehicle.WidthInMm.Value); + + Assert.AreEqual(2, vehicle.EntranceHeight.Value()); + Assert.AreEqual(ConsumerTechnology.Electrically, vehicle.DoorDriveTechnology); + Assert.AreEqual(VehicleDeclarationType.interim, vehicle.VehicleDeclarationType); + + + var airdrag = vehicle.MultistageAirdragViewModel; + Assert.NotNull(airdrag.AirDragViewModel.XMLSource); + + + TestADASInput(vehicle); + TestComponents(vehicle.Components); + TestAirdragComponent(vehicle.Components.AirdragInputData); + TestAuxiliariesComponent(vehicle.BusAuxiliaries); + + + + + } + + private void TestADASInput(IVehicleDeclarationInputData vehicle) + { + Assert.AreEqual(true, vehicle.ADAS.EngineStopStart); + Assert.AreEqual(EcoRollType.None, vehicle.ADAS.EcoRoll); + Assert.AreEqual(PredictiveCruiseControlType.None, vehicle.ADAS.PredictiveCruiseControl); + Assert.AreEqual(true, vehicle.ADAS.ATEcoRollReleaseLockupClutch); + } + + private void TestComponents(IVehicleComponentsDeclaration components) + { + TestAirdragComponent(components.AirdragInputData); + TestAuxiliariesComponent(components.BusAuxiliaries); + } + + private void TestAirdragComponent(IAirdragDeclarationInputData airdrag) + { + Assert.AreEqual("Generic Manufacturer", airdrag.Manufacturer); + Assert.AreEqual("Generic Model", airdrag.Model); + Assert.AreEqual("e12*0815/8051*2017/05E0000*00", airdrag.CertificationNumber); + Assert.AreEqual(DateTime.Parse("2017-03-24T15:00:00Z").ToUniversalTime(), airdrag.Date); + Assert.AreEqual("Vecto AirDrag x.y", airdrag.AppVersion); + Assert.AreEqual(6.34, airdrag.AirDragArea.Value()); + } + + private void TestAuxiliariesComponent(IBusAuxiliariesDeclarationData busAux) + { + TestLedLightsComponent(busAux.ElectricConsumers); + TestHVACComponent(busAux.HVACAux); + } + + private void TestLedLightsComponent(IElectricConsumersDeclarationData electricConsumer) + { + Assert.AreEqual(false, electricConsumer.InteriorLightsLED); + Assert.AreEqual(true, electricConsumer.DayrunninglightsLED); + Assert.AreEqual(true, electricConsumer.PositionlightsLED); + Assert.AreEqual(true, electricConsumer.BrakelightsLED); + Assert.AreEqual(false, electricConsumer.HeadlightsLED); + } + + private void TestHVACComponent(IHVACBusAuxiliariesDeclarationData hvacAux) + { + Assert.AreEqual(BusHVACSystemConfiguration.Configuration0, hvacAux.SystemConfiguration); + Assert.AreEqual(HeatPumpType.none, hvacAux.HeatPumpTypeDriverCompartment); + Assert.AreEqual(HeatPumpMode.heating, hvacAux.HeatPumpModeDriverCompartment); + Assert.AreEqual(HeatPumpType.non_R_744_2_stage, hvacAux.HeatPumpTypePassengerCompartment); + Assert.AreEqual(HeatPumpMode.cooling, hvacAux.HeatPumpModePassengerCompartment); + Assert.AreEqual(50, hvacAux.AuxHeaterPower.Value()); + Assert.AreEqual(false, hvacAux.DoubleGlazing); + Assert.AreEqual(true, hvacAux.AdjustableAuxiliaryHeater); + Assert.AreEqual(false, hvacAux.SeparateAirDistributionDucts); + Assert.AreEqual(true, hvacAux.WaterElectricHeater); + Assert.AreEqual(false, hvacAux.AirElectricHeater); + Assert.AreEqual(false, hvacAux.OtherHeatingTechnology); + } + + + + + + + #region Helper + + #endregion + } + +} \ No newline at end of file diff --git a/VECTO3GUI2020/Helper/XMLHelper.cs b/Vecto3GUI2020Test/ViewModelTests/TestExtensions.cs similarity index 60% rename from VECTO3GUI2020/Helper/XMLHelper.cs rename to Vecto3GUI2020Test/ViewModelTests/TestExtensions.cs index de2a0d3088bcf9088e7a444daa8520a93b5edaec..fbfecc557a577226d4337272c181ed4d244963ab 100644 --- a/VECTO3GUI2020/Helper/XMLHelper.cs +++ b/Vecto3GUI2020Test/ViewModelTests/TestExtensions.cs @@ -4,9 +4,11 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace VECTO3GUI2020.Helper +namespace Vecto3GUI2020Test.ViewModelTests { - public static class XMLHelper + internal class TestExtensions { + + } } diff --git a/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs b/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..2b987deb5ec1f5b608c4bae1ddd8b6cd9e8768c4 --- /dev/null +++ b/Vecto3GUI2020Test/ViewModelTests/VIFTests.cs @@ -0,0 +1,112 @@ +using System.IO; +using System.Xml; +using Moq; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Utils; +using VECTO3GUI2020.Helper; + +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; + +namespace Vecto3GUI2020Test.ViewModelTests +{ + public class VIFTests : ViewModelTestBase + { + + [Test] + public void loadPrimaryVehicleOnlyAndCreateNewVIF() + { + var multistagevm = loadFile(primary_vehicle_only).MultiStageJobViewModel; + var stage = multistagevm.ManufacturingStageViewModel.StageCount; + + Assert.AreEqual(2, stage); + + //Set Necessary Fields + var vehicle = + multistagevm.ManufacturingStageViewModel.Vehicle as DeclarationInterimStageBusVehicleViewModel_v2_8; + vehicle.ManufacturerAddress = "Address"; + vehicle.Manufacturer = "Manufacturer"; + vehicle.VIN = "VIN12345678"; + + var writer = GetFileOutputVIFWriter(multistagevm); + + deleteFile(writer.XMLMultistageReportFileName); + getMockDialogHelper(null, writer.XMLMultistageReportFileName); + _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, writer.XMLMultistageReportFileName).Object); + + MultiStageJobViewModel_v0_1.SaveVif(multistagevm, writer); + + Assert.IsTrue(File.Exists(writer.XMLMultistageReportFileName)); + + var validator = new XMLValidator(XmlReader.Create(writer.XMLMultistageReportFileName)); + Assert.True(validator.ValidateXML(TUGraz.VectoCore.Utils.XmlDocumentType.MultistageOutputData)); + } + + + [Test] + public void TestAirdragLoad() + { + var multiplestages = Path.GetFullPath(DirPath + "vecto_multistage_consolidated_multiple_stages.xml"); + + var dialogMockConsolidatedMultipleStage = new Mock<IDialogHelper>(); + dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(multiplestages); + dialogMockConsolidatedMultipleStage.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(multiplestages); + _kernel.Rebind<IDialogHelper>().ToConstant(dialogMockConsolidatedMultipleStage.Object); + + var newMultistageJobViewModel = _kernel.Get<NewMultiStageJobViewModel>(); + newMultistageJobViewModel.AddVifFile.Execute(null); + Assert.NotNull(newMultistageJobViewModel.MultiStageJobViewModel); + + var manstageVehicleViewModel = newMultistageJobViewModel.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as IMultistageVehicleViewModel; + Assert.NotNull(manstageVehicleViewModel); + + var auxiliariesViewModel = manstageVehicleViewModel.MultistageAuxiliariesViewModel; + Assert.NotNull(auxiliariesViewModel); + + var multiStageViewModel = newMultistageJobViewModel.MultiStageJobViewModel as MultiStageJobViewModel_v0_1; + Assert.NotNull(multiStageViewModel); + + var vehicleInputData = Path.GetFullPath(DirPath + "vecto_vehicle-stage_input_full-sample.xml"); + Assert.IsTrue(File.Exists(vehicleInputData)); + + var vehicleInputDataFiledialogMock = new Mock<IDialogHelper>(); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(vehicleInputData); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(vehicleInputData); + _kernel.Rebind<IDialogHelper>().ToConstant(vehicleInputDataFiledialogMock.Object); + + multiStageViewModel.LoadVehicleDataCommand.Execute(null); + + var vehicle = + multiStageViewModel.ManufacturingStageViewModel.Vehicle as DeclarationInterimStageBusVehicleViewModel_v2_8; + vehicle.ManufacturerAddress = "Address"; + vehicle.Manufacturer = "Manufacturer"; + vehicle.VIN = "VIN12345678"; + vehicle.AirdragModifiedMultistage = true; + vehicle.VehicleDeclarationType = VehicleDeclarationType.interim; + + var writer = GetFileOutputVIFWriter(multiStageViewModel); + + deleteFile(writer.XMLMultistageReportFileName); + getMockDialogHelper(null, writer.XMLMultistageReportFileName); + _kernel.Rebind<IDialogHelper>().ToConstant(getMockDialogHelper(null, writer.XMLMultistageReportFileName).Object); + + MultiStageJobViewModel_v0_1.SaveVif(multiStageViewModel, writer); + + var validator = new XMLValidator(XmlReader.Create(writer.XMLMultistageReportFileName)); + Assert.True(validator.ValidateXML(TUGraz.VectoCore.Utils.XmlDocumentType.MultistageOutputData)); + } + + + private FileOutputVIFWriter GetFileOutputVIFWriter(IMultiStageJobViewModel multistageViewModel) + { + var outputFileName = primary_vehicle_only.Replace(".xml", "_vif_output_mandatory_fields.xml"); + var outputFilePath = Path.Combine(DirPath, outputFileName); + + var currentStageCount = multistageViewModel.MultistageJobInputData.JobInputData.ManufacturingStages?.Count ?? 0; + return new FileOutputVIFWriter(outputFilePath, currentStageCount); + } + + } +} diff --git a/Vecto3GUI2020Test/ViewModelTests/VehicleViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/VehicleViewModelTests.cs new file mode 100644 index 0000000000000000000000000000000000000000..b71e24548091c31c8e289c8302fb04d7bf20242b --- /dev/null +++ b/Vecto3GUI2020Test/ViewModelTests/VehicleViewModelTests.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using TUGraz.VectoCommon.InputData; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; + +namespace Vecto3GUI2020Test.ViewModelTests +{ + [TestFixture] + public class VehicleViewModelTests : ViewModelTestBase + { + + #region Airdrag + [Test] + public void airdragModifiedInPreviousStages() + { + var vm = loadFile(consolidated_multiple_stages_airdrag); + + + var vehicleVM = vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + + Assert.IsTrue(vehicleVM.AirdragModifiedMultistageEditingEnabled); + + //try to change to false + + vehicleVM.AirdragModifiedMultistage = false; //should not change the value + Assert.IsTrue(vehicleVM.AirdragModifiedMultistageEditingEnabled); + + + + + } + + [Test] + public void airdragNotModifiedInPreviousStages() + { + var vm = loadFile(consolidated_multiple_stages); + + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + + Assert.IsFalse(vehicleVM.AirdragModifiedMultistageEditingEnabled); + + } + + #endregion + + #region ADAS + [Test] + public void loadPrimaryAndEdit() + { + var vm = loadFile(primary_vehicle_only); + Assert.NotNull(vm); + + var vehicleViewModel = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + + var vehicleData = vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle; + + + + vehicleViewModel.EcoRollTypeNullable = EcoRollType.WithEngineStop; + Assert.NotNull(vehicleData.ADAS); + + + vehicleViewModel.EcoRollTypeNullable = null; + Assert.Null(vehicleData.ADAS); + + + + + + } + + + + + + + + #endregion + + + + + } +} diff --git a/Vecto3GUI2020Test/ViewModelTests/ViewModelTestBase.cs b/Vecto3GUI2020Test/ViewModelTests/ViewModelTestBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..ba22491418a29039c6c6bf0d2c40100dfcff173e --- /dev/null +++ b/Vecto3GUI2020Test/ViewModelTests/ViewModelTestBase.cs @@ -0,0 +1,160 @@ +using System; +using System.Diagnostics; +using System.IO; +using Moq; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCore; +using TUGraz.VectoCore.InputData.FileIO.XML; +using VECTO3GUI2020.Helper; +using VECTO3GUI2020.Ninject; +using VECTO3GUI2020.Ninject.Vehicle; +using VECTO3GUI2020.ViewModel.MultiStage.Implementation; +using VECTO3GUI2020.ViewModel.MultiStage.Interfaces; + +namespace Vecto3GUI2020Test +{ + public class ViewModelTestBase + { + protected const string DirPath = @"Testdata\"; + protected const string consolidated_multiple_stages = "vecto_multistage_consolidated_multiple_stages.xml"; + + protected const string consolidated_multiple_stages_airdrag = + "vecto_multistage_consolidated_multiple_stages_airdrag.xml"; + + protected const string consolidated_one_stage = "vecto_multistage_consolidated_one_stage.xml"; + protected const string primary_vehicle_only = "vecto_multistage_primary_vehicle_only.xml"; + + + + protected const string stageInputFullSample = "vecto_vehicle-stage_input_full-sample.xml"; + + protected IXMLInputDataReader xmlInputReader; + protected IKernel _kernel; + private Mock<IDialogHelper> _mockDialogHelper = new Mock<IDialogHelper>(); + + + [SetUp] + public void OneTimeSetUp() + { + _kernel = new StandardKernel( + new VectoNinjectModule(), + new JobEditModule(), + new ComponentModule(), + new DocumentModule(), + new XMLWriterFactoryModule(), + new FactoryModule(), + new MultistageModule() + ); + xmlInputReader = _kernel.Get<IXMLInputDataReader>(); + _kernel.Rebind<IDialogHelper>().ToConstant(_mockDialogHelper.Object); + + } + + [TearDown] + public void TearDown() + { + _kernel.Dispose(); + _kernel = null; + } + + public bool checkFileExists(string fileName) + { + var filePath = Path.GetFullPath(DirPath + fileName); + var exists = File.Exists(filePath); + if (exists) + { + Console.WriteLine(filePath + @" exists"); + } else { + Console.WriteLine(filePath + @" not existing"); + } + + return exists; + } + + public void deleteFile(string fileName) + { + var filePath = Path.GetFullPath(DirPath + fileName); + File.Delete(fileName); + } + + public NewMultiStageJobViewModel loadFile(string fileName) + { + //string filePath = ""; + //filePath = Path.GetFullPath(DirPath + fileName); + + //var dialogMock = new Mock<IDialogHelper>(); + //dialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(filePath); + //dialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(filePath); + + var mockDialogHelper = getMockDialogHelper(fileName); + + var newMultistageJobViewModel = _kernel.Get<NewMultiStageJobViewModel>(); + newMultistageJobViewModel.AddVifFile.Execute(null); + + Assert.NotNull(newMultistageJobViewModel.MultiStageJobViewModel); + + var manstageVehicleViewModel = newMultistageJobViewModel.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as DeclarationInterimStageBusVehicleViewModel_v2_8; + Assert.NotNull(manstageVehicleViewModel); + + var auxiliariesViewModel = manstageVehicleViewModel.MultistageAuxiliariesViewModel; + Assert.NotNull(auxiliariesViewModel); + + + + + var airdragViewModel = (manstageVehicleViewModel as DeclarationInterimStageBusVehicleViewModel_v2_8)?.MultistageAirdragViewModel; + Assert.NotNull(airdragViewModel); + + Assert.AreEqual(mockDialogHelper.Object.OpenXMLFileDialog(), newMultistageJobViewModel.VifPath); + + + + return newMultistageJobViewModel; + } + + protected void loadVehicleData(MultiStageJobViewModel_v0_1 multiStageViewModel, string inputFile) + { + + var vehicleInputData = Path.GetFullPath(DirPath + inputFile); + Assert.IsTrue(File.Exists(vehicleInputData)); + + var vehicleInputDataFiledialogMock = new Mock<IDialogHelper>(); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(vehicleInputData); + vehicleInputDataFiledialogMock.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(vehicleInputData); + _kernel.Rebind<IDialogHelper>().ToConstant(vehicleInputDataFiledialogMock.Object); + + multiStageViewModel.LoadVehicleDataCommand.Execute(null); + } + + + protected Mock<IDialogHelper> getMockDialogHelper(string fileToLoad = null, string fileToSave = null) + { + if (_mockDialogHelper == null) { + _mockDialogHelper = new Mock<IDialogHelper>(); + } + if (fileToLoad != null) { + var filePath = Path.GetFullPath(DirPath + fileToLoad); + + Assert.NotNull(filePath); + _mockDialogHelper.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog(It.IsAny<string>())).Returns(filePath); + _mockDialogHelper.Setup(dialogHelper => dialogHelper.OpenXMLFileDialog()).Returns(filePath); + + Debug.WriteLine($"Created MOCKDIALOGHELPER, returns {filePath} for OpenXMLFileDialog()"); + } + + if (fileToSave != null) { + var filePath = Path.GetFullPath(DirPath + fileToSave); + _mockDialogHelper.Setup(dialogHelper => + dialogHelper.SaveToXMLDialog(It.IsAny<string>())).Returns(filePath); + _mockDialogHelper.Setup(dialogHelper => + dialogHelper.SaveToXMLDialog(null)).Returns(filePath); + + Debug.WriteLine($"Created MOCKDIALOGHELPER, returns {filePath} for SaveToXMLFileDialog()"); + } + + + return _mockDialogHelper; + } + } +} \ No newline at end of file diff --git a/Vecto3GUITest/Properties/AssemblyInfo.cs b/Vecto3GUITest/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..aad2a9d5c3bcf2306838c1dfa404e8f115551cbb --- /dev/null +++ b/Vecto3GUITest/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("Vecto3GUITest")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Vecto3GUITest")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: Guid("31248c1a-85a9-4d4c-9ddb-0d56e1599c7e")] + +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Vecto3GUITest/UITests.cs b/Vecto3GUITest/UITests.cs new file mode 100644 index 0000000000000000000000000000000000000000..6592c853be0489172401ef3d927fd055013c9ff7 --- /dev/null +++ b/Vecto3GUITest/UITests.cs @@ -0,0 +1,32 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Threading; +using OpenQA.Selenium; + +namespace Vecto3GUITest +{ + [TestClass] + public class StartUpScenario : VECTO3GUI2020Session + { + [TestMethod] + public void LoadFile() + { + //session.FindElementByAccessibilityId("Register").FindElementByClassName("Button").Click(); + session.FindElementByName("New Multistage File").Click(); + + + } + + [ClassInitialize] + public static void ClassInitialize(TestContext context) + { + Setup(context); + } + + [ClassCleanup] + public static void ClassCleanup() + { + TearDown(); + } + } +} diff --git a/Vecto3GUITest/VECTO3GUI2020Session.cs b/Vecto3GUITest/VECTO3GUI2020Session.cs new file mode 100644 index 0000000000000000000000000000000000000000..3df9ac7ce21362c0cee55db7ddd63cd33c9480ff --- /dev/null +++ b/Vecto3GUITest/VECTO3GUI2020Session.cs @@ -0,0 +1,58 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using OpenQA.Selenium.Appium.Windows; +using OpenQA.Selenium.Remote; +using OpenQA.Selenium; +using System; +using OpenQA.Selenium.Appium; + +namespace Vecto3GUITest +{ + [TestClass] + public class VECTO3GUI2020Session + { + protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723"; + private const string NotepadAppId = @"C:\Windows\System32\notepad.exe"; + + protected static WindowsDriver<WindowsElement> session; + + public static void Setup(TestContext context) + { + // Launch a new instance of Notepad application + if (session == null) + { + // Create a new session to launch Notepad application + var appiumOptions = new OpenQA.Selenium.Appium.AppiumOptions(); + appiumOptions.AddAdditionalCapability("app", @"C:\Users\Harry\source\repos\vecto-dev\VECTO3GUI2020\bin\Debug\VECTO3GUI2020.exe"); + appiumOptions.AddAdditionalCapability("deviceName", "WindowsPC"); + session = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appiumOptions); + + // Use the session to control the app + Assert.IsNotNull(session); + Assert.IsNotNull(session.SessionId); + + + // Set implicit timeout to 1.5 seconds to make element search to retry every 500 ms for at most three times + session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5); + } + } + + public static void TearDown() + { + // Close the application and delete the session + if (session != null) + { + session.Close(); + session.Quit(); + session = null; + } + } + + [TestInitialize] + public void TestInitialize() + { + // Select all text and delete to clear the edit box + } + + protected static string SanitizeBackslashes(string input) => input.Replace("\\", Keys.Alt + Keys.NumberPad9 + Keys.NumberPad2 + Keys.Alt); + } +} diff --git a/Vecto3GUITest/Vecto3GUITest.csproj b/Vecto3GUITest/Vecto3GUITest.csproj new file mode 100644 index 0000000000000000000000000000000000000000..8a1a54e6e5f121a1a99274aab4b3224c8d2c4743 --- /dev/null +++ b/Vecto3GUITest/Vecto3GUITest.csproj @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props')" /> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{31248C1A-85A9-4D4C-9DDB-0D56E1599C7E}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Vecto3GUITest</RootNamespace> + <AssemblyName>Vecto3GUITest</AssemblyName> + <TargetFrameworkVersion>v4.8</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion> + <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> + <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath> + <IsCodedUITest>False</IsCodedUITest> + <TestProjectType>UnitTest</TestProjectType> + <NuGetPackageImportStamp> + </NuGetPackageImportStamp> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="Appium.Net, Version=4.3.1.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Appium.WebDriver.4.3.1\lib\net45\Appium.Net.dll</HintPath> + </Reference> + <Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL"> + <HintPath>..\packages\Castle.Core.4.4.1\lib\net45\Castle.Core.dll</HintPath> + </Reference> + <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> + <HintPath>..\packages\MSTest.TestFramework.2.2.3\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath> + </Reference> + <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> + <HintPath>..\packages\MSTest.TestFramework.2.2.3\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath> + </Reference> + <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> + <HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> + </Reference> + <Reference Include="Ninject"> + <HintPath>..\..\..\..\.nuget\packages\ninject\3.3.4\lib\net45\Ninject.dll</HintPath> + </Reference> + <Reference Include="SeleniumExtras.PageObjects, Version=3.11.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\DotNetSeleniumExtras.PageObjects.3.11.0\lib\net45\SeleniumExtras.PageObjects.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Configuration" /> + <Reference Include="System.Core" /> + <Reference Include="System.Drawing" /> + <Reference Include="WebDriver, Version=3.141.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Selenium.WebDriver.3.141.0\lib\net45\WebDriver.dll</HintPath> + </Reference> + <Reference Include="WebDriver.Support, Version=3.141.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Selenium.Support.3.141.0\lib\net45\WebDriver.Support.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <Compile Include="UITests.cs" /> + <Compile Include="VECTO3GUI2020Session.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="XMLWriterTest.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="app.config" /> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\VectoCore\VectoCore\VectoCore.csproj"> + <Project>{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}</Project> + <Name>VectoCore</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" /> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> + <PropertyGroup> + <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> + </PropertyGroup> + <Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props'))" /> + <Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets'))" /> + </Target> + <Import Project="..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets')" /> +</Project> \ No newline at end of file diff --git a/Vecto3GUITest/XMLWriterTest.cs b/Vecto3GUITest/XMLWriterTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..2d1c01ee2cb67b074d546ce218b7ce25273f7ec6 --- /dev/null +++ b/Vecto3GUITest/XMLWriterTest.cs @@ -0,0 +1,27 @@ +using System.IO; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Ninject; +using TUGraz.VectoCore; +using TUGraz.VectoCore.InputData.FileIO.XML; + + +namespace Vecto3GUITest +{ + [TestClass] + public class WriterTests + { + private StandardKernel _kernel; + private IXMLInputDataReader _xmlInputReader; + + + public void Setup() + { + _kernel = new StandardKernel(new VectoNinjectModule()); + _xmlInputReader = _kernel.Get<IXMLInputDataReader>(); + } + + + + } + +} \ No newline at end of file diff --git a/Vecto3GUITest/app.config b/Vecto3GUITest/app.config new file mode 100644 index 0000000000000000000000000000000000000000..fdc60f6f83437dedadf5df7aad3f232919b15e36 --- /dev/null +++ b/Vecto3GUITest/app.config @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<configuration> + <runtime> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" /> + <bindingRedirect oldVersion="0.0.0.0-3.3.4.0" newVersion="3.3.4.0" /> + </dependentAssembly> + </assemblyBinding> + </runtime> +</configuration> \ No newline at end of file diff --git a/Vecto3GUITest/packages.config b/Vecto3GUITest/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..34fc3dad972f72368ab1e8087afbd9b245797fca --- /dev/null +++ b/Vecto3GUITest/packages.config @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Appium.WebDriver" version="4.3.1" targetFramework="net48" /> + <package id="Castle.Core" version="4.4.1" targetFramework="net48" /> + <package id="DotNetSeleniumExtras.PageObjects" version="3.11.0" targetFramework="net48" /> + <package id="MSTest.TestAdapter" version="2.2.3" targetFramework="net48" /> + <package id="MSTest.TestFramework" version="2.2.3" targetFramework="net48" /> + <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net48" /> + <package id="Ninject" version="3.3.4" targetFramework="net48" /> + <package id="Selenium.Support" version="3.141.0" targetFramework="net48" /> + <package id="Selenium.WebDriver" version="3.141.0" targetFramework="net48" /> +</packages> \ No newline at end of file diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs index d40626c7002ef1bd61aaed7b7e914db26116f629..f0b17871e655b91175246811349a394b7ec0b0c6 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs @@ -5,17 +5,40 @@ using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCommon.BusAuxiliaries { public enum BusHVACSystemConfiguration { + [GuiLabel("Unknown")] Unknown, + + [GuiLabel("Configuration 0")] Configuration0, + + [GuiLabel("Configuration 1")] Configuration1, + + [GuiLabel("Configuration 2")] Configuration2, + + [GuiLabel("Configuration 3")] Configuration3, + + [GuiLabel("Configuration 4")] Configuration4, + + [GuiLabel("Configuration 5")] Configuration5, + + [GuiLabel("Configuration 6")] Configuration6, + + [GuiLabel("Configuration 7")] Configuration7, + + [GuiLabel("Configuration 8")] Configuration8, + + [GuiLabel("Configuration 9")] Configuration9, + + [GuiLabel("Configuration 10")] Configuration10, } diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs index 14421829222b6e45712b84184fee4d35b817a4ab..635fa22f1ffbf8ced19beecffa6cc65ec9067e56 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMInputs.cs @@ -190,11 +190,22 @@ namespace TUGraz.VectoCommon.BusAuxiliaries public enum HeatPumpType { + [GuiLabel("None")] none, + + [GuiLabel("R 744")] R_744, + + [GuiLabel("non R 744: 2-stage")] non_R_744_2_stage, + + [GuiLabel("non R 744: 3-stage")] non_R_744_3_stage, + + [GuiLabel("non R 744: 4-stage")] non_R_744_4_stage, + + [GuiLabel("non R 744: continuous")] non_R_744_continuous } @@ -238,9 +249,13 @@ namespace TUGraz.VectoCommon.BusAuxiliaries public enum HeatPumpMode { + [GuiLabel("Heating")] heating, + [GuiLabel("Heating and cooling")] heating_and_cooling, + [GuiLabel("Cooling")] cooling, + [GuiLabel("N_A")] N_A, } diff --git a/VectoCommon/VectoCommon/Hashing/VectoComponents.cs b/VectoCommon/VectoCommon/Hashing/VectoComponents.cs index 795fc93239528cb0c997d45f7563df9b10dfd30c..35a31ccf3383a8df574e312cd846a63c280233f9 100644 --- a/VectoCommon/VectoCommon/Hashing/VectoComponents.cs +++ b/VectoCommon/VectoCommon/Hashing/VectoComponents.cs @@ -47,7 +47,8 @@ namespace TUGraz.VectoCommon.Hashing Vehicle, VectoOutput, VectoCustomerInformation, - VectoPrimaryVehicleInformation + VectoPrimaryVehicleInformation, + VectoManufacturingStage } public static class VectoComponentsExtensionMethods @@ -79,6 +80,8 @@ namespace TUGraz.VectoCommon.Hashing return "VectoCustomerInformation"; case VectoComponents.VectoPrimaryVehicleInformation: return "VectoOutputPrimaryVehicle"; + case VectoComponents.VectoManufacturingStage: + return "ManufacturingStage"; default: throw new ArgumentOutOfRangeException("VectoComponents", component, null); } @@ -109,6 +112,10 @@ namespace TUGraz.VectoCommon.Hashing return "COC-"; case VectoComponents.VectoPrimaryVehicleInformation: return "PIF-"; + case VectoComponents.Vehicle: + return "VEH-"; + case VectoComponents.VectoManufacturingStage: + return "MST-"; default: throw new ArgumentOutOfRangeException("VectoComponents", component, null); } diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs index 292639d551dda097addf4bc13b5868caa58f40ca..d359617fb7bf9600f0f37f4124f9125d3dced807 100644 --- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs +++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs @@ -99,6 +99,8 @@ namespace TUGraz.VectoCommon.InputData string VIN { get; } + string LegislativeCategory { get; } + LegislativeClass? LegislativeClass { get; } /// <summary> @@ -255,8 +257,11 @@ namespace TUGraz.VectoCommon.InputData public enum PredictiveCruiseControlType { + [GuiLabel("None")] None, + [GuiLabel("Option I + II")] Option_1_2, + [GuiLabel("Option I + II + III")] Option_1_2_3 } @@ -288,8 +293,11 @@ namespace TUGraz.VectoCommon.InputData public enum EcoRollType { + [GuiLabel("None")] None, + [GuiLabel("Without Engine Stop")] WithoutEngineStop, + [GuiLabel("With Engine Stop")] WithEngineStop } @@ -372,6 +380,9 @@ namespace TUGraz.VectoCommon.InputData /// cf. VECTO Input Parameters.xlsx /// </summary> SquareMeter AirDragArea { get; } // without trailer + SquareMeter TransferredAirDragArea { get; } // P246 + + SquareMeter AirDragArea_0 { get; } // P245 } public interface IRetarderInputData : IComponentInputData @@ -844,6 +855,7 @@ namespace TUGraz.VectoCommon.InputData public interface IPneumaticSupplyDeclarationData { + CompressorDrive CompressorDrive { get; } string Clutch { get; } double Ratio { get; } @@ -944,7 +956,9 @@ namespace TUGraz.VectoCommon.InputData public enum VehicleDeclarationType { + [GuiLabel("Interim")] interim, + [GuiLabel("Final")] final } @@ -973,4 +987,39 @@ namespace TUGraz.VectoCommon.InputData } } } + + public enum CompressorDrive + { + [GuiLabel("Electrically")] + electrically, + [GuiLabel("Mechanically")] + mechanically + } + + public static class CompressorDriveHelper + { + public static CompressorDrive Parse(string parse) + { + switch (parse) + { + case nameof(CompressorDrive.electrically): + return CompressorDrive.electrically; + case nameof(CompressorDrive.mechanically): + return CompressorDrive.mechanically; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public static string GetLabel(this CompressorDrive type) + { + switch (type) + { + case CompressorDrive.electrically: return nameof(CompressorDrive.electrically); + case CompressorDrive.mechanically: return nameof(CompressorDrive.electrically); + default: return null; + } + } + } + } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index dddce37770b367b37342ed0c04611bd63579e42b..d0b8d536899b6abe038754eaf51a7467e923c4af 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -105,6 +105,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to TransferredCdxA. + /// </summary> + public static string AirDragArea_TransferredCdxA { + get { + return ResourceManager.GetString("AirDragArea_TransferredCdxA", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Efficiency. /// </summary> @@ -1365,6 +1374,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to CompressorDrive. + /// </summary> + public static string CompressorDrive { + get { + return ResourceManager.GetString("CompressorDrive", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Signature. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index e3656be828189918da7308e6d4d127a4b95e97f3..99d4e8f5a56d7dfbadbb6f8f6e5f467df268a3ab 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -1491,6 +1491,9 @@ <data name="BusAux_PneumaticSystem_SCRReagentDosing" xml:space="preserve"> <value>SCRReagentDosing</value> </data> + <data name="AirDragArea_TransferredCdxA" xml:space="preserve"> + <value>TransferredCdxA</value> + </data> <data name="Bus_VehicleDeclarationType" xml:space="preserve"> <value>VehicleDeclarationType</value> </data> @@ -1506,4 +1509,7 @@ <data name="BusAux_HVAC" xml:space="preserve"> <value>HVAC</value> </data> + <data name="CompressorDrive" xml:space="preserve"> + <value>CompressorDrive</value> + </data> </root> \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Utils/GuiLabelAttribute.cs b/VectoCommon/VectoCommon/Utils/GuiLabelAttribute.cs new file mode 100644 index 0000000000000000000000000000000000000000..c178106a983fd61a65c4c3c98f4e8e3b7db0a8e5 --- /dev/null +++ b/VectoCommon/VectoCommon/Utils/GuiLabelAttribute.cs @@ -0,0 +1,13 @@ +using System; + +namespace TUGraz.VectoCommon.Utils +{ + public class GuiLabelAttribute : Attribute + { + public string Label { get; private set; } + public GuiLabelAttribute(string label) + { + Label = label; + } + } +} \ No newline at end of file diff --git a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs index 9937f64cb79325c45164ad4cfa589356c50d87a7..1d880772420c1d7ca76ae2e532804d0784b780fd 100644 --- a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs +++ b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs @@ -45,6 +45,11 @@ namespace TUGraz.VectoCommon.Utils Units = units; } + public string GetUnitString() + { + return Units; + } + public double Value { get { return _value; } } protected bool Equals(ConvertedSI other) @@ -247,6 +252,18 @@ namespace TUGraz.VectoCommon.Utils { return new ConvertedSI(jpm.Value() * 1e-3, "MJ/km"); } + + public static Meter ConvertToMeter(this ConvertedSI mm) + { + if (mm.Units != "mm") { + return null; + } + //return ElementExists(XMLNames.Bus_HeighIntegratedBody) + // ? GetDouble(XMLNames.Bus_HeighIntegratedBody).SI(Unit.SI.Milli.Meter).Cast<Meter>() + // : null; + + return mm.Value.SI(Unit.SI.Milli.Meter).Cast<Meter>(); + } } } diff --git a/VectoCommon/VectoCommon/VectoCommon.csproj b/VectoCommon/VectoCommon/VectoCommon.csproj index 9913ddd6965b13ddca054782ecabfd69ebb926b8..7cd867305ac4715d783e7bded81e8259560d7801 100644 --- a/VectoCommon/VectoCommon/VectoCommon.csproj +++ b/VectoCommon/VectoCommon/VectoCommon.csproj @@ -128,13 +128,14 @@ <DesignTime>True</DesignTime> </Compile> <Compile Include="Resources\XMLNames.Designer.cs"> - <DependentUpon>XMLNames.resx</DependentUpon> <AutoGen>True</AutoGen> <DesignTime>True</DesignTime> + <DependentUpon>XMLNames.resx</DependentUpon> </Compile> <Compile Include="Utils\DoubleExtensionMethods.cs" /> <Compile Include="Utils\EnumerableExtensionMethods.cs" /> <Compile Include="Utils\EnumHelper.cs" /> + <Compile Include="Utils\GuiLabelAttribute.cs" /> <Compile Include="Utils\IntExtensionMethods.cs" /> <Compile Include="Utils\SI.cs" /> <Compile Include="Utils\SIConvertExtensionMethods.cs" /> @@ -154,8 +155,8 @@ <ItemGroup> <EmbeddedResource Include="Resources\XMLNames.resx"> <Generator>PublicResXFileCodeGenerator</Generator> - <LastGenOutput>XMLNames.Designer.cs</LastGenOutput> <SubType>Designer</SubType> + <LastGenOutput>XMLNames.Designer.cs</LastGenOutput> </EmbeddedResource> </ItemGroup> <ItemGroup> diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs index 28afea7f4637c5cd670ccf623da9e067ba63ee27..67281ae54e352b798ed6fe36c023f2425eced4d0 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONComponentInputData.cs @@ -223,6 +223,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return VehicleData.VIN; } } + public string LegislativeCategory + { + get { return null; } + } + public LegislativeClass? LegislativeClass { get { return VehicleData.LegislativeClass; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs index 3de7b5a3747a188e5f4674209b77e7bd73c39a7f..42042eadfed1643a3062cfecb5db8e0fbed3f624 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONSubComponent.cs @@ -273,6 +273,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON } } + public SquareMeter TransferredAirDragArea + { + get + { + return AirDragArea; + } + } + + public SquareMeter AirDragArea_0 + { + get + { + return AirDragArea; + } + } + public virtual CrossWindCorrectionMode CrossWindCorrectionMode { get { return CrossWindCorrectionModeHelper.Parse(Body.GetEx<string>("CdCorrMode")); } @@ -592,7 +608,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON #region Implementation of IPneumaticSupplyDeclarationData - public string Clutch { get; } + public CompressorDrive CompressorDrive { get; } + public string Clutch { get; } public virtual double Ratio { get { return Body["Aux"]?["PneumaticSupply"]?.GetEx<double>("Ratio") ?? 0.0; } } public virtual string CompressorSize { diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index efe1a7b47f8f7e9a5676cf294620fa4d65bf3083..c7355a1d53373c4cb98bc6e74327beec5bf7f0f5 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -238,6 +238,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return Constants.NOT_AVailABLE; } } + public string LegislativeCategory + { + get { return null; } + } + public virtual LegislativeClass? LegislativeClass { get { diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs index 9e020e820b2cf38358c62e33fc53d6a2ec56d8cd..3dffc6369b624449a5562a542a7519fd221d06f9 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationAirdragDataProvider.cs @@ -34,6 +34,26 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider } } + public virtual SquareMeter TransferredAirDragArea + { + get + { + return ElementExists(XMLNames.AirDrag_TransferredCDxA) + ? GetDouble(XMLNames.AirDrag_TransferredCDxA).SI<SquareMeter>() + : null; + } + } + + public virtual SquareMeter AirDragArea_0 + { + get + { + return ElementExists(XMLNames.AirDrag_CdxA_0) + ? GetDouble(XMLNames.AirDrag_CdxA_0).SI<SquareMeter>() + : null; + } + } + public override CertificationMethod CertificationMethod { get { return CertificationMethod.Measured; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs index b33ee82dcff969599dc060b1db7e793370f75f20..566ecab49c12fa47fe34aa309961ed2115427b71 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs @@ -138,6 +138,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider #region Implementation of IPneumaticSupplyDeclarationData + public CompressorDrive CompressorDrive + { + get { return CompressorDriveHelper.Parse(GetString(XMLNames.CompressorDrive)); } + } + public virtual string Clutch { get { return GetString(new[] { XMLNames.BusAux_PneumaticSystem, "Clutch" }); } } public virtual double Ratio diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs index c71f4ab540da3738e563c6ff5aa4c0896f54d394..4df6b512fe71799139b40236f426da938b975c85 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs @@ -120,6 +120,11 @@ 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>(); } @@ -956,6 +961,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider get { return GetString(XMLNames.Vehicle_VIN); } } + public string LegislativeCategory + { + get { return GetString(XMLNames.Bus_LegislativeCategory); } + } + public VehicleCategory VehicleCategory { get { return VehicleCategoryHelper.Parse(GetString(XMLNames.Vehicle_VehicleCategory)); } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs index 05845d89eaec489a105fdacaf6d42463cdb33192..1adb5bfc09c3bda19d1affb11afc181b029c068a 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Factory/IDeclarationInjectFactory.cs @@ -128,6 +128,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory IXMLAxleReader CreateAxleReader(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentsNode); IXMLGearboxReader CreateGearboxReader(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentsNode); IXMLAuxiliaryReader CreateAuxiliariesReader(string version, IXMLDeclarationVehicleData vehicle, XmlNode componentsNode); + IXMLApplicationInformationData CreateApplicationInformationReader(string version, XmlNode applicationNode); 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 097c8f28bc4426eba9610c0da90862e85a78a40c..3f5ce60a03c25e005d076fc1941664f02b9fd891 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/Reader/Impl/XMLDeclarationMultistageInputReader.cs @@ -12,6 +12,7 @@ using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl @@ -444,6 +445,11 @@ 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; } @@ -875,6 +881,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl { get { return AirdragEntry?.AirDragArea; } } + + public SquareMeter TransferredAirDragArea + { + get + { + return AirdragEntry?.TransferredAirDragArea; + } + } + + public SquareMeter AirDragArea_0 + { + get + { + return AirdragEntry.AirDragArea_0; + } + } + public DataSource DataSource { get { return AirdragEntry?.DataSource; } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs index c7ae92bac6782a20f53fdee67767a62c41f0117a..6f75b3791793a49038cb1f18a0bded32c3bb0990 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringAirdragDataProvider.cs @@ -69,7 +69,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Engineering.DataProvider get { return AirDragArea; } } - public virtual SquareMeter AirdragArea_0 + public virtual SquareMeter AirDragArea_0 { get { return AirDragArea; } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs index 76017cff2db4dc91fb6f90148caee516789fd7ff..fa6b7d5740c12641a9b127383764e429a3242932 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Engineering/DataProvider/XMLEngineeringVehicleDataProvider.cs @@ -76,6 +76,11 @@ 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>(); } diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs b/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs index 43fefb49581f233e3c0e0e229381fa1271ba2f58..800fa39358f383c6f9dd13777b8a6c07c75daebe 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/CombinedBusAuxiliaries.cs @@ -45,6 +45,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { #region Implementation of IPneumaticSupplyDeclarationData + public CompressorDrive CompressorDrive { get; } public string Clutch { get; } public double Ratio { get; } public string CompressorSize { get; } diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs new file mode 100644 index 0000000000000000000000000000000000000000..bf397d5ef0299c4595347ebb76ea533c9f8065e5 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputVIFWriter.cs @@ -0,0 +1,70 @@ +using System; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Linq; + + +namespace TUGraz.VectoCore.OutputData.FileIO +{ + public class FileOutputVIFWriter : FileOutputWriter + { + public const string REPORT_ENDING_PREFIX = "VIF_Report_"; + + private string _jobFile; + private readonly int _numberOfManufacturingStages; + + public string XMLMultistageReportFileName + { + get { return Path.ChangeExtension(_jobFile, $"{REPORT_ENDING_PREFIX}{_numberOfManufacturingStages + 2}.xml"); } + } + + public FileOutputVIFWriter(string jobFile, int numberOfManufacturingStages) : base(jobFile) + { + _jobFile = jobFile; + RemoveExistingEndingPrefix(); + _numberOfManufacturingStages = numberOfManufacturingStages; + } + + private void RemoveExistingEndingPrefix() + { + var vifReportIndex = _jobFile.IndexOf(REPORT_ENDING_PREFIX, StringComparison.Ordinal); + if (vifReportIndex == -1) + return; + + if (!_jobFile.Contains(REPORT_ENDING_PREFIX)) + return; + + _jobFile = $"{_jobFile.Substring(0, vifReportIndex - 1)}.xml"; + } + + + public override void WriteReport(ReportType type, XDocument data) + { + var fileName = (string)null; + switch (type) { + case ReportType.DeclarationReportMultistageVehicleXML: + fileName = XMLMultistageReportFileName; + break; + default: + base.WriteReport(type, data); + break; + } + + if (fileName == null) + return; + + using (var writer = new FileStream(fileName, FileMode.Create)) + { + using (var xmlWriter = new XmlTextWriter(writer, Encoding.UTF8)) + { + xmlWriter.Formatting = Formatting.Indented; + data.WriteTo(xmlWriter); + xmlWriter.Flush(); + xmlWriter.Close(); + } + } + + } + } +} diff --git a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs index 7a4fd849c4637db662cea699e79451340ec5bdcb..5d471afa186fa85beaeb2b099449156837c8f441 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/FileOutputWriter.cs @@ -84,13 +84,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO { get { return Path.ChangeExtension(_jobFile, Constants.FileExtensions.SumFile); } } - - public string XMLMultistageReportFileName - { - get { return Path.ChangeExtension(_jobFile, "VIF_Report.xml"); } - } - - + /// <summary> /// /// </summary> @@ -141,9 +135,6 @@ namespace TUGraz.VectoCore.OutputData.FileIO case ReportType.DeclarationVTPReportXML: fileName = XMLVTPReportName; break; - case ReportType.DeclarationReportMultistageVehicleXML: - fileName = XMLMultistageReportFileName; - break; default: throw new ArgumentOutOfRangeException("ReportType"); } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs index 3e3bf88ebe2be2641e3f6673802f86528d8f8ba3..6ff8cd221653bdd7e1e828e4acc20a86db8275a4 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLMultistageBusReport.cs @@ -7,6 +7,7 @@ using System.Text.RegularExpressions; using System.Xml; using System.Xml.Linq; using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.Hashing; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; @@ -15,6 +16,7 @@ using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; + namespace TUGraz.VectoCore.OutputData.XML { public interface IXMLMultistageReport @@ -153,8 +155,8 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GenerateInputManufacturingStage() { - var multistageId = $"MST-{GetGUID()}"; - var vehicleId = $"VEH-{GetGUID()}"; + var multistageId = $"{VectoComponents.VectoManufacturingStage.HashIdPrefix()}{GetGUID()}"; + var vehicleId = $"{VectoComponents.Vehicle.HashIdPrefix()}{GetGUID()}"; return new XElement(tns + XMLNames.ManufacturingStage, new XAttribute("stageCount", GetStageNumber()), @@ -239,6 +241,9 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetADAS(IAdvancedDriverAssistantSystemDeclarationInputData adasData) { + if (adasData == null) + return null; + return new XElement( v28 + XMLNames.Vehicle_ADAS, new XElement(v23 + XMLNames.Vehicle_ADAS_EngineStopStart, adasData.EngineStopStart), @@ -253,6 +258,9 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetBusVehicleComponents(IVehicleComponentsDeclaration vehicleComponents) { + if (vehicleComponents == null) + return null; + var busAirdrag = GetBusAirdrag(vehicleComponents.AirdragInputData); var busAux = GetBusAuxiliaries(vehicleComponents.BusAuxiliaries); @@ -269,11 +277,11 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetBusAirdrag(IAirdragDeclarationInputData airdrag) { - if (airdrag != null) { + if (airdrag != null) return GetAirdragElement(airdrag); - } - - switch (_vehicleInputData.AirdragModifiedMultistage) { + + switch (_vehicleInputData.AirdragModifiedMultistage) + { case true: return GetBusAirdragUseStandardValues(); case false: @@ -285,12 +293,24 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetAirdragElement(IAirdragDeclarationInputData airdrag) { - var component = airdrag as AbstractCommonComponentType; - if (component == null) + if (airdrag == null) return null; + + XmlNode airdragNode = null; + if (airdrag is AbstractCommonComponentType) + airdragNode = (airdrag as AbstractCommonComponentType).XMLSource; + else { + var type = airdrag.GetType(); + var property = type.GetProperty(nameof(AbstractCommonComponentType.XMLSource)); + if (property != null) + airdragNode = (XmlNode)property.GetValue(airdrag, null); + } - var dataElement = XElement.Parse(component.XMLSource.FirstChild.OuterXml); - var signatureElement = XElement.Parse(component.XMLSource.LastChild.OuterXml); + if (airdragNode == null) + return null; + + var dataElement = XElement.Parse(airdragNode.FirstChild.OuterXml); + var signatureElement = XElement.Parse(airdragNode.LastChild.OuterXml); dataElement.Attribute(XNamespace.Xmlns + "xsi")?.Remove(); return new XElement(v28 + XMLNames.Component_AirDrag, @@ -301,11 +321,13 @@ namespace TUGraz.VectoCore.OutputData.XML private XElement GetBusAirdragUseStandardValues() { + var id = $"{VectoComponents.Airdrag.HashIdPrefix()}{GetGUID()}"; + return new XElement(v28 + XMLNames.Component_AirDrag, new XElement(v20 + XMLNames.ComponentDataWrapper, new XAttribute(XNamespace.Xmlns + "v2.0", v20), new XAttribute(xsi + XMLNames.Attr_Type, "v2.8:AirDragModifiedUseStandardValueType"), - new XAttribute(XMLNames.Component_ID_Attr, "standard") + new XAttribute(XMLNames.Component_ID_Attr, id) ), new XElement(v20 + XMLNames.DI_Signature, XMLHelper.CreateDummySig(di))); } diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 2b3fec268366af0379017f518d0276650c52fc5b..c393280676f869f122f29b7781504b31d09896d3 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -435,6 +435,7 @@ <Compile Include="Models\Simulation\ISimulatorFactoryFactory.cs" /> <Compile Include="Models\Simulation\SimulationFactoryNinjectModule.cs" /> <Compile Include="OutputData\FileIO\BusAuxWriter.cs" /> + <Compile Include="OutputData\FileIO\FileOutputVIFWriter.cs" /> <Compile Include="OutputData\FileIO\JSONFileWriter.cs" /> <Compile Include="OutputData\XML\AbstractXMLManufacturerReport.cs" /> <Compile Include="OutputData\XML\DeclarationJobs\XMLCompletedBusWriter.cs" /> diff --git a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs index d3617eed5cd44a32057b1dbacb5c5fa0707656af..19e893c5ce1307289d5464274112a41bd367f7e2 100644 --- a/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs +++ b/VectoCore/VectoCoreTest/Integration/Multistage/MultistageVehicleTest.cs @@ -30,7 +30,7 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage const string InputFilePath = InputDirPath + "vecto_vehicle-stage_input_full-sample.xml"; const string VIFInputFile = VIFDirPath + "vecto_multistage_primary_vehicle_stage_2_3.xml"; - private const string vifResult = VIFDirPath + "vif_vehicle-sample.xml"; + private const string vifResult = VIFDirPath + "vif_vehicle-sample.VIF_Report_3.xml"; protected IXMLInputDataReader xmlInputReader; protected IXMLInputDataReader xmlVIFInputReader; @@ -58,8 +58,9 @@ namespace TUGraz.VectoCore.Tests.Integration.Multistage var vifReader = XmlReader.Create(vifFilename); var vifDataProvider = xmlInputReader.Create(vifReader) as IMultistageBusInputDataProvider; - - var writer = new FileOutputWriter(vifResult); + + var numberOfManufacturingStages = vifDataProvider.JobInputData.ManufacturingStages?.Count ?? 0; + var writer = new FileOutputVIFWriter(vifResult, numberOfManufacturingStages); var inputData = new XMLDeclarationVIFInputData(vifDataProvider, vehicle); var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer); diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.VIF_Report_5.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.VIF_Report_5.xml new file mode 100644 index 0000000000000000000000000000000000000000..b3433061102c1be274c50f29dc77ddb0528f1854 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.VIF_Report_5.xml @@ -0,0 +1,898 @@ +<?xml version="1.0" encoding="utf-8"?> +<VectoOutputMultistage xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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.6="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:VehicleInterimFile:v0.1 E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoOutputMultistage.0.1.xsd"> + <PrimaryVehicle> + <Data id="text" xsi:type="PrimaryVehicleDataType"> + <Vehicle xsi:type="VehiclePIFType"> + <ManufacturerPrimaryVehicle>Generic Truck Manufacturer</ManufacturerPrimaryVehicle> + <ManufacturerAddressPrimaryVehicle>Street, ZIP City</ManufacturerAddressPrimaryVehicle> + <Model>Generic Model</Model> + <VIN>VEH-1234567890_nonSmart-ESS</VIN> + <Date>2017-02-15T11:00:00Z</Date> + <LegislativeCategory>M3</LegislativeCategory> + <VehicleCategory>Bus</VehicleCategory> + <AxleConfiguration>8x2</AxleConfiguration> + <Articulated>true</Articulated> + <TechnicalPermissibleMaximumLadenMass>4000</TechnicalPermissibleMaximumLadenMass> + <IdlingSpeed>600</IdlingSpeed> + <RetarderType>Transmission Output Retarder</RetarderType> + <RetarderRatio>1.000</RetarderRatio> + <AngledriveType>None</AngledriveType> + <ZeroEmissionVehicle>false</ZeroEmissionVehicle> + <ADAS xsi:type="v2.3:AdvancedDriverAssistantSystemsType"> + <v2.3:EngineStopStart>true</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>true</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>1,2,3</v2.3:PredictiveCruiseControl> + <v2.3:APTEcoRollReleaseLockupClutch>false</v2.3:APTEcoRollReleaseLockupClutch> + </ADAS> + <TorqueLimits xmlns:tcl="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="tcl:TorqueLimitsType"> + <tcl:Entry gear="6" maxTorque="1800" /> + <tcl:Entry gear="1" maxTorque="2500" /> + <tcl:Entry gear="12" maxTorque="1900" /> + </TorqueLimits> + <Components xsi:type="VehicleComponentsPIFType"> + <Engine> + <Data xsi:type="EngineDataPIFType"> + <Manufacturer>Generic Engine Manufacturer</Manufacturer> + <Model>Bus 6x2</Model> + <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> + <Date>2017-02-15T11:00:00Z</Date> + <AppVersion>VectoEngine x.y</AppVersion> + <Displacement>12730</Displacement> + <RatedSpeed>1800</RatedSpeed> + <RatedPower>325032</RatedPower> + <MaxEngineTorque>2134</MaxEngineTorque> + <WHRType> + <v2.3:MechanicalOutputICE>false</v2.3:MechanicalOutputICE> + <v2.3:MechanicalOutputDrivetrain>false</v2.3:MechanicalOutputDrivetrain> + <v2.3:ElectricalOutput>true</v2.3:ElectricalOutput> + </WHRType> + <Mode> + <IdlingSpeed>600</IdlingSpeed> + <FullLoadAndDragCurve> + <Entry engineSpeed="600.00" maxTorque="1188.00" dragTorque="-138.00" /> + <Entry engineSpeed="800.00" maxTorque="1661.00" dragTorque="-143.00" /> + <Entry engineSpeed="1000.00" maxTorque="2134.00" dragTorque="-152.00" /> + <Entry engineSpeed="1200.00" maxTorque="2134.00" dragTorque="-165.00" /> + <Entry engineSpeed="1400.00" maxTorque="2134.00" dragTorque="-187.00" /> + <Entry engineSpeed="1600.00" maxTorque="1928.00" dragTorque="-217.00" /> + <Entry engineSpeed="1800.00" maxTorque="1722.00" dragTorque="-244.00" /> + <Entry engineSpeed="2000.00" maxTorque="1253.00" dragTorque="-278.00" /> + <Entry engineSpeed="2100.00" maxTorque="1019.00" dragTorque="-296.00" /> + <Entry engineSpeed="2200.00" maxTorque="0.00" dragTorque="-314.00" /> + </FullLoadAndDragCurve> + <Fuels> + <FuelType>Diesel CI</FuelType> + </Fuels> + </Mode> + </Data> + </Engine> + <Transmission> + <Data xsi:type="TransmissionDataPIFType"> + <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> + <Model>Generic 40t Long Haul Truck Gearbox</Model> + <MainCertificationMethod>Standard values</MainCertificationMethod> + <CertificationNumber>Trans-5464sdf6sdf555</CertificationNumber> + <Date>2017-01-11T11:00:00Z</Date> + <AppVersion>3.0.1</AppVersion> + <TransmissionType>AMT</TransmissionType> + <Gears xsi:type="TransmissionGearsPIFType"> + <Gear number="1"> + <Ratio>14.930</Ratio> + <MaxTorque>1900</MaxTorque> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="2"> + <Ratio>11.640</Ratio> + <MaxTorque>1900</MaxTorque> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="3"> + <Ratio>9.020</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="4"> + <Ratio>7.040</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="5"> + <Ratio>5.640</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="6"> + <Ratio>4.400</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="7"> + <Ratio>3.390</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="8"> + <Ratio>2.650</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="9"> + <Ratio>2.050</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="10"> + <Ratio>1.600</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="11"> + <Ratio>1.280</Ratio> + <MaxSpeed>2000</MaxSpeed> + </Gear> + <Gear number="12"> + <Ratio>1.000</Ratio> + </Gear> + </Gears> + </Data> + </Transmission> + <TorqueConverter> + <Data xsi:type="TorqueConverterDataPIFType"> + <Manufacturer>Generic Torque Converter</Manufacturer> + <Model>Generic Torque Converter Model</Model> + <CertificationMethod>Standard values</CertificationMethod> + <CertificationNumber>Torq-4546565455</CertificationNumber> + <Date>2018-01-12T12:00:00Z</Date> + <AppVersion>3.0.3</AppVersion> + <Characteristics> + <Entry speedRatio="0.0000" torqueRatio="1.00" inputTorqueRef="300.00" /> + <Entry speedRatio="0.5000" torqueRatio="1.00" inputTorqueRef="200.00" /> + <Entry speedRatio="0.9000" torqueRatio="0.90" inputTorqueRef="200.00" /> + </Characteristics> + </Data> + </TorqueConverter> + <Angledrive> + <Data xsi:type="AngledriveDataPIFType"> + <Manufacturer>Generic Angledrive</Manufacturer> + <Model>Generic Angledrive Model</Model> + <CertificationMethod>Standard values</CertificationMethod> + <CertificationNumber>ANG-Z64665456654</CertificationNumber> + <Date>2019-01-12T12:00:00Z</Date> + <AppVersion>3.2.3</AppVersion> + <Ratio>20</Ratio> + </Data> + </Angledrive> + <Axlegear> + <Data xsi:type="AxlegearDataPIFType"> + <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> + <Model>Generic 40t Long Haul Truck AxleGear</Model> + <CertificationMethod>Standard values</CertificationMethod> + <CertificationNumber>AX-6654888s5f4</CertificationNumber> + <Date>2017-01-11T11:00:00Z</Date> + <AppVersion>3.0.1</AppVersion> + <LineType>Single portal axle</LineType> + <Ratio>2.590</Ratio> + </Data> + </Axlegear> + <AxleWheels> + <Data xsi:type="AxleWheelsDataPIFType"> + <Axles> + <Axle axleNumber="1" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="v2.0:AxleDataDeclarationType"> + <v2.0:AxleType>VehicleNonDriven</v2.0:AxleType> + <v2.0:TwinTyres>false</v2.0:TwinTyres> + <v2.0:Steered>true</v2.0:Steered> + <v2.0:Tyre> + <v2.0:Data id="WHL-5432198760-315-70-R22.5" xsi:type="v2.0:TyreDataDeclarationType"> + <v2.0:Manufacturer>Generic Wheels Manufacturer</v2.0:Manufacturer> + <v2.0:Model>Generic Wheel</v2.0:Model> + <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber> + <v2.0:Date>2017-01-11T14:00:00Z</v2.0:Date> + <v2.0:AppVersion>Tyre Generation App 1.0</v2.0:AppVersion> + <v2.0:Dimension>315/70 R22.5</v2.0:Dimension> + <v2.0:RRCDeclared>0.0055</v2.0:RRCDeclared> + <v2.0:FzISO>31300</v2.0:FzISO> + </v2.0:Data> + <v2.0:Signature> + <di:Reference URI="#WHL-5432198760-315-70-R22.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> + </di:Reference> + </v2.0:Signature> + </v2.0:Tyre> + </Axle> + <Axle axleNumber="2" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="v2.0:AxleDataDeclarationType"> + <v2.0:AxleType>VehicleDriven</v2.0:AxleType> + <v2.0:TwinTyres>true</v2.0:TwinTyres> + <v2.0:Steered>false</v2.0:Steered> + <v2.0:Tyre> + <v2.0:Data id="WHL-5432198760-315-70-R22.5" xsi:type="v2.0:TyreDataDeclarationType"> + <v2.0:Manufacturer>Generic Wheels Manufacturer</v2.0:Manufacturer> + <v2.0:Model>Generic Wheel</v2.0:Model> + <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber> + <v2.0:Date>2017-01-11T14:00:00Z</v2.0:Date> + <v2.0:AppVersion>Tyre Generation App 1.1</v2.0:AppVersion> + <v2.0:Dimension>315/70 R22.5</v2.0:Dimension> + <v2.0:RRCDeclared>0.0063</v2.0:RRCDeclared> + <v2.0:FzISO>31300</v2.0:FzISO> + </v2.0:Data> + <v2.0:Signature> + <di:Reference URI="#WHL-5432198760-315-70-R22.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=</di:DigestValue> + </di:Reference> + </v2.0:Signature> + </v2.0:Tyre> + </Axle> + <Axle axleNumber="3" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="v2.0:AxleDataDeclarationType"> + <v2.0:AxleType>VehicleNonDriven</v2.0:AxleType> + <v2.0:TwinTyres>false</v2.0:TwinTyres> + <v2.0:Steered>false</v2.0:Steered> + <v2.0:Tyre> + <v2.0:Data id="WHL-5432198760-315-70-R22.5" xsi:type="v2.0:TyreDataDeclarationType"> + <v2.0:Manufacturer>Generic Wheels Manufacturer</v2.0:Manufacturer> + <v2.0:Model>Generic Wheel</v2.0:Model> + <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber> + <v2.0:Date>2017-01-11T14:00:00Z</v2.0:Date> + <v2.0:AppVersion>Tyre Generation App 1.1</v2.0:AppVersion> + <v2.0:Dimension>315/70 R22.5</v2.0:Dimension> + <v2.0:RRCDeclared>0.0055</v2.0:RRCDeclared> + <v2.0:FzISO>31300</v2.0:FzISO> + </v2.0:Data> + <v2.0:Signature> + <di:Reference URI="#WHL-5432198760-315-70-R22.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> + </di:Reference> + </v2.0:Signature> + </v2.0:Tyre> + </Axle> + </Axles> + </Data> + </AxleWheels> + <Auxiliaries> + <Data xsi:type="AuxiliaryDataPIFType"> + <Fan> + <Technology>Hydraulic driven - Constant displacement pump</Technology> + </Fan> + <SteeringPump> + <Technology axleNumber="1">Variable displacement elec. controlled</Technology> + </SteeringPump> + <ElectricSystem> + <AlternatorTechnology>default</AlternatorTechnology> + <SmartElectrics>true</SmartElectrics> + <MaxAlternatorPower>15000</MaxAlternatorPower> + <ElectricStorageCapacity>50</ElectricStorageCapacity> + </ElectricSystem> + <PneumaticSystem> + <SizeOfAirSupply>Large Supply 2-stage</SizeOfAirSupply> + <CompressorDrive>electrically</CompressorDrive> + <Clutch>none</Clutch> + <CompressorRatio>1.000</CompressorRatio> + <SmartCompressionSystem>true</SmartCompressionSystem> + <SmartRegenerationSystem>false</SmartRegenerationSystem> + <AirsuspensionControl>electronically</AirsuspensionControl> + <SCRReagentDosing>true</SCRReagentDosing> + </PneumaticSystem> + <HVAC> + <AdjustableCoolantThermostat>true</AdjustableCoolantThermostat> + <EngineWasteGasHeatExchanger>true</EngineWasteGasHeatExchanger> + </HVAC> + </Data> + </Auxiliaries> + </Components> + </Vehicle> + <InputDataSignature> + <di:Reference URI="#VEH-PrimaryBus_SmartPS"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>uqcFIXtDYxvl513ruiYYJCrV1fIiyw37t8vJhg4xxoo=</di:DigestValue> + </di:Reference> + </InputDataSignature> + <ManufacturerRecordSignature> + <di:Reference URI="#RESULT-5f30c7fe665a47938f6b"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>KUpFCKh1bu/YPwYj36kJK1uCrv++BTLf2OUZcOt43Os=</di:DigestValue> + </di:Reference> + </ManufacturerRecordSignature> + <Results> + <Status>success</Status> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Heavy Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">15527.52</TotalVehicleMass> + <Payload unit="kg">1352.52</Payload> + <PassengerCount>19.89</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">21.22359</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1555.73</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Heavy Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">20937.60</TotalVehicleMass> + <Payload unit="kg">6762.60</Payload> + <PassengerCount>99.45</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">25.40945</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1862.57</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">15527.52</TotalVehicleMass> + <Payload unit="kg">1352.52</Payload> + <PassengerCount>19.89</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">16.74101</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1227.15</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">20937.60</TotalVehicleMass> + <Payload unit="kg">6762.60</Payload> + <PassengerCount>99.45</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">20.24221</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1483.80</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Suburban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">15527.52</TotalVehicleMass> + <Payload unit="kg">1352.52</Payload> + <PassengerCount>19.89</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">14.34578</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1051.58</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Suburban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">20937.60</TotalVehicleMass> + <Payload unit="kg">6762.60</Payload> + <PassengerCount>99.45</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">17.60016</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1290.13</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Interurban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">15469.51</TotalVehicleMass> + <Payload unit="kg">1294.51</Payload> + <PassengerCount>18.23</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">11.82313</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">866.66</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33SD</VehicleGroup> + <Mission>Interurban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">18411.57</TotalVehicleMass> + <Payload unit="kg">4236.57</Payload> + <PassengerCount>59.67</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">13.24283</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">970.73</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33DD</VehicleGroup> + <Mission>Heavy Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">16303.29</TotalVehicleMass> + <Payload unit="kg">1578.29</Payload> + <PassengerCount>23.21</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">22.72091</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1665.49</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33DD</VehicleGroup> + <Mission>Heavy Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">22616.43</TotalVehicleMass> + <Payload unit="kg">7891.43</Payload> + <PassengerCount>116.05</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">27.95930</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">2049.48</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33DD</VehicleGroup> + <Mission>Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">16303.29</TotalVehicleMass> + <Payload unit="kg">1578.29</Payload> + <PassengerCount>23.21</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">17.90756</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1312.66</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33DD</VehicleGroup> + <Mission>Urban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">22616.43</TotalVehicleMass> + <Payload unit="kg">7891.43</Payload> + <PassengerCount>116.05</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">22.23796</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1630.09</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33DD</VehicleGroup> + <Mission>Suburban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">16303.29</TotalVehicleMass> + <Payload unit="kg">1578.29</Payload> + <PassengerCount>23.21</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">15.28035</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1120.08</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P33DD</VehicleGroup> + <Mission>Suburban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">22616.43</TotalVehicleMass> + <Payload unit="kg">7891.43</Payload> + <PassengerCount>116.05</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">19.26201</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1411.95</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34SD</VehicleGroup> + <Mission>Interurban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">16467.68</TotalVehicleMass> + <Payload unit="kg">1254.68</Payload> + <PassengerCount>17.67</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">11.93701</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">875.01</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34SD</VehicleGroup> + <Mission>Interurban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">19319.21</TotalVehicleMass> + <Payload unit="kg">4106.21</Payload> + <PassengerCount>57.83</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">13.32341</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">976.63</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34SD</VehicleGroup> + <Mission>Coach</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">16490.49</TotalVehicleMass> + <Payload unit="kg">1277.49</Payload> + <PassengerCount>17.99</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">8.71847</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">639.08</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34SD</VehicleGroup> + <Mission>Coach</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">18406.72</TotalVehicleMass> + <Payload unit="kg">3193.72</Payload> + <PassengerCount>44.98</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">9.20255</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">674.57</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34DD</VehicleGroup> + <Mission>Interurban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">19588.08</TotalVehicleMass> + <Payload unit="kg">1738.08</Payload> + <PassengerCount>24.48</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">13.58335</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">995.69</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34DD</VehicleGroup> + <Mission>Interurban</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">23643.60</TotalVehicleMass> + <Payload unit="kg">5793.60</Payload> + <PassengerCount>81.60</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">15.56740</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">1141.12</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34DD</VehicleGroup> + <Mission>Coach</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">19703.95</TotalVehicleMass> + <Payload unit="kg">1853.95</Payload> + <PassengerCount>26.11</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">9.82937</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">720.51</CO2> + </Result> + <Result status="success"> + <VehicleGroup>P34DD</VehicleGroup> + <Mission>Coach</Mission> + <SimulationParameters> + <TotalVehicleMass unit="kg">22484.88</TotalVehicleMass> + <Payload unit="kg">4634.88</Payload> + <PassengerCount>65.28</PassengerCount> + <FuelMode>single fuel mode</FuelMode> + </SimulationParameters> + <Fuel type="Diesel CI"> + <EnergyConsumption unit="MJ/km">10.56728</EnergyConsumption> + </Fuel> + <CO2 unit="g/km">774.60</CO2> + </Result> + </Results> + <ApplicationInformation> + <SimulationToolVersion>String</SimulationToolVersion> + <Date>2017-01-01T00:00:00Z</Date> + </ApplicationInformation> + </Data> + <Signature> + <di:Reference URI="#PIF-d10aff76c5d149948046"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>nI+57QQtWA2rFqJTZ41t0XrXcJbcGmc7j4E66iGJyT0=</di:DigestValue> + </di:Reference> + </Signature> + </PrimaryVehicle> + <ManufacturingStage stageCount="2"> + <Data xsi:type="BusManufacturingStageDataType" id="MSTG-1"> + <HashPreviousStage> + <di:Reference URI="#PIF-d10aff76c5d149948046"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>nI+57QQtWA2rFqJTZ41t0XrXcJbcGmc7j4E66iGJyT0=</di:DigestValue> + </di:Reference> + </HashPreviousStage> + <Vehicle xsi:type="v2.8:InterimStageInputType" id="MSTG-1-Vehicle"> + <v2.8:Manufacturer>Intermediate Manufacturer 1</v2.8:Manufacturer> + <v2.8:ManufacturerAddress>Intermediate Manufacturer Address 1</v2.8:ManufacturerAddress> + <v2.8:VIN>VEH-1234567890</v2.8:VIN> + <v2.8:Date>2018-02-15T11:00:00Z</v2.8:Date> + <v2.8:Model>Intermediate Model 1</v2.8:Model> + <v2.8:NgTankSystem>Compressed</v2.8:NgTankSystem> + <v2.8:NumberPassengersLowerDeck>10</v2.8:NumberPassengersLowerDeck> + <v2.8:NumberPassengersUpperDeck>30</v2.8:NumberPassengersUpperDeck> + <v2.8:LowEntry>true</v2.8:LowEntry> + <v2.8:HeightIntegratedBody>3000</v2.8:HeightIntegratedBody> + <v2.8:VehicleLength>12000</v2.8:VehicleLength> + <v2.8:VehicleWidth>2500</v2.8:VehicleWidth> + <v2.8:EntranceHeight>2500</v2.8:EntranceHeight> + <v2.8:VehicleDeclarationType>interim</v2.8:VehicleDeclarationType> + </Vehicle> + <ApplicationInformation> + <SimulationToolVersion>!!NOT FOR CERTIFICATION!!</SimulationToolVersion> + <Date>2021-01-12T07:20:08.0187663Z</Date> + </ApplicationInformation> + </Data> + <Signature> + <di:Reference URI="#RESULT-6f30c7fe665a47938f6b"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>BMpFCKh1bu/YPwYj37kJK1uCrv++BTLf2OUZcOt43Os=</di:DigestValue> + </di:Reference> + </Signature> + </ManufacturingStage> + <ManufacturingStage stageCount="3"> + <Data xsi:type="BusManufacturingStageDataType" id="MSTG-2"> + <HashPreviousStage> + <di:Reference URI="#RESULT-6f30c7fe665a47938f6b"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>BMpFCKh1bu/YPwYj37kJK1uCrv++BTLf2OUZcOt43Os=</di:DigestValue> + </di:Reference> + </HashPreviousStage> + <Vehicle xsi:type="v2.8:InterimStageInputType" id="MSTG-2-Vehicle"> + <v2.8:Manufacturer>Intermediate Manufacturer 2</v2.8:Manufacturer> + <v2.8:ManufacturerAddress>Intermediate Manufacturer Address 2</v2.8:ManufacturerAddress> + <v2.8:VIN>VEH-2234567890</v2.8:VIN> + <v2.8:Date>2021-02-13T07:20:08.0187663Z</v2.8:Date> + <v2.8:CorrectedActualMass>15000</v2.8:CorrectedActualMass> + <v2.8:BodyworkCode>CB</v2.8:BodyworkCode> + <v2.8:DoorDriveTechnology>mixed</v2.8:DoorDriveTechnology> + <v2.8:VehicleDeclarationType>interim</v2.8:VehicleDeclarationType> + <v2.8:ADAS> + <v2.3:EngineStopStart>true</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>true</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>1,2</v2.3:PredictiveCruiseControl> + </v2.8:ADAS> + <v2.8:Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType"> + <v2.8:Auxiliaries> + <v2.8:Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"> + <v2.8:ElectricSystem> + <v2.8:LEDLights> + <v2.8:Interiorlights>true</v2.8:Interiorlights> + <v2.8:Dayrunninglights>true</v2.8:Dayrunninglights> + </v2.8:LEDLights> + </v2.8:ElectricSystem> + <v2.8:HVAC> + <v2.8:SystemConfiguration>1</v2.8:SystemConfiguration> + <v2.8:HeatPumpTypeDriverCompartment>non R-744 2-stage</v2.8:HeatPumpTypeDriverCompartment> + <v2.8:HeatPumpModeDriverCompartment>heating</v2.8:HeatPumpModeDriverCompartment> + <v2.8:HeatPumpTypePassengerCompartment>non R-744 3-stage</v2.8:HeatPumpTypePassengerCompartment> + <v2.8:HeatPumpModePassengerCompartment>cooling</v2.8:HeatPumpModePassengerCompartment> + <v2.8:AuxiliaryHeaterPower>50</v2.8:AuxiliaryHeaterPower> + <v2.8:DoubleGlazing>false</v2.8:DoubleGlazing> + <v2.8:AdjustableAuxiliaryHeater>true</v2.8:AdjustableAuxiliaryHeater> + <v2.8:SeparateAirDistributionDucts>false</v2.8:SeparateAirDistributionDucts> + </v2.8:HVAC> + </v2.8:Data> + </v2.8:Auxiliaries> + </v2.8:Components> + </Vehicle> + <ApplicationInformation> + <SimulationToolVersion>!!NOT FOR CERTIFICATION!!</SimulationToolVersion> + <Date>2021-02-13T07:20:08.0187663Z</Date> + </ApplicationInformation> + </Data> + <Signature> + <di:Reference URI="#RESULT-8f30c7fe665a47938f6b"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>GHpFCKh1bu/YPwYj37kJK1uCrv++BTLf2OUZcOt43Os=</di:DigestValue> + </di:Reference> + </Signature> + </ManufacturingStage> + <ManufacturingStage stageCount="4"> + <Data xsi:type="BusManufacturingStageDataType" id="MST-3"> + <HashPreviousStage> + <di:Reference URI="#RESULT-8f30c7fe665a47938f6b"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>GHpFCKh1bu/YPwYj37kJK1uCrv++BTLf2OUZcOt43Os=</di:DigestValue> + </di:Reference> + </HashPreviousStage> + <Vehicle xsi:type="v2.8:InterimStageInputType" id="MSTG-3-Vehicle"> + <v2.8:Manufacturer>Intermediate Manufacturer 3</v2.8:Manufacturer> + <v2.8:ManufacturerAddress>Intermediate Manufacturer Address 3</v2.8:ManufacturerAddress> + <v2.8:VIN>VEH-2234567866</v2.8:VIN> + <v2.8:Date>2021-02-13T07:20:08.0187663Z</v2.8:Date> + <v2.8:LegislativeCategory>M3</v2.8:LegislativeCategory> + <v2.8:TechnicalPermissibleMaximumLadenMass>20000</v2.8:TechnicalPermissibleMaximumLadenMass> + <v2.8:NgTankSystem>Liquefied</v2.8:NgTankSystem> + <v2.8:ClassBus>B</v2.8:ClassBus> + <v2.8:VehicleDeclarationType>interim</v2.8:VehicleDeclarationType> + <v2.8:ADAS> + <v2.3:EngineStopStart>true</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>true</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>1,2</v2.3:PredictiveCruiseControl> + <v2.3:APTEcoRollReleaseLockupClutch>true</v2.3:APTEcoRollReleaseLockupClutch> + </v2.8:ADAS> + <v2.8:Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType"> + <v2.8:Auxiliaries> + <v2.8:Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"> + <v2.8:ElectricSystem> + <v2.8:LEDLights> + <v2.8:Positionlights>false</v2.8:Positionlights> + <v2.8:Brakelights>false</v2.8:Brakelights> + <v2.8:Headlights>true</v2.8:Headlights> + </v2.8:LEDLights> + </v2.8:ElectricSystem> + <v2.8:HVAC> + <v2.8:WaterElectricHeater>false</v2.8:WaterElectricHeater> + <v2.8:AirElectricHeater>false</v2.8:AirElectricHeater> + <v2.8:OtherHeatingTechnology>true</v2.8:OtherHeatingTechnology> + </v2.8:HVAC> + </v2.8:Data> + </v2.8:Auxiliaries> + </v2.8:Components> + </Vehicle> + <ApplicationInformation> + <SimulationToolVersion>!!NOT FOR CERTIFICATION!!</SimulationToolVersion> + <Date>2021-03-13T07:20:08.0187663Z</Date> + </ApplicationInformation> + </Data> + <Signature> + <di:Reference URI="#RESULT-8f30c7fe665a47938f7b"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>GHpFCKh1bu/YPwYj38kJK1uCrv++BTLf2OUZcOt43Os=</di:DigestValue> + </di:Reference> + </Signature> + </ManufacturingStage> + <ManufacturingStage stageCount="5"> + <Data xsi:type="BusManufacturingStageDataType" id="MST-8a622efa2f0145e684b7"> + <HashPreviousStage> + <di:Reference URI="#RESULT-8f30c7fe665a47938f7b"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>GHpFCKh1bu/YPwYj38kJK1uCrv++BTLf2OUZcOt43Os=</di:DigestValue> + </di:Reference> + </HashPreviousStage> + <Vehicle xsi:type="v2.8:InterimStageInputType" id="VEH-5cc3b782c52a421d8636"> + <v2.8:Manufacturer>Some Manufacturer</v2.8:Manufacturer> + <v2.8:ManufacturerAddress>Some Manufacturer Address</v2.8:ManufacturerAddress> + <v2.8:VIN>VEH-1234567890</v2.8:VIN> + <v2.8:Date>2021-05-09T22:00:00Z</v2.8:Date> + <v2.8:Model>Sample Bus Model</v2.8:Model> + <v2.8:LegislativeCategory>M3</v2.8:LegislativeCategory> + <v2.8:CorrectedActualMass>500</v2.8:CorrectedActualMass> + <v2.8:TechnicalPermissibleMaximumLadenMass>3500</v2.8:TechnicalPermissibleMaximumLadenMass> + <v2.8:AirdragModifiedMultistage>false</v2.8:AirdragModifiedMultistage> + <v2.8:NgTankSystem>Compressed</v2.8:NgTankSystem> + <v2.8:ClassBus>II+III</v2.8:ClassBus> + <v2.8:NumberPassengersLowerDeck>0</v2.8:NumberPassengersLowerDeck> + <v2.8:NumberPassengersUpperDeck>10</v2.8:NumberPassengersUpperDeck> + <v2.8:BodyworkCode>CB</v2.8:BodyworkCode> + <v2.8:LowEntry>false</v2.8:LowEntry> + <v2.8:HeightIntegratedBody>2500</v2.8:HeightIntegratedBody> + <v2.8:VehicleLength>0</v2.8:VehicleLength> + <v2.8:VehicleWidth>0</v2.8:VehicleWidth> + <v2.8:EntranceHeight>0</v2.8:EntranceHeight> + <v2.8:DoorDriveTechnology>electric</v2.8:DoorDriveTechnology> + <v2.8:VehicleDeclarationType>interim</v2.8:VehicleDeclarationType> + <v2.8:ADAS> + <v2.3:EngineStopStart>true</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl> + <v2.3:APTEcoRollReleaseLockupClutch>true</v2.3:APTEcoRollReleaseLockupClutch> + </v2.8:ADAS> + <v2.8:Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType"> + <v2.8:Auxiliaries> + <v2.8:Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"> + <v2.8:ElectricSystem> + <v2.8:LEDLights> + <v2.8:Interiorlights>false</v2.8:Interiorlights> + <v2.8:Dayrunninglights>true</v2.8:Dayrunninglights> + <v2.8:Positionlights>true</v2.8:Positionlights> + <v2.8:Brakelights>true</v2.8:Brakelights> + <v2.8:Headlights>false</v2.8:Headlights> + </v2.8:LEDLights> + </v2.8:ElectricSystem> + <v2.8:HVAC> + <v2.8:SystemConfiguration>0</v2.8:SystemConfiguration> + <v2.8:HeatPumpTypeDriverCompartment>none</v2.8:HeatPumpTypeDriverCompartment> + <v2.8:HeatPumpModeDriverCompartment>heating</v2.8:HeatPumpModeDriverCompartment> + <v2.8:HeatPumpTypePassengerCompartment>non R-744 2-stage</v2.8:HeatPumpTypePassengerCompartment> + <v2.8:HeatPumpModePassengerCompartment>cooling</v2.8:HeatPumpModePassengerCompartment> + <v2.8:AuxiliaryHeaterPower>50</v2.8:AuxiliaryHeaterPower> + <v2.8:DoubleGlazing>false</v2.8:DoubleGlazing> + <v2.8:AdjustableAuxiliaryHeater>true</v2.8:AdjustableAuxiliaryHeater> + <v2.8:SeparateAirDistributionDucts>false</v2.8:SeparateAirDistributionDucts> + <v2.8:WaterElectricHeater>true</v2.8:WaterElectricHeater> + <v2.8:AirElectricHeater>false</v2.8:AirElectricHeater> + <v2.8:OtherHeatingTechnology>false</v2.8:OtherHeatingTechnology> + </v2.8:HVAC> + </v2.8:Data> + </v2.8:Auxiliaries> + </v2.8:Components> + </Vehicle> + <ApplicationInformation> + <SimulationToolVersion>0.7.3.2171-DEV</SimulationToolVersion> + <Date>2021-05-10T11:15:01.2883833Z</Date> + </ApplicationInformation> + </Data> + <Signature> + <di:Reference URI="#MST-8a622efa2f0145e684b7"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>Ikl36H/utDgp3JX2g/rJOWb3+GhUeJ4h90gVNz8IUQQ=</di:DigestValue> + </di:Reference> + </Signature> + </ManufacturingStage> +</VectoOutputMultistage> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.xml new file mode 100644 index 0000000000000000000000000000000000000000..49f28078a4cf663438bc501f24645eba2447431f --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/123.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8"?> +<tns:VectoInputDeclaration xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" schemaVersion="2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationJob V:\VectoCore\VectoCore\Resources\XSD\VectoDeclarationJob.xsd"> + <v2.0:Vehicle id="TODO_ADDIDENTIFIER" xsi:type="InterimStageInputType"> + <Manufacturer>Some Manufacturer</Manufacturer> + <ManufacturerAddress>Some Manufacturer Address</ManufacturerAddress> + <VIN>VEH-1234567890</VIN> + <Date>2021-05-02T22:00:00Z</Date> + <Model>Sample Bus Model</Model> + <LegislativeCategory>M3</LegislativeCategory> + <CorrectedActualMass>500</CorrectedActualMass> + <TechnicalPermissibleMaximumLadenMass>3500</TechnicalPermissibleMaximumLadenMass> + <AirdragModifiedMultistage>false</AirdragModifiedMultistage> + <NgTankSystem>Compressed</NgTankSystem> + <ClassBus>II+III</ClassBus> + <VehicleCode>CB</VehicleCode> + <LowEntry>false</LowEntry> + <DoorDriveTechnology>electric</DoorDriveTechnology> + <DeclarationType>interim</DeclarationType> + <ADAS> + <v2.3:EngineStopStart>false</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl> + </ADAS> + <Components xsi:type="CompletedVehicleComponentsDeclarationType"> + <Auxiliaries> + <Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType"> + <ElectricSystem> + <LEDLights> + <Interiorlights>false</Interiorlights> + <Dayrunninglights>true</Dayrunninglights> + <Positionlights>true</Positionlights> + <Brakelights>true</Brakelights> + <Headlights>false</Headlights> + </LEDLights> + </ElectricSystem> + <HVAC> + <SystemConfiguration>0</SystemConfiguration> + <HeatPumpTypeDriverCompartment>none</HeatPumpTypeDriverCompartment> + <HeatPumpModeDriverCompartment>heating</HeatPumpModeDriverCompartment> + <HeatPumpTypePassengerCompartment>non R-744 2-stage</HeatPumpTypePassengerCompartment> + <HeatPumpModePassengerCompartment>cooling</HeatPumpModePassengerCompartment> + <AuxiliaryHeaterPower>50</AuxiliaryHeaterPower> + <DoubleGlazing>false</DoubleGlazing> + <AdjustableAuxiliaryHeater>true</AdjustableAuxiliaryHeater> + <SeparateAirDistributionDucts>false</SeparateAirDistributionDucts> + <WaterElectricHeater>true</WaterElectricHeater> + <AirElectricHeater>false</AirElectricHeater> + <OtherHeatingTechnology>false</OtherHeatingTechnology> + </HVAC> + </Data> + </Auxiliaries> + </Components> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml index f25279872f26cf7943770073c9328044a93450ac..47166faa269e2e2d2fd313e9bce63a0dd4b14fa7 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_full-sample.xml @@ -1 +1,90 @@ -<?xml version="1.0" encoding="UTF-8"?> <tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" 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 E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> <v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType"> <Manufacturer>Some Manufacturer</Manufacturer> <ManufacturerAddress>Some Manufacturer Address</ManufacturerAddress> <VIN>VEH-1234567890</VIN> <Date>2020-01-09T11:00:00Z</Date> <Model>Sample Bus Model</Model> <LegislativeCategory>M3</LegislativeCategory> <CorrectedActualMass>500</CorrectedActualMass> <TechnicalPermissibleMaximumLadenMass>3500</TechnicalPermissibleMaximumLadenMass> <AirdragModifiedMultistage>false</AirdragModifiedMultistage> <NgTankSystem>Compressed</NgTankSystem> <ClassBus>II+III</ClassBus> <NumberPassengersLowerDeck>0</NumberPassengersLowerDeck> <NumberPassengersUpperDeck>10</NumberPassengersUpperDeck> <BodyworkCode>CB</BodyworkCode> <LowEntry>false</LowEntry> <HeightIntegratedBody>2500</HeightIntegratedBody> <VehicleLength>9500</VehicleLength> <VehicleWidth>2500</VehicleWidth> <EntranceHeight>2000</EntranceHeight> <DoorDriveTechnology>electric</DoorDriveTechnology> <VehicleDeclarationType>interim</VehicleDeclarationType> <ADAS> <v2.3:EngineStopStart>true</v2.3:EngineStopStart> <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop> <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl> <v2.3:APTEcoRollReleaseLockupClutch>true</v2.3:APTEcoRollReleaseLockupClutch> </ADAS> <Components xsi:type="CompletedVehicleComponentsDeclarationType"> <AirDrag> <v2.0:Data xsi:type="v2.0:AirDragDataDeclarationType" id="CabinX23h"> <v2.0:Manufacturer>Generic Manufacturer</v2.0:Manufacturer> <v2.0:Model>Generic Model</v2.0:Model> <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber> <v2.0:Date>2017-03-24T15:00:00Z</v2.0:Date> <v2.0:AppVersion>Vecto AirDrag x.y</v2.0:AppVersion> <v2.0:CdxA_0>6.31</v2.0:CdxA_0> <v2.0:TransferredCdxA>6.32</v2.0:TransferredCdxA> <v2.0:DeclaredCdxA>6.34</v2.0:DeclaredCdxA> </v2.0:Data> <v2.0:Signature> <di:Reference URI="#CabinX23h"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=</di:DigestValue> </di:Reference> </v2.0:Signature> </AirDrag> <Auxiliaries> <Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType"> <ElectricSystem> <LEDLights> <Interiorlights>false</Interiorlights> <Dayrunninglights>true</Dayrunninglights> <Positionlights>true</Positionlights> <Brakelights>true</Brakelights> <Headlights>false</Headlights> </LEDLights> </ElectricSystem> <HVAC> <SystemConfiguration>0</SystemConfiguration> <HeatPumpTypeDriverCompartment>none</HeatPumpTypeDriverCompartment> <HeatPumpModeDriverCompartment>heating</HeatPumpModeDriverCompartment> <HeatPumpTypePassengerCompartment>non R-744 2-stage</HeatPumpTypePassengerCompartment> <HeatPumpModePassengerCompartment>cooling</HeatPumpModePassengerCompartment> <AuxiliaryHeaterPower>50</AuxiliaryHeaterPower> <DoubleGlazing>false</DoubleGlazing> <AdjustableAuxiliaryHeater>true</AdjustableAuxiliaryHeater> <SeparateAirDistributionDucts>false</SeparateAirDistributionDucts> <WaterElectricHeater>true</WaterElectricHeater> <AirElectricHeater>false</AirElectricHeater> <OtherHeatingTechnology>false</OtherHeatingTechnology> </HVAC> </Data> </Auxiliaries> </Components> </v2.0:Vehicle> </tns:VectoInputDeclaration> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" +xmlns:v2.3="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3" +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 E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> + <v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType"> + <Manufacturer>Some Manufacturer</Manufacturer> + <ManufacturerAddress>Some Manufacturer Address</ManufacturerAddress> + <VIN>VEH-1234567890</VIN> + <Date>2020-01-09T11:00:00Z</Date> + <Model>Sample Bus Model</Model> + <LegislativeCategory>M3</LegislativeCategory> + <CorrectedActualMass>500</CorrectedActualMass> + <TechnicalPermissibleMaximumLadenMass>3500</TechnicalPermissibleMaximumLadenMass> + <AirdragModifiedMultistage>false</AirdragModifiedMultistage> + <NgTankSystem>Compressed</NgTankSystem> + <ClassBus>II+III</ClassBus> + <NumberPassengersLowerDeck>0</NumberPassengersLowerDeck> + <NumberPassengersUpperDeck>10</NumberPassengersUpperDeck> + <BodyworkCode>CB</BodyworkCode> + <LowEntry>false</LowEntry> + <HeightIntegratedBody>2500</HeightIntegratedBody> + <VehicleLength>9500</VehicleLength> + <VehicleWidth>2500</VehicleWidth> + <EntranceHeight>2000</EntranceHeight> + <DoorDriveTechnology>electric</DoorDriveTechnology> + <VehicleDeclarationType>interim</VehicleDeclarationType> + <ADAS> + <v2.3:EngineStopStart>true</v2.3:EngineStopStart> + <v2.3:EcoRollWithoutEngineStop>false</v2.3:EcoRollWithoutEngineStop> + <v2.3:EcoRollWithEngineStop>false</v2.3:EcoRollWithEngineStop> + <v2.3:PredictiveCruiseControl>none</v2.3:PredictiveCruiseControl> + <v2.3:APTEcoRollReleaseLockupClutch>true</v2.3:APTEcoRollReleaseLockupClutch> + </ADAS> + <Components xsi:type="CompletedVehicleComponentsDeclarationType"> + <AirDrag> + <v2.0:Data xsi:type="v2.0:AirDragDataDeclarationType" id="CabinX23h"> + <v2.0:Manufacturer>Generic Manufacturer</v2.0:Manufacturer> + <v2.0:Model>Generic Model</v2.0:Model> + <v2.0:CertificationNumber>e12*0815/8051*2017/05E0000*00</v2.0:CertificationNumber> + <v2.0:Date>2017-03-24T15:00:00Z</v2.0:Date> + <v2.0:AppVersion>Vecto AirDrag x.y</v2.0:AppVersion> + <v2.0:CdxA_0>6.31</v2.0:CdxA_0> + <v2.0:TransferredCdxA>6.32</v2.0:TransferredCdxA> + <v2.0:DeclaredCdxA>6.34</v2.0:DeclaredCdxA> + </v2.0:Data> + <v2.0:Signature> + <di:Reference URI="#CabinX23h"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> + <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=</di:DigestValue> + </di:Reference> + </v2.0:Signature> + </AirDrag> + <Auxiliaries> + <Data xsi:type="CompletedVehicleAuxiliaryDataDeclarationType"> + <ElectricSystem> + <LEDLights> + <Interiorlights>false</Interiorlights> + <Dayrunninglights>true</Dayrunninglights> + <Positionlights>true</Positionlights> + <Brakelights>true</Brakelights> + <Headlights>false</Headlights> + </LEDLights> + </ElectricSystem> + <HVAC> + <SystemConfiguration>0</SystemConfiguration> + <HeatPumpTypeDriverCompartment>none</HeatPumpTypeDriverCompartment> + <HeatPumpModeDriverCompartment>heating</HeatPumpModeDriverCompartment> + <HeatPumpTypePassengerCompartment>non R-744 2-stage</HeatPumpTypePassengerCompartment> + <HeatPumpModePassengerCompartment>cooling</HeatPumpModePassengerCompartment> + <AuxiliaryHeaterPower>50</AuxiliaryHeaterPower> + <DoubleGlazing>false</DoubleGlazing> + <AdjustableAuxiliaryHeater>true</AdjustableAuxiliaryHeater> + <SeparateAirDistributionDucts>false</SeparateAirDistributionDucts> + <WaterElectricHeater>true</WaterElectricHeater> + <AirElectricHeater>false</AirElectricHeater> + <OtherHeatingTechnology>false</OtherHeatingTechnology> + </HVAC> + </Data> + </Auxiliaries> + </Components> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml index eeb7196376b99f9e9978f2775d0ea446849213ff..f1651fd3a16266d3eb48a4845629326df7a93a8b 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.8/vecto_vehicle-stage_input_only_mandatory_standard_value_airdrag.xml @@ -1 +1,33 @@ -<?xml version="1.0" encoding="UTF-8"?> <tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" 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 E:\VECTO_DEV\fk_vecto-dev\VectoCore\VectoCore\Resources\XSD/VectoDeclarationJob.xsd"> <v2.0:Vehicle id="VEH-1234567890" xsi:type="InterimStageInputType" > <Manufacturer>Some Manufacturer 3</Manufacturer> <ManufacturerAddress>Some Manufacturer Address 3</ManufacturerAddress> <VIN>VEH-1234567890</VIN> <Date>2020-01-09T11:00:00Z</Date> <VehicleDeclarationType>final</VehicleDeclarationType> <Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType"> <v2.8:AirDrag> <v2.0:Data xsi:type="v2.8:AirDragModifiedUseStandardValueType" id="std"/> <v2.0:Signature> <di:Reference URI="#std"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=</di:DigestValue> </di:Reference> </v2.0:Signature> </v2.8:AirDrag> <Auxiliaries> <Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"></Data> </Auxiliaries> </Components> </v2.0:Vehicle> </tns:VectoInputDeclaration> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8"?> +<tns:VectoInputDeclaration schemaVersion="2.8" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" +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="InterimStageInputType" > + <Manufacturer>Some Manufacturer 3</Manufacturer> + <ManufacturerAddress>Some Manufacturer Address 3</ManufacturerAddress> + <VIN>VEH-1234567890</VIN> + <Date>2020-01-09T11:00:00Z</Date> + <VehicleDeclarationType>final</VehicleDeclarationType> + <Components xmlns:v2.8="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xsi:type="v2.8:CompletedVehicleComponentsDeclarationType"> + <v2.8:AirDrag> + <v2.0:Data xsi:type="v2.8:AirDragModifiedUseStandardValueType" id="std"/> + <v2.0:Signature> + <di:Reference URI="#std"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization"/> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> + <di:DigestValue>b9SHCfOoVrBxFQ8wwDK32OO+9bd85DuaUdgs6j/29N8=</di:DigestValue> + </di:Reference> + </v2.0:Signature> + </v2.8:AirDrag> + <Auxiliaries> + <Data xsi:type="v2.8:CompletedVehicleAuxiliaryDataDeclarationType"></Data> + </Auxiliaries> + </Components> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/123sadf.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/123sadf.xml new file mode 100644 index 0000000000000000000000000000000000000000..b5ec06780cea3c086d372969fa2bc397889c25c5 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/123sadf.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<tns:VectoInputDeclaration xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationInput:v2.0" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.8" xmlns:schemaVersion="2.8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> + <v2.0:Vehicle id="TODO:ADDIDENTIFIER" xsi:type="InterimstageInputType"> + <Date>27.04.2021</Date> + <DeclarationType>interim</DeclarationType> + </v2.0:Vehicle> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/AidragComponent.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/AidragComponent.xml new file mode 100644 index 0000000000000000000000000000000000000000..9bc44b124397a660b40ff7ce3bd6f3fad43a4819 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/AidragComponent.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Sample XML file generated by XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com)--> +<v2.0:VectoInputDeclaration xmlns:di="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v2.0="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v2.0" xmlns:vdecdef2.0="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" schemaVersion="1.0" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v2.0 VectoComponent.2.0.xsd"> + <v2.0:AirDrag> + <vdecdef2.0:Data xsi:type="vdecdef2.0:AirDragDataDeclarationType" id="a"> + <vdecdef2.0:Manufacturer>a</vdecdef2.0:Manufacturer> + <vdecdef2.0:Model>a</vdecdef2.0:Model> + <vdecdef2.0:CertificationNumber>token</vdecdef2.0:CertificationNumber> + <vdecdef2.0:Date>2017-01-01T00:00:00Z</vdecdef2.0:Date> + <vdecdef2.0:AppVersion>aaaaa</vdecdef2.0:AppVersion> + <vdecdef2.0:CdxA_0>6.66</vdecdef2.0:CdxA_0> + <vdecdef2.0:TransferredCdxA>6.66</vdecdef2.0:TransferredCdxA> + <vdecdef2.0:DeclaredCdxA>6.66</vdecdef2.0:DeclaredCdxA> + </vdecdef2.0:Data> + <vdecdef2.0:Signature> + <di:Reference> + <di:DigestMethod Algorithm="http://www.altova.com/"/> + <di:DigestValue>UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi</di:DigestValue> + </di:Reference> + </vdecdef2.0:Signature> + </v2.0:AirDrag> +</v2.0:VectoInputDeclaration> diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/AirdragLoadTestFile.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/AirdragLoadTestFile.xml new file mode 100644 index 0000000000000000000000000000000000000000..3baab2fa609ec00fcb3b5095be0d7a63a5211f9d --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersionMultistage.0.1/AirdragLoadTestFile.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<tns:VectoInputDeclaration xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v1.0" xmlns:tns="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v1.0" xmlns:di="http://www.w3.org/2000/09/xmldsig#" schemaVersion="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationComponent:v1.0 https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD/VectoComponent.xsd"> + <tns:AirDrag> + <Data id="TestAirDrag1234" xsi:type="AirDragDataDeclarationType"> + <Manufacturer>Test AirDrag Manufacturer</Manufacturer> + <Model>Test AirDrag Model</Model> + <CertificationNumber>e12*0815/8051*2020/05E0000*66</CertificationNumber> + <Date>2020-04-28T09:16:15.1270795Z</Date> + <AppVersion>Vecto AirDrag Test Load</AppVersion> + <CdxA_0>6.12</CdxA_0> + <TransferredCdxA>7.12</TransferredCdxA> + <DeclaredCdxA>8.12</DeclaredCdxA> + </Data> + <Signature> + <di:Reference URI="#TestAirDrag1234"> + <di:Transforms> + <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> + <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> + </di:Transforms> + <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> + <di:DigestValue>Yd3UDJ/zKPhsmPadJeC4Ez/q7o3G82Zbq3mX3tSqLDw=</di:DigestValue> + </di:Reference> + </Signature> + </tns:AirDrag> +</tns:VectoInputDeclaration> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs index 5ffc35e5e15c241c7227ebf0a55c72eb855f995c..5d9655268bed2d3670da72b2b4e60757abf86d07 100644 --- a/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs +++ b/VectoCore/VectoCoreTest/Utils/MockDeclarationVehicleInputData.cs @@ -28,6 +28,7 @@ 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; } @@ -133,6 +134,7 @@ 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/XML/XMLMultistageBusDataTest.cs b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs index dda41de716a750821a5a717bfc4d611c5308e1ff..2e2d7352d77c68d325129097cf884af52772a7c8 100644 --- a/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLMultistageBusDataTest.cs @@ -71,6 +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("Bus", vehicleData.VehicleCategory.ToXMLFormat()); Assert.AreEqual(AxleConfiguration.AxleConfig_8x2, vehicleData.AxleConfiguration); Assert.AreEqual(true, vehicleData.Articulated); @@ -362,7 +363,8 @@ namespace TUGraz.VectoCore.Tests.XML Assert.AreEqual(15000, aux.ElectricSupply.MaxAlternatorPower.Value()); Assert.AreEqual(50.SI(Unit.SI.Watt.Hour).Cast<WattSecond>(), aux.ElectricSupply.ElectricStorageCapacity); - Assert.AreEqual("Large Supply 2-stage", aux.PneumaticSupply.CompressorSize); + Assert.AreEqual("Large Supply 2-stage", aux.PneumaticSupply.CompressorSize);//SizeOfAirSupply + Assert.AreEqual(CompressorDrive.electrically, aux.PneumaticSupply.CompressorDrive); Assert.AreEqual("none", aux.PneumaticSupply.Clutch); Assert.AreEqual(1.000, aux.PneumaticSupply.Ratio); Assert.AreEqual(true, aux.PneumaticSupply.SmartAirCompression); diff --git a/VectoCore/VectoCoreTest/bin/Debug/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_PIF.xml b/VectoCore/VectoCoreTest/bin/Debug/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_PIF.xml deleted file mode 100644 index f8583aee47343911adb25f8c6fd64833a16f1227..0000000000000000000000000000000000000000 --- a/VectoCore/VectoCoreTest/bin/Debug/TestData/Integration/Buses/FactorMethod/primary_heavyBus group41.RSLT_PIF.xml +++ /dev/null @@ -1,552 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<pif:VectoOutputPrimaryVehicle xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns:pif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD//DEV/VectoOutputPrimaryVehicleInformation.xsd"> - <pif:Data xsi:type="PrimaryVehicleHeavyBusDataType" id="PIF-4121ae4751874cefa376"> - <Vehicle xsi:type="VehiclePIFType"> - <ManufacturerPrimaryVehicle>Generic Truck Manufacturer</ManufacturerPrimaryVehicle> - <ManufacturerAddressPrimaryVehicle>Street, ZIP City</ManufacturerAddressPrimaryVehicle> - <Model>Generic Model</Model> - <VIN>VEH-1234567890_nonSmart</VIN> - <Date>2017-02-15T11:00:00Z</Date> - <VehicleCategory>Bus</VehicleCategory> - <AxleConfiguration>4x2</AxleConfiguration> - <Articulated>false</Articulated> - <TechnicalPermissibleMaximumLadenMass>28000</TechnicalPermissibleMaximumLadenMass> - <IdlingSpeed>700</IdlingSpeed> - <RetarderType>Transmission Output Retarder</RetarderType> - <RetarderRatio>1.000</RetarderRatio> - <AngledriveType>None</AngledriveType> - <ZeroEmissionVehicle>false</ZeroEmissionVehicle> - <ADAS xmlns:adas="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1" xsi:type="adas:AdvancedDriverAssistantSystemsType"> - <adas:EngineStopStart>false</adas:EngineStopStart> - <adas:EcoRollWithoutEngineStop>false</adas:EcoRollWithoutEngineStop> - <adas:EcoRollWithEngineStop>false</adas:EcoRollWithEngineStop> - <adas:PredictiveCruiseControl>none</adas:PredictiveCruiseControl> - </ADAS> - <TorqueLimits xmlns:tcl="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="tcl:TorqueLimitsType"> - <tcl:Entry gear="6" maxTorque="1800" /> - <tcl:Entry gear="1" maxTorque="2500" /> - </TorqueLimits> - <Components xsi:type="VehicleComponentsPIFType"> - <Engine> - <Data xsi:type="EngineDataPIFType"> - <Manufacturer>Generic Engine Manufacturer</Manufacturer> - <Model>Generic primary bus 41 Engine</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-02-15T11:00:00Z</Date> - <AppVersion>VectoEngine x.y</AppVersion> - <Displacement>7700</Displacement> - <RatedSpeed>2200</RatedSpeed> - <RatedPower>220000</RatedPower> - <MaxEngineTorque>1100</MaxEngineTorque> - <WHRType> - <MechanicalOutputICE xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3">false</MechanicalOutputICE> - <MechanicalOutputDrivetrain xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3">false</MechanicalOutputDrivetrain> - <ElectricalOutput xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.3">false</ElectricalOutput> - </WHRType> - <Mode> - <IdlingSpeed>700</IdlingSpeed> - <FullLoadAndDragCurve> - <Entry engineSpeed="600.00" maxTorque="546.02" dragTorque="-39.66" /> - <Entry engineSpeed="800.00" maxTorque="760.78" dragTorque="-48.83" /> - <Entry engineSpeed="1000.00" maxTorque="973.29" dragTorque="-56.44" /> - <Entry engineSpeed="1200.00" maxTorque="1092.03" dragTorque="-67.29" /> - <Entry engineSpeed="1400.00" maxTorque="1092.03" dragTorque="-77.58" /> - <Entry engineSpeed="1600.00" maxTorque="1092.03" dragTorque="-87.88" /> - <Entry engineSpeed="1800.00" maxTorque="1022.52" dragTorque="-94.11" /> - <Entry engineSpeed="2000.00" maxTorque="944.17" dragTorque="-100.76" /> - <Entry engineSpeed="2200.00" maxTorque="868.12" dragTorque="-113.36" /> - <Entry engineSpeed="2400.00" maxTorque="741.99" dragTorque="-122.60" /> - <Entry engineSpeed="2500.00" maxTorque="647.29" dragTorque="-126.66" /> - <Entry engineSpeed="2600.00" maxTorque="0.00" dragTorque="-132.07" /> - </FullLoadAndDragCurve> - <Fuels> - <FuelType>Diesel CI</FuelType> - </Fuels> - </Mode> - </Data> - </Engine> - <Transmission> - <Data xsi:type="TransmissionDataPIFType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>AT 6 Gear</Model> - <MainCertificationMethod>Standard values</MainCertificationMethod> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <TransmissionType>APT-S</TransmissionType> - <Gears xsi:type="TransmissionGearsPIFType"> - <Gear number="1"> - <Ratio>3.364</Ratio> - <MaxTorque>1900</MaxTorque> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="2"> - <Ratio>1.909</Ratio> - <MaxTorque>1900</MaxTorque> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="3"> - <Ratio>1.421</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="4"> - <Ratio>1.000</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="5"> - <Ratio>0.720</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - <Gear number="6"> - <Ratio>0.615</Ratio> - <MaxSpeed>2500</MaxSpeed> - </Gear> - </Gears> - </Data> - </Transmission> - <Axlegear> - <Data xsi:type="AxlegearDataPIFType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic primary bus 41 AxleGear</Model> - <CertificationMethod>Standard values</CertificationMethod> - <Date>2017-01-11T11:00:00Z</Date> - <AppVersion>3.0.1</AppVersion> - <LineType>Single portal axle</LineType> - <Ratio>6.500</Ratio> - </Data> - </Axlegear> - <pbus:AxleWheels xmlns:pbus="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="AxleWheelsComponentDeclarationType"> - <Data xsi:type="AxleWheelsDataDeclarationType"> - <Axles> - <Axle axleNumber="1" xsi:type="AxleDataDeclarationType"> - <AxleType>VehicleNonDriven</AxleType> - <TwinTyres>false</TwinTyres> - <Steered>true</Steered> - <Tyre> - <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> - <Manufacturer>Generic Wheels Manufacturer</Manufacturer> - <Model>Generic Wheel</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T14:00:00Z</Date> - <AppVersion>Tyre Generation App 1.0</AppVersion> - <Dimension>315/70 R22.5</Dimension> - <RRCDeclared>0.0055</RRCDeclared> - <FzISO>31300</FzISO> - </Data> - <Signature> - <di:Reference URI="#WHL-5432198760-315-70-R22.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>4TkUGQTX8tevHOU9Cj9uyCFuI/aqcEYlo/gyVjVQmv0=</di:DigestValue> - </di:Reference> - </Signature> - </Tyre> - </Axle> - <Axle axleNumber="2" xsi:type="AxleDataDeclarationType"> - <AxleType>VehicleDriven</AxleType> - <TwinTyres>true</TwinTyres> - <Steered>false</Steered> - <Tyre> - <Data id="WHL-5432198760-315-70-R22.5" xsi:type="TyreDataDeclarationType"> - <Manufacturer>Generic Wheels Manufacturer</Manufacturer> - <Model>Generic Wheel</Model> - <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> - <Date>2017-01-11T14:00:00Z</Date> - <AppVersion>Tyre Generation App 1.0</AppVersion> - <Dimension>315/70 R22.5</Dimension> - <RRCDeclared>0.0063</RRCDeclared> - <FzISO>31300</FzISO> - </Data> - <Signature> - <di:Reference URI="#WHL-5432198760-315-70-R22.5" xmlns:di="http://www.w3.org/2000/09/xmldsig#"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>KljvtvGUUQ/L7MiLVAqU+bckL5PNDNNwdeLH9kUVrfM=</di:DigestValue> - </di:Reference> - </Signature> - </Tyre> - </Axle> - </Axles> - </Data> - </pbus:AxleWheels> - <Auxiliaries> - <Data xmlns:aux="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6" xsi:type="aux:PrimaryVehicleAuxiliaryDataDeclarationType"> - <aux:Fan> - <aux:Technology>Hydraulic driven - Constant displacement pump</aux:Technology> - </aux:Fan> - <aux:SteeringPump> - <aux:Technology axleNumber="1">Variable displacement elec. controlled</aux:Technology> - </aux:SteeringPump> - <aux:ElectricSystem> - <aux:AlternatorTechnology>default</aux:AlternatorTechnology> - <aux:SmartElectrics>false</aux:SmartElectrics> - </aux:ElectricSystem> - <aux:PneumaticSystem> - <aux:SizeOfAirSupply>Large Supply 2-stage</aux:SizeOfAirSupply> - <aux:Clutch>none</aux:Clutch> - <aux:CompressorRatio>1.000</aux:CompressorRatio> - <aux:SmartCompressionSystem>false</aux:SmartCompressionSystem> - <aux:SmartRegenerationSystem>false</aux:SmartRegenerationSystem> - <aux:AirsuspensionControl>electronically</aux:AirsuspensionControl> - <aux:AdBlueDosing>true</aux:AdBlueDosing> - </aux:PneumaticSystem> - <aux:HVAC> - <aux:AdjustableCoolantThermostat>true</aux:AdjustableCoolantThermostat> - <aux:EngineWasteGasHeatExchanger>true</aux:EngineWasteGasHeatExchanger> - </aux:HVAC> - </Data> - </Auxiliaries> - </Components> - </Vehicle> - <InputDataSignature> - <di:Reference URI="#VEH-PrimaryBus_nonSmart"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>gi7smqIT9b/iNr6yBm49IkS5ylirBLyHvjZQqlNpzUA=</di:DigestValue> - </di:Reference> - </InputDataSignature> - <ManufacturerRecordSignature> - <di:Reference URI="#RESULT-d5c4bf1b86394fd7b822"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>/z2B3MvXZr1k8vYmINK/6DLaXPreBcwwmHhHsfDvJRo=</di:DigestValue> - </di:Reference> - </ManufacturerRecordSignature> - <Results> - <Status>success</Status> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13098.63</TotalVehicleMass> - <Payload unit="kg">1123.63</Payload> - <PassengerCount>16.52</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">20.73851</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1520.18</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17593.16</TotalVehicleMass> - <Payload unit="kg">5618.16</Payload> - <PassengerCount>82.62</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">24.94611</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1828.60</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13098.63</TotalVehicleMass> - <Payload unit="kg">1123.63</Payload> - <PassengerCount>16.52</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">16.93598</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1241.44</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17593.16</TotalVehicleMass> - <Payload unit="kg">5618.16</Payload> - <PassengerCount>82.62</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">20.36950</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1493.13</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13098.63</TotalVehicleMass> - <Payload unit="kg">1123.63</Payload> - <PassengerCount>16.52</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">15.03487</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1102.09</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17593.16</TotalVehicleMass> - <Payload unit="kg">5618.16</Payload> - <PassengerCount>82.62</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">18.14589</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1330.13</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">12854.90</TotalVehicleMass> - <Payload unit="kg">879.90</Payload> - <PassengerCount>12.39</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">12.90679</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">946.09</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">15494.61</TotalVehicleMass> - <Payload unit="kg">3519.61</Payload> - <PassengerCount>49.57</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">14.34621</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1051.61</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13543.34</TotalVehicleMass> - <Payload unit="kg">1193.34</Payload> - <PassengerCount>17.55</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">21.81903</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1599.38</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Heavy Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">18316.69</TotalVehicleMass> - <Payload unit="kg">5966.69</Payload> - <PassengerCount>87.75</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">26.59833</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1949.71</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13543.34</TotalVehicleMass> - <Payload unit="kg">1193.34</Payload> - <PassengerCount>17.55</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">17.82311</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1306.47</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Urban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">18316.69</TotalVehicleMass> - <Payload unit="kg">5966.69</Payload> - <PassengerCount>87.75</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">21.69768</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1590.49</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">13543.34</TotalVehicleMass> - <Payload unit="kg">1193.34</Payload> - <PassengerCount>17.55</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">15.74932</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1154.46</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P31DD</VehicleGroup> - <Mission>Suburban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">18316.69</TotalVehicleMass> - <Payload unit="kg">5966.69</Payload> - <PassengerCount>87.75</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">19.17775</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1405.77</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14225.44</TotalVehicleMass> - <Payload unit="kg">1075.44</Payload> - <PassengerCount>15.15</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">13.19757</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">967.41</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">16669.61</TotalVehicleMass> - <Payload unit="kg">3519.61</Payload> - <PassengerCount>49.57</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">14.54412</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1066.11</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14244.99</TotalVehicleMass> - <Payload unit="kg">1094.99</Payload> - <PassengerCount>15.42</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.13867</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">816.49</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32SD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">15887.48</TotalVehicleMass> - <Payload unit="kg">2737.48</Payload> - <PassengerCount>38.56</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.58643</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">849.31</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14662.82</TotalVehicleMass> - <Payload unit="kg">1262.82</Payload> - <PassengerCount>17.79</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">13.62230</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">998.54</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Interurban</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">17609.41</TotalVehicleMass> - <Payload unit="kg">4209.41</Payload> - <PassengerCount>59.29</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">15.22020</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">1115.67</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">14747.01</TotalVehicleMass> - <Payload unit="kg">1347.01</Payload> - <PassengerCount>18.97</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.61807</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">851.63</CO2> - </Result> - <Result status="success"> - <VehicleGroup>P32DD</VehicleGroup> - <Mission>Coach</Mission> - <SimulationParameters> - <TotalVehicleMass unit="kg">16767.53</TotalVehicleMass> - <Payload unit="kg">3367.53</Payload> - <PassengerCount>47.43</PassengerCount> - <FuelMode>single fuel mode</FuelMode> - </SimulationParameters> - <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">12.15012</EnergyConsumption> - </Fuel> - <CO2 unit="g/km">890.63</CO2> - </Result> - </Results> - <ApplicationInformation> - <SimulationToolVersion>0.6.1.1975-DEV !!NOT FOR CERTIFICATION!!</SimulationToolVersion> - <Date>2020-08-06T06:54:52.9756421Z</Date> - </ApplicationInformation> - </pif:Data> - <pif:Signature> - <di:Reference URI="#PIF-4121ae4751874cefa376"> - <di:Transforms> - <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> - <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> - </di:Transforms> - <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>YnCPep7uMh3ghMrx6ZsEMLanOijFCZpku+ZDNd6rkLw=</di:DigestValue> - </di:Reference> - </pif:Signature> -</pif:VectoOutputPrimaryVehicle> \ No newline at end of file