Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/PersistableGeometry.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/PersistableGeometry.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/PersistableGeometry.cs (revision 4871) @@ -0,0 +1,66 @@ +// Copyright (C) Stichting Deltares 2024. All rights reserved. +// +// This file is part of the Dam Engine. +// +// The Dam Engine is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Collections.Generic; + +namespace Deltares.DamEngine.TestHelpers.Geometry; + +/// +/// Persistable Geometry object (for json serialization) +/// +public class PersistableGeometry +{ + public List Surfaces { get; set; } +} + +/// +/// Persistable Surface object (for json serialization) +/// +public class PersistableSurface +{ + public PersistableOuterLoop OuterLoop { get; set; } +} + +/// +/// Persistable Outerloop object (for json serialization) +/// +public class PersistableOuterLoop +{ + public List Curves { get; set; } +} + +/// +/// Persistable Curve object (for json serialization) +/// +public class PersistableCurve +{ + public PersistablePoint HeadPoint { get; set; } + public PersistablePoint EndPoint { get; set; } +} + +/// +/// Persistable Point object (for json serialization) +/// +public class PersistablePoint +{ + public double X { get; set; } + public double Z { get; set; } +} \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/GeometryExporter.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/GeometryExporter.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/GeometryExporter.cs (revision 4871) @@ -0,0 +1,107 @@ +// Copyright (C) Stichting Deltares 2024. All rights reserved. +// +// This file is part of the Dam Engine. +// +// The Dam Engine is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.IO; +using System.Text.Json; +using Deltares.DamEngine.Data.Geometry; + +namespace Deltares.DamEngine.TestHelpers.Geometry; + +/// +/// Export the geometry to a file +/// +public static class GeometryExporter +{ + /// + /// Export the geometry to a json file + /// + /// + /// + public static void ExportToJsonFile(GeometryData geometry, string fileName) + { + var jsonSerializerOptions = new JsonSerializerOptions + { + WriteIndented = true + }; + PersistableGeometry persistableGeometry = GeometryExporterHelper.CreateFromGeometryData(geometry); + string output = JsonSerializer.Serialize(persistableGeometry, jsonSerializerOptions); + // Save output to text file + File.WriteAllText(fileName, output); + } + + /// + /// Export the geometry to a text file + /// + /// + /// + public static void ExportToFile(GeometryData geometry, string fileName) + { + using (var writer = new StreamWriter(fileName)) + { + // Export points + writer.WriteLine("[BEGIN POINTS]"); + foreach (Point2D point in geometry.Points) + { + writer.WriteLine($"{point.X}, {point.Z}"); + } + + writer.WriteLine("[END POINTS]"); + + // Export curves + writer.WriteLine("[BEGIN CURVES]"); + foreach (GeometryCurve curve in geometry.Curves) + { + writer.WriteLine($"Curve: ({curve.HeadPoint.X}, {curve.HeadPoint.Z}) - ({curve.EndPoint.X}, {curve.EndPoint.Z})"); + } + + writer.WriteLine("[END CURVES]"); + + // Export surfaces + writer.WriteLine("[BEGIN SURFACES]"); + foreach (GeometrySurface surface in geometry.Surfaces) + { + // Outerloop + writer.WriteLine($"Surface: {surface.Name}"); + writer.WriteLine($"OuterLoop: {surface.OuterLoop.Name}"); + foreach (GeometryCurve curve in surface.OuterLoop.CurveList) + { + writer.WriteLine($"({curve.HeadPoint.X}, {curve.HeadPoint.Z}) - ({curve.EndPoint.X}, {curve.EndPoint.Z})"); + } + + writer.WriteLine(""); + + // Innerloops + foreach (GeometryLoop innerLoop in surface.InnerLoops) + { + writer.WriteLine($"InnerLoop: {innerLoop.Name}"); + foreach (GeometryCurve curve in innerLoop.CurveList) + { + writer.WriteLine($"Curve: ({curve.HeadPoint.X}, {curve.HeadPoint.Z}) - ({curve.EndPoint.X}, {curve.EndPoint.Z})"); + } + + writer.WriteLine(""); + } + } + + writer.WriteLine("[END SURFACES]"); + } + } +} \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/GeometryExporterHelper.cs =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/GeometryExporterHelper.cs (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.TestHelpers/Geometry/GeometryExporterHelper.cs (revision 4871) @@ -0,0 +1,68 @@ +// Copyright (C) Stichting Deltares 2024. All rights reserved. +// +// This file is part of the Dam Engine. +// +// The Dam Engine is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Linq; +using Deltares.DamEngine.Data.Geometry; + +namespace Deltares.DamEngine.TestHelpers.Geometry; + +/// +/// Helper class for exporting geometry +/// +public static class GeometryExporterHelper +{ + /// + /// Create a persistable geometry object from a GeometryData object + /// + /// + /// + public static PersistableGeometry CreateFromGeometryData(GeometryData geometry) + { + var persistableGeometry = new PersistableGeometry + { + Surfaces = [] + }; + foreach (GeometrySurface surface in geometry.Surfaces) + { + persistableGeometry.Surfaces.Add(new PersistableSurface + { + OuterLoop = new PersistableOuterLoop + { + Curves = surface.OuterLoop.CurveList.Select(curve => new PersistableCurve + { + HeadPoint = new PersistablePoint + { + X = curve.HeadPoint.X, + Z = curve.HeadPoint.Z + }, + EndPoint = new PersistablePoint + { + X = curve.EndPoint.X, + Z = curve.EndPoint.Z + } + }).ToList() + } + }); + } + + return persistableGeometry; + } +} \ No newline at end of file