def Execute(self): if self.Surface == None: self.PrintError('Error: No Surface.') if self.ReferenceSurface == None: self.PrintError('Error: No ReferenceSurface.') if self.SignedDistanceArrayName != '': normalsFilter = vtk.vtkPolyDataNormals() normalsFilter.SetInputData(self.ReferenceSurface) normalsFilter.AutoOrientNormalsOn() normalsFilter.SetFlipNormals(self.FlipNormals) normalsFilter.Update() self.ReferenceSurface.GetPointData().SetNormals(normalsFilter.GetOutput().GetPointData().GetNormals()) if self.DistanceArrayName != '' or self.DistanceVectorsArrayName != '' or self.SignedDistanceArrayName != '': self.PrintLog('Computing distance.') surfaceDistance = vtkvmtk.vtkvmtkSurfaceDistance() surfaceDistance.SetInputData(self.Surface) surfaceDistance.SetReferenceSurface(self.ReferenceSurface) if self.DistanceArrayName != '': surfaceDistance.SetDistanceArrayName(self.DistanceArrayName) if self.DistanceVectorsArrayName != '': surfaceDistance.SetDistanceVectorsArrayName(self.DistanceVectorsArrayName) if self.SignedDistanceArrayName != '': surfaceDistance.SetSignedDistanceArrayName(self.SignedDistanceArrayName) surfaceDistance.Update() self.Surface = surfaceDistance.GetOutput()
def Execute(self): if self.Surface == None: self.PrintError('Error: No Surface.') if self.ReferenceSurface == None: self.PrintError('Error: No ReferenceSurface.') if self.SignedDistanceArrayName != '': normalsFilter = vtk.vtkPolyDataNormals() normalsFilter.SetInputData(self.ReferenceSurface) normalsFilter.AutoOrientNormalsOn() normalsFilter.SetFlipNormals(self.FlipNormals) normalsFilter.Update() self.ReferenceSurface.GetPointData().SetNormals( normalsFilter.GetOutput().GetPointData().GetNormals()) if self.DistanceArrayName != '' or self.DistanceVectorsArrayName != '' or self.SignedDistanceArrayName != '': self.PrintLog('Computing distance.') surfaceDistance = vtkvmtk.vtkvmtkSurfaceDistance() surfaceDistance.SetInputData(self.Surface) surfaceDistance.SetReferenceSurface(self.ReferenceSurface) if self.DistanceArrayName != '': surfaceDistance.SetDistanceArrayName(self.DistanceArrayName) if self.DistanceVectorsArrayName != '': surfaceDistance.SetDistanceVectorsArrayName( self.DistanceVectorsArrayName) if self.SignedDistanceArrayName != '': surfaceDistance.SetSignedDistanceArrayName( self.SignedDistanceArrayName) surfaceDistance.Update() self.Surface = surfaceDistance.GetOutput()
def Execute(self): if self.Surface == None: self.PrintError('Error: No Surface.') if self.ReferenceSurface == None: self.PrintError('Error: No ReferenceSurface.') ## if (self.SignedDistanceArrayName != '') & (self.ReferenceSurface.GetPointData().GetNormals() == None): if (self.SignedDistanceArrayName != ''): normalsFilter = vtk.vtkPolyDataNormals() normalsFilter.SetInput(self.ReferenceSurface) normalsFilter.AutoOrientNormalsOn() normalsFilter.ConsistencyOn() normalsFilter.SplittingOff() normalsFilter.SetFlipNormals(self.FlipNormals) normalsFilter.Update() self.ReferenceSurface.GetPointData().SetNormals(normalsFilter.GetOutput().GetPointData().GetNormals()) self.PrintLog('Computing ICP transform.') icpTransform = vtkvmtk.vtkvmtkIterativeClosestPointTransform() icpTransform.SetSource(self.Surface) icpTransform.SetTarget(self.ReferenceSurface) icpTransform.GetLandmarkTransform().SetModeToRigidBody() icpTransform.StartByMatchingCentroidsOn() icpTransform.CheckMeanDistanceOn() icpTransform.SetMaximumNumberOfLandmarks(self.MaximumNumberOfLandmarks) icpTransform.SetMaximumNumberOfIterations(self.MaximumNumberOfIterations) icpTransform.SetMaximumMeanDistance(self.MaximumMeanDistance) if self.FarThreshold > 0.0: icpTransform.UseFarThresholdOn() icpTransform.SetFarThreshold(self.FarThreshold) else: icpTransform.UseFarThresholdOff() transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetInput(self.Surface) transformFilter.SetTransform(icpTransform) transformFilter.Update() self.PrintLog('Mean distance: '+str(icpTransform.GetMeanDistance())) self.Surface = transformFilter.GetOutput() self.Matrix4x4 = icpTransform.GetMatrix() if (self.DistanceArrayName != '') | (self.SignedDistanceArrayName != ''): self.PrintLog('Computing distance.') surfaceDistance = vtkvmtk.vtkvmtkSurfaceDistance() surfaceDistance.SetInput(self.Surface) surfaceDistance.SetReferenceSurface(self.ReferenceSurface) if (self.DistanceArrayName != ''): surfaceDistance.SetDistanceArrayName(self.DistanceArrayName) if (self.SignedDistanceArrayName != ''): surfaceDistance.SetSignedDistanceArrayName(self.SignedDistanceArrayName) surfaceDistance.Update() self.Surface = surfaceDistance.GetOutput()
def Execute(self): if self.Surface == None: self.PrintError('Error: No Surface.') if self.ReferenceSurface == None: self.PrintError('Error: No ReferenceSurface.') ## if (self.SignedDistanceArrayName != '') & (self.ReferenceSurface.GetPointData().GetNormals() == None): if (self.SignedDistanceArrayName != ''): normalsFilter = vtk.vtkPolyDataNormals() normalsFilter.SetInput(self.ReferenceSurface) normalsFilter.AutoOrientNormalsOn() normalsFilter.ConsistencyOn() normalsFilter.SplittingOff() normalsFilter.SetFlipNormals(self.FlipNormals) normalsFilter.Update() self.ReferenceSurface.GetPointData().SetNormals(normalsFilter.GetOutput().GetPointData().GetNormals()) self.PrintLog('Computing ICP transform.') icpTransform = vtkvmtk.vtkvmtkIterativeClosestPointTransform() icpTransform.SetSource(self.Surface) icpTransform.SetTarget(self.ReferenceSurface) icpTransform.GetLandmarkTransform().SetModeToRigidBody() icpTransform.StartByMatchingCentroidsOn() icpTransform.CheckMeanDistanceOn() icpTransform.SetMaximumNumberOfLandmarks(self.MaximumNumberOfLandmarks) icpTransform.SetMaximumNumberOfIterations(self.MaximumNumberOfIterations) icpTransform.SetMaximumMeanDistance(self.MaximumMeanDistance) if self.FarThreshold > 0.0: icpTransform.UseFarThresholdOn() icpTransform.SetFarThreshold(self.FarThreshold) else: icpTransform.UseFarThresholdOff() transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetInput(self.Surface) transformFilter.SetTransform(icpTransform) transformFilter.Update() self.PrintLog('Mean distance: '+str(icpTransform.GetMeanDistance())) self.Surface = transformFilter.GetOutput() self.Matrix4x4 = icpTransform.GetMatrix() matrix = self.Matrix4x4 self.MatrixCoefficients = [ matrix.GetElement(0,0), matrix.GetElement(0,1), matrix.GetElement(0,2), matrix.GetElement(0,3), matrix.GetElement(1,0), matrix.GetElement(1,1), matrix.GetElement(1,2), matrix.GetElement(1,3), matrix.GetElement(2,0), matrix.GetElement(2,1), matrix.GetElement(2,2), matrix.GetElement(2,3), matrix.GetElement(3,0), matrix.GetElement(3,1), matrix.GetElement(3,2), matrix.GetElement(3,3)] self.PrintLog('Transform matrix:\n %f %f %f %f\n %f %f %f %f\n %f %f %f %f\n %f %f %f %f' % tuple(self.MatrixCoefficients)) if (self.DistanceArrayName != '') | (self.SignedDistanceArrayName != ''): self.PrintLog('Computing distance.') surfaceDistance = vtkvmtk.vtkvmtkSurfaceDistance() surfaceDistance.SetInput(self.Surface) surfaceDistance.SetReferenceSurface(self.ReferenceSurface) if (self.DistanceArrayName != ''): surfaceDistance.SetDistanceArrayName(self.DistanceArrayName) if (self.SignedDistanceArrayName != ''): surfaceDistance.SetSignedDistanceArrayName(self.SignedDistanceArrayName) surfaceDistance.Update() self.Surface = surfaceDistance.GetOutput()