Skip to content

Commit

Permalink
Merge pull request #6051 from johnhaddon/ieCoreArnoldMessages
Browse files Browse the repository at this point in the history
IECoreArnold : Add location names to warning messages
  • Loading branch information
johnhaddon authored Sep 26, 2024
2 parents 6a30266 + 759edc3 commit a9e7981
Show file tree
Hide file tree
Showing 18 changed files with 160 additions and 152 deletions.
4 changes: 4 additions & 0 deletions Changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ Improvements
- FreezeTransform :
- Improved performance for large meshes by using multithreading.
- Improved UI responsiveness by supporting cancellation of long computes.
- Arnold :
- Added location names to warning messages.
- A missing "P" primitive variable no longer aborts the render, but outputs a warning message instead.

Fixes
-----
Expand Down Expand Up @@ -138,6 +141,7 @@ Breaking Changes
- ImageGadget : Remove non-const variant of `getContext()`.
- LazyMethod : `deferUntilPlaybackStops` now requires that the Widget has a `scriptNode()` method rather than a `context()` method.
- Python : Gaffer now disables the user site-packages directory by setting `PYTHONNOUSERSITE=1`. To revert to the previous behaviour, set `PYTHONNOUSERSITE=0` before launching Gaffer.
- IECoreArnold : Added `messageContext` argument to `NodeAlgo::Converter` and `NodeAlgo::MotionConverter`.

Build
-----
Expand Down
4 changes: 2 additions & 2 deletions include/IECoreArnold/CameraAlgo.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ namespace IECoreArnold
namespace CameraAlgo
{

IECOREARNOLD_API AtNode *convert( const IECoreScene::Camera *camera, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr );
IECOREARNOLD_API AtNode *convert( const std::vector<const IECoreScene::Camera *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr );
IECOREARNOLD_API AtNode *convert( const IECoreScene::Camera *camera, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr, const std::string &messageContext = "CameraAlgo::convert" );
IECOREARNOLD_API AtNode *convert( const std::vector<const IECoreScene::Camera *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr, const std::string &messageContext = "CameraAlgo::convert" );

} // namespace CameraAlgo

Expand Down
12 changes: 6 additions & 6 deletions include/IECoreArnold/NodeAlgo.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,19 +49,19 @@ namespace NodeAlgo
/// Converts the specified IECore::Object into an equivalent
/// Arnold object, returning nullptr if no conversion is
/// available.
IECOREARNOLD_API AtNode *convert( const IECore::Object *object, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr );
IECOREARNOLD_API AtNode *convert( const IECore::Object *object, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr, const std::string &messageContext = "NodeAlgo::convert" );
/// Converts the specified IECore::Object samples into an
/// equivalent moving Arnold object. If no motion converter
/// is available, then returns a standard conversion of the
/// first sample.
IECOREARNOLD_API AtNode *convert( const std::vector<const IECore::Object *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr );
IECOREARNOLD_API AtNode *convert( const std::vector<const IECore::Object *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode = nullptr, const std::string &messageContext = "NodeAlgo::convert" );

/// Signature of a function which can convert an IECore::Object
/// into an Arnold object.
using Converter = AtNode *(*)( const IECore::Object *, AtUniverse *, const std::string &, const AtNode * );
using Converter = AtNode *(*)( const IECore::Object *sample, AtUniverse *universe, const std::string &nodeName, const AtNode *parent, const std::string &messageContext );
/// Signature of a function which can convert a series of IECore::Object
/// samples into a moving Arnold object.
using MotionConverter = AtNode *(*)( const std::vector<const IECore::Object *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parent );
using MotionConverter = AtNode *(*)( const std::vector<const IECore::Object *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parent, const std::string &messageContext );

/// Registers a converter for a specific type.
/// Use the ConverterDescription utility class in preference to
Expand All @@ -77,8 +77,8 @@ class ConverterDescription
public :

/// Type-specific conversion functions.
using Converter = AtNode *(*)( const T *, AtUniverse *, const std::string &, const AtNode * );
using MotionConverter = AtNode *(*)( const std::vector<const T *> &, float, float, AtUniverse *, const std::string &, const AtNode * );
using Converter = AtNode *(*)( const T *, AtUniverse *, const std::string &, const AtNode *, const std::string & );
using MotionConverter = AtNode *(*)( const std::vector<const T *> &, float, float, AtUniverse *, const std::string &, const AtNode *, const std::string & );

ConverterDescription( Converter converter, MotionConverter motionConverter = nullptr )
{
Expand Down
8 changes: 4 additions & 4 deletions include/IECoreArnold/ParameterAlgo.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ namespace IECoreArnold
namespace ParameterAlgo
{

IECOREARNOLD_API void setParameter( AtNode *node, const AtParamEntry *parameter, const IECore::Data *value );
IECOREARNOLD_API void setParameter( AtNode *node, AtString name, const IECore::Data *value );
IECOREARNOLD_API void setParameter( AtNode *node, const char *name, const IECore::Data *value );
IECOREARNOLD_API void setParameters( AtNode *node, const IECore::CompoundDataMap &values );
IECOREARNOLD_API void setParameter( AtNode *node, const AtParamEntry *parameter, const IECore::Data *value, const std::string &messageContext = "ParameterAlgo::setParameter" );
IECOREARNOLD_API void setParameter( AtNode *node, AtString name, const IECore::Data *value, const std::string &messageContext = "ParameterAlgo::setParameter" );
IECOREARNOLD_API void setParameter( AtNode *node, const char *name, const IECore::Data *value, const std::string &messageContext = "ParameterAlgo::setParameter" );
IECOREARNOLD_API void setParameters( AtNode *node, const IECore::CompoundDataMap &values, const std::string &messageContext = "ParameterAlgo::setParameter" );

IECOREARNOLD_API IECore::DataPtr getParameter( AtNode *node, const AtParamEntry *parameter );
IECOREARNOLD_API IECore::DataPtr getParameter( AtNode *node, const AtUserParamEntry *parameter );
Expand Down
2 changes: 1 addition & 1 deletion include/IECoreArnold/ProceduralAlgo.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ namespace IECoreArnold
namespace ProceduralAlgo
{

IECOREARNOLD_API AtNode *convert( const IECoreScene::ExternalProcedural *procedural, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode );
IECOREARNOLD_API AtNode *convert( const IECoreScene::ExternalProcedural *procedural, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode, const std::string &messageContext = "ProceduralAlgo::convert" );

} // namespace ProceduralAlgo

Expand Down
12 changes: 6 additions & 6 deletions include/IECoreArnold/ShapeAlgo.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,16 @@ namespace IECoreArnold
namespace ShapeAlgo
{

IECOREARNOLD_API void convertP( const IECoreScene::Primitive *primitive, AtNode *shape, const AtString name );
IECOREARNOLD_API void convertP( const std::vector<const IECoreScene::Primitive *> &samples, AtNode *shape, const AtString name );
IECOREARNOLD_API void convertP( const IECoreScene::Primitive *primitive, AtNode *shape, const AtString name, const std::string &messageContext = "ShapeAlgo::convertP" );
IECOREARNOLD_API void convertP( const std::vector<const IECoreScene::Primitive *> &samples, AtNode *shape, const AtString name, const std::string &messageContext = "ShapeAlgo::convertP" );

IECOREARNOLD_API void convertRadius( const IECoreScene::Primitive *primitive, AtNode *shape );
IECOREARNOLD_API void convertRadius( const std::vector<const IECoreScene::Primitive *> &samples, AtNode *shape );
IECOREARNOLD_API void convertRadius( const IECoreScene::Primitive *primitive, AtNode *shape, const std::string &messageContext = "ShapeAlgo::convertRadius" );
IECOREARNOLD_API void convertRadius( const std::vector<const IECoreScene::Primitive *> &samples, AtNode *shape, const std::string &messageContext = "ShapeAlgo::convertRadius" );

IECOREARNOLD_API void convertPrimitiveVariable( const IECoreScene::Primitive *primitive, const IECoreScene::PrimitiveVariable &primitiveVariable, AtNode *shape, const AtString name );
IECOREARNOLD_API void convertPrimitiveVariable( const IECoreScene::Primitive *primitive, const IECoreScene::PrimitiveVariable &primitiveVariable, AtNode *shape, const AtString name, const std::string &messageContext = "ShapeAlgo::convertPrimitiveVariable" );
/// Converts primitive variables from primitive into user parameters on shape, ignoring any variables
/// whose names are present in the ignore array.
IECOREARNOLD_API void convertPrimitiveVariables( const IECoreScene::Primitive *primitive, AtNode *shape, const char **namesToIgnore=nullptr );
IECOREARNOLD_API void convertPrimitiveVariables( const IECoreScene::Primitive *primitive, AtNode *shape, const char **namesToIgnore=nullptr, const std::string &messageContext = "ShapeAlgo::convertPrimitiveVariables" );

} // namespace ShapeAlgo

Expand Down
18 changes: 9 additions & 9 deletions src/IECoreArnold/CameraAlgo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,12 @@ AtVector2 curvePoint( const Splineff::Point &point )
);
}

void setShutterCurveParameter( AtNode *camera, const IECore::Data *value )
void setShutterCurveParameter( AtNode *camera, const IECore::Data *value, const std::string &messageContext )
{
auto *splineData = runTimeCast<const SplineffData>( value );
if( !splineData )
{
msg( Msg::Warning, "setShutterCurveParameter", fmt::format( "Unsupported value type \"{}\" (expected SplineffData).", value->typeName() ) );
msg( Msg::Warning, messageContext, fmt::format( "Unsupported value type \"{}\" (expected SplineffData).", value->typeName() ) );
return;
}

Expand Down Expand Up @@ -127,7 +127,7 @@ void setShutterCurveParameter( AtNode *camera, const IECore::Data *value )
}

// Performs the part of the conversion that is shared by both animated and non-animated cameras.
AtNode *convertCommon( const IECoreScene::Camera *camera, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode )
AtNode *convertCommon( const IECoreScene::Camera *camera, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode, const std::string &messageContext )
{
// Use projection to decide what sort of camera node to create
const std::string projection = camera->getProjection();
Expand Down Expand Up @@ -171,11 +171,11 @@ AtNode *convertCommon( const IECoreScene::Camera *camera, AtUniverse *universe,
{
if( paramNameArnold == g_shutterCurveArnoldString )
{
setShutterCurveParameter( result, it->second.get() );
setShutterCurveParameter( result, it->second.get(), messageContext );
}
else
{
ParameterAlgo::setParameter( result, paramNameArnold, it->second.get() );
ParameterAlgo::setParameter( result, paramNameArnold, it->second.get(), messageContext );
}
}
}
Expand Down Expand Up @@ -260,9 +260,9 @@ void setAnimatedFloat( AtNode *node, AtString name, const std::vector<const IECo

} // namespace

AtNode *CameraAlgo::convert( const IECoreScene::Camera *camera, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode )
AtNode *CameraAlgo::convert( const IECoreScene::Camera *camera, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode, const std::string &messageContext )
{
AtNode *result = convertCommon( camera, universe, nodeName, parentNode );
AtNode *result = convertCommon( camera, universe, nodeName, parentNode, messageContext );
if( camera->getProjection()=="perspective" )
{
AiNodeSetFlt( result, g_fovArnoldString, fieldOfView( camera ) );
Expand All @@ -277,9 +277,9 @@ AtNode *CameraAlgo::convert( const IECoreScene::Camera *camera, AtUniverse *univ
return result;
}

AtNode *CameraAlgo::convert( const std::vector<const IECoreScene::Camera *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode )
AtNode *CameraAlgo::convert( const std::vector<const IECoreScene::Camera *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode, const std::string &messageContext )
{
AtNode *result = convertCommon( samples[0], universe, nodeName, parentNode );
AtNode *result = convertCommon( samples[0], universe, nodeName, parentNode, messageContext );
if( samples[0]->getProjection()=="perspective" )
{
setAnimatedFloat( result, g_fovArnoldString, samples, fieldOfView );
Expand Down
37 changes: 18 additions & 19 deletions src/IECoreArnold/CurvesAlgo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ const AtString g_orientationsArnoldString("orientations");
const AtString g_orientedArnoldString("oriented");
const AtString g_uvsArnoldString( "uvs" );

ConstCurvesPrimitivePtr resampleCurves( const CurvesPrimitive *curves )
ConstCurvesPrimitivePtr resampleCurves( const CurvesPrimitive *curves, const std::string &messageContext )
{
if( curves->basis().standardBasis() == StandardCubicBasis::Linear )
{
Expand All @@ -99,7 +99,7 @@ ConstCurvesPrimitivePtr resampleCurves( const CurvesPrimitive *curves )
updatedCurves->variables.erase( it.first );
msg(
Msg::Warning,
"ShapeAlgo::convertPrimitiveVariable",
messageContext,
fmt::format(
"Unable to create user parameter \"{}\" for primitive variable of type \"{}\"",
it.first, it.second.data->typeName()
Expand All @@ -115,7 +115,7 @@ ConstCurvesPrimitivePtr resampleCurves( const CurvesPrimitive *curves )
return updatedCurves ? updatedCurves.get() : curves;
}

void convertUVs( const IECoreScene::CurvesPrimitive *curves, AtNode *node )
void convertUVs( const IECoreScene::CurvesPrimitive *curves, AtNode *node, const std::string &messageContext )
{
auto it = curves->variables.find( "uv" );
if( it == curves->variables.end() )
Expand All @@ -125,7 +125,7 @@ void convertUVs( const IECoreScene::CurvesPrimitive *curves, AtNode *node )

if( !runTimeCast<const V2fVectorData>( it->second.data.get() ) )
{
msg( Msg::Warning, "CurvesAlgo", fmt::format( "Variable \"uv\" has unsupported type \"{}\" (expected V2fVectorData).", it->second.data->typeName() ) );
msg( Msg::Warning, messageContext, fmt::format( "Variable \"uv\" has unsupported type \"{}\" (expected V2fVectorData).", it->second.data->typeName() ) );
return;
}

Expand All @@ -140,7 +140,7 @@ void convertUVs( const IECoreScene::CurvesPrimitive *curves, AtNode *node )
AiNodeSetArray( node, g_uvsArnoldString, array );
}

AtNode *convertCommon( const IECoreScene::CurvesPrimitive *curves, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode )
AtNode *convertCommon( const IECoreScene::CurvesPrimitive *curves, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode, const std::string &messageContext )
{

AtNode *result = AiNode( universe, g_curvesArnoldString, AtString( nodeName.c_str() ), parentNode );
Expand Down Expand Up @@ -177,24 +177,24 @@ AtNode *convertCommon( const IECoreScene::CurvesPrimitive *curves, AtUniverse *u

// Add UVs and arbitrary user parameters

convertUVs( curves, result );
convertUVs( curves, result, messageContext );

const char *ignore[] = { "P", "N", "width", "radius", "uv", nullptr };
ShapeAlgo::convertPrimitiveVariables( curves, result, ignore );
ShapeAlgo::convertPrimitiveVariables( curves, result, ignore, messageContext );

return result;

}

AtNode *convert( const IECoreScene::CurvesPrimitive *curves, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode )
AtNode *convert( const IECoreScene::CurvesPrimitive *curves, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode, const std::string &messageContext )
{
// Arnold (and IECoreArnold::ShapeAlgo) does not support Vertex PrimitiveVariables for
// cubic CurvesPrimitives, so we resample the variables to Varying first.
ConstCurvesPrimitivePtr resampledCurves = ::resampleCurves( curves );
ConstCurvesPrimitivePtr resampledCurves = ::resampleCurves( curves, messageContext );

AtNode *result = convertCommon( resampledCurves.get(), universe, nodeName, parentNode );
ShapeAlgo::convertP( resampledCurves.get(), result, g_pointsArnoldString );
ShapeAlgo::convertRadius( resampledCurves.get(), result );
AtNode *result = convertCommon( resampledCurves.get(), universe, nodeName, parentNode, messageContext );
ShapeAlgo::convertP( resampledCurves.get(), result, g_pointsArnoldString, messageContext );
ShapeAlgo::convertRadius( resampledCurves.get(), result, messageContext );

// Convert "N" to orientations

Expand All @@ -211,7 +211,7 @@ AtNode *convert( const IECoreScene::CurvesPrimitive *curves, AtUniverse *univers
return result;
}

AtNode *convert( const std::vector<const IECoreScene::CurvesPrimitive *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode )
AtNode *convert( const std::vector<const IECoreScene::CurvesPrimitive *> &samples, float motionStart, float motionEnd, AtUniverse *universe, const std::string &nodeName, const AtNode *parentNode, const std::string &messageContext )
{
// Arnold (and IECoreArnold::ShapeAlgo) does not support Vertex PrimitiveVariables for
// cubic CurvesPrimitives, so we resample the variables to Varying first.
Expand All @@ -224,7 +224,7 @@ AtNode *convert( const std::vector<const IECoreScene::CurvesPrimitive *> &sample
nSamples.reserve( samples.size() );
for( const CurvesPrimitive *curves : samples )
{
ConstCurvesPrimitivePtr resampledCurves = ::resampleCurves( curves );
ConstCurvesPrimitivePtr resampledCurves = ::resampleCurves( curves, messageContext );
updatedSamples.push_back( resampledCurves );
primitiveSamples.push_back( resampledCurves.get() );

Expand All @@ -234,11 +234,10 @@ AtNode *convert( const std::vector<const IECoreScene::CurvesPrimitive *> &sample
}
}

AtNode *result = convertCommon( updatedSamples.front().get(), universe, nodeName, parentNode );

ShapeAlgo::convertP( primitiveSamples, result, g_pointsArnoldString );
ShapeAlgo::convertRadius( primitiveSamples, result );
AtNode *result = convertCommon( updatedSamples.front().get(), universe, nodeName, parentNode, messageContext );

ShapeAlgo::convertP( primitiveSamples, result, g_pointsArnoldString, messageContext );
ShapeAlgo::convertRadius( primitiveSamples, result, messageContext );
if( nSamples.size() == samples.size() )
{
AiNodeSetStr( result, g_modeArnoldString, g_orientedArnoldString );
Expand All @@ -247,7 +246,7 @@ AtNode *convert( const std::vector<const IECoreScene::CurvesPrimitive *> &sample
}
else if( nSamples.size() )
{
IECore::msg( IECore::Msg::Warning, "CurvesAlgo::convert", "Missing sample for primitive variable \"N\" - not setting orientations." );
IECore::msg( IECore::Msg::Warning, messageContext, "Missing sample for primitive variable \"N\" - not setting orientations." );
}

AiNodeSetFlt( result, g_motionStartArnoldString, motionStart );
Expand Down
Loading

0 comments on commit a9e7981

Please sign in to comment.