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 14, 2023
1 parent 4572055 commit 2607e36
Show file tree
Hide file tree
Showing 9 changed files with 1,767 additions and 0 deletions.
113 changes: 113 additions & 0 deletions include/GafferImage/DeepSlice.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
//////////////////////////////////////////////////////////////////////////
//
// 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/CompoundNumericPlug.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::BoolPlug *nearClipPlug();
const Gaffer::BoolPlug *nearClipPlug() const;

Gaffer::FloatPlug *nearClipDepthPlug();
const Gaffer::FloatPlug *nearClipDepthPlug() const;

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

Gaffer::FloatPlug *farClipDepthPlug();
const Gaffer::FloatPlug *farClipDepthPlug() 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 2607e36

Please sign in to comment.