Alembic 1.8.11
Loading...
Searching...
No Matches
IFaceSet.h
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>
41#include <Alembic/AbcGeom/Foundation.h>
42#include <Alembic/AbcGeom/SchemaInfoDeclarations.h>
43#include <Alembic/AbcGeom/IGeomParam.h>
44#include <Alembic/AbcGeom/FaceSetExclusivity.h>
45#include <Alembic/AbcGeom/IGeomBase.h>
46
47namespace Alembic {
48namespace AbcGeom {
49namespace ALEMBIC_VERSION_NS {
50
51//-*****************************************************************************
52class ALEMBIC_EXPORT IFaceSetSchema : public IGeomBaseSchema<FaceSetSchemaInfo>
53{
54public:
55 //-*************************************************************************
56 // FACESET MESH SCHEMA SAMPLE TYPE
57 //-*************************************************************************
58 class Sample
59 {
60 public:
61 typedef Sample this_type;
62
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
89 Abc::Int32ArraySamplePtr m_faces;
90
91
92 // bounds
93 Abc::Box3d m_selfBounds;
94
95 }; // end IFaceSetSchema::Sample
96
97 //-*************************************************************************
98 // FACESET SCHEMA
99 //-*************************************************************************
100public:
104
105 //-*************************************************************************
106 // CONSTRUCTION, DESTRUCTION, ASSIGNMENT
107 //-*************************************************************************
108
112
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
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
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
154
155 //-*************************************************************************
156 // SCHEMA STUFF
157 //-*************************************************************************
158
159
161 bool isConstant() const { return (m_facesProperty.isConstant ()); }
162
163 //-*************************************************************************
164 // SAMPLE STUFF
165 //-*************************************************************************
166
169 size_t getNumSamples() const;
170
172 AbcA::TimeSamplingPtr getTimeSampling() const
173 {
174 if ( m_facesProperty.valid() )
175 return m_facesProperty.getTimeSampling();
176 return getObject().getArchive().getTimeSampling(0);
177 }
178
179 void get( Sample &iSamp,
180 const Abc::ISampleSelector &iSS = Abc::ISampleSelector() ) const;
181
182 Sample getValue( const Abc::ISampleSelector &iSS = Abc::ISampleSelector() ) const
183 {
184 Sample smp;
185 get( smp, iSS );
186 return smp;
187 }
188
189 FaceSetExclusivity getFaceExclusivity() const;
190
191 Abc::IInt32ArrayProperty getFacesProperty() const
192 {
193 return m_facesProperty;
194 }
195
196 //-*************************************************************************
197 // ABC BASE MECHANISMS
198 // These functions are used by Abc to deal with errors, rewrapping,
199 // and so on.
200 //-*************************************************************************
201
204 void reset()
205 {
206 m_facesProperty.reset();
207
208 IGeomBaseSchema<FaceSetSchemaInfo>::reset();
209 }
210
213 bool valid() const
214 {
215 return ( IGeomBaseSchema<FaceSetSchemaInfo>::valid() &&
216 m_facesProperty.valid() );
217 }
218
222
223protected:
224 void init( const Abc::Argument &iArg0, const Abc::Argument &iArg1 );
225
226 Abc::IInt32ArrayProperty m_facesProperty;
227};
228
229//-*****************************************************************************
230// SCHEMA OBJECT
231//-*****************************************************************************
233
234typedef Util::shared_ptr< IFaceSet > IFaceSetPtr;
235
236} // End namespace ALEMBIC_VERSION_NS
237
238using namespace ALEMBIC_VERSION_NS;
239
240} // End namespace AbcGeom
241} // End namespace Alembic
242
243#endif
Sample()
Users never create this data directly.
Definition IFaceSet.h:64
AbcA::TimeSamplingPtr getTimeSampling() const
Return the time sampling.
Definition IFaceSet.h:172
bool valid() const
Definition IFaceSet.h:213
bool isConstant() const
Default assignment and copy operator used.
Definition IFaceSet.h:161
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(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
IFaceSetSchema(const ICompoundProperty &iProp, const Abc::Argument &iArg0=Abc::Argument(), const Abc::Argument &iArg1=Abc::Argument())
Definition IFaceSet.h:133
IFaceSetSchema this_type
Definition IFaceSet.h:103
Alembic namespace ...
Definition ArchiveInfo.cpp:39