diff --git a/OpenNest.IO/Dxf.cs b/OpenNest.IO/Dxf.cs index 5c2548c..4c20f89 100644 --- a/OpenNest.IO/Dxf.cs +++ b/OpenNest.IO/Dxf.cs @@ -65,6 +65,36 @@ namespace OpenNest.IO } } + public static List GetGeometry(string path, Func layerFilter) + { + try + { + using var reader = new DxfReader(path); + var doc = reader.Read(); + return ConvertEntities(doc, layerFilter); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + return new List(); + } + } + + public static List GetGeometry(Stream stream, Func layerFilter) + { + try + { + using var reader = new DxfReader(stream); + var doc = reader.Read(); + return ConvertEntities(doc, layerFilter); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + return new List(); + } + } + #endregion #region Export @@ -128,15 +158,16 @@ namespace OpenNest.IO } } - private static List ConvertEntities(CadDocument doc) + private static List ConvertEntities(CadDocument doc, Func layerFilter = null) { var entities = new List(); var lines = new List(); var arcs = new List(); + var filter = layerFilter ?? IsNonCutLayer; foreach (var entity in doc.Entities) { - if (IsNonCutLayer(entity.Layer?.Name)) + if (filter(entity.Layer?.Name)) continue; switch (entity)