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::ContactPairParamsOverrideEntry)
54MOCHI_FIELD(actors)
55MOCHI_FIELD(paramsOverride)
57
58MOCHI_STRUCT_BEGIN_EX(superdex::prefab::LayerContactEntry)
59MOCHI_FIELD(enable)
60MOCHI_FIELD(layers)
62
63MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ContactFilter)
64MOCHI_FIELD_NAME(comment, "_comment")
65MOCHI_FIELD(actorContactAsymmetric)
66MOCHI_FIELD(actorContactSymmetric)
67MOCHI_FIELD(layerContactAsymmetric)
68MOCHI_FIELD(layerContactSymmetric)
70
71MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidActorPrefab)
72MOCHI_BASE_CLASS(superdex::RigidActorParams)
73MOCHI_REMOVE_FIELD("worldFromLocal") // Hide the inherited TransformRT field
74MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
75MOCHI_REPLACE_FIELD_NAME(shapeFile, "shape") // Replace inherited field
76MOCHI_FIELD(shapeRotation)
77MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
78MOCHI_FIELD(scale)
79MOCHI_FIELD(rotation)
80MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
81MOCHI_FIELD_NAME(renderModelFile, "renderModel")
82MOCHI_FIELD(renderModelScale)
83MOCHI_FIELD(renderModelRotation)
84MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
86
87MOCHI_STRUCT_BEGIN_EX(superdex::prefab::SoftActorPrefab)
88MOCHI_BASE_CLASS(superdex::SoftActorParams)
89MOCHI_REMOVE_FIELD("worldFromLocal") // Hide the inherited TransformRT field
90MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
91MOCHI_REPLACE_FIELD_NAME(shapeFile, "shape") // Replace inherited field
92MOCHI_FIELD(colliderType)
93MOCHI_FIELD(sdf)
94MOCHI_FIELD_NAME(flowFile, "flow")
95MOCHI_FIELD(useRecentering)
96MOCHI_FIELD(shapeRotation)
97MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
98MOCHI_FIELD(scale)
99MOCHI_FIELD(rotation)
100MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
101MOCHI_FIELD_NAME(renderModelFile, "renderModel")
102MOCHI_FIELD(renderModelScale)
103MOCHI_FIELD(renderModelRotation)
104MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
106
107MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedJointPrefab)
108MOCHI_BASE_CLASS(superdex::ArticulatedJointParams)
110
111MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedLinkPrefab)
112MOCHI_BASE_CLASS(superdex::ArticulatedLinkParams)
113MOCHI_REMOVE_FIELD("shape") // The prefab serializes a file path instead
114MOCHI_FIELD_NAME(shapeFile, "shape")
115MOCHI_FIELD(shapeScale)
116MOCHI_FIELD(shapeRotation)
117MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
118MOCHI_FIELD_NAME(renderModelFile, "renderModel")
119MOCHI_FIELD(renderModelScale)
120MOCHI_FIELD(renderModelRotation)
121MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
123
124MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedSkinPrefab)
125MOCHI_BASE_CLASS(superdex::ArticulatedSkinParams)
126MOCHI_REMOVE_FIELD("shape") // The prefab serializes a file path instead
127MOCHI_FIELD_NAME(shapeFile, "shape")
128
129// TODO[T265138451]: Add support for baked-in transform
130// MOCHI_FIELD(shapeScale)
131// MOCHI_FIELD(shapeRotation)
132// MOCHI_FIELD(shapeTranslation) MOCHI_ATTRIBUTE(Units("m"))
133
134MOCHI_FIELD_NAME(renderModelFile, "renderModel")
135MOCHI_FIELD(renderModelScale)
136MOCHI_FIELD(renderModelRotation)
137MOCHI_FIELD(renderModelTranslation) MOCHI_ATTRIBUTE(Units("m"))
139
140MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedActorPrefab)
141MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
142MOCHI_FIELD(name)
143MOCHI_FIELD(scale)
144MOCHI_FIELD(rotation)
145MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
146MOCHI_FIELD(cycles)
147MOCHI_FIELD(joints)
148MOCHI_FIELD(links)
149MOCHI_FIELD(skin)
150MOCHI_FIELD(jointVelocities)
152
153MOCHI_STRUCT_BEGIN_EX(superdex::prefab::SoftSkinnedActorPrefab)
154MOCHI_FIELD_NAME(comment, "_comment")
155MOCHI_FIELD(skeletonParams)
156MOCHI_FIELD(softParams)
157MOCHI_FIELD(softAttachLinks)
158MOCHI_FIELD(enableCollidingLinks)
159MOCHI_FIELD(hasGravity)
160MOCHI_FIELD(hasInertia)
161MOCHI_FIELD(hasStress)
163
164MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ActorLists)
165MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
166MOCHI_FIELD(articulated)
167MOCHI_FIELD(rigid)
168MOCHI_FIELD(soft)
169MOCHI_FIELD(softSkinned)
171
172MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidSphericalJointConstraintPrefab)
173MOCHI_BASE_CLASS(superdex::RigidSphericalJointConstraintParams)
174MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
175MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
177
178MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPrismaticJointConstraintPrefab)
179MOCHI_BASE_CLASS(superdex::RigidPrismaticJointConstraintParams)
180MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
181MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
183
184MOCHI_STRUCT_BEGIN_EX(superdex::prefab::DeformableNodeToDeformableNodeConstraintPrefab)
185MOCHI_BASE_CLASS(superdex::DeformableNodeToDeformableNodeConstraintParams)
186MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
187MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
189
190MOCHI_STRUCT_BEGIN_EX(superdex::prefab::DeformableNodeToRigidConstraintPrefab)
191MOCHI_BASE_CLASS(superdex::DeformableNodeToRigidConstraintParams)
192MOCHI_REPLACE_FIELD_NAME(rigidActorName, "rigidActor")
193MOCHI_REPLACE_FIELD_NAME(deformableActorName, "deformableActor")
195
196MOCHI_STRUCT_BEGIN_EX(superdex::prefab::JointRotationRangeConstraintPrefab)
197MOCHI_BASE_CLASS(superdex::JointRotationRangeConstraintParams)
198MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
199MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
201
202MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPivotPositionConstraintPrefab)
203MOCHI_BASE_CLASS(superdex::RigidPivotPositionConstraintParams)
204MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
206
207MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPivotToRigidTargetConstraintPrefab)
208MOCHI_BASE_CLASS(superdex::RigidPivotToRigidTargetConstraintParams)
209MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
211
212MOCHI_STRUCT_BEGIN_EX(superdex::prefab::RigidPivotRotationConstraintPrefab)
213MOCHI_BASE_CLASS(superdex::RigidPivotRotationConstraintParams)
214MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
216
217MOCHI_STRUCT_BEGIN_EX(superdex::prefab::DeformableNodePositionConstraintPrefab)
218MOCHI_BASE_CLASS(superdex::DeformableNodePositionConstraintParams)
219MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
221
222MOCHI_STRUCT_BEGIN_EX(superdex::prefab::JointRotationTrackingConstraintPrefab)
223MOCHI_BASE_CLASS(superdex::JointRotationTrackingConstraintParams)
224MOCHI_REPLACE_FIELD_NAME(actorNameA, "actorA")
225MOCHI_REPLACE_FIELD_NAME(actorNameB, "actorB")
227
228MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedSingleDofTargetConstraintPrefab)
229MOCHI_BASE_CLASS(superdex::ArticulatedSingleDofTargetConstraintParams)
230MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
232
233MOCHI_STRUCT_BEGIN_EX(superdex::prefab::Articulated3dRotationTargetConstraintPrefab)
234MOCHI_BASE_CLASS(superdex::Articulated3dRotationTargetConstraintParams)
235MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
237
238MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ArticulatedSingleDofRangeConstraintPrefab)
239MOCHI_BASE_CLASS(superdex::ArticulatedSingleDofRangeConstraintParams)
240MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
242
243MOCHI_STRUCT_BEGIN_EX(superdex::prefab::Articulated3dRotationRangeConstraintPrefab)
244MOCHI_BASE_CLASS(superdex::Articulated3dRotationRangeConstraintParams)
245MOCHI_REPLACE_FIELD_NAME(actorName, "actor")
247
248MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ConstraintLists)
249MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
250MOCHI_FIELD(rigidSphericalJoint)
251MOCHI_FIELD(rigidPrismaticJoint)
252MOCHI_FIELD(deformableNodeToDeformableNode)
253MOCHI_FIELD(deformableNodeToRigid)
254MOCHI_FIELD(jointRotationRange)
255MOCHI_FIELD(rigidPivotPosition)
256MOCHI_FIELD(rigidPivotToRigidTarget)
257MOCHI_FIELD(rigidPivotRotation)
258MOCHI_FIELD(deformableNodePosition)
259MOCHI_FIELD(jointRotationTracking)
260MOCHI_FIELD(articulatedSingleDofTarget)
261MOCHI_FIELD(articulated3dRotationTarget)
262MOCHI_FIELD(articulatedSingleDofRange)
263MOCHI_FIELD(articulated3dRotationRange)
265
266MOCHI_STRUCT_BEGIN_EX(superdex::prefab::PoseControllerPrefab)
267MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
268MOCHI_FIELD(articulatedActor)
269MOCHI_FIELD(linkPosTracking)
270MOCHI_FIELD(linkRotTracking)
271MOCHI_FIELD(jointTracking)
273
274MOCHI_STRUCT_BEGIN_EX(superdex::prefab::PrefabReference)
275MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
276MOCHI_FIELD(name)
277MOCHI_FIELD(path)
278MOCHI_FIELD(scale)
279MOCHI_FIELD(rotation)
280MOCHI_FIELD(translation) MOCHI_ATTRIBUTE(Units("m"))
282
283MOCHI_STRUCT_BEGIN_EX(superdex::prefab::ScenePrefab)
284MOCHI_FIELD_NAME(comment, "_comment") // _ comes first in JSON
285MOCHI_FIELD(actors) MOCHI_ATTRIBUTE(NoSerializeDefaults)
286MOCHI_FIELD(constraints) MOCHI_ATTRIBUTE(NoSerializeDefaults)
287MOCHI_FIELD(controllers) MOCHI_ATTRIBUTE(NoSerializeDefaults)
288MOCHI_FIELD(prefabs) MOCHI_ATTRIBUTE(NoSerializeDefaults)
289MOCHI_FIELD(scene) MOCHI_ATTRIBUTE(NoSerializeDefaults)
290MOCHI_FIELD(contactFilter) // No NoSerializeDefaults - we want enable field always serialized
291MOCHI_FIELD(contactPairParamsOverrides) MOCHI_ATTRIBUTE(NoSerializeDefaults)
293
294 // 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).