Slicer 5.6
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
56class VTK_SLICER_MARKUPS_MODULE_LOGIC_EXPORT vtkSlicerMarkupsLogic :
58{
59public:
60
61 enum Events
62 {
63 MarkupRegistered = vtkCommand::UserEvent + 1,
64 MarkupUnregistered
65 };
66
69 void PrintSelf(ostream& os, vtkIndent indent) override;
70
71 void ProcessMRMLNodesEvents(vtkObject *caller,
72 unsigned long event,
73 void *callData ) override;
74
79 std::string GetSelectionNodeID();
80
84 std::string GetActiveListID();
85
89
96
102
108 std::string AddNewFiducialNode(const char *name = "F", vtkMRMLScene *scene = nullptr);
109
112 vtkMRMLMarkupsNode* AddNewMarkupsNode(std::string className, std::string nodeName=std::string(), vtkMRMLScene* scene = nullptr);
113
118 int AddControlPoint(double r=0.0, double a=0.0, double s=0.0);
119
123 void JumpSlicesToLocation(double x, double y, double z, bool centered, int viewGroup = -1, vtkMRMLSliceNode* exclude = nullptr);
126 void JumpSlicesToNthPointInMarkup(const char *id, int n, bool centered = false, int viewGroup = -1, vtkMRMLSliceNode* exclude = nullptr);
129 void FocusCamerasOnNthPointInMarkup(const char *id, int n);
133 void FocusCameraOnNthPointInMarkup(const char *cameraNodeID, const char *markupNodeID, int n);
134
138 char* LoadMarkups(const char* fileName, const char* fidsName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
139
141 char* LoadMarkupsFiducials(const char* fileName, const char* fidsName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
142
143 char* LoadMarkupsFromFcsv(const char* fileName, const char* nodeName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
144 char* LoadMarkupsFromJson(const char* fileName, const char* nodeName=nullptr, vtkMRMLMessageCollection* userMessages=nullptr);
145
149 char* LoadAnnotation(const char *filename, const char *name, int annotationFileType);
150
152 enum
153 {
154 AnnotationNone = 0,
158 };
159
169
175
178
184 vtkMRMLMarkupsNode *newMarkupsNode);
185
194 vtkMRMLMarkupsNode *newMarkupsNode, int newIndex);
195
203 void ConvertAnnotationFiducialsToMarkups(vtkStringArray* addedNodeIds=nullptr, vtkStringArray* removedNodeIds=nullptr);
204
209 void ConvertAnnotationLinesROIsToMarkups(vtkStringArray* addedNodeIds=nullptr, vtkStringArray* removedNodeIds=nullptr);
210
212
218
224 bool StartPlaceMode(bool persistent, vtkMRMLInteractionNode* interactionNode = nullptr);
225
226 vtkSetMacro(AutoCreateDisplayNodes, bool);
227 vtkGetMacro(AutoCreateDisplayNodes, bool);
228 vtkBooleanMacro(AutoCreateDisplayNodes, bool);
229
231
235
243 static double GetClosedCurveSurfaceArea(vtkMRMLMarkupsClosedCurveNode* curveNode, vtkPolyData* surface = nullptr, bool projectWarp = true);
244
257 static bool FitSurfaceProjectWarp(vtkPoints* curvePoints, vtkPolyData* surface, double radiusScalingFactor = 1.0, vtkIdType numberOfInternalGridPoints=225);
258
268 static bool FitSurfaceDiskWarp(vtkPoints* curvePoints, vtkPolyData* surface, double radiusScalingFactor = 1.0);
269
272 static bool IsPolygonClockwise(vtkPoints* points, vtkIdList* pointIds=nullptr);
273
275 static bool GetBestFitPlane(vtkMRMLMarkupsNode* curveNode, vtkPlane* plane);
276
277 std::string GetJsonStorageNodeClassNameForMarkupsType(std::string markupsType);
278 void RegisterJsonStorageNodeForMarkupsType(std::string markupsType, std::string storageNodeClassName);
280
288 vtkSlicerMarkupsWidget* markupsWidget,
289 bool createPushButton=true);
290
295
298 bool IsMarkupsNodeRegistered(const char* nodeType) const;
299
305 vtkSlicerMarkupsWidget* GetWidgetByMarkupsType(const char* markupsType) const;
306
312 vtkMRMLMarkupsNode* GetNodeByMarkupsType(const char* markupsType) const;
313
315 const std::list<std::string>& GetRegisteredMarkupsTypes() const;
316
318 bool GetCreateMarkupsPushButton(const char* markupName) const;
319
323 int startRow = 0, int numberOfRows = -1);
324
326 int coordinateSystem = vtkMRMLStorageNode::CoordinateSystemRAS);
327
332 static bool ExportControlPointsToCSV(vtkMRMLMarkupsNode* markupsNode, const std::string filename, bool lps = true);
333
337 static bool ImportControlPointsFromCSV(vtkMRMLMarkupsNode* markupsNode, const std::string filename);
338
339 //-----------------------------------------------------------
340 // All public methods below are deprecated
341 //
342 // These methods are deprecated because they use old terms (markup instead of control point),
343
346 vtkMRMLMarkupsNode *newMarkupsNode)
347 {
348 vtkWarningMacro("vtkSlicerMarkupsLogic::CopyNthMarkupToNewList method is deprecated, please use CopyNthControlPointToNewList instead");
349 return this->CopyNthControlPointToNewList(n, markupsNode, newMarkupsNode);
350 }
353 vtkMRMLMarkupsNode *newMarkupsNode, int newIndex)
354 {
355 vtkWarningMacro("vtkSlicerMarkupsLogic::MoveNthMarkupToNewList method is deprecated, please use MoveNthControlPointToNewListAtIndex instead");
356 return this->MoveNthControlPointToNewListAtIndex(n, markupsNode, newMarkupsNode, newIndex);
357 }
359 int AddFiducial(double r=0.0, double a=0.0, double s=0.0)
360 {
361 vtkWarningMacro("vtkSlicerMarkupsLogic::AddFiducial method is deprecated, please use AddControlPoint instead");
362 return this->AddControlPoint(r, a, s);
363 };
366 {
367 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsVisibility method is deprecated, please use SetAllControlPointsVisibility instead");
368 this->SetAllControlPointsVisibility(node, flag);
369 };
372 {
373 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsVisibility method is deprecated, please use ToggleAllControlPointsVisibility instead");
374 this->ToggleAllControlPointsVisibility(node);
375 };
378 {
379 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsLocked method is deprecated, please use SetAllControlPointsLocked instead");
380 this->SetAllControlPointsLocked(node, flag);
381 };
384 {
385 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsLocked method is deprecated, please use ToggleAllControlPointsLocked instead");
386 this->ToggleAllControlPointsLocked(node);
387 };
390 {
391 vtkWarningMacro("vtkSlicerMarkupsLogic::SetAllMarkupsSelected method is deprecated, please use SetAllControlPointsSelected instead");
392 this->SetAllControlPointsSelected(node, flag);
393 };
396 {
397 vtkWarningMacro("vtkSlicerMarkupsLogic::ToggleAllMarkupsSelected method is deprecated, please use ToggleAllControlPointsSelected instead");
398 this->ToggleAllControlPointsSelected(node);
399 };
402 {
403 vtkWarningMacro("vtkSlicerMarkupsLogic::RenameAllMarkupsFromCurrentFormat method is deprecated, please use RenameAllControlPointsFromCurrentFormat instead");
404 this->RenameAllControlPointsFromCurrentFormat(markupsNode);
405 };
406
408
411 vtkVector3d GenerateUniqueColor();
412 void GenerateUniqueColor(double color[3]);
414
415protected:
416
419
421 void SetMRMLSceneInternal(vtkMRMLScene * newScene) override;
422 void ObserveMRMLScene() override;
424
427
429 void RegisterNodes() override;
430 void UpdateFromMRMLScene() override;
431 void OnMRMLSceneNodeAdded(vtkMRMLNode* node) override;
433 void OnMRMLSceneEndImport() override;
434
435private:
436
438 void operator=(const vtkSlicerMarkupsLogic&) = delete;
439
440 bool AutoCreateDisplayNodes;
441
442 class vtkInternal;
443 vtkInternal* Internal;
444};
445
446#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.