Slicer 5.4
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// MRML includes
31#include "vtkMRMLStorageNode.h"
32
33// VTK includes
34#include "vtkVector.h"
35
36// STD includes
37#include <cstdlib>
38#include <string>
39
40#include "vtkSlicerMarkupsModuleLogicExport.h"
41
42class vtkIdList;
43class vtkMatrix4x4;
51class vtkPlane;
52class vtkPoints;
53class vtkPolyData;
55
57class VTK_SLICER_MARKUPS_MODULE_LOGIC_EXPORT vtkSlicerMarkupsLogic :
59{
60public:
61
62 enum Events
63 {
64 MarkupRegistered = vtkCommand::UserEvent + 1,
65 MarkupUnregistered
66 };
67
70 void PrintSelf(ostream& os, vtkIndent indent) override;
71
72 void ProcessMRMLNodesEvents(vtkObject *caller,
73 unsigned long event,
74 void *callData ) override;
75
80 std::string GetSelectionNodeID();
81
85 std::string GetActiveListID();
86
90
97
103
109 std::string AddNewFiducialNode(const char *name = "F", vtkMRMLScene *scene = nullptr);
110
113 vtkMRMLMarkupsNode* AddNewMarkupsNode(std::string className, std::string nodeName=std::string(), vtkMRMLScene* scene = nullptr);
114
119 int AddControlPoint(double r=0.0, double a=0.0, double s=0.0);
120
124 void JumpSlicesToLocation(double x, double y, double z, bool centered, int viewGroup = -1, vtkMRMLSliceNode* exclude = nullptr);
127 void JumpSlicesToNthPointInMarkup(const char *id, int n, bool centered = false, int viewGroup = -1, vtkMRMLSliceNode* exclude = nullptr);
130 void FocusCamerasOnNthPointInMarkup(const char *id, int n);
134 void FocusCameraOnNthPointInMarkup(const char *cameraNodeID, const char *markupNodeID, int n);
135
139 char* LoadMarkups(const char* fileName, const char* fidsName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
140
142 char* LoadMarkupsFiducials(const char* fileName, const char* fidsName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
143
144 char* LoadMarkupsFromFcsv(const char* fileName, const char* nodeName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
145 char* LoadMarkupsFromJson(const char* fileName, const char* nodeName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
146
150 char* LoadAnnotation(const char *filename, const char *name, int annotationFileType);
151
153 enum
154 {
155 AnnotationNone = 0,
159 };
160
170
176
179
185 vtkMRMLMarkupsNode *newMarkupsNode);
186
195 vtkMRMLMarkupsNode *newMarkupsNode, int newIndex);
196
204 void ConvertAnnotationFiducialsToMarkups(vtkStringArray* addedNodeIds=nullptr, vtkStringArray* removedNodeIds=nullptr);
205
210 void ConvertAnnotationLinesROIsToMarkups(vtkStringArray* addedNodeIds=nullptr, vtkStringArray* removedNodeIds=nullptr);
211
213
219
225 bool StartPlaceMode(bool persistent, vtkMRMLInteractionNode* interactionNode = nullptr);
226
227 vtkSetMacro(AutoCreateDisplayNodes, bool);
228 vtkGetMacro(AutoCreateDisplayNodes, bool);
229 vtkBooleanMacro(AutoCreateDisplayNodes, bool);
230
232
236
244 static double GetClosedCurveSurfaceArea(vtkMRMLMarkupsClosedCurveNode* curveNode, vtkPolyData* surface = nullptr, bool projectWarp = true);
245
258 static bool FitSurfaceProjectWarp(vtkPoints* curvePoints, vtkPolyData* surface, double radiusScalingFactor = 1.0, vtkIdType numberOfInternalGridPoints=225);
259
269 static bool FitSurfaceDiskWarp(vtkPoints* curvePoints, vtkPolyData* surface, double radiusScalingFactor = 1.0);
270
273 static bool IsPolygonClockwise(vtkPoints* points, vtkIdList* pointIds=nullptr);
274
276 static bool GetBestFitPlane(vtkMRMLMarkupsNode* curveNode, vtkPlane* plane);
277
278 std::string GetJsonStorageNodeClassNameForMarkupsType(std::string markupsType);
279 void RegisterJsonStorageNodeForMarkupsType(std::string markupsType, std::string storageNodeClassName);
281
289 vtkSlicerMarkupsWidget* markupsWidget,
290 bool createPushButton=true);
291
296
299 bool IsMarkupsNodeRegistered(const char* nodeType) const;
300
306 vtkSlicerMarkupsWidget* GetWidgetByMarkupsType(const char* markupsType) const;
307
313 vtkMRMLMarkupsNode* GetNodeByMarkupsType(const char* markupsType) const;
314
316 const std::list<std::string>& GetRegisteredMarkupsTypes() const;
317
319 bool GetCreateMarkupsPushButton(const char* markupName) const;
320
324 int startRow = 0, int numberOfRows = -1);
325
327 int coordinateSystem = vtkMRMLStorageNode::CoordinateSystemRAS);
328
333 static bool ExportControlPointsToCSV(vtkMRMLMarkupsNode* markupsNode, const std::string filename, bool lps = true);
334
338 static bool ImportControlPointsFromCSV(vtkMRMLMarkupsNode* markupsNode, const std::string filename);
339
340 //-----------------------------------------------------------
341 // All public methods below are deprecated
342 //
343 // These methods are deprecated because they use old terms (markup instead of control point),
344
347 vtkMRMLMarkupsNode *newMarkupsNode)
348 {
349 vtkWarningMacro("vtkSlicerMarkupsLogic::CopyNthMarkupToNewList method is deprecated, please use CopyNthControlPointToNewList instead");
350 return this->CopyNthControlPointToNewList(n, markupsNode, newMarkupsNode);
351 }
354 vtkMRMLMarkupsNode *newMarkupsNode, int newIndex)
355 {
356 vtkWarningMacro("vtkSlicerMarkupsLogic::MoveNthMarkupToNewList method is deprecated, please use MoveNthControlPointToNewListAtIndex instead");
357 return this->MoveNthControlPointToNewListAtIndex(n, markupsNode, newMarkupsNode, newIndex);
358 }
360 int AddFiducial(double r=0.0, double a=0.0, double s=0.0)
361 {
362 vtkWarningMacro("vtkSlicerMarkupsLogic::AddFiducial method is deprecated, please use AddControlPoint instead");
363 return this->AddControlPoint(r, a, s);
364 };
367 {
368 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsVisibility method is deprecated, please use SetAllControlPointsVisibility instead");
369 this->SetAllControlPointsVisibility(node, flag);
370 };
373 {
374 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsVisibility method is deprecated, please use ToggleAllControlPointsVisibility instead");
375 this->ToggleAllControlPointsVisibility(node);
376 };
379 {
380 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsLocked method is deprecated, please use SetAllControlPointsLocked instead");
381 this->SetAllControlPointsLocked(node, flag);
382 };
385 {
386 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsLocked method is deprecated, please use ToggleAllControlPointsLocked instead");
387 this->ToggleAllControlPointsLocked(node);
388 };
391 {
392 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsSelected method is deprecated, please use SetAllControlPointsSelected instead");
393 this->SetAllControlPointsSelected(node, flag);
394 };
397 {
398 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsSelected method is deprecated, please use ToggleAllControlPointsSelected instead");
399 this->ToggleAllControlPointsSelected(node);
400 };
403 {
404 vtkWarningMacro("vtkSlicerMarkupsLogic::RenameAllMarkupsFromCurrentFormat method is deprecated, please use RenameAllControlPointsFromCurrentFormat instead");
405 this->RenameAllControlPointsFromCurrentFormat(markupsNode);
406 };
407
409
412 vtkVector3d GenerateUniqueColor();
413 void GenerateUniqueColor(double color[3]);
415
416protected:
417
420
422 void SetMRMLSceneInternal(vtkMRMLScene * newScene) override;
423 void ObserveMRMLScene() override;
425
428
430 void RegisterNodes() override;
431 void UpdateFromMRMLScene() override;
432 void OnMRMLSceneNodeAdded(vtkMRMLNode* node) override;
434 void OnMRMLSceneEndImport() override;
435
436private:
437
439 void operator=(const vtkSlicerMarkupsLogic&) = delete;
440
441 bool AutoCreateDisplayNodes;
442
443 class vtkInternal;
444 vtkInternal* Internal;
445};
446
447#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.
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)
void RegisterMarkupsNode(vtkMRMLMarkupsNode *markupsNode, vtkSlicerMarkupsWidget *markupsWidget, bool createPushButton=true)
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)
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)
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.