载入中...
搜索中...
未找到
VoxelCatalog.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
13
14#include <array>
15#include <cstdint>
16#include <string>
17#include <string_view>
18#include <vector>
19
20namespace eve::voxel_editing {
21
27using editing::Result;
49
51inline constexpr int kVoxelModelMaxSize = 32;
53inline constexpr int kVoxelModelMaxOccupied = 4096;
54
57
60
66
68struct VoxelCoord {
69 int x = 0;
70 int y = 0;
71 int z = 0;
72};
73
77 std::string name;
78 int sizeX = 8;
79 int sizeY = 8;
80 int sizeZ = 8;
81 std::array<VoxelSocket, 6> sockets{};
82 std::vector<VoxelCoord> voxels;
83};
84
86struct VoxelPick {
87 bool hit = false;
88 bool canAttach = false;
89 int hitX = 0;
90 int hitY = 0;
91 int hitZ = 0;
92 int prevX = 0;
93 int prevY = 0;
94 int prevZ = 0;
95};
96
101[[nodiscard]] VoxelSocketKind voxelSocketKindFromName(std::string_view name);
102
110
113
115[[nodiscard]] int voxelOppositeFace(int face);
116
119
121[[nodiscard]] bool isVoxelModelOccupied(const VoxelModelValue& model, int x, int y, int z);
122
128 float oz, float dx, float dy, float dz,
129 float maxDistance);
130
133 public virtual IEditableTarget,
136 public IPropertyProvider,
138public:
140 explicit VoxelCatalogTarget(std::string id);
141
143 static CapabilityId propertyCapabilityId() { return CapabilityId("eve.editor.target.voxel-catalog-properties"); }
144
146 TargetId targetId() const override { return TargetId(id_); }
148 TargetDescriptor describe() const override;
149
156 void* queryCapability(const CapabilityId&) override;
157
159 Result<void> applyDomainOperation(const DomainOperation&) override;
161 std::unique_ptr<IDomainOperationTarget> cloneDomainState() const override;
163 Result<void> commitDomainState(std::unique_ptr<IDomainOperationTarget>) override;
165 eve::Result<eve::Revision> currentRevision(const SelectionSnapshot&) const override;
167 PropertySchema schema(const SelectionSnapshot&) const override;
169 PropertyReadResult read(const SelectionSnapshot&, const PropertyPath&) const override;
172 PropertySetMode) const override;
174 Result<DomainOperation> makeReset(const SelectionSnapshot&, const PropertyPath&) const override;
175
177 [[nodiscard]] Result<DomainOperation> makeCreateModel(const VoxelModelValue&) const;
179 [[nodiscard]] Result<DomainOperation> makeDeleteModel(const ObjectId&) const;
181 [[nodiscard]] Result<DomainOperation> makeSetVoxel(const ObjectId& model, int x, int y, int z,
182 bool occupied) const;
183
185 const std::vector<VoxelModelValue>& models() const { return models_; }
193 const VoxelModelValue* findModel(const ObjectId&) const;
194
196 std::vector<EditorDiagnostic> validate() const;
198 EditorValue snapshotValue() const override;
200 Result<void> loadSnapshot(const EditorValue&);
201
203 [[nodiscard]] std::vector<ObjectId> hullJoinPartners(const ObjectId& model, int face) const;
204
205private:
207 bool matches(const SelectionSnapshot&) const;
209 EditorValue contentValue() const;
211 Result<DomainOperation> replacement(EditorValue, std::string = {}) const;
218 VoxelModelValue* findModelMut(const ObjectId&);
219
220 std::string id_;
221 std::vector<VoxelModelValue> models_;
222};
223
224} // namespace eve::voxel_editing
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
#define EVENGINE_API_ORCHESTRATION
Definition Export.h:111
TokenKind kind
std::string name
MeleePoint3 b
Definition MeleeHit.cpp:41
MeleePoint3 a
Definition MeleeHit.cpp:40
glm::mat4 model
float dz
float dy
float dx
bool occupied
double oy
double ox
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
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.
Optional capability exposing a deterministic, persistence-safe editing snapshot.
UI-independent property access for an immutable selection snapshot.
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
Revisioned project of MagicaVoxel-style sculpted models.
TargetId targetId() const override
Target id.
const std::vector< VoxelModelValue > & models() const
Models.
static CapabilityId propertyCapabilityId()
Property capability id.
eve::Severity DiagnosticSeverity
std::uint64_t Revision
StrongId< TargetIdTag > TargetId
Definition EditingIds.h:57
eve::Diagnostic Diagnostic
StrongId< ObjectIdTag > ObjectId
Definition EditingIds.h:65
PropertyType
PropertyType public API.
StrongId< RuleIdTag > RuleId
Definition EditingIds.h:60
PropertySetMode
PropertySetMode public API.
PropertyFlag
PropertyFlag public API.
eve::StatusCode Status
StrongId< CapabilityIdTag > CapabilityId
Definition EditingIds.h:61
PropertyReadState
PropertyReadState public API.
VoxelSocketKind
Polarity of one authored join socket.
VoxelCellFill voxelClassifyModelFill(const VoxelModelValue &model)
Classify a sculpted model as empty, partial, or a solid cube.
constexpr int kVoxelModelMaxOccupied
Occupied-cell budget for one sculpted object.
VoxelSocketKind voxelSocketKindFromName(std::string_view name)
Parse a socket kind name.
bool canJoinVoxelSockets(const VoxelSocket &a, const VoxelSocket &b)
True when two facing sockets may join.
bool isVoxelModelOccupied(const VoxelModelValue &model, int x, int y, int z)
True when model contains an occupied cell at (x,y,z).
int voxelOppositeFace(int face)
Opposite FaceDir index in PosX/NegX/PosY/NegY/PosZ/NegZ order.
constexpr int kVoxelModelMaxSize
Inclusive maximum MagicaVoxel-like object edge (cells).
const char * voxelSocketKindName(VoxelSocketKind kind)
Stable serialized name for a socket kind. @ownership Observed static string; callers must not free it...
VoxelCellFill
Derived occupancy of a sculpted object.
editing::Revision Revision
VoxelPick pickVoxelModel(const VoxelModelValue &model, float ox, float oy, float oz, float dx, float dy, float dz, float maxDistance)
Raycast occupied cells with MagicaVoxel-style previous-cell attach.
StatusCode
Stable outcome category for an operation.
Definition Status.h:27
Severity
Stable severity of a diagnostic, independent of its display text.
Definition Diagnostic.h:20
DomainOperation public API.
EditRegion public API.
PropertyDescriptor public API.
PropertyReadResult public API.
EVENGINE_API_PLATFORM public API.
SelectionSnapshot public API.
Stable discovery metadata exposed by every editable target.
One occupied cell inside a sculpted model.
One MagicaVoxel-style object: a bounded occupancy grid.
std::array< VoxelSocket, 6 > sockets
std::vector< VoxelCoord > voxels
DDA pick against a sculpted model.
One face socket: matching tag plus compatible polarity.