My Project
patchDescriptor.h
Go to the documentation of this file.
1//
2// Copyright 2013 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
25#ifndef OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H
26#define OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H
27
28#include "../version.h"
29
30#include "../far/types.h"
31#include "../sdc/types.h"
32
33#include <vector>
34
35namespace OpenSubdiv {
36namespace OPENSUBDIV_VERSION {
37
38namespace Far {
39
45
46public:
47
48 enum Type {
50
53
56
58
64 };
65
66public:
67
70 _type(NON_PATCH) { }
71
73 PatchDescriptor(int type) :
74 _type(type) { }
75
78 _type(d.GetType()) { }
79
81 Type GetType() const {
82 return (Type)_type;
83 }
84
86 static inline bool IsAdaptive(Type type) {
87 return type > TRIANGLES;
88 }
89
91 bool IsAdaptive() const {
92 return IsAdaptive( this->GetType() );
93 }
94
97 static inline short GetNumControlVertices( Type t );
98
100 static inline short GetNumFVarControlVertices( Type t );
101
104 short GetNumControlVertices() const {
105 return GetNumControlVertices( this->GetType() );
106 }
107
110 return GetNumFVarControlVertices( this->GetType() );
111 }
112
114 static short GetRegularPatchSize() { return 16; }
115
117 static short GetGregoryPatchSize() { return 4; }
118
120 static short GetGregoryBasisPatchSize() { return 20; }
121
122
126
128 inline bool operator < ( PatchDescriptor const other ) const;
129
131 inline bool operator == ( PatchDescriptor const other ) const;
132
133 // debug helper
134 void print() const;
135
136private:
137 unsigned int _type;
138};
139
141
142// Returns the number of control vertices expected for a patch of this type
143inline short
145 switch (type) {
146 case REGULAR : return GetRegularPatchSize();
147 case LOOP : return 12;
148 case QUADS : return 4;
149 case GREGORY :
152 case GREGORY_TRIANGLE : return 18;
153 case TRIANGLES : return 3;
154 case LINES : return 2;
155 case POINTS : return 1;
156 default : return -1;
157 }
158}
159
160// Returns the number of face-varying control vertices expected for a patch of this type
161inline short
164}
165
166// Allows ordering of patches by type
167inline bool
169 return (_type < other._type);
170}
171
172// True if the descriptors are identical
173inline bool
175 return _type == other._type;
176}
177
178
179
180} // end namespace Far
181
182} // end namespace OPENSUBDIV_VERSION
183using namespace OPENSUBDIV_VERSION;
184
185} // end namespace OpenSubdiv
186
187#endif /* OPENSUBDIV3_FAR_PATCH_DESCRIPTOR_H */
Vtr::ConstArray< PatchDescriptor > ConstPatchDescriptorArray
SchemeType
Enumerated type for all subdivision schemes supported by OpenSubdiv.
Definition: types.h:37
@ LOOP
regular triangular patch for the Loop scheme
@ REGULAR
regular B-Spline patch for the Catmark scheme
bool IsAdaptive() const
Returns true if the type is an adaptive patch.
Type GetType() const
Returns the type of the patch.
static short GetGregoryBasisPatchSize()
Number of control vertices of Gregory patch basis (20)
short GetNumControlVertices() const
Returns the number of control vertices expected for a patch of the type described.
PatchDescriptor(PatchDescriptor const &d)
Copy Constructor.
bool operator==(PatchDescriptor const other) const
True if the descriptors are identical.
static short GetRegularPatchSize()
Number of control vertices of Regular Patches in table.
static bool IsAdaptive(Type type)
Returns true if the type is an adaptive (non-linear) patch.
bool operator<(PatchDescriptor const other) const
Allows ordering of patches by type.
static short GetGregoryPatchSize()
Number of control vertices of Gregory (and Gregory Boundary) Patches in table.
static Vtr::ConstArray< PatchDescriptor > GetAdaptivePatchDescriptors(Sdc::SchemeType type)
Returns a vector of all the legal patch descriptors for the given adaptive subdivision scheme.