载入中...
搜索中...
未找到
SplinePathGizmo.cpp
浏览该文件的文档.
10editing::GizmoSnapshot failedSnapshot(const SplinePathDocument& document, const char* rule, std::string message) {
14 result.diagnostics.push_back(editing::ruleDiagnostic(DiagnosticCode::InvalidArgument, RuleId(rule),
19std::array<double, 3> position(const SplinePathControlPoint& point) { return {point.x, point.y, point.z}; }
25 std::sqrt(direction[0] * direction[0] + direction[1] * direction[1] + direction[2] * direction[2]);
28 output.primitives.push_back({std::move(id), "line", from, {}, direction, color, 0.0, length, dashed});
40editing::GizmoSnapshot SplinePathGizmoBuilder::build(const SplinePathDocument& document, int sampleCount,
49 if (!std::isfinite(style.nodeSize) || !std::isfinite(style.handleSize) || style.nodeSize <= 0.0 ||
59 {"spline.anchor." + point.id.value(), "sphere", anchor, {}, {}, {1.0, 0.72, 0.18, 1.0}, style.nodeSize});
70 const std::array<double, 3> incoming{point.x + point.inX, point.y + point.inY, point.z + point.inZ};
71 const std::array<double, 3> outgoing{point.x + point.outX, point.y + point.outY, point.z + point.outZ};
72 addLine(result, "spline.in-line." + point.id.value(), anchor, incoming, {0.95, 0.4, 0.3, 0.9}, true);
73 addLine(result, "spline.out-line." + point.id.value(), anchor, outgoing, {0.35, 0.9, 0.45, 0.9}, true);
75 {"spline.in." + point.id.value(), "sphere", incoming, {}, {}, {0.95, 0.4, 0.3, 1.0}, style.handleSize});
77 {"spline.out." + point.id.value(), "sphere", outgoing, {}, {}, {0.35, 0.9, 0.45, 1.0}, style.handleSize});
90 if (!polyline.ok()) return failedSnapshot(document, "editor.spline.gizmo-evaluate", polyline.status().describe());
132Result<SplinePathDragPreview> SplinePathDragSession::beginDrag(double rayOriginX, double rayOriginY,
138 EditorStatus::Rejected, RuleId("editor.spline.drag-target-required"), "Spline drag target is unavailable");
154 const std::array<double, 3> offset{origin[0] - primitive.position[0], origin[1] - primitive.position[1],
156 const double b = offset[0] * direction[0] + offset[1] * direction[1] + offset[2] * direction[2];
158 offset[0] * offset[0] + offset[1] * offset[1] + offset[2] * offset[2] - primitive.radius * primitive.radius;
171 EditorStatus::NotFound, RuleId("editor.spline.handle-not-hit"), "Pointer ray did not hit a spline handle");
177 std::find_if(points.begin(), points.end(), [&](const auto& point) { return point.id == activePoint_; });
180 EditorStatus::NotFound, RuleId("editor.spline.point-not-found"), "Picked spline point no longer exists");
188Result<SplinePathDragPreview> SplinePathDragSession::updateDrag(double rayOriginX, double rayOriginY,
196 return eve::editing::failed<SplinePathDragPreview>(EditorStatus::Conflict, RuleId("editor.spline.drag-stale"),
206 direction[0] * dragPlaneNormal_[0] + direction[1] * dragPlaneNormal_[1] + direction[2] * dragPlaneNormal_[2];
239 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.spline.drag-not-active"),
243 return eve::editing::failed<DomainOperation>(EditorStatus::Conflict, RuleId("editor.spline.drag-stale"),
bool ok() const noexcept
Whether this result represents a non-failure outcome.
Definition Result.h:480
const std::string & value() const noexcept
Returns the exact legacy or canonical compatibility spelling.
Definition Identity.h:362
Owning spline authoring document with transactional operations and schema-versioned snapshots.
Definition SplinePathDocument.h:91
Result< DomainOperation > makeSetPoint(const SplinePathControlPoint &point) const override
Make set point.
Definition SplinePathDocument.cpp:481
std::vector< SplinePathControlPoint > points() const
Return points in deterministic order and stable-id tie order.
Definition SplinePathDocument.cpp:517
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Definition SplinePathDocument.cpp:141
Result< procgen::SplinePath > compilePath() const
Compile an owning runtime spline without retaining document references.
Definition SplinePathDocument.cpp:530
const SplinePathSettings & settings() const noexcept
Return current interpolation and closure settings.
Definition SplinePathDocument.h:146
Result< SplinePathDragPreview > updateDrag(double rayOriginX, double rayOriginY, double rayOriginZ, double rayDirectionX, double rayDirectionY, double rayDirectionZ)
Project a pointer ray onto the original camera-facing drag plane and update only the draft.
Definition SplinePathGizmo.cpp:188
void cancelDrag()
Discard transient state without changing the document.
Definition SplinePathGizmo.cpp:251
Result< DomainOperation > finishDrag()
Produce one reversible point replacement operation without applying it.
Definition SplinePathGizmo.cpp:237
SplinePathDragSession(SplinePathDocument *document, int sampleCount=64)
Create an idle session borrowing an authoritative spline document.
Definition SplinePathGizmo.cpp:109
Result< SplinePathDragPreview > beginDrag(double rayOriginX, double rayOriginY, double rayOriginZ, double rayDirectionX, double rayDirectionY, double rayDirectionZ)
Pick the nearest anchor or Bezier handle sphere intersected by a world ray.
Definition SplinePathGizmo.cpp:132
Builds sampled path, anchor and Bezier handle overlay primitives.
Definition SplinePathGizmo.h:30
editing::GizmoSnapshot build(const SplinePathDocument &document, int sampleCount=64, int maximumSamples=4096, SplineGizmoStyle style={}) const
Build an immutable overlay with bounded path sampling.
Definition SplinePathGizmo.cpp:40
Diagnostic ruleDiagnostic(eve::DiagnosticCode code, RuleId rule, DiagnosticSeverity severity, std::string message)
Build a common diagnostic carrying an open editing rule identity.
Definition EditingResult.h:25
Definition HeightmapBrush.h:9
@ InvalidArgument
@ PreconditionViolation
Renderer-neutral wire primitive for authoring viewport overlays.
Definition EditingGizmo.h:12
Immutable revision-tagged overlay snapshot consumed by any viewport renderer.
Definition EditingGizmo.h:27
std::vector< GizmoPrimitive > primitives
Definition EditingGizmo.h:31
std::vector< Diagnostic > diagnostics
Definition EditingGizmo.h:32
Renderer-neutral appearance settings for spline viewport overlays.
Definition SplinePathGizmo.h:12
bool showPointLabels
Definition SplinePathGizmo.h:17
std::array< double, 4 > textColor
Definition SplinePathGizmo.h:16
std::array< double, 4 > lineColor
Definition SplinePathGizmo.h:15
Immutable renderer-neutral spline drag preview.
Definition SplinePathGizmo.h:21
SplinePathControlPoint draft
Definition SplinePathGizmo.h:25
editing::GizmoSnapshot gizmo
Definition SplinePathGizmo.h:26
std::string handle
Definition SplinePathGizmo.h:24
EditorStatus status
Definition SplinePathGizmo.h:22