1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 //    names, trademarks, service marks, or product names of the Licensor
11 //    and its affiliates, except as required to comply with Section 4(c) of
12 //    the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 //     http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 #ifndef USDPHYSICS_GENERATED_COLLISIONGROUP_H
25 #define USDPHYSICS_GENERATED_COLLISIONGROUP_H
26 
27 /// \file usdPhysics/collisionGroup.h
28 
29 #include "pxr/pxr.h"
30 #include "pxr/usd/usdPhysics/api.h"
31 #include "pxr/usd/usd/typed.h"
32 #include "pxr/usd/usd/prim.h"
33 #include "pxr/usd/usd/stage.h"
34 #include "pxr/usd/usdPhysics/tokens.h"
35 
36 #include "pxr/usd/usd/collectionAPI.h"
37 
38 #include "pxr/base/vt/value.h"
39 
40 #include "pxr/base/gf/vec3d.h"
41 #include "pxr/base/gf/vec3f.h"
42 #include "pxr/base/gf/matrix4d.h"
43 
44 #include "pxr/base/tf/token.h"
45 #include "pxr/base/tf/type.h"
46 
47 PXR_NAMESPACE_OPEN_SCOPE
48 
49 class SdfAssetPath;
50 
51 // -------------------------------------------------------------------------- //
52 // PHYSICSCOLLISIONGROUP                                                      //
53 // -------------------------------------------------------------------------- //
54 
55 /// \class UsdPhysicsCollisionGroup
56 ///
57 /// Defines a collision group for coarse filtering. When a collision
58 /// occurs between two objects that have a PhysicsCollisionGroup assigned,
59 /// they will collide with each other unless this PhysicsCollisionGroup pair
60 /// is filtered. See filteredGroups attribute.
61 ///
62 /// A CollectionAPI:colliders maintains a list of PhysicsCollisionAPI rel-s that
63 /// defines the members of this Collisiongroup.
64 ///
65 ///
66 class UsdPhysicsCollisionGroup : public UsdTyped
67 {
68 public:
69     /// Compile time constant representing what kind of schema this class is.
70     ///
71     /// \sa UsdSchemaKind
72     static const UsdSchemaKind schemaKind = UsdSchemaKind::ConcreteTyped;
73 
74     /// Construct a UsdPhysicsCollisionGroup on UsdPrim \p prim .
75     /// Equivalent to UsdPhysicsCollisionGroup::Get(prim.GetStage(), prim.GetPath())
76     /// for a \em valid \p prim, but will not immediately throw an error for
77     /// an invalid \p prim
78     explicit UsdPhysicsCollisionGroup(const UsdPrim& prim=UsdPrim())
UsdTyped(prim)79         : UsdTyped(prim)
80     {
81     }
82 
83     /// Construct a UsdPhysicsCollisionGroup on the prim held by \p schemaObj .
84     /// Should be preferred over UsdPhysicsCollisionGroup(schemaObj.GetPrim()),
85     /// as it preserves SchemaBase state.
UsdPhysicsCollisionGroup(const UsdSchemaBase & schemaObj)86     explicit UsdPhysicsCollisionGroup(const UsdSchemaBase& schemaObj)
87         : UsdTyped(schemaObj)
88     {
89     }
90 
91     /// Destructor.
92     USDPHYSICS_API
93     virtual ~UsdPhysicsCollisionGroup();
94 
95     /// Return a vector of names of all pre-declared attributes for this schema
96     /// class and all its ancestor classes.  Does not include attributes that
97     /// may be authored by custom/extended methods of the schemas involved.
98     USDPHYSICS_API
99     static const TfTokenVector &
100     GetSchemaAttributeNames(bool includeInherited=true);
101 
102     /// Return a UsdPhysicsCollisionGroup holding the prim adhering to this
103     /// schema at \p path on \p stage.  If no prim exists at \p path on
104     /// \p stage, or if the prim at that path does not adhere to this schema,
105     /// return an invalid schema object.  This is shorthand for the following:
106     ///
107     /// \code
108     /// UsdPhysicsCollisionGroup(stage->GetPrimAtPath(path));
109     /// \endcode
110     ///
111     USDPHYSICS_API
112     static UsdPhysicsCollisionGroup
113     Get(const UsdStagePtr &stage, const SdfPath &path);
114 
115     /// Attempt to ensure a \a UsdPrim adhering to this schema at \p path
116     /// is defined (according to UsdPrim::IsDefined()) on this stage.
117     ///
118     /// If a prim adhering to this schema at \p path is already defined on this
119     /// stage, return that prim.  Otherwise author an \a SdfPrimSpec with
120     /// \a specifier == \a SdfSpecifierDef and this schema's prim type name for
121     /// the prim at \p path at the current EditTarget.  Author \a SdfPrimSpec s
122     /// with \p specifier == \a SdfSpecifierDef and empty typeName at the
123     /// current EditTarget for any nonexistent, or existing but not \a Defined
124     /// ancestors.
125     ///
126     /// The given \a path must be an absolute prim path that does not contain
127     /// any variant selections.
128     ///
129     /// If it is impossible to author any of the necessary PrimSpecs, (for
130     /// example, in case \a path cannot map to the current UsdEditTarget's
131     /// namespace) issue an error and return an invalid \a UsdPrim.
132     ///
133     /// Note that this method may return a defined prim whose typeName does not
134     /// specify this schema class, in case a stronger typeName opinion overrides
135     /// the opinion at the current EditTarget.
136     ///
137     USDPHYSICS_API
138     static UsdPhysicsCollisionGroup
139     Define(const UsdStagePtr &stage, const SdfPath &path);
140 
141 protected:
142     /// Returns the kind of schema this class belongs to.
143     ///
144     /// \sa UsdSchemaKind
145     USDPHYSICS_API
146     UsdSchemaKind _GetSchemaKind() const override;
147 
148 private:
149     // needs to invoke _GetStaticTfType.
150     friend class UsdSchemaRegistry;
151     USDPHYSICS_API
152     static const TfType &_GetStaticTfType();
153 
154     static bool _IsTypedSchema();
155 
156     // override SchemaBase virtuals.
157     USDPHYSICS_API
158     const TfType &_GetTfType() const override;
159 
160 public:
161     // --------------------------------------------------------------------- //
162     // FILTEREDGROUPS
163     // --------------------------------------------------------------------- //
164     /// References a list of PhysicsCollisionGroups with which
165     /// collisions should be ignored.
166     ///
167     USDPHYSICS_API
168     UsdRelationship GetFilteredGroupsRel() const;
169 
170     /// See GetFilteredGroupsRel(), and also
171     /// \ref Usd_Create_Or_Get_Property for when to use Get vs Create
172     USDPHYSICS_API
173     UsdRelationship CreateFilteredGroupsRel() const;
174 
175 public:
176     // ===================================================================== //
177     // Feel free to add custom code below this line, it will be preserved by
178     // the code generator.
179     //
180     // Just remember to:
181     //  - Close the class declaration with };
182     //  - Close the namespace with PXR_NAMESPACE_CLOSE_SCOPE
183     //  - Close the include guard with #endif
184     // ===================================================================== //
185     // --(BEGIN CUSTOM CODE)--
186 
187     /// Return the UsdCollectionAPI interface used for defining
188     /// what colliders belong to the CollisionGroup.
189     USDPHYSICS_API
190     UsdCollectionAPI GetCollidersCollectionAPI() const;
191 };
192 
193 PXR_NAMESPACE_CLOSE_SCOPE
194 
195 #endif
196