using System;
using System.Collections.Generic;
namespace bom
{
class Program
{
static int Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine("Usage: " +
$"{System.Reflection.Assembly.GetExecutingAssembly().Location} <input_file>, where:");
Console.WriteLine($" <input_file> is a name of the file to be read");
Console.WriteLine($"");
return 1;
}
string aKey = MTKLicenseKey.Value();
if (!LicenseHelper.SetupRuntimeKey())
{
return 1;
}
try
{
}
{
Console.WriteLine(
"Failed to activate Manufacturing Toolkit license: " + theException.
what());
return 1;
}
string aSource = args[0];
if (!
new ModelReader().Read(
new UTF16String(aSource), aModel))
{
Console.WriteLine("Failed to read the file " + aSource);
return 1;
}
SceneGraphVisitor aCounter = new SceneGraphVisitor();
aCounter.PrintCounts();
return 0;
}
}
{
public SceneGraphVisitor()
{
myNestingLevel = 0;
margin = 0;
}
public void PrintCounts()
{
Console.WriteLine("Total:");
Console.WriteLine("\t{0,8:c}", "name".PadRight(margin, ' ') + " | " + "type".PadRight(margin, ' ') + " | count");
foreach (KeyValuePair<ModelElement, int> i in mySGEMap)
{
Console.WriteLine("\t{0,8:c}", i.Key.Name().ToString().PadRight(margin, ' ') + " | " + PrintSGEType(i.Key).PadRight(margin, ' ') + " | " + i.Value);
}
}
public override void Apply(
Part thePart)
{
PrintName(
"Part", thePart.
Name());
UpdateTable(thePart);
}
public override bool VisitEnter(
Assembly theAssembly)
{
PrintName(
"Assembly", theAssembly.
Name());
UpdateTable(theAssembly);
++myNestingLevel;
return true;
}
public override bool VisitEnter(
Instance theInstance)
{
PrintName(
"Instance", theInstance.
Name());
++myNestingLevel;
return true;
}
public override void VisitLeave(
Assembly theAssembly)
{
--myNestingLevel;
}
public override void VisitLeave(
Instance theInstance)
{
--myNestingLevel;
}
private void PrintName(string theModelElement, UTF16String theName)
{
for (int i = 0; i < myNestingLevel; ++i)
{
Console.Write("--- ");
}
if (!theName.IsEmpty())
{
Console.WriteLine(theModelElement + ": " + theName);
}
else
{
Console.WriteLine(theModelElement + ": <noname>");
}
margin = Math.Max(margin, (int)theName.Length());
}
{
if (!mySGEMap.ContainsKey(theModelElement))
{
mySGEMap.Add(theModelElement, 1);
}
else
{
++mySGEMap[theModelElement];
}
}
{
if (
Part.
CompareType(theElement))
{
return "Part";
}
{
return "Assembly";
}
{
return "Instance";
}
return "Undefined";
}
private int margin;
private Dictionary<ModelElement, int> mySGEMap = new Dictionary<ModelElement, int>();
private int myNestingLevel;
}
}
Defines a group of model elements.
Definition Assembly.hxx:31
static bool CompareType(const BaseObject &theObject)
Returns true if theObject is an assembly.
Definition Assembly.cxx:171
Defines an occurrence of an assembly or a part in a scene graph.
Definition Instance.hxx:29
static bool CompareType(const BaseObject &theObject)
Returns true if theObject is an instance.
Definition Instance.cxx:166
Base class for part, instance and assembly.
Definition ModelElement.hxx:37
UTF16String Name() const
Returns a name.
Definition ModelElement.cxx:54
Defines a visitor for scene graph elements.
Definition ModelElementVisitor.hxx:52
Provides MTK data model.
Definition Model.hxx:39
void Accept(ModelElementVisitor &theVisitor) const
Accepts a visitor.
Definition Model.cxx:275
Reads supported formats, see Import section.
Definition ModelReader.hxx:32
Defines a leaf node in the scene graph hierarchy.
Definition Part.hxx:32
Defines an exception thrown by a license manager when a valid license could not be acquired.
Definition LicenseError.hxx:37
const char * what() const noexcept override
Returns an error string.
Definition LicenseError.cxx:50
Provides MTK licensing activation and deactivation API.
Definition LicenseManager.hxx:33
static bool Deactivate()
Closes the active licensing session.
Definition LicenseManager.cxx:619
static bool Activate(const std::string &theDeveloperKey)
Activates MTK licensing using the development license key.
Definition LicenseManager.cxx:190
Defines classes, types, enums, and functions related to topological entities and scene graph elements...
The mtk namespace is intended to become the primary namespace for MTK and replace direct use of the c...
Definition LicenseError.hxx:27
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.
Definition LicenseError.hxx:27