SuperDex Physics C++ API
Loading...
Searching...
No Matches
mochi_prefab_inl.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
20
22
23namespace superdex::prefab {
24
25// Convenience overloads of @ref AddToScene that delegate to the canonical overloads using default
26// @ref PrefabParams. Declared in mochi_prefab.h.
27inline AddToSceneResult AddToScene(ScenePrefab const& prefab, Scene* scene, Error& error) {
28 return AddToScene(prefab, scene, PrefabParams{}, error);
29}
30
31inline AddToSceneResult
32AddToScene(std::string_view prefabPath, std::string_view rootPath, Scene* scene, Error& error) {
33 return AddToScene(prefabPath, rootPath, scene, PrefabParams{}, error);
34}
35
36} // namespace superdex::prefab
37
38// clang-format off
39
41MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
42MOCHI_FIELD(description)
43MOCHI_FIELD(gravity) MOCHI_ATTRIBUTE(Units("m/s^2"))
44MOCHI_FIELD(solver)
46
47MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ActorContactEntry)
48MOCHI_FIELD(enable)
49MOCHI_FIELD(actors)
50MOCHI_FIELD(includeNestedActors) MOCHI_ATTRIBUTE(NoSerializeDefaults)
52
53MOCHI_STRUCT_BEGIN_EX(superdex::prefab::LayerContactEntry)
54MOCHI_FIELD(enable)
55MOCHI_FIELD(layers)
57
58MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ContactFilter)
59MOCHI_FIELD_NAME(comment, "_comment")
60MOCHI_FIELD(actorContactAsymmetric)
61MOCHI_FIELD(actorContactSymmetric)
62MOCHI_FIELD(layerContactAsymmetric)
63MOCHI_FIELD(layerContactSymmetric)
65
66MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidActorPrefab)
67MOCHI_BASE_CLASS(superdex::RigidActorParams)
68MOCHI_REMOVE_FIELD("worldFromLocal") // Hide the inherited TransformRT field
69MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
70MOCHI_REPLACE_FIELD_NAME(shapeFile, "shape") // Replace inherited field
71MOCHI_FIELD(shapeRotation)
72MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
73MOCHI_FIELD(scale)
74MOCHI_FIELD(rotation)
75MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
76MOCHI_FIELD_NAME(renderModelFile, "renderModel")
77MOCHI_FIELD(renderModelScale)
78MOCHI_FIELD(renderModelRotation)
79MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
81
82MOCHI_STRUCT_BEGIN_EX(superdex::prefab::SoftActorPrefab)
83MOCHI_BASE_CLASS(superdex::SoftActorParams)
84MOCHI_REMOVE_FIELD("worldFromLocal") // Hide the inherited TransformRT field
85MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
86MOCHI_REPLACE_FIELD_NAME(shapeFile, "shape") // Replace inherited field
87MOCHI_FIELD(colliderType)
88MOCHI_FIELD(sdf)
89MOCHI_FIELD_NAME(flowFile, "flow")
90MOCHI_FIELD(useRecentering)
91MOCHI_FIELD(shapeRotation)
92MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
93MOCHI_FIELD(scale)
94MOCHI_FIELD(rotation)
95MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
96MOCHI_FIELD_NAME(renderModelFile, "renderModel")
97MOCHI_FIELD(renderModelScale)
98MOCHI_FIELD(renderModelRotation)
99MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
101
102MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedJointPrefab)
103MOCHI_BASE_CLASS(superdex::ArticulatedJointParams)
105
106MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedLinkPrefab)
107MOCHI_BASE_CLASS(superdex::ArticulatedLinkParams)
108MOCHI_REMOVE_FIELD("shape") // The prefab serializes a file path instead
109MOCHI_FIELD_NAME(shapeFile, "shape")
110MOCHI_FIELD(shapeScale)
111MOCHI_FIELD(shapeRotation)
112MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
113MOCHI_FIELD_NAME(renderModelFile, "renderModel")
114MOCHI_FIELD(renderModelScale)
115MOCHI_FIELD(renderModelRotation)
116MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
118
119MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedSkinPrefab)
120MOCHI_BASE_CLASS(superdex::ArticulatedSkinParams)
121MOCHI_REMOVE_FIELD("shape") // The prefab serializes a file path instead
122MOCHI_FIELD_NAME(shapeFile, "shape")
123
124// TODO[T265138451]: Add support for baked-in transform
125// MOCHI_FIELD(shapeScale)
126// MOCHI_FIELD(shapeRotation)
127// MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
128
129MOCHI_FIELD_NAME(renderModelFile, "renderModel")
130MOCHI_FIELD(renderModelScale)
131MOCHI_FIELD(renderModelRotation)
132MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
134
135MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedActorPrefab)
136MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
137MOCHI_FIELD(name)
138MOCHI_FIELD(scale)
139MOCHI_FIELD(rotation)
140MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
141MOCHI_FIELD(cycles)
142MOCHI_FIELD(joints)
143MOCHI_FIELD(links)
144MOCHI_FIELD(skin)
145MOCHI_FIELD(jointVelocities)
147
148MOCHI_STRUCT_BEGIN_EX(superdex::prefab::SoftSkinnedActorPrefab)
149MOCHI_FIELD_NAME(comment, "_comment")
150MOCHI_FIELD(skeletonParams)
151MOCHI_FIELD(softParams)
152MOCHI_FIELD(softAttachLinks)
153MOCHI_FIELD(enableCollidingLinks)
154MOCHI_FIELD(hasGravity)
155MOCHI_FIELD(hasInertia)
156MOCHI_FIELD(hasStress)
158
159MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ActorLists)
160MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
161MOCHI_FIELD(articulated)
162MOCHI_FIELD(rigid)
163MOCHI_FIELD(soft)
164MOCHI_FIELD(softSkinned)
166
167MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidSphericalJointConstraintPrefab)
168MOCHI_BASE_CLASS(superdex::RigidSphericalJointConstraintParams)
169MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
170MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
172
173MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPrismaticJointConstraintPrefab)
174MOCHI_BASE_CLASS(superdex::RigidPrismaticJointConstraintParams)
175MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
176MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
178
179MOCHI_STRUCT_BEGIN_EX(superdex::prefab::DeformableNodeToDeformableNodeConstraintPrefab)
180MOCHI_BASE_CLASS(superdex::DeformableNodeToDeformableNodeConstraintParams)
181MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
182MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
184
185MOCHI_STRUCT_BEGIN_EX(superdex::prefab::DeformableNodeToRigidConstraintPrefab)
186MOCHI_BASE_CLASS(superdex::DeformableNodeToRigidConstraintParams)
187MOCHI_REPLACE_FIELD_NAME(rigidActorName, "rigidActor")
188MOCHI_REPLACE_FIELD_NAME(deformableActorName, "deformableActor")
190
191MOCHI_STRUCT_BEGIN_EX(superdex::prefab::JointRotationRangeConstraintPrefab)
192MOCHI_BASE_CLASS(superdex::JointRotationRangeConstraintParams)
193MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
194MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
196
197MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPivotPositionConstraintPrefab)
198MOCHI_BASE_CLASS(superdex::RigidPivotPositionConstraintParams)
199MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
201
202MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPivotToRigidTargetConstraintPrefab)
203MOCHI_BASE_CLASS(superdex::RigidPivotToRigidTargetConstraintParams)
204MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
206
207MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPivotRotationConstraintPrefab)
208MOCHI_BASE_CLASS(superdex::RigidPivotRotationConstraintParams)
209MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
211
212MOCHI_STRUCT_BEGIN_EX(superdex::prefab::DeformableNodePositionConstraintPrefab)
213MOCHI_BASE_CLASS(superdex::DeformableNodePositionConstraintParams)
214MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
216
217MOCHI_STRUCT_BEGIN_EX(superdex::prefab::JointRotationTrackingConstraintPrefab)
218MOCHI_BASE_CLASS(superdex::JointRotationTrackingConstraintParams)
219MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
220MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
222
223MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedSingleDofTargetConstraintPrefab)
224MOCHI_BASE_CLASS(superdex::ArticulatedSingleDofTargetConstraintParams)
225MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
227
228MOCHI_STRUCT_BEGIN_EX(superdex::prefab::Articulated3dRotationTargetConstraintPrefab)
229MOCHI_BASE_CLASS(superdex::Articulated3dRotationTargetConstraintParams)
230MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
232
233MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedSingleDofRangeConstraintPrefab)
234MOCHI_BASE_CLASS(superdex::ArticulatedSingleDofRangeConstraintParams)
235MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
237
238MOCHI_STRUCT_BEGIN_EX(superdex::prefab::Articulated3dRotationRangeConstraintPrefab)
239MOCHI_BASE_CLASS(superdex::Articulated3dRotationRangeConstraintParams)
240MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
242
243MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ConstraintLists)
244MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
245MOCHI_FIELD(rigidSphericalJoint)
246MOCHI_FIELD(rigidPrismaticJoint)
247MOCHI_FIELD(deformableNodeToDeformableNode)
248MOCHI_FIELD(deformableNodeToRigid)
249MOCHI_FIELD(jointRotationRange)
250MOCHI_FIELD(rigidPivotPosition)
251MOCHI_FIELD(rigidPivotToRigidTarget)
252MOCHI_FIELD(rigidPivotRotation)
253MOCHI_FIELD(deformableNodePosition)
254MOCHI_FIELD(jointRotationTracking)
255MOCHI_FIELD(articulatedSingleDofTarget)
256MOCHI_FIELD(articulated3dRotationTarget)
257MOCHI_FIELD(articulatedSingleDofRange)
258MOCHI_FIELD(articulated3dRotationRange)
260
261MOCHI_STRUCT_BEGIN_EX(superdex::prefab::PoseControllerPrefab)
262MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
263MOCHI_FIELD(articulatedActor)
264MOCHI_FIELD(linkPosTracking)
265MOCHI_FIELD(linkRotTracking)
266MOCHI_FIELD(jointTracking)
268
269MOCHI_STRUCT_BEGIN_EX(superdex::prefab::PrefabReference)
270MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
271MOCHI_FIELD(name)
272MOCHI_FIELD(path)
273MOCHI_FIELD(scale)
274MOCHI_FIELD(rotation)
275MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
277
278MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ScenePrefab)
279MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
280MOCHI_FIELD(actors) MOCHI_ATTRIBUTE(NoSerializeDefaults)
281MOCHI_FIELD(constraints) MOCHI_ATTRIBUTE(NoSerializeDefaults)
282MOCHI_FIELD(controllers) MOCHI_ATTRIBUTE(NoSerializeDefaults)
283MOCHI_FIELD(prefabs) MOCHI_ATTRIBUTE(NoSerializeDefaults)
284MOCHI_FIELD(scene) MOCHI_ATTRIBUTE(NoSerializeDefaults)
285MOCHI_FIELD(contactFilter) // No NoSerializeDefaults - we want enable field always serialized
287
288 // clang-format on
Represents a simulation scene.
Definition mochi_scene.h:45
AddToSceneResult AddToScene(ScenePrefab const &prefab, Scene *scene, PrefabParams const &params, Error &error)
Instantiate a ScenePrefab and add it to a Scene.
#define MOCHI_STRUCT_BEGIN_EX(name)
Definition reflection.h:283
#define MOCHI_STRUCT_END_EX()
Definition reflection.h:284
#define MOCHI_FIELD_NAME(realName, customName)
Definition reflection.h:294
#define MOCHI_REMOVE_FIELD(name)
Definition reflection.h:295
#define MOCHI_FIELD(name)
Definition reflection.h:293
#define MOCHI_REPLACE_FIELD_NAME(realName, fieldNameToReplace)
Definition reflection.h:296
#define MOCHI_BASE_CLASS(name)
Definition reflection.h:292
#define MOCHI_ATTRIBUTE(...)
Definition reflection.h:298
Struct used to return all created actors and constraints from AddToScene.
Parameters for instantiating a ScenePrefab into a Scene.
Parameters that are global to the Scene in which this prefab will be instantiated.
Top-level prefab describing a complete or partial physics scene (possibly just one actor).