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 #include "pxr/usd/usdPhysics/sphericalJoint.h"
25 #include "pxr/usd/usd/schemaRegistry.h"
26 #include "pxr/usd/usd/typed.h"
27 
28 #include "pxr/usd/sdf/types.h"
29 #include "pxr/usd/sdf/assetPath.h"
30 
31 PXR_NAMESPACE_OPEN_SCOPE
32 
33 // Register the schema with the TfType system.
TF_REGISTRY_FUNCTION(TfType)34 TF_REGISTRY_FUNCTION(TfType)
35 {
36     TfType::Define<UsdPhysicsSphericalJoint,
37         TfType::Bases< UsdPhysicsJoint > >();
38 
39     // Register the usd prim typename as an alias under UsdSchemaBase. This
40     // enables one to call
41     // TfType::Find<UsdSchemaBase>().FindDerivedByName("PhysicsSphericalJoint")
42     // to find TfType<UsdPhysicsSphericalJoint>, which is how IsA queries are
43     // answered.
44     TfType::AddAlias<UsdSchemaBase, UsdPhysicsSphericalJoint>("PhysicsSphericalJoint");
45 }
46 
47 /* virtual */
~UsdPhysicsSphericalJoint()48 UsdPhysicsSphericalJoint::~UsdPhysicsSphericalJoint()
49 {
50 }
51 
52 /* static */
53 UsdPhysicsSphericalJoint
Get(const UsdStagePtr & stage,const SdfPath & path)54 UsdPhysicsSphericalJoint::Get(const UsdStagePtr &stage, const SdfPath &path)
55 {
56     if (!stage) {
57         TF_CODING_ERROR("Invalid stage");
58         return UsdPhysicsSphericalJoint();
59     }
60     return UsdPhysicsSphericalJoint(stage->GetPrimAtPath(path));
61 }
62 
63 /* static */
64 UsdPhysicsSphericalJoint
Define(const UsdStagePtr & stage,const SdfPath & path)65 UsdPhysicsSphericalJoint::Define(
66     const UsdStagePtr &stage, const SdfPath &path)
67 {
68     static TfToken usdPrimTypeName("PhysicsSphericalJoint");
69     if (!stage) {
70         TF_CODING_ERROR("Invalid stage");
71         return UsdPhysicsSphericalJoint();
72     }
73     return UsdPhysicsSphericalJoint(
74         stage->DefinePrim(path, usdPrimTypeName));
75 }
76 
77 /* virtual */
_GetSchemaKind() const78 UsdSchemaKind UsdPhysicsSphericalJoint::_GetSchemaKind() const
79 {
80     return UsdPhysicsSphericalJoint::schemaKind;
81 }
82 
83 /* static */
84 const TfType &
_GetStaticTfType()85 UsdPhysicsSphericalJoint::_GetStaticTfType()
86 {
87     static TfType tfType = TfType::Find<UsdPhysicsSphericalJoint>();
88     return tfType;
89 }
90 
91 /* static */
92 bool
_IsTypedSchema()93 UsdPhysicsSphericalJoint::_IsTypedSchema()
94 {
95     static bool isTyped = _GetStaticTfType().IsA<UsdTyped>();
96     return isTyped;
97 }
98 
99 /* virtual */
100 const TfType &
_GetTfType() const101 UsdPhysicsSphericalJoint::_GetTfType() const
102 {
103     return _GetStaticTfType();
104 }
105 
106 UsdAttribute
GetAxisAttr() const107 UsdPhysicsSphericalJoint::GetAxisAttr() const
108 {
109     return GetPrim().GetAttribute(UsdPhysicsTokens->physicsAxis);
110 }
111 
112 UsdAttribute
CreateAxisAttr(VtValue const & defaultValue,bool writeSparsely) const113 UsdPhysicsSphericalJoint::CreateAxisAttr(VtValue const &defaultValue, bool writeSparsely) const
114 {
115     return UsdSchemaBase::_CreateAttr(UsdPhysicsTokens->physicsAxis,
116                        SdfValueTypeNames->Token,
117                        /* custom = */ false,
118                        SdfVariabilityUniform,
119                        defaultValue,
120                        writeSparsely);
121 }
122 
123 UsdAttribute
GetConeAngle0LimitAttr() const124 UsdPhysicsSphericalJoint::GetConeAngle0LimitAttr() const
125 {
126     return GetPrim().GetAttribute(UsdPhysicsTokens->physicsConeAngle0Limit);
127 }
128 
129 UsdAttribute
CreateConeAngle0LimitAttr(VtValue const & defaultValue,bool writeSparsely) const130 UsdPhysicsSphericalJoint::CreateConeAngle0LimitAttr(VtValue const &defaultValue, bool writeSparsely) const
131 {
132     return UsdSchemaBase::_CreateAttr(UsdPhysicsTokens->physicsConeAngle0Limit,
133                        SdfValueTypeNames->Float,
134                        /* custom = */ false,
135                        SdfVariabilityVarying,
136                        defaultValue,
137                        writeSparsely);
138 }
139 
140 UsdAttribute
GetConeAngle1LimitAttr() const141 UsdPhysicsSphericalJoint::GetConeAngle1LimitAttr() const
142 {
143     return GetPrim().GetAttribute(UsdPhysicsTokens->physicsConeAngle1Limit);
144 }
145 
146 UsdAttribute
CreateConeAngle1LimitAttr(VtValue const & defaultValue,bool writeSparsely) const147 UsdPhysicsSphericalJoint::CreateConeAngle1LimitAttr(VtValue const &defaultValue, bool writeSparsely) const
148 {
149     return UsdSchemaBase::_CreateAttr(UsdPhysicsTokens->physicsConeAngle1Limit,
150                        SdfValueTypeNames->Float,
151                        /* custom = */ false,
152                        SdfVariabilityVarying,
153                        defaultValue,
154                        writeSparsely);
155 }
156 
157 namespace {
158 static inline TfTokenVector
_ConcatenateAttributeNames(const TfTokenVector & left,const TfTokenVector & right)159 _ConcatenateAttributeNames(const TfTokenVector& left,const TfTokenVector& right)
160 {
161     TfTokenVector result;
162     result.reserve(left.size() + right.size());
163     result.insert(result.end(), left.begin(), left.end());
164     result.insert(result.end(), right.begin(), right.end());
165     return result;
166 }
167 }
168 
169 /*static*/
170 const TfTokenVector&
GetSchemaAttributeNames(bool includeInherited)171 UsdPhysicsSphericalJoint::GetSchemaAttributeNames(bool includeInherited)
172 {
173     static TfTokenVector localNames = {
174         UsdPhysicsTokens->physicsAxis,
175         UsdPhysicsTokens->physicsConeAngle0Limit,
176         UsdPhysicsTokens->physicsConeAngle1Limit,
177     };
178     static TfTokenVector allNames =
179         _ConcatenateAttributeNames(
180             UsdPhysicsJoint::GetSchemaAttributeNames(true),
181             localNames);
182 
183     if (includeInherited)
184         return allNames;
185     else
186         return localNames;
187 }
188 
189 PXR_NAMESPACE_CLOSE_SCOPE
190 
191 // ===================================================================== //
192 // Feel free to add custom code below this line. It will be preserved by
193 // the code generator.
194 //
195 // Just remember to wrap code in the appropriate delimiters:
196 // 'PXR_NAMESPACE_OPEN_SCOPE', 'PXR_NAMESPACE_CLOSE_SCOPE'.
197 // ===================================================================== //
198 // --(BEGIN CUSTOM CODE)--
199