#ifndef _ShapeProcessor_HeaderFile
#define _ShapeProcessor_HeaderFile
#include <cadex/Base/UTF16String.hxx>
#include <cadex/ModelData/Body.hxx>
#include <cadex/ModelData/MeshBody.hxx>
#include <cadex/ModelData/Model.hxx>
#include <cadex/ModelData/Part.hxx>
#include <cadex/ModelData/Shell.hxx>
#include <cadex/ModelData/Solid.hxx>
#include <cadex/ModelData/SolidBody.hxx>
#include <cadex/ModelData/IndexedTriangleSet.hxx>
#include <cadex/WallThickness_Data.hxx>
#include <iostream>
using namespace std;
static void PrintShapeHeader (size_t thePartIndex,
std::size_t theShapeIndex)
{
cout << "Part #" << thePartIndex << "[\"" << thePartName << "\"] - "
<< theShapeType << " #" << theShapeIndex << " has:\n";
}
{
public:
{
size_t aBodyNumber = 0;
const auto& aBodies = thePart.
Bodies();
for (const auto& aBody : aBodies) {
while (aShapeIt.HasNext()) {
const auto& aShape = aShapeIt.Next();
if (aShape.Type() == ModelData::ShapeType::Solid) {
PrintShapeHeader (myPartIndex, aPartName, "solid", aBodyNumber);
ProcessSolid (ModelData::Solid::Cast (aShape));
} else if (aShape.Type() == ModelData::ShapeType::Shell) {
PrintShapeHeader (myPartIndex, aPartName, "shell", aBodyNumber);
ProcessShell (ModelData::Shell::Cast (aShape));
}
}
++aBodyNumber;
}
++myPartIndex;
}
private:
size_t myPartIndex = 0;
};
{
public:
{
size_t aBodyNumber = 0;
const auto& aBodies = thePart.Bodies();
for (const auto& aBody : aBodies) {
while (aShapeIt.HasNext()) {
const auto& aShape = aShapeIt.Next();
if (aShape.Type() == ModelData::ShapeType::Solid) {
PrintShapeHeader (myPartIndex, aPartName, "solid", aBodyNumber);
ProcessSolid (ModelData::Solid::Cast (aShape));
}
}
}
++myPartIndex;
}
private:
size_t myPartIndex = 0;
};
{
public:
{
size_t aShapeIndex = 0;
const auto& aBodies = thePart.Bodies();
for (const auto& aBody : aBodies) {
ProcessMeshBody (aMeshBody, aPartName, aShapeIndex);
PrintShapeHeader (myPartIndex, aPartName, "solid", aShapeIndex);
ProcessSolid (aSolidBody.Solid(), aPartName, aShapeIndex++);
}
}
++myPartIndex;
}
virtual void ProcessSolid (
size_t theShapeIndex) = 0;
virtual void ProcessITS (
size_t theShapeIndex) = 0;
protected:
size_t myPartIndex = 0;
private:
{
const auto& aMeshShapes = theMeshBody.
Shapes();
for (const auto& aMeshShape : aMeshShapes) {
PrintShapeHeader (myPartIndex, thePartName, "ITS", theShapeIndex);
ProcessITS (anITS, thePartName, theShapeIndex++);
}
}
}
};
#endif
Defines a polygonal shape consisting of triangles.
Definition IndexedTriangleSet.hxx:34
Defines a body that represents a polygonal mesh (faceted or tessellated).
Definition MeshBody.hxx:32
UTF16String Name() const
Returns a name.
Definition ModelElement.cxx:55
Element visitor with empty implementation.
Definition ModelElementVisitor.hxx:64
Defines a leaf node in the scene graph hierarchy.
Definition Part.hxx:34
Iterates over subshapes in a shape.
Definition ShapeIterator.hxx:32
Defines a connected set of faces.
Definition Shell.hxx:32
Provides a solid body composed of solids.
Definition SolidBody.hxx:30
Defines a topological solid.
Definition Solid.hxx:32
Defines a Unicode (UTF-16) string wrapping a standard string.
Definition UTF16String.hxx:30
bool IsEmpty() const
Returns true if the string is empty.
Definition UTF16String.cxx:336
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.
Definition LicenseManager_LicenseError.hxx:30