Skip to content

Commit

Permalink
Add DeepSlice, for trimming deep images to particular depths
Browse files Browse the repository at this point in the history
  • Loading branch information
danieldresser-ie committed Dec 18, 2023
1 parent db97dd3 commit 0520f3c
Show file tree
Hide file tree
Showing 10 changed files with 1,769 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Changes.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
1.x.x.x (relative to 1.3.x.x)
=======

Features
--------

- GafferImage : Added DeepSlice node for clipping out part of an image based on depth.

Improvements
------------

Expand Down
107 changes: 107 additions & 0 deletions include/GafferImage/DeepSlice.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
//////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2023, Image Engine Design Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above
// copyright notice, this list of conditions and the following
// disclaimer.
//
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided with
// the distribution.
//
// * Neither the name of John Haddon nor the names of
// any other contributors to this software may be used to endorse or
// promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////

#pragma once

#include "GafferImage/ImageProcessor.h"

#include "Gaffer/OptionalValuePlug.h"
#include "Gaffer/NumericPlug.h"

namespace Gaffer
{

IE_CORE_FORWARDDECLARE( StringPlug )

} // namespace Gaffer

namespace GafferImage
{

/// Utility node designed for internal use in other node implementations.
/// It resamples all the data from the input data window into a new
/// data window in the output image, using a chosen filter. Uses OIIO::Filter2D
/// to provide the filter implementation, and is based heavily on OIIO's
/// ImageBufAlgo resize() function.
class GAFFERIMAGE_API DeepSlice : public ImageProcessor
{
public :

explicit DeepSlice( const std::string &name=defaultName<DeepSlice>() );
~DeepSlice() override;

GAFFER_NODE_DECLARE_TYPE( GafferImage::DeepSlice, DeepSliceTypeId, ImageProcessor );

Gaffer::OptionalValuePlug *nearClipPlug();
const Gaffer::OptionalValuePlug *nearClipPlug() const;

Gaffer::OptionalValuePlug *farClipPlug();
const Gaffer::OptionalValuePlug *farClipPlug() const;

Gaffer::BoolPlug *flattenPlug();
const Gaffer::BoolPlug *flattenPlug() const;

void affects( const Gaffer::Plug *input, AffectedPlugsContainer &outputs ) const override;

protected :

void hash( const Gaffer::ValuePlug *output, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
void compute( Gaffer::ValuePlug *output, const Gaffer::Context *context ) const override;

void hashChannelData( const GafferImage::ImagePlug *parent, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
IECore::ConstFloatVectorDataPtr computeChannelData( const std::string &channelName, const Imath::V2i &tileOrigin, const Gaffer::Context *context, const ImagePlug *parent ) const override;

void hashSampleOffsets( const GafferImage::ImagePlug *parent, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
IECore::ConstIntVectorDataPtr computeSampleOffsets( const Imath::V2i &tileOrigin, const Gaffer::Context *context, const ImagePlug *parent ) const override;

void hashDeep( const GafferImage::ImagePlug *parent, const Gaffer::Context *context, IECore::MurmurHash &h ) const override;
bool computeDeep( const Gaffer::Context *context, const ImagePlug *parent ) const override;

private :

ImagePlug *tidyInPlug();
const ImagePlug *tidyInPlug() const;

Gaffer::CompoundObjectPlug *sliceDataPlug();
const Gaffer::CompoundObjectPlug *sliceDataPlug() const;

static size_t g_firstPlugIndex;

};

IE_CORE_DECLAREPTR( DeepSlice )

} // namespace GafferImage
1 change: 1 addition & 0 deletions include/GafferImage/TypeIds.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ enum TypeId
DeepHoldoutTypeId = 110833,
DeepRecolorTypeId = 110834,
SaturationTypeId = 110835,
DeepSliceTypeId = 110836,

LastTypeId = 110849
};
Expand Down
Loading

0 comments on commit 0520f3c

Please sign in to comment.