载入中...
搜索中...
未找到
SplinePathDocument.h
浏览该文件的文档.
1#pragma once
2
7
8#include <map>
9#include <memory>
10#include <string>
11#include <vector>
12
13namespace eve::procgen_editing {
14
16using editing::DomainOperation;
17using editing::EditRegion;
18using editing::IDomainOperationTarget;
19using editing::IDomainOperationTargetStaging;
20using editing::IEditableTarget;
21using editing::TargetDescriptor;
23
27 std::int64_t order = 0;
28 double x = 0.0, y = 0.0, z = 0.0;
29 double inX = 0.0, inY = 0.0, inZ = 0.0;
30 double outX = 0.0, outY = 0.0, outZ = 0.0;
31 double rollDegrees = 0.0;
32 double scaleX = 1.0, scaleY = 1.0;
33 bool breakBefore = false;
34 double pitchDegrees = 0.0, yawDegrees = 0.0;
35};
36
39 std::string kind = "catmullRom";
40 bool closed = false;
41};
42
45public:
47 virtual ~ISplinePathDocumentEditTarget() = default;
49 static CapabilityId editingCapabilityId() { return CapabilityId("eve.procgen.target.spline-path-document"); }
57 virtual Result<DomainOperation> makeInsertPointAt(int segment, double t, const StableId& point) const = 0;
59 virtual Result<DomainOperation> makeSnapPoint(const StableId& point, double gridSize) const = 0;
61 virtual Result<DomainOperation> makeSnapAll(double gridSize) const = 0;
65 virtual Result<DomainOperation> makeSetChunkBreak(const StableId& point, bool disconnected) const = 0;
68 const SplinePathControlPoint& second) const = 0;
70 virtual Result<DomainOperation> makeDeleteChunk(int chunk) const = 0;
72 virtual Result<DomainOperation> makeSetPointRotation(const StableId& point, double pitchDegrees,
73 double yawDegrees, double rollDegrees) const = 0;
79 virtual Result<DomainOperation> makeMirrorAxis(std::string_view axis) const = 0;
80};
81
88 public virtual IEditableTarget,
92public:
94 explicit SplinePathDocument(std::string id);
96 TargetId targetId() const override { return TargetId(id_); }
98 TargetDescriptor describe() const override;
105 void* queryCapability(const CapabilityId& capability) override;
107 Result<void> applyDomainOperation(const DomainOperation& operation) override;
109 [[nodiscard]] std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
111 [[nodiscard]] Result<void> commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) override;
113 Result<DomainOperation> makeSetPoint(const SplinePathControlPoint& point) const override;
115 Result<DomainOperation> makeDeletePoint(const StableId& point) const override;
117 Result<DomainOperation> makeSetSettings(const SplinePathSettings& settings) const override;
119 Result<DomainOperation> makeInsertPointAt(int segment, double t, const StableId& point) const override;
121 Result<DomainOperation> makeSnapPoint(const StableId& point, double gridSize) const override;
123 Result<DomainOperation> makeSnapAll(double gridSize) const override;
125 Result<DomainOperation> makeFlipDirection() const override;
127 Result<DomainOperation> makeSetChunkBreak(const StableId& point, bool disconnected) const override;
130 const SplinePathControlPoint& second) const override;
132 Result<DomainOperation> makeDeleteChunk(int chunk) const override;
134 Result<DomainOperation> makeSetPointRotation(const StableId& point, double pitchDegrees, double yawDegrees,
135 double rollDegrees) const override;
137 Result<DomainOperation> makeResetPointRotation(const StableId& point) const override;
139 Result<DomainOperation> makeCenterPoint(const StableId& point) const override;
141 Result<DomainOperation> makeMirrorAxis(std::string_view axis) const override;
142
144 [[nodiscard]] std::vector<SplinePathControlPoint> points() const;
146 [[nodiscard]] const SplinePathSettings& settings() const noexcept { return settings_; }
148 [[nodiscard]] Result<procgen::SplinePath> compilePath() const;
150 [[nodiscard]] EditorValue snapshotValue() const;
152 [[nodiscard]] Result<void> loadSnapshot(const EditorValue& snapshot);
153
154private:
155 std::string id_;
156 SplinePathSettings settings_;
157 std::map<StableId, SplinePathControlPoint> points_;
158};
159
162
163} // namespace eve::procgen_editing
ActionParameterOperation operation
#define EVENGINE_API_ORCHESTRATION
Definition Export.h:111
std::int32_t second
std::int32_t first
std::shared_ptr< const std::vector< glm::vec2 > > points
float t
TerrainThermalSettings settings
glm::vec3 point
Move-only operation result carrying either a value or Status.
Definition Result.h:155
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
Dirty region and revision shared by every editable document target.
Optional candidate/publish capability for atomic domain operations.
Editable-target capability that applies owning domain operations.
IEditableTarget public API.
Deterministic owning value tree shared by authoring hosts.
UI-neutral reversible spline editing capability.
static CapabilityId editingCapabilityId()
Return the stable capability id.
virtual Result< DomainOperation > makeCenterPoint(const StableId &point) const =0
Plan moving an interior control point to the midpoint of its connected neighbours.
virtual Result< DomainOperation > makeSetPoint(const SplinePathControlPoint &point) const =0
Plan creation or atomic replacement of one control point.
virtual Result< DomainOperation > makeInsertPointAt(int segment, double t, const StableId &point) const =0
Plan shape-preserving insertion into one curve segment.
virtual Result< DomainOperation > makeSetSettings(const SplinePathSettings &settings) const =0
Plan interpolation and closure settings replacement.
virtual Result< DomainOperation > makeFlipDirection() const =0
Plan reversal of traversal direction while preserving Bezier geometry.
virtual Result< DomainOperation > makeSetPointRotation(const StableId &point, double pitchDegrees, double yawDegrees, double rollDegrees) const =0
Plan absolute point-local pitch, yaw, and roll replacement.
virtual Result< DomainOperation > makeDeleteChunk(int chunk) const =0
Plan removing one zero-based disconnected chunk in one reversible operation.
virtual Result< DomainOperation > makeMirrorAxis(std::string_view axis) const =0
Plan mirroring the complete path and handles across x, y, or z.
virtual Result< DomainOperation > makeResetPointRotation(const StableId &point) const =0
Plan resetting one point-local orientation to identity.
virtual Result< DomainOperation > makeSnapAll(double gridSize) const =0
Plan snapping every anchor to a positive world-space grid in one reversible operation.
virtual ~ISplinePathDocumentEditTarget()=default
Releases ISplinePathDocumentEditTarget resources.
virtual Result< DomainOperation > makeDeletePoint(const StableId &point) const =0
Plan removal of one stable control point.
virtual Result< DomainOperation > makeSetChunkBreak(const StableId &point, bool disconnected) const =0
Plan splitting or reconnecting the chunk boundary before one point.
virtual Result< DomainOperation > makeSnapPoint(const StableId &point, double gridSize) const =0
Plan anchor snapping to a positive world-space grid size.
virtual Result< DomainOperation > makeAppendChunk(const SplinePathControlPoint &first, const SplinePathControlPoint &second) const =0
Plan appending one disconnected two-point chunk in one reversible operation.
Owning spline authoring document with transactional operations and schema-versioned snapshots.
TargetId targetId() const override
Target id.
const SplinePathSettings & settings() const noexcept
Return current interpolation and closure settings.
StrongId< TargetIdTag > TargetId
Definition EditingIds.h:57
StrongId< CapabilityIdTag > CapabilityId
Definition EditingIds.h:61
Result< procgen::SplinePath > compileSplinePathSnapshot(const EditorValue &snapshot)
Compile a version-one spline snapshot for isolated graph preview.
DomainOperation public API.
Stable discovery metadata exposed by every editable target.
Stable authoring control point for a 3D spline path.
Spline authoring settings stored independently from runtime caches.