[vtk-developers] Added support for std::vector to the wrappers

David Gobbi david.gobbi at gmail.com
Wed Sep 5 12:20:32 EDT 2018


Hi Folks,

Yesterday I merged a patch that allows std::vector<T> to be used from the
Python wrappers, where T can be 'std::string' or any numeric type from
'signed char' to 'float' (including typedefs to those types).

This means that if you add a C++ method to VTK that takes
std::vector<std::string>, then in Python you can pass a list or any other
Python sequence and the wrappers will convert it to a vector for you.

Method examples that can accept any Python sequence:
    void SetStrings(std::vector<std::string> strings);
    void SetStrings(const std::vector<std::string>& strings);

Method example that takes a Python mutable sequence (the C++ method can
write back to the container, since this is pass-by-reference):
    void GetStrings(std::vector<std::string>& strings);

Method examples that return a vector (which is converted to a Python tuple):
    const std::vector<std::string>& GetStrings();
    std::vector<std::string>& GetStrings();
    std::vector<std::string> GetStrings();

Note that std::vector is not 'wrapped' per se.  Instead, what is going on
here is that the wrappers are converting to/from Python container types. My
primary goal was convenience rather than efficiency, we can always add a
wrapped std::vector type at a later date without sacrificing the
convenience of automatic conversion.

Chances are good that I'll be able to add std::vectors of VTK objects
(smart or dumb pointers) and vtkVariant before VTK 9, but only if someone
adds methods to VTK that take parameters of those types (as far as I know,
there aren't any yet).

See the following VTK gitlab issue for additional information:
https://gitlab.kitware.com/vtk/vtk/issues/17362

The following is a list of VTK methods that take std::vector that have been
wrapped due to this change (it is a short list, since people have
historically avoided using std::vector as part of the VTK public API due to
the obvious reason that they didn't want to exclude their methods from
wrapping):

vtkActor::ProcessSelectorPixelBuffers
vtkAMRInformation::GetNumBlocks
vtkCompositePolyDataMapper2::ProcessSelectorPixelBuffers
vtkMapper::ProcessSelectorPixelBuffers
vtkMultiProcessStream::GetRawData
vtkMultiProcessStream::SetRawData
vtkOpenGLGlyph3DHelper::GlyphRender
vtkOpenGLIndexBufferObject::AppendTriangleIndexBuffer
vtkOpenGLIndexBufferObject::AppendLineIndexBuffer
vtkOpenGLIndexBufferObject::AppendTriangleLineIndexBuffer
vtkOpenGLIndexBufferObject::AppendPointIndexBuffer
vtkOpenGLIndexBufferObject::AppendStripIndexBuffer
vtkOpenGLIndexBufferObject::AppendEdgeFlagIndexBuffer
vtkOpenGLMoleculeMapper::ProcessSelectorPixelBuffers
vtkOpenGLPointGaussianMapper::ProcessSelectorPixelBuffers
vtkOpenGLPolyDataMapper::HandleAppleBug
vtkOpenGLPolyDataMapper::ProcessSelectorPixelBuffers
vtkOpenGLVertexBufferObject::SetShift
vtkOpenGLVertexBufferObject::SetScale
vtkOpenGLVertexBufferObject::GetShift
vtkOpenGLVertexBufferObject::GetScale
vtkOpenGLVertexBufferObject::GetPackedVBO
vtkParallelAMRUtilities::DistributeProcessInformation
vtkProp::ProcessSelectorPixelBuffers
vtkResourceFileLocator::Locate
vtkShadowMapPass::ShadowMapTransforms
vtkShadowMapPass::GetShadowMapTextureUnits
vtkSparseArray::GetUniqueCoordinates
vtkUnicodeString::utf16_str

Cheers,
 - David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/vtk-developers/attachments/20180905/7f71d6b0/attachment.html>


More information about the vtk-developers mailing list