[NF] Erste funktionierende Version
This commit is contained in:
@@ -2,15 +2,16 @@
|
||||
using System.Globalization;
|
||||
using LitJson;
|
||||
|
||||
namespace Mqtt_SWB_Dashboard {
|
||||
class DevicePower {
|
||||
namespace Mqtt_SWB_Dashboard.Helper {
|
||||
class Device {
|
||||
|
||||
public enum DevType {
|
||||
State,
|
||||
Consumption,
|
||||
Production
|
||||
}
|
||||
|
||||
public DevicePower(JsonData data, DevType type) {
|
||||
public Device(JsonData data, DevType type) {
|
||||
this.TimeStamp = new DateTime();
|
||||
this.Power = 0;
|
||||
this.Comul = 0;
|
||||
@@ -20,6 +21,15 @@ namespace Mqtt_SWB_Dashboard {
|
||||
this.Update(data, type);
|
||||
}
|
||||
|
||||
public Device(JsonData data) {
|
||||
this.TimeStamp = DateTime.Parse(data["TimeStamp"].ToString(), new CultureInfo("en-US"));
|
||||
this.Status = data["Status"].ToString() == "true" ? true : false;
|
||||
this.Production = Double.Parse(data["Production"].ToString());
|
||||
this.Type = (DevType)Int32.Parse(data["Type"].ToString());
|
||||
this.Power = Double.Parse(data["Power"].ToString());
|
||||
this.Comul = Double.Parse(data["Comul"].ToString());
|
||||
}
|
||||
|
||||
public DateTime TimeStamp { get; private set; }
|
||||
public Boolean Status { get; private set; }
|
||||
public Double Production { get; private set; }
|
||||
@@ -32,15 +42,15 @@ namespace Mqtt_SWB_Dashboard {
|
||||
if (type == DevType.State) {
|
||||
this.Status = data["status"].ToString() == "active" ? true : false;
|
||||
}
|
||||
if(type == DevType.Consumption) {
|
||||
this.Power = Double.Parse(data["power"].ToString(), new CultureInfo("en-US"));
|
||||
this.Comul = Double.Parse(data["energyCumul"].ToString(), new CultureInfo("en-US"));
|
||||
if (type == DevType.Consumption) {
|
||||
this.Power = Double.Parse(data["power"].ToString());
|
||||
this.Comul = Double.Parse(data["energyCumul"].ToString());
|
||||
}
|
||||
if(type == DevType.Production) {
|
||||
this.Power = Double.Parse(data["power"].ToString(), new CultureInfo("en-US"));
|
||||
this.Comul = Double.Parse(data["energyCumulative"].ToString(), new CultureInfo("en-US"));
|
||||
this.Production = Double.Parse(data["productionCumulative"].ToString(), new CultureInfo("en-US"));
|
||||
if (type == DevType.Production) {
|
||||
this.Power = Double.Parse(data["power"].ToString());
|
||||
this.Comul = Double.Parse(data["energyCumulative"].ToString());
|
||||
this.Production = Double.Parse(data["productionCumulative"].ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using LitJson;
|
||||
|
||||
namespace Mqtt_SWB_Dashboard.Helper {
|
||||
class Household {
|
||||
|
||||
public Dictionary<String, Device> Devices { get; private set; }
|
||||
public DateTime Active { get; private set; }
|
||||
|
||||
public Household(String did, Device device) {
|
||||
this.Active = DateTime.Now;
|
||||
this.Devices = new Dictionary<String, Device> {
|
||||
{ did, device }
|
||||
};
|
||||
}
|
||||
|
||||
public Household(JsonData data) {
|
||||
this.Devices = new Dictionary<String, Device>();
|
||||
foreach (KeyValuePair<String, JsonData> item in data["Devices"]) {
|
||||
this.Devices.Add(item.Key, new Device(item.Value));
|
||||
}
|
||||
this.Active = DateTime.Parse(data["Active"].ToString(), new CultureInfo("en-US"));
|
||||
}
|
||||
|
||||
public void PutDevice(String did, JsonData data, Device.DevType dtype) {
|
||||
this.Active = DateTime.Now;
|
||||
if (this.Devices.Keys.Contains(did)) {
|
||||
this.Devices[did].Update(data, dtype);
|
||||
} else {
|
||||
this.Devices.Add(did, new Device(data, dtype));
|
||||
}
|
||||
}
|
||||
|
||||
internal Int32 GetActive() {
|
||||
Int32 ret = 0;
|
||||
foreach (KeyValuePair<String, Device> item in this.Devices) {
|
||||
if (item.Value.TimeStamp > DateTime.Now.AddMinutes(-10)) {
|
||||
ret++;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
internal Double GetPower() {
|
||||
Double ret = 0;
|
||||
foreach (KeyValuePair<String, Device> item in this.Devices) {
|
||||
if (item.Value.TimeStamp > DateTime.Now.AddMinutes(-10) && item.Value.Type == (Device.DevType.Consumption & Device.DevType.State)) {
|
||||
ret += item.Value.Power;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
internal Double GetAllPower() {
|
||||
Double ret = 0;
|
||||
foreach (KeyValuePair<String, Device> item in this.Devices) {
|
||||
if (item.Value.Type == (Device.DevType.Consumption & Device.DevType.State)) {
|
||||
ret += item.Value.Power;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
internal Double GetColum() {
|
||||
Double ret = 0;
|
||||
foreach (KeyValuePair<String, Device> item in this.Devices) {
|
||||
if (item.Value.TimeStamp > DateTime.Now.AddMinutes(-10) && item.Value.Type == (Device.DevType.Consumption & Device.DevType.State)) {
|
||||
ret += item.Value.Comul;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
internal Double GetAllColum() {
|
||||
Double ret = 0;
|
||||
foreach (KeyValuePair<String, Device> item in this.Devices) {
|
||||
if (item.Value.Type == (Device.DevType.Consumption & Device.DevType.State)) {
|
||||
ret += item.Value.Comul;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,24 @@
|
||||
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:oxy="clr-namespace:OxyPlot.Wpf;assembly=OxyPlot.Wpf"
|
||||
xmlns:models="clr-namespace:Mqtt_SWB_Dashboard.Models"
|
||||
xmlns:local="clr-namespace:Mqtt_SWB_Dashboard"
|
||||
mc:Ignorable="d"
|
||||
Title="MainWindow" Height="350" Width="525">
|
||||
Title="MainWindow" Height="350" Width="525" Closed="OnClosed">
|
||||
<Window.DataContext>
|
||||
<models:PowerChartModel />
|
||||
</Window.DataContext>
|
||||
<Grid>
|
||||
<TextBlock HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="Haushalte" VerticalAlignment="Top" Width="60"/>
|
||||
<TextBlock HorizontalAlignment="Left" Margin="75,10,0,0" TextWrapping="Wrap" Text="Geräte" VerticalAlignment="Top" Width="40"/>
|
||||
<TextBlock x:Name="countHouses" HorizontalAlignment="Left" Margin="10,31,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="60" TextAlignment="Center"/>
|
||||
<TextBlock x:Name="countDevices" HorizontalAlignment="Left" Margin="75,31,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="40" TextAlignment="Center"/>
|
||||
<TextBlock x:Name="countHouses" HorizontalAlignment="Left" Margin="10,31,0,0" TextWrapping="Wrap" Text="0 / 0" VerticalAlignment="Top" Width="60" TextAlignment="Center"/>
|
||||
<TextBlock x:Name="countDevices" HorizontalAlignment="Left" Margin="75,31,0,0" TextWrapping="Wrap" Text="0 / 0" VerticalAlignment="Top" Width="40" TextAlignment="Center"/>
|
||||
<TextBlock HorizontalAlignment="Left" Margin="10,94,0,0" TextWrapping="Wrap" Text="Power" VerticalAlignment="Top" Width="105"/>
|
||||
<TextBlock HorizontalAlignment="Left" Margin="10,52,0,0" TextWrapping="Wrap" Text="Verbrauch" VerticalAlignment="Top" Width="105"/>
|
||||
<TextBlock x:Name="countPower" HorizontalAlignment="Left" Margin="10,115,0,0" TextWrapping="Wrap" Text="0 / 0" VerticalAlignment="Top" Width="105" TextAlignment="Center"/>
|
||||
<TextBlock x:Name="countColum" HorizontalAlignment="Left" Margin="10,73,0,0" TextWrapping="Wrap" Text="0 / 0" VerticalAlignment="Top" Width="105" TextAlignment="Center"/>
|
||||
<TextBlock Margin="272,94,32,191" Text="{Binding TotalNumberOfPoints, StringFormat='Total number of data points: {0}'}"/>
|
||||
<oxy:PlotView Margin="10,136,10,10" Model="{Binding Model}" />
|
||||
</Grid>
|
||||
</Window>
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
|
||||
namespace Mqtt_SWB_Dashboard {
|
||||
@@ -6,17 +8,32 @@ namespace Mqtt_SWB_Dashboard {
|
||||
/// Interaktionslogik für MainWindow.xaml
|
||||
/// </summary>
|
||||
public partial class MainWindow : Window {
|
||||
private Stats s;
|
||||
|
||||
public MainWindow() {
|
||||
InitializeComponent();
|
||||
Stats s = new Stats(new Mosquitto());
|
||||
s.UpdatedConsumption += this.S_UpdatedConsumption;
|
||||
CultureInfo info = new CultureInfo("de-DE");
|
||||
info.NumberFormat.NumberDecimalSeparator = ".";
|
||||
Thread.CurrentThread.CurrentCulture = info;
|
||||
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
|
||||
this.s = new Stats(new Mosquitto());
|
||||
this.s.UpdatedConsumption += this.S_UpdatedConsumption;
|
||||
this.S_UpdatedConsumption(this.s, null);
|
||||
}
|
||||
|
||||
private void S_UpdatedConsumption(Stats sender, EventArgs e) {
|
||||
this.Dispatcher.BeginInvoke((Action)(() => {
|
||||
this.countHouses.Text = sender.GetNumberHouseholds().ToString();
|
||||
this.countDevices.Text = sender.GetNumberDevices().ToString();
|
||||
this.countHouses.Text = sender.GetNumberHouseholds();
|
||||
this.countDevices.Text = sender.GetNumberDevices();
|
||||
this.countColum.Text = sender.GetCurrentColum();
|
||||
Tuple<Double, Double> power = sender.GetCurrentPower();
|
||||
this.countPower.Text = power.Item1 + "W / "+power.Item2+"W";
|
||||
((Models.PowerChartModel)this.DataContext).AddPower(power);
|
||||
}));
|
||||
}
|
||||
|
||||
private void OnClosed(Object sender, EventArgs e) {
|
||||
this.s.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using OxyPlot;
|
||||
using OxyPlot.Axes;
|
||||
using OxyPlot.Series;
|
||||
|
||||
namespace Mqtt_SWB_Dashboard.Models {
|
||||
public class PowerChartModel : INotifyPropertyChanged {
|
||||
private Double MaximumDrawn = 5;
|
||||
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
public PowerChartModel() {
|
||||
Instance = this;
|
||||
this.Model = new PlotModel { Title = "Stromverbrauch" };
|
||||
this.Model.Axes.Add(new DateTimeAxis { Position = AxisPosition.Bottom, AbsoluteMinimum = DateTimeAxis.ToDouble(DateTime.Now), AbsoluteMaximum = DateTimeAxis.ToDouble(DateTime.Now.AddMinutes(1)), IsZoomEnabled = false });
|
||||
this.Model.Axes.Add(new LinearAxis { Position = AxisPosition.Left, AbsoluteMinimum = 0, AbsoluteMaximum = 1, IsZoomEnabled = false });
|
||||
|
||||
this.Model.Series.Add(new LineSeries { Title = "Active [W]", Color = OxyColor.FromRgb(0, 150, 0) });
|
||||
this.Model.Series.Add(new LineSeries { Title = "Seen [W]", Color = OxyColor.FromRgb(0, 255, 0) });
|
||||
this.RaisePropertyChanged("Model");
|
||||
}
|
||||
|
||||
internal void AddPower(Tuple<Double, Double> power) {
|
||||
((LineSeries)this.Model.Series[0]).Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Now), power.Item1));
|
||||
((LineSeries)this.Model.Series[1]).Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Now), power.Item2));
|
||||
|
||||
if(this.MaximumDrawn < power.Item1) {
|
||||
this.MaximumDrawn = power.Item1;
|
||||
}
|
||||
if (this.MaximumDrawn < power.Item2) {
|
||||
this.MaximumDrawn = power.Item2;
|
||||
}
|
||||
this.Model.Axes[1].Minimum = 0;
|
||||
this.Model.Axes[1].Maximum = this.MaximumDrawn*1.1;
|
||||
this.Model.Axes[1].AbsoluteMaximum = this.MaximumDrawn*1.1;
|
||||
this.Model.Axes[0].AbsoluteMaximum = DateTimeAxis.ToDouble(DateTime.Now);
|
||||
|
||||
this.TotalNumberOfPoints++;
|
||||
this.RaisePropertyChanged("TotalNumberOfPoints");
|
||||
|
||||
this.Model.InvalidatePlot(true);
|
||||
}
|
||||
protected void RaisePropertyChanged(String property) {
|
||||
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
|
||||
}
|
||||
|
||||
public PlotModel Model { get; private set; }
|
||||
public Int32 TotalNumberOfPoints { get; private set; }
|
||||
public static PowerChartModel Instance { get; private set; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Mqtt_SWB_Dashboard {
|
||||
class Mosquitto {
|
||||
class Mosquitto : IDisposable {
|
||||
private Process p;
|
||||
private String message;
|
||||
|
||||
@@ -30,7 +26,7 @@ namespace Mqtt_SWB_Dashboard {
|
||||
|
||||
private void P_OutputDataReceived(Object sender, DataReceivedEventArgs e) {
|
||||
if (e.Data != null) {
|
||||
if(e.Data.StartsWith("Client mosqsub")) {
|
||||
if (e.Data.StartsWith("Client mosqsub")) {
|
||||
if (this.message != "" && this.message.IndexOf(" received PUBLISH ") > 0) {
|
||||
MatchCollection matches = (new Regex("^Client mosqsub\\|.*received PUBLISH \\(.*,.*,.*,.*, '(.*)'.*\\)\\)\n[^ ]* (.*)$", RegexOptions.IgnoreCase | RegexOptions.Singleline)).Matches(this.message);
|
||||
String topic = matches[0].Groups[1].Value;
|
||||
@@ -43,6 +39,31 @@ namespace Mqtt_SWB_Dashboard {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region IDisposable Support
|
||||
private bool disposedValue = false; // Dient zur Erkennung redundanter Aufrufe.
|
||||
|
||||
protected virtual void Dispose(Boolean disposing) {
|
||||
if (!this.disposedValue) {
|
||||
if (disposing) {
|
||||
this.p.CancelOutputRead();
|
||||
this.p.Kill();
|
||||
this.p.Close();
|
||||
}
|
||||
this.p = null;
|
||||
this.disposedValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Mosquitto() {
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
class MqttEventArgs : EventArgs {
|
||||
public MqttEventArgs() : base() { }
|
||||
|
||||
@@ -37,6 +37,12 @@
|
||||
<Reference Include="LitJson, Version=0.9.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\LitJson.0.9.0\lib\LitJson.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="OxyPlot, Version=1.0.0.0, Culture=neutral, PublicKeyToken=638079a8f0bd61e9, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OxyPlot.Core.1.0.0\lib\net45\OxyPlot.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="OxyPlot.Wpf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=75e952ba404cdbb0, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OxyPlot.Wpf.1.0.0\lib\net45\OxyPlot.Wpf.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
@@ -57,7 +63,9 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Compile Include="Helper.cs" />
|
||||
<Compile Include="Helper\Device.cs" />
|
||||
<Compile Include="Helper\Household.cs" />
|
||||
<Compile Include="Models\PowerChartModel.cs" />
|
||||
<Compile Include="Stats.cs" />
|
||||
<Page Include="MainWindow.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
@@ -100,5 +108,8 @@
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties\DataSources\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
+108
-34
@@ -1,25 +1,43 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using LitJson;
|
||||
using Mqtt_SWB_Dashboard.Helper;
|
||||
|
||||
namespace Mqtt_SWB_Dashboard {
|
||||
internal class Stats {
|
||||
private Dictionary<String, Dictionary<Int32, DevicePower>> household;
|
||||
internal class Stats : IDisposable {
|
||||
private Dictionary<String, Household> households = new Dictionary<String, Household>();
|
||||
private Mosquitto mosquitto;
|
||||
|
||||
public delegate void UpdateMessage(Stats sender, EventArgs e);
|
||||
public event UpdateMessage UpdatedConsumption;
|
||||
|
||||
public Stats(Mosquitto mosquitto) {
|
||||
this.household = new Dictionary<String, Dictionary<Int32, DevicePower>>();
|
||||
mosquitto.MessageIncomming += this.Mosquitto_MessageIncomming;
|
||||
LoadHouseholds();
|
||||
this.mosquitto = mosquitto;
|
||||
this.mosquitto.MessageIncomming += this.Mosquitto_MessageIncomming;
|
||||
}
|
||||
|
||||
private void LoadHouseholds() {
|
||||
if(File.Exists("household.json")) {
|
||||
try {
|
||||
String json = File.ReadAllText("household.json");
|
||||
JsonData data = JsonMapper.ToObject(json);
|
||||
foreach (KeyValuePair<String, JsonData> item in data) {
|
||||
this.households.Add(item.Key, new Household(item.Value));
|
||||
}
|
||||
} catch (Exception) { }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void Mosquitto_MessageIncomming(Object sender, MqttEventArgs e) {
|
||||
if (e.Topic == "/flex4grid/VersionControl/LocalGateway/groups/BONN_1") {
|
||||
|
||||
} else if (Regex.Match(e.Topic, "/flex4grid/VersionControl/LocalGateway/hosts/.*/status").Success ||
|
||||
} else if (Regex.Match(e.Topic, "/flex4grid/VersionControl/LocalGateway/hosts/.*/status").Success ||
|
||||
e.Topic == "/flex4grid/VersionControl/LocalGateway/status" ||
|
||||
Regex.Match(e.Topic, "/flex4grid/VersionControl/LocalGateway/hosts/.*/logs/gateway/plugs/gateway_plugs_1").Success) {
|
||||
this.GatewayPing(e);
|
||||
@@ -29,49 +47,38 @@ namespace Mqtt_SWB_Dashboard {
|
||||
Regex.Match(e.Topic, "/flex4grid/v1/households/.*/device/consumption").Success ||
|
||||
Regex.Match(e.Topic, "/flex4grid/v1/households/.*/device/state").Success) {
|
||||
this.HouseholdConsumption(e);
|
||||
} else if (Regex.Match(e.Topic, "/flex4grid/v1/households/.*/devices/state/request").Success) {
|
||||
this.HouseholdRequest(e);
|
||||
} else {
|
||||
throw new NotImplementedException(e.Topic);
|
||||
}//
|
||||
}
|
||||
|
||||
internal Int32 GetNumberDevices() {
|
||||
Int32 ret = 0;
|
||||
foreach (KeyValuePair<String, Dictionary<Int32, DevicePower>> item in this.household) {
|
||||
ret += item.Value.Count;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
internal Int32 GetNumberHouseholds() {
|
||||
return this.household.Count;
|
||||
private void HouseholdRequest(MqttEventArgs e) {
|
||||
//throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private void HouseholdConsumption(MqttEventArgs e) {
|
||||
Match m = Regex.Match(e.Topic, "/flex4grid/v1/households/([^/]*)/(consumption|device/(consumption|state))");
|
||||
String id = m.Groups[1].Value;
|
||||
DevicePower.DevType dtype = DevicePower.DevType.Consumption;
|
||||
Device.DevType dtype = Device.DevType.Consumption;
|
||||
if (m.Groups[2].Value == "consumption") {
|
||||
dtype = DevicePower.DevType.Production;
|
||||
} else if(m.Groups[3].Value == "consumption") {
|
||||
dtype = DevicePower.DevType.Consumption;
|
||||
} else if(m.Groups[3].Value == "state") {
|
||||
dtype = DevicePower.DevType.State;
|
||||
dtype = Device.DevType.Production;
|
||||
} else if (m.Groups[3].Value == "consumption") {
|
||||
dtype = Device.DevType.Consumption;
|
||||
} else if (m.Groups[3].Value == "state") {
|
||||
dtype = Device.DevType.State;
|
||||
}
|
||||
JsonData stuff = JsonMapper.ToObject(e.Message);
|
||||
Int32 did = Int32.Parse(stuff["id"].ToString());
|
||||
if (this.household.Keys.Contains(id)) {
|
||||
if (this.household[id].Keys.Contains(did)) {
|
||||
this.household[id][did].Update(stuff, dtype);
|
||||
try {
|
||||
JsonData data = JsonMapper.ToObject(e.Message);
|
||||
String did = data["id"].ToString();
|
||||
if (this.households.Keys.Contains(id)) {
|
||||
this.households[id].PutDevice(did, data, dtype);
|
||||
} else {
|
||||
this.household[id].Add(did, new DevicePower(stuff, dtype));
|
||||
this.households.Add(id, new Household(did, new Device(data, dtype)));
|
||||
}
|
||||
} else {
|
||||
Dictionary<Int32, DevicePower> d = new Dictionary<Int32, DevicePower> {
|
||||
{ did, new DevicePower(stuff, dtype) }
|
||||
};
|
||||
this.household.Add(id, d);
|
||||
}
|
||||
this.UpdatedConsumption?.Invoke(this, null);
|
||||
this.UpdatedConsumption?.Invoke(this, null);
|
||||
} catch (Exception) { }
|
||||
}
|
||||
|
||||
private void DeviceStatus(MqttEventArgs e) {
|
||||
@@ -85,5 +92,72 @@ namespace Mqtt_SWB_Dashboard {
|
||||
private void GatewayPing(MqttEventArgs e) {
|
||||
//throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal String GetNumberDevices() {
|
||||
Int32 active = 0;
|
||||
Int32 all = 0;
|
||||
foreach (KeyValuePair<String, Household> item in this.households) {
|
||||
active += item.Value.GetActive();
|
||||
all += item.Value.Devices.Count;
|
||||
}
|
||||
return active.ToString() + " / " + all.ToString();
|
||||
}
|
||||
|
||||
internal String GetNumberHouseholds() {
|
||||
Int32 active = 0;
|
||||
Int32 all = this.households.Count;
|
||||
foreach (KeyValuePair<String, Household> item in this.households) {
|
||||
if (item.Value.Active > DateTime.Now.AddMinutes(-10)) {
|
||||
active++;
|
||||
}
|
||||
}
|
||||
return active.ToString() + " / " + all.ToString();
|
||||
}
|
||||
|
||||
internal Tuple<Double, Double> GetCurrentPower() {
|
||||
Double active = 0;
|
||||
Double all = 0;
|
||||
foreach (KeyValuePair<String, Household> item in this.households) {
|
||||
active += item.Value.GetPower();
|
||||
all += item.Value.GetAllPower();
|
||||
}
|
||||
return new Tuple<Double, Double>(active, all);
|
||||
}
|
||||
|
||||
internal String GetCurrentColum() {
|
||||
Double active = 0;
|
||||
Double all = 0;
|
||||
foreach (KeyValuePair<String, Household> item in this.households) {
|
||||
active += item.Value.GetColum();
|
||||
all += item.Value.GetAllColum();
|
||||
}
|
||||
return active.ToString("F1") + "kW / " + all.ToString("F1") + "kW";
|
||||
}
|
||||
|
||||
#region IDisposable Support
|
||||
private Boolean disposedValue = false; // Dient zur Erkennung redundanter Aufrufe.
|
||||
|
||||
protected virtual void Dispose(Boolean disposing) {
|
||||
if (!this.disposedValue) {
|
||||
if (disposing) {
|
||||
this.mosquitto.MessageIncomming -= this.Mosquitto_MessageIncomming;
|
||||
String json = JsonMapper.ToJson(this.households);
|
||||
File.WriteAllText("household.json", json);
|
||||
this.mosquitto.Dispose();
|
||||
}
|
||||
this.mosquitto = null;
|
||||
this.disposedValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
~Stats() {
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="LitJson" version="0.9.0" targetFramework="net461" />
|
||||
<package id="OxyPlot.Core" version="1.0.0" targetFramework="net461" />
|
||||
<package id="OxyPlot.Wpf" version="1.0.0" targetFramework="net461" />
|
||||
</packages>
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
# This is the official list of OxyPlot authors for copyright purposes.
|
||||
# This file is distinct from the CONTRIBUTORS file.
|
||||
# See the latter for an explanation.
|
||||
|
||||
# Names should be added to this file as
|
||||
# Name or Organization <email address>
|
||||
# The email address is not required for organizations.
|
||||
|
||||
# Please keep the list sorted.
|
||||
# Please notify the first person on the list to be added here.
|
||||
|
||||
Oystein Bjorke <oystein.bjorke@gmail.com>
|
||||
DNV GL AS
|
||||
LECO® Corporation
|
||||
+217
@@ -0,0 +1,217 @@
|
||||
# Change Log
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [1.0.0] - 2016-09-11
|
||||
### Added
|
||||
- Added OxyPlot.SharpDX.Wpf NuGet package
|
||||
- Added DirectX 9.1-10.1 feature level support for SharpDX renderer
|
||||
- Added SharpDX based renderer and WPF control with SharpDX render (#124)
|
||||
- Added MinimumMajorStep and MinimumMinorStep to Axes.Axis (#816)
|
||||
- Added support for vertical X axis to HeatMapSeries (#535)
|
||||
- Added fall-back rectangle rendering to HeatMapSeries (#801)
|
||||
- Added logarithmic HeatMapSeries support (#802) and example
|
||||
- Axis.MaximumRange to limit the zoom (#401)
|
||||
- Added OxyPlot.Mobile NuGet package to combine the mobile platforms into a single package (#362)
|
||||
- Support for XWT (#295)
|
||||
- TwoColorAreaSeries (#299)
|
||||
- Delta values in AxisChangedEventArgs (#276)
|
||||
- Git source server (added GitLink build step) (#267,#266)
|
||||
- iOS PlotView ZoomThreshold/AllowPinchPastZero for use with KeepAspectRatioWhenPinching=false (#359)
|
||||
- CandleStickAndVolumeSeries and VolumeSeries (#377)
|
||||
- Axis.DesiredSize property (#383)
|
||||
- WPF wrapper for BoxPlotSeries (#434)
|
||||
- Capability to display mean value to BoxPlotSeries (#440)
|
||||
- LinearBarSeries for WPF (#506)
|
||||
- TitleToolTip in PlotModel (#508)
|
||||
- TextColor property on WPF Axis (#452)
|
||||
- ThreeColorLineSeries (#378)
|
||||
- CI of the Xamarin.Android, Xamarin.iOS and Xamarin.Forms packages (#274)
|
||||
- PlotModel.LegendLineSpacing (#622)
|
||||
- Legend rendering for LinearBarSeries (#663)
|
||||
- LegendMaxHeight property in PlotModel and Wpf.Plot (#668)
|
||||
- Support for a Xamarin Forms UWP project with sample app (#697)
|
||||
- ListBuilder for building lists by reflection (#705)
|
||||
- F# example (#699)
|
||||
- Support for discontinuities in AreaSeries (#215)
|
||||
- Support for Windows Universal 10.0 apps (#615)
|
||||
- Support Unicode in OxyPlot.Pdf (#789)
|
||||
- TouchTrackerManipulator (#787)
|
||||
- Extracted visible window search code from CandleStickSeries and made a generic version in XYSeries. Used it to optimize AreaSeries performance. (#834)
|
||||
- Optimized rendering performance of RectangleBarSeries (#834).
|
||||
- PdfExporter implementing IExporter (#845)
|
||||
- Color minor and major ticks differently (#417)
|
||||
- Support for PieSeries in OxyPlot.Wpf (#878)
|
||||
- Filter in example browser (#118)
|
||||
- Support for tooltips on WPF annotations
|
||||
- Support for tracker in OxyPlot.GtkSharp
|
||||
- Improve tracker style (Windows Forms) (#106)
|
||||
- Font rendering in OxyPlot.GtkSharp improved by using Pango (#972)
|
||||
- Improved LineSeries performance (#834)
|
||||
|
||||
### Changed
|
||||
- Fixed closing file stream for PdfReportWriter when PdfReportWriter is closed or disposed of. (#892)
|
||||
- Renamed OxyPlot.WindowsUniversal to OxyPlot.Windows (#242)
|
||||
- Changed OxyPlot.Xamarin.Forms to require OxyPlot.Mobile dependency instead of each separate NuGet. (#362)
|
||||
- Renamed OxyPlot.XamarinIOS to OxyPlot.MonoTouch (#327)
|
||||
- Renamed OxyPlot.XamarinAndroid to OxyPlot.Xamarin.Android (#327)
|
||||
- Renamed OxyPlot.XamarinForms to OxyPlot.Xamarin.Forms (#327)
|
||||
- Renamed OxyPlot.XamarinForms.iOS to OxyPlot.Xamarin.Forms.Platform.iOS (#327)
|
||||
- Renamed OxyPlot.XamarinFormsIOS to OxyPlot.Xamarin.Forms.Platform.iOS.Classic (#327)
|
||||
- Renamed OxyPlot.XamarinFormsAndroid to OxyPlot.Xamarin.Forms.Platform.Android (#327)
|
||||
- Renamed OxyPlot.XamarinFormsWinPhone to OxyPlot.Xamarin.Forms.Platform.WP8 (#327)
|
||||
- Changed OxyPlot.Xamarin.Android target to Android level 10 (#223)
|
||||
- Separated WPF Plot and PlotView (#252, #239)
|
||||
- Current CandleStickSeries renamed to OldCandleStickSeries, replaced by a faster implementation (#369)
|
||||
- Invalidate plot when ItemsSource contents change (INotifyCollectionChanged) on WPF only (#406)
|
||||
- Xamarin.Forms references updated to 1.5.0.6447 (#293, #439)
|
||||
- Change OxyPlot.Xamarin.Forms.Platform.Android target to Android level 15 (#439)
|
||||
- Changed OxyPlot.Xamarin.Forms to portable Profile259 (#439)
|
||||
- PlotController should not intercept input per default (#446)
|
||||
- Changed DefaultTrackerFormatString for BoxPlotSeries (to include Mean) (#440)
|
||||
- Changed Constructor of BoxPlotItem (to include Mean) (#440)
|
||||
- Changed Axis, Annotation and Series Render() method (removed model parameter)
|
||||
- Changed PCL project to profile 259, SL5 is separate now (#115)
|
||||
- Extracted CreateReport() and CreateTextReport() from PlotModel (#517)
|
||||
- Renamed GetLastUpdateException to GetLastPlotException and added the ability to see render exceptions(#543)
|
||||
- Move TileMapAnnotation class to example library (#567)
|
||||
- Change to semantic versioning (#595)
|
||||
- Change GTKSharp3 project to x86 (#599)
|
||||
- Change OxyPlot.Xamarin.Android to API Level 15 (#614)
|
||||
- Add Xamarin.Forms renderer initialization to PlotViewRenderer (#632)
|
||||
- Marked OxyPlot.Xamarin.Forms.Platform.*.Forms.Init() obsolete (#632)
|
||||
- Throw exception if Xamarin.Forms renderer is not 'initialized' (#492)
|
||||
- Make numeric values of DateTimeAxis compatible with ToOADate (#660)
|
||||
- Make struct types immutable (#692)
|
||||
- Implement IEquatable<T> for struct types (#692)
|
||||
- BoxPlotItem changed to reference type (#692)
|
||||
- Move Xamarin projects to new repository (#777)
|
||||
- Remove CandleStickSeries.Append (#826)
|
||||
- Change MinorInterval calculation, add unit test (#133)
|
||||
- Rewrite LogarithmicAxis tick calculation (#820)
|
||||
- Change Axis methods to protected virtual (#837)
|
||||
- Move CalculateMinorInterval and CreateTickValues to AxisUtilities (#837)
|
||||
- Change default number format to "g6" in Axis base class (#841)
|
||||
- Push packages to myget.org (#847)
|
||||
- Change the default format string to `null` for TimeSpanAxis and DateTimeAxis (#951)
|
||||
|
||||
### Removed
|
||||
- StyleCop tasks (#556)
|
||||
- OxyPlot.Metro project (superseded by OxyPlot.WindowsUniversal) (#241)
|
||||
- PlotModel.ToSvg method. Use the SvgExporter instead. (#347)
|
||||
- Constructors with parameters, use default constructors instead. (#347)
|
||||
- Axis.ShowMinorTicks property, use MinorTickSize = 0 instead (#347)
|
||||
- ManipulatorBase.GetCursorType method (#447)
|
||||
- Model.GetElements() method
|
||||
- Remove SL4 support (#115)
|
||||
- Remove NET35 support (#115)
|
||||
- PlotElement.Format method, use StringHelper.Format instead
|
||||
- EnumerableExtensions.Reverse removed (#677)
|
||||
- ListFiller (#705)
|
||||
|
||||
### Fixed
|
||||
- SharpDX control not being rendered when loaded
|
||||
- SharpDX out of viewport scrolling.
|
||||
- Multiple mouse clicks not being reported in OxyPlot.GtkSharp (#854)
|
||||
- StemSeries Tracking to allow tracking on tiny stems (#809)
|
||||
- Fixed PDFRenderContext text alignment issues for rotated text (#723)
|
||||
- HeatMapSeries.GetValue returns NaN instead of calculating a wrong value in proximity to NaN (#256)
|
||||
- Tracker position is wrong when PlotView is offset from origin (#455)
|
||||
- CategoryAxis should use StringFormat (#415)
|
||||
- Fixed the dependency of OxyPlot.Xamarin.Forms NuGet (#370)
|
||||
- Add default ctor for Xamarin.Forms iOS renderer (#348)
|
||||
- Windows Phone cursor exception (#345)
|
||||
- Bar/ColumSeries tracker format string bug (#333)
|
||||
- Fix exception for default tracker format strings (#265)
|
||||
- Fix center-aligned legends (#79)
|
||||
- Fix Markdown links to tag comparison URL with footnote-style links
|
||||
- WPF dispatcher issue (#311, #309)
|
||||
- Custom colors for scatters (#307)
|
||||
- Rotated axis labels (#303,#301)
|
||||
- Floating point error on axis labels (#289, #227)
|
||||
- Performance of CandleStickSeries (#290)
|
||||
- Tracker text for StairStepSeries (#263)
|
||||
- XamarinForms/iOS view not updating when model is changed (#262)
|
||||
- Improved WPF rendering performance (#260, #259)
|
||||
- Null reference with MVVM binding (#255)
|
||||
- WPF PngExporter background (#234)
|
||||
- XamlExporter background (#233)
|
||||
- .NET 3.5 build (#229)
|
||||
- Support WinPhone 8.1 in core NuGet package (#161)
|
||||
- Draw legend line with custom pattern (#356)
|
||||
- iOS pan/zoom stability (#336)
|
||||
- Xamarin.Forms iOS PlotViewRenderer crash (#458)
|
||||
- Inaccurate tracker when using LogarithmicAxis (#443)
|
||||
- Fix reset of transforms in WinForms render context (#489)
|
||||
- Fix StringFormat for TimeSpanAxis not recognizing f, ff, fff, etc (#330)
|
||||
- Fix LineSeries SMOOTH=True will crash WinForms on right click (#499)
|
||||
- Fix PlotView leak on iOS (#503)
|
||||
- This PlotModel is already in use by some other PlotView control (#497)
|
||||
- LegendTextColor not synchronized between wpf.Plot and InternalModel (#548)
|
||||
- Legend in CandleStickSeries does not scale correctly (#554)
|
||||
- Fix CodeGenerator exception for types without parameterless ctor (#573)
|
||||
- Migrate automatic package restore (#557)
|
||||
- Fix rendering of rotated 'math' text (#569, #448)
|
||||
- WPF export demo (#568)
|
||||
- Fixing a double comparison issue causing infinite loop (#587)
|
||||
- Fix null reference exception when ActualPoints was null rendering a StairStepSeries (#582)
|
||||
- Background color in the Xamarin.Forms views (#546)
|
||||
- IsVisible change in Xamarin.Forms.Platform.iOS (#546)
|
||||
- Rendering math text with syntax error gets stuck in an endless loop (#624)
|
||||
- Fix issue with MinimumRange not taking Minimum and Maximum values into account (#550)
|
||||
- Do not set default Controller in PlotView ctor (#436)
|
||||
- Corrected owner type of Wpf.PathAnnotation dependency properties (#645)
|
||||
- Fixed partial plot rendering on Xamarin.Android (#649)
|
||||
- Default controller should not be shared in WPF PlotViews (#682)
|
||||
- PositionAtZeroCrossing adds zero crossing line at wrong position (#635)
|
||||
- Implement AreaSeries.ConstantY2 (#662)
|
||||
- Null reference exception in ScatterSeries{T} actual points (#636)
|
||||
- Code generation for HighLowItem (#634)
|
||||
- Axis.MinimumRange did not work correctly (#711)
|
||||
- FillColor in ErrorColumnSeries (#736)
|
||||
- XAxisKey and YAxisKey added to Wpf.Annotations (#743)
|
||||
- Fix HeatMapSeries cannot plot on Universal Windows (#745)
|
||||
- Set Resolution in WinForms PngExporter (#754)
|
||||
- Axis should never go into infinite loop (#758)
|
||||
- Exception in BarSeriesBase (#790)
|
||||
- Vertical Axes Title Font Bug (#474)
|
||||
- Support string[] as ItemsSource in CategoryAxis (#825)
|
||||
- Horizontal RangeColorAxis (#767)
|
||||
- LogarithmicAxis sometimes places major ticks outside of the axis range (#850)
|
||||
- LineSeries with smoothing raises exception (#72)
|
||||
- Exception when legend is outside and plot area is small (#880)
|
||||
- Axis alignment with MinimumRange (#794)
|
||||
- Fixed strange number formatting when using LogarithmicAxis with very large or very small Series (#589)
|
||||
- Fixed LogarithmicAxis to no longer freeze when the axis is reversed (#925)
|
||||
- Prevent endless loop in LogarithmicAxis (#957)
|
||||
- Fixed WPF series data not refreshed when not visible (included WPF LiveDemo)
|
||||
- Fixed bug in selection of plot to display in OxyPlot.GtkSharp ExampleBrowser (#979)
|
||||
- Fixed non-interpolation of HeatMapSeries in OxyPlot.GtkSharp (#980)
|
||||
- Fixed axis min/max calc and axis assignment for CandleStick + VolumeSeries (#389)
|
||||
|
||||
## [0.2014.1.546] - 2014-10-22
|
||||
### Added
|
||||
- Support data binding paths ("Point.X") (#210)
|
||||
- Support for Xamarin.Forms (#204)
|
||||
- Support for Windows Universal apps (#190)
|
||||
- Improve TrackerFormatString consistency (#214)
|
||||
- Support LineColor.BrokenLineColor
|
||||
- LabelFormatString for ScatterSeries (#12)
|
||||
|
||||
### Changed
|
||||
- Changed tracker format strings arguments (#214)
|
||||
- Rename OxyPenLineJoin to LineJoin
|
||||
- Rename LineStyle.Undefined to LineStyle.Automatic
|
||||
|
||||
### Fixed
|
||||
- Improved text rendering for Android and iOS (#209)
|
||||
- Custom shape outline for PointAnnotation (#174)
|
||||
- Synchronize Wpf.Axis.MinimumRange (#205)
|
||||
- TrackerHitResult bug (#198)
|
||||
- Position of axis when PositionAtZeroCrossing = true (#189)
|
||||
- Expose ScatterSeries.ActualPoints (#201)
|
||||
- Add overridable Axis.FormatValueOverride (#181)
|
||||
- PngExporter text formatting (#170)
|
||||
|
||||
[Unreleased]: https://github.com/oxyplot/oxyplot/compare/v1.0.0...HEAD
|
||||
[1.0.0]: https://github.com/oxyplot/oxyplot/compare/v0.2014.1.546...v1.0.0
|
||||
[0.2014.1.546]: https://github.com/oxyplot/oxyplot/compare/v0.0.1...v0.2014.1.546
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
# This is the official list of people who have contributed
|
||||
# to the OxyPlot repository.
|
||||
# The AUTHORS file lists the copyright holders; this file
|
||||
# lists people.
|
||||
|
||||
# People submitting code should be listed in this file (by email address).
|
||||
|
||||
# Names should be added to this file like so:
|
||||
# Name <email address>
|
||||
|
||||
# Please keep the list sorted.
|
||||
|
||||
Auriou
|
||||
Bartłomiej Szypelow <bszypelow@users.noreply.github.com>
|
||||
benjaminrupp
|
||||
Benoit Blanchon <>
|
||||
br
|
||||
brantheman
|
||||
Brannon King
|
||||
Brian Lim <brian.lim.ca@gmail.com>
|
||||
Caleb Clarke <thealmightybob@users.noreply.github.com>
|
||||
Carlos Anderson <carlosjanderson@gmail.com>
|
||||
Carlos Teixeira <karlmtc@gmail.com>
|
||||
Choden Konigsmark <choden.konigsmark@gmail.com>
|
||||
classicboss302
|
||||
csabar <rumancsabi@gmail.com>
|
||||
Cyril Martin <cyril.martin.cm@gmail.com>
|
||||
darrelbrown
|
||||
David Laundav <davelaundav@gmail.com>
|
||||
David Wong <dvkwong0@gmail.com>
|
||||
DJDAS
|
||||
DNV GL AS
|
||||
Don Syme <donsyme@fastmail.fm>
|
||||
efontana2
|
||||
elliatab
|
||||
episage <tilosag@gmail.com>
|
||||
eric
|
||||
Federico Coppola <fede@silentman.it>
|
||||
Francois Botha <igitur@gmail.com>
|
||||
Garrett
|
||||
Geert van Horrik <geert@catenalogic.com>
|
||||
Gimly
|
||||
Iain Nicol <git@iainnicol.com>
|
||||
Ilja Nosik <ilja.nosik@outlook.com>
|
||||
Ilya Skriblovsky <IlyaSkriblovsky@gmail.com>
|
||||
Iurii Gazin <archeg@gmail.com>
|
||||
jaykul
|
||||
jezza323
|
||||
Johan
|
||||
Johan20D
|
||||
Jonathan Arweck
|
||||
Jonathan Shore <jonathan.shore@gmail.com>
|
||||
julien.bataille
|
||||
Just Slon <just.slon@gmail.com>
|
||||
Kaplas80 <kaplas80@gmail.com>
|
||||
kc1212 <kc04bc@gmx.com>
|
||||
kenny_evoleap
|
||||
Kenny Nygaard
|
||||
Kevin Crowell <crowell@proteinmetrics.com>
|
||||
Kyle Pulvermacher
|
||||
LECO® Corporation
|
||||
Levi Botelho <levi_botelho@hotmail.com>
|
||||
Linquize
|
||||
lsowen
|
||||
Luka B
|
||||
Matt Williams
|
||||
Matthew Leibowitz <mattleibow@live.com>
|
||||
Memphisch <memphis@machzwo.de>
|
||||
Mendel Monteiro-Beckerman
|
||||
methdotnet
|
||||
mirolev <miroslav.levicky@gmail.com>
|
||||
Mitch-Connor <acm@htri.net>
|
||||
moes_leco
|
||||
moljac
|
||||
mroth
|
||||
mrtncls
|
||||
Oleg Tarasov <oleg.v.tarasov@gmail.com>
|
||||
Oystein Bjorke <oystein.bjorke@gmail.com>
|
||||
Patrice Marin <patrice.marin@thomsonreuters.com>
|
||||
Philippe AURIOU <p.auriou@live.fr>
|
||||
Piotr Warzocha <pw@piootr.pl>
|
||||
Rik Borger <isolocis@gmail.com>
|
||||
ryang <decatf@gmail.com>
|
||||
Senen Fernandez <senenf@gmail.com>
|
||||
Shun-ichi Goto <shunichi.goto@gmail.com>
|
||||
Soarc <gor.rustamyan@gmail.com>
|
||||
Stefan Rado <oxyplot@sradonia.net>
|
||||
stefan-schweiger
|
||||
Steve Hoelzer <shoelzer@gmail.com>
|
||||
Sven Dummis
|
||||
Taldoras <taldoras@googlemail.com>
|
||||
Thorsten Claff <tclaff@gmail.com>
|
||||
thepretender
|
||||
tephyrnex
|
||||
Thomas Ibel <tibel@users.noreply.github.com>
|
||||
Tomasz Cielecki <tomasz@ostebaronen.dk>
|
||||
ToplandJ <jostein.topland@nov.com>
|
||||
Udo Liess
|
||||
VisualMelon
|
||||
vhoehn <veit.hoehn@hte-company.de>
|
||||
Vsevolod Kukol <sevo@sevo.org>
|
||||
Xavier <Xavier@xavier-PC.lsi>
|
||||
zur003 <Eric.Zurcher@csiro.au>
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 OxyPlot contributors
|
||||
|
||||
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.
|
||||
Binary file not shown.
+64
@@ -0,0 +1,64 @@
|
||||
OxyPlot is a cross-platform plotting library for .NET
|
||||
|
||||
- [Web page](http://oxyplot.org)
|
||||
- [Documentation](http://docs.oxyplot.org/)
|
||||
- [Announcements](http://oxyplot.org/announcements) / [atom](http://oxyplot.org/atom.xml)
|
||||
- [Discussion forum](http://discussion.oxyplot.org)
|
||||
- [Source repository](http://github.com/oxyplot/oxyplot)
|
||||
- [Issue tracker](http://github.com/oxyplot/oxyplot/issues)
|
||||
- [NuGet packages](http://www.nuget.org/packages?q=oxyplot)
|
||||
- [Stack Overflow](http://stackoverflow.com/questions/tagged/oxyplot)
|
||||
- [Twitter](https://twitter.com/hashtag/oxyplot)
|
||||
- [Gitter](https://gitter.im/oxyplot/oxyplot) (chat)
|
||||
|
||||

|
||||
[](https://ci.appveyor.com/project/objorke/oxyplot)
|
||||
|
||||

|
||||
|
||||
#### Branches
|
||||
|
||||
`master` - the release branch (stable channel)
|
||||
`develop` - the main branch with the latest development changes (pre-release channel)
|
||||
|
||||
See '[A successful git branching model](http://nvie.com/posts/a-successful-git-branching-model/)' for more information about the branching model in use.
|
||||
|
||||
#### Getting started
|
||||
|
||||
1. Use the NuGet package manager to add a reference to OxyPlot (see details below if you want to use pre-release packages)
|
||||
2. Add a `PlotView` to your user interface
|
||||
3. Create a `PlotModel` in your code
|
||||
4. Bind the `PlotModel` to the `Model` property of your `PlotView`
|
||||
|
||||
#### Examples
|
||||
|
||||
You can find examples in the `/Source/Examples` folder in the code repository.
|
||||
|
||||
#### NuGet packages
|
||||
|
||||
The latest pre-release packages are pushed by AppVeyor CI to [myget.org](https://www.myget.org/)
|
||||
To install these packages, set the myget.org package source `https://www.myget.org/F/oxyplot` and remember the "-pre" flag.
|
||||
|
||||
The stable release packages will be pushed to [nuget.org](https://www.nuget.org/packages?q=oxyplot).
|
||||
Note that we have currently have a lot of old (v2015.*) and pre-release packages on this feed, this will be cleaned up as soon as we release [v1.0](https://github.com/oxyplot/oxyplot/milestones/v1.0).
|
||||
|
||||
Package | Targets
|
||||
--------|---------------
|
||||
OxyPlot.Core | Portable class library
|
||||
OxyPlot.Wpf | WPF (NET40, NET45)
|
||||
OxyPlot.WindowsForms | Windows Forms (NET40, NET45)
|
||||
OxyPlot.Windows | Windows 8.1 and Windows Phone 8.1
|
||||
OxyPlot.WP8 | Windows Phone Silverlight
|
||||
OxyPlot.Silverlight | Silverlight 5
|
||||
OxyPlot.GtkSharp | GTK# 2 and 3 (NET40, NET45)
|
||||
OxyPlot.Xamarin.Android | MonoAndroid
|
||||
OxyPlot.Xamarin.iOS | MonoTouch and iOS10
|
||||
OxyPlot.Xamarin.Mac | Mac20
|
||||
OxyPlot.Xamarin.Forms | MonoTouch, iOS10, MonoAndroid, WP8
|
||||
OxyPlot.Xwt | NET40, NET45
|
||||
OxyPlot.OpenXML | NET40, NET45
|
||||
OxyPlot.Pdf | PdfSharp (NET40, NET45, SL5)
|
||||
|
||||
#### Contribute
|
||||
|
||||
See [Contributing](.github/CONTRIBUTING.md) for information about how to contribute!
|
||||
+21365
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
+21365
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+21352
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
BIN
Binary file not shown.
+21352
File diff suppressed because it is too large
Load Diff
+21365
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
BIN
Binary file not shown.
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
# This is the official list of OxyPlot authors for copyright purposes.
|
||||
# This file is distinct from the CONTRIBUTORS file.
|
||||
# See the latter for an explanation.
|
||||
|
||||
# Names should be added to this file as
|
||||
# Name or Organization <email address>
|
||||
# The email address is not required for organizations.
|
||||
|
||||
# Please keep the list sorted.
|
||||
# Please notify the first person on the list to be added here.
|
||||
|
||||
Oystein Bjorke <oystein.bjorke@gmail.com>
|
||||
DNV GL AS
|
||||
LECO® Corporation
|
||||
+217
@@ -0,0 +1,217 @@
|
||||
# Change Log
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [1.0.0] - 2016-09-11
|
||||
### Added
|
||||
- Added OxyPlot.SharpDX.Wpf NuGet package
|
||||
- Added DirectX 9.1-10.1 feature level support for SharpDX renderer
|
||||
- Added SharpDX based renderer and WPF control with SharpDX render (#124)
|
||||
- Added MinimumMajorStep and MinimumMinorStep to Axes.Axis (#816)
|
||||
- Added support for vertical X axis to HeatMapSeries (#535)
|
||||
- Added fall-back rectangle rendering to HeatMapSeries (#801)
|
||||
- Added logarithmic HeatMapSeries support (#802) and example
|
||||
- Axis.MaximumRange to limit the zoom (#401)
|
||||
- Added OxyPlot.Mobile NuGet package to combine the mobile platforms into a single package (#362)
|
||||
- Support for XWT (#295)
|
||||
- TwoColorAreaSeries (#299)
|
||||
- Delta values in AxisChangedEventArgs (#276)
|
||||
- Git source server (added GitLink build step) (#267,#266)
|
||||
- iOS PlotView ZoomThreshold/AllowPinchPastZero for use with KeepAspectRatioWhenPinching=false (#359)
|
||||
- CandleStickAndVolumeSeries and VolumeSeries (#377)
|
||||
- Axis.DesiredSize property (#383)
|
||||
- WPF wrapper for BoxPlotSeries (#434)
|
||||
- Capability to display mean value to BoxPlotSeries (#440)
|
||||
- LinearBarSeries for WPF (#506)
|
||||
- TitleToolTip in PlotModel (#508)
|
||||
- TextColor property on WPF Axis (#452)
|
||||
- ThreeColorLineSeries (#378)
|
||||
- CI of the Xamarin.Android, Xamarin.iOS and Xamarin.Forms packages (#274)
|
||||
- PlotModel.LegendLineSpacing (#622)
|
||||
- Legend rendering for LinearBarSeries (#663)
|
||||
- LegendMaxHeight property in PlotModel and Wpf.Plot (#668)
|
||||
- Support for a Xamarin Forms UWP project with sample app (#697)
|
||||
- ListBuilder for building lists by reflection (#705)
|
||||
- F# example (#699)
|
||||
- Support for discontinuities in AreaSeries (#215)
|
||||
- Support for Windows Universal 10.0 apps (#615)
|
||||
- Support Unicode in OxyPlot.Pdf (#789)
|
||||
- TouchTrackerManipulator (#787)
|
||||
- Extracted visible window search code from CandleStickSeries and made a generic version in XYSeries. Used it to optimize AreaSeries performance. (#834)
|
||||
- Optimized rendering performance of RectangleBarSeries (#834).
|
||||
- PdfExporter implementing IExporter (#845)
|
||||
- Color minor and major ticks differently (#417)
|
||||
- Support for PieSeries in OxyPlot.Wpf (#878)
|
||||
- Filter in example browser (#118)
|
||||
- Support for tooltips on WPF annotations
|
||||
- Support for tracker in OxyPlot.GtkSharp
|
||||
- Improve tracker style (Windows Forms) (#106)
|
||||
- Font rendering in OxyPlot.GtkSharp improved by using Pango (#972)
|
||||
- Improved LineSeries performance (#834)
|
||||
|
||||
### Changed
|
||||
- Fixed closing file stream for PdfReportWriter when PdfReportWriter is closed or disposed of. (#892)
|
||||
- Renamed OxyPlot.WindowsUniversal to OxyPlot.Windows (#242)
|
||||
- Changed OxyPlot.Xamarin.Forms to require OxyPlot.Mobile dependency instead of each separate NuGet. (#362)
|
||||
- Renamed OxyPlot.XamarinIOS to OxyPlot.MonoTouch (#327)
|
||||
- Renamed OxyPlot.XamarinAndroid to OxyPlot.Xamarin.Android (#327)
|
||||
- Renamed OxyPlot.XamarinForms to OxyPlot.Xamarin.Forms (#327)
|
||||
- Renamed OxyPlot.XamarinForms.iOS to OxyPlot.Xamarin.Forms.Platform.iOS (#327)
|
||||
- Renamed OxyPlot.XamarinFormsIOS to OxyPlot.Xamarin.Forms.Platform.iOS.Classic (#327)
|
||||
- Renamed OxyPlot.XamarinFormsAndroid to OxyPlot.Xamarin.Forms.Platform.Android (#327)
|
||||
- Renamed OxyPlot.XamarinFormsWinPhone to OxyPlot.Xamarin.Forms.Platform.WP8 (#327)
|
||||
- Changed OxyPlot.Xamarin.Android target to Android level 10 (#223)
|
||||
- Separated WPF Plot and PlotView (#252, #239)
|
||||
- Current CandleStickSeries renamed to OldCandleStickSeries, replaced by a faster implementation (#369)
|
||||
- Invalidate plot when ItemsSource contents change (INotifyCollectionChanged) on WPF only (#406)
|
||||
- Xamarin.Forms references updated to 1.5.0.6447 (#293, #439)
|
||||
- Change OxyPlot.Xamarin.Forms.Platform.Android target to Android level 15 (#439)
|
||||
- Changed OxyPlot.Xamarin.Forms to portable Profile259 (#439)
|
||||
- PlotController should not intercept input per default (#446)
|
||||
- Changed DefaultTrackerFormatString for BoxPlotSeries (to include Mean) (#440)
|
||||
- Changed Constructor of BoxPlotItem (to include Mean) (#440)
|
||||
- Changed Axis, Annotation and Series Render() method (removed model parameter)
|
||||
- Changed PCL project to profile 259, SL5 is separate now (#115)
|
||||
- Extracted CreateReport() and CreateTextReport() from PlotModel (#517)
|
||||
- Renamed GetLastUpdateException to GetLastPlotException and added the ability to see render exceptions(#543)
|
||||
- Move TileMapAnnotation class to example library (#567)
|
||||
- Change to semantic versioning (#595)
|
||||
- Change GTKSharp3 project to x86 (#599)
|
||||
- Change OxyPlot.Xamarin.Android to API Level 15 (#614)
|
||||
- Add Xamarin.Forms renderer initialization to PlotViewRenderer (#632)
|
||||
- Marked OxyPlot.Xamarin.Forms.Platform.*.Forms.Init() obsolete (#632)
|
||||
- Throw exception if Xamarin.Forms renderer is not 'initialized' (#492)
|
||||
- Make numeric values of DateTimeAxis compatible with ToOADate (#660)
|
||||
- Make struct types immutable (#692)
|
||||
- Implement IEquatable<T> for struct types (#692)
|
||||
- BoxPlotItem changed to reference type (#692)
|
||||
- Move Xamarin projects to new repository (#777)
|
||||
- Remove CandleStickSeries.Append (#826)
|
||||
- Change MinorInterval calculation, add unit test (#133)
|
||||
- Rewrite LogarithmicAxis tick calculation (#820)
|
||||
- Change Axis methods to protected virtual (#837)
|
||||
- Move CalculateMinorInterval and CreateTickValues to AxisUtilities (#837)
|
||||
- Change default number format to "g6" in Axis base class (#841)
|
||||
- Push packages to myget.org (#847)
|
||||
- Change the default format string to `null` for TimeSpanAxis and DateTimeAxis (#951)
|
||||
|
||||
### Removed
|
||||
- StyleCop tasks (#556)
|
||||
- OxyPlot.Metro project (superseded by OxyPlot.WindowsUniversal) (#241)
|
||||
- PlotModel.ToSvg method. Use the SvgExporter instead. (#347)
|
||||
- Constructors with parameters, use default constructors instead. (#347)
|
||||
- Axis.ShowMinorTicks property, use MinorTickSize = 0 instead (#347)
|
||||
- ManipulatorBase.GetCursorType method (#447)
|
||||
- Model.GetElements() method
|
||||
- Remove SL4 support (#115)
|
||||
- Remove NET35 support (#115)
|
||||
- PlotElement.Format method, use StringHelper.Format instead
|
||||
- EnumerableExtensions.Reverse removed (#677)
|
||||
- ListFiller (#705)
|
||||
|
||||
### Fixed
|
||||
- SharpDX control not being rendered when loaded
|
||||
- SharpDX out of viewport scrolling.
|
||||
- Multiple mouse clicks not being reported in OxyPlot.GtkSharp (#854)
|
||||
- StemSeries Tracking to allow tracking on tiny stems (#809)
|
||||
- Fixed PDFRenderContext text alignment issues for rotated text (#723)
|
||||
- HeatMapSeries.GetValue returns NaN instead of calculating a wrong value in proximity to NaN (#256)
|
||||
- Tracker position is wrong when PlotView is offset from origin (#455)
|
||||
- CategoryAxis should use StringFormat (#415)
|
||||
- Fixed the dependency of OxyPlot.Xamarin.Forms NuGet (#370)
|
||||
- Add default ctor for Xamarin.Forms iOS renderer (#348)
|
||||
- Windows Phone cursor exception (#345)
|
||||
- Bar/ColumSeries tracker format string bug (#333)
|
||||
- Fix exception for default tracker format strings (#265)
|
||||
- Fix center-aligned legends (#79)
|
||||
- Fix Markdown links to tag comparison URL with footnote-style links
|
||||
- WPF dispatcher issue (#311, #309)
|
||||
- Custom colors for scatters (#307)
|
||||
- Rotated axis labels (#303,#301)
|
||||
- Floating point error on axis labels (#289, #227)
|
||||
- Performance of CandleStickSeries (#290)
|
||||
- Tracker text for StairStepSeries (#263)
|
||||
- XamarinForms/iOS view not updating when model is changed (#262)
|
||||
- Improved WPF rendering performance (#260, #259)
|
||||
- Null reference with MVVM binding (#255)
|
||||
- WPF PngExporter background (#234)
|
||||
- XamlExporter background (#233)
|
||||
- .NET 3.5 build (#229)
|
||||
- Support WinPhone 8.1 in core NuGet package (#161)
|
||||
- Draw legend line with custom pattern (#356)
|
||||
- iOS pan/zoom stability (#336)
|
||||
- Xamarin.Forms iOS PlotViewRenderer crash (#458)
|
||||
- Inaccurate tracker when using LogarithmicAxis (#443)
|
||||
- Fix reset of transforms in WinForms render context (#489)
|
||||
- Fix StringFormat for TimeSpanAxis not recognizing f, ff, fff, etc (#330)
|
||||
- Fix LineSeries SMOOTH=True will crash WinForms on right click (#499)
|
||||
- Fix PlotView leak on iOS (#503)
|
||||
- This PlotModel is already in use by some other PlotView control (#497)
|
||||
- LegendTextColor not synchronized between wpf.Plot and InternalModel (#548)
|
||||
- Legend in CandleStickSeries does not scale correctly (#554)
|
||||
- Fix CodeGenerator exception for types without parameterless ctor (#573)
|
||||
- Migrate automatic package restore (#557)
|
||||
- Fix rendering of rotated 'math' text (#569, #448)
|
||||
- WPF export demo (#568)
|
||||
- Fixing a double comparison issue causing infinite loop (#587)
|
||||
- Fix null reference exception when ActualPoints was null rendering a StairStepSeries (#582)
|
||||
- Background color in the Xamarin.Forms views (#546)
|
||||
- IsVisible change in Xamarin.Forms.Platform.iOS (#546)
|
||||
- Rendering math text with syntax error gets stuck in an endless loop (#624)
|
||||
- Fix issue with MinimumRange not taking Minimum and Maximum values into account (#550)
|
||||
- Do not set default Controller in PlotView ctor (#436)
|
||||
- Corrected owner type of Wpf.PathAnnotation dependency properties (#645)
|
||||
- Fixed partial plot rendering on Xamarin.Android (#649)
|
||||
- Default controller should not be shared in WPF PlotViews (#682)
|
||||
- PositionAtZeroCrossing adds zero crossing line at wrong position (#635)
|
||||
- Implement AreaSeries.ConstantY2 (#662)
|
||||
- Null reference exception in ScatterSeries{T} actual points (#636)
|
||||
- Code generation for HighLowItem (#634)
|
||||
- Axis.MinimumRange did not work correctly (#711)
|
||||
- FillColor in ErrorColumnSeries (#736)
|
||||
- XAxisKey and YAxisKey added to Wpf.Annotations (#743)
|
||||
- Fix HeatMapSeries cannot plot on Universal Windows (#745)
|
||||
- Set Resolution in WinForms PngExporter (#754)
|
||||
- Axis should never go into infinite loop (#758)
|
||||
- Exception in BarSeriesBase (#790)
|
||||
- Vertical Axes Title Font Bug (#474)
|
||||
- Support string[] as ItemsSource in CategoryAxis (#825)
|
||||
- Horizontal RangeColorAxis (#767)
|
||||
- LogarithmicAxis sometimes places major ticks outside of the axis range (#850)
|
||||
- LineSeries with smoothing raises exception (#72)
|
||||
- Exception when legend is outside and plot area is small (#880)
|
||||
- Axis alignment with MinimumRange (#794)
|
||||
- Fixed strange number formatting when using LogarithmicAxis with very large or very small Series (#589)
|
||||
- Fixed LogarithmicAxis to no longer freeze when the axis is reversed (#925)
|
||||
- Prevent endless loop in LogarithmicAxis (#957)
|
||||
- Fixed WPF series data not refreshed when not visible (included WPF LiveDemo)
|
||||
- Fixed bug in selection of plot to display in OxyPlot.GtkSharp ExampleBrowser (#979)
|
||||
- Fixed non-interpolation of HeatMapSeries in OxyPlot.GtkSharp (#980)
|
||||
- Fixed axis min/max calc and axis assignment for CandleStick + VolumeSeries (#389)
|
||||
|
||||
## [0.2014.1.546] - 2014-10-22
|
||||
### Added
|
||||
- Support data binding paths ("Point.X") (#210)
|
||||
- Support for Xamarin.Forms (#204)
|
||||
- Support for Windows Universal apps (#190)
|
||||
- Improve TrackerFormatString consistency (#214)
|
||||
- Support LineColor.BrokenLineColor
|
||||
- LabelFormatString for ScatterSeries (#12)
|
||||
|
||||
### Changed
|
||||
- Changed tracker format strings arguments (#214)
|
||||
- Rename OxyPenLineJoin to LineJoin
|
||||
- Rename LineStyle.Undefined to LineStyle.Automatic
|
||||
|
||||
### Fixed
|
||||
- Improved text rendering for Android and iOS (#209)
|
||||
- Custom shape outline for PointAnnotation (#174)
|
||||
- Synchronize Wpf.Axis.MinimumRange (#205)
|
||||
- TrackerHitResult bug (#198)
|
||||
- Position of axis when PositionAtZeroCrossing = true (#189)
|
||||
- Expose ScatterSeries.ActualPoints (#201)
|
||||
- Add overridable Axis.FormatValueOverride (#181)
|
||||
- PngExporter text formatting (#170)
|
||||
|
||||
[Unreleased]: https://github.com/oxyplot/oxyplot/compare/v1.0.0...HEAD
|
||||
[1.0.0]: https://github.com/oxyplot/oxyplot/compare/v0.2014.1.546...v1.0.0
|
||||
[0.2014.1.546]: https://github.com/oxyplot/oxyplot/compare/v0.0.1...v0.2014.1.546
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
# This is the official list of people who have contributed
|
||||
# to the OxyPlot repository.
|
||||
# The AUTHORS file lists the copyright holders; this file
|
||||
# lists people.
|
||||
|
||||
# People submitting code should be listed in this file (by email address).
|
||||
|
||||
# Names should be added to this file like so:
|
||||
# Name <email address>
|
||||
|
||||
# Please keep the list sorted.
|
||||
|
||||
Auriou
|
||||
Bartłomiej Szypelow <bszypelow@users.noreply.github.com>
|
||||
benjaminrupp
|
||||
Benoit Blanchon <>
|
||||
br
|
||||
brantheman
|
||||
Brannon King
|
||||
Brian Lim <brian.lim.ca@gmail.com>
|
||||
Caleb Clarke <thealmightybob@users.noreply.github.com>
|
||||
Carlos Anderson <carlosjanderson@gmail.com>
|
||||
Carlos Teixeira <karlmtc@gmail.com>
|
||||
Choden Konigsmark <choden.konigsmark@gmail.com>
|
||||
classicboss302
|
||||
csabar <rumancsabi@gmail.com>
|
||||
Cyril Martin <cyril.martin.cm@gmail.com>
|
||||
darrelbrown
|
||||
David Laundav <davelaundav@gmail.com>
|
||||
David Wong <dvkwong0@gmail.com>
|
||||
DJDAS
|
||||
DNV GL AS
|
||||
Don Syme <donsyme@fastmail.fm>
|
||||
efontana2
|
||||
elliatab
|
||||
episage <tilosag@gmail.com>
|
||||
eric
|
||||
Federico Coppola <fede@silentman.it>
|
||||
Francois Botha <igitur@gmail.com>
|
||||
Garrett
|
||||
Geert van Horrik <geert@catenalogic.com>
|
||||
Gimly
|
||||
Iain Nicol <git@iainnicol.com>
|
||||
Ilja Nosik <ilja.nosik@outlook.com>
|
||||
Ilya Skriblovsky <IlyaSkriblovsky@gmail.com>
|
||||
Iurii Gazin <archeg@gmail.com>
|
||||
jaykul
|
||||
jezza323
|
||||
Johan
|
||||
Johan20D
|
||||
Jonathan Arweck
|
||||
Jonathan Shore <jonathan.shore@gmail.com>
|
||||
julien.bataille
|
||||
Just Slon <just.slon@gmail.com>
|
||||
Kaplas80 <kaplas80@gmail.com>
|
||||
kc1212 <kc04bc@gmx.com>
|
||||
kenny_evoleap
|
||||
Kenny Nygaard
|
||||
Kevin Crowell <crowell@proteinmetrics.com>
|
||||
Kyle Pulvermacher
|
||||
LECO® Corporation
|
||||
Levi Botelho <levi_botelho@hotmail.com>
|
||||
Linquize
|
||||
lsowen
|
||||
Luka B
|
||||
Matt Williams
|
||||
Matthew Leibowitz <mattleibow@live.com>
|
||||
Memphisch <memphis@machzwo.de>
|
||||
Mendel Monteiro-Beckerman
|
||||
methdotnet
|
||||
mirolev <miroslav.levicky@gmail.com>
|
||||
Mitch-Connor <acm@htri.net>
|
||||
moes_leco
|
||||
moljac
|
||||
mroth
|
||||
mrtncls
|
||||
Oleg Tarasov <oleg.v.tarasov@gmail.com>
|
||||
Oystein Bjorke <oystein.bjorke@gmail.com>
|
||||
Patrice Marin <patrice.marin@thomsonreuters.com>
|
||||
Philippe AURIOU <p.auriou@live.fr>
|
||||
Piotr Warzocha <pw@piootr.pl>
|
||||
Rik Borger <isolocis@gmail.com>
|
||||
ryang <decatf@gmail.com>
|
||||
Senen Fernandez <senenf@gmail.com>
|
||||
Shun-ichi Goto <shunichi.goto@gmail.com>
|
||||
Soarc <gor.rustamyan@gmail.com>
|
||||
Stefan Rado <oxyplot@sradonia.net>
|
||||
stefan-schweiger
|
||||
Steve Hoelzer <shoelzer@gmail.com>
|
||||
Sven Dummis
|
||||
Taldoras <taldoras@googlemail.com>
|
||||
Thorsten Claff <tclaff@gmail.com>
|
||||
thepretender
|
||||
tephyrnex
|
||||
Thomas Ibel <tibel@users.noreply.github.com>
|
||||
Tomasz Cielecki <tomasz@ostebaronen.dk>
|
||||
ToplandJ <jostein.topland@nov.com>
|
||||
Udo Liess
|
||||
VisualMelon
|
||||
vhoehn <veit.hoehn@hte-company.de>
|
||||
Vsevolod Kukol <sevo@sevo.org>
|
||||
Xavier <Xavier@xavier-PC.lsi>
|
||||
zur003 <Eric.Zurcher@csiro.au>
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 OxyPlot contributors
|
||||
|
||||
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.
|
||||
Binary file not shown.
Vendored
+64
@@ -0,0 +1,64 @@
|
||||
OxyPlot is a cross-platform plotting library for .NET
|
||||
|
||||
- [Web page](http://oxyplot.org)
|
||||
- [Documentation](http://docs.oxyplot.org/)
|
||||
- [Announcements](http://oxyplot.org/announcements) / [atom](http://oxyplot.org/atom.xml)
|
||||
- [Discussion forum](http://discussion.oxyplot.org)
|
||||
- [Source repository](http://github.com/oxyplot/oxyplot)
|
||||
- [Issue tracker](http://github.com/oxyplot/oxyplot/issues)
|
||||
- [NuGet packages](http://www.nuget.org/packages?q=oxyplot)
|
||||
- [Stack Overflow](http://stackoverflow.com/questions/tagged/oxyplot)
|
||||
- [Twitter](https://twitter.com/hashtag/oxyplot)
|
||||
- [Gitter](https://gitter.im/oxyplot/oxyplot) (chat)
|
||||
|
||||

|
||||
[](https://ci.appveyor.com/project/objorke/oxyplot)
|
||||
|
||||

|
||||
|
||||
#### Branches
|
||||
|
||||
`master` - the release branch (stable channel)
|
||||
`develop` - the main branch with the latest development changes (pre-release channel)
|
||||
|
||||
See '[A successful git branching model](http://nvie.com/posts/a-successful-git-branching-model/)' for more information about the branching model in use.
|
||||
|
||||
#### Getting started
|
||||
|
||||
1. Use the NuGet package manager to add a reference to OxyPlot (see details below if you want to use pre-release packages)
|
||||
2. Add a `PlotView` to your user interface
|
||||
3. Create a `PlotModel` in your code
|
||||
4. Bind the `PlotModel` to the `Model` property of your `PlotView`
|
||||
|
||||
#### Examples
|
||||
|
||||
You can find examples in the `/Source/Examples` folder in the code repository.
|
||||
|
||||
#### NuGet packages
|
||||
|
||||
The latest pre-release packages are pushed by AppVeyor CI to [myget.org](https://www.myget.org/)
|
||||
To install these packages, set the myget.org package source `https://www.myget.org/F/oxyplot` and remember the "-pre" flag.
|
||||
|
||||
The stable release packages will be pushed to [nuget.org](https://www.nuget.org/packages?q=oxyplot).
|
||||
Note that we have currently have a lot of old (v2015.*) and pre-release packages on this feed, this will be cleaned up as soon as we release [v1.0](https://github.com/oxyplot/oxyplot/milestones/v1.0).
|
||||
|
||||
Package | Targets
|
||||
--------|---------------
|
||||
OxyPlot.Core | Portable class library
|
||||
OxyPlot.Wpf | WPF (NET40, NET45)
|
||||
OxyPlot.WindowsForms | Windows Forms (NET40, NET45)
|
||||
OxyPlot.Windows | Windows 8.1 and Windows Phone 8.1
|
||||
OxyPlot.WP8 | Windows Phone Silverlight
|
||||
OxyPlot.Silverlight | Silverlight 5
|
||||
OxyPlot.GtkSharp | GTK# 2 and 3 (NET40, NET45)
|
||||
OxyPlot.Xamarin.Android | MonoAndroid
|
||||
OxyPlot.Xamarin.iOS | MonoTouch and iOS10
|
||||
OxyPlot.Xamarin.Mac | Mac20
|
||||
OxyPlot.Xamarin.Forms | MonoTouch, iOS10, MonoAndroid, WP8
|
||||
OxyPlot.Xwt | NET40, NET45
|
||||
OxyPlot.OpenXML | NET40, NET45
|
||||
OxyPlot.Pdf | PdfSharp (NET40, NET45, SL5)
|
||||
|
||||
#### Contribute
|
||||
|
||||
See [Contributing](.github/CONTRIBUTING.md) for information about how to contribute!
|
||||
+6555
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
+6555
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user