载入中...
搜索中...
未找到
AvatarTarget.cpp
浏览该文件的文档.
49 return EditorValue::Object{{"id", v.id.value()}, {"name", v.name}, {"channels", std::move(channels)}};
53 const auto * id = field(v, "id"), *name = field(v, "name"), *texture = field(v, "texture"), *z = field(v, "z"),
61 !readFloats(field(v, "offset"), out.offset.data(), 2) || !readFloats(field(v, "size"), out.size.data(), 2) ||
63 return eve::editing::failed<AvatarLayerValue>(EditorStatus::Rejected, RuleId("editor.avatar.layer"),
78 return eve::editing::failed<AvatarParameterValue>(EditorStatus::Rejected, RuleId("editor.avatar.parameter"),
89 EditorStatus::Rejected, RuleId("editor.avatar.parameter-number"), "Avatar parameter number is invalid");
101 return eve::editing::failed<AvatarExpressionValue>(EditorStatus::Rejected, RuleId("editor.avatar.expression"),
115PropertyDescriptor prop(std::string path, PropertyType type, EditorValue value, const char* category, double min = -1e9,
129 return std::any_of(d.begin(), d.end(), [](const auto& v) { return v.severity() == DiagnosticSeverity::Error; });
142 {CapabilityId("eve.editor.target.avatar-properties"), IPropertyProvider::editingCapabilityId()}};
145 if (c == CapabilityId("eve.editor.target.avatar-properties") || c == IPropertyProvider::editingCapabilityId())
155 std::none_of(layers_.begin(), layers_.end(), [&](const auto& v) { return v.id.value() == i.item.value(); }))
185 prop("layer.color", PropertyType::Color, EditorValue::Array{1.0, 1.0, 1.0, 1.0}, "layer", 0, 1)};
190PropertyReadResult AvatarDocumentTarget::read(const SelectionSnapshot& s, const PropertyPath& p) const {
240Result<DomainOperation> AvatarDocumentTarget::replacement(EditorValue content, std::string property) const {
252Result<DomainOperation> AvatarDocumentTarget::makeSet(const SelectionSnapshot& s, const PropertyPath& p,
256 if (!matches(s) || !d || mode != PropertySetMode::Absolute || !validatePropertyValue(*d, value).ok())
257 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.set"),
290 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.invalid"),
294Result<DomainOperation> AvatarDocumentTarget::makeReset(const SelectionSnapshot& s, const PropertyPath& p) const {
297 return eve::editing::failed<DomainOperation>(EditorStatus::Unsupported, RuleId("editor.avatar.property"),
301Result<DomainOperation> AvatarDocumentTarget::makeSetSource(std::string kind, std::string asset) const {
306 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.source"),
312 std::any_of(layers_.begin(), layers_.end(), [&](const auto& x) { return x.id == v.id || x.name == v.name; }))
313 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.layer-id"),
318 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.layer"),
324 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.avatar.layer"),
336Result<DomainOperation> AvatarDocumentTarget::makeCreateParameter(const AvatarParameterValue& v) const {
339 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.parameter-id"),
344 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.parameter"),
349 if (std::none_of(parameters_.begin(), parameters_.end(), [&](const auto& v) { return v.id == id; }))
350 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.avatar.parameter"),
353 std::find_if(parameters_.begin(), parameters_.end(), [&](const auto& v) { return v.id == id; })->name;
363Result<DomainOperation> AvatarDocumentTarget::makeCreateExpression(const AvatarExpressionValue& v) const {
366 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.expression-id"),
371 return eve::editing::failed<DomainOperation>(EditorStatus::Rejected, RuleId("editor.avatar.expression"),
376 if (std::none_of(expressions_.begin(), expressions_.end(), [&](const auto& v) { return v.id == id; }))
377 return eve::editing::failed<DomainOperation>(EditorStatus::NotFound, RuleId("editor.avatar.expression"),
393 d.push_back(diagnostic("editor.avatar.budget", "Avatar asset exceeds layer, parameter or expression budgets"));
396 if (v.id.empty() || v.name.empty() || !ids.insert(v.id.value()).second || !names.insert(v.name).second)
397 d.push_back(diagnostic("editor.avatar.layer-identity", "Avatar layer IDs and names must be unique"));
402 if (v.textureAsset.empty() || v.zIndex < -100000 || v.zIndex > 100000 || !vectorsFinite || v.size[0] <= 0 ||
404 !std::all_of(v.color.begin(), v.color.end(), [](float n) { return std::isfinite(n) && n >= 0 && n <= 1; }))
408 if (v.id.empty() || v.name.empty() || !ids.insert(v.id.value()).second || !names.insert(v.name).second)
415 d.push_back(diagnostic("editor.avatar.parameter-range", "Avatar parameter range/default/value is invalid"));
418 if (e.id.empty() || e.name.empty() || !ids.insert(e.id.value()).second || !names.insert(e.name).second)
422 d.push_back(diagnostic("editor.avatar.expression-budget", "Avatar expression exceeds 2048 channels"));
443 if (!k || !s || !la || !pa || !ea || la->size() > 512 || pa->size() > 2048 || ea->size() > 1024)
485Result<void> AvatarDocumentTarget::commitDomainState(std::unique_ptr<IDomainOperationTarget> c) {
std::map< std::string, std::vector< Key >, std::less<> > channels
Definition AnimCurveLibrary.cpp:19
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
Revisioned image/Live2D/VRoid Avatar authoring asset.
Definition AvatarTarget.h:79
Result< DomainOperation > makeSet(const SelectionSnapshot &, const PropertyPath &, const EditorValue &, PropertySetMode) const override
Make set.
Definition AvatarTarget.cpp:252
Result< void > commitDomainState(std::unique_ptr< IDomainOperationTarget >) override
Commits domain state.
Definition AvatarTarget.cpp:485
Result< void > applyDomainOperation(const DomainOperation &) override
Applies domain operation.
Definition AvatarTarget.cpp:430
std::unique_ptr< IDomainOperationTarget > cloneDomainState() const override
Clones domain state.
Definition AvatarTarget.cpp:482
eve::Result< eve::Revision > currentRevision(const SelectionSnapshot &) const override
Current revision.
Definition AvatarTarget.cpp:163
Result< DomainOperation > makeReset(const SelectionSnapshot &, const PropertyPath &) const override
Make reset.
Definition AvatarTarget.cpp:294
const std::vector< AvatarExpressionValue > & expressions() const
Expressions.
Definition AvatarTarget.h:133
Result< DomainOperation > makeDeleteParameter(const ObjectId &) const
Make delete parameter.
Definition AvatarTarget.cpp:348
PropertySchema schema(const SelectionSnapshot &) const override
Schema.
Definition AvatarTarget.cpp:169
Result< DomainOperation > makeSetSource(std::string kind, std::string asset) const
Change backend kind and model source.
Definition AvatarTarget.cpp:301
Result< DomainOperation > makeCreateExpression(const AvatarExpressionValue &) const
Make create expression.
Definition AvatarTarget.cpp:363
Result< DomainOperation > makeCreateLayer(const AvatarLayerValue &) const
Make create layer.
Definition AvatarTarget.cpp:310
PropertyReadResult read(const SelectionSnapshot &, const PropertyPath &) const override
Reads .
Definition AvatarTarget.cpp:190
Result< DomainOperation > makeCreateParameter(const AvatarParameterValue &) const
Make create parameter.
Definition AvatarTarget.cpp:336
void * queryCapability(const CapabilityId &) override
Query an optional stable editing capability.
Definition AvatarTarget.cpp:144
Result< DomainOperation > makeDeleteExpression(const ObjectId &) const
Make delete expression.
Definition AvatarTarget.cpp:375
Result< DomainOperation > makeDeleteLayer(const ObjectId &) const
Make delete layer.
Definition AvatarTarget.cpp:322
const std::vector< AvatarParameterValue > & parameters() const
Parameters.
Definition AvatarTarget.h:131
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
virtual void clearDirtyRegion()=0
Clears dirty region.
UI-independent property access for an immutable selection snapshot.
Definition EditingProperty.h:139
static CapabilityId editingCapabilityId()
Stable capability identity for generic property editing.
Definition EditingProperty.h:144
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
bool isWithinLimits(size_t maxDepth, size_t maxElements, size_t maxStringBytes) const
Validate nesting, element count and approximate string byte limits.
Definition EditingValue.cpp:50
editing::PropertyDescriptor PropertyDescriptor
Definition AvatarTarget.h:37
editing::DomainOperation DomainOperation
Definition AvatarTarget.h:26
editing::Diagnostic EditorDiagnostic
Definition AvatarTarget.h:28
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
@ InvalidArgument
Definition Container.h:602
Named expression containing layer/parameter channel targets.
Definition AvatarTarget.h:68
Stable image layer in an Avatar asset.
Definition AvatarTarget.h:53
Reflected Avatar parameter and its initial value.
Definition AvatarTarget.h:62
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