载入中...
搜索中...
未找到
MapDocument.cpp
浏览该文件的文档.
43 if (!id || id->empty() || !name || name->empty() || !kind || !kinds.contains(*kind) || !visible || !locked ||
45 return eve::editing::failed<MapLayerRecord>(EditorStatus::Rejected, RuleId("editor.map.invalid-layer"),
53 {"id", point.id.value()}, {"x", point.x}, {"y", point.y}, {"z", point.z}, {"width", point.width}};
67 if (!id || id->empty() || !x || !y || !z || !width || *width <= 0.0 || !std::isfinite(*x) || !std::isfinite(*y) ||
98 if (!id || id->empty() || !layer || layer->empty() || !name || name->empty() || !material || !closed || !points ||
100 return eve::editing::failed<MapRoadRecord>(EditorStatus::Rejected, RuleId("editor.map.invalid-road"),
113 return eve::editing::failed<MapRoadRecord>(EditorStatus::Rejected, RuleId("editor.map.closed-road-point-count"),
154 if (!id || id->empty() || !layer || layer->empty() || !asset || asset->empty() || !x || !y || !z || !rx || !ry ||
162 EditorStatus::Rejected, RuleId("editor.map.nonfinite-placement"), "Placement transform must be finite");
167DomainOperation operation(std::string type, std::string inverseType, const std::string& target, EditorValue payload,
194 return capability == IMapStructureEditTarget::editorCapabilityId() ? static_cast<IMapStructureEditTarget*>(this)
213 return eve::editing::failed<void>(EditorStatus::Conflict, RuleId("editor.map.layer-order-conflict"),
246 return eve::editing::failed<void>(EditorStatus::Conflict, RuleId("editor.map.layer-order-conflict"),
252 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.map.layer-kind-in-use"),
258 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.map.layer-kind-in-use"),
271 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.map.road-layer-required"),
298 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.map.object-layer-required"),
312 return eve::editing::failed<void>(EditorStatus::NotFound, RuleId("editor.map.placement-not-found"),
331Result<void> MapDocumentTarget::commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) {
350 std::sort(result.begin(), result.end(), [](const MapLayerRecord& left, const MapLayerRecord& right) {
380 return eve::editing::failed<DomainOperation>(EditorStatus::Conflict, RuleId("editor.map.layer-exists"),
396 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.map.layer-not-found"),
399 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-locked"),
404 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-not-empty"),
410 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-not-empty"),
413 return eve::editing::applied<DomainOperation>(operation("map.layer.delete.v1", "map.layer.create.v1", id_,
421 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.map.layer-not-found"),
459 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.road-layer-required"),
462 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-locked"),
466 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-locked"),
469 const std::string inverseType = found == roads_.end() ? "map.road.delete.v1" : "map.road.set.v1";
477 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.map.road-not-found"),
480 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-locked"),
482 return eve::editing::applied<DomainOperation>(operation("map.road.delete.v1", "map.road.set.v1", id_,
486Result<DomainOperation> MapDocumentTarget::makeSetPlacement(const MapPlacementRecord& placement) const {
489 return eve::editing::failed<DomainOperation>(parsed.code(), RuleId("editor.map.invalid-placement"),
493 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.object-layer-required"),
496 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-locked"),
500 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-locked"),
502 const EditorValue inverse = found == placements_.end() ? placementValue(placement) : placementValue(found->second);
503 const std::string inverseType = found == placements_.end() ? "map.placement.delete.v1" : "map.placement.set.v1";
508Result<DomainOperation> MapDocumentTarget::makeDeletePlacement(const StableId& placement) const {
511 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.map.placement-not-found"),
514 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.map.layer-locked"),
516 return eve::editing::applied<DomainOperation>(operation("map.placement.delete.v1", "map.placement.set.v1", id_,
529 DiagnosticSeverity::Error, "Multiple map layers share visual order " + std::to_string(layer.order)));
558 DiagnosticSeverity::Error, "Placement references a missing or non-object layer: " + id.value()));
563MapRoadPreviewResult MapDocumentTarget::previewRoad(const StableId& roadId, int triangleBudget) const {
653 for (const MapPlacementRecord& placement : mapPlacements()) placements.push_back(placementValue(placement));
668 const auto* placements = placementsValue ? placementsValue->getIf<EditorValue::Array>() : nullptr;
670 return eve::editing::failed<void>(EditorStatus::Unsupported, RuleId("editor.map.invalid-snapshot"),
680 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.map.invalid-layer-set"),
690 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.map.invalid-road-set"),
696 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.map.invalid-placement"),
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
void setRevision(Revision revision)
Adopt a revision observed elsewhere, without advancing it.
Definition EditableTarget.h:181
void bumpRevision()
Advance the revision without touching the dirty region.
Definition EditableTarget.h:179
void setDirtyRegion(const EditRegion ®ion)
Replace the dirty region wholesale, without advancing the revision.
Definition EditableTarget.h:183
Revision revisionValue() const noexcept
Return the revision as the shared protocol revision type.
Definition EditableTarget.h:169
void widenDirty()
Mark an unknown area dirty without advancing the revision.
Definition EditableTarget.h:177
eve::OptionalRef< C > capability()
Query a capability through its interface-owned stable identity.
Definition EditableTarget.h:82
virtual void clearDirtyRegion()=0
Clears dirty region.
Deterministic owning value tree shared by authoring hosts.
Definition EditingValue.h:19
Layer, spline and placement editing capability for map presenters.
Definition MapDocument.h:100
static CapabilityId editorCapabilityId()
Stable capability id for map structure operations.
Definition MapDocument.h:105
UI-neutral map structure document with reversible domain operations.
Definition MapDocument.h:133
EditorValue snapshotValue() const
Capture deterministic map structure data.
Definition MapDocument.cpp:647
Result< DomainOperation > makeSetPlacement(const MapPlacementRecord &placement) const override
Make set placement.
Definition MapDocument.cpp:486
Result< DomainOperation > makeDeletePlacement(const StableId &placement) const override
Make delete placement.
Definition MapDocument.cpp:508
std::unique_ptr< IDomainOperationTarget > cloneDomainState() const override
Clones domain state.
Definition MapDocument.cpp:327
Result< DomainOperation > makeSetLayer(const MapLayerRecord &layer) const override
Make set layer.
Definition MapDocument.cpp:418
Result< DomainOperation > makeDeleteRoad(const StableId &road) const override
Make delete road.
Definition MapDocument.cpp:474
Result< DomainOperation > makeSetRoad(const MapRoadRecord &road) const override
Make set road.
Definition MapDocument.cpp:452
Result< DomainOperation > makeCreateLayer(const MapLayerRecord &layer) const override
Make create layer.
Definition MapDocument.cpp:374
std::vector< MapPlacementRecord > mapPlacements() const override
Map placements.
Definition MapDocument.cpp:365
Result< void > commitDomainState(std::unique_ptr< IDomainOperationTarget > candidate) override
Commits domain state.
Definition MapDocument.cpp:331
Result< void > loadSnapshot(const EditorValue &snapshot)
Atomically load schema-version-one map structure data.
Definition MapDocument.cpp:660
std::vector< EditorDiagnostic > validate() const
Validate layers, spline geometry and placement references.
Definition MapDocument.cpp:521
void * queryCapability(const CapabilityId &capability) override
Query an optional target capability.
Definition MapDocument.cpp:193
MapRoadPreviewResult previewRoad(const StableId &road, int triangleBudget=10000) const
Build a deterministic XZ road strip for viewport preview and budget diagnostics.
Definition MapDocument.cpp:563
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Definition MapDocument.cpp:198
Result< DomainOperation > makeDeleteLayer(const StableId &layer) const override
Make delete layer.
Definition MapDocument.cpp:393
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 MapDocument.cpp:8
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ InvariantViolation
Definition Container.h:602
std::vector< ObjectRefValue > affectedObjects
Definition EditingProtocol.h:51
Stable discovery metadata exposed by every editable target.
Definition EditableTarget.h:39
std::vector< CapabilityId > capabilities
Definition EditableTarget.h:44
Stable map layer descriptor used by outliner presenters.
Definition MapDocument.h:15
Stable object placement stored on an object layer.
Definition MapDocument.h:45
Deterministic renderer-neutral road strip preview.
Definition MapDocument.h:61
std::vector< EditorDiagnostic > diagnostics
Definition MapDocument.h:67
Revision documentRevision
Definition MapDocument.h:63
double centerlineLength
Definition MapDocument.h:65
Road spline authoring record independent from rendering/mesh generation.
Definition MapDocument.h:35
std::vector< MapSplinePointRecord > points
Definition MapDocument.h:41
Stable editable control point in a road or path spline.
Definition MapDocument.h:26