#include <cadex/Base_String.hxx>
#include <cadex/LicenseManager_Activate.h>
#include <cadex/ModelData_Assembly.hxx>
#include <cadex/ModelData_Instance.hxx>
#include <cadex/ModelData_ModelReader.hxx>
#include <cadex/ModelData_Part.hxx>
#include <cadex/ModelData_SceneGraphElement.hxx>
#include "../../helpers/executable_path.hxx"
#include <iostream>
#include <unordered_map>
using namespace std;
typedef unordered_map<ModelData_SceneGraphElement, size_t, ModelData_BaseObjectHash> SGEMapType;
{
return "Part";
return "Assembly";
return "Instance";
}
return "Undefined";
}
{
public:
SceneGraphVisitor () : myNestingLevel (0)
{
}
void PrintCounts()
{
cout << endl << "Total:" << endl << "name | type | count" << endl;
for (auto it = mySGEMap.begin(); it != mySGEMap.end(); ++it) {
cout << (*it).first.Name() << " | " <<
PrintSGEType ((*it).first) << " | " <<
(*it).second << endl;
}
}
protected:
{
PrintName (
"Part", thePart.
Name());
UpdateTable (thePart);
}
{
PrintName (
"Assembly", theAssembly.
Name());
UpdateTable (theAssembly);
++myNestingLevel;
return true;
}
{
--myNestingLevel;
}
{
PrintName (
"Instance", theInstance.
Name());
++myNestingLevel;
return true;
}
{
--myNestingLevel;
}
private:
{
for (size_t i = 0; i < myNestingLevel; ++i) {
cout << "--- ";
}
cout << theSGElement << ": " << theName << endl;
} else {
cout << theSGElement << ": <noname>" << endl;
}
}
{
if (!mySGEMap.insert (make_pair (theSGEElement, 1)).second) {
++mySGEMap[theSGEElement];
}
}
size_t myNestingLevel;
SGEMapType mySGEMap;
};
int main (int argc, char *argv[])
{
std::string anAbsolutePathToRuntimeKey = getExecutableDir() + "/bom_runtime_key.lic";
if (!CADExLicense_ActivateRuntimeKeyFromAbsolutePath (anAbsolutePathToRuntimeKey.c_str())) {
cerr << "Failed to activate CAD Exchanger license." << endl;
return 1;
}
if (argc != 2) {
cerr << "Usage: " << argv[0] << " <input_file>, where:" << endl;
cerr << " <input_file> is a name of the XML file to be read" << endl;
return 1;
}
const char* aSource = argv[1];
cerr << "Failed to read the file " << aSource << endl;
return 1;
}
SceneGraphVisitor aCounter;
aCounter.PrintCounts();
return 0;
}
Defines a Unicode (UTF-16) string wrapping a standard string.
Definition: Base_UTF16String.hxx:34
bool IsEmpty() const
Returns true if the string is empty.
Definition: Base_UTF16String.cxx:233
Defines a group of scene graph element.
Definition: ModelData_Assembly.hxx:33
bool IsOfType() const
Returns true if the object has a type T.
Definition: ModelData_BaseObject.hxx:57
Base_UTF16String Name() const
Definition: ModelData_BaseObject.cxx:218
Defines an occurrence of assembly or part in a scene graph.
Definition: ModelData_Instance.hxx:34
Defines a visitor of the scene graph elements.
Definition: ModelData_Model.hxx:96
Provides CAD Exchanger data model.
Definition: ModelData_Model.hxx:41
void Accept(ElementVisitor &theVisitor) const
Accepts a visitor.
Definition: ModelData_Model.cxx:738
Reads any format that CAD Exchanger can import.
Definition: ModelData_ModelReader.hxx:33
Defines a leaf node in the scene graph hiearchy.
Definition: ModelData_Part.hxx:35
Base class for part, instance and assembly.
Definition: ModelData_SceneGraphElement.hxx:39
Defines classes, types, and global functions related to CAD Exchanger.
Definition: A3DSTestLib.hxx:22