panda3d.core.GeomVertexReader

class GeomVertexReader

Bases: GeomEnums

This object provides a high-level interface for quickly reading a sequence of numeric values from a vertex table.

It is particularly optimized for reading a single column of data values for a series of vertices, without changing columns between each number. Although you can also use one GeomVertexReader to read across the columns if it is convenient, by calling setColumn() repeatedly at each vertex, it is faster to read down the columns, and to use a different GeomVertexReader for each column.

Note that a GeomVertexReader does not keep a reference count to the actual vertex data buffer (it grabs the current data buffer from the GeomVertexData whenever setColumn() is called). This means that it is important not to keep a GeomVertexReader object around over a long period of time in which the data buffer is likely to be deallocated; it is intended for making a quick pass over the data in one session.

It also means that you should create any GeomVertexWriters before creating GeomVertexReaders on the same data, since the writer itself might cause the vertex buffer to be deallocated. Better yet, use a GeomVertexRewriter if you are going to create both of them anyway.

Inheritance diagram

Inheritance diagram of GeomVertexReader

__init__(array_data: GeomVertexArrayData, current_thread: Thread) → None

Constructs a new reader to process the vertices of the indicated array only.

__init__(array_data: GeomVertexArrayData, column: int, current_thread: Thread) → None

Constructs a new reader to process the vertices of the indicated array only.

__init__(vertex_data: GeomVertexData, name: InternalName, current_thread: Thread) → None

Constructs a new reader to process the vertices of the indicated data object. This flavor creates the reader specifically to process the named data type.

__init__(vertex_data: GeomVertexData, current_thread: Thread) → None

Constructs a new reader to process the vertices of the indicated data object.

__init__(copy: GeomVertexReader) → None
__init__(current_thread: Thread) → None

Constructs an invalid GeomVertexReader. You must use the assignment operator to assign a valid GeomVertexReader to this object before you can use it.

assign(copy: GeomVertexReader) → GeomVertexReader
Return type

GeomVertexReader

getVertexData() → GeomVertexData

Returns the vertex data object that the reader is processing. This may return NULL if the reader was constructed with just an array pointer.

Return type

GeomVertexData

getArrayData() → GeomVertexArrayData

Returns the particular array object that the reader is currently processing.

Return type

GeomVertexArrayData

getArrayHandle() → GeomVertexArrayDataHandle

Returns the read handle to the array object that the read is currently processing. This low-level call should be used with caution.

Return type

GeomVertexArrayDataHandle

getStride() → size_t

Returns the per-row stride (bytes between consecutive rows) of the underlying vertex array. This low-level information is normally not needed to use the GeomVertexReader directly.

Return type

size_t

getCurrentThread() → Thread

Returns the Thread pointer of the currently-executing thread, as passed to the constructor of this object.

Return type

Thread

setForce(force: bool) → None

Sets the value of the force flag. When this is true (the default), vertex data will be paged in from disk if necessary. When this is false, the GeomVertexData will simply return a failure code when attempting to read vertex data that is not resident (but will put it on the queue to become resident later).

Normally, vertex data is always resident, so this will not be an issue. It is only possible for vertex data to be nonresident if you have enabled vertex paging via the GeomVertexArrayData and VertexDataPage interfaces.

getForce() → bool

Returns the value of the force flag. See setForce().

setColumn(name: InternalName) → bool

Sets up the reader to use the data type with the indicated name.

This also resets the read row number to the start row (the same value passed to a previous call to setRow(), or 0 if setRow() was never called.)

The return value is true if the data type is valid, false otherwise.

setColumn(column: int) → bool

Sets up the reader to use the nth data type of the GeomVertexFormat, numbering from 0.

This also resets the read row number to the start row (the same value passed to a previous call to setRow(), or 0 if setRow() was never called.)

The return value is true if the data type is valid, false otherwise.

setColumn(array: int, column: GeomVertexColumn) → bool

Sets up the reader to use the indicated column description on the given array.

This also resets the current read row number to the start row (the same value passed to a previous call to setRow(), or 0 if setRow() was never called.)

The return value is true if the data type is valid, false otherwise.

clear() → None

Resets the GeomVertexReader to the initial state.

hasColumn() → bool

Returns true if a valid data type has been successfully set, or false if the data type does not exist (or if getForce() is false and the vertex data is nonresident).

getArray() → int

Returns the array index containing the data type that the reader is working on.

getColumn() → GeomVertexColumn

Returns the description of the data type that the reader is working on.

Return type

GeomVertexColumn

setRowUnsafe(row: int) → None

Sets the start row to the indicated value, without internal checks. This is the same as setRow(), but it does not check for the possibility that the array has been reallocated internally for some reason; use only when you are confident that the array is unchanged and you really need every bit of available performance.

setRow(row: int) → None

Sets the start row to the indicated value. The reader will begin reading from the indicated row; each subsequent get_data*() call will return the data from the subsequent row. If setColumn() is called, the reader will return to this row.

getStartRow() → int

Returns the row index at which the reader started. It will return to this row if you reset the current column.

getReadRow() → int

Returns the row index from which the data will be retrieved by the next call to get_data*().

isAtEnd() → bool

Returns true if the reader is currently at the end of the list of vertices, false otherwise. If this is true, another call to get_data*() will result in a crash.

getData1f() → float

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

getData2f() → LVecBase2f

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Return type

LVecBase2f

getData3f() → LVecBase3f

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Return type

LVecBase3f

getData4f() → LVecBase4f

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Return type

LVecBase4f

getMatrix3f() → LMatrix3f

Returns the 3-by-3 matrix associated with the read row and advances the read row. This is a special method that only works when the column in question contains a matrix of an appropriate size.

Return type

LMatrix3f

getMatrix4f() → LMatrix4f

Returns the 4-by-4 matrix associated with the read row and advances the read row. This is a special method that only works when the column in question contains a matrix of an appropriate size.

Return type

LMatrix4f

getData1d() → float

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

getData2d() → LVecBase2d

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Return type

LVecBase2d

getData3d() → LVecBase3d

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Return type

LVecBase3d

getData4d() → LVecBase4d

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Return type

LVecBase4d

getMatrix3d() → LMatrix3d

Returns the 3-by-3 matrix associated with the read row and advances the read row. This is a special method that only works when the column in question contains a matrix of an appropriate size.

Return type

LMatrix3d

getMatrix4d() → LMatrix4d

Returns the 4-by-4 matrix associated with the read row and advances the read row. This is a special method that only works when the column in question contains a matrix of an appropriate size.

Return type

LMatrix4d

getData1() → float

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

getData2() → LVecBase2

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Return type

LVecBase2

getData3() → LVecBase3

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Return type

LVecBase3

getData4() → LVecBase4

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Return type

LVecBase4

getMatrix3() → LMatrix3

Returns the 3-by-3 matrix associated with the read row and advances the read row. This is a special method that only works when the column in question contains a matrix of an appropriate size.

Return type

LMatrix3

getMatrix4() → LMatrix4

Returns the 4-by-4 matrix associated with the read row and advances the read row. This is a special method that only works when the column in question contains a matrix of an appropriate size.

Return type

LMatrix4

getData1i() → int

Returns the data associated with the read row, expressed as a 1-component value, and advances the read row.

getData2i() → LVecBase2i

Returns the data associated with the read row, expressed as a 2-component value, and advances the read row.

Return type

LVecBase2i

getData3i() → LVecBase3i

Returns the data associated with the read row, expressed as a 3-component value, and advances the read row.

Return type

LVecBase3i

getData4i() → LVecBase4i

Returns the data associated with the read row, expressed as a 4-component value, and advances the read row.

Return type

LVecBase4i

output(out: ostream) → None