HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OGeomParam.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_OGeomParam_h
38 #define Alembic_AbcGeom_OGeomParam_h
39 
42 
43 namespace Alembic {
44 namespace AbcGeom {
45 namespace ALEMBIC_VERSION_NS {
46 
47 //-*****************************************************************************
48 template <class TRAITS>
50 {
51 public:
52  typedef typename TRAITS::value_type value_type;
54 
55 
56  //-*************************************************************************
57  // inner class for setting
58  class Sample
59  {
60  public:
61  typedef Sample this_type;
62 
65  {}
66 
68  GeometryScope iScope )
69  : m_vals( iVals )
70  , m_scope( iScope )
71  {}
72 
74  const Abc::UInt32ArraySample &iIndices,
75  GeometryScope iScope )
76  : m_vals( iVals )
77  , m_indices( iIndices )
78  , m_scope ( iScope )
79  {}
80 
82  { m_vals = iVals; }
84  { return m_vals; }
85 
86  void setIndices( const Abc::UInt32ArraySample &iIndices )
87  { m_indices = iIndices; }
89  { return m_indices; }
90 
91  void setScope( GeometryScope iScope )
92  { m_scope = iScope; }
94  { return m_scope; }
95 
96  void reset()
97  {
98  m_vals.reset();
99  m_indices.reset();
101  }
102 
103  bool valid() const { return m_vals; }
104 
106 
107  protected:
111  };
112 
113  //-*************************************************************************
115  typedef typename this_type::Sample sample_type;
116 
117  static const char * getInterpretation()
118  {
119  return TRAITS::interpretation();
120  }
121 
122  static bool matches( const AbcA::PropertyHeader &iHeader,
124  {
125  if ( iHeader.isCompound() )
126  {
127  return ( iHeader.getMetaData().get( "podName" ) ==
129  ( std::string() == getInterpretation() ||
130  atoi(
131  iHeader.getMetaData().get( "podExtent" ).c_str() ) ==
132  TRAITS::dataType().getExtent() ) ) &&
133  prop_type::matches( iHeader.getMetaData(), iMatching );
134  }
135  else if ( iHeader.isArray() )
136  {
137  return prop_type::matches( iHeader, iMatching );
138  }
139 
140  return false;
141 
142  }
143 
145  : m_isIndexed(false)
147 
148  {
149  }
150 
152  const std::string &iName,
153  bool iIsIndexed,
154  GeometryScope iScope,
155  size_t iArrayExtent,
156  const Argument &iArg0 = Argument(),
157  const Argument &iArg1 = Argument(),
158  const Argument &iArg2 = Argument()
159  )
160  : m_name( iName )
161  , m_isIndexed( iIsIndexed )
162  , m_scope( iScope )
163  {
164  *this = OTypedGeomParam( iParent.getPtr(), iName, iIsIndexed, iScope,
165  iArrayExtent, iArg0, iArg1, iArg2 );
166  }
167 
169  const std::string &iName,
170  bool iIsIndexed,
171  GeometryScope iScope,
172  size_t iArrayExtent,
173  const Argument &iArg0 = Argument(),
174  const Argument &iArg1 = Argument(),
175  const Argument &iArg2 = Argument()
176  )
177  : m_name( iName )
178  , m_isIndexed( iIsIndexed )
179  , m_scope( iScope )
180  {
182  iArg0.setInto( args );
183  iArg1.setInto( args );
184  iArg2.setInto( args );
185 
186  AbcA::MetaData md = args.getMetaData();
187 
188  SetGeometryScope( md, iScope );
189 
190  md.set( "isGeomParam", "true" );
191 
193  TRAITS::dataType().getPod() ) );
194 
195  size_t extent = TRAITS::dataType().getExtent();
196 
197  md.set( "podName", podName );
198 
199  std::ostringstream extentStrm;
200  extentStrm << extent;
201  std::string extentStr = extentStrm.str();
202  md.set( "podExtent", extentStr );
203 
204  std::ostringstream arrayExtentStrm;
205  arrayExtentStrm << iArrayExtent;
206  std::string arrayExtentStr = arrayExtentStrm.str();
207  md.set( "arrayExtent", arrayExtentStr );
208 
209  md.set( "interpretation", TRAITS::interpretation() );
210 
212 
213  AbcA::TimeSamplingPtr tsPtr = args.getTimeSampling();
214  uint32_t tsIndex = args.getTimeSamplingIndex();
215 
216  // if we specified a valid TimeSamplingPtr, use it to determine the
217  // index otherwise we'll use the index, which defaults to the
218  // intrinsic 0 index
219  if (tsPtr)
220  {
222  GetCompoundPropertyWriterPtr( iParent );
223  tsIndex =
224  parent->getObject()->getArchive()->addTimeSampling(*tsPtr);
225  }
226 
227  if ( m_isIndexed )
228  {
229  m_cprop = Abc::OCompoundProperty( iParent, iName, md, ehp );
230 
231  m_valProp = prop_type( m_cprop, ".vals", md, ehp, tsIndex );
232 
234  tsIndex );
235  }
236  else
237  {
238  m_valProp = prop_type( iParent, iName, md, ehp, tsIndex );
239  }
240  }
241 
242 public:
243 
244  void set( const sample_type &iSamp )
245  {
246  ALEMBIC_ABC_SAFE_CALL_BEGIN( "OTypedGeomParam::set()" );
247 
248  if ( m_valProp.getNumSamples() == 0 )
249  {
250  m_valProp.set( iSamp.getVals() );
251  if ( m_isIndexed ) { m_indicesProperty.set( iSamp.getIndices() ); }
252  }
253  else
254  {
255  SetPropUsePrevIfNull( m_valProp, iSamp.getVals() );
256  if ( m_isIndexed )
257  {
258  SetPropUsePrevIfNull( m_indicesProperty, iSamp.getIndices() );
259  }
260  }
261 
263  }
264 
266  {
267  ALEMBIC_ABC_SAFE_CALL_BEGIN( "OTypedGeomParam::setFromPrevious()" );
268 
270 
272 
274  }
275 
276  void setTimeSampling( uint32_t iIndex )
277  {
279  "OTypedGeomParam::setTimeSampling( uint32_t )" );
280 
281  m_valProp.setTimeSampling( iIndex );
282 
283  if ( m_isIndexed ) { m_indicesProperty.setTimeSampling( iIndex ); }
284 
286  }
287 
289  {
291  "OTypedGeomParam::setTimeSampling( TimeSamplingPtr )" );
292 
293  if (iTime)
294  {
295  uint32_t tsIndex =
297  *iTime);
298  setTimeSampling( tsIndex );
299  }
300 
302  }
303 
304  size_t getNumSamples() const
305  {
306  ALEMBIC_ABC_SAFE_CALL_BEGIN( "OTypedGeomParam::getNumSamples()" );
307 
308  if ( m_isIndexed )
309  {
310  if ( m_indicesProperty )
311  {
314  }
315  else { return 0; }
316  }
317  else
318  {
319  if ( m_valProp ) { return m_valProp.getNumSamples(); }
320  else { return 0; }
321  }
322 
324 
325  return 0;
326  }
327 
329 
330  bool isIndexed() const { return m_isIndexed; }
331 
332  GeometryScope getScope() const { return m_scope; }
333 
335  {
336  return m_valProp.getTimeSampling();
337  }
338 
339  const std::string &getName() const { return m_name; }
340 
341  bool valid() const
342  {
343  return ( m_valProp.valid()
344  && ( ( ! m_isIndexed ) || m_indicesProperty ) );
345  }
346 
348 
349  void reset()
350  {
351  m_name = "";
352  m_valProp.reset();
354  m_cprop.reset();
356  m_isIndexed = false;
357  }
358 
360 
362 
363 private:
364  Abc::ErrorHandler &getErrorHandler() const
365  { return m_valProp.getErrorHandler(); }
366 
367 protected:
369 
373 
375 
376  // if the GeomParam is not indexed, this will not exist.
378 };
379 
380 //-*****************************************************************************
381 // TYPEDEFS
382 //-*****************************************************************************
383 
398 
403 
408 
413 
418 
423 
428 
433 
436 
440 
444 
447 
450 
451 } // End namespace ALEMBIC_VERSION_NS
452 
453 using namespace ALEMBIC_VERSION_NS;
454 
455 } // End namespace AbcGeom
456 } // End namespace Alembic
457 
458 #endif
OTypedGeomParam< V2dTPTraits > OV2dGeomParam
Definition: OGeomParam.h:402
GLint GLenum GLsizei GLsizei GLsizei GLsizei extent
Definition: glew.h:15877
AbcA::TimeSamplingPtr getTimeSampling() const
OTypedGeomParam< V2sTPTraits > OV2sGeomParam
Definition: OGeomParam.h:399
void setTimeSampling(AbcA::TimeSamplingPtr iTime)
Definition: OGeomParam.h:288
OTypedGeomParam< Box3dTPTraits > OBox3dGeomParam
Definition: OGeomParam.h:427
OTypedGeomParam< V2iTPTraits > OV2iGeomParam
Definition: OGeomParam.h:400
const Abc::UInt32ArraySample & getIndices() const
Definition: OGeomParam.h:88
OTypedGeomParam(OCompoundProperty iParent, const std::string &iName, bool iIsIndexed, GeometryScope iScope, size_t iArrayExtent, const Argument &iArg0=Argument(), const Argument &iArg1=Argument(), const Argument &iArg2=Argument())
Definition: OGeomParam.h:151
OTypedGeomParam< QuatfTPTraits > OQuatfGeomParam
Definition: OGeomParam.h:434
OTypedGeomParam< P2fTPTraits > OP2fGeomParam
Definition: OGeomParam.h:411
void setIndices(const Abc::UInt32ArraySample &iIndices)
Definition: OGeomParam.h:86
uint32_t addTimeSampling(const AbcA::TimeSampling &iTs)
OTypedGeomParam< P2iTPTraits > OP2iGeomParam
Definition: OGeomParam.h:410
OTypedGeomParam< Box3sTPTraits > OBox3sGeomParam
Definition: OGeomParam.h:424
OTypedGeomParam< Float32TPTraits > OFloatGeomParam
Definition: OGeomParam.h:394
OTypedGeomParam< P3sTPTraits > OP3sGeomParam
Definition: OGeomParam.h:414
OTypedGeomParam< BooleanTPTraits > OBoolGeomParam
Definition: OGeomParam.h:384
OTypedGeomParam< Box2sTPTraits > OBox2sGeomParam
Definition: OGeomParam.h:419
OTypedGeomParam< C4fTPTraits > OC4fGeomParam
Definition: OGeomParam.h:442
void setVals(const Abc::TypedArraySample< TRAITS > &iVals)
Definition: OGeomParam.h:81
OTypedGeomParam< P3dTPTraits > OP3dGeomParam
Definition: OGeomParam.h:417
AbcA::TimeSamplingPtr getTimeSampling() const
Definition: Argument.h:89
uint64 value_type
Definition: GA_PrimCompat.h:29
OTypedGeomParam< Float64TPTraits > ODoubleGeomParam
Definition: OGeomParam.h:395
OTypedGeomParam< V3iTPTraits > OV3iGeomParam
Definition: OGeomParam.h:405
static bool matches(const AbcA::MetaData &iMetaData, SchemaInterpMatching iMatching=kStrictMatching)
AbcA::TimeSamplingPtr getTimeSampling() const
Definition: OGeomParam.h:334
OTypedGeomParam< M44fTPTraits > OM44fGeomParam
Definition: OGeomParam.h:431
OTypedGeomParam< C4hTPTraits > OC4hGeomParam
Definition: OGeomParam.h:441
OTypedGeomParam< Box3iTPTraits > OBox3iGeomParam
Definition: OGeomParam.h:425
const Abc::TypedArraySample< TRAITS > & getVals() const
Definition: OGeomParam.h:83
OTypedGeomParam< Box3fTPTraits > OBox3fGeomParam
Definition: OGeomParam.h:426
OTypedGeomParam< Box2fTPTraits > OBox2fGeomParam
Definition: OGeomParam.h:421
Alembic::Util::shared_ptr< TimeSampling > TimeSamplingPtr
Definition: TimeSampling.h:137
OTypedGeomParam< N3fTPTraits > ON3fGeomParam
Definition: OGeomParam.h:448
OTypedGeomParam< M44dTPTraits > OM44dGeomParam
Definition: OGeomParam.h:432
OTypedGeomParam< N2dTPTraits > ON2dGeomParam
Definition: OGeomParam.h:446
OTypedGeomParam< P2sTPTraits > OP2sGeomParam
Definition: OGeomParam.h:409
static bool matches(const AbcA::PropertyHeader &iHeader, SchemaInterpMatching iMatching=kStrictMatching)
Definition: OGeomParam.h:122
OUInt32ArrayProperty getIndexProperty() const
Definition: OGeomParam.h:361
OTypedGeomParam< Uint64TPTraits > OUInt64GeomParam
Definition: OGeomParam.h:391
ErrorHandler::Policy getErrorHandlerPolicy() const
Definition: Argument.h:83
#define ALEMBIC_ABC_SAFE_CALL_END_RESET()
Definition: ErrorHandler.h:181
void SetPropUsePrevIfNull(PROP iProp, SAMP iSamp)
Definition: Foundation.h:96
ErrorHandler::Policy GetErrorHandlerPolicy(SOMETHING iSomething, const Argument &iArg0, const Argument &iArg1=Argument(), const Argument &iArg2=Argument(), const Argument &iArg3=Argument())
Definition: Argument.h:242
GLsizei const GLchar *const * string
Definition: glcorearb.h:813
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
OTypedGeomParam< Float16TPTraits > OHalfGeomParam
Definition: OGeomParam.h:393
OTypedGeomParam< Uint32TPTraits > OUInt32GeomParam
Definition: OGeomParam.h:389
Sample(const Abc::TypedArraySample< TRAITS > &iVals, const Abc::UInt32ArraySample &iIndices, GeometryScope iScope)
Definition: OGeomParam.h:73
#define ALEMBIC_ABC_SAFE_CALL_BEGIN(CONTEXT)
Definition: ErrorHandler.h:172
INT GLenum dataType
Definition: wglew.h:145
OTypedGeomParam< StringTPTraits > OStringGeomParam
Definition: OGeomParam.h:396
const char * PODName(PlainOldDataType pod)
OTypedGeomParam< Box2iTPTraits > OBox2iGeomParam
Definition: OGeomParam.h:420
ErrorHandler & getErrorHandler() const
Definition: Base.h:76
OTypedGeomParam< C3hTPTraits > OC3hGeomParam
Definition: OGeomParam.h:437
OTypedGeomParam< P3iTPTraits > OP3iGeomParam
Definition: OGeomParam.h:415
OTypedGeomParam< M33dTPTraits > OM33dGeomParam
Definition: OGeomParam.h:430
void set(const std::string &iKey, const std::string &iData)
Definition: MetaData.h:168
OTypedGeomParam< C4cTPTraits > OC4cGeomParam
Definition: OGeomParam.h:443
OTypedGeomParam< Int32TPTraits > OInt32GeomParam
Definition: OGeomParam.h:390
OTypedGeomParam< V3sTPTraits > OV3sGeomParam
Definition: OGeomParam.h:404
#define ALEMBIC_ABC_SAFE_CALL_END()
Definition: ErrorHandler.h:198
OTypedGeomParam< C3cTPTraits > OC3cGeomParam
Definition: OGeomParam.h:439
OTypedGeomParam< V2fTPTraits > OV2fGeomParam
Definition: OGeomParam.h:401
OTypedGeomParam< Int8TPTraits > OCharGeomParam
Definition: OGeomParam.h:386
OTypedGeomParam< V3dTPTraits > OV3dGeomParam
Definition: OGeomParam.h:407
OTypedGeomParam(AbcA::CompoundPropertyWriterPtr iParent, const std::string &iName, bool iIsIndexed, GeometryScope iScope, size_t iArrayExtent, const Argument &iArg0=Argument(), const Argument &iArg1=Argument(), const Argument &iArg2=Argument())
Definition: OGeomParam.h:168
OTypedGeomParam< Int64TPTraits > OInt64GeomParam
Definition: OGeomParam.h:392
OTypedGeomParam< WstringTPTraits > OWstringGeomParam
Definition: OGeomParam.h:397
OTypedGeomParam< P3fTPTraits > OP3fGeomParam
Definition: OGeomParam.h:416
void SetGeometryScope(AbcA::MetaData &ioMetaData, GeometryScope iScope)
std::string get(const std::string &iKey) const
Definition: MetaData.h:192
OTypedGeomParam< Int16TPTraits > OInt16GeomParam
Definition: OGeomParam.h:388
**If you just want to fire and args
Definition: thread.h:615
OTypedGeomParam< QuatdTPTraits > OQuatdGeomParam
Definition: OGeomParam.h:435
OTypedArrayProperty< Uint32TPTraits > OUInt32ArrayProperty
OTypedGeomParam< P2dTPTraits > OP2dGeomParam
Definition: OGeomParam.h:412
AbcA::CompoundPropertyWriterPtr GetCompoundPropertyWriterPtr(AbcA::CompoundPropertyWriterPtr iPtr)
Definition: Foundation.h:174
const AbcA::MetaData & getMetaData() const
Definition: Argument.h:86
OTypedGeomParam< V3fTPTraits > OV3fGeomParam
Definition: OGeomParam.h:406
OTypedGeomParam< C3fTPTraits > OC3fGeomParam
Definition: OGeomParam.h:438
OTypedGeomParam< Uint8TPTraits > OUcharGeomParam
Definition: OGeomParam.h:385
OTypedGeomParam< N3dTPTraits > ON3dGeomParam
Definition: OGeomParam.h:449
OTypedGeomParam< Box2dTPTraits > OBox2dGeomParam
Definition: OGeomParam.h:422
OTypedGeomParam< Uint16TPTraits > OUInt16GeomParam
Definition: OGeomParam.h:387
OTypedGeomParam< N2fTPTraits > ON2fGeomParam
Definition: OGeomParam.h:445
#define ALEMBIC_VERSION_NS
Definition: Foundation.h:109
OTypedGeomParam< M33fTPTraits > OM33fGeomParam
Definition: OGeomParam.h:429
Alembic::Util::shared_ptr< CompoundPropertyWriter > CompoundPropertyWriterPtr
Sample(const Abc::TypedArraySample< TRAITS > &iVals, GeometryScope iScope)
Definition: OGeomParam.h:67