载入中...
搜索中...
未找到
VolumeFluidTarget.cpp
浏览该文件的文档.
12constexpr std::uint64_t kEstimatedScratchBytesPerParticle = 2ULL * sizeof(fluids::VolumeFluidParticle) +
15EditorDiagnostic targetDiagnostic(const char* rule, DiagnosticSeverity severity, std::string message) {
16 return eve::editing::ruleDiagnostic(eve::DiagnosticCode::InvalidArgument, RuleId(rule), severity,
58 if (std::any_of(std::begin(finite), std::end(finite), [](double v) { return !std::isfinite(v); })) {
62 if (s.capacity == 0 || s.capacity > 1000000 || s.previewParticles > s.capacity || s.spacing < 0.0001 ||
92 if (!capacity || !preview || !spacing || !iterations || *capacity < 0 || *preview < 0 || *iterations < 0 ||
95 EditorStatus::Rejected, RuleId("editor.volume-fluid.types"), "Volume fluid scalar fields are invalid");
111 EditorStatus::Rejected, RuleId("editor.volume-fluid.invalid"), "Volume fluid settings are invalid");
115PropertyDescriptor descriptor(const char* path, PropertyType type, EditorValue value, const char* category,
151eve::Result<eve::Revision> VolumeFluidTarget::currentRevision(const SelectionSnapshot& s) const {
154 eve::DiagnosticCode::InvalidArgument, "Volume fluid selection mismatch", "editor.volume-fluid.selection"));
163 descriptor("capacity", PropertyType::Int, std::int64_t{d.capacity}, "solver", 1, 1000000, true),
164 descriptor("previewParticles", PropertyType::Int, std::int64_t{d.previewParticles}, "preview", 0, 1000000,
168 descriptor("minimum", PropertyType::Vec3, vec3(d.minimumX, d.minimumY, d.minimumZ), "container"),
169 descriptor("maximum", PropertyType::Vec3, vec3(d.maximumX, d.maximumY, d.maximumZ), "container"),
170 descriptor("iterations", PropertyType::Int, std::int64_t{d.iterations}, "solver", 1, 20, true)};
173PropertyReadResult VolumeFluidTarget::read(const SelectionSnapshot& s, const PropertyPath& p) const {
179Result<DomainOperation> VolumeFluidTarget::makeSet(const SelectionSnapshot& s, const PropertyPath& p,
186 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.volume-fluid.set"),
210Result<DomainOperation> VolumeFluidTarget::makeReset(const SelectionSnapshot& s, const PropertyPath& p) const {
213 return eve::editing::failed<DomainOperation>(EditorStatus::Unsupported, RuleId("editor.volume-fluid.property"),
220 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.volume-fluid.operation"),
232std::vector<EditorDiagnostic> VolumeFluidTarget::validate() const { return validateSettings(settings_); }
237 result.estimatedBytes = static_cast<std::uint64_t>(settings_.previewParticles) * kEstimatedScratchBytesPerParticle;
242 result.diagnostics.push_back(targetDiagnostic("editor.volume-fluid.memory-budget", DiagnosticSeverity::Error,
246 result.diagnostics.push_back(targetDiagnostic("editor.volume-fluid.work-budget", DiagnosticSeverity::Error,
267 return eve::editing::failed<void>(EditorStatus::Unsupported, RuleId("editor.volume-fluid.snapshot"),
281 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.volume-fluid.runtime-required"),
286 return eve::editing::failed<void>(EditorStatus::Rejected, RuleId("editor.volume-fluid.runtime-invalid"),
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
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.
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
CPU position-based free-volume fluid with a bounded spatial grid. @ownership Owns all particle state;...
Definition VolumeFluid.h:517
Result< void > restore(const VolumeFluidSnapshot &snapshot)
Validates a complete candidate before replacing state; failures preserve the current solver.
Definition VolumeFluidTools.cpp:642
VolumeFluidSnapshot snapshot() const
Returns complete owning state; scratch grids and last-step contacts are derived and omitted.
Definition VolumeFluidTools.cpp:629
Result< void > apply(const VolumeFluidTarget &target, fluids::VolumeFluid *simulation) const
Apply solver settings through the canonical snapshot restore transaction.
Definition VolumeFluidTarget.cpp:278
Reversible schema-driven document for native volume-fluid solver settings. @ownership Owns only autho...
Definition VolumeFluidTarget.h:46
Result< void > applyDomainOperation(const DomainOperation &operation) override
Applies domain operation.
Definition VolumeFluidTarget.cpp:218
PropertySchema schema(const SelectionSnapshot &selection) const override
Schema.
Definition VolumeFluidTarget.cpp:158
EditorValue snapshotValue() const
Capture schema eve.volume-fluid-authoring version one.
Definition VolumeFluidTarget.cpp:254
VolumeFluidAuthoringPreview previewBudget(std::uint64_t byteBudget=256ULL *1024ULL *1024ULL, std::uint64_t visitBudget=100000000ULL) const
Estimate preview memory and constraint visits without allocation.
Definition VolumeFluidTarget.cpp:233
Result< void > loadSnapshot(const EditorValue &snapshot)
Atomically load a strict version-one authoring document.
Definition VolumeFluidTarget.cpp:258
PropertyReadResult read(const SelectionSnapshot &selection, const PropertyPath &path) const override
Reads .
Definition VolumeFluidTarget.cpp:173
VolumeFluidAuthoringSettings settings() const
Return an immutable copy of current authoring settings.
Definition VolumeFluidTarget.h:72
Result< DomainOperation > makeReset(const SelectionSnapshot &selection, const PropertyPath &path) const override
Make reset.
Definition VolumeFluidTarget.cpp:210
Result< DomainOperation > makeSet(const SelectionSnapshot &selection, const PropertyPath &path, const EditorValue &value, PropertySetMode mode) const override
Make set.
Definition VolumeFluidTarget.cpp:179
eve::Result< eve::Revision > currentRevision(const SelectionSnapshot &selection) const override
Current revision.
Definition VolumeFluidTarget.cpp:151
std::vector< EditorDiagnostic > validate() const
Validate numeric ranges and container clearance.
Definition VolumeFluidTarget.cpp:232
void * queryCapability(const CapabilityId &capability) override
Query the property capability.
Definition VolumeFluidTarget.cpp:143
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 FluidRuntime.cpp:5
editing::PropertyDescriptor PropertyDescriptor
Definition FluidTarget.h:30
editing::DiagnosticSeverity DiagnosticSeverity
Definition FluidTarget.h:19
editing::Diagnostic EditorDiagnostic
Definition FluidTarget.h:22
WGPUStringView sv(const char *s)
Build a WGPUStringView from a C string (null-safe, length auto-computed).
Definition wgpu_types.h:20
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
@ InvalidArgument
Definition Container.h:602
std::vector< std::string > affectedProperties
Definition EditingProtocol.h:52
std::vector< PropertyDescriptor > properties
Definition EditingProperty.h:120
PropertyDescriptorLookup find(const PropertyPath &path) const
Finds find.
Definition EditingProperty.cpp:9
Stable discovery metadata exposed by every editable target.
Definition EditableTarget.h:39
unsigned capacity
Maximum live particles; admission fails atomically at capacity.
Definition VolumeFluid.h:84
Bounded preview allocation/work estimate before constructing a solver.
Definition VolumeFluidTarget.h:29
Revision documentRevision
Definition VolumeFluidTarget.h:31
std::vector< EditorDiagnostic > diagnostics
Definition VolumeFluidTarget.h:34
std::uint64_t estimatedConstraintVisits
Definition VolumeFluidTarget.h:33
std::uint64_t estimatedBytes
Definition VolumeFluidTarget.h:32
EditorStatus status
Definition VolumeFluidTarget.h:30
Serializable authoring parameters for the bounded volume-fluid solver.
Definition VolumeFluidTarget.h:18
std::uint32_t iterations
Definition VolumeFluidTarget.h:25
std::uint32_t previewParticles
Definition VolumeFluidTarget.h:20