7 #ifndef __json_SurfaceAccessorGeo_h__ 8 #define __json_SurfaceAccessorGeo_h__ 26 m_pElementValues(NULL),
28 { setName(
"SurfaceAccessorGeo"); }
31 using SurfaceAccessorBase::set;
32 using SurfaceAccessorBase::append;
33 using SurfaceAccessorBase::spatialVector;
36 BWORD bind(SurfaceAccessibleI::Element a_element,
37 SurfaceAccessibleI::Attribute a_attribute)
39 m_attribute=a_attribute;
44 case SurfaceAccessibleI::e_generic:
45 case SurfaceAccessibleI::e_position:
48 case SurfaceAccessibleI::e_normal:
51 case SurfaceAccessibleI::e_uv:
54 case SurfaceAccessibleI::e_color:
57 case SurfaceAccessibleI::e_vertices:
58 m_attrName=
"vertices";
60 SurfaceAccessibleI::e_primitive);
62 case SurfaceAccessibleI::e_properties:
63 m_attrName=
"properties";
65 SurfaceAccessibleI::e_primitive);
68 return bindInternal(a_element,name);
70 BWORD bind(SurfaceAccessibleI::Element a_element,
73 m_attribute=SurfaceAccessibleI::e_generic;
74 return bindInternal(a_element,a_name);
76 virtual U32 count(
void)
const 78 if(m_attribute!=SurfaceAccessibleI::e_generic &&
80 SurfaceAccessibleI::e_vertices &&
82 SurfaceAccessibleI::e_properties &&
88 return elementCount(m_element);
90 virtual U32 subCount(U32 a_index)
const 92 if(m_attribute!=SurfaceAccessibleI::e_generic &&
94 SurfaceAccessibleI::e_vertices &&
96 SurfaceAccessibleI::e_properties &&
102 if(m_attribute==SurfaceAccessibleI::e_vertices)
105 SurfaceAccessibleI::e_primitive);
108 findVertices(a_index);
110 FEASSERT(pVertexArray);
111 return pVertexArray->
size();
117 virtual void set(U32 a_index,U32 a_subIndex,
String a_string)
119 if(m_element!=SurfaceAccessibleI::e_pointGroup &&
121 SurfaceAccessibleI::e_primitiveGroup &&
123 SurfaceAccessibleI::e_vertices &&
135 (*m_pStringValues)[(int)a_index];
137 rElementValue=a_string.c_str();
140 virtual String string(U32 a_index,U32 a_subIndex=0)
148 SurfaceAccessibleI::e_primitiveGroup ||
149 m_attribute==SurfaceAccessibleI::e_vertices)
152 SurfaceAccessibleI::e_primitiveGroup
154 SurfaceAccessibleI::e_primitive);
156 return pointByVertex(a_index,a_subIndex);
160 (*m_pStringValues)[(int)a_index];
162 return rElementValue.
asString().c_str();
165 virtual void set(U32 a_index,U32 a_subIndex,I32 a_integer)
167 if(m_element!=SurfaceAccessibleI::e_pointGroup &&
169 SurfaceAccessibleI::e_primitiveGroup &&
171 SurfaceAccessibleI::e_vertices &&
183 (*m_pElementValues)[(int)a_index];
185 rElementValue[0]=a_integer;
188 virtual I32 integer(U32 a_index,U32 a_subIndex=0)
196 SurfaceAccessibleI::e_primitiveGroup ||
197 m_attribute==SurfaceAccessibleI::e_vertices)
200 SurfaceAccessibleI::e_primitiveGroup
202 SurfaceAccessibleI::e_primitive);
204 return pointByVertex(a_index,a_subIndex);
208 (*m_pElementValues)[(int)a_index];
210 return rElementValue[0].asInt();
213 virtual I32 append(SurfaceAccessibleI::Form a_form)
215 if(m_element==SurfaceAccessibleI::e_point)
218 m_spJsonRoot->value()[5].asInt();
220 m_spJsonRoot->value()[5]=index+1;
225 if(m_element==SurfaceAccessibleI::e_primitive)
228 m_spJsonRoot->value()[9].asInt();
230 m_spJsonRoot->value()[9]=index+1;
240 virtual void append(U32 a_index,I32 a_integer)
243 SurfaceAccessibleI::e_primitiveGroup ||
244 m_attribute==SurfaceAccessibleI::e_vertices)
247 SurfaceAccessibleI::e_primitiveGroup
249 SurfaceAccessibleI::e_primitive);
252 &m_spJsonRoot->value()[13][1][1];
253 FEASSERT(pVertexMap);
256 findVertices(a_index);
257 FEASSERT(pVertexArray);
259 const int newPointIndex=
260 pVertexArray->
size();
261 const int newVertexIndex=
264 (*pVertexArray)[newPointIndex]=
266 (*pVertexMap)[newVertexIndex]=a_integer;
272 virtual void set(U32 a_index,U32 a_subIndex,Real a_real)
274 if(m_element!=SurfaceAccessibleI::e_pointGroup &&
276 SurfaceAccessibleI::e_primitiveGroup &&
278 SurfaceAccessibleI::e_vertices &&
290 (*m_pElementValues)[(int)a_index];
292 rElementValue[0]=a_real;
295 virtual Real real(U32 a_index,U32 a_subIndex=0)
303 SurfaceAccessibleI::e_primitiveGroup ||
304 m_attribute==SurfaceAccessibleI::e_vertices)
307 SurfaceAccessibleI::e_primitiveGroup
309 SurfaceAccessibleI::e_primitive);
311 return pointByVertex(a_index,a_subIndex);
315 (*m_pElementValues)[(int)a_index];
317 return rElementValue[0].asFloat();
320 virtual void set(U32 a_index,U32 a_subIndex,
323 if(m_element!=SurfaceAccessibleI::e_pointGroup &&
325 SurfaceAccessibleI::e_primitiveGroup &&
327 SurfaceAccessibleI::e_vertices &&
339 (*m_pElementValues)[(int)a_index];
341 rElementValue[0]=a_vector[0];
342 rElementValue[1]=a_vector[1];
343 rElementValue[2]=a_vector[2];
344 rElementValue[3]=0.0;
346 virtual SpatialVector spatialVector(U32 a_index,U32 a_subIndex=0)
353 U32 pointIndex=a_index;
356 SurfaceAccessibleI::e_primitiveGroup ||
357 m_attribute==SurfaceAccessibleI::e_vertices)
360 SurfaceAccessibleI::e_primitiveGroup
362 SurfaceAccessibleI::e_primitive);
364 pointIndex=pointByVertex(a_index,a_subIndex);
368 (*m_pElementValues)[(int)pointIndex];
371 rElementValue[0].asFloat(),
372 rElementValue[1].asFloat(),
373 rElementValue[2].asFloat());
378 { m_spJsonRoot=a_spJsonRoot; }
383 SurfaceAccessibleI::Element a_element,
388 virtual BWORD bindInternal(SurfaceAccessibleI::Element a_element,
392 String a_storage,U32 a_components);
393 void addString(
void);
394 void addInteger(
void);
396 void addSpatialVector(
void);
409 SurfaceAccessibleI::Element a_element)
const;
411 BWORD isBound(
void)
const 412 {
return (m_pElementValues!=NULL); }
415 {
return &(*m_pVertexValues)[(int)a_index][0]; }
417 U32 pointByVertex(U32 a_index,U32 a_subIndex)
421 FEASSERT(pVertexArray);
423 (*pVertexArray)[(int)a_subIndex];
425 const U32 vertexIndex=rVertexValue.asInt();
428 (*m_pVertexMap)[(int)vertexIndex];
430 return rPointValue.asInt();
kernel
Definition: namespace.dox:3
Represents a JSON value.
Definition: value.h:194
Common Functionality for Accessor Surface.
Definition: SurfaceAccessorBase.h:20
Automatically reference-counted string container.
Definition: String.h:128
ArrayIndex size() const
Number of values in array or object.
String asString() const
Embedded zeroes are possible.
Common Functionality for Accessor Surface.
Definition: SurfaceAccessorGeo.h:20
Intrusive Smart Pointer.
Definition: src/core/ptr.h:53
Per-class participation non-RTTI fallback dynamic casting mechanism.
Definition: Castable.h:192