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];
{
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("--- ");
}
{
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 a Unicode (UTF-16) string wrapping a standard string.
Definition UTF16String.hxx:29
bool IsEmpty() const
Returns true if the string is empty.
Definition UTF16String.cxx:333
size_t Length() const
Returns a string length in UTF16 characters.
Definition UTF16String.cxx:328
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:640
static bool Activate(const std::string &theDeveloperKey)
Activates MTK licensing using the development license key.
Definition LicenseManager.cxx:191
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