1717from meshroom .core .node import Node , CompatibilityNode , Status , Position
1818from meshroom .ui .graph import UIGraph
1919from meshroom .ui .utils import makeProperty
20+ from meshroom .ui .components .filepath import FilepathHelper
2021
2122
2223class Message (QObject ):
@@ -171,6 +172,7 @@ class ViewpointWrapper(QObject):
171172 sfmParamsChanged = Signal ()
172173 undistortedImageParamsChanged = Signal ()
173174 internalChanged = Signal ()
175+ principalPointCorrectedChanged = Signal ()
174176
175177 def __init__ (self , viewpointAttribute , reconstruction ):
176178 """
@@ -195,6 +197,7 @@ def __init__(self, viewpointAttribute, reconstruction):
195197 self ._undistortedImagePath = ''
196198 self ._activeNode_PrepareDenseScene = self ._reconstruction .activeNodes .get ("PrepareDenseScene" )
197199 self ._activeNode_ExportAnimatedCamera = self ._reconstruction .activeNodes .get ("ExportAnimatedCamera" )
200+ self ._principalPointCorrected = False
198201
199202 # update internally cached variables
200203 self ._updateInitialParams ()
@@ -240,16 +243,14 @@ def _updateSfMParams(self):
240243 def _updateUndistortedImageParams (self ):
241244 """ Update internal members depending on PrepareDenseScene or ExportAnimatedCamera. """
242245 # undistorted image path
243- if not self ._activeNode_PrepareDenseScene .node or not self ._activeNode_ExportAnimatedCamera .node :
244- # if not self._activeNode_PrepareDenseScene.node:
245- self ._undistortedImagePath = ''
246246 if self ._activeNode_ExportAnimatedCamera .node :
247- basename = "{}_{}" .format (self ._viewpoint .intrinsicId .value , os .path .basename (self ._viewpoint .path .value ))
248- filename = "{}.{}" .format (os .path .splitext (basename )[0 ], self ._activeNode_ExportAnimatedCamera .node .undistortedImageType .value )
249- self ._undistortedImagePath = os .path .join (self ._activeNode_ExportAnimatedCamera .node .output .value , "undistort" , filename )
247+ self ._undistortedImagePath = FilepathHelper .resolve (FilepathHelper , self ._activeNode_ExportAnimatedCamera .node .outputUndistorted .value , self ._viewpoint )
248+ self ._principalPointCorrected = self ._activeNode_ExportAnimatedCamera .node .correctPrincipalPoint .value
249+ self .principalPointCorrectedChanged .emit ()
250+ elif self ._activeNode_PrepareDenseScene .node :
251+ self ._undistortedImagePath = FilepathHelper .resolve (FilepathHelper , self ._activeNode_PrepareDenseScene .node .undistorted .value , self ._viewpoint )
250252 else :
251- filename = "{}.{}" .format (self ._viewpoint .viewId .value , self ._activeNode_PrepareDenseScene .node .outputFileType .value )
252- self ._undistortedImagePath = os .path .join (self ._activeNode_PrepareDenseScene .node .output .value , filename )
253+ self ._undistortedImagePath = ''
253254 self .undistortedImageParamsChanged .emit ()
254255
255256 # Get the underlying Viewpoint attribute wrapped by this Viewpoint.
@@ -334,10 +335,10 @@ def upVector(self):
334335 """ Get camera up vector. """
335336 return QVector3D (0.0 , 1.0 , 0.0 )
336337
337- @Property (type = QVector2D , notify = sfmParamsChanged )
338+ @Property (type = QVector2D , notify = sfmParamsChanged and principalPointCorrectedChanged )
338339 def uvCenterOffset (self ):
339340 """ Get UV offset corresponding to the camera principal point. """
340- if not self .solvedIntrinsics :
341+ if not self .solvedIntrinsics or self . _principalPointCorrected :
341342 return None
342343 pp = self .solvedIntrinsics ["principalPoint" ]
343344 # compute principal point offset in UV space
0 commit comments