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;
using System.Diagnostics; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Xml; using System.Linq;
using System.Xml.Linq;
namespace CincyLib.PressBrake namespace CincyLib.PressBrake
{ {
public class LowerTool public class LowerTool
{ {
/// <summary> public LowerTool()
/// The name of the file {
/// </summary> Segments = new List<ToolSegment>();
public string Name; }
public string ToolName; public string FilePath { get; set; }
public int Type; public List<ToolSegment> Segments { get; set; }
public double Length; public int Version { get; set; }
public double Height; public string ToolName { get; set; }
public double Clearance; public int Type { get; set; }
public double MaxLoad; public double Length { get; set; }
public double Angle; public double Height { get; set; }
public double Radius; public double Clearance { get; set; }
public double VOpening; public double MaxLoad { get; set; }
public double Offset; 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; return VOpening * 0.15625;
} }
public bool IsSegmented
{
get { return Segments.Count > 0; }
}
public static LowerTool Load(string xmlpath) public static LowerTool Load(string xmlpath)
{ {
var lowerTool = new LowerTool(); var stream = File.OpenRead(xmlpath);
var reader = XmlReader.Create(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()) var seg = new ToolSegment();
{ seg.Length = item.Attribute("Length").ToDouble();
if (reader.IsStartElement()) seg.Quantity = item.Attribute("Quantity").ToInt(1);
{
switch (reader.Name)
{
case "LowerTool":
lowerTool.Name = Path.GetFileNameWithoutExtension(xmlpath);
lowerTool.ToolName = reader.GetAttribute("ToolName");
int type; t.Segments.Add(seg);
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();
} }
return lowerTool; var totalSegLength = t.Segments.Sum(i => i.Length * i.Quantity);
if (totalSegLength > 0)
t.Length = totalSegLength;
return t;
} }
public void Print() public void Print()
{ {
Console.WriteLine(Name); Console.WriteLine(ToolName);
Console.WriteLine(" Length: {0}", Length); Console.WriteLine(" Length: {0}", Length);
Console.WriteLine(" Angle: {0}", Angle); Console.WriteLine(" Angle: {0}", Angle);
Console.WriteLine(" Radius: {0}", Radius); Console.WriteLine(" Radius: {0}", Radius);
@@ -112,7 +91,7 @@ namespace CincyLib.PressBrake
Console.WriteLine(" MaxLoad: {0}", MaxLoad); Console.WriteLine(" MaxLoad: {0}", MaxLoad);
Console.WriteLine(" Offset: {0}", Offset); Console.WriteLine(" Offset: {0}", Offset);
Console.WriteLine(" Type: {0}", Type); 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() public double BendRadius()
{ {
double r1 = lowerTool.BendRadius(); double r1 = lowerTool.DevelopedRadius();
double r2 = upperTool.Radius; double r2 = upperTool.Radius;
return r1 > r2 ? r1 : r2; return r1 > r2 ? r1 : r2;
} }
@@ -48,7 +48,7 @@ namespace CincyLib.PressBrake
public void Print() 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(" 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(" 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"); 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;
using System.Diagnostics; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Xml; using System.Linq;
using System.Xml.Linq;
namespace CincyLib.PressBrake namespace CincyLib.PressBrake
{ {
public class UpperTool public class UpperTool
{ {
/// <summary> public UpperTool()
/// The name of the file {
/// </summary> Segments = new List<ToolSegment>();
public string Name; }
public string ToolName; public List<ToolSegment> Segments { get; set; }
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 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) 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 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()) var seg = new ToolSegment();
{ seg.Length = item.Attribute("Length").ToDouble();
if (reader.IsStartElement()) seg.Quantity = item.Attribute("Quantity").ToInt(1);
{
switch (reader.Name)
{
case "UpperTool":
upperTool.Name = Path.GetFileNameWithoutExtension(xmlpath);
upperTool.ToolName = reader.GetAttribute("ToolName");
int type; upperTool.Segments.Add(seg);
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();
} }
var totalSegLength = upperTool.Segments.Sum(i => i.Length * i.Quantity);
if (totalSegLength > 0)
upperTool.Length = totalSegLength;
return upperTool; return upperTool;
} }
public void Print() public void Print()
{ {
Console.WriteLine(Name); Console.WriteLine(ToolName);
Console.WriteLine(" Length: {0}", Length); Console.WriteLine(" Length: {0}", Length);
Console.WriteLine(" Angle: {0}", Angle); Console.WriteLine(" Angle: {0}", Angle);
Console.WriteLine(" Radius: {0}", Radius); Console.WriteLine(" Radius: {0}", Radius);
@@ -104,4 +88,10 @@ namespace CincyLib.PressBrake
Console.WriteLine(" Type: {0}", Type); Console.WriteLine(" Type: {0}", Type);
} }
} }
public class ToolSegment
{
public double Length { get; set; }
public int Quantity { get; set; }
}
} }