Code development platform for open source projects from the European Union institutions

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

making points from delauney map accessible (e.g. for gui)

parent b634f2b0
No related branches found
No related tags found
No related merge requests found
......@@ -86,7 +86,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
var zValidationRules = new[] { new RangeAttribute(0, 100.SI().Kilo.Watt.Value()) };
var results = new List<ValidationResult>();
foreach (var entry in data._map.Points) {
foreach (var entry in data._map.Entries) {
context.DisplayName = AuxiliaryDataReader.Fields.AuxSpeed;
if (!Validator.TryValidateValue(entry.X, context, results, xValidationRules)) {
return new ValidationResult(string.Concat(results));
......
......@@ -29,6 +29,7 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
using TUGraz.VectoCommon.Exceptions;
......@@ -72,6 +73,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
angularVelocity.AsRPM);
}
public IReadOnlyCollection<Entry> Entries
{
get
{
var entries = _fuelMap.Entries;
var retVal = new Entry[entries.Count];
var i = 0;
foreach (var entry in entries) {
retVal[i++] = new Entry(entry.Y.SI<PerSecond>(), entry.X.SI<NewtonMeter>(), entry.Z.SI<KilogramPerSecond>());
}
return retVal;
}
}
public class Entry
{
[Required, SIRange(0, 5000 * Constants.RPMToRad)] public readonly PerSecond EngineSpeed;
......
......@@ -46,7 +46,7 @@ namespace TUGraz.VectoCore.Utils
{
public sealed class DelaunayMap : LoggingObject
{
internal ICollection<Point> Points = new HashSet<Point>();
private ICollection<Point> Points = new HashSet<Point>();
private Triangle[] _triangles;
private Edge[] _convexHull;
......@@ -66,6 +66,19 @@ namespace TUGraz.VectoCore.Utils
Points.Add(new Point(x, y, z));
}
public IReadOnlyCollection<Point> Entries
{
get
{
var retVal = new Point[Points.Count];
var i = 0;
foreach (var pt in Points) {
retVal[i++] = new Point(pt.X * (_maxX - _minX) + _minX, pt.Y * (_maxY - _minY) + _minY, pt.Z);
}
return retVal;
}
}
/// <summary>
/// Triangulate the points.
/// </summary>
......@@ -229,23 +242,27 @@ namespace TUGraz.VectoCore.Utils
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public double? Interpolate(double x, double y)
{
if (_triangles == null)
if (_triangles == null) {
throw new VectoException("Interpolation not possible. Call DelaunayMap.Triangulate first.");
}
x = (x - _minX) / (_maxX - _minX);
y = (y - _minY) / (_maxY - _minY);
var i = 0;
while (i < _triangles.Length && !_triangles[i].IsInside(x, y, true))
while (i < _triangles.Length && !_triangles[i].IsInside(x, y, true)) {
i++;
}
if (i == _triangles.Length) {
i = 0;
while (i < _triangles.Length && !_triangles[i].IsInside(x, y, false))
while (i < _triangles.Length && !_triangles[i].IsInside(x, y, false)) {
i++;
}
}
if (i == _triangles.Length)
if (i == _triangles.Length) {
return null;
}
var tr = _triangles[i];
var plane = new Plane(tr);
......
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