From e8bfeded0af9616706ee0b0f4045d8c9f44e2cdc Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Sun, 16 Feb 2025 11:22:51 +0100 Subject: [PATCH] Add scripting support for Mat4d --- ...cafPdmFieldScriptingCapabilityCvfVec3d.cpp | 50 +++++++++++++++++++ .../cafPdmFieldScriptingCapabilityCvfVec3d.h | 15 ++++++ .../cafPdmScripting/cafPdmPythonGenerator.cpp | 1 + 3 files changed, 66 insertions(+) diff --git a/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.cpp b/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.cpp index e5ef4211b4..39492f1caf 100644 --- a/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.cpp +++ b/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.cpp @@ -80,3 +80,53 @@ void PdmFieldScriptingCapabilityIOHandler>::readFromField( PdmFieldScriptingCapabilityIOHandler>::readFromField( fieldVectorValue, outputStream, quoteStrings ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmFieldScriptingCapabilityIOHandler>::writeToField( cvf::Matrix4& fieldValue, + QTextStream& inputStream, + caf::PdmScriptIOMessages* errorMessageContainer, + bool stringsAreQuoted ) +{ + std::vector fieldVectorValue; + PdmFieldScriptingCapabilityIOHandler>::writeToField( fieldVectorValue, + inputStream, + errorMessageContainer, + stringsAreQuoted ); + if ( fieldVectorValue.size() == 16u ) + { + for ( int row = 0; row < 4; ++row ) + { + for ( int col = 0; col < 4; ++col ) + { + fieldValue( row, col ) = fieldVectorValue[row * 4 + col]; + } + } + } + else + { + QString errMsg = QString( "Expected 16 values, got %1" ).arg( fieldVectorValue.size() ); + errorMessageContainer->addError( errMsg ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmFieldScriptingCapabilityIOHandler>::readFromField( const cvf::Matrix4& fieldValue, + QTextStream& outputStream, + bool quoteStrings, + bool quoteNonBuiltin ) +{ + std::vector fieldVectorValue( 16u ); + for ( int row = 0; row < 4; ++row ) + { + for ( int col = 0; col < 4; ++col ) + { + fieldVectorValue[row * 4 + col] = fieldValue( row, col ); + } + } + + PdmFieldScriptingCapabilityIOHandler>::readFromField( fieldVectorValue, outputStream, quoteStrings ); +} diff --git a/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.h b/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.h index 7be7a058b7..7f239bc619 100644 --- a/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.h +++ b/Fwk/AppFwk/cafPdmScripting/cafPdmFieldScriptingCapabilityCvfVec3d.h @@ -37,6 +37,7 @@ #include "cafPdmFieldScriptingCapability.h" +#include "cvfMatrix4.h" #include "cvfVector3.h" namespace caf @@ -53,4 +54,18 @@ struct PdmFieldScriptingCapabilityIOHandler> bool quoteStrings = true, bool quoteNonBuiltins = false ); }; + +template <> +struct PdmFieldScriptingCapabilityIOHandler> +{ + static void writeToField( cvf::Matrix4& fieldValue, + QTextStream& inputStream, + PdmScriptIOMessages* errorMessageContainer, + bool stringsAreQuoted = true ); + static void readFromField( const cvf::Matrix4& fieldValue, + QTextStream& outputStream, + bool quoteStrings = true, + bool quoteNonBuiltins = false ); +}; + } // namespace caf diff --git a/Fwk/AppFwk/cafPdmScripting/cafPdmPythonGenerator.cpp b/Fwk/AppFwk/cafPdmScripting/cafPdmPythonGenerator.cpp index a1f2773def..094193f302 100644 --- a/Fwk/AppFwk/cafPdmScripting/cafPdmPythonGenerator.cpp +++ b/Fwk/AppFwk/cafPdmScripting/cafPdmPythonGenerator.cpp @@ -560,6 +560,7 @@ QString PdmPythonGenerator::dataTypeString( const PdmFieldHandle* field, bool us #ifndef CAF_EXCLUDE_CVF builtins[QString::fromStdString( typeid( cvf::Vec3d ).name() )] = "List[float]"; builtins[QString::fromStdString( typeid( cvf::Color3f ).name() )] = "str"; + builtins[QString::fromStdString( typeid( cvf::Mat4d ).name() )] = "List[float]"; #endif bool foundBuiltin = false;