Added Etcher class
This commit is contained in:
@@ -5,5 +5,6 @@
|
|||||||
</startup>
|
</startup>
|
||||||
<appSettings>
|
<appSettings>
|
||||||
<add key="MaxBendRadius" value="2.0"/>
|
<add key="MaxBendRadius" value="2.0"/>
|
||||||
|
<add key="EtchLength" value="1.0"/>
|
||||||
</appSettings>
|
</appSettings>
|
||||||
</configuration>
|
</configuration>
|
||||||
@@ -49,6 +49,7 @@
|
|||||||
<Compile Include="Bend.cs" />
|
<Compile Include="Bend.cs" />
|
||||||
<Compile Include="BendDirection.cs" />
|
<Compile Include="BendDirection.cs" />
|
||||||
<Compile Include="BendLineExtractor.cs" />
|
<Compile Include="BendLineExtractor.cs" />
|
||||||
|
<Compile Include="Etcher.cs" />
|
||||||
<Compile Include="Extensions.cs" />
|
<Compile Include="Extensions.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
|||||||
90
EtchBendLines/Etcher.cs
Normal file
90
EtchBendLines/Etcher.cs
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
using netDxf;
|
||||||
|
using netDxf.Tables;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace EtchBendLines
|
||||||
|
{
|
||||||
|
public class Etcher
|
||||||
|
{
|
||||||
|
public Layer BendLayer = new Layer("BEND")
|
||||||
|
{
|
||||||
|
Color = AciColor.Yellow
|
||||||
|
};
|
||||||
|
|
||||||
|
public double EtchLength { get; set; } = 1.0;
|
||||||
|
|
||||||
|
public double MaxBendRadius { get; set; } = 4.0;
|
||||||
|
|
||||||
|
public void AddEtchLines(string filePath)
|
||||||
|
{
|
||||||
|
Console.WriteLine(filePath);
|
||||||
|
|
||||||
|
var bendLineExtractor = new BendLineExtractor(filePath);
|
||||||
|
bendLineExtractor.MaxBendRadius = MaxBendRadius;
|
||||||
|
|
||||||
|
var bendLines = bendLineExtractor.GetBendLines();
|
||||||
|
|
||||||
|
if (bendLines.Count == 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("No bend lines found.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Found {bendLines.Count} bend lines.");
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var bendLine in bendLines)
|
||||||
|
{
|
||||||
|
bendLine.Line.Layer = BendLayer;
|
||||||
|
bendLine.Line.Color = AciColor.ByLayer;
|
||||||
|
bendLine.BendNote.Layer = BendLayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
var upBends = bendLines.Where(b => b.Direction == BendDirection.Up);
|
||||||
|
var upBendCount = upBends.Count();
|
||||||
|
var downBendCount = bendLines.Count - upBendCount;
|
||||||
|
|
||||||
|
Console.WriteLine($"{upBendCount} Up {downBendCount} Down");
|
||||||
|
|
||||||
|
foreach (var bendline in upBends)
|
||||||
|
{
|
||||||
|
var etchLines = bendline.GetEtchLines(EtchLength);
|
||||||
|
|
||||||
|
foreach (var etchLine in etchLines)
|
||||||
|
{
|
||||||
|
var existing = bendLineExtractor.DxfDocument.Lines
|
||||||
|
.Where(l => IsEtchLayer(l.Layer))
|
||||||
|
.FirstOrDefault(l => l.StartPoint.IsEqualTo(etchLine.StartPoint) && l.EndPoint.IsEqualTo(etchLine.EndPoint));
|
||||||
|
|
||||||
|
if (existing != null)
|
||||||
|
{
|
||||||
|
// ensure the layer is correct and skip adding the etch line since it already exists.
|
||||||
|
existing.Layer = etchLine.Layer;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bendLineExtractor.DxfDocument.AddEntity(etchLine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bendLineExtractor.DxfDocument.Save(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsEtchLayer(Layer layer)
|
||||||
|
{
|
||||||
|
if (layer.Name == "ETCH")
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (layer.Name == "SCRIBE")
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (layer.Name == "SCRIBE-TEXT")
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
using netDxf;
|
using System;
|
||||||
using netDxf.Tables;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@@ -11,18 +9,16 @@ namespace EtchBendLines
|
|||||||
{
|
{
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
const double ETCH_LENGTH = 1.0;
|
static Etcher etcher = new Etcher();
|
||||||
|
|
||||||
static Layer BendLayer = new Layer("BEND")
|
|
||||||
{
|
|
||||||
Color = AciColor.Yellow
|
|
||||||
};
|
|
||||||
|
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
var path = AppDomain.CurrentDomain.BaseDirectory;
|
var path = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
var files = Directory.GetFiles(path, "*.dxf", SearchOption.AllDirectories);
|
var files = Directory.GetFiles(path, "*.dxf", SearchOption.AllDirectories);
|
||||||
|
|
||||||
|
etcher.EtchLength = double.Parse(ConfigurationManager.AppSettings["EtchLength"]);
|
||||||
|
etcher.MaxBendRadius = double.Parse(ConfigurationManager.AppSettings["MaxBendRadius"]);
|
||||||
|
|
||||||
if (files == null || files.Length == 0)
|
if (files == null || files.Length == 0)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"No DXF files founds. Place DXF files in \"{AppDomain.CurrentDomain.BaseDirectory}\" and run this program again.");
|
Console.WriteLine($"No DXF files founds. Place DXF files in \"{AppDomain.CurrentDomain.BaseDirectory}\" and run this program again.");
|
||||||
@@ -32,7 +28,7 @@ namespace EtchBendLines
|
|||||||
|
|
||||||
foreach (var file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
AddEtchLines(file);
|
etcher.AddEtchLines(file);
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,83 +41,6 @@ namespace EtchBendLines
|
|||||||
Console.ReadKey();
|
Console.ReadKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddEtchLines(string filePath)
|
|
||||||
{
|
|
||||||
Console.WriteLine(filePath);
|
|
||||||
|
|
||||||
var bendLineExtractor = new BendLineExtractor(filePath);
|
|
||||||
bendLineExtractor.MaxBendRadius = MaxBendRadius;
|
|
||||||
|
|
||||||
var bendLines = bendLineExtractor.GetBendLines();
|
|
||||||
|
|
||||||
if (bendLines.Count == 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine("No bend lines found.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Found {bendLines.Count} bend lines.");
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var bendLine in bendLines)
|
|
||||||
{
|
|
||||||
bendLine.Line.Layer = BendLayer;
|
|
||||||
bendLine.Line.Color = AciColor.ByLayer;
|
|
||||||
bendLine.BendNote.Layer = BendLayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
var upBends = bendLines.Where(b => b.Direction == BendDirection.Up);
|
|
||||||
var upBendCount = upBends.Count();
|
|
||||||
var downBendCount = bendLines.Count - upBendCount;
|
|
||||||
|
|
||||||
Console.WriteLine($"{upBendCount} Up {downBendCount} Down");
|
|
||||||
|
|
||||||
var partType = GetPartType(bendLines);
|
|
||||||
|
|
||||||
foreach (var bendline in upBends)
|
|
||||||
{
|
|
||||||
var etchLines = bendline.GetEtchLines(ETCH_LENGTH);
|
|
||||||
|
|
||||||
foreach (var etchLine in etchLines)
|
|
||||||
{
|
|
||||||
var existing = bendLineExtractor.DxfDocument.Lines
|
|
||||||
.Where(l => IsEtchLayer(l.Layer))
|
|
||||||
.FirstOrDefault(l => l.StartPoint.IsEqualTo(etchLine.StartPoint) && l.EndPoint.IsEqualTo(etchLine.EndPoint));
|
|
||||||
|
|
||||||
if (existing != null)
|
|
||||||
{
|
|
||||||
// ensure the layer is correct and skip adding the etch line since it already exists.
|
|
||||||
existing.Layer = etchLine.Layer;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bendLineExtractor.DxfDocument.AddEntity(etchLine);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bendLineExtractor.DxfDocument.Save(filePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool IsEtchLayer(Layer layer)
|
|
||||||
{
|
|
||||||
if (layer.Name == "ETCH")
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (layer.Name == "SCRIBE")
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (layer.Name == "SCRIBE-TEXT")
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static double MaxBendRadius
|
|
||||||
{
|
|
||||||
get { return double.Parse(ConfigurationManager.AppSettings["MaxBendRadius"]); }
|
|
||||||
}
|
|
||||||
|
|
||||||
static PartType GetPartType(List<Bend> bends)
|
static PartType GetPartType(List<Bend> bends)
|
||||||
{
|
{
|
||||||
if (bends.Count == 0)
|
if (bends.Count == 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user