coneMeshGenerator.h
1 //
2 // Copyright 2022 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 PXR_IMAGING_GEOM_UTIL_CONE_MESH_GENERATOR_H
25 #define PXR_IMAGING_GEOM_UTIL_CONE_MESH_GENERATOR_H
26 
27 #include "pxr/imaging/geomUtil/api.h"
28 #include "pxr/imaging/geomUtil/meshGeneratorBase.h"
29 
30 #include "pxr/pxr.h"
31 
32 PXR_NAMESPACE_OPEN_SCOPE
33 
34 class GfMatrix4d;
35 class PxOsdMeshTopology;
36 
67 {
68 public:
69  static constexpr size_t minNumRadial = 3;
70 
71  GEOMUTIL_API
72  static size_t ComputeNumPoints(
73  const size_t numRadial,
74  const bool closedSweep = true);
75 
76  GEOMUTIL_API
77  static PxOsdMeshTopology GenerateTopology(
78  const size_t numRadial,
79  const bool closedSweep = true);
80 
81  template<typename PointIterType,
82  typename ScalarType,
83  typename Enabled =
84  typename _EnableIfGfVec3Iterator<PointIterType>::type>
85  static void GeneratePoints(
86  PointIterType iter,
87  const size_t numRadial,
88  const ScalarType radius,
89  const ScalarType height,
90  const GfMatrix4d* framePtr = nullptr)
91  {
92  constexpr ScalarType sweep = 360;
93  GeneratePoints(iter, numRadial, radius, height, sweep, framePtr);
94  }
95 
96  template<typename PointIterType,
97  typename ScalarType,
98  typename Enabled =
99  typename _EnableIfGfVec3Iterator<PointIterType>::type>
100  static void GeneratePoints(
101  PointIterType iter,
102  const size_t numRadial,
103  const ScalarType radius,
104  const ScalarType height,
105  const ScalarType sweepDegrees,
106  const GfMatrix4d* framePtr = nullptr)
107  {
108  using PointType =
109  typename std::iterator_traits<PointIterType>::value_type;
110 
111  _GeneratePointsImpl(numRadial, radius, height, sweepDegrees,
112  framePtr ? _PointWriter<PointType>(iter, framePtr)
113  : _PointWriter<PointType>(iter));
114  }
115 
116  using GeomUtilMeshGeneratorBase::GeneratePoints;
117 
118 private:
119 
120  template<typename PointType>
121  static void _GeneratePointsImpl(
122  const size_t numRadial,
123  const typename PointType::ScalarType radius,
124  const typename PointType::ScalarType height,
125  const typename PointType::ScalarType sweepDegrees,
126  const _PointWriter<PointType>& ptWriter);
127 };
128 
129 PXR_NAMESPACE_CLOSE_SCOPE
130 
131 #endif // PXR_IMAGING_GEOM_UTIL_CONE_MESH_GENERATOR_H
This class provides common implementation for the different mesh generator classes in GeomUtil.
Topology data for meshes.
Definition: meshTopology.h:69
Stores a 4x4 matrix of double elements.
Definition: matrix4d.h:87
This class provides an implementation for generating topology and point positions on a cone of a give...