载入中...
搜索中...
未找到
SoftBody3DSchema.cpp
浏览该文件的文档.
2
4
5#include <utility>
6
7namespace eve::physics_editing {
8namespace {
9
10editing::PropertyDescriptor property(const char* path, const char* label, const char* description, const char* category,
11 editing::PropertyType type, editing::Value defaultValue) {
12 editing::PropertyDescriptor result;
13 result.path = editing::PropertyPath(path);
14 result.displayNameKey = label;
15 result.descriptionKey = description;
16 result.category = category;
17 result.type = type;
18 result.defaultValue = std::move(defaultValue);
19 return result;
20}
21
22void numeric(editing::PropertySchema& schema, const char* path, const char* label, const char* description,
23 const char* category, editing::PropertyType type, editing::Value value, double minimum, double maximum,
24 double step, const char* units = "") {
25 auto descriptor = property(path, label, description, category, type, std::move(value));
26 descriptor.numeric.minimum = minimum;
27 descriptor.numeric.maximum = maximum;
28 descriptor.numeric.step = step;
29 descriptor.numeric.units = units;
30 schema.properties.push_back(std::move(descriptor));
31}
32
33} // namespace
34
36 const physics::SoftBody3DDefinition defaults;
40 numeric(schema, "cols", "Soft body columns", "Particle count along the local X axis", "Lattice",
41 editing::PropertyType::Int, std::int64_t(defaults.cols), 2, 1000000, 1);
42 numeric(schema, "rows", "Soft body rows", "Particle count along the local Y axis", "Lattice",
43 editing::PropertyType::Int, std::int64_t(defaults.rows), 2, 1000000, 1);
44 numeric(schema, "layers", "Soft body layers", "Particle count along the local Z axis", "Lattice",
45 editing::PropertyType::Int, std::int64_t(defaults.layers), 2, 1000000, 1);
46 numeric(schema, "spacing", "Particle spacing", "Rest distance between adjacent particles", "Lattice",
47 editing::PropertyType::Float, defaults.spacing, 0.0001, 100000, 0.01, "m");
48 numeric(schema, "originX", "Origin X", "Minimum rest-space X coordinate", "Transform", editing::PropertyType::Float,
49 defaults.originX, -100000, 100000, 0.01, "m");
50 numeric(schema, "originY", "Origin Y", "Minimum rest-space Y coordinate", "Transform", editing::PropertyType::Float,
51 defaults.originY, -100000, 100000, 0.01, "m");
52 numeric(schema, "originZ", "Origin Z", "Minimum rest-space Z coordinate", "Transform", editing::PropertyType::Float,
53 defaults.originZ, -100000, 100000, 0.01, "m");
54 numeric(schema, "gravityX", "Gravity X", "Acceleration along world X", "Forces", editing::PropertyType::Float,
55 defaults.gravityX, -1000, 1000, 0.1, "m/s2");
56 numeric(schema, "gravityY", "Gravity Y", "Acceleration along world Y", "Forces", editing::PropertyType::Float,
57 defaults.gravityY, -1000, 1000, 0.1, "m/s2");
58 numeric(schema, "gravityZ", "Gravity Z", "Acceleration along world Z", "Forces", editing::PropertyType::Float,
59 defaults.gravityZ, -1000, 1000, 0.1, "m/s2");
60 numeric(schema, "deformationResistance", "Deformation resistance", "Elastic shape-matching strength", "Solver",
62 numeric(schema, "iterations", "Solver iterations", "Constraint iterations per substep", "Solver",
63 editing::PropertyType::Int, std::int64_t(defaults.iterations), 1, 32, 1);
64 numeric(schema, "damping", "Damping", "Velocity damping per integration step", "Solver",
65 editing::PropertyType::Float, defaults.damping, 0, 1, 0.01);
66 numeric(schema, "particleRadius", "Particle radius", "Collision radius of each particle", "Particles",
67 editing::PropertyType::Float, defaults.particleRadius, 0.0001, 100000, 0.01, "m");
68 numeric(schema, "particleMass", "Particle mass", "Mass used for force and rigid-body impulse exchange", "Particles",
69 editing::PropertyType::Float, defaults.particleMass, 0.0001, 100000, 0.01, "kg");
70 numeric(schema, "plasticYield", "Plastic yield", "Strain threshold before permanent deformation", "Plasticity",
71 editing::PropertyType::Float, defaults.plasticYield, 0, 1000, 0.01);
72 numeric(schema, "plasticCreep", "Plastic creep", "Rate at which yielded strain becomes permanent", "Plasticity",
73 editing::PropertyType::Float, defaults.plasticCreep, 0, 1, 0.01);
74 numeric(schema, "plasticRecovery", "Plastic recovery", "Rate at which plastic offsets return to rest", "Plasticity",
75 editing::PropertyType::Float, defaults.plasticRecovery, 0, 1, 0.01);
76 numeric(schema, "maxDeformation", "Maximum deformation",
77 "Maximum stored plastic displacement; zero disables plasticity", "Plasticity", editing::PropertyType::Float,
78 defaults.maxDeformation, 0, 100000, 0.01, "m");
79 schema.properties.push_back(property("selfCollision", "Self collision", "Resolve non-neighbor particle overlap",
80 "Collision", editing::PropertyType::Bool, defaults.selfCollision));
81 return schema;
82}
83
84} // namespace eve::physics_editing
double value
std::string descriptor
std::string label
float maximum[3]
float minimum[3]
std::string description
std::string path
Definition PlayHost.cpp:110
std::vector< UnitCandidate > units
float step
Definition TreeMesh.cpp:314
const char * category
const char * defaultValue
PropertyType
PropertyType public API.
editing::PropertySchema softBody3DDefinitionSchema()
Return the UI-independent creation schema for physics:softbody3d v1.
EVENGINE_API_PLATFORM public API.
std::vector< PropertyDescriptor > properties
Versioned, owning creation definition for one volumetric soft body.
static constexpr std::string_view SchemaId
static constexpr std::uint32_t SchemaVersion