152 lines
4.6 KiB
C#
152 lines
4.6 KiB
C#
using DALI.ToolKit;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Xml;
|
|
|
|
namespace DALI.ToolKit.IO
|
|
{
|
|
public class Input
|
|
{
|
|
static readonly DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0);
|
|
|
|
public static DateTime DateTimeFromUnixMilliSeconds(long timestamp)
|
|
{
|
|
return unixEpoch.AddMilliseconds(timestamp);
|
|
}
|
|
|
|
List<DaliStroke> traces = new List<DaliStroke>();
|
|
|
|
public Input(XmlNode node, XmlNamespaceManager manager, Dictionary<string, DaliStroke> pool)
|
|
{
|
|
Id = String.Empty;
|
|
|
|
var attr = node.Attributes["xml:id"];
|
|
if (attr != null)
|
|
Id = attr.InnerText;
|
|
|
|
var attrTimeOffset = node.Attributes["timeOffset"];
|
|
if (attrTimeOffset != null)
|
|
{
|
|
long timeOffsetParsed;
|
|
if (Int64.TryParse(attrTimeOffset.InnerText, out timeOffsetParsed))
|
|
TimeOffset = timeOffsetParsed;
|
|
}
|
|
|
|
/** discard annotations */
|
|
/*foreach (XmlNode annotation in node.SelectNodes("i:annotation", manager))
|
|
{
|
|
var key = annotation.Attributes["type"].InnerText;
|
|
annotations.Add(new Annotation(key, annotation.InnerText));
|
|
}
|
|
*/
|
|
/* discard traceview */
|
|
/* foreach (XmlNode view in node.SelectNodes("i:traceView", manager))
|
|
{
|
|
var dataref = view.Attributes["traceDataRef"].InnerText;
|
|
if (pool.ContainsKey(dataref))
|
|
traces.Add(pool[dataref]);
|
|
else
|
|
refs.Add(new Reference() { ReferenceId = dataref });
|
|
|
|
}*/
|
|
foreach (XmlNode trace in node.SelectNodes("i:trace", manager))
|
|
{
|
|
var traceType = trace.Attributes["type"];
|
|
var traceErased = trace.Attributes["erased"];
|
|
bool isPenUpTrace = traceType != null && String.Equals(traceType.Value, "penUp");
|
|
bool isErasedTrace = traceErased != null && String.Equals(traceErased.Value, "true");
|
|
|
|
|
|
if (trace.Attributes["timeOffset"] != null)
|
|
{
|
|
long timeOffsetParsed;
|
|
if (Int64.TryParse(trace.Attributes["timeOffset"].InnerText, out timeOffsetParsed))
|
|
{
|
|
var timeOffset = DateTimeFromUnixMilliSeconds(timeOffsetParsed);
|
|
traces.Add(InkmlExtensions.ToTrace(trace.InnerText, timeOffset));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
traces.Add(InkmlExtensions.ToTrace(trace.InnerText));
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
public Input(string id, IEnumerable<DaliStroke> traces)
|
|
{
|
|
Id = id;
|
|
|
|
this.traces = new List<DaliStroke>(traces);
|
|
}
|
|
|
|
private string id;
|
|
public string Id
|
|
{
|
|
get
|
|
{
|
|
return id;
|
|
}
|
|
set
|
|
{
|
|
id = value;
|
|
|
|
}
|
|
}
|
|
|
|
private long timeOffset;
|
|
public long TimeOffset
|
|
{
|
|
get
|
|
{
|
|
return timeOffset;
|
|
}
|
|
set
|
|
{
|
|
timeOffset = value;
|
|
}
|
|
}
|
|
|
|
public IList<DaliStroke> Traces
|
|
{
|
|
get { return traces; }
|
|
set
|
|
{
|
|
traces.Clear();
|
|
foreach (var trace in value)
|
|
traces.Add(trace);
|
|
}
|
|
}
|
|
|
|
public event EventHandler DeleteRequested;
|
|
|
|
// ICommand extract;
|
|
// public ICommand Extract
|
|
// {
|
|
// get
|
|
// {
|
|
// if (extract == null)
|
|
// extract = new RelayCommand(() =>
|
|
// {
|
|
// strokefeatures.Clear();
|
|
// foreach (var trace in traces)
|
|
// {
|
|
// strokefeatures.Add(extractor.Extract(getPoints(trace)).ToList());
|
|
// }
|
|
|
|
|
|
// features = extractor.Extract(getPoints()).ToList();
|
|
|
|
// RaisePropertyChanged(vm => vm.Features);
|
|
// RaisePropertyChanged(vm => vm.StrokeFeatures);
|
|
|
|
// });
|
|
// return extract;
|
|
// }
|
|
// }
|
|
}
|
|
}
|