Skip to content

File geometry_factory.h

File List > geometry > geometry_factory.h

Go to the documentation of this file

#pragma once
#include <uipc/geometry/geometry.h>
#include <uipc/geometry/geometry_slot.h>
#include <uipc/geometry/geometry_commit.h>
#include <uipc/geometry/shared_attribute_context.h>

namespace uipc::geometry
{
class UIPC_CORE_API GeometryFactory
{
    class Impl;

  public:
    GeometryFactory();
    ~GeometryFactory();

    [[nodiscard]] vector<S<Geometry>> from_json(const Json& j,
                                                DeserialSharedAttributeContext& ctx);

    [[nodiscard]] Json to_json(span<Geometry*> geos, SerialSharedAttributeContext& ctx);

    [[nodiscard]] Json to_json(Geometry& geos, SerialSharedAttributeContext& ctx);

    [[nodiscard]] Json commit_to_json(const GeometryCommit&         gc,
                                      SerialSharedAttributeContext& ctx);

    [[nodiscard]] S<GeometryCommit> commit_from_json(const Json& j,
                                                     DeserialSharedAttributeContext& ctx);

    [[nodiscard]] S<GeometrySlot> create_slot(IndexT id, const Geometry& geometry);

  private:
    U<Impl> m_impl;
};
}  // namespace uipc::geometry