Slicer 5.8
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkSlicerMarkupsLogic.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Portions (c) Copyright Brigham and Women's Hospital (BWH) All Rights Reserved.
6
7 See COPYRIGHT.txt
8 or http://www.slicer.org/copyright/copyright.txt for details.
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16==============================================================================*/
17
18// .NAME vtkSlicerMarkupsLogic - slicer logic class for volumes manipulation
19// .SECTION Description
20// This class manages the logic associated with reading, saving,
21// and changing propertied of the volumes
22
23
24#ifndef __vtkSlicerMarkupsLogic_h
25#define __vtkSlicerMarkupsLogic_h
26
27// Slicer includes
29
30// Markups module includes
33
34// MRML includes
35#include "vtkMRMLStorageNode.h"
43
44// VTK includes
45#include <vtkVector.h>
46class vtkIdList;
47class vtkMatrix4x4;
48class vtkPlane;
49class vtkPoints;
50class vtkPolyData;
51
52// STD includes
53#include <cstdlib>
54#include <string>
55
56#include "vtkSlicerMarkupsModuleLogicExport.h"
57
58class VTK_SLICER_MARKUPS_MODULE_LOGIC_EXPORT vtkSlicerMarkupsLogic :
60{
61public:
62
63 enum Events
64 {
65 MarkupRegistered = vtkCommand::UserEvent + 1,
66 MarkupUnregistered
67 };
68
71 void PrintSelf(ostream& os, vtkIndent indent) override;
72
73 void ProcessMRMLNodesEvents(vtkObject *caller,
74 unsigned long event,
75 void *callData ) override;
76
81 std::string GetSelectionNodeID();
82
86 std::string GetActiveListID();
87
91
98
104
110 std::string AddNewFiducialNode(const char *name = "F", vtkMRMLScene *scene = nullptr);
111
114 vtkMRMLMarkupsNode* AddNewMarkupsNode(std::string className, std::string nodeName=std::string(), vtkMRMLScene* scene = nullptr);
115
120 int AddControlPoint(double r=0.0, double a=0.0, double s=0.0);
121
125 void JumpSlicesToLocation(double x, double y, double z, bool centered, int viewGroup = -1, vtkMRMLSliceNode* exclude = nullptr);
128 void JumpSlicesToNthPointInMarkup(const char *id, int n, bool centered = false, int viewGroup = -1, vtkMRMLSliceNode* exclude = nullptr);
131 void FocusCamerasOnNthPointInMarkup(const char *id, int n);
135 void FocusCameraOnNthPointInMarkup(const char *cameraNodeID, const char *markupNodeID, int n);
136
140 char* LoadMarkups(const char* fileName, const char* fidsName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
141
143 char* LoadMarkupsFiducials(const char* fileName, const char* fidsName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
144
145 char* LoadMarkupsFromFcsv(const char* fileName, const char* nodeName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
146 char* LoadMarkupsFromJson(const char* fileName, const char* nodeName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
147
151 char* LoadAnnotation(const char *filename, const char *name, int annotationFileType);
152
154 enum
155 {
156 AnnotationNone = 0,
160 };
161
171
177
180
186 vtkMRMLMarkupsNode *newMarkupsNode);
187
196 vtkMRMLMarkupsNode *newMarkupsNode, int newIndex);
197
205 void ConvertAnnotationFiducialsToMarkups(vtkStringArray* addedNodeIds=nullptr, vtkStringArray* removedNodeIds=nullptr);
206
211 void ConvertAnnotationLinesROIsToMarkups(vtkStringArray* addedNodeIds=nullptr, vtkStringArray* removedNodeIds=nullptr);
212
214
220
226 bool StartPlaceMode(bool persistent, vtkMRMLInteractionNode* interactionNode = nullptr);
227
228 vtkSetMacro(AutoCreateDisplayNodes, bool);
229 vtkGetMacro(AutoCreateDisplayNodes, bool);
230 vtkBooleanMacro(AutoCreateDisplayNodes, bool);
231
233
237
245 static double GetClosedCurveSurfaceArea(vtkMRMLMarkupsClosedCurveNode* curveNode, vtkPolyData* surface = nullptr, bool projectWarp = true);
246
259 static bool FitSurfaceProjectWarp(vtkPoints* curvePoints, vtkPolyData* surface, double radiusScalingFactor = 1.0, vtkIdType numberOfInternalGridPoints=225);
260
270 static bool FitSurfaceDiskWarp(vtkPoints* curvePoints, vtkPolyData* surface, double radiusScalingFactor = 1.0);
271
274 static bool IsPolygonClockwise(vtkPoints* points, vtkIdList* pointIds=nullptr);
275
277 static bool GetBestFitPlane(vtkMRMLMarkupsNode* curveNode, vtkPlane* plane);
278
279 std::string GetJsonStorageNodeClassNameForMarkupsType(std::string markupsType);
280 void RegisterJsonStorageNodeForMarkupsType(std::string markupsType, std::string storageNodeClassName);
282
290 vtkSlicerMarkupsWidget* markupsWidget,
291 bool createPushButton=true,
292 vtkSlicerMarkupsInteractionWidget* interactionWidget=nullptr);
293
298
301 bool IsMarkupsNodeRegistered(const char* nodeType) const;
302
308 vtkSlicerMarkupsWidget* GetWidgetByMarkupsType(const char* markupsType) const;
309
312
318 vtkMRMLMarkupsNode* GetNodeByMarkupsType(const char* markupsType) const;
319
321 const std::list<std::string>& GetRegisteredMarkupsTypes() const;
322
324 bool GetCreateMarkupsPushButton(const char* markupName) const;
325
329 int startRow = 0, int numberOfRows = -1);
330
332 int coordinateSystem = vtkMRMLStorageNode::CoordinateSystemRAS);
333
338 static bool ExportControlPointsToCSV(vtkMRMLMarkupsNode* markupsNode, const std::string filename, bool lps = true);
339
343 static bool ImportControlPointsFromCSV(vtkMRMLMarkupsNode* markupsNode, const std::string filename);
344
345 //-----------------------------------------------------------
346 // All public methods below are deprecated
347 //
348 // These methods are deprecated because they use old terms (markup instead of control point),
349
352 vtkMRMLMarkupsNode *newMarkupsNode)
353 {
354 vtkWarningMacro("vtkSlicerMarkupsLogic::CopyNthMarkupToNewList method is deprecated, please use CopyNthControlPointToNewList instead");
355 return this->CopyNthControlPointToNewList(n, markupsNode, newMarkupsNode);
356 }
359 vtkMRMLMarkupsNode *newMarkupsNode, int newIndex)
360 {
361 vtkWarningMacro("vtkSlicerMarkupsLogic::MoveNthMarkupToNewList method is deprecated, please use MoveNthControlPointToNewListAtIndex instead");
362 return this->MoveNthControlPointToNewListAtIndex(n, markupsNode, newMarkupsNode, newIndex);
363 }
365 int AddFiducial(double r=0.0, double a=0.0, double s=0.0)
366 {
367 vtkWarningMacro("vtkSlicerMarkupsLogic::AddFiducial method is deprecated, please use AddControlPoint instead");
368 return this->AddControlPoint(r, a, s);
369 };
372 {
373 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsVisibility method is deprecated, please use SetAllControlPointsVisibility instead");
374 this->SetAllControlPointsVisibility(node, flag);
375 };
378 {
379 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsVisibility method is deprecated, please use ToggleAllControlPointsVisibility instead");
380 this->ToggleAllControlPointsVisibility(node);
381 };
384 {
385 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsLocked method is deprecated, please use SetAllControlPointsLocked instead");
386 this->SetAllControlPointsLocked(node, flag);
387 };
390 {
391 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsLocked method is deprecated, please use ToggleAllControlPointsLocked instead");
392 this->ToggleAllControlPointsLocked(node);
393 };
396 {
397 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsSelected method is deprecated, please use SetAllControlPointsSelected instead");
398 this->SetAllControlPointsSelected(node, flag);
399 };
402 {
403 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsSelected method is deprecated, please use ToggleAllControlPointsSelected instead");
404 this->ToggleAllControlPointsSelected(node);
405 };
408 {
409 vtkWarningMacro("vtkSlicerMarkupsLogic::RenameAllMarkupsFromCurrentFormat method is deprecated, please use RenameAllControlPointsFromCurrentFormat instead");
410 this->RenameAllControlPointsFromCurrentFormat(markupsNode);
411 };
412
414
417 vtkVector3d GenerateUniqueColor();
418 void GenerateUniqueColor(double color[3]);
420
421protected:
422
425
427 void SetMRMLSceneInternal(vtkMRMLScene * newScene) override;
428 void ObserveMRMLScene() override;
430
433
435 void RegisterNodes() override;
436 void UpdateFromMRMLScene() override;
437 void OnMRMLSceneNodeAdded(vtkMRMLNode* node) override;
439 void OnMRMLSceneEndImport() override;
440
441private:
442
444 void operator=(const vtkSlicerMarkupsLogic&) = delete;
445
446 bool AutoCreateDisplayNodes;
447
448 class vtkInternal;
449 vtkInternal* Internal;
450};
451
452#endif
MRML node to represent a closed curve markup Closed Curve Markups nodes contain N control points....
Abstract Superclass for all specific types of MRML nodes.
A set of MRML Nodes that supports serialization and undo/redo.
MRML node for storing information about the active nodes in the scene.
MRML node for storing a slice through RAS space.
MRML node to represent a table object.
Process interaction events to update state of interaction widgets.
void ToggleAllMarkupsLocked(vtkMRMLMarkupsNode *node)
void OnMRMLSceneEndImport() override
std::string AddNewDisplayNodeForMarkupsNode(vtkMRMLNode *mrmlNode)
void FocusCameraOnNthPointInMarkup(const char *cameraNodeID, const char *markupNodeID, int n)
void UpdateFromMRMLScene() override
bool CopyNthMarkupToNewList(int n, vtkMRMLMarkupsNode *markupsNode, vtkMRMLMarkupsNode *newMarkupsNode)
static vtkSlicerMarkupsLogic * New()
static bool FitSurfaceDiskWarp(vtkPoints *curvePoints, vtkPolyData *surface, double radiusScalingFactor=1.0)
std::string GetActiveListID()
vtkVector3d GenerateUniqueColor()
void RenameAllControlPointsFromCurrentFormat(vtkMRMLMarkupsNode *markupsNode)
static bool FitSurfaceProjectWarp(vtkPoints *curvePoints, vtkPolyData *surface, double radiusScalingFactor=1.0, vtkIdType numberOfInternalGridPoints=225)
static double GetClosedCurveSurfaceArea(vtkMRMLMarkupsClosedCurveNode *curveNode, vtkPolyData *surface=nullptr, bool projectWarp=true)
void UpdatePlaceNodeClassNamesInSelectionNode()
Update list of place node class names in selection node based on currently registered markups.
void SetAllMarkupsSelected(vtkMRMLMarkupsNode *node, bool flag)
void OnMRMLSceneNodeAdded(vtkMRMLNode *node) override
void FocusCamerasOnNthPointInMarkup(const char *id, int n)
void SetAllControlPointsSelected(vtkMRMLMarkupsNode *node, bool flag)
std::string GetJsonStorageNodeClassNameForMarkupsType(std::string markupsType)
void SetAllControlPointsLocked(vtkMRMLMarkupsNode *node, bool flag)
void JumpSlicesToNthPointInMarkup(const char *id, int n, bool centered=false, int viewGroup=-1, vtkMRMLSliceNode *exclude=nullptr)
void SetActiveList(vtkMRMLMarkupsNode *markupsNode)
void ConvertAnnotationLinesROIsToMarkups(vtkStringArray *addedNodeIds=nullptr, vtkStringArray *removedNodeIds=nullptr)
vtkMRMLMarkupsDisplayNode * GetDefaultMarkupsDisplayNode()
static bool ExportControlPointsToTable(vtkMRMLMarkupsNode *markupsNode, vtkMRMLTableNode *tableNode, int coordinateSystem=vtkMRMLStorageNode::CoordinateSystemRAS)
static bool IsPolygonClockwise(vtkPoints *points, vtkIdList *pointIds=nullptr)
std::string AddNewFiducialNode(const char *name="F", vtkMRMLScene *scene=nullptr)
static bool ImportControlPointsFromCSV(vtkMRMLMarkupsNode *markupsNode, const std::string filename)
void ObserveMRMLScene() override
void ToggleAllMarkupsVisibility(vtkMRMLMarkupsNode *node)
std::string GetSelectionNodeID()
void SetAllControlPointsVisibility(vtkMRMLMarkupsNode *node, bool flag)
vtkSlicerMarkupsInteractionWidget * GetInteractionWidgetByMarkupsType(const char *markupsType) const
Returns the interaction widget for the specified markups type.
void JumpSlicesToLocation(double x, double y, double z, bool centered, int viewGroup=-1, vtkMRMLSliceNode *exclude=nullptr)
void ToggleAllControlPointsVisibility(vtkMRMLMarkupsNode *node)
int AddFiducial(double r=0.0, double a=0.0, double s=0.0)
char * LoadAnnotation(const char *filename, const char *name, int annotationFileType)
vtkMRMLMarkupsJsonStorageNode * AddNewJsonStorageNodeForMarkupsType(std::string markupsType)
bool IsMarkupsNodeRegistered(const char *nodeType) const
void SetAndObserveSelectionNode(vtkMRMLSelectionNode *selectionNode)
char * LoadMarkups(const char *fileName, const char *fidsName=nullptr, vtkMRMLMessageCollection *userMessages=nullptr)
vtkMRMLMarkupsNode * GetNodeByMarkupsType(const char *markupsType) const
void SetAllMarkupsVisibility(vtkMRMLMarkupsNode *node, bool flag)
void SetMRMLSceneInternal(vtkMRMLScene *newScene) override
Initialize listening to MRML events.
static bool ExportControlPointsToCSV(vtkMRMLMarkupsNode *markupsNode, const std::string filename, bool lps=true)
void RegisterMarkupsNode(vtkMRMLMarkupsNode *markupsNode, vtkSlicerMarkupsWidget *markupsWidget, bool createPushButton=true, vtkSlicerMarkupsInteractionWidget *interactionWidget=nullptr)
bool MoveNthControlPointToNewListAtIndex(int n, vtkMRMLMarkupsNode *markupsNode, vtkMRMLMarkupsNode *newMarkupsNode, int newIndex)
void SetAllMarkupsLocked(vtkMRMLMarkupsNode *node, bool flag)
vtkMRMLMarkupsNode * AddNewMarkupsNode(std::string className, std::string nodeName=std::string(), vtkMRMLScene *scene=nullptr)
vtkSlicerMarkupsWidget * GetWidgetByMarkupsType(const char *markupsType) const
bool StartPlaceMode(bool persistent, vtkMRMLInteractionNode *interactionNode=nullptr)
void GenerateUniqueColor(double color[3])
void UnregisterMarkupsNode(vtkMRMLMarkupsNode *markupsNode)
void RegisterJsonStorageNodeForMarkupsType(std::string markupsType, std::string storageNodeClassName)
static bool GetBestFitPlane(vtkMRMLMarkupsNode *curveNode, vtkPlane *plane)
Get best fit plane for a markup.
void OnMRMLSceneNodeRemoved(vtkMRMLNode *node) override
void SetDisplayDefaultsFromNode(vtkMRMLMarkupsDisplayNode *displayNode)
utility method to set defaults from display node
void CopyBasicDisplayProperties(vtkMRMLMarkupsDisplayNode *sourceDisplayNode, vtkMRMLMarkupsDisplayNode *targetDisplayNode)
int AddControlPoint(double r=0.0, double a=0.0, double s=0.0)
char * LoadMarkupsFiducials(const char *fileName, const char *fidsName=nullptr, vtkMRMLMessageCollection *userMessages=nullptr)
This method is deprecated. It is kept for backward compatibility only, it does the same as LoadMarkup...
void RenameAllMarkupsFromCurrentFormat(vtkMRMLMarkupsNode *markupsNode)
void ToggleAllMarkupsSelected(vtkMRMLMarkupsNode *node)
char * LoadMarkupsFromFcsv(const char *fileName, const char *nodeName=nullptr, vtkMRMLMessageCollection *userMessages=nullptr)
void PrintSelf(ostream &os, vtkIndent indent) override
void ConvertAnnotationHierarchyToSubjectHierarchy(vtkMRMLScene *scene)
bool GetCreateMarkupsPushButton(const char *markupName) const
This returns the flags that indicates whether the GUI push button should be created.
void SetActiveListID(vtkMRMLMarkupsNode *markupsNode)
void ToggleAllControlPointsLocked(vtkMRMLMarkupsNode *node)
bool MoveNthMarkupToNewList(int n, vtkMRMLMarkupsNode *markupsNode, vtkMRMLMarkupsNode *newMarkupsNode, int newIndex)
const std::list< std::string > & GetRegisteredMarkupsTypes() const
This returns the list of the markups registered in the logic.
void ToggleAllControlPointsSelected(vtkMRMLMarkupsNode *node)
void SetDisplayNodeToDefaults(vtkMRMLMarkupsDisplayNode *displayNode)
char * LoadMarkupsFromJson(const char *fileName, const char *nodeName=nullptr, vtkMRMLMessageCollection *userMessages=nullptr)
void ProcessMRMLNodesEvents(vtkObject *caller, unsigned long event, void *callData) override
static bool ImportControlPointsFromTable(vtkMRMLMarkupsNode *markupsNode, vtkMRMLTableNode *tableNode, int startRow=0, int numberOfRows=-1)
~vtkSlicerMarkupsLogic() override
void ConvertAnnotationFiducialsToMarkups(vtkStringArray *addedNodeIds=nullptr, vtkStringArray *removedNodeIds=nullptr)
bool CopyNthControlPointToNewList(int n, vtkMRMLMarkupsNode *markupsNode, vtkMRMLMarkupsNode *newMarkupsNode)
void RegisterNodes() override
Register MRML Node classes to Scene. Gets called automatically when the MRMLScene is attached to this...
Process interaction events to update state of markup widget nodes.