to and from domain coord

This commit is contained in:
Magne Sjaastad
2025-02-15 17:38:51 +01:00
parent 4990d1a634
commit 925dae6f26
2 changed files with 183 additions and 0 deletions

View File

@@ -27,6 +27,7 @@
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObjectScriptingCapability.h"
#include "cafDisplayCoordTransform.h"
#include "cafPdmFieldScriptingCapabilityCvfVec3d.h"
CAF_PDM_OBJECT_METHOD_SOURCE_INIT( Rim3dView, Rimc3dView_cameraVectors, "CameraVectors" );
@@ -183,3 +184,131 @@ bool Rimc3dView_setCameraVectors::isNullptrValidResult() const
{
return true;
}
CAF_PDM_OBJECT_METHOD_SOURCE_INIT( Rim3dView, Rimc3dView_toDisplayCoord, "to_display_coord" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rimc3dView_toDisplayCoord::Rimc3dView_toDisplayCoord( caf::PdmObjectHandle* self )
: caf::PdmObjectMethod( self )
{
CAF_PDM_InitScriptableFieldNoDefault( &m_domainCoord, "DomainCoord", "Domain Coordinate" );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmObjectHandle* Rimc3dView_toDisplayCoord::execute()
{
if ( auto view = self<Rim3dView>() )
{
auto transForm = view->displayCoordTransform();
auto coordObj = new RimcCoordinate();
auto coord = transForm->transformToDisplayCoord( m_domainCoord );
coord.z() *= -1.0;
coordObj->setCoordinate( coord );
return coordObj;
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rimc3dView_toDisplayCoord::resultIsPersistent() const
{
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::unique_ptr<caf::PdmObjectHandle> Rimc3dView_toDisplayCoord::defaultResult() const
{
return std::unique_ptr<caf::PdmObjectHandle>( new RimcCoordinate() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rimc3dView_toDisplayCoord::isNullptrValidResult() const
{
return true;
}
CAF_PDM_SOURCE_INIT( RimcCoordinate, "RimcCoordinate" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimcCoordinate::RimcCoordinate()
{
CAF_PDM_InitScriptableObject( "Coordinate" );
CAF_PDM_InitScriptableFieldNoDefault( &m_coordinate, "Coordinate", "Coordinate" );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimcCoordinate::setCoordinate( const cvf::Vec3d& coordinate )
{
m_coordinate = coordinate;
}
CAF_PDM_OBJECT_METHOD_SOURCE_INIT( Rim3dView, Rimc3dView_toDomainCoord, "to_domain_coord" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rimc3dView_toDomainCoord::Rimc3dView_toDomainCoord( caf::PdmObjectHandle* self )
: caf::PdmObjectMethod( self )
{
CAF_PDM_InitScriptableFieldNoDefault( &m_displayCoord, "DisplayCoord", "Display Coordinate" );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmObjectHandle* Rimc3dView_toDomainCoord::execute()
{
if ( auto view = self<Rim3dView>() )
{
auto transForm = view->displayCoordTransform();
auto coordObj = new RimcCoordinate();
auto coord = transForm->transformToDomainCoord( m_displayCoord );
coord.z() *= -1.0;
coordObj->setCoordinate( coord );
return coordObj;
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rimc3dView_toDomainCoord::resultIsPersistent() const
{
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::unique_ptr<caf::PdmObjectHandle> Rimc3dView_toDomainCoord::defaultResult() const
{
return std::unique_ptr<caf::PdmObjectHandle>( new RimcCoordinate() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rimc3dView_toDomainCoord::isNullptrValidResult() const
{
return true;
}

View File

@@ -80,3 +80,57 @@ private:
caf::PdmField<cvf::Vec3d> m_up;
caf::PdmField<cvf::Vec3d> m_referencePoint;
};
//==================================================================================================
///
//==================================================================================================
class RimcCoordinate : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
RimcCoordinate();
void setCoordinate( const cvf::Vec3d& coordinate );
private:
caf::PdmField<cvf::Vec3d> m_coordinate;
};
//==================================================================================================
///
//==================================================================================================
class Rimc3dView_toDisplayCoord : public caf::PdmObjectMethod
{
CAF_PDM_HEADER_INIT;
public:
Rimc3dView_toDisplayCoord( caf::PdmObjectHandle* self );
caf::PdmObjectHandle* execute() override;
bool resultIsPersistent() const override;
std::unique_ptr<PdmObjectHandle> defaultResult() const override;
bool isNullptrValidResult() const override;
private:
caf::PdmField<cvf::Vec3d> m_domainCoord;
};
//==================================================================================================
///
//==================================================================================================
class Rimc3dView_toDomainCoord : public caf::PdmObjectMethod
{
CAF_PDM_HEADER_INIT;
public:
Rimc3dView_toDomainCoord( caf::PdmObjectHandle* self );
caf::PdmObjectHandle* execute() override;
bool resultIsPersistent() const override;
std::unique_ptr<PdmObjectHandle> defaultResult() const override;
bool isNullptrValidResult() const override;
private:
caf::PdmField<cvf::Vec3d> m_displayCoord;
};