MCPcopy Create free account
hub / github.com/carbonengine/trinity / PyGetItemElement

Function PyGetItemElement

trinity/Tr2RuntimeInstanceData_Blue.cpp:277–322  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

275}
276
277static PyObject* PyGetItemElement( PyObject* self, PyObject* args )
278{
279 Tr2RuntimeInstanceData* pThis = BluePythonCast<Tr2RuntimeInstanceData*>( self );
280
281 unsigned index, elementIndex;
282 if( !PyArg_ParseTuple( args, "II", &index, &elementIndex ) )
283 {
284 return nullptr;
285 }
286
287 if( pThis->GetCount() <= index )
288 {
289 PyErr_SetString( PyExc_IndexError, "index out of range" );
290 return nullptr;
291 }
292
293 const Tr2VertexDefinition& def = pThis->GetLayout();
294 if( def.m_items.empty() )
295 {
296 PyErr_SetString( PyExc_RuntimeError, "No layout set for runtime data" );
297 return nullptr;
298 }
299
300 if( elementIndex >= def.m_items.size() )
301 {
302 PyErr_SetString( PyExc_IndexError, "elementIndex out of range" );
303 return nullptr;
304 }
305
306 const float* data = reinterpret_cast<const float*>( reinterpret_cast<const char*>( pThis->GetData() ) + pThis->GetStride() * index + def.m_items[elementIndex].m_offset );
307
308 unsigned size = def.GetDataTypeSizeInMembers( def.m_items[elementIndex].m_dataType );
309 if( size == 1 )
310 {
311 return PyFloat_FromDouble( *data++ );
312 }
313 else
314 {
315 PyObject* element = PyTuple_New( size );
316 for( unsigned k = 0; k < size; ++k )
317 {
318 PyTuple_SET_ITEM( element, k, PyFloat_FromDouble( *data++ ) );
319 }
320 return element;
321 }
322}
323
324static PyObject* PySetItemElement( PyObject* self, PyObject* args )
325{

Callers

nothing calls this directly

Calls 6

emptyMethod · 0.80
sizeMethod · 0.80
GetCountMethod · 0.45
GetDataMethod · 0.45
GetStrideMethod · 0.45

Tested by

no test coverage detected