载入中...
搜索中...
未找到
ArchSpaceTarget.cpp
浏览该文件的文档.
43 return readNumber(&(*array)[0], out.x) && readNumber(&(*array)[1], out.y) && readNumber(&(*array)[2], out.z);
86 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.node"),
90 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.kind"),
99 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.children"),
105 EditorStatus::Rejected, RuleId("editor.archspace.children"), "ArchSpace child id must be a string");
112 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.wall"),
115 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.wall"),
121 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.polygon"),
126 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.polygon"),
132 if (const auto* position = field(value, "position"); position && !parseVec3(*position, node.position))
133 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.item"),
139 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.item"),
146 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.opening"),
150 return eve::editing::failed<archspace::Node>(EditorStatus::Rejected, RuleId("editor.archspace.opening"),
161PropertyDescriptor prop(std::string path, PropertyType type, EditorValue defaultValue, const char* category,
213const archspace::Node* ArchSpaceDocumentTarget::selectedNode(const SelectionSnapshot& selection) const {
214 if (selection.items.size() != 1 || selection.items.front().target != TargetId(id_)) return nullptr;
218eve::Result<eve::Revision> ArchSpaceDocumentTarget::currentRevision(const SelectionSnapshot& selection) const {
221 eve::DiagnosticCode::InvalidArgument, "ArchSpace selection mismatch", "editor.archspace.selection"));
234 schema.properties.push_back(prop("height", PropertyType::Float, node->height, "level", 0.1, 1000));
237 schema.properties.push_back(prop("thickness", PropertyType::Float, node->thickness, "wall", 0.01, 10));
238 schema.properties.push_back(prop("height", PropertyType::Float, node->height, "wall", 0.1, 1000));
246 schema.properties.push_back(prop("width", PropertyType::Float, node->width, "opening", 0.01, 20));
256PropertyReadResult ArchSpaceDocumentTarget::read(const SelectionSnapshot& selection, const PropertyPath& path) const {
264 if (path == PropertyPath("yawDegrees")) return {PropertyReadState::Value, node->yawDegrees, {}};
267 if (path == PropertyPath("openingHeight")) return {PropertyReadState::Value, node->openingHeight, {}};
281Result<DomainOperation> ArchSpaceDocumentTarget::replacement(EditorValue content, std::string property) const {
321 std::sort(parsed.begin(), parsed.end(), [](const archspace::Node& a, const archspace::Node& b) {
363 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.set"),
367 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.value"),
372 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.archspace.node"),
377 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.name"),
383 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.catalog"),
389 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.number"),
408 return eve::editing::failed<DomainOperation>(EditorStatus::Unsupported, RuleId("editor.archspace.property"),
413 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.invalid"),
418 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.invalid"),
427 return eve::editing::failed<DomainOperation>(EditorStatus::Unsupported, RuleId("editor.archspace.property"),
439 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.bootstrap"),
447 const std::string& levelId, const std::string& roomId, std::string roomName, double originX, double originZ,
448 double sizeX, double sizeZ, double wallHeight, double wallThickness, double slabThickness) const {
449 if (!(std::isfinite(originX) && std::isfinite(originZ) && std::isfinite(sizeX) && std::isfinite(sizeZ)) ||
451 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.room"),
460 auto created = candidate.createRoom(levelId, roomId, std::move(roomName), std::move(polygon), wallHeight,
463 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.room"),
475 auto created = candidate.createWall(levelId, wallId, std::move(wallName), start, end, height, thickness);
477 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.wall"),
490 auto created = candidate.createOpening(wallId, openingId, openingId, kind, t, width, height, sill);
492 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.opening"),
507 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.archspace.item"),
518 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.archspace.delete"),
545Result<void> ArchSpaceDocumentTarget::commitDomainState(std::unique_ptr<IDomainOperationTarget> candidate) {
560 if (!schemaId || *schemaId != "eve.archspace.document" || !version || *version != 1 || !content)
561 return eve::editing::failed<void>(EditorStatus::Unsupported, RuleId("editor.archspace.snapshot"),
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
Authoritative architectural space document (Pascal-like node graph).
Definition ArchSpaceDocument.h:22
eve::Result< void > createWall(const std::string &levelId, const std::string &wallId, std::string wallName, Vec2 start, Vec2 end, double height, double thickness)
Insert a single wall under an existing level.
Definition ArchSpaceDocument.cpp:311
eve::Result< void > eraseCascade(const std::string &id)
Delete a node and every descendant. Root deletion clears the document.
Definition ArchSpaceDocument.cpp:204
Node * findMutable(const std::string &id)
Borrow a mutable node by id. @ownership Non-owning pointer into this document's node map; do not free...
Definition ArchSpaceDocument.cpp:96
eve::Result< void > placeItem(const std::string &levelId, const std::string &itemId, std::string itemName, std::string catalogId, Vec3 position, double yawDegrees=0.0)
Place a catalog item on an existing level.
Definition ArchSpaceDocument.cpp:351
eve::Result< void > bootstrap(const std::string &siteId, const std::string &buildingId, const std::string &levelId, double levelHeight=3.0)
Create site → building → level skeleton when the document is empty.
Definition ArchSpaceDocument.cpp:225
const Node * find(const std::string &id) const
Borrow a node by id. @ownership Non-owning pointer into this document's node map; do not free....
Definition ArchSpaceDocument.cpp:91
std::vector< std::string > diagnostics() const
Collect structural and geometric diagnostics as human-readable lines.
Definition ArchSpaceDocument.cpp:369
eve::Result< void > replace(Node node)
Replace authored fields while preserving id, kind, parent and children.
Definition ArchSpaceDocument.cpp:188
const std::unordered_map< std::string, Node > & nodes() const noexcept
Definition ArchSpaceDocument.h:29
eve::Result< void > createOpening(const std::string &wallId, const std::string &openingId, std::string openingName, OpeningKind kind, double t, double width, double height, double sill=0.0)
Insert a door/window opening on an existing wall.
Definition ArchSpaceDocument.cpp:330
eve::Result< void > createRoom(const std::string &levelId, const std::string &roomId, std::string roomName, std::vector< Vec2 > polygon, double wallHeight, double wallThickness, double slabThickness)
Create a closed room: perimeter walls + slab + zone under an existing level.
Definition ArchSpaceDocument.cpp:261
Revisioned ArchSpace document target for Inspector, tools and automation.
Definition ArchSpaceTarget.h:60
Result< DomainOperation > makeBootstrap(const std::string &siteId, const std::string &buildingId, const std::string &levelId, double levelHeight=3.0) const
Plan site→building→level creation on an empty document.
Definition ArchSpaceTarget.cpp:432
ArchSpaceDocumentTarget(std::string id)
Arch space document target.
Definition ArchSpaceTarget.cpp:182
Result< DomainOperation > makeCreateWall(const std::string &levelId, const std::string &wallId, std::string wallName, archspace::Vec2 start, archspace::Vec2 end, double height=3.0, double thickness=0.2) const
Plan a single wall under a level.
Definition ArchSpaceTarget.cpp:470
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Definition ArchSpaceTarget.cpp:525
Result< DomainOperation > makeDeleteNode(const ObjectId &id) const
Plan cascading deletion of one node.
Definition ArchSpaceTarget.cpp:514
static CapabilityId propertyCapabilityId()
Capability identity published by describe() for Inspector property editing.
Definition ArchSpaceTarget.h:66
Result< void > loadSnapshot(const EditorValue &snapshot)
Loads snapshot.
Definition ArchSpaceTarget.cpp:554
Result< void > commitDomainState(std::unique_ptr< IDomainOperationTarget > candidate) override
Commits domain state.
Definition ArchSpaceTarget.cpp:545
eve::Result< eve::Revision > currentRevision(const SelectionSnapshot &selection) const override
Current revision.
Definition ArchSpaceTarget.cpp:218
void * queryCapability(const CapabilityId &capability) override
Query Inspector property capability. @ownership Borrowed from this target; callers must not delete it...
Definition ArchSpaceTarget.cpp:192
PropertyReadResult read(const SelectionSnapshot &selection, const PropertyPath &path) const override
Reads .
Definition ArchSpaceTarget.cpp:256
Result< DomainOperation > makeCreateOpening(const std::string &wallId, const std::string &openingId, archspace::OpeningKind kind, double t, double width, double height, double sill=0.0) const
Plan a door/window opening on an existing wall.
Definition ArchSpaceTarget.cpp:484
Result< DomainOperation > makeSet(const SelectionSnapshot &selection, const PropertyPath &path, const EditorValue &value, PropertySetMode mode) const override
Make set.
Definition ArchSpaceTarget.cpp:356
std::unique_ptr< IDomainOperationTarget > cloneDomainState() const override
Clones domain state.
Definition ArchSpaceTarget.cpp:541
Result< DomainOperation > makeReset(const SelectionSnapshot &selection, const PropertyPath &path) const override
Make reset.
Definition ArchSpaceTarget.cpp:423
Result< DomainOperation > makePlaceItem(const std::string &levelId, const std::string &itemId, std::string catalogId, archspace::Vec3 position, double yawDegrees=0.0) const
Plan a catalog item placement on a level.
Definition ArchSpaceTarget.cpp:499
PropertySchema schema(const SelectionSnapshot &selection) const override
Schema.
Definition ArchSpaceTarget.cpp:225
Result< EditorGizmoSnapshot > gizmo() const
Build a revision-bound overlay for walls, zones, items and openings.
Definition ArchSpaceTarget.cpp:572
Result< DomainOperation > makeCreateRectRoom(const std::string &levelId, const std::string &roomId, std::string roomName, double originX, double originZ, double sizeX, double sizeZ, double wallHeight=3.0, double wallThickness=0.2, double slabThickness=0.2) const
Plan a rectangular room (four walls + slab + zone) under a level.
Definition ArchSpaceTarget.cpp:446
void bumpRevision()
Advance the revision without touching the dirty region.
Definition EditableTarget.h:179
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.
Optional capability exposing a deterministic, persistence-safe editing snapshot.
Definition EditableTarget.h:247
static CapabilityId editingCapabilityId()
Stable capability identity shared by every editable domain target.
Definition EditableTarget.h:252
UI-independent property access for an immutable selection snapshot.
Definition EditingProperty.h:139
Dotted property path (layout.size) compared and persisted as text.
Definition EditingIds.h:78
Deterministic owning value tree shared by authoring hosts.
Definition EditingValue.h:19
editing::PropertyDescriptor PropertyDescriptor
Definition ArchSpaceTarget.h:31
editing::DomainOperation DomainOperation
Definition ArchSpaceTarget.h:19
editing::PropertyPath PropertyPath
Definition ArchSpaceTarget.h:33
editing::PropertyType PropertyType
Definition ArchSpaceTarget.h:38
editing::SelectionSnapshot SelectionSnapshot
Definition ArchSpaceTarget.h:41
OpeningKind
Opening semantic used by doors and windows hosted on walls.
Definition ArchSpaceTypes.h:16
eve::Result< NodeKind > parseNodeKind(const std::string &text) noexcept
Parse a node kind wire name.
Definition ArchSpaceTypes.h:159
@ Opening
const char * openingKindName(OpeningKind kind) noexcept
Stable wire name for an opening kind. @ownership Non-owning pointer to a static string literal; do no...
Definition ArchSpaceTypes.h:178
const char * nodeKindName(NodeKind kind) noexcept
Stable wire name for a node kind. @ownership Non-owning pointer to a static string literal; do not fr...
Definition ArchSpaceTypes.h:141
eve::Result< OpeningKind > parseOpeningKind(const std::string &text) noexcept
Parse an opening kind wire name.
Definition ArchSpaceTypes.h:186
EVENGINE_API_PLATFORM bool hasErrors(const std::vector< DnutDiagnostic > &diagnostics)
Return whether any diagnostic is an error.
Definition DnutLexer.cpp:233
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
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
bool readNumber(const EditorValue &value, const char *name, float &output)
Definition RoadNetworkEditTarget.cpp:30
WidgetDesc child(std::string id, std::vector< WidgetDesc > children, float width, float height)
Scrollable child region with an explicit size.
Definition Widget.cpp:635
@ InvalidArgument
@ PreconditionViolation
Definition Container.h:602
One authored architectural node. Only fields for the active kind are meaningful.
Definition ArchSpaceTypes.h:32
Renderer-neutral wire primitive for authoring viewport overlays.
Definition EditingGizmo.h:12
std::array< double, 3 > direction
Definition EditingGizmo.h:17
Immutable revision-tagged overlay snapshot consumed by any viewport renderer.
Definition EditingGizmo.h:27
std::vector< GizmoPrimitive > primitives
Definition EditingGizmo.h:31
std::vector< PropertyDescriptor > properties
Definition EditingProperty.h:120
PropertyDescriptorLookup find(const PropertyPath &path) const
Finds find.
Definition EditingProperty.cpp:9
std::vector< SelectionItem > items
Definition EditingSelection.h:22
Stable discovery metadata exposed by every editable target.
Definition EditableTarget.h:39