refactor: rewrite DxfImporter for ACadSharp
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using ACadSharp;
|
||||||
using netDxf;
|
using ACadSharp.IO;
|
||||||
using OpenNest.Geometry;
|
using OpenNest.Geometry;
|
||||||
|
|
||||||
namespace OpenNest.IO
|
namespace OpenNest.IO
|
||||||
@@ -16,32 +16,45 @@ namespace OpenNest.IO
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Entity> GetGeometry(DxfDocument doc)
|
private List<Entity> GetGeometry(CadDocument doc)
|
||||||
{
|
{
|
||||||
var entities = new List<Entity>();
|
var entities = new List<Entity>();
|
||||||
var lines = new List<Line>(doc.Entities.Lines.Count());
|
var lines = new List<Line>();
|
||||||
var arcs = new List<Arc>(doc.Entities.Arcs.Count());
|
var arcs = new List<Arc>();
|
||||||
|
|
||||||
foreach (var spline in doc.Entities.Splines)
|
foreach (var entity in doc.Entities)
|
||||||
lines.AddRange(spline.ToOpenNest(SplinePrecision));
|
{
|
||||||
|
switch (entity)
|
||||||
|
{
|
||||||
|
case ACadSharp.Entities.Line line:
|
||||||
|
lines.Add(line.ToOpenNest());
|
||||||
|
break;
|
||||||
|
|
||||||
foreach (var polyline in doc.Entities.Polylines2D)
|
case ACadSharp.Entities.Arc arc:
|
||||||
lines.AddRange(polyline.ToOpenNest());
|
arcs.Add(arc.ToOpenNest());
|
||||||
|
break;
|
||||||
|
|
||||||
foreach (var ellipse in doc.Entities.Ellipses)
|
case ACadSharp.Entities.Circle circle:
|
||||||
lines.AddRange(ellipse.ToOpenNest(SplinePrecision));
|
entities.Add(circle.ToOpenNest());
|
||||||
|
break;
|
||||||
|
|
||||||
foreach (var line in doc.Entities.Lines)
|
case ACadSharp.Entities.Spline spline:
|
||||||
lines.Add(line.ToOpenNest());
|
lines.AddRange(spline.ToOpenNest());
|
||||||
|
break;
|
||||||
|
|
||||||
foreach (var arc in doc.Entities.Arcs)
|
case ACadSharp.Entities.LwPolyline lwPolyline:
|
||||||
arcs.Add(arc.ToOpenNest());
|
lines.AddRange(lwPolyline.ToOpenNest());
|
||||||
|
break;
|
||||||
|
|
||||||
foreach (var circle in doc.Entities.Circles)
|
case ACadSharp.Entities.Polyline polyline:
|
||||||
entities.Add(circle.ToOpenNest());
|
lines.AddRange(polyline.ToOpenNest());
|
||||||
|
break;
|
||||||
|
|
||||||
foreach (var polyline in doc.Entities.Polylines3D)
|
case ACadSharp.Entities.Ellipse ellipse:
|
||||||
lines.AddRange(polyline.ToOpenNest());
|
lines.AddRange(ellipse.ToOpenNest(SplinePrecision));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Helper.Optimize(lines);
|
Helper.Optimize(lines);
|
||||||
Helper.Optimize(arcs);
|
Helper.Optimize(arcs);
|
||||||
@@ -54,13 +67,16 @@ namespace OpenNest.IO
|
|||||||
|
|
||||||
public bool GetGeometry(Stream stream, out List<Entity> geometry)
|
public bool GetGeometry(Stream stream, out List<Entity> geometry)
|
||||||
{
|
{
|
||||||
bool success = false;
|
var success = false;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var doc = DxfDocument.Load(stream);
|
using (var reader = new DxfReader(stream))
|
||||||
geometry = GetGeometry(doc);
|
{
|
||||||
success = true;
|
var doc = reader.Read();
|
||||||
|
geometry = GetGeometry(doc);
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -78,25 +94,22 @@ namespace OpenNest.IO
|
|||||||
|
|
||||||
public bool GetGeometry(string path, out List<Entity> geometry)
|
public bool GetGeometry(string path, out List<Entity> geometry)
|
||||||
{
|
{
|
||||||
Stream stream = null;
|
var success = false;
|
||||||
bool success = false;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var doc = DxfDocument.Load(path);
|
using (var reader = new DxfReader(path))
|
||||||
geometry = GetGeometry(doc);
|
{
|
||||||
success = true;
|
var doc = reader.Read();
|
||||||
|
geometry = GetGeometry(doc);
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Debug.WriteLine(ex.Message);
|
Debug.WriteLine(ex.Message);
|
||||||
geometry = new List<Entity>();
|
geometry = new List<Entity>();
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (stream != null)
|
|
||||||
stream.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user