Dear MITK users,

I am developping an application using MITK as a library, and I am 
currently trying to load a planar figure from its 3D control points.
However, I can only manage to display the figure when I start 
interacting with it. Otherwise, the figure is not displayed.

Here is the workflow I am using:
  - create a new figure
  - create a new node containing the figure, select it, and add to the 
datastorage
  - set a planar figure interactor to the node
  - set the geometry of the figure: the geometry is computed from a 
dicom image stored in the datastorage. The planar figure is placed on an 
axial slice of this image.
  - set the points to the figure
  - finalize the interaction
  - update all viewers

When I comment the lines in the "Finalize interaction" part, the figure 
appears when I click on the viewer at the slice where the figure is (and 
a new point is added at the click).

I have struggled with this issue for several days now, and I would 
grealty appreciate any help!

Best regards,
Daphné

Below is a snippet of my code:

         mitk::PlanarFigure::Pointer figure = 
mitk::PlanarBezierCurve::New();

         // Create node containing the curve, select it and add it to 
datastorage
         mitk::DataNode::Pointer newNode = mitk::DataNode::New();
         newNode->SetData(figure);
         newNode->SetSelected(true);

         if (!_ds->Exists(newNode))
         {
             _ds->Add(newNode);
         }

         // Set new interactor
         mitk::PlanarFigureInteractor::Pointer interactor = 
dynamic_cast<mitk::PlanarFigureInteractor*>(newNode->GetDataInteractor().GetPointer());
         if (interactor.IsNull())
         {
             interactor = mitk::PlanarFigureInteractor::New();
             auto planarFigureModule = 
us::ModuleRegistry::GetModule("MitkPlanarFigure");

interactor->LoadStateMachine("PlanarFigureInteraction.xml", 
planarFigureModule);
             interactor->SetEventConfig("PlanarFigureConfig.xml", 
planarFigureModule);
         }
         interactor->SetDataNode(newNode);

         // Set figure plane geometry
         mitk::PlaneGeometry::Pointer curvePlane = 
mitk::PlaneGeometry::New();

         mitk::DataNode::Pointer originalImageNode = 
_ds->GetNamedNode("originalImage"); // This node contains a dicom image 
on which we want to draw the planar figure
         mitk::BaseGeometry* originalImageGeometry = 
originalImageNode->GetData()->GetGeometry();

         itk::Index<3> idx;
         originalImageGeometry->WorldToIndex(curve.points[0], idx); // 
the "curve" variable contains the 3D control points
         mitk::ScalarType planeZPosition = idx[2];

curvePlane->InitializeStandardPlane(originalImageGeometry, 
mitk::PlaneGeometry::Axial, planeZPosition);
         figure->SetPlaneGeometry(curvePlane);

         //Set points to figure
         for (int i = 0; i < curve.points.size(); i++)
         {
             mitk::Point2D indexPoint2d;
             for (int dim = 0; dim < 2; dim++)
             {
                 indexPoint2d[dim] = (curve.points[i][dim] - 
originalImageGeometry->GetOrigin()[dim]);
             }
             if (i == 0)
             {
figure->InvokeEvent(mitk::StartPlacementPlanarFigureEvent());
                 figure->PlaceFigure(indexPoint2d);
newNode->SetBoolProperty("PlanarFigureInitializedWindow", true);
             }
             else
             {
                 figure->SetControlPoint(i, indexPoint2d, true);
             }
         }

         figure->EvaluateFeatures();
         figure->DeselectControlPoint();

         // Finalize interaction: when these six lines are commented, 
the figure is displayed when the user clicks on the slice where the 
figure is placed
         figure->Modified();
         figure->SetProperty("initiallyplaced", 
mitk::BoolProperty::New(true));
newNode->SetBoolProperty("planarfigure.drawcontrolpoints", true);
         newNode->Modified();
figure->InvokeEvent(mitk::EndPlacementPlanarFigureEvent());
figure->InvokeEvent(mitk::EndInteractionPlanarFigureEvent());

mitk::RenderingManager::GetInstance()->RequestUpdateAll();



-- 
Daphné Wallach
Ingénieur de recherche
http://www.hrv-simulation.com


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
mitk-users mailing list
mitk-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to