MCPcopy Create free account
hub / github.com/MITK/MITK / ExecuteOperation

Method ExecuteOperation

Modules/Core/src/DataManagement/mitkBaseGeometry.cpp:532–622  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

530}
531
532void mitk::BaseGeometry::ExecuteOperation(Operation *operation)
533{
534 mitk::ModifiedLock lock(this);
535
536 vtkTransform *vtktransform = vtkTransform::New();
537 vtktransform->SetMatrix(this->GetVtkMatrix());
538 switch (operation->GetOperationType())
539 {
540 case OpNOTHING:
541 break;
542 case OpMOVE:
543 {
544 auto *pointOp = dynamic_cast<mitk::PointOperation *>(operation);
545 if (pointOp == nullptr)
546 {
547 MITK_ERROR << "Point move operation is null!";
548 return;
549 }
550 mitk::Point3D newPos = pointOp->GetPoint();
551 ScalarType data[3];
552 vtktransform->GetPosition(data);
553 vtktransform->PostMultiply();
554 vtktransform->Translate(newPos[0], newPos[1], newPos[2]);
555 vtktransform->PreMultiply();
556 break;
557 }
558 case OpSCALE:
559 {
560 auto *scaleOp = dynamic_cast<mitk::ScaleOperation *>(operation);
561 if (scaleOp == nullptr)
562 {
563 MITK_ERROR << "Scale operation is null!";
564 return;
565 }
566 mitk::Point3D newScale = scaleOp->GetScaleFactor();
567 ScalarType scalefactor[3];
568
569 scalefactor[0] = 1 + (newScale[0] / GetMatrixColumn(0).magnitude());
570 scalefactor[1] = 1 + (newScale[1] / GetMatrixColumn(1).magnitude());
571 scalefactor[2] = 1 + (newScale[2] / GetMatrixColumn(2).magnitude());
572
573 mitk::Point3D anchor = scaleOp->GetScaleAnchorPoint();
574
575 vtktransform->PostMultiply();
576 vtktransform->Translate(-anchor[0], -anchor[1], -anchor[2]);
577 vtktransform->Scale(scalefactor[0], scalefactor[1], scalefactor[2]);
578 vtktransform->Translate(anchor[0], anchor[1], anchor[2]);
579 break;
580 }
581 case OpROTATE:
582 {
583 auto *rotateOp = dynamic_cast<mitk::RotationOperation *>(operation);
584 if (rotateOp == nullptr)
585 {
586 MITK_ERROR << "Rotation operation is null!";
587 return;
588 }
589 Vector3D rotationVector = rotateOp->GetVectorOfRotation();

Callers

nothing calls this directly

Calls 15

GetVtkMatrixMethod · 0.95
SetVtkMatrixDeepCopyMethod · 0.95
ModifiedFunction · 0.85
SetMatrixMethod · 0.80
GetOperationTypeMethod · 0.80
GetScaleFactorMethod · 0.80
GetScaleAnchorPointMethod · 0.80
GetVectorOfRotationMethod · 0.80
GetCenterOfRotationMethod · 0.80
GetAngleOfRotationMethod · 0.80
GetPointerMethod · 0.80

Tested by

no test coverage detected