|
|
|
@ -30,7 +30,7 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
private void ApplyCommonAxisSettings(Axis axis, string title, AxisPosition position)
|
|
|
|
private void ApplyCommonAxisSettings(Axis axis, string title, AxisPosition position)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
axis.Position = position;
|
|
|
|
axis.Position = position;
|
|
|
|
axis.Title = title;
|
|
|
|
if (!string.IsNullOrEmpty(title)) axis.Title = title;
|
|
|
|
axis.TitleFontSize = 14;
|
|
|
|
axis.TitleFontSize = 14;
|
|
|
|
axis.FontSize = 12;
|
|
|
|
axis.FontSize = 12;
|
|
|
|
axis.MajorGridlineStyle = LineStyle.Solid;
|
|
|
|
axis.MajorGridlineStyle = LineStyle.Solid;
|
|
|
|
@ -150,20 +150,19 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
Model.Axes.Clear();
|
|
|
|
Model.Axes.Clear();
|
|
|
|
var xAxis = new DateTimeAxis
|
|
|
|
var xAxis = new DateTimeAxis
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
|
|
|
|
Title = "시간",
|
|
|
|
|
|
|
|
StringFormat = "HH:mm:ss",
|
|
|
|
StringFormat = "HH:mm:ss",
|
|
|
|
IntervalType = DateTimeIntervalType.Minutes,
|
|
|
|
IntervalType = DateTimeIntervalType.Minutes,
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
|
|
|
|
MinorGridlineStyle = LineStyle.Dot,
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
ApplyCommonAxisSettings(xAxis, "시간", AxisPosition.Bottom);
|
|
|
|
|
|
|
|
|
|
|
|
var yAxis = new LinearAxis
|
|
|
|
var yAxis = new LinearAxis
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Position = AxisPosition.Left,
|
|
|
|
|
|
|
|
Title = dataType == DataType.Energy ? "전력 (kW)" : "온실가스 (tCO₂)",
|
|
|
|
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
string yTitle = dataType == DataType.Energy ? "전력 (kW)" : "온실가스 (tCO₂)";
|
|
|
|
|
|
|
|
ApplyCommonAxisSettings(yAxis, yTitle, AxisPosition.Left);
|
|
|
|
|
|
|
|
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
|
|
|
|
|
|
|
|
@ -221,27 +220,14 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
Axis xAxis = xIsTime
|
|
|
|
Axis xAxis = xIsTime
|
|
|
|
? new DateTimeAxis
|
|
|
|
? new DateTimeAxis
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
|
|
|
|
Title = xField.Display,
|
|
|
|
|
|
|
|
StringFormat = "HH:mm:ss",
|
|
|
|
StringFormat = "HH:mm:ss",
|
|
|
|
IntervalType = DateTimeIntervalType.Minutes,
|
|
|
|
IntervalType = DateTimeIntervalType.Minutes,
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
: new LinearAxis
|
|
|
|
: new LinearAxis();
|
|
|
|
{
|
|
|
|
ApplyCommonAxisSettings(xAxis, xField.Display, AxisPosition.Bottom);
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
|
|
|
|
Title = xField.Display,
|
|
|
|
var yAxis = new LinearAxis();
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
ApplyCommonAxisSettings(yAxis, yField.Display, AxisPosition.Left);
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
var yAxis = new LinearAxis
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Position = AxisPosition.Left,
|
|
|
|
|
|
|
|
Title = yField!.Display,
|
|
|
|
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
@ -315,18 +301,15 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
// 축
|
|
|
|
// 축
|
|
|
|
var xAxis = new CategoryAxis
|
|
|
|
var xAxis = new CategoryAxis
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
|
|
|
|
GapWidth = 0.3,
|
|
|
|
GapWidth = 0.3,
|
|
|
|
IsPanEnabled = false,
|
|
|
|
IsPanEnabled = false,
|
|
|
|
IsZoomEnabled = false
|
|
|
|
IsZoomEnabled = false
|
|
|
|
};
|
|
|
|
};
|
|
|
|
var yAxis = new LinearAxis
|
|
|
|
ApplyCommonAxisSettings(xAxis, string.Empty, AxisPosition.Bottom);
|
|
|
|
{
|
|
|
|
|
|
|
|
Position = AxisPosition.Left,
|
|
|
|
var yAxis = new LinearAxis();
|
|
|
|
Title = valueField.Name,
|
|
|
|
ApplyCommonAxisSettings(yAxis, valueField.Name, AxisPosition.Left);
|
|
|
|
MinorGridlineStyle = LineStyle.Dot,
|
|
|
|
|
|
|
|
MajorGridlineStyle = LineStyle.Solid
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
|
|
|
|
|
|
|
|
@ -418,24 +401,15 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
bool xIsTime = string.Equals(xAxisField.Name, "RecordedTime", StringComparison.OrdinalIgnoreCase);
|
|
|
|
bool xIsTime = string.Equals(xAxisField.Name, "RecordedTime", StringComparison.OrdinalIgnoreCase);
|
|
|
|
|
|
|
|
|
|
|
|
Axis xAxis = xIsTime
|
|
|
|
Axis xAxis = xIsTime
|
|
|
|
? new DateTimeAxis
|
|
|
|
? new DateTimeAxis
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
StringFormat = "MM-dd\nHH:mm"
|
|
|
|
Title = xAxisField.Display,
|
|
|
|
|
|
|
|
StringFormat = "MM-dd\nHH:mm"
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
: new LinearAxis
|
|
|
|
: new LinearAxis();
|
|
|
|
{
|
|
|
|
ApplyCommonAxisSettings(xAxis, xAxisField.Display, AxisPosition.Bottom);
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
|
|
|
|
Title = xAxisField.Display,
|
|
|
|
var yAxis = new LinearAxis();
|
|
|
|
};
|
|
|
|
ApplyCommonAxisSettings(yAxis, yAxisField.Display, AxisPosition.Left);
|
|
|
|
var yAxis = new LinearAxis
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Position = AxisPosition.Left,
|
|
|
|
|
|
|
|
Title = yAxisField.Display,
|
|
|
|
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
@ -552,7 +526,8 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
Title = "시간",
|
|
|
|
Title = "시간",
|
|
|
|
GapWidth = 0.2,
|
|
|
|
GapWidth = 0.2,
|
|
|
|
Angle = 45
|
|
|
|
Angle = 45,
|
|
|
|
|
|
|
|
TickStyle = TickStyle.None
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var r in rows)
|
|
|
|
foreach (var r in rows)
|
|
|
|
@ -564,7 +539,8 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
Model.Axes.Add(new LinearAxis
|
|
|
|
Model.Axes.Add(new LinearAxis
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Position = AxisPosition.Left,
|
|
|
|
Position = AxisPosition.Left,
|
|
|
|
Title = "값"
|
|
|
|
Title = "값",
|
|
|
|
|
|
|
|
TickStyle = TickStyle.None
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var field in yAxisFields)
|
|
|
|
foreach (var field in yAxisFields)
|
|
|
|
@ -677,21 +653,15 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
// X축: 시간
|
|
|
|
// X축: 시간
|
|
|
|
var xAxis = new DateTimeAxis
|
|
|
|
var xAxis = new DateTimeAxis
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Position = AxisPosition.Bottom,
|
|
|
|
|
|
|
|
Title = "시간",
|
|
|
|
|
|
|
|
StringFormat = "HH:mm:ss",
|
|
|
|
StringFormat = "HH:mm:ss",
|
|
|
|
IntervalType = DateTimeIntervalType.Minutes,
|
|
|
|
IntervalType = DateTimeIntervalType.Minutes,
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
ApplyCommonAxisSettings(xAxis, "시간", AxisPosition.Bottom);
|
|
|
|
|
|
|
|
|
|
|
|
// Y축: 전력
|
|
|
|
// Y축: 전력
|
|
|
|
var yAxis = new LinearAxis
|
|
|
|
var yAxis = new LinearAxis();
|
|
|
|
{
|
|
|
|
string yTitle = dataType == DataType.Energy ? "전력 (kW)" : "온실가스 (tCO₂)";
|
|
|
|
Position = AxisPosition.Left,
|
|
|
|
ApplyCommonAxisSettings(yAxis, yTitle, AxisPosition.Left);
|
|
|
|
Title = dataType == DataType.Energy ? "전력 (kW)" : "온실가스 (tCO₂)",
|
|
|
|
|
|
|
|
MajorGridlineStyle = LineStyle.Solid,
|
|
|
|
|
|
|
|
MinorGridlineStyle = LineStyle.Dot
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(xAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
Model.Axes.Add(yAxis);
|
|
|
|
@ -792,8 +762,9 @@ namespace SmartAquaViewer.ViewModel
|
|
|
|
StartAngle = 0,
|
|
|
|
StartAngle = 0,
|
|
|
|
StrokeThickness = 0.5,
|
|
|
|
StrokeThickness = 0.5,
|
|
|
|
InsideLabelFormat = "{1}\n {0:F2}",
|
|
|
|
InsideLabelFormat = "{1}\n {0:F2}",
|
|
|
|
InsideLabelPosition = 0.8,
|
|
|
|
InsideLabelPosition = 0.5,
|
|
|
|
OutsideLabelFormat = null // 라벨은 내부만
|
|
|
|
OutsideLabelFormat = null, // 라벨은 내부만
|
|
|
|
|
|
|
|
FontSize = 14,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
if (donut) ps.InnerDiameter = 0.6; // 도넛 모드
|
|
|
|
if (donut) ps.InnerDiameter = 0.6; // 도넛 모드
|
|
|
|
|
|
|
|
|
|
|
|
|