HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
limitAPI.h
Go to the documentation of this file.
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_LIMITAPI_H
25 #define USDPHYSICS_GENERATED_LIMITAPI_H
26 
27 /// \file usdPhysics/limitAPI.h
28 
29 #include "pxr/pxr.h"
30 #include "pxr/usd/usdPhysics/api.h"
32 #include "pxr/usd/usd/prim.h"
33 #include "pxr/usd/usd/stage.h"
35 
36 #include "pxr/base/vt/value.h"
37 
38 #include "pxr/base/gf/vec3d.h"
39 #include "pxr/base/gf/vec3f.h"
40 #include "pxr/base/gf/matrix4d.h"
41 
42 #include "pxr/base/tf/token.h"
43 #include "pxr/base/tf/type.h"
44 
46 
47 class SdfAssetPath;
48 
49 // -------------------------------------------------------------------------- //
50 // PHYSICSLIMITAPI //
51 // -------------------------------------------------------------------------- //
52 
53 /// \class UsdPhysicsLimitAPI
54 ///
55 /// The PhysicsLimitAPI can be applied to a PhysicsJoint and will
56 /// restrict the movement along an axis. PhysicsLimitAPI is a multipleApply
57 /// schema: The PhysicsJoint can be restricted along "transX", "transY",
58 /// "transZ", "rotX", "rotY", "rotZ", "distance". Setting these as a
59 /// multipleApply schema TfToken name will define the degree of freedom the
60 /// PhysicsLimitAPI is applied to. Note that if the low limit is higher than
61 /// the high limit, motion along this axis is considered locked.
62 ///
64 {
65 public:
66  /// Compile time constant representing what kind of schema this class is.
67  ///
68  /// \sa UsdSchemaKind
70 
71  /// Construct a UsdPhysicsLimitAPI on UsdPrim \p prim with
72  /// name \p name . Equivalent to
73  /// UsdPhysicsLimitAPI::Get(
74  /// prim.GetStage(),
75  /// prim.GetPath().AppendProperty(
76  /// "limit:name"));
77  ///
78  /// for a \em valid \p prim, but will not immediately throw an error for
79  /// an invalid \p prim
81  const UsdPrim& prim=UsdPrim(), const TfToken &name=TfToken())
82  : UsdAPISchemaBase(prim, /*instanceName*/ name)
83  { }
84 
85  /// Construct a UsdPhysicsLimitAPI on the prim held by \p schemaObj with
86  /// name \p name. Should be preferred over
87  /// UsdPhysicsLimitAPI(schemaObj.GetPrim(), name), as it preserves
88  /// SchemaBase state.
90  const UsdSchemaBase& schemaObj, const TfToken &name)
91  : UsdAPISchemaBase(schemaObj, /*instanceName*/ name)
92  { }
93 
94  /// Destructor.
96  virtual ~UsdPhysicsLimitAPI();
97 
98  /// Return a vector of names of all pre-declared attributes for this schema
99  /// class and all its ancestor classes. Does not include attributes that
100  /// may be authored by custom/extended methods of the schemas involved.
102  static const TfTokenVector &
103  GetSchemaAttributeNames(bool includeInherited=true);
104 
105  /// Return a vector of names of all pre-declared attributes for this schema
106  /// class and all its ancestor classes for a given instance name. Does not
107  /// include attributes that may be authored by custom/extended methods of
108  /// the schemas involved. The names returned will have the proper namespace
109  /// prefix.
111  static TfTokenVector
112  GetSchemaAttributeNames(bool includeInherited, const TfToken &instanceName);
113 
114  /// Returns the name of this multiple-apply schema instance
115  TfToken GetName() const {
116  return _GetInstanceName();
117  }
118 
119  /// Return a UsdPhysicsLimitAPI holding the prim adhering to this
120  /// schema at \p path on \p stage. If no prim exists at \p path on
121  /// \p stage, or if the prim at that path does not adhere to this schema,
122  /// return an invalid schema object. \p path must be of the format
123  /// <path>.limit:name .
124  ///
125  /// This is shorthand for the following:
126  ///
127  /// \code
128  /// TfToken name = SdfPath::StripNamespace(path.GetToken());
129  /// UsdPhysicsLimitAPI(
130  /// stage->GetPrimAtPath(path.GetPrimPath()), name);
131  /// \endcode
132  ///
134  static UsdPhysicsLimitAPI
135  Get(const UsdStagePtr &stage, const SdfPath &path);
136 
137  /// Return a UsdPhysicsLimitAPI with name \p name holding the
138  /// prim \p prim. Shorthand for UsdPhysicsLimitAPI(prim, name);
140  static UsdPhysicsLimitAPI
141  Get(const UsdPrim &prim, const TfToken &name);
142 
143  /// Checks if the given name \p baseName is the base name of a property
144  /// of PhysicsLimitAPI.
146  static bool
147  IsSchemaPropertyBaseName(const TfToken &baseName);
148 
149  /// Checks if the given path \p path is of an API schema of type
150  /// PhysicsLimitAPI. If so, it stores the instance name of
151  /// the schema in \p name and returns true. Otherwise, it returns false.
153  static bool
155 
156  /// Returns true if this <b>multiple-apply</b> API schema can be applied,
157  /// with the given instance name, \p name, to the given \p prim. If this
158  /// schema can not be a applied the prim, this returns false and, if
159  /// provided, populates \p whyNot with the reason it can not be applied.
160  ///
161  /// Note that if CanApply returns false, that does not necessarily imply
162  /// that calling Apply will fail. Callers are expected to call CanApply
163  /// before calling Apply if they want to ensure that it is valid to
164  /// apply a schema.
165  ///
166  /// \sa UsdPrim::GetAppliedSchemas()
167  /// \sa UsdPrim::HasAPI()
168  /// \sa UsdPrim::CanApplyAPI()
169  /// \sa UsdPrim::ApplyAPI()
170  /// \sa UsdPrim::RemoveAPI()
171  ///
173  static bool
174  CanApply(const UsdPrim &prim, const TfToken &name,
175  std::string *whyNot=nullptr);
176 
177  /// Applies this <b>multiple-apply</b> API schema to the given \p prim
178  /// along with the given instance name, \p name.
179  ///
180  /// This information is stored by adding "PhysicsLimitAPI:<i>name</i>"
181  /// to the token-valued, listOp metadata \em apiSchemas on the prim.
182  /// For example, if \p name is 'instance1', the token
183  /// 'PhysicsLimitAPI:instance1' is added to 'apiSchemas'.
184  ///
185  /// \return A valid UsdPhysicsLimitAPI object is returned upon success.
186  /// An invalid (or empty) UsdPhysicsLimitAPI object is returned upon
187  /// failure. See \ref UsdPrim::ApplyAPI() for
188  /// conditions resulting in failure.
189  ///
190  /// \sa UsdPrim::GetAppliedSchemas()
191  /// \sa UsdPrim::HasAPI()
192  /// \sa UsdPrim::CanApplyAPI()
193  /// \sa UsdPrim::ApplyAPI()
194  /// \sa UsdPrim::RemoveAPI()
195  ///
197  static UsdPhysicsLimitAPI
198  Apply(const UsdPrim &prim, const TfToken &name);
199 
200 protected:
201  /// Returns the kind of schema this class belongs to.
202  ///
203  /// \sa UsdSchemaKind
205  UsdSchemaKind _GetSchemaKind() const override;
206 
207 private:
208  // needs to invoke _GetStaticTfType.
209  friend class UsdSchemaRegistry;
211  static const TfType &_GetStaticTfType();
212 
213  static bool _IsTypedSchema();
214 
215  // override SchemaBase virtuals.
217  const TfType &_GetTfType() const override;
218 
219 public:
220  // --------------------------------------------------------------------- //
221  // LOW
222  // --------------------------------------------------------------------- //
223  /// Lower limit. Units: degrees or distance depending on trans or
224  /// rot axis applied to. -inf means not limited in negative direction.
225  ///
226  /// | ||
227  /// | -- | -- |
228  /// | Declaration | `float physics:low = -inf` |
229  /// | C++ Type | float |
230  /// | \ref Usd_Datatypes "Usd Type" | SdfValueTypeNames->Float |
232  UsdAttribute GetLowAttr() const;
233 
234  /// See GetLowAttr(), and also
235  /// \ref Usd_Create_Or_Get_Property for when to use Get vs Create.
236  /// If specified, author \p defaultValue as the attribute's default,
237  /// sparsely (when it makes sense to do so) if \p writeSparsely is \c true -
238  /// the default for \p writeSparsely is \c false.
240  UsdAttribute CreateLowAttr(VtValue const &defaultValue = VtValue(), bool writeSparsely=false) const;
241 
242 public:
243  // --------------------------------------------------------------------- //
244  // HIGH
245  // --------------------------------------------------------------------- //
246  /// Upper limit. Units: degrees or distance depending on trans or
247  /// rot axis applied to. inf means not limited in positive direction.
248  ///
249  /// | ||
250  /// | -- | -- |
251  /// | Declaration | `float physics:high = inf` |
252  /// | C++ Type | float |
253  /// | \ref Usd_Datatypes "Usd Type" | SdfValueTypeNames->Float |
255  UsdAttribute GetHighAttr() const;
256 
257  /// See GetHighAttr(), and also
258  /// \ref Usd_Create_Or_Get_Property for when to use Get vs Create.
259  /// If specified, author \p defaultValue as the attribute's default,
260  /// sparsely (when it makes sense to do so) if \p writeSparsely is \c true -
261  /// the default for \p writeSparsely is \c false.
263  UsdAttribute CreateHighAttr(VtValue const &defaultValue = VtValue(), bool writeSparsely=false) const;
264 
265 public:
266  // ===================================================================== //
267  // Feel free to add custom code below this line, it will be preserved by
268  // the code generator.
269  //
270  // Just remember to:
271  // - Close the class declaration with };
272  // - Close the namespace with PXR_NAMESPACE_CLOSE_SCOPE
273  // - Close the include guard with #endif
274  // ===================================================================== //
275  // --(BEGIN CUSTOM CODE)--
276 };
277 
279 
280 #endif
static USDPHYSICS_API UsdPhysicsLimitAPI Apply(const UsdPrim &prim, const TfToken &name)
static USDPHYSICS_API const TfTokenVector & GetSchemaAttributeNames(bool includeInherited=true)
USDPHYSICS_API UsdAttribute GetHighAttr() const
USDPHYSICS_API UsdAttribute GetLowAttr() const
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
GLuint const GLchar * name
Definition: glcorearb.h:786
static USDPHYSICS_API UsdPhysicsLimitAPI Get(const UsdStagePtr &stage, const SdfPath &path)
UsdSchemaKind
Definition: common.h:127
static USDPHYSICS_API bool IsPhysicsLimitAPIPath(const SdfPath &path, TfToken *name)
const TfToken & _GetInstanceName() const
Definition: token.h:87
USDPHYSICS_API UsdAttribute CreateHighAttr(VtValue const &defaultValue=VtValue(), bool writeSparsely=false) const
static USDPHYSICS_API bool IsSchemaPropertyBaseName(const TfToken &baseName)
GLsizei const GLchar *const * string
Definition: glcorearb.h:814
Definition: prim.h:132
UsdPhysicsLimitAPI(const UsdSchemaBase &schemaObj, const TfToken &name)
Definition: limitAPI.h:89
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:442
static USDPHYSICS_API bool CanApply(const UsdPrim &prim, const TfToken &name, std::string *whyNot=nullptr)
static const UsdSchemaKind schemaKind
Definition: limitAPI.h:69
Definition: path.h:290
USDPHYSICS_API UsdSchemaKind _GetSchemaKind() const override
#define USDPHYSICS_API
Definition: api.h:40
TfToken GetName() const
Returns the name of this multiple-apply schema instance.
Definition: limitAPI.h:115
UsdPhysicsLimitAPI(const UsdPrim &prim=UsdPrim(), const TfToken &name=TfToken())
Definition: limitAPI.h:80
virtual USDPHYSICS_API ~UsdPhysicsLimitAPI()
Destructor.
Multiple Apply API Schema.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1394
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:91
Definition: type.h:64
USDPHYSICS_API UsdAttribute CreateLowAttr(VtValue const &defaultValue=VtValue(), bool writeSparsely=false) const
Definition: value.h:166