Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ void RicApplyUserDefinedCameraFeature::readCameraFromSettings( cvf::Vec3d& eye,
QVariant upVariant = settings.value( RicStoreUserDefinedCameraFeature::upName() );
if ( eyeVariant.isNull() || vrpVariant.isNull() || upVariant.isNull() ) return;

caf::pdmFromVariant( eyeVariant, eye );
caf::pdmFromVariant( vrpVariant, vrp );
caf::pdmFromVariant( upVariant, up );
caf::fromVariant( eyeVariant, eye );
caf::fromVariant( vrpVariant, vrp );
caf::fromVariant( upVariant, up );
}
Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,9 @@ void RicStoreUserDefinedCameraFeature::onActionTriggered( bool isChecked )

camera->toLookAt( &eye, &vrp, &up );

QVariant eyeVariant = caf::pdmToVariant( eye );
settings.setValue( RicStoreUserDefinedCameraFeature::eyeName(), eyeVariant );

QVariant vrpVariant = caf::pdmToVariant( vrp );
settings.setValue( RicStoreUserDefinedCameraFeature::viewReferencePointName(), vrpVariant );

QVariant upVariant = caf::pdmToVariant( up );
settings.setValue( RicStoreUserDefinedCameraFeature::upName(), upVariant );
settings.setValue( RicStoreUserDefinedCameraFeature::eyeName(), caf::toVariant( eye ) );
settings.setValue( RicStoreUserDefinedCameraFeature::viewReferencePointName(), caf::toVariant( vrp ) );
settings.setValue( RicStoreUserDefinedCameraFeature::upName(), caf::toVariant( up ) );

RiuMainWindow::instance()->refreshViewActions();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ void RicTextAnnotation3dEditor::updatePoint( caf::PdmUiFieldHandle* uiField, con

cvf::Vec3d domainPos = dispXf->transformToDomainCoord( newPos );
domainPos.z() = -domainPos.z();
QVariant originVariant = caf::pdmToVariant( domainPos );
QVariant originVariant = caf::toVariant( domainPos );

caf::PdmUiCommandSystemProxy::instance()->setUiValueToField( uiField, originVariant );
}
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ void RicPolylineTarget3dEditor::slotUpdated( const cvf::Vec3d& origin, const cvf

cvf::Vec3d domainOrigin = dispXf->transformToDomainCoord( origin );
domainOrigin.z() = -domainOrigin.z();
QVariant originVariant = caf::pdmToVariant( domainOrigin );
QVariant originVariant = caf::toVariant( domainOrigin );

caf::PdmUiCommandSystemProxy::instance()->setUiValueToField( target->targetPointUiCapability(), originVariant );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ void RimWellPathGeometryDef::fieldChangedByUi( const caf::PdmFieldHandle* change
linkedDefs.end() );

cvf::Vec3d oldPos;
caf::pdmFromVariant( oldValue, oldPos );
caf::fromVariant( oldValue, oldPos );

auto delta = m_referencePointUtmXyd() - oldPos;

Expand Down
13 changes: 10 additions & 3 deletions Fwk/AppFwk/cafPdmCvf/cafPdmCoreColor3f.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,22 +44,29 @@

#include <QColor>

namespace caf
// pdmToVariant/pdmFromVariant in namespace cvf so ADL finds them when called via caf::toVariant/
// caf::fromVariant — ADL searches the argument's namespace (cvf) in addition to caf.
namespace cvf
{

inline QVariant pdmToVariant( const cvf::Color3f& value )
inline QVariant pdmToVariant( const Color3f& value )
{
QColor col;
col.setRgbF( value.r(), value.g(), value.b() );
return col;
}

inline void pdmFromVariant( const QVariant& v, cvf::Color3f& out )
inline void pdmFromVariant( const QVariant& v, Color3f& out )
{
QColor col = v.value<QColor>();
out.set( col.redF(), col.greenF(), col.blueF() );
}

} // end namespace cvf

namespace caf
{

template <>
struct PdmVariantEqualImpl<cvf::Color3f>
{
Expand Down
13 changes: 10 additions & 3 deletions Fwk/AppFwk/cafPdmCvf/cafPdmCoreMat4d.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,24 +45,31 @@

#include <QTextStream>

namespace caf
// pdmToVariant/pdmFromVariant in namespace cvf so ADL finds them when called via caf::toVariant/
// caf::fromVariant — ADL searches the argument's namespace (cvf) in addition to caf.
namespace cvf
{

inline QVariant pdmToVariant( const cvf::Mat4d& value )
inline QVariant pdmToVariant( const Mat4d& value )
{
QString str;
QTextStream textStream( &str );
textStream << value;
return QVariant( str );
}

inline void pdmFromVariant( const QVariant& v, cvf::Mat4d& out )
inline void pdmFromVariant( const QVariant& v, Mat4d& out )
{
QString str = v.toString();
QTextStream textStream( &str );
textStream >> out;
}

} // end namespace cvf

namespace caf
{

template <>
struct PdmVariantEqualImpl<cvf::Mat4d>
{
Expand Down
13 changes: 10 additions & 3 deletions Fwk/AppFwk/cafPdmCvf/cafPdmCoreVec3d.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,24 +47,31 @@

Q_DECLARE_METATYPE( cvf::Vec3d );

namespace caf
// pdmToVariant/pdmFromVariant in namespace cvf so ADL finds them when called via caf::toVariant/
// caf::fromVariant — ADL searches the argument's namespace (cvf) in addition to caf.
namespace cvf
{

inline QVariant pdmToVariant( const cvf::Vec3d& value )
inline QVariant pdmToVariant( const Vec3d& value )
{
QString str;
QTextStream textStream( &str );
textStream << value;
return QVariant( str );
}

inline void pdmFromVariant( const QVariant& v, cvf::Vec3d& out )
inline void pdmFromVariant( const QVariant& v, Vec3d& out )
{
QString str = v.toString();
QTextStream textStream( &str );
textStream >> out;
}

} // end namespace cvf

namespace caf
{

template <>
struct PdmVariantEqualImpl<cvf::Vec3d>
{
Expand Down
33 changes: 28 additions & 5 deletions Fwk/AppFwk/cafPdmCvf/cafPdmCvf_UnitTests/cafPdmCoreColor3fTest.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
#include "cafPdmCoreColor3f.h"

#include "cafPdmFieldTraits.h"

#include "gtest/gtest.h"

#include <QColor>

TEST( SerializeTest, PdmCoreColor3f )
{
float r = 0.4f;
Expand Down Expand Up @@ -33,10 +37,10 @@ TEST( VariantTest, PdmCoreColor3f )
float b = 0.18f;
cvf::Color3f myColor( r, g, b );

QVariant myVariant = caf::pdmToVariant( myColor );
QVariant myVariant = caf::toVariant( myColor );

cvf::Color3f decoded;
caf::pdmFromVariant( myVariant, decoded );
caf::fromVariant( myVariant, decoded );

EXPECT_FLOAT_EQ( myColor.r(), decoded.r() );
EXPECT_FLOAT_EQ( myColor.g(), decoded.g() );
Expand All @@ -49,14 +53,33 @@ TEST( VariantEqualTest, PdmCoreColor3f )
cvf::Color3f b( 0.4f, 0.2f, 0.18f );
cvf::Color3f c( 0.4f, 0.2f, 0.5f );

QVariant va = caf::pdmToVariant( a );
QVariant vb = caf::pdmToVariant( b );
QVariant vc = caf::pdmToVariant( c );
QVariant va = caf::toVariant( a );
QVariant vb = caf::toVariant( b );
QVariant vc = caf::toVariant( c );

EXPECT_TRUE( caf::pdmVariantEqual<cvf::Color3f>( va, vb ) );
EXPECT_FALSE( caf::pdmVariantEqual<cvf::Color3f>( va, vc ) );
}

// Verifies that caf::toVariant dispatches to the cvf::Color3f overload via ADL,
// producing a QColor variant rather than a raw cvf::Color3f.
TEST( AdlVariantTest, PdmCoreColor3f )
{
cvf::Color3f original( 0.4f, 0.2f, 0.18f );

QVariant variant = caf::toVariant( original );

// The variant must hold a QColor, not a raw cvf::Color3f
EXPECT_TRUE( variant.canConvert<QColor>() );

cvf::Color3f decoded;
caf::fromVariant( variant, decoded );

EXPECT_FLOAT_EQ( original.r(), decoded.r() );
EXPECT_FLOAT_EQ( original.g(), decoded.g() );
EXPECT_NEAR( original.b(), decoded.b(), 0.01 );
}

TEST( SerializeSeveralTest, PdmCoreColor3f )
{
float r = 0.4f;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ TEST( VariantTest, PdmCoreMat4d )
{
cvf::Mat4d myMatrix = createMatrix();

QVariant myVariant = caf::pdmToVariant( myMatrix );
QVariant myVariant = caf::toVariant( myMatrix );

cvf::Mat4d decoded;
caf::pdmFromVariant( myVariant, decoded );
caf::fromVariant( myVariant, decoded );

EXPECT_TRUE( decoded.equals( myMatrix ) );
}
Expand Down
10 changes: 5 additions & 5 deletions Fwk/AppFwk/cafPdmCvf/cafPdmCvf_UnitTests/cafPdmCoreVec3dTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ TEST( VariantTest, PdmCoreVec3d )

cvf::Vec3d myVector( a, b, c );

QVariant myVariant = caf::pdmToVariant( myVector );
QVariant myVariant = caf::toVariant( myVector );

cvf::Vec3d decoded;
caf::pdmFromVariant( myVariant, decoded );
caf::fromVariant( myVariant, decoded );

EXPECT_TRUE( decoded.equals( myVector ) );
}
Expand All @@ -51,9 +51,9 @@ TEST( VariantEqualTest, PdmCoreVec3d )
cvf::Vec3d b( 1.0, 2.0, 3.0 );
cvf::Vec3d c( 1.0, 2.0, 4.0 );

QVariant va = caf::pdmToVariant( a );
QVariant vb = caf::pdmToVariant( b );
QVariant vc = caf::pdmToVariant( c );
QVariant va = caf::toVariant( a );
QVariant vb = caf::toVariant( b );
QVariant vc = caf::toVariant( c );

EXPECT_TRUE( caf::pdmVariantEqual<cvf::Vec3d>( va, vb ) );
EXPECT_FALSE( caf::pdmVariantEqual<cvf::Vec3d>( va, vc ) );
Expand Down
13 changes: 10 additions & 3 deletions Fwk/AppFwk/cafPdmCvf/cafPdmMat3d/cafPdmCoreMat3d.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,24 +45,31 @@

#include <QTextStream>

namespace caf
// pdmToVariant/pdmFromVariant in namespace cvf so ADL finds them when called via caf::toVariant/
// caf::fromVariant — ADL searches the argument's namespace (cvf) in addition to caf.
namespace cvf
{

inline QVariant pdmToVariant( const cvf::Mat3d& value )
inline QVariant pdmToVariant( const Mat3d& value )
{
QString str;
QTextStream textStream( &str );
textStream << value;
return QVariant( str );
}

inline void pdmFromVariant( const QVariant& v, cvf::Mat3d& out )
inline void pdmFromVariant( const QVariant& v, Mat3d& out )
{
QString str = v.toString();
QTextStream textStream( &str );
textStream >> out;
}

} // end namespace cvf

namespace caf
{

template <>
struct PdmVariantEqualImpl<cvf::Mat3d>
{
Expand Down
23 changes: 23 additions & 0 deletions Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmFieldTraits.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,29 @@ void pdmFromVariant( const QVariant& v, std::optional<T>& out )
out = underlying;
}

//==================================================================================================
/// toVariant / fromVariant — public API wrappers
///
/// Simple qualified-call entry points that encapsulate the ADL two-step internally.
/// Prefer these over calling pdmToVariant/pdmFromVariant with a using-declaration at the call site.
/// Custom types are still extended by adding pdmToVariant/pdmFromVariant overloads in the type's
/// own namespace; these wrappers just hide that detail from callers.
//==================================================================================================

template <typename T>
QVariant toVariant( const T& value )
{
using caf::pdmToVariant;
return pdmToVariant( value );
}

template <typename T>
void fromVariant( const QVariant& v, T& out )
{
using caf::pdmFromVariant;
pdmFromVariant( v, out );
}

//==================================================================================================
/// PdmVariantEqualImpl<T>
///
Expand Down
Loading