#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.cs:81
Defines a body that represents a polygonal mesh (faceted or tessellated).
Definition MeshBody.cs:19
cadex.UTF16String Name()
Returns a name.
Definition ModelElement.cs:67
Element visitor with empty implementation.
Definition ModelElementVoidVisitor.cs:20
Defines a leaf node in the scene graph hierarchy.
Definition Part.cs:23
Iterates over subshapes in a shape.
Definition ShapeIterator.cs:58
Defines a connected set of faces.
Definition Shell.cs:29
Provides a solid body composed of solids.
Definition SolidBody.cs:19
Defines a topological solid.
Definition Solid.cs:25
Defines a Unicode (UTF-16) string wrapping a standard string.
Definition UTF16String.cs:17
bool IsEmpty()
Returns true if the string is empty.
Definition UTF16String.cs:96
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.
Definition BaseObject.cs:12