HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
IFaceSet.h
Go to the documentation of this file.
1 //-*****************************************************************************
2 //
3 // Copyright (c) 2009-2012,
4 // Sony Pictures Imageworks, Inc. and
5 // Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
6 //
7 // All rights reserved.
8 //
9 // Redistribution and use in source and binary forms, with or without
10 // modification, are permitted provided that the following conditions are
11 // met:
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // * Redistributions in binary form must reproduce the above
15 // copyright notice, this list of conditions and the following disclaimer
16 // in the documentation and/or other materials provided with the
17 // distribution.
18 // * Neither the name of Sony Pictures Imageworks, nor
19 // Industrial Light & Magic nor the names of their contributors may be used
20 // to endorse or promote products derived from this software without specific
21 // prior written permission.
22 //
23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 //
35 //-*****************************************************************************
36 
37 #ifndef Alembic_AbcGeom_IFaceSet_h
38 #define Alembic_AbcGeom_IFaceSet_h
39 
40 #include <Alembic/Util/Export.h>
46 
47 namespace Alembic {
48 namespace AbcGeom {
49 namespace ALEMBIC_VERSION_NS {
50 
51 //-*****************************************************************************
52 class ALEMBIC_EXPORT IFaceSetSchema : public IGeomBaseSchema<FaceSetSchemaInfo>
53 {
54 public:
55  //-*************************************************************************
56  // FACESET MESH SCHEMA SAMPLE TYPE
57  //-*************************************************************************
58  class Sample
59  {
60  public:
61  typedef Sample this_type;
62 
63  //! Users never create this data directly
64  Sample() { reset(); }
65 
66  // main stuff
67  Abc::Int32ArraySamplePtr getFaces() const { return m_faces; }
68 
69  // bounds
70  Abc::Box3d getSelfBounds() const { return m_selfBounds; }
71 
72  bool valid() const
73  {
74  return m_faces.get() != 0;
75  }
76 
77  void reset()
78  {
79  m_faces.reset();
80 
81  m_selfBounds.makeEmpty();
82  }
83 
84  ALEMBIC_OPERATOR_BOOL( valid() );
85 
86  protected:
87  friend class IFaceSetSchema;
88 
90 
91 
92  // bounds
94 
95  }; // end IFaceSetSchema::Sample
96 
97  //-*************************************************************************
98  // FACESET SCHEMA
99  //-*************************************************************************
100 public:
101  //! By convention we always define this_type in AbcGeom classes.
102  //! Used by unspecified-bool-type conversion below
104 
105  //-*************************************************************************
106  // CONSTRUCTION, DESTRUCTION, ASSIGNMENT
107  //-*************************************************************************
108 
109  //! The default constructor creates an empty IFaceSetSchema
110  //! ...
112 
113  //! This constructor creates a new faceset reader.
114  //! The first argument is the parent ICompoundProperty, from which the
115  //! error handler policy for is derived. The second argument is the name
116  //! of the ICompoundProperty that contains this schemas properties. The
117  //! remaining optional arguments can be used to override the
118  //! ErrorHandlerPolicy and to specify schema interpretation matching.
120  const std::string &iName,
121 
122  const Abc::Argument &iArg0 = Abc::Argument(),
123  const Abc::Argument &iArg1 = Abc::Argument() )
124  : IGeomBaseSchema<FaceSetSchemaInfo>( iParent, iName, iArg0, iArg1 )
125  {
126  init( iArg0, iArg1 );
127  }
128 
129  //! This constructor wraps an existing ICompoundProperty as the faceset
130  //! reader, and the error handler policy is derived from it.
131  //! The remaining optional arguments can be used to override the
132  //! ErrorHandlerPolicy and to specify schema interpretation matching.
134  const Abc::Argument &iArg0 = Abc::Argument(),
135  const Abc::Argument &iArg1 = Abc::Argument() )
136  : IGeomBaseSchema<FaceSetSchemaInfo>( iProp, iArg0, iArg1 )
137  {
138  init( iArg0, iArg1 );
139  }
140 
141  //! wrap an existing schema object
142  template <class CPROP_PTR>
143  IFaceSetSchema( CPROP_PTR iThis,
144  Abc::WrapExistingFlag iFlag,
145 
146  const Abc::Argument &iArg0 = Abc::Argument(),
147  const Abc::Argument &iArg1 = Abc::Argument() )
148  : IGeomBaseSchema<FaceSetSchemaInfo>( iThis, iFlag, iArg0, iArg1 )
149  {
150  init( iArg0, iArg1 );
151  }
152 
153  //! Copy constructor. (explicit copy ctor for msvc bug workaround)
155  : IGeomBaseSchema<FaceSetSchemaInfo>()
156  {
157  *this = iCopy;
158  }
159 
160  //! Default assignment operator used.
161 
162  //-*************************************************************************
163  // SCHEMA STUFF
164  //-*************************************************************************
165 
166 
167  //! if isConstant() is true, the mesh contains no time-varying values
168  bool isConstant() const { return (m_facesProperty.isConstant ()); }
169 
170  //-*************************************************************************
171  // SAMPLE STUFF
172  //-*************************************************************************
173 
174  //! Get number of samples written so far.
175  //! ...
176  size_t getNumSamples() const;
177 
178  //! Return the time sampling
180  {
181  if ( m_facesProperty.valid() )
182  return m_facesProperty.getTimeSampling();
183  return getObject().getArchive().getTimeSampling(0);
184  }
185 
186  void get( Sample &iSamp,
187  const Abc::ISampleSelector &iSS = Abc::ISampleSelector() ) const;
188 
190  {
191  Sample smp;
192  get( smp, iSS );
193  return smp;
194  }
195 
196  FaceSetExclusivity getFaceExclusivity() const;
197 
199  {
200  return m_facesProperty;
201  }
202 
203  //-*************************************************************************
204  // ABC BASE MECHANISMS
205  // These functions are used by Abc to deal with errors, rewrapping,
206  // and so on.
207  //-*************************************************************************
208 
209  //! Reset returns this function set to an empty, default
210  //! state.
211  void reset()
212  {
213  m_facesProperty.reset();
214 
216  }
217 
218  //! Valid returns whether this function set is
219  //! valid.
220  bool valid() const
221  {
223  m_facesProperty.valid() );
224  }
225 
226  //! unspecified-bool-type operator overload.
227  //! ...
229 
230 protected:
231  void init( const Abc::Argument &iArg0, const Abc::Argument &iArg1 );
232 
234 };
235 
236 //-*****************************************************************************
237 // SCHEMA OBJECT
238 //-*****************************************************************************
240 
241 typedef Util::shared_ptr< IFaceSet > IFaceSetPtr;
242 
243 } // End namespace ALEMBIC_VERSION_NS
244 
245 using namespace ALEMBIC_VERSION_NS;
246 
247 } // End namespace AbcGeom
248 } // End namespace Alembic
249 
250 #endif
#define ALEMBIC_OPERATOR_BOOL(PASS_COND)
Definition: OperatorBool.h:42
Util::shared_ptr< IFaceSet > IFaceSetPtr
Definition: IFaceSet.h:241
Alembic::Util::shared_ptr< Int32ArraySample > Int32ArraySamplePtr
GLsizei const GLchar *const * string
Definition: glcorearb.h:813
FaceSetExclusivity
Hint to indicate face membership is mutally exclusive. Some structures that group faces only allow a ...
Alembic::Util::shared_ptr< TimeSampling > TimeSamplingPtr
Definition: TimeSampling.h:137
bool isConstant() const
Default assignment operator used.
Definition: IFaceSet.h:168
Sample()
Users never create this data directly.
Definition: IFaceSet.h:64
IFaceSetSchema(CPROP_PTR iThis, Abc::WrapExistingFlag iFlag, const Abc::Argument &iArg0=Abc::Argument(), const Abc::Argument &iArg1=Abc::Argument())
wrap an existing schema object
Definition: IFaceSet.h:143
AbcA::TimeSamplingPtr getTimeSampling() const
Return the time sampling.
Definition: IFaceSet.h:179
#define ALEMBIC_OVERRIDE_OPERATOR_BOOL(PASS_COND)
Definition: OperatorBool.h:56
Abc::IInt32ArrayProperty getFacesProperty() const
Definition: IFaceSet.h:198
IFaceSetSchema(const IFaceSetSchema &iCopy)
Copy constructor. (explicit copy ctor for msvc bug workaround)
Definition: IFaceSet.h:154
Box< V3d > Box3d
Definition: ImathBox.h:139
IFaceSetSchema(const ICompoundProperty &iParent, const std::string &iName, const Abc::Argument &iArg0=Abc::Argument(), const Abc::Argument &iArg1=Abc::Argument())
Definition: IFaceSet.h:119
IFaceSetSchema(const ICompoundProperty &iProp, const Abc::Argument &iArg0=Abc::Argument(), const Abc::Argument &iArg1=Abc::Argument())
Definition: IFaceSet.h:133
#define ALEMBIC_EXPORT
Definition: Export.h:51
Abc::ISchemaObject< IFaceSetSchema > IFaceSet
Definition: IFaceSet.h:239
Sample getValue(const Abc::ISampleSelector &iSS=Abc::ISampleSelector()) const
Definition: IFaceSet.h:189
#define ALEMBIC_VERSION_NS
Definition: Foundation.h:105