Sample Source code
==================
This is the actual source code used by many of the Nuke plug-ins.

* `AddInputs.cpp <examples/AddInputs.cpp>`_
  Shows how to access multiple inputs and perform basic arithmetic on them.
* `LayerExtractor.cpp <examples/LayerExtractor.cpp>`_
  A simple demonstation of dynamic enumeration knobs.
* `SimpleBlur.cpp <examples/SimpleBlur.cpp>`_
  Shows how to perform some basic pixel arithmetic on the input, in this case it blurs it.
* `Normalise.cpp <examples/Normalise.cpp>`_
  Shows how to perform some basic pixel arithmetic on the input, in this case it normalises it.
* `NormaliseExecute.cpp <examples/NormaliseExecute.cpp>`_
  Shows how to normalise images over a frame range, demonstrating how Executable Iops work.
* `Triangle.cpp <examples/Triangle.cpp>`_
  Shows how to use SourceGeo to add some simple geometry into a Scene.
* `my3dReader.cpp <examples/my3dReader.cpp>`_
  Demonstrates the reading of a custom 3d format.
* `my3dWriter.cpp <examples/my3dWriter.cpp>`_
  Demonstrates the writing of a custom 3d format.
* `AddCustomQt.cpp <examples/AddCustomQt.cpp>`_
  Shows how to use your own custom Qt widget for a knob.
* `AddCustomQt.moc.h <examples/AddCustomQt.moc.h>`_
  Shows how to use your own custom Qt widget for a knob.
* `Makefile.qt <examples/Makefile.qt>`_
  Shows how to use your own custom Qt widget for a knob.
* `DynamicKnobs.cpp <examples/DynamicKnobs.cpp>`_
  Demonstration of dynamic knobs.
* `KnobParade.cpp <examples/KnobParade.cpp>`_
  Creates one of every sort of NDK supported knob
* `Serialize.cpp <examples/Serialize.cpp>`_
  Simply saves and loads a text string to and from the current Nuke script.
* `Add.cpp <examples/Add.cpp>`_
  It doesn't get much more basic than this!
* `AddChannels.cpp <examples/AddChannels.cpp>`_
  Add additional channels to the incoming stream.
* `AppendClip.cpp <examples/AppendClip.cpp>`_
  Example with lots of frame number manipulation.
* `Assert.cpp <examples/Assert.cpp>`_
  Simple example setting an error state.
* `Blocky.cpp <examples/Blocky.cpp>`_
  This is a demonstration of a Nuke plug-in that moves pixels using DD::Image::Tile. In this case blocks of pixels are averaged together to produce the result.
* `CheckerBoard2.cpp <examples/CheckerBoard2.cpp>`_
  Example of an operator that generates an image, with no input.
* `ColorLookup.cpp <examples/ColorLookup.cpp>`_
  Example of using the lookup curve knob to present editable curves to the user.
* `Constant.cpp <examples/Constant.cpp>`_
  Generate a constant colored image. The simplest generator.
* `Convolve.cpp <examples/Convolve.cpp>`_
  Generate output from two inputs and a larger region than the output.
* `CornerPin2D.cpp <examples/CornerPin2D.cpp>`_
  Example of a Transform-derived op.
* `Difference.cpp <examples/Difference.cpp>`_
  Computes an output channel based on contents of two input images.
* `Dilate.cpp <examples/Dilate.cpp>`_
  Example of a two-pass algorithm.
* `IDistort.cpp <examples/IDistort.cpp>`_
  Uses the sample() call to produce arbitrary distortion of an image.
* `Grade.cpp <examples/Grade.cpp>`_
  A simple color operator.
* `Keymix.cpp <examples/Keymix.cpp>`_
  A very recently-created node showing current Nuke plugin coding practices.
* `Mirror.cpp <examples/Mirror.cpp>`_
  Example where build_handles modifies the transform used to draw input handles.
* `Noise.cpp <examples/Noise.cpp>`_
  A slightly more complex image generator.
* `Position.cpp <examples/Position.cpp>`_
  Example of DD::Image::Row::offset() method.
* `Rectangle.cpp <examples/Rectangle.cpp>`_
  Example of a DD::Image::DrawIop, showing how to draw simple shapes in a single color, for output in arbitrary channels.
* `Remove.cpp <examples/Remove.cpp>`_
  Strip channels out of the incoming stream.
* `Saturation.cpp <examples/Saturation.cpp>`_
  Example of a DD::Image::PixelIop demonstrating how to access and modify multiple channels of an image simultaneously.
* `Socket.cpp <examples/Socket.cpp>`_
  Example of a parallel thread (such as a thread reading a socket) updating the output of an operator dynamically.
* `TemporalMedian.cpp <examples/TemporalMedian.cpp>`_
  Example of an operator that asks for multiple frames of its input
* `AddTimeCode.cpp <examples/AddTimeCode.cpp>`_
  Example using and generating metadata
* `DeepToImage.cpp <examples/DeepToImage.cpp>`_
  Example of compositing deep data to 2D
* `DeepCrop.cpp <examples/DeepCrop.cpp>`_
  Example of processing deep data
* `DeepColorCorrect.cpp <examples/DeepColorCorrect.cpp>`_
  Example of processing deep data
* `DeepMerge.cpp <examples/DeepMerge.cpp>`_
  Example of processing deep data
* `dtexReaderDeep.cpp <examples/dtexReaderDeep.cpp>`_
  Example of reading deep data using a library
* `exrReaderDeep.cpp <examples/exrReaderDeep.cpp>`_
  Example of reading deep data using a library
* `exrWriterDeep.cpp <examples/exrWriterDeep.cpp>`_
  Example of writing deep data using a library
* `cdfReaderDeep.cpp <examples/cdfReaderDeep.cpp>`_
  Simple example of reading deep data
* `cdfWriterDeep.cpp <examples/cdfWriterDeep.cpp>`_
  Simple example of writing deep data
* `ParticleGravity.cpp <examples/ParticleGravity.cpp>`_
  Example of particle force
* `Sphere.cpp <examples/Sphere.cpp>`_
  A simple example of a 3D geometry generator node.
* `LogGeo.cpp <examples/LogGeo.cpp>`_
  A simple example of a 3D geometry modifier node.
* `Phong.cpp <examples/Phong.cpp>`_
  A basic material shader node.
* `SimpleAxis.cpp <examples/SimpleAxis.cpp>`_
  A simple axis node.
* `UVProject.cpp <examples/UVProject.cpp>`_
  A node to project uv's onto points and vertices.
* `crwReader.cpp <examples/crwReader.cpp>`_
  Camera raw reader, which uses dcraw to convert the image and read it from stdin.
* `DPXimage.h <examples/DPXimage.h>`_
  File needed by dpxReader/Writer
* `dpxReader.cpp <examples/dpxReader.cpp>`_
  The DPX spec supports a wide variety of header fields, not all of which have
  been implemented in Nuke. Our reader source is provided here for those users
  who encounter a flavor that we do not yet support and need to implement a
  custom reader to handle it before a Nuke release with built-in support can
  be made available.
* `dpxWriter.cpp <examples/dpxWriter.cpp>`_
  The DPX spec supports a wide variety of header fields, not all of which have
  been implemented in Nuke. Our reader source is provided here for those users
  who encounter a flavor that we do not yet support and need to implement a
  custom reader to handle it before a Nuke release with built-in support can
  be made available.
* `exrGeneral.h <examples/exrGeneral.h>`_
  Nuke's EXR i/o which accomodates files with large numbers of channels.
* `exrReader.cpp <examples/exrReader.cpp>`_
  Nuke's EXR i/o which accomodates files with large numbers of channels.
* `exrWriter.cpp <examples/exrWriter.cpp>`_
  Nuke's EXR i/o which accomodates files with large numbers of channels.
* `iffReader.cpp <examples/iffReader.cpp>`_
  IFF file format reader.
* `pngReader.cpp <examples/pngReader.cpp>`_
  A fairly straight-forward example of interfacing with an existing file i/o library.
* `pngWriter.cpp <examples/pngWriter.cpp>`_
  A fairly straight-forward example of interfacing with an existing file i/o library.
* `psdReader.cpp <examples/psdReader.cpp>`_
  Photoshop .psd file reader.
* `tiffReader.cpp <examples/tiffReader.cpp>`_
  Both tiffReader and tiffWriter are in this plugin so only one copy of libtiff
  is used. This also contains an example of using DD::Image::Memory to allocate
  large buffers that are freed when memory is needed.
* `yuvReader.cpp <examples/yuvReader.cpp>`_
  The yuv reader is provided as a basic example of a typical file format reader.
  It uses DD::Image::FileReader as its base class.
* `yuvWriter.cpp <examples/yuvWriter.cpp>`_
  This is the counterpart to the yuvReader. It demonstrates, among other things,
  how Nuke creates and writes individual lines to create the final image.
* `ffmpegReader.cpp <examples/ffmpegReader.cpp>`_
  Demonstration of movie file format reader using FFmpeg as the support library.
* `ffmpegWriter.cpp <examples/ffmpegWriter.cpp>`_
  This is the counterpart to the ffmpegReader.
* `exifReader.h <examples/exifReader.h>`_
  Demonstrates using the jpeg and libexif libraries to read and write JPEG-format images.
* `exifWriter.h <examples/exifWriter.h>`_
  Demonstrates using the jpeg and libexif libraries to read and write JPEG-format images.
* `jpegReader.cpp <examples/jpegReader.cpp>`_
  Demonstrates using the jpeg and libexif libraries to read and write JPEG-format images.
* `jpegWriter.cpp <examples/jpegWriter.cpp>`_
  Demonstrates using the jpeg and libexif libraries to read and write JPEG-format images.
* `GPUFileShader.cpp <examples/GPUFileShader.cpp>`_
  Demonstration of a GPU plugin. Reads a file containing a fragment shader.
* `ChannelSelector.cpp <examples/ChannelSelector.cpp>`_
  Demonstration of a very simple GPU plugin.  Selects from a set of channels from the input to display.
  Works in both CPU and GPU modes.
* `Draw2D.cpp <examples/Draw2D.cpp>`_
  An example of drawing 2D graphics (such as an image overlay) in the Viewer.
* `Draw3D.cpp <examples/Draw3D.cpp>`_
  An example of drawing 3D objects in the Viewer.
* `Handle.cpp <examples/Handle.cpp>`_
  An example of getting mouse interaction from the Viewer.
* `PythonGeo.cpp <examples/PythonGeo.cpp>`_
  Demonstrates running python from a node, exposing geometry data to python and exposing a custom knob implementation to python.
* `PythonGeo.h <examples/PythonGeo.h>`_
  Demonstrates running python from a node, exposing geometry data to python and exposing a custom knob implementation to python.
