载入中...
搜索中...
未找到
RoadNetworkEditApply.cpp
浏览该文件的文档.
11EditorResult<void> RoadNetworkEditTarget::applyDomainOperation(const editing::DomainOperation& operation) {
126 return reject<void>("editor.road.reconnect-payload", "Road endpoint reconnect payload is invalid");
157 return reject<void>("editor.road.reattach-payload", "Road endpoint reattach payload is invalid");
178 if (!decodeSplit(operation.payload, edgeId, controlPointIndex, junctionRadius, nodeId, secondEdgeId))
181 auto split = candidate.splitEdge(edgeId, controlPointIndex, junctionRadius, nodeId, secondEdgeId);
184 return reject<void>("editor.road.split-identity", "Road split reserved identities no longer match",
191 if (!decodePositionSplit(operation.payload, edgeId, position, maxDistance, junctionRadius, nodeId,
193 return reject<void>("editor.road.split-position-payload", "Road position split payload is invalid");
195 auto split = candidate.splitEdgeAtPosition(edgeId, position, maxDistance, junctionRadius, nodeId,
207 if (!decodeConnectAtPosition(operation.payload, edgeId, position, maxDistance, junctionRadius, nodeId,
212 auto split = candidate.splitEdgeAtPosition(edgeId, position, maxDistance, junctionRadius, nodeId,
227 if (!decodeDisconnectAtPosition(operation.payload, original, originalLinks, originalBlockedLinks, nodeId,
262 return reject<void>("editor.road.intersection-payload", "Road intersection payload is invalid");
264 auto firstSplit = candidate.splitEdgeAtSplineParameter(firstEdgeId, firstParameter, junctionRadius,
267 auto secondSplit = candidate.splitEdgeAtSplineParameter(secondEdgeId, secondParameter, junctionRadius,
270 auto moved = candidate.setNodePosition(firstNodeId, mergedPoint.x, mergedPoint.y, mergedPoint.z);
286 if (!decodeIntersectionDisconnect(operation.payload, first, second, originalLinks, originalBlockedLinks,
413 return reject<void>("editor.road.lane-links-payload", "Road lane-link batch payload is invalid");
Result< int > reconnectEdgeEndpoint(std::uint32_t edgeId, bool fromEndpoint, std::uint32_t nodeId)
Reconnect one edge endpoint to an existing node and prune connections left at the old junction.
Definition RoadNetwork.cpp:732
Result< void > removeNode(std::uint32_t nodeId)
Remove an isolated node.
Definition RoadNetwork.cpp:1022
Result< void > setEdgeStyle(std::uint32_t edgeId, RoadStyle style)
Replace edge style atomically.
Definition RoadNetwork.cpp:520
Result< void > addLaneLink(RoadLaneConnection link)
Register one legal turn inside a shared junction node.
Definition RoadNetwork.cpp:356
Result< RoadEdgeSplitResult > splitEdgeAtSplineParameter(std::uint32_t edgeId, float parameter, float junctionRadius=6.f, std::uint32_t nodeId=0, std::uint32_t secondEdgeId=0)
Split at a normalized parameter on the same Catmull-Rom centerline used by road baking.
Definition RoadNetwork.cpp:826
Result< std::uint32_t > detachEdgeEndpoint(std::uint32_t edgeId, bool fromEndpoint)
Detach one edge endpoint onto a new coincident stable node.
Definition RoadNetwork.cpp:777
Result< void > restoreNode(RoadNode node)
Restore a node with an explicit stable id for undo/import paths.
Definition RoadNetwork.cpp:230
Result< void > reverseEdge(std::uint32_t edgeId)
Atomically reverse one edge while preserving its physical lanes, links, and side-object intervals.
Definition RoadNetwork.cpp:704
Result< RoadEdgeSplitResult > splitEdgeAtPosition(std::uint32_t edgeId, RoadControlPoint position, float maxDistance, float junctionRadius=6.f)
Project a world position onto the baked Catmull-Rom centerline and split at the nearest point.
Definition RoadNetwork.cpp:945
Result< void > setNodeJunctionRadius(std::uint32_t nodeId, float junctionRadius)
Replace one node's positive junction trim radius.
Definition RoadNetwork.cpp:575
Result< void > setNodeJunctionControl(std::uint32_t nodeId, RoadJunctionControl control)
Replace one node's authoritative traffic-control policy.
Definition RoadNetwork.cpp:588
Result< void > setNodePosition(std::uint32_t nodeId, float x, float y, float z)
Move a node and atomically re-anchor every incident edge endpoint.
Definition RoadNetwork.cpp:533
Result< bool > blockLaneLink(RoadLaneConnection link)
Persistently forbid one exact legal lane connection and remove it if currently active.
Definition RoadNetwork.cpp:372
Result< RoadEdgeSplitResult > splitEdge(std::uint32_t edgeId, std::size_t controlPointIndex, float junctionRadius=6.f)
Split an edge at one authored interior control point as a single topology mutation.
Definition RoadNetwork.cpp:821
Result< void > setEdgeControlPoints(std::uint32_t edgeId, std::vector< RoadControlPoint > controlPoints)
Replace one edge spline while preserving its node-owned endpoint positions.
Definition RoadNetwork.cpp:651
Result< void > removeEdge(std::uint32_t edgeId)
Remove an edge and every lane link that references it.
Definition RoadNetwork.cpp:1004
Result< void > restoreEdge(RoadEdge edge)
Restore an edge with an explicit stable id for undo/import paths.
Definition RoadNetwork.cpp:295
Result< int > setEdgeLaneCounts(std::uint32_t edgeId, int lanesForward, int lanesBackward)
Atomically replace directional lane counts and remove links that become out of range.
Definition RoadNetwork.cpp:676
Result< int > mergeNodes(std::uint32_t keepNodeId, std::uint32_t removeNodeId, float maxDistance)
Atomically merge one nearby endpoint node into another stable node.
Definition RoadNetwork.cpp:601
static constexpr const char * kConnectNodeAtPosition
Definition RoadNetworkEditTarget.h:45
static constexpr const char * kSplitEdgeAtPosition
Definition RoadNetworkEditTarget.h:40
static constexpr const char * kSplitEdge
Definition RoadNetworkEditTarget.h:39
static constexpr const char * kUnsplitEdge
Definition RoadNetworkEditTarget.h:41
static constexpr const char * kDetachEdgeEndpoint
Definition RoadNetworkEditTarget.h:37
static constexpr const char * kDisconnectEdgeIntersection
Definition RoadNetworkEditTarget.h:48
static constexpr const char * kUnmergeNodes
Definition RoadNetworkEditTarget.h:44
static constexpr const char * kConnectEdgeIntersection
Definition RoadNetworkEditTarget.h:47
static constexpr const char * kRemoveLaneLinks
Definition RoadNetworkEditTarget.h:58
static constexpr const char * kSetEdgePoints
Definition RoadNetworkEditTarget.h:32
static constexpr const char * kRestoreEdge
Definition RoadNetworkEditTarget.h:51
static constexpr const char * kReconnectEdgeEndpoint
Definition RoadNetworkEditTarget.h:36
static constexpr const char * kBlockLaneLink
Definition RoadNetworkEditTarget.h:55
EVENGINE_API_ORCHESTRATION EditorResult< void > applyDomainOperation(const editing::DomainOperation &operation) override
Apply one validated domain operation.
Definition RoadNetworkEditApply.cpp:11
static constexpr const char * kDisconnectNodeAtPosition
Definition RoadNetworkEditTarget.h:46
static constexpr const char * kRemoveLaneLink
Definition RoadNetworkEditTarget.h:54
static constexpr const char * kRestoreNode
Definition RoadNetworkEditTarget.h:49
static constexpr const char * kMoveNode
Definition RoadNetworkEditTarget.h:29
static constexpr const char * kReattachEdgeEndpoint
Definition RoadNetworkEditTarget.h:38
static constexpr const char * kSetEdgeLanes
Definition RoadNetworkEditTarget.h:34
static constexpr const char * kMergeNodes
Definition RoadNetworkEditTarget.h:42
static constexpr const char * kMergeNodesAndConnect
Definition RoadNetworkEditTarget.h:43
static constexpr const char * kRestoreLaneLinks
Definition RoadNetworkEditTarget.h:57
static constexpr const char * kRemoveEdge
Definition RoadNetworkEditTarget.h:52
static constexpr const char * kSetEdgeStyle
Definition RoadNetworkEditTarget.h:33
static constexpr const char * kSetNodeRadius
Definition RoadNetworkEditTarget.h:30
static constexpr const char * kUnblockLaneLink
Definition RoadNetworkEditTarget.h:56
static constexpr const char * kRemoveNode
Definition RoadNetworkEditTarget.h:50
static constexpr const char * kReverseEdge
Definition RoadNetworkEditTarget.h:35
static constexpr const char * kRestoreLaneLink
Definition RoadNetworkEditTarget.h:53
static constexpr const char * kSetNodeControl
Definition RoadNetworkEditTarget.h:31
Result< T > applied(T value, std::vector< Diagnostic > diagnostics={})
Construct an Applied result with an owning payload and optional diagnostics.
Definition EditingResult.h:43
RoadJunctionControl
Authoritative traffic-control policy applied to every approach of one junction node.
Definition RoadTypes.h:43
@ Uncontrolled
Edge trafficPriority resolves right-of-way without a mandatory stop.
bool decodeEdge(const EditorValue &value, std::uint32_t &id, std::vector< procgen::road::RoadControlPoint > &points)
Definition RoadNetworkEditTarget.cpp:209
bool decodeReattachEndpoint(const EditorValue &value, std::uint32_t &edgeId, bool &fromEndpoint, std::uint32_t &oldNodeId, std::uint32_t &detachedNodeId, std::vector< procgen::road::RoadLaneConnection > &restoreLinks, std::vector< procgen::road::RoadLaneConnection > &restoreBlockedLinks)
Definition RoadNetworkEditTarget.cpp:406
bool decodeDisconnectAtPosition(const EditorValue &value, procgen::road::RoadEdge &original, std::vector< procgen::road::RoadLaneConnection > &originalLinks, std::vector< procgen::road::RoadLaneConnection > &originalBlockedLinks, std::uint32_t &nodeId, std::uint32_t &secondEdgeId, std::uint32_t &branchEdgeId)
Definition RoadNetworkEditTarget.cpp:583
bool decodeDetachEndpoint(const EditorValue &value, std::uint32_t &edgeId, bool &fromEndpoint, std::uint32_t &nodeId)
Definition RoadNetworkEditTarget.cpp:386
bool decodeMergeNodes(const EditorValue &value, std::uint32_t &keepNodeId, std::uint32_t &removeNodeId, float &maxDistance)
Definition RoadNetworkEditTarget.cpp:469
bool decodeNodeRecord(const EditorValue &value, procgen::road::RoadNode &node)
Definition RoadNetworkEditTarget.cpp:240
bool decodeLink(const EditorValue &value, procgen::road::RoadLaneConnection &link)
Definition RoadNetworkEditTarget.cpp:272
bool decodeStyle(const EditorValue &value, std::uint32_t &id, procgen::road::RoadStyle &style)
Definition RoadNetworkEditTarget.cpp:191
bool readId(const EditorValue &value, const char *name, std::uint32_t &output)
Definition RoadNetworkEditTarget.cpp:22
bool decodeLinks(const EditorValue &value, std::vector< procgen::road::RoadLaneConnection > &links)
Definition RoadNetworkEditTarget.cpp:309
bool decodePositionSplit(const EditorValue &value, std::uint32_t &edgeId, procgen::road::RoadControlPoint &position, float &maxDistance, float &junctionRadius, std::uint32_t &nodeId, std::uint32_t &secondEdgeId)
Definition RoadNetworkEditTarget.cpp:453
bool decodeUnmergeNodes(const EditorValue &value, procgen::road::RoadNode &removedNode, std::vector< procgen::road::RoadEdge > &affectedEdges, std::vector< procgen::road::RoadLaneConnection > &affectedLinks, std::vector< procgen::road::RoadLaneConnection > &affectedBlockedLinks)
Definition RoadNetworkEditTarget.cpp:494
bool decodeNodeRadius(const EditorValue &value, std::uint32_t &id, float &junctionRadius)
Definition RoadNetworkEditTarget.cpp:142
bool decodeLaneCounts(const EditorValue &value, std::uint32_t &edgeId, int &lanesForward, int &lanesBackward, std::vector< procgen::road::RoadLaneConnection > &restoreLinks, std::vector< procgen::road::RoadLaneConnection > &restoreBlockedLinks)
Definition RoadNetworkEditTarget.cpp:336
bool decodeUnsplit(const EditorValue &value, procgen::road::RoadEdge &edge, std::vector< procgen::road::RoadLaneConnection > &links, std::vector< procgen::road::RoadLaneConnection > &blockedLinks, std::uint32_t &nodeId, std::uint32_t &secondEdgeId)
Definition RoadNetworkEditTarget.cpp:543
bool readNumber(const EditorValue &value, const char *name, float &output)
Definition RoadNetworkEditTarget.cpp:30
bool decodeIntersectionDisconnect(const EditorValue &value, procgen::road::RoadEdge &first, procgen::road::RoadEdge &second, std::vector< procgen::road::RoadLaneConnection > &links, std::vector< procgen::road::RoadLaneConnection > &blockedLinks, std::uint32_t &sharedNodeId, std::uint32_t &firstSecondEdgeId, std::uint32_t &secondSecondEdgeId)
Definition RoadNetworkEditTarget.cpp:661
bool decodeIntersectionConnect(const EditorValue &value, std::uint32_t &firstEdgeId, std::uint32_t &secondEdgeId, float &firstParameter, float &secondParameter, procgen::road::RoadControlPoint &mergedPoint, float &maximumHeightDelta, float &junctionRadius, std::uint32_t &firstNodeId, std::uint32_t &firstSecondEdgeId, std::uint32_t &secondNodeId, std::uint32_t &secondSecondEdgeId)
Definition RoadNetworkEditTarget.cpp:623
bool decodeConnectAtPosition(const EditorValue &value, std::uint32_t &edgeId, procgen::road::RoadControlPoint &position, float &maxDistance, float &junctionRadius, std::uint32_t &nodeId, std::uint32_t &secondEdgeId, procgen::road::RoadEdge &branch)
Definition RoadNetworkEditTarget.cpp:562
bool decodeBlockedLink(const EditorValue &value, procgen::road::RoadLaneConnection &link, bool &restoreActive)
Definition RoadNetworkEditTarget.cpp:290
bool decodeReconnectEndpoint(EditorValue const &value, std::uint32_t &edgeId, bool &fromEndpoint, std::uint32_t &nodeId, std::vector< procgen::road::RoadLaneConnection > &restoreLinks, std::vector< procgen::road::RoadLaneConnection > &restoreBlockedLinks)
Definition RoadNetworkEditTarget.cpp:367
bool decodeSplit(const EditorValue &value, std::uint32_t &edgeId, std::size_t &controlPointIndex, float &junctionRadius, std::uint32_t &nodeId, std::uint32_t &secondEdgeId)
Definition RoadNetworkEditTarget.cpp:429
bool decodeEdgeRecord(const EditorValue &value, procgen::road::RoadEdge &edge, std::vector< procgen::road::RoadLaneConnection > &links, std::vector< procgen::road::RoadLaneConnection > *blockedLinks)
Definition RoadNetworkEditTarget.cpp:719
bool decodeNodeControl(const EditorValue &value, std::uint32_t &id, procgen::road::RoadJunctionControl &control)
Definition RoadNetworkEditTarget.cpp:151
Definition HeightmapBrush.h:9
One authored control point on a road centerline (world space, Y-up).
Definition RoadTypes.h:12
Directed centerline edge with optional reverse lanes.
Definition RoadTypes.h:61
One legal lane-to-lane connection inside a junction.
Definition RoadTypes.h:90
Cross-section and structural style for one road edge.
Definition RoadTypes.h:19