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