Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit c4e40c55 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

adding info in statusbar

adding syles for message list
adding logging for nlog events to message list
parent f1291ae5
No related branches found
No related tags found
No related merge requests found
......@@ -73,7 +73,10 @@
<Grid Grid.Row="2">
<StatusBar/>
<StatusBar >
<StatusBarItem><TextBlock Text="{Binding CurrentViewModel.Status}"/></StatusBarItem>
<StatusBarItem HorizontalAlignment="Right"><ProgressBar Width="150" Height="20" Value="{Binding CurrentViewModel.Progress}"></ProgressBar></StatusBarItem>
</StatusBar>
</Grid>
......
......@@ -138,10 +138,18 @@
<HintPath>..\packages\Ninject.Extensions.Factory.3.3.2\lib\net45\Ninject.Extensions.Factory.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.5.11\lib\net45\NLog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Transactions" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll</HintPath>
......
......@@ -6,6 +6,7 @@ using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Threading;
using System.Windows;
......@@ -15,6 +16,8 @@ using System.Xml;
using System.Xml.Linq;
using Castle.Core.Internal;
using Ninject;
using NLog;
using NLog.Targets;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Resources;
......@@ -31,6 +34,7 @@ using VECTO3GUI.ViewModel.Interfaces;
using VECTO3GUI.Helper;
using VECTO3GUI.Model;
using VECTO3GUI.Views;
using LogManager = TUGraz.VectoCommon.Models.LogManager;
using MessageBox = System.Windows.MessageBox;
......@@ -67,6 +71,11 @@ namespace VECTO3GUI.ViewModel.Impl
private ICommand _doubleClickCommand;
private ICommand _runSimulationCommand;
private BackgroundWorker SimulationWorker;
private string _status;
private double _progress;
private ICommand _stopSimulationCommand;
private bool _canRunSimulation = true;
private bool _canStopSimulation = false;
#endregion
......@@ -114,6 +123,18 @@ namespace VECTO3GUI.ViewModel.Impl
set { SetProperty(ref _visibilitySecView, value); }
}
public string Status
{
get { return _status; }
set { SetProperty(ref _status, value); }
}
public double Progress
{
get { return _progress; }
set { SetProperty(ref _progress, value); }
}
#endregion
......@@ -129,6 +150,32 @@ namespace VECTO3GUI.ViewModel.Impl
SimulationWorker.WorkerReportsProgress = true;
SimulationWorker.WorkerSupportsCancellation = true;
var target = new MethodCallTarget("VectoGuiTarget", (evtInfo, obj) => LogMethod(evtInfo, obj));
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target);
}
private void LogMethod(LogEventInfo evtInfo, object[] objects)
{
if (!SimulationWorker.IsBusy || SimulationWorker.CancellationPending) {
return;
}
//if (evtInfo.Level == LogLevel.Warn) {
// SimulationWorker.ReportProgress(
// 0,
// new VectoSimulationProgress() {
// Type = VectoSimulationProgress.MsgType.LogWarning,
// Message = evtInfo.FormattedMessage
// });
//} else
if (evtInfo.Level == LogLevel.Error || evtInfo.Level == LogLevel.Fatal) {
SimulationWorker.ReportProgress(
0,
new VectoSimulationProgress() {
Type = VectoSimulationProgress.MsgType.LogError,
Message = evtInfo.FormattedMessage
});
}
}
private void SetJobEntries()
......@@ -167,7 +214,26 @@ namespace VECTO3GUI.ViewModel.Impl
public ICommand RunSimulation
{
get { return _runSimulationCommand ?? (_runSimulationCommand = new RelayCommand(DoRunSimulation, CanRunSimulation)); }
get { return _runSimulationCommand ?? (_runSimulationCommand = new RelayCommand(DoRunSimulation, CanRunSimulationCmd)); }
}
public ICommand StopSimulation
{
get {
return _stopSimulationCommand ?? (_stopSimulationCommand = new RelayCommand(DoStopSimulation, CanStopSimulationCmd));
}
}
public bool CanRunSimulation
{
get { return _canRunSimulation; }
set { SetProperty(ref _canRunSimulation, value); }
}
public bool CanStopSimulation
{
get { return _canStopSimulation; }
set { SetProperty(ref _canStopSimulation, value); }
}
public ICommand DoubleClickCommand
......@@ -633,7 +699,7 @@ namespace VECTO3GUI.ViewModel.Impl
#region RunVECTOSimulation
private bool CanRunSimulation()
private bool CanRunSimulationCmd()
{
return !SimulationWorker.IsBusy;
}
......@@ -647,6 +713,18 @@ namespace VECTO3GUI.ViewModel.Impl
}
}
private bool CanStopSimulationCmd()
{
return SimulationWorker.IsBusy;
}
private void DoStopSimulation()
{
SimulationWorker.CancelAsync();
}
private void RunVectoSimulation(object theSender, DoWorkEventArgs e)
{
var sender = theSender as BackgroundWorker;
......@@ -654,9 +732,12 @@ namespace VECTO3GUI.ViewModel.Impl
return;
}
CanRunSimulation = false;
CanStopSimulation = true;
var jobs = Jobs.Where(x => x.Selected).ToArray();
if (jobs.Length == 0) {
sender.ReportProgress(100, new VectoSimulationProgress() {Target = VectoSimulationProgress.Targets.Message, Message = "No jobs selected for simulation"});
sender.ReportProgress(100, new VectoSimulationProgress() {Type = VectoSimulationProgress.MsgType.StatusMessage, Message = "No jobs selected for simulation"});
return;
}
var sumFileWriter = new FileOutputWriter(Path.GetDirectoryName(jobs.First().JobEntryFilePath));
......@@ -678,7 +759,7 @@ namespace VECTO3GUI.ViewModel.Impl
if (!File.Exists(fullFileName)) {
sender.ReportProgress(
0, new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message =
$"File {jobEntry.JobEntryFilePath} not found!"
});
......@@ -688,7 +769,7 @@ namespace VECTO3GUI.ViewModel.Impl
sender.ReportProgress(
0,
new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = $"Reading file {Path.GetFileName(fullFileName)}"
});
var extension = Path.GetExtension(jobEntry.JobEntryFilePath);
......@@ -717,7 +798,7 @@ namespace VECTO3GUI.ViewModel.Impl
sender.ReportProgress(
0,
new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = $"No input provider for job {Path.GetFileName(fullFileName)}"
});
continue;
......@@ -732,22 +813,22 @@ namespace VECTO3GUI.ViewModel.Impl
sender.ReportProgress(
0,
new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = $"Finished reading data for job {Path.GetFileName(fullFileName)}"
});
} catch (Exception ex) {
MessageBox.Show(
$"ERROR running job {Path.GetFileName(jobEntry.JobEntryFilePath)}: {ex.Message}", "Error", MessageBoxButton.OK,
MessageBoxImage.Exclamation);
sender.ReportProgress(0, new VectoSimulationProgress() {Target = VectoSimulationProgress.Targets.Message, Message = ex.Message});
sender.ReportProgress(0, new VectoSimulationProgress() {Type = VectoSimulationProgress.MsgType.StatusMessage, Message = ex.Message});
}
}
foreach (var cycle in jobContainer.GetCycleTypes()) {
sender.ReportProgress(0, new VectoSimulationProgress() {Target = VectoSimulationProgress.Targets.Message, Message = $"Detected cycle {cycle.Name}: {cycle.CycleType}"});
sender.ReportProgress(0, new VectoSimulationProgress() {Type = VectoSimulationProgress.MsgType.StatusMessage, Message = $"Detected cycle {cycle.Name}: {cycle.CycleType}"});
}
sender.ReportProgress(0, new VectoSimulationProgress() {Target = VectoSimulationProgress.Targets.Message, Message = $"Starting simulation ({jobs.Length} jobs, {jobContainer.GetProgress().Count} runs)"});
sender.ReportProgress(0, new VectoSimulationProgress() {Type = VectoSimulationProgress.MsgType.StatusMessage, Message = $"Starting simulation ({jobs.Length} jobs, {jobContainer.GetProgress().Count} runs)"});
var start = Stopwatch.StartNew();
......@@ -765,7 +846,7 @@ namespace VECTO3GUI.ViewModel.Impl
sender.ReportProgress(
Convert.ToInt32(sumProgress * 100.0 / progress.Count), new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Status,
Type = VectoSimulationProgress.MsgType.Progress,
Message = string.Format(
"Duration: {0:F1}s, Curernt Progress: {1:P} ({2})", duration, sumProgress / progress.Count,
string.Join(", ", progress.Select(x => string.Format("{0,4:P}", x.Value.Progress))))
......@@ -787,7 +868,7 @@ namespace VECTO3GUI.ViewModel.Impl
foreach (var progressEntry in jobContainer.GetProgress()) {
sender.ReportProgress(100, new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message, Message =
Type = VectoSimulationProgress.MsgType.StatusMessage, Message =
string.Format("{0,-60} {1,8:P} {2,10:F2}s - {3}",
$"{progressEntry.Value.RunName} {progressEntry.Value.CycleName} {progressEntry.Value.RunSuffix}",
progressEntry.Value.Progress,
......@@ -798,7 +879,7 @@ namespace VECTO3GUI.ViewModel.Impl
sender.ReportProgress(
100,
new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = progressEntry.Value.Error.Message
}
);
......@@ -812,7 +893,7 @@ namespace VECTO3GUI.ViewModel.Impl
sender.ReportProgress(
100,
new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = string.Format(
"{2} for '{0}' written to {1}", Path.GetFileName(jobEntry.JobEntryFilePath), entry.Key, entry.Value),
Link = "<XML>" + entry.Key
......@@ -823,14 +904,14 @@ namespace VECTO3GUI.ViewModel.Impl
if (File.Exists(sumFileWriter.SumFileName)) {
sender.ReportProgress(100, new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = string.Format("Sum file written to {0}", sumFileWriter.SumFileName),
Link = "<CSV>" + sumFileWriter.SumFileName
});
}
sender.ReportProgress(100, new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = string.Format("Simulation finished in {0:F1}s", start.Elapsed.TotalSeconds)
});
}
......@@ -843,20 +924,20 @@ namespace VECTO3GUI.ViewModel.Impl
if (p.Value.Error != null) {
SimulationWorker.ReportProgress(0, new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = string.Format("Finished Run {0} with ERROR: {1}", runName,
p.Value.Error.Message),
Link = "<CSV>" + modFilename
});
} else {
SimulationWorker.ReportProgress(0, new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = string.Format("Finished run {0} successfully.", runName)
});
}
if (File.Exists(modFilename)) {
SimulationWorker.ReportProgress(0, new VectoSimulationProgress() {
Target = VectoSimulationProgress.Targets.Message,
Type = VectoSimulationProgress.MsgType.StatusMessage,
Message = string.Format("Run {0}: Modal results written to {1}", runName, modFilename),
Link = "<CSV>" + modFilename
});
......@@ -867,7 +948,10 @@ namespace VECTO3GUI.ViewModel.Impl
private void VectoSimulationCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// TODO!
Progress = 0;
Status = "";
CanRunSimulation = true;
CanStopSimulation = false;
}
private void VectoSimulationProgressChanged(object sender, ProgressChangedEventArgs e)
......@@ -877,13 +961,21 @@ namespace VECTO3GUI.ViewModel.Impl
return;
}
switch (progress.Target) {
case VectoSimulationProgress.Targets.Message:
switch (progress.Type) {
case VectoSimulationProgress.MsgType.LogError:
case VectoSimulationProgress.MsgType.LogWarning:
case VectoSimulationProgress.MsgType.InfoMessage:
case VectoSimulationProgress.MsgType.StatusMessage: {
//if (progress.Link == null) {
Messages.Add(new MessageEntry() {Message = progress.Message});
Messages.Add(new MessageEntry() { Message = progress.Message, Type = progress.Type.ToMessageType() });
//}
break;
case VectoSimulationProgress.Targets.Status: break;
}
case VectoSimulationProgress.MsgType.Progress:
Progress = e.ProgressPercentage;
Status = progress.Message;
break;
default: throw new ArgumentOutOfRangeException();
}
}
......@@ -891,23 +983,40 @@ namespace VECTO3GUI.ViewModel.Impl
public class VectoSimulationProgress
{
public enum Targets
public enum MsgType
{
Message,
Status
StatusMessage,
InfoMessage,
Progress,
LogError,
LogWarning,
}
public string Message { get; set; }
public Targets Target { get; set; }
public MsgType Type { get; set; }
public string Link { get; set; }
}
#endregion
}
public static class MsgTypeExtensions
{
public static MessageType ToMessageType(this JoblistViewModel.VectoSimulationProgress.MsgType mt)
{
switch (mt) {
case JoblistViewModel.VectoSimulationProgress.MsgType.StatusMessage: return MessageType.StatusMessage;
case JoblistViewModel.VectoSimulationProgress.MsgType.InfoMessage: return MessageType.InfoMessage;
case JoblistViewModel.VectoSimulationProgress.MsgType.Progress: return MessageType.StatusMessage;
case JoblistViewModel.VectoSimulationProgress.MsgType.LogError: return MessageType.ErrorMessage;
case JoblistViewModel.VectoSimulationProgress.MsgType.LogWarning: return MessageType.WarningMessage;
default: throw new ArgumentOutOfRangeException(nameof(mt), mt, null);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace VECTO3GUI.ViewModel.Impl
{
public enum MessageType
{
InfoMessage,
StatusMessage,
ErrorMessage,
WarningMessage,
}
public class MessageEntry : ObservableObject
{
private string _message;
private DateTime _time;
private string _source;
private MessageType _type;
public string Message
{
......@@ -18,6 +31,12 @@ namespace VECTO3GUI.ViewModel.Impl
set { SetProperty(ref _message, value); }
}
public MessageType Type
{
get { return _type; }
set { SetProperty(ref _type, value); }
}
public DateTime Time
{
get { return _time; }
......
......@@ -25,5 +25,8 @@ namespace VECTO3GUI.ViewModel.Interfaces
ICommand OpenInFolder { get; }
ICommand DoubleClickCommand { get; }
ICommand RunSimulation { get; }
ICommand StopSimulation { get; }
bool CanRunSimulation { get; }
bool CanStopSimulation { get; }
}
}
......@@ -8,6 +8,7 @@
xmlns:views="clr-namespace:VECTO3GUI.Views"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:converter="clr-namespace:VECTO3GUI.Helper.Converter"
xmlns:vecto3Gui="clr-namespace:VECTO3GUI"
mc:Ignorable="d"
d:DesignHeight="400" d:DesignWidth="600"
d:DataContext="{d:DesignInstance Type=impl:JoblistViewModel, IsDesignTimeCreatable=False}">
......@@ -34,10 +35,17 @@
<StackPanel Orientation="Vertical">
<Button VerticalAlignment="Top" Margin="10,10,0,0"
Command="{Binding RunSimulation}">
Command="{Binding RunSimulation}" Visibility="{Binding CanRunSimulation, Converter={converter:BoolVisibilityConverter}}">
<StackPanel Orientation="Horizontal">
<iconPacks:PackIconModern Width="20" Height="15" Kind="ControlPlay" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Green"/>
<TextBlock Text="Start " />
<TextBlock Text="Start" Margin="5,0,0,0" />
</StackPanel>
</Button>
<Button VerticalAlignment="Top" Margin="10,10,0,0"
Command="{Binding StopSimulation}" Visibility="{Binding CanStopSimulation, Converter={converter:BoolVisibilityConverter}}">
<StackPanel Orientation="Horizontal">
<iconPacks:PackIconModern Width="20" Height="15" Kind="ControlStop" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red"/>
<TextBlock Text="Stop" Margin="5,0,0,0" />
</StackPanel>
</Button>
......@@ -165,14 +173,52 @@
<Grid Grid.Row="2" Grid.ColumnSpan="3" Grid.Column="0" Margin="10,20,20,10">
<DataGrid ItemsSource="{Binding Messages}" BorderThickness="1" CanUserAddRows="False" AutoGenerateColumns="False" SelectionUnit="FullRow"
IsReadOnly="True" HeadersVisibility="All" RowHeaderWidth="5">
IsReadOnly="True" HeadersVisibility="All" RowHeaderWidth="5" RowHeight="5" Name="MessageList">
<DataGrid.Columns>
<DataGridTextColumn Header="Message" Binding="{Binding Message}" Width="*" />
<DataGridTextColumn Header="Time" Binding="{Binding Time}" Width="130" />
<DataGridTextColumn Header="Source" Binding="{Binding Source}" Width="150" />
<!--<DataGridTextColumn Header="Time" Binding="{Binding Time}" Width="130" />-->
<!--<DataGridTextColumn Header="Source" Binding="{Binding Source}" Width="150" />-->
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.StatusMessage}">
<Setter Property="Background" Value="AliceBlue"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.InfoMessage}">
<Setter Property="Background" Value="LemonChiffon"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.ErrorMessage}">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.WarningMessage}">
<Setter Property="Background" Value="Gold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="FontFamily" Value="Courier New"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.StatusMessage}">
<Setter Property="Foreground" Value="Black"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.InfoMessage}">
<Setter Property="Foreground" Value="DimGray"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.ErrorMessage}">
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="{x:Static impl:MessageType.WarningMessage}">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
</Grid>
......
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
......@@ -27,6 +28,16 @@ namespace VECTO3GUI.Views
public JoblistView()
{
InitializeComponent();
((INotifyCollectionChanged)MessageList.Items).CollectionChanged += AutoScroll;
}
private void AutoScroll(object sender, NotifyCollectionChangedEventArgs e)
{
if (MessageList.Items.Count > 0) {
var border = VisualTreeHelper.GetChild(MessageList, 0) as Decorator;
var scroll = border?.Child as ScrollViewer;
scroll?.ScrollToEnd();
}
}
}
}
......@@ -8,6 +8,7 @@
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net452" />
<package id="Ninject" version="3.3.4" targetFramework="net452" />
<package id="Ninject.Extensions.Factory" version="3.3.2" targetFramework="net452" />
<package id="NLog" version="4.5.11" targetFramework="net452" />
<package id="System.Windows.Interactivity.WPF" version="2.0.20525" targetFramework="net452" />
<package id="WindowsAPICodePack-Core" version="1.1.2" targetFramework="net452" />
<package id="WindowsAPICodePack-Shell" version="1.1.1" targetFramework="net452" />
......
......@@ -89,12 +89,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
get { return _sourceFile; }
}
public bool SavedInDeclarationMode
public virtual bool SavedInDeclarationMode
{
get { return Body.GetEx(JsonKeys.SavedInDeclMode).Value<bool>(); }
}
public string AppVersion { get { return "VECTO-JSON"; } }
public virtual string AppVersion { get { return "VECTO-JSON"; } }
internal string BasePath
{
......@@ -1098,6 +1098,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
}
#region Overrides of JSONFile
public override bool SavedInDeclarationMode { get { return true; } }
#endregion
#region Implementation of ISingleBusInputDataProvider
public IVehicleDeclarationInputData PrimaryVehicle { get; }
......@@ -1153,6 +1159,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
// return ;
//}
#region Overrides of JSONFile
public override bool SavedInDeclarationMode { get { return true; } }
#endregion
#region Implementation of IDeclarationInputDataProvider
public IDeclarationJobInputData JobInputData { get { return this; } }
......
......@@ -205,7 +205,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
var fcCurRes = fuel.ConsumptionMap.GetFuelConsumption(tqCurrent, engineSpeed, true);
if (fcCurRes.Extrapolated) {
Log.Warn(
"EffShift Strategy: Extrapolation of fuel consumption for current gear!n: {1}, Tq: {2}",
"EffShift Strategy: Extrapolation of fuel consumption for current gear!n: {0}, Tq: {1}",
engineSpeed, tqCurrent);
}
fcCurrent += fcCurRes.Value.Value() * fuel.FuelData.LowerHeatingValueVecto.Value();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment