Tooling segments

This commit is contained in:
AJ
2018-10-31 13:05:58 -04:00
parent 2efa05777b
commit 6bc5cbf79e
3 changed files with 126 additions and 157 deletions

View File

@@ -1,108 +1,87 @@
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Linq;
using System.Xml.Linq;
namespace CincyLib.PressBrake
{
public class LowerTool
{
/// <summary>
/// The name of the file
/// </summary>
public string Name;
public LowerTool()
{
Segments = new List<ToolSegment>();
}
public string ToolName;
public int Type;
public double Length;
public double Height;
public double Clearance;
public double MaxLoad;
public double Angle;
public double Radius;
public double VOpening;
public double Offset;
public string FilePath { get; set; }
public List<ToolSegment> Segments { get; set; }
public int Version { get; set; }
public string ToolName { get; set; }
public int Type { get; set; }
public double Length { get; set; }
public double Height { get; set; }
public double Clearance { get; set; }
public double MaxLoad { get; set; }
public double Angle { get; set; }
public double Radius { get; set; }
public double VOpening { get; set; }
public double Offset { get; set; }
public double BendRadius()
public double DevelopedRadius()
{
return VOpening * 0.15625;
}
public bool IsSegmented
{
get { return Segments.Count > 0; }
}
public static LowerTool Load(string xmlpath)
{
var lowerTool = new LowerTool();
var reader = XmlReader.Create(xmlpath);
var stream = File.OpenRead(xmlpath);
var tool = Load(stream);
tool.FilePath = xmlpath;
return tool;
}
try
public static LowerTool Load(Stream stream)
{
var t = new LowerTool();
var xml = XDocument.Load(stream);
var data = xml.Root.Element("LowerTool");
t.Version = data.Attribute("Version").ToInt();
t.ToolName = data.Attribute("ToolName")?.Value;
t.Type = data.Attribute("Type").ToInt();
t.Height = data.Attribute("Height").ToDouble();
t.Clearance = data.Attribute("Clearance").ToDouble();
t.MaxLoad = data.Attribute("MaxLoad").ToDouble();
t.Angle = data.Attribute("Angle").ToDouble();
t.Radius = data.Attribute("Radius").ToDouble();
t.VOpening = data.Attribute("VeeOpening").ToDouble();
foreach (var item in data.Element("SegmentList").Descendants("ToolSeg"))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "LowerTool":
lowerTool.Name = Path.GetFileNameWithoutExtension(xmlpath);
lowerTool.ToolName = reader.GetAttribute("ToolName");
var seg = new ToolSegment();
seg.Length = item.Attribute("Length").ToDouble();
seg.Quantity = item.Attribute("Quantity").ToInt(1);
int type;
int.TryParse(reader.GetAttribute("Type"), out type);
lowerTool.Type = type;
double length;
double.TryParse(reader.GetAttribute("Length"), out length);
lowerTool.Length = length;
double height;
double.TryParse(reader.GetAttribute("Height"), out height);
lowerTool.Height = height;
double clearance;
double.TryParse(reader.GetAttribute("Clearance"), out clearance);
lowerTool.Clearance = clearance;
double maxload;
double.TryParse(reader.GetAttribute("MaxLoad"), out maxload);
lowerTool.MaxLoad = maxload;
double angle;
double.TryParse(reader.GetAttribute("Angle"), out angle);
lowerTool.Angle = angle;
double radius;
double.TryParse(reader.GetAttribute("Radius"), out radius);
lowerTool.Radius = radius;
double vopening;
double.TryParse(reader.GetAttribute("VeeOpening"), out vopening);
lowerTool.VOpening = vopening;
double offset;
double.TryParse(reader.GetAttribute("Offset"), out offset);
lowerTool.Offset = offset;
break;
}
}
}
}
catch (SystemException ex)
{
Debug.WriteLine("Error loading: " + xmlpath);
Debug.WriteLine(ex.Message);
}
finally
{
if (reader != null)
reader.Close();
t.Segments.Add(seg);
}
return lowerTool;
var totalSegLength = t.Segments.Sum(i => i.Length * i.Quantity);
if (totalSegLength > 0)
t.Length = totalSegLength;
return t;
}
public void Print()
{
Console.WriteLine(Name);
Console.WriteLine(ToolName);
Console.WriteLine(" Length: {0}", Length);
Console.WriteLine(" Angle: {0}", Angle);
Console.WriteLine(" Radius: {0}", Radius);
@@ -112,7 +91,7 @@ namespace CincyLib.PressBrake
Console.WriteLine(" MaxLoad: {0}", MaxLoad);
Console.WriteLine(" Offset: {0}", Offset);
Console.WriteLine(" Type: {0}", Type);
Console.WriteLine(" Bend Radius: {0}", BendRadius());
Console.WriteLine(" Bend Radius: {0}", DevelopedRadius());
}
}
}

View File

@@ -23,7 +23,7 @@ namespace CincyLib.PressBrake
public double BendRadius()
{
double r1 = lowerTool.BendRadius();
double r1 = lowerTool.DevelopedRadius();
double r2 = upperTool.Radius;
return r1 > r2 ? r1 : r2;
}
@@ -48,7 +48,7 @@ namespace CincyLib.PressBrake
public void Print()
{
Console.WriteLine("{0} / {1}", lowerTool.Name, upperTool.Name);
Console.WriteLine("{0} / {1}", lowerTool.ToolName, upperTool.ToolName);
Console.WriteLine(" Generates an inside radius of: {0}", BendRadius().ToString("n3") + "\"");
Console.WriteLine(" Usable on materials less than or equal to: {0}", BendRadius().ToString("n3") + "\"");
Console.WriteLine(" Capable of bends greater than or equal to: {0}", lowerTool.Angle.ToString("n0") + " degrees");

View File

@@ -1,99 +1,83 @@
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Linq;
using System.Xml.Linq;
namespace CincyLib.PressBrake
{
public class UpperTool
{
/// <summary>
/// The name of the file
/// </summary>
public string Name;
public UpperTool()
{
Segments = new List<ToolSegment>();
}
public string ToolName;
public double Length;
public double Angle;
public double Radius;
public double Height;
public double Clearance;
public double MaxLoad;
public double Offset;
public int Type;
public List<ToolSegment> Segments { get; set; }
public string FilePath { get; set; }
public int Version { get; set; }
public string ToolName { get; set; }
public double Length { get; set; }
public double Angle { get; set; }
public double Radius { get; set; }
public double Height { get; set; }
public double Clearance { get; set; }
public double MaxLoad { get; set; }
public double Offset { get; set; }
public int Type { get; set; }
public bool IsSegmented
{
get { return Segments.Count > 0; }
}
public static UpperTool Load(string xmlpath)
{
var stream = File.OpenRead(xmlpath);
var tool = Load(stream);
tool.FilePath = xmlpath;
return tool;
}
public static UpperTool Load(Stream stream)
{
var upperTool = new UpperTool();
var reader = XmlReader.Create(xmlpath);
try
var xml = XDocument.Load(stream);
var data = xml.Root.Element("UpperTool");
upperTool.Version = data.Attribute("Version").ToInt();
upperTool.ToolName = data.Attribute("ToolName")?.Value;
upperTool.Type = data.Attribute("Type").ToInt();
upperTool.Length = data.Attribute("Length").ToDouble();
upperTool.Height = data.Attribute("Height").ToDouble();
upperTool.Clearance = data.Attribute("Clearance").ToDouble();
upperTool.MaxLoad = data.Attribute("MaxLoad").ToDouble();
upperTool.Angle = data.Attribute("Angle").ToDouble();
upperTool.Radius = data.Attribute("Radius").ToDouble();
upperTool.Offset = data.Attribute("Radius").ToDouble();
foreach (var item in data.Element("SegmentList").Descendants("ToolSeg"))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "UpperTool":
upperTool.Name = Path.GetFileNameWithoutExtension(xmlpath);
upperTool.ToolName = reader.GetAttribute("ToolName");
var seg = new ToolSegment();
seg.Length = item.Attribute("Length").ToDouble();
seg.Quantity = item.Attribute("Quantity").ToInt(1);
int type;
int.TryParse(reader.GetAttribute("Type"), out type);
upperTool.Type = type;
double length;
double.TryParse(reader.GetAttribute("Length"), out length);
upperTool.Length = length;
double height;
double.TryParse(reader.GetAttribute("Height"), out height);
upperTool.Height = height;
double clearance;
double.TryParse(reader.GetAttribute("Clearance"), out clearance);
upperTool.Clearance = clearance;
double maxload;
double.TryParse(reader.GetAttribute("MaxLoad"), out maxload);
upperTool.MaxLoad = maxload;
double angle;
double.TryParse(reader.GetAttribute("Angle"), out angle);
upperTool.Angle = angle;
double radius;
double.TryParse(reader.GetAttribute("Radius"), out radius);
upperTool.Radius = radius;
double offset;
double.TryParse(reader.GetAttribute("Offset"), out offset);
upperTool.Offset = offset;
break;
}
}
}
}
catch (SystemException ex)
{
Debug.WriteLine("Error loading: " + xmlpath);
Debug.WriteLine(ex.Message);
}
finally
{
if (reader != null)
reader.Close();
upperTool.Segments.Add(seg);
}
var totalSegLength = upperTool.Segments.Sum(i => i.Length * i.Quantity);
if (totalSegLength > 0)
upperTool.Length = totalSegLength;
return upperTool;
}
public void Print()
{
Console.WriteLine(Name);
Console.WriteLine(ToolName);
Console.WriteLine(" Length: {0}", Length);
Console.WriteLine(" Angle: {0}", Angle);
Console.WriteLine(" Radius: {0}", Radius);
@@ -104,4 +88,10 @@ namespace CincyLib.PressBrake
Console.WriteLine(" Type: {0}", Type);
}
}
public class ToolSegment
{
public double Length { get; set; }
public int Quantity { get; set; }
}
}