载入中...
搜索中...
未找到
DecalGizmo.cpp
浏览该文件的文档.
2
3#include <cmath>
4
6
8 EditorGizmoSnapshot result; result.target=document.targetId().value();result.targetRevision=document.revision();
9 const auto diagnostics=document.validate();for(const auto&diagnostic:diagnostics)if(diagnostic.severity()==DiagnosticSeverity::Error){result.status=EditorStatus::Rejected;result.diagnostics=diagnostics;return result;}
10 const auto&position=*document.value("transform.position")->getIf<EditorValue::Array>();
11 const auto&normal=*document.value("transform.normal")->getIf<EditorValue::Array>();
12 std::array<double,3> p{},n{};double length2=0;
13 for(int i=0;i<3;++i){p[i]=*position[i].getIf<double>();n[i]=*normal[i].getIf<double>();length2+=n[i]*n[i];}
14 const double length=std::sqrt(length2);for(double&component:n)component/=length;
15 const double size=*document.value("projection.size")->getIf<double>();
16 const double depth=*document.value("projection.depth")->getIf<double>();
17 result.primitives.push_back({"decal-volume","oriented-wire-box",p,{size,size,depth},n,{0.2,0.75,1.0,0.9},0,0,true});
18 result.primitives.push_back({"decal-normal","arrow",p,{},n,{1.0,0.55,0.1,1.0},0,std::max(depth,size*0.5),false});
19 result.diagnostics=diagnostics;result.status=EditorStatus::Applied;return result;
20}
21
22} // namespace eve::decal_editing
float length
Definition CaveMesh.cpp:94
glm::vec4 p[6]
glm::vec3 n
Definition Grass.cpp:63
std::array< float, 3 > position
Texture * normal
float size
Definition TreeMesh.cpp:156
std::uint32_t depth
Stable, serializable authoring document for one projected decal.
Definition DecalTarget.h:33
TargetId targetId() const override
Target id.
Definition DecalTarget.h:38
const EditorValue * value(const std::string &path) const
Read a renderer-neutral property by stable path.
std::vector< EditorDiagnostic > validate() const
Validate projection geometry, fades, UVs and texture-channel rules.
EditorGizmoSnapshot build(const DecalDocumentTarget &document) const
Create a revision-bound projection volume and direction arrow.
Definition DecalGizmo.cpp:7
std::uint64_t revision() const override
Return the current revision.
std::vector< Value > Array
const T * getIf() const
Return an immediately borrowed typed value.
Immutable revision-tagged overlay snapshot consumed by any viewport renderer.
std::vector< GizmoPrimitive > primitives
std::vector< Diagnostic > diagnostics