option "size" - "Size for the output image" int multiple no default="512"
option "spacing" - "Spacing for the output image" double multiple no default="0.8"
-
+option "panel_position" - "Position of the panel: small, medium or large" string no default="small"
}
}
+ /** Set the panelshift. */
+ void SetPanelShift(double shift)
+ {
+ if (m_PanelShift!=shift)
+ {
+ m_PanelShift=shift;
+ m_IsInitialized=false;
+ }
+ }
+
/** Helper method to set the output parameters based on this image */
void SetOutputParametersFromImage( const OutputImagePointer image );
double m_SourceToScreen;
double m_SourceToAxis;
double m_ProjectionAngle;
+ double m_PanelShift;
MatrixType m_RigidTransformMatrix;
OutputPixelType m_EdgePaddingValue;
itk::Matrix<double,4,4> centeredRotationMatrix = GetCenteredRotationMatrix3D(rotationParameters,transformedCenter);
// Compose this rotation with the rigid transform matrix
- itk::Matrix<double,4,4> finalTransform = centeredRotationMatrix * m_RigidTransformMatrix;
+ itk::Matrix<double,4,4> finalTransform = m_RigidTransformMatrix * centeredRotationMatrix ;
// Set the rotation
itk::Matrix<double,3,3> finalRotation = GetRotationalPartMatrix3D(finalTransform);
// JV -1 seems to correspond better with shearwarp of Simon Rit
typename InterpolatorType::InputPointType originOutput;
originOutput[0] = m_IsoCenter[0]- (m_SourceToScreen - m_SourceToAxis);
- originOutput[1] = m_IsoCenter[1]-static_cast<double>(sizeOuput[1]-1)*spacingOutput[1]/2.0;
+ originOutput[1] = m_IsoCenter[1]-static_cast<double>(sizeOuput[1]-1)*spacingOutput[1]/2.0 - m_PanelShift;
originOutput[2] = m_IsoCenter[2]-static_cast<double>(sizeOuput[2]-1)*spacingOutput[2]/2.0;
m_Resampler->SetOutputOrigin( originOutput );
if (m_Verbose)std::cout<<"The origin of the flat panel is at "<< originOutput <<",..."<< std::endl;
}
filter->SetEdgePaddingValue(static_cast<OutputPixelType>(m_ArgsInfo.pad_arg));
+ // Panel position (hard coded values for the elekta synergy)
+ // Two be more precise, one should read the specific values for each angle in Frame.dbf
+ if (strcmp(m_ArgsInfo.panel_position_arg,"small") !=0)
+ filter->SetPanelShift(0.);
+ else if (strcmp(m_ArgsInfo.panel_position_arg,"medium") !=0)
+ filter->SetPanelShift(114.84);
+ else if (strcmp(m_ArgsInfo.panel_position_arg,"large") !=0)
+ filter->SetPanelShift(190.);
+ else assert(false); //Unsupported panel position
// Output image info
if (m_ArgsInfo.like_given)
{