Free Electron
SurfaceAccessorUsd.h
Go to the documentation of this file.
1 /* Copyright (C) 2003-2021 Free Electron Organization
2  Any use of this software requires a license. If a valid license
3  was not distributed with this file, visit freeelectron.org. */
4 
5 /** @file */
6 
7 #ifndef __usd_SurfaceAccessorUsd_h__
8 #define __usd_SurfaceAccessorUsd_h__
9 namespace fe
10 {
11 namespace ext
12 {
13 
14 /**************************************************************************//**
15  @brief USD Surface Editing Implementation
16 
17  @ingroup usd
18 *//***************************************************************************/
19 class FE_DL_EXPORT SurfaceAccessorUsd:
20  public SurfaceAccessorBase
21 {
22  public:
23  SurfaceAccessorUsd(void)
24  { setName("SurfaceAccessorUsd"); }
25 virtual ~SurfaceAccessorUsd(void)
26  { writeBack(); }
27 
28  using SurfaceAccessorBase::set;
29  using SurfaceAccessorBase::append;
30  using SurfaceAccessorBase::spatialVector;
31 
32  //* as SurfaceAccessorI
33  BWORD bind(SurfaceAccessibleI::Element a_element,
34  SurfaceAccessibleI::Attribute a_attribute);
35  BWORD bind(SurfaceAccessibleI::Element a_element,
36  const String& a_name);
37 
38 virtual U32 count(void) const;
39 virtual U32 subCount(U32 a_index) const;
40 
41 virtual void set(U32 a_index,U32 a_subIndex,String a_string);
42 virtual String string(U32 a_index,U32 a_subIndex=0);
43 
44 virtual void set(U32 a_index,U32 a_subIndex,I32 a_integer);
45 virtual I32 integer(U32 a_index,U32 a_subIndex=0);
46 
47  //* TODO
48 virtual I32 append(SurfaceAccessibleI::Form a_form)
49  { return -1; }
50 virtual void append(U32 a_index,I32 a_integer) {}
51 
52 virtual void set(U32 a_index,U32 a_subIndex,Real a_real);
53 virtual Real real(U32 a_index,U32 a_subIndex=0);
54 
55 virtual void set(U32 a_index,U32 a_subIndex,
56  const SpatialVector& a_vector);
57 virtual SpatialVector spatialVector(U32 a_index,U32 a_subIndex=0);
58 
59  //* USD specific
60  void setPrimNode(sp<SurfaceAccessibleUsd::PrimNode>
61  a_spPrimNode)
62  {
63  m_spPrimNode=a_spPrimNode;
64  if(m_spPrimNode.isValid())
65  {
66  m_usdPrim=m_spPrimNode->usdPrim();
67  }
68  }
69 
71  { return m_spPrimNode; }
72 
73  void setFrame(Real a_frame)
74  { m_frame=a_frame; }
75 
76  void setYToZ(BWORD a_ytoz) { m_ytoz=a_ytoz; }
77 
78  private:
79 
80 virtual BWORD bindInternal(SurfaceAccessibleI::Element a_element,
81  const String& a_name);
82 
83  I32 indexOfVertex(I32 a_index,I32 a_subIndex)
84  {
85  FEASSERT(a_index<I32(m_primTable.size()));
86  FEASSERT(a_subIndex<m_primTable[a_index][1]);
87  if(a_index>=I32(m_primTable.size()) ||
88  a_subIndex>=m_primTable[a_index][1])
89  {
90  return -1;
91  }
92  const U32 tableIndex=
93  m_primTable[a_index][0]+a_subIndex;
94 
95  const BWORD elementVertex=
96  (m_element==SurfaceAccessibleI::e_vertex);
97  FEASSERT(elementVertex ||
98  tableIndex<m_intArray.size());
99  return elementVertex? tableIndex:
100  m_intArray[tableIndex];
101  }
102 
103  void addString(void);
104  void addInteger(void);
105  void addReal(void);
106  void addSpatialVector(void);
107 
108  I32 elementCount(
109  SurfaceAccessibleI::Element a_element) const;
110  I32 primElemCount(void) const;
111 
112  BWORD isBound(void) const
113  { return m_spPrimNode.isValid() &&
114  m_usdPrim.IsValid(); }
115 
116  BWORD matchingCount(SurfaceAccessibleI::Element a_element,
117  I32 m_count) const;
118 
119  SpatialTransform getTransform(UsdPrim a_usdPrim);
120 
121  BWORD writeBack(void);
122 
123  SpatialTransform m_transform;
124  SpatialTransform m_inverse;
125  Real m_frame;
126  BWORD m_isCurves;
127  BWORD m_isSkeleton;
128 
130  UsdPrim m_usdPrim;
131  UsdAttribute m_usdAttribute;
132  UsdAttribute m_mappingAttribute;
133  String m_usdAttrName;
134 
135  //* first vertex, subCount
136  Array<Vector2i> m_primTable;
137 
138  BWORD m_ytoz;
139  BWORD m_changed;
140  VtArray<TfToken> m_tokenArray;
141  VtArray<bool> m_boolArray;
142  VtArray<int> m_intArray;
143  VtArray<float> m_floatArray;
144  VtArray<double> m_doubleArray;
145  VtArray<GfVec3f> m_vec3Array;
146  VtArray<GfVec2f> m_vec2Array;
147  VtArray<GfMatrix4d> m_mat4Array;
148  I32 m_row;
149 };
150 
151 } /* namespace ext */
152 } /* namespace fe */
153 
154 #endif /* __usd_SurfaceAccessorUsd_h__ */
kernel
Definition: namespace.dox:3
Common Functionality for Accessor Surface.
Definition: SurfaceAccessorBase.h:20
Automatically reference-counted string container.
Definition: String.h:128
USD Surface Editing Implementation.
Definition: SurfaceAccessorUsd.h:19
Wrapper for std::vector.
Definition: Array.h:21