Go to file
Kenneth Moreland f8237a9d3a Make selection of fields to pass a field member variable
Previously you passed a FieldSelection to Filter::Execute to specify
which fields to pass from input to output. There is no real reason for
this as other information about input and output fields are member
variables to Filter. This moves field selection as a member variable as
well. (This should also help confusion when updating old code to new to
prevent users from mistaking field passing with input fields.

Also added a few convenience constructors to FieldSelection so that you
can call Field::SetFieldsToPass() with just the string of what you want
to pass.
2018-03-22 10:25:09 -06:00
CMake Make CoordinateSystem not fail on CUDA 2018-03-10 16:38:41 -05:00
data Add sample input 2017-09-06 14:05:15 -06:00
docs Remove VS2013 workarounds from VTK-m. 2018-02-23 15:39:39 -05:00
examples update examples after filter API changes. 2018-03-13 13:54:22 -04:00
Utilities Revert spelling correction in GitSetup script 2018-01-31 15:59:57 -07:00
vtkm Make selection of fields to pass a field member variable 2018-03-22 10:25:09 -06:00
.clang-format Allow clang-format to pass more empty lines 2017-05-31 09:35:26 -06:00
.gitattributes update diy location in gitattributes. 2018-01-03 14:06:14 -05:00
CMakeLists.txt Misc. typos 2018-01-30 06:51:47 -05:00
CONTRIBUTING.md Misc. typos 2018-01-30 06:51:47 -05:00
CTestConfig.cmake Update copyright for Sandia 2017-09-20 15:33:44 -06:00
CTestCustom.cmake.in don't exclude DIY warnings. 2018-02-26 15:33:56 -05:00
LICENSE.txt CPU parallel radix sorting 2018-01-10 07:28:21 -07:00
README.md Remove VS2013 workarounds from VTK-m. 2018-02-23 15:39:39 -05:00
version.txt Release 1.1.0: Update the version.txt 2017-11-06 15:04:06 -05:00

VTK-m

VTK-m is a toolkit of scientific visualization algorithms for emerging processor architectures. VTK-m supports the fine-grained concurrency for data analysis and visualization algorithms required to drive extreme scale computing by providing abstract models for data and execution that can be applied to a variety of algorithms across many different processor architectures.

You can find out more about the design of VTK-m on the VTK-m Wiki.

Learning Resources

  • A high-level overview is given in the IEEE Vis talk "VTK-m: Accelerating the Visualization Toolkit for Massively Threaded Architectures."

  • The VTK-m Users Guide provides extensive documentation. It is broken into multiple parts for learning and references at multiple different levels.

    • "Part 1: Getting Started" provides the introductory instruction for building VTK-m and using its high-level features.
    • "Part 2: Using VTK-m" covers the core fundamental components of VTK-m including data model, worklets, and filters.
    • "Part 3: Developing with VTK-m" covers how to develop new worklets and filters.
    • "Part 4: Advanced Development" covers topics such as new worklet types and custom device adapters.
  • Community discussion takes place on the VTK-m users email list.

  • Doxygen-generated nightly reference documentation is available online.

Contributing

There are many ways to contribute to VTK-m, with varying levels of effort.

Dependencies

VTK-m Requires:

  • C++11 Compiler. VTK-m has been confirmed to work with the following
    • GCC 4.8+
    • Clang 3.3+
    • XCode 5.0+
    • MSVC 2015+
  • CMake
    • CMake 3.3+ (for any build)
    • CMake 3.9+ (for CUDA build)

Optional dependencies are:

  • CUDA Device Adapter
  • TBB Device Adapter
  • OpenGL Rendering
    • The rendering module contains multiple rendering implementations including standalone rendering code. The rendering module also includes (optionally built) OpenGL rendering classes.
    • The OpenGL rendering classes require that you have a extension binding library and one rendering library. A windowing library is not needed except for some optional tests.
  • Extension Binding
  • On Screen Rendering
    • OpenGL Driver
    • Mesa Driver
  • On Screen Rendering Tests
  • Headless Rendering

Building

VTK-m supports all majors platforms (Windows, Linux, OSX), and uses CMake to generate all the build rules for the project. The VTK-m source code is available from the VTK-m download page or by directly cloning the VTK-m git repository.

$ git clone https://gitlab.kitware.com/vtk/vtk-m.git
$ mkdir vtkm-build
$ cd vtkm-build
$ cmake-gui ../vtk-m
$ make -j<N>
$ make test

A more detailed description of building VTK-m is available in the VTK-m Users Guide.

Example##

The VTK-m source distribution includes a number of examples. The goal of the VTK-m examples is to illustrate specific VTK-m concepts in a consistent and simple format. However, these examples only cover a small part of the capabilities of VTK-m.

Below is a simple example of using VTK-m to load a VTK image file, run the Marching Cubes algorithm on it, and render the results to an image:

vtkm::io::reader::VTKDataSetReader reader("path/to/vtk_image_file");
inputData = reader.ReadDataSet();

vtkm::Float64 isovalue = 100.0f;
std::string fieldName = "pointvar";

// Create an isosurface filter
vtkm::filter::MarchingCubes filter;
filter.SetIsoValue(0, isovalue);
vtkm::filter::Result result = filter.Execute( inputData,
                                              inputData.GetField(fieldName) );
filter.MapFieldOntoOutput(result, inputData.GetField(fieldName));

// compute the bounds and extends of the input data
vtkm::Bounds coordsBounds = inputData.GetCoordinateSystem().GetBounds();
vtkm::Vec<vtkm::Float64,3> totalExtent( coordsBounds.X.Length(),
                                        coordsBounds.Y.Length(),
                                        coordsBounds.Z.Length() );
vtkm::Float64 mag = vtkm::Magnitude(totalExtent);
vtkm::Normalize(totalExtent);

// setup a camera and point it to towards the center of the input data
vtkm::rendering::Camera camera;
camera.ResetToBounds(coordsBounds);

camera.SetLookAt(totalExtent*(mag * .5f));
camera.SetViewUp(vtkm::make_Vec(0.f, 1.f, 0.f));
camera.SetClippingRange(1.f, 100.f);
camera.SetFieldOfView(60.f);
camera.SetPosition(totalExtent*(mag * 2.f));
vtkm::rendering::ColorTable colorTable("thermal");

// Create a mapper, canvas and view that will be used to render the scene
vtkm::rendering::Scene scene;
vtkm::rendering::MapperRayTracer mapper;
vtkm::rendering::CanvasRayTracer canvas(512, 512);
vtkm::rendering::Color bg(0.2f, 0.2f, 0.2f, 1.0f);

// Render an image of the output isosurface
vtkm::cont::DataSet& outputData = result.GetDataSet();
scene.AddActor(vtkm::rendering::Actor(outputData.GetCellSet(),
                                      outputData.GetCoordinateSystem(),
                                      outputData.GetField(fieldName),
                                      colorTable));
vtkm::rendering::View3D view(scene, mapper, canvas, camera, bg);
view.Initialize();
view.Paint();
view.SaveAs("demo_output.pnm");

License

VTK-m is distributed under the OSI-approved BSD 3-clause License. See LICENSE.txt for details.