Skip to main content
Version: 🚧 Nightly

File mesh_view.h

Location: mesh\_view.h

Classes

Namespaces

Includes

Included by

Source

#ifndef f3d_mesh_view_h
#define f3d_mesh_view_h

#include "exception.h"
#include "export.h"

#include <array>
#include <cstdint>
#include <string>
#include <vector>

namespace f3d
{
class F3D_EXPORT mesh_view
{
public:
[[nodiscard]] virtual std::array<double, 2> getTimeRange() const
{
return { 0.0, 0.0 };
}

enum class data_type : uint8_t
{
U8,
I8,
U16,
I16,
U32,
I32,
U64,
I64,
F32,
F64
};

template<typename Functor>
static decltype(auto) dataTypeDispatch(f3d::mesh_view::data_type t, Functor&& f)
{
switch (t)
{
case f3d::mesh_view::data_type::U8:
return f.template operator()<uint8_t>();
case f3d::mesh_view::data_type::I8:
return f.template operator()<int8_t>();
case f3d::mesh_view::data_type::U16:
return f.template operator()<uint16_t>();
case f3d::mesh_view::data_type::I16:
return f.template operator()<int16_t>();
case f3d::mesh_view::data_type::U32:
return f.template operator()<uint32_t>();
case f3d::mesh_view::data_type::I32:
return f.template operator()<int32_t>();
case f3d::mesh_view::data_type::U64:
return f.template operator()<uint64_t>();
case f3d::mesh_view::data_type::I64:
return f.template operator()<int64_t>();
case f3d::mesh_view::data_type::F32:
return f.template operator()<float>();
case f3d::mesh_view::data_type::F64:
return f.template operator()<double>();
}
}

struct data_array_t
{
std::string name;
data_type type = data_type::F32;
const void* data = nullptr;
size_t components = 1;
size_t stride = 1;
};

struct memory_view_t
{
// points
size_t pointCount = 0;
data_array_t points;
data_array_t normals;
data_array_t textureCoordinates;

// faces
size_t faceOffsetCount = 0;
data_array_t faceOffsets;
size_t faceIndexCount = 0;
data_array_t faceIndices;

// scalars
std::vector<data_array_t> pointScalars;
std::vector<data_array_t> faceScalars;
};

[[nodiscard]] virtual memory_view_t getMemoryView(double time) const = 0;

mesh_view() = default;
virtual ~mesh_view() = default;
mesh_view(const mesh_view&) = delete;
mesh_view(mesh_view&&) = delete;
mesh_view& operator=(const mesh_view&) = delete;
mesh_view& operator=(mesh_view&&) = delete;
};
}

#endif