Skip to content

Commit

Permalink
Add scripting support to camera
Browse files Browse the repository at this point in the history
  • Loading branch information
magnesj committed Feb 16, 2025
1 parent e8bfede commit 6e19c2d
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
37 changes: 37 additions & 0 deletions ApplicationLibCode/ProjectDataModel/Rim3dView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
#include "cafFrameAnimationControl.h"
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmFieldScriptingCapabilityCvfColor3.h"
#include "cafPdmFieldScriptingCapabilityCvfVec3d.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cvfCamera.h"
#include "cvfModelBasicList.h"
Expand Down Expand Up @@ -112,6 +113,17 @@ Rim3dView::Rim3dView()
CAF_PDM_InitField( &m_cameraPointOfInterest, "CameraPointOfInterest", cvf::Vec3d::ZERO, "" );
m_cameraPointOfInterest.uiCapability()->setUiHidden( true );

CAF_PDM_InitScriptableFieldWithScriptKeywordNoDefault( &m_cameraPositionProxy, "CameraPositionProxy", "CameraMatrix", "Camera Matrix" );
m_cameraPositionProxy.registerGetMethod( this, &Rim3dView::cameraPosition );
m_cameraPositionProxy.registerSetMethod( this, &Rim3dView::setCameraPosition );

CAF_PDM_InitScriptableFieldWithScriptKeywordNoDefault( &m_cameraPointOfInterestProxy,
"CameraPointOfInterestProxy",
"CameraPointOfInterest",
"Camera Point of Interest" );
m_cameraPointOfInterestProxy.registerGetMethod( this, &Rim3dView::cameraPointOfInterest );
m_cameraPointOfInterestProxy.registerSetMethod( this, &Rim3dView::setCameraPointOfInterest );

CAF_PDM_InitScriptableField( &isPerspectiveView, "PerspectiveProjection", true, "Perspective Projection" );

double defaultScaleFactor = preferences->defaultScaleFactorZ();
Expand Down Expand Up @@ -1035,6 +1047,13 @@ void Rim3dView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const
m_viewer->update();
}
}
else if ( changedField == &m_cameraPositionProxy || changedField == &m_cameraPointOfInterestProxy )
{
if ( m_viewer )
{
m_viewer->repaint();
}
}
}

//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -1510,6 +1529,11 @@ QList<caf::PdmOptionItemInfo> Rim3dView::calculateValueOptions( const caf::PdmFi
//--------------------------------------------------------------------------------------------------
cvf::Mat4d Rim3dView::cameraPosition() const
{
if ( m_viewer && m_viewer->mainCamera() )
{
m_cameraPosition = m_viewer->mainCamera()->viewMatrix();
}

return m_cameraPosition();
}

Expand All @@ -1518,6 +1542,11 @@ cvf::Mat4d Rim3dView::cameraPosition() const
//--------------------------------------------------------------------------------------------------
cvf::Vec3d Rim3dView::cameraPointOfInterest() const
{
if ( m_viewer )
{
m_cameraPointOfInterest = m_viewer->pointOfInterest();
}

return m_cameraPointOfInterest();
}

Expand Down Expand Up @@ -1545,6 +1574,10 @@ QWidget* Rim3dView::viewWidget()
void Rim3dView::setCameraPosition( const cvf::Mat4d& cameraPosition )
{
m_cameraPosition = cameraPosition;
if ( m_viewer && m_viewer->mainCamera() )
{
m_viewer->mainCamera()->setViewMatrix( m_cameraPosition );
}
}

//--------------------------------------------------------------------------------------------------
Expand All @@ -1553,6 +1586,10 @@ void Rim3dView::setCameraPosition( const cvf::Mat4d& cameraPosition )
void Rim3dView::setCameraPointOfInterest( const cvf::Vec3d& cameraPointOfInterest )
{
m_cameraPointOfInterest = cameraPointOfInterest;
if ( m_viewer )
{
m_viewer->setPointOfInterest( m_cameraPointOfInterest );
}
}

//--------------------------------------------------------------------------------------------------
Expand Down
9 changes: 6 additions & 3 deletions ApplicationLibCode/ProjectDataModel/Rim3dView.h
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,6 @@ class Rim3dView : public RimViewWindow, public RiuViewerToViewInterface, public
cvf::ref<cvf::ModelBasicList> m_screenSpaceModel;

caf::PdmField<double> m_scaleZ;
caf::PdmField<double> m_customScaleZ;

caf::PdmChildField<RimAnnotationInViewCollection*> m_annotationCollection;

Expand Down Expand Up @@ -329,13 +328,17 @@ class Rim3dView : public RimViewWindow, public RiuViewerToViewInterface, public
caf::PdmField<int> m_id;
caf::PdmChildField<RimViewNameConfig*> m_nameConfig;
caf::PdmField<bool> m_disableLighting;
caf::PdmField<cvf::Mat4d> m_cameraPosition;
caf::PdmField<cvf::Vec3d> m_cameraPointOfInterest;
caf::PdmField<cvf::Color3f> m_backgroundColor;
caf::PdmField<bool> m_showGridBox;
caf::PdmField<bool> m_showZScaleLabel;
caf::PdmPtrField<Rim3dView*> m_comparisonView;

// Camera
mutable caf::PdmField<cvf::Mat4d> m_cameraPosition;
mutable caf::PdmField<cvf::Vec3d> m_cameraPointOfInterest;
caf::PdmProxyValueField<cvf::Vec3d> m_cameraPointOfInterestProxy;
caf::PdmProxyValueField<cvf::Mat4d> m_cameraPositionProxy;

caf::PdmField<bool> m_useCustomAnnotationStrategy;
caf::PdmField<caf::AppEnum<RivAnnotationTools::LabelPositionStrategy>> m_annotationStrategy;
caf::PdmField<int> m_annotationCountHint;
Expand Down

0 comments on commit 6e19c2d

Please sign in to comment.