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 USDGEOM_GENERATED_CYLINDER_H 25 #define USDGEOM_GENERATED_CYLINDER_H 26 27 /// \file usdGeom/cylinder.h 28 29 #include "pxr/pxr.h" 30 #include "pxr/usd/usdGeom/api.h" 31 #include "pxr/usd/usdGeom/gprim.h" 32 #include "pxr/usd/usd/prim.h" 33 #include "pxr/usd/usd/stage.h" 34 #include "pxr/usd/usdGeom/tokens.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 45 PXR_NAMESPACE_OPEN_SCOPE 46 47 class SdfAssetPath; 48 49 // -------------------------------------------------------------------------- // 50 // CYLINDER // 51 // -------------------------------------------------------------------------- // 52 53 /// \class UsdGeomCylinder 54 /// 55 /// Defines a primitive cylinder with closed ends, centered at the 56 /// origin, whose spine is along the specified \em axis. 57 /// 58 /// The fallback values for Cube, Sphere, Cone, and Cylinder are set so that 59 /// they all pack into the same volume/bounds. 60 /// 61 /// For any described attribute \em Fallback \em Value or \em Allowed \em Values below 62 /// that are text/tokens, the actual token is published and defined in \ref UsdGeomTokens. 63 /// So to set an attribute to the value "rightHanded", use UsdGeomTokens->rightHanded 64 /// as the value. 65 /// 66 class UsdGeomCylinder : public UsdGeomGprim 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 UsdGeomCylinder on UsdPrim \p prim . 75 /// Equivalent to UsdGeomCylinder::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 UsdGeomCylinder(const UsdPrim& prim=UsdPrim()) UsdGeomGprim(prim)79 : UsdGeomGprim(prim) 80 { 81 } 82 83 /// Construct a UsdGeomCylinder on the prim held by \p schemaObj . 84 /// Should be preferred over UsdGeomCylinder(schemaObj.GetPrim()), 85 /// as it preserves SchemaBase state. UsdGeomCylinder(const UsdSchemaBase & schemaObj)86 explicit UsdGeomCylinder(const UsdSchemaBase& schemaObj) 87 : UsdGeomGprim(schemaObj) 88 { 89 } 90 91 /// Destructor. 92 USDGEOM_API 93 virtual ~UsdGeomCylinder(); 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 USDGEOM_API 99 static const TfTokenVector & 100 GetSchemaAttributeNames(bool includeInherited=true); 101 102 /// Return a UsdGeomCylinder 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 /// UsdGeomCylinder(stage->GetPrimAtPath(path)); 109 /// \endcode 110 /// 111 USDGEOM_API 112 static UsdGeomCylinder 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 USDGEOM_API 138 static UsdGeomCylinder 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 USDGEOM_API 146 UsdSchemaKind _GetSchemaKind() const override; 147 148 private: 149 // needs to invoke _GetStaticTfType. 150 friend class UsdSchemaRegistry; 151 USDGEOM_API 152 static const TfType &_GetStaticTfType(); 153 154 static bool _IsTypedSchema(); 155 156 // override SchemaBase virtuals. 157 USDGEOM_API 158 const TfType &_GetTfType() const override; 159 160 public: 161 // --------------------------------------------------------------------- // 162 // HEIGHT 163 // --------------------------------------------------------------------- // 164 /// The size of the cylinder's spine along the specified 165 /// \em axis. If you author \em height you must also author \em extent. 166 /// 167 /// \sa GetExtentAttr() 168 /// 169 /// | || 170 /// | -- | -- | 171 /// | Declaration | `double height = 2` | 172 /// | C++ Type | double | 173 /// | \ref Usd_Datatypes "Usd Type" | SdfValueTypeNames->Double | 174 USDGEOM_API 175 UsdAttribute GetHeightAttr() const; 176 177 /// See GetHeightAttr(), and also 178 /// \ref Usd_Create_Or_Get_Property for when to use Get vs Create. 179 /// If specified, author \p defaultValue as the attribute's default, 180 /// sparsely (when it makes sense to do so) if \p writeSparsely is \c true - 181 /// the default for \p writeSparsely is \c false. 182 USDGEOM_API 183 UsdAttribute CreateHeightAttr(VtValue const &defaultValue = VtValue(), bool writeSparsely=false) const; 184 185 public: 186 // --------------------------------------------------------------------- // 187 // RADIUS 188 // --------------------------------------------------------------------- // 189 /// The radius of the cylinder. If you author \em radius 190 /// you must also author \em extent. 191 /// 192 /// \sa GetExtentAttr() 193 /// 194 /// | || 195 /// | -- | -- | 196 /// | Declaration | `double radius = 1` | 197 /// | C++ Type | double | 198 /// | \ref Usd_Datatypes "Usd Type" | SdfValueTypeNames->Double | 199 USDGEOM_API 200 UsdAttribute GetRadiusAttr() const; 201 202 /// See GetRadiusAttr(), and also 203 /// \ref Usd_Create_Or_Get_Property for when to use Get vs Create. 204 /// If specified, author \p defaultValue as the attribute's default, 205 /// sparsely (when it makes sense to do so) if \p writeSparsely is \c true - 206 /// the default for \p writeSparsely is \c false. 207 USDGEOM_API 208 UsdAttribute CreateRadiusAttr(VtValue const &defaultValue = VtValue(), bool writeSparsely=false) const; 209 210 public: 211 // --------------------------------------------------------------------- // 212 // AXIS 213 // --------------------------------------------------------------------- // 214 /// The axis along which the spine of the cylinder is aligned 215 /// 216 /// | || 217 /// | -- | -- | 218 /// | Declaration | `uniform token axis = "Z"` | 219 /// | C++ Type | TfToken | 220 /// | \ref Usd_Datatypes "Usd Type" | SdfValueTypeNames->Token | 221 /// | \ref SdfVariability "Variability" | SdfVariabilityUniform | 222 /// | \ref UsdGeomTokens "Allowed Values" | X, Y, Z | 223 USDGEOM_API 224 UsdAttribute GetAxisAttr() const; 225 226 /// See GetAxisAttr(), and also 227 /// \ref Usd_Create_Or_Get_Property for when to use Get vs Create. 228 /// If specified, author \p defaultValue as the attribute's default, 229 /// sparsely (when it makes sense to do so) if \p writeSparsely is \c true - 230 /// the default for \p writeSparsely is \c false. 231 USDGEOM_API 232 UsdAttribute CreateAxisAttr(VtValue const &defaultValue = VtValue(), bool writeSparsely=false) const; 233 234 public: 235 // --------------------------------------------------------------------- // 236 // EXTENT 237 // --------------------------------------------------------------------- // 238 /// Extent is re-defined on Cylinder only to provide a fallback 239 /// value. \sa UsdGeomGprim::GetExtentAttr(). 240 /// 241 /// | || 242 /// | -- | -- | 243 /// | Declaration | `float3[] extent = [(-1, -1, -1), (1, 1, 1)]` | 244 /// | C++ Type | VtArray<GfVec3f> | 245 /// | \ref Usd_Datatypes "Usd Type" | SdfValueTypeNames->Float3Array | 246 USDGEOM_API 247 UsdAttribute GetExtentAttr() const; 248 249 /// See GetExtentAttr(), and also 250 /// \ref Usd_Create_Or_Get_Property for when to use Get vs Create. 251 /// If specified, author \p defaultValue as the attribute's default, 252 /// sparsely (when it makes sense to do so) if \p writeSparsely is \c true - 253 /// the default for \p writeSparsely is \c false. 254 USDGEOM_API 255 UsdAttribute CreateExtentAttr(VtValue const &defaultValue = VtValue(), bool writeSparsely=false) const; 256 257 public: 258 // ===================================================================== // 259 // Feel free to add custom code below this line, it will be preserved by 260 // the code generator. 261 // 262 // Just remember to: 263 // - Close the class declaration with }; 264 // - Close the namespace with PXR_NAMESPACE_CLOSE_SCOPE 265 // - Close the include guard with #endif 266 // ===================================================================== // 267 // --(BEGIN CUSTOM CODE)-- 268 269 /// Compute the extent for the cylinder defined by the height, radius, and 270 /// axis. 271 /// 272 /// \return true upon success, false if unable to calculate extent. 273 /// 274 /// On success, extent will contain an approximate axis-aligned bounding 275 /// box of the cylinder defined by the height, radius, and axis. 276 /// 277 /// This function is to provide easy authoring of extent for usd authoring 278 /// tools, hence it is static and acts outside a specific prim (as in 279 /// attribute based methods). 280 USDGEOM_API 281 static bool ComputeExtent(double height, double radius, const TfToken& axis, 282 VtVec3fArray* extent); 283 284 /// \overload 285 /// Computes the extent as if the matrix \p transform was first applied. 286 USDGEOM_API 287 static bool ComputeExtent(double height, double radius, const TfToken& axis, 288 const GfMatrix4d& transform, VtVec3fArray* extent); 289 }; 290 291 #define USDGEOM_CYLINDER_API_VERSION 1 292 293 PXR_NAMESPACE_CLOSE_SCOPE 294 295 #endif // USDGEOM_GENERATED_CYLINDER_H 296