Esempio n. 1
0
void mitk::BaseGeometry::TransferVtkToItkTransform()
{
  TransferVtkMatrixToItkTransform(m_VtkMatrix, m_IndexToWorldTransform.GetPointer());
  CopySpacingFromTransform(m_IndexToWorldTransform, m_Spacing);
  vtk2itk(m_IndexToWorldTransform->GetOffset(), m_Origin);
  TransferItkToVtkTransform();
}
Esempio n. 2
0
void mitk::BaseGeometry::Compose( const mitk::BaseGeometry::TransformType * other, bool pre )
{
  mitk::ModifiedLock lock(this);

  m_IndexToWorldTransform->Compose(other, pre);
  CopySpacingFromTransform(m_IndexToWorldTransform, m_Spacing);
  vtk2itk(m_IndexToWorldTransform->GetOffset(), m_Origin);
  Modified();
  TransferItkToVtkTransform();
}
Esempio n. 3
0
void mitk::BaseGeometry::SetIdentity()
{
  mitk::ModifiedLock lock(this);

  m_IndexToWorldTransform->SetIdentity();
  m_Origin.Fill(0);
  CopySpacingFromTransform(m_IndexToWorldTransform, m_Spacing);
  Modified();
  TransferItkToVtkTransform();
}
Esempio n. 4
0
void mitk::BaseGeometry::SetOrigin(const Point3D & origin)
{
  mitk::ModifiedLock lock(this);

  if(origin!=GetOrigin())
  {
    m_Origin = origin;
    m_IndexToWorldTransform->SetOffset(m_Origin.GetVectorFromOrigin());
    Modified();
    TransferItkToVtkTransform();
  }
}
Esempio n. 5
0
void mitk::BaseGeometry::SetIndexToWorldTransform(mitk::AffineTransform3D* transform)
{
  mitk::ModifiedLock lock(this);

  PreSetIndexToWorldTransform(transform);

  m_IndexToWorldTransform = transform;
  CopySpacingFromTransform(m_IndexToWorldTransform, m_Spacing);
  vtk2itk(m_IndexToWorldTransform->GetOffset(), m_Origin);
  TransferItkToVtkTransform();
  Modified();

  PostSetIndexToWorldTransform(transform);

}
Esempio n. 6
0
void mitk::BaseGeometry::SetExtentInMM(int direction, ScalarType extentInMM)
{
  mitk::ModifiedLock lock(this);

  ScalarType len = GetExtentInMM(direction);
  if(fabs(len - extentInMM)>=mitk::eps)
  {
    AffineTransform3D::MatrixType::InternalMatrixType vnlmatrix;
    vnlmatrix = m_IndexToWorldTransform->GetMatrix().GetVnlMatrix();
    if(len>extentInMM)
      vnlmatrix.set_column(direction, vnlmatrix.get_column(direction)/len*extentInMM);
    else
      vnlmatrix.set_column(direction, vnlmatrix.get_column(direction)*extentInMM/len);
    Matrix3D matrix;
    matrix = vnlmatrix;
    m_IndexToWorldTransform->SetMatrix(matrix);
    TransferItkToVtkTransform();
    Modified();
  }
  PostSetExtentInMM(direction,extentInMM);
}
Esempio n. 7
0
void
PlaneGeometry::ExecuteOperation( Operation *operation )
{
  vtkTransform *transform = vtkTransform::New();
  transform->SetMatrix( m_VtkMatrix );

  switch ( operation->GetOperationType() )
  {
  case OpORIENT:
    {
      mitk::PlaneOperation *planeOp = dynamic_cast< mitk::PlaneOperation * >( operation );
      if ( planeOp == NULL )
      {
        return;
      }

      Point3D center = planeOp->GetPoint();

      Vector3D orientationVector = planeOp->GetNormal();
      Vector3D defaultVector;
      FillVector3D( defaultVector, 0.0, 0.0, 1.0 );

      Vector3D rotationAxis = itk::CrossProduct( orientationVector, defaultVector );
      //vtkFloatingPointType rotationAngle = acos( orientationVector[2] / orientationVector.GetNorm() );

      vtkFloatingPointType rotationAngle = atan2( (double) rotationAxis.GetNorm(), (double) (orientationVector * defaultVector) );
      rotationAngle *= 180.0 / vnl_math::pi;

      transform->PostMultiply();
      transform->Identity();
      transform->Translate( center[0], center[1], center[2] );
      transform->RotateWXYZ( rotationAngle, rotationAxis[0], rotationAxis[1], rotationAxis[2] );
      transform->Translate( -center[0], -center[1], -center[2] );
      break;
    }
  case OpRESTOREPLANEPOSITION:
    {
      RestorePlanePositionOperation *op = dynamic_cast< mitk::RestorePlanePositionOperation* >(operation);
      if(op == NULL)
      {
        return;
      }

      AffineTransform3D::Pointer transform2 = AffineTransform3D::New();
      Matrix3D matrix;
      matrix.GetVnlMatrix().set_column(0, op->GetTransform()->GetMatrix().GetVnlMatrix().get_column(0));
      matrix.GetVnlMatrix().set_column(1, op->GetTransform()->GetMatrix().GetVnlMatrix().get_column(1));
      matrix.GetVnlMatrix().set_column(2, op->GetTransform()->GetMatrix().GetVnlMatrix().get_column(2));
      transform2->SetMatrix(matrix);
      Vector3D offset = op->GetTransform()->GetOffset();
      transform2->SetOffset(offset);

      this->SetIndexToWorldTransform(transform2);
      ScalarType bounds[6] = {0, op->GetWidth(), 0, op->GetHeight(), 0 ,1 };
      this->SetBounds(bounds);
      TransferItkToVtkTransform();
      this->Modified();
      transform->Delete();
      return;

    }
  default:
    Superclass::ExecuteOperation( operation );
    transform->Delete();
    return;
  }

  m_VtkMatrix->DeepCopy(transform->GetMatrix());
  this->TransferVtkToItkTransform();
  this->Modified();
  transform->Delete();
}
 void GeometryTransformHolder::Compose(const TransformType *other, bool pre)
 {
   m_IndexToWorldTransform->Compose(other, pre);
   TransferItkToVtkTransform();
 }
 void GeometryTransformHolder::SetIdentity()
 {
   m_IndexToWorldTransform->SetIdentity();
   TransferItkToVtkTransform();
 }
 void GeometryTransformHolder::SetMatrix(Matrix3D &matrix)
 {
   m_IndexToWorldTransform->SetMatrix(matrix);
   TransferItkToVtkTransform();
 }
 //## @brief Set the transformation used to convert from index
 //## to world coordinates. The spacing of the new transform is
 //## copied to m_spacing.
 void GeometryTransformHolder::SetIndexToWorldTransform(mitk::AffineTransform3D *transform)
 {
   m_IndexToWorldTransform = transform;
   TransferItkToVtkTransform();
 }
 //##Documentation
 //## @brief Set the origin, i.e. the upper-left corner of the plane
 //##
 void GeometryTransformHolder::SetOrigin(const Point3D &origin)
 {
   m_IndexToWorldTransform->SetOffset(origin.GetVectorFromOrigin());
   TransferItkToVtkTransform();
 }