File scene_snapshot.h
File List > core > scene_snapshot.h
Go to the documentation of this file
#pragma once
#include <uipc/core/scene.h>
#include <uipc/geometry/geometry_commit.h>
#include <uipc/core/object_collection.h>
namespace uipc::core
{
class UIPC_CORE_API SceneSnapshot
{
friend class Scene;
friend class SceneSnapshotCommit;
friend class SceneFactory;
public:
SceneSnapshot(const Scene& scene);
SceneSnapshot(const SceneSnapshot&) = default;
SceneSnapshot(SceneSnapshot&&) = default;
SceneSnapshot& operator=(const SceneSnapshot&) = default;
SceneSnapshot& operator=(SceneSnapshot&&) = default;
private:
SceneSnapshot() = default;
Json m_config;
ObjectCollectionSnapshot m_object_collection;
vector<ContactElement> m_contact_elements;
unordered_map<IndexT, S<geometry::Geometry>> m_geometries;
unordered_map<IndexT, S<geometry::Geometry>> m_rest_geometries;
S<geometry::AttributeCollection> m_contact_models;
};
class UIPC_CORE_API SceneSnapshotCommit
{
friend class SceneFactory;
friend SceneSnapshotCommit UIPC_CORE_API operator-(const SceneSnapshot& dst,
const SceneSnapshot& src);
friend class internal::Scene;
public:
SceneSnapshotCommit() = default;
SceneSnapshotCommit(const SceneSnapshot& dst, const SceneSnapshot& src);
bool is_valid() const noexcept { return m_is_valid; }
const Json& config() const noexcept { return m_config; }
const ObjectCollectionSnapshot& object_collection() const noexcept
{
return m_object_collection;
}
const vector<ContactElement>& contact_elements() const noexcept
{
return m_contact_elements;
}
const unordered_map<IndexT, S<geometry::GeometryCommit>>& geometries() const noexcept
{
return m_geometries;
}
const unordered_map<IndexT, S<geometry::GeometryCommit>>& rest_geometries() const noexcept
{
return m_rest_geometries;
}
const geometry::AttributeCollectionCommit& contact_models() const noexcept
{
return *m_contact_models;
}
private:
bool m_is_valid = true;
// Fully Copy:
Json m_config;
ObjectCollectionSnapshot m_object_collection;
vector<ContactElement> m_contact_elements;
// Full Copy Geometries/ Diff Copy AttributeCollection
unordered_map<IndexT, S<geometry::GeometryCommit>> m_geometries;
unordered_map<IndexT, S<geometry::GeometryCommit>> m_rest_geometries;
// Diff Copy AttributeCollection
S<geometry::AttributeCollectionCommit> m_contact_models;
};
SceneSnapshotCommit UIPC_CORE_API operator-(const SceneSnapshot& dst,
const SceneSnapshot& src);
} // namespace uipc::core