载入中...
搜索中...
未找到
VoxelCatalogEditor.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
15
16#include <cstdint>
17#include <string>
18#include <vector>
19
20namespace eve::voxel_editor {
21
24
36public:
38 explicit VoxelCatalogEditor(std::string targetId);
39
42
44 const voxel_editing::VoxelCatalogTarget& target() const noexcept { return target_; }
45
50 [[nodiscard]] voxel_editing::Result<void> configureWorkspace(editor::EditorWorkspace& workspace) const;
51
52 [[nodiscard]] voxel_editing::Result<void> selectModel(std::string id);
53 [[nodiscard]] voxel_editing::Result<void> setTool(std::string tool);
54 [[nodiscard]] voxel_editing::Result<void> setViewport(float width, float height);
55 [[nodiscard]] voxel_editing::Result<void> orbit(float yawDelta, float pitchDelta);
56 [[nodiscard]] voxel_editing::Result<void> pointerDown(float x, float y);
66 [[nodiscard]] voxel_editing::Result<void> pointerWorldRay(float ox, float oy, float oz, float dx, float dy,
67 float dz);
69 [[nodiscard]] voxel_editing::Result<void> setVoxel(int x, int y, int z, bool occupied);
71 [[nodiscard]] voxel_editing::Result<void> setSelectedSocket(std::string tag, std::string kind);
73 [[nodiscard]] voxel_editing::Result<void> selectFace(int face);
75 [[nodiscard]] voxel_editing::Result<void> createModel(std::string id, std::string name, int sizeX, int sizeY,
76 int sizeZ);
78 [[nodiscard]] voxel_editing::Result<void> deleteSelectedModel();
79
84
86 bool canUndo() const noexcept { return transactions_.canUndo(); }
88 bool canRedo() const noexcept { return transactions_.canRedo(); }
90 std::uint64_t revision() const noexcept { return target_.revision(); }
92 std::uint64_t previewRevision() const noexcept { return previewRevision_; }
94 std::string selectedId() const { return selectedId_; }
96 std::string toolName() const;
98 int selectedFace() const noexcept { return selectedFace_; }
100 float orbitYaw() const noexcept { return yaw_; }
102 float orbitPitch() const noexcept { return pitch_; }
103
105 int modelCount() const { return static_cast<int>(target_.models().size()); }
107 std::string modelId(int index) const;
109 std::string modelName(int index) const;
111 std::string modelFill(int index) const;
113 bool isModelSelected(int index) const;
114
116 int voxelCount() const;
118 int voxelX(int index) const;
120 int voxelY(int index) const;
122 int voxelZ(int index) const;
124 int modelSizeX() const;
126 int modelSizeY() const;
128 int modelSizeZ() const;
129
131 int screenVoxelCount() const { return static_cast<int>(screen_.size()); }
133 float screenVoxelX(int index) const;
135 float screenVoxelY(int index) const;
137 float screenVoxelW(int index) const;
139 float screenVoxelH(int index) const;
140
142 std::string selectedSocketTag() const;
144 std::string selectedSocketKind() const;
146 int joinPartnerCount() const { return static_cast<int>(joinPartners_.size()); }
148 std::string joinPartnerId(int index) const;
149
150private:
151 struct ScreenVoxel {
152 float x = 0;
153 float y = 0;
154 float w = 0;
155 float h = 0;
156 float depth = 0;
157 };
158
159 [[nodiscard]] voxel_editing::Result<void> commit(
161 [[nodiscard]] voxel_editing::Result<void> refreshPreview();
162 void seedProject();
163 void rebuildScreen();
164 [[nodiscard]] voxel_editing::Result<void> applyPick(const voxel_editing::VoxelPick& pick);
165 void cameraAxes(float& fx, float& fy, float& fz, float& rx, float& ry,
166 float& rz, float& ux, float& uy, float& uz) const;
167 editor::SelectionSnapshot selection() const;
174 const voxel_editing::VoxelModelValue* selectedModel() const;
181 static const char* fillName(voxel_editing::VoxelCellFill fill);
182
186 std::vector<ScreenVoxel> screen_;
187 std::vector<voxel_editing::ObjectId> joinPartners_;
188 std::string selectedId_ = "cube";
189 VoxelSculptTool tool_ = VoxelSculptTool::Attach;
190 int selectedFace_ = 0;
191 float viewportW_ = 640.0f;
192 float viewportH_ = 400.0f;
193 float yaw_ = 0.7f;
194 float pitch_ = 0.45f;
195 float distance_ = 18.0f;
196 std::uint64_t txSequence_ = 0;
197 std::uint64_t previewRevision_ = 0;
198};
199
200} // namespace eve::voxel_editor
ActionParameterOperation operation
float w
Definition AnimClip.cpp:738
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
std::string label
#define EVENGINE_API_EDITORS
Definition Export.h:112
int h
std::uint32_t height
std::uint32_t width
TokenKind kind
std::string name
const std::string * tag
std::uint32_t targetId
float dz
float dy
float dx
bool occupied
uint32_t index
std::uint32_t depth
double oy
double ox
MagicaVoxel-style sculpted models: bounded occupancy grids and hull sockets.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
In-process authority for a single editable runtime or document target.
Composition model shared by project-specific developer and runtime editors.
Local transaction coordinator backed by an injected edit authority.
Revisioned project of MagicaVoxel-style sculpted models.
Workspace controller for a MagicaVoxel-style voxel sculpt project.
int joinPartnerCount() const
Join partner count.
std::string selectedId() const
Selected id.
float orbitPitch() const noexcept
Orbit pitch.
const voxel_editing::VoxelCatalogTarget & target() const noexcept
Target.
VoxelCatalogEditor & operator=(const VoxelCatalogEditor &)=delete
int selectedFace() const noexcept
Selected face.
float orbitYaw() const noexcept
Orbit yaw.
bool canRedo() const noexcept
Can redo.
VoxelCatalogEditor(const VoxelCatalogEditor &)=delete
std::uint64_t revision() const noexcept
Revision.
std::uint64_t previewRevision() const noexcept
Preview revision.
bool canUndo() const noexcept
Can undo.
int screenVoxelCount() const
Screen voxel count.
VoxelCellFill
Derived occupancy of a sculpted object.
VoxelSculptTool
MagicaVoxel-like brush: attach on the previous cell, or erase the hit cell.
SelectionSnapshot public API.
One MagicaVoxel-style object: a bounded occupancy grid.
DDA pick against a sculpted model.