using System;
using System.Collections.Generic;
using PartVecType = System.Collections.Generic.List<
cadex.
ModelData.Part>;
namespace unfolder
{
class Program
{
static int Main(string[] args)
{
string aKey = MTKLicenseKey.Value();
if (!LicenseManager.Activate(aKey))
{
Console.WriteLine("Failed to activate Manufacturing Toolkit license.");
return 1;
}
if (args.Length != 2)
{
Console.WriteLine("Usage: " +
$"{System.Reflection.Assembly.GetExecutingAssembly().Location} <input_file> <output_folder>, where:");
Console.WriteLine($" <input_file> is a name of the file to be read");
Console.WriteLine($" <output_folder> is a name of the folder where DXF files with drawing to be written");
return 1;
}
string aSource = args[0];
string aDrawingPath = args[1];
Model aModel = new Model();
var aReader = new ModelReader();
if (!aReader.Read(new UTF16String(aSource), aModel)) {
Console.WriteLine($"Failed to read the file {aSource}");
return 1;
}
Console.WriteLine($"Model: {aModel.Name()}\n");
var aPartProcessor = new PartProcessor(aDrawingPath);
var aVisitor = new ModelElementUniqueVisitor(aPartProcessor);
aModel.Accept(aVisitor);
return 0;
}
class PartProcessor : ModelElementVoidVisitor
{
public PartProcessor(string theDrawingFolderPath)
{
myUnfolder = new SheetMetal_Unfolder();
myDrawingFolderPath = theDrawingFolderPath;
}
public override void Apply(Part thePart)
{
string aPartName = thePart.Name().IsEmpty() ? "noname" : thePart.Name().ToString();
var aBodyVec = thePart.Bodies();
if (aBodyVec.Count != 0)
{
for (int i = 0; i < aBodyVec.Count; ++i)
{
Body aBody = aBodyVec[i];
var aShapeIt = new ShapeIterator(aBody);
foreach (var aShape in aShapeIt)
{
if (aShape.Type() == ShapeType.Solid)
{
Console.Write($"Part #{myPartIndex} [\"{aPartName}\"] - solid #{i} has:\n");
ProcessSolid(Solid.Cast(aShape), aPartName, i);
}
else if (aShape.Type() == ShapeType.Shell)
{
Console.Write($"Part #{myPartIndex} [\"{aPartName}\"] - shell #{i} has:\n");
ProcessShell(Shell.Cast(aShape), aPartName, i);
}
}
}
}
++myPartIndex;
}
public void ProcessSolid(Solid theSolid, string thePartName, int theShapeIndex)
{
SheetMetal_FlatPattern aFlatPattern = myUnfolder.Perform(theSolid);
PrintFlatPatternInfo(aFlatPattern);
}
public void ProcessShell(Shell theShell, string thePartName, int theShapeIndex)
{
SheetMetal_FlatPattern aFlatPattern = myUnfolder.Perform(theShell);
PrintFlatPatternInfo(aFlatPattern);
}
SheetMetal_Unfolder myUnfolder;
string myDrawingFolderPath;
private int myPartIndex = 0;
}
static void PrintFlatPatternInfo(SheetMetal_FlatPattern theFlatPattern)
{
if (theFlatPattern.IsNull())
{
Console.WriteLine($" Failed to create flat pattern.");
return;
}
Console.WriteLine($" Flat Pattern with:");
Console.WriteLine($" length: {theFlatPattern.Length()} mm");
Console.WriteLine($" width: {theFlatPattern.Width()} mm");
Console.WriteLine($" thickness: {theFlatPattern.Thickness()} mm");
Console.WriteLine($" perimeter: {theFlatPattern.Perimeter()} mm");
}
}
}
Defines classes, types, enums, and functions related to topological entities and scene graph elements...
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.