Slicer 5.6
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkMRMLMarkupsNode.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#ifndef __vtkMRMLMarkupsNode_h
19#define __vtkMRMLMarkupsNode_h
20
21// MRML includes
23#include "vtkCurveGenerator.h"
24#include "vtkMRMLMeasurement.h"
26
27// Markups includes
28#include "vtkSlicerMarkupsModuleMRMLExport.h"
29
30// VTK includes
31#include <vtkParallelTransportFrame.h>
32#include <vtkPointLocator.h>
33#include <vtkSmartPointer.h>
34#include <vtkVector.h>
35
36class vtkMatrix3x3;
37class vtkMRMLUnitNode;
38
65
66class vtkAlgorithmOutput;
67class vtkCollection;
68class vtkDataArray;
69class vtkGeneralTransform;
70class vtkMatrix4x4;
72class vtkPolyData;
73class vtkStringArray;
74class vtkTransformPolyDataFilter;
75
76class VTK_SLICER_MARKUPS_MODULE_MRML_EXPORT vtkMRMLMarkupsNode : public vtkMRMLDisplayableNode
77{
82
83public:
84
86 {
88 {
89 // position is 0
90 this->Position[0] = 0.0;
91 this->Position[1] = 0.0;
92 this->Position[2] = 0.0;
93
94 this->OrientationMatrix[0] = 1.0;
95 this->OrientationMatrix[1] = 0.0;
96 this->OrientationMatrix[2] = 0.0;
97
98 this->OrientationMatrix[3] = 0.0;
99 this->OrientationMatrix[4] = 1.0;
100 this->OrientationMatrix[5] = 0.0;
101
102 this->OrientationMatrix[6] = 0.0;
103 this->OrientationMatrix[7] = 0.0;
104 this->OrientationMatrix[8] = 1.0;
105
106 Selected = true;
107 Locked = false;
108 Visibility = true;
109 PositionStatus = PositionUndefined;
110 AutoCreated = false;
111 }
112
113 // Positions and orientation in local coordinates.
114 // If transform is applied to the markup node then world
115 // coordinates may be obtained by applying "to world" transform.
116 double Position[3];
117 // Orientation of control point in 3x3 matrix.
118 // x axis (0, 3, 6), y axis (1, 4, 7), and z axis (2, 5, 8).
119 double OrientationMatrix[9];
120
121 std::string ID;
122 std::string Label;
123 std::string Description;
124 std::string AssociatedNodeID;
125
127 bool Locked;
131 };
132
133 typedef std::vector<ControlPoint*> ControlPointsListType;
134
136
137 void PrintSelf(ostream& os, vtkIndent indent) override;
138
139 virtual const char* GetIcon() {return ":/Icons/MarkupsGeneric.png";}
140 virtual const char* GetAddIcon() {return ":/Icons/MarkupsGenericMouseModePlace.png";}
141 virtual const char* GetPlaceAddIcon() {return ":/Icons/MarkupsGenericMouseModePlaceAdd.png";}
142
143 //--------------------------------------------------------------------------
144 // MRMLNode methods
145 //--------------------------------------------------------------------------
146
149 virtual const char* GetMarkupType() {return "Markup";};
150
152 virtual const char* GetDefaultNodeNamePrefix() {return "M";};
153
155 void ReadXMLAttributes(const char** atts) override;
156
158 void WriteXML(ostream& of, int indent) override;
159
164 void WriteCLI(std::vector<std::string>& commandLine,
165 std::string prefix, int coordinateSystem = vtkMRMLStorageNode::CoordinateSystemRAS,
166 int multipleFlag = 1) override;
167
171
173 void ProcessMRMLEvents ( vtkObject * /*caller*/,
174 unsigned long /*event*/,
175 void * /*callData*/ ) override;
176
180 int EndModify(int previousDisableModifiedEventState) override;
181
184
187
189
201
205
207
216 void SetNthMeasurement(int id, vtkMRMLMeasurement* measurement);
217 void SetNthMeasurement(int id, const std::string& name, double value, const std::string &units,
218 std::string printFormat = "", const std::string description = "",
219 vtkCodedEntry* quantityCode = nullptr, vtkCodedEntry* derivationCode = nullptr,
220 vtkCodedEntry* unitsCode = nullptr, vtkCodedEntry* methodCode = nullptr);
223
231 enum
232 {
233 LockModifiedEvent = 19000,
237 PointPositionDefinedEvent,
248 };
249
251 enum
252 {
257 PositionStatus_Last
258 };
259
260 static const char* GetPositionStatusAsString(int id);
261 static int GetPositionStatusFromString(const char* name);
262
265 virtual void UnsetAllControlPoints();
266
275 vtkGetMacro(Locked, int);
276 void SetLocked(int locked);
277 vtkBooleanMacro(Locked, int);
279
282
285
291 int GetNumberOfDefinedControlPoints(bool includePreview=false);
293 int GetNumberOfUndefinedControlPoints(bool includePreview = false);
294
298 std::vector<ControlPoint*>* GetControlPoints();
299
307 int AddNControlPoints(int n, std::string label = std::string(), vtkVector3d* point = nullptr);
308 int AddNControlPoints(int n, std::string label, double point[3]);
310
316 void SetControlPointPositionsWorld(vtkPoints* points, bool setUndefinedPoints=true);
317
319 void GetControlPointPositionsWorld(vtkPoints* points);
320
323 int AddControlPoint(vtkVector3d point, std::string label = std::string());
324 int AddControlPoint(double point[3], std::string label = std::string());
325 int AddControlPoint(double x, double y, double z, std::string label = std::string());
327
333 int AddControlPoint(ControlPoint *controlPoint, bool autoLabel=true);
334
338 int AddControlPointWorld(vtkVector3d point, std::string label = std::string());
339 int AddControlPointWorld(double point[3], std::string label = std::string());
340 int AddControlPointWorld(double x, double y, double z, std::string label = std::string());
342
350 bool InsertControlPoint(ControlPoint* controlPoint, int targetIndex);
351 bool InsertControlPoint(int n, vtkVector3d point, std::string label = std::string());
352 bool InsertControlPoint(int n, double point[3], std::string label = std::string());
354
356 //Add and insert control point at index, defined in the world coordinate system.
357 //\sa InsertControlPoint
358 bool InsertControlPointWorld(int n, vtkVector3d pointWorld, std::string label = std::string());
359 bool InsertControlPointWorld(int n, double pointWorld[3], std::string label = std::string());
361
363 void RemoveNthControlPoint(int pointIndex);
364
366 void SwapControlPoints(int m1, int m2);
367
371 void SetNthControlPointAutoCreated(int n, bool flag);
373
377 void GetNthControlPointPosition(int pointIndex, double point[3]);
378 double* GetNthControlPointPosition(int pointIndex) VTK_SIZEHINT(3);
380
383 // Note: this method is not redundant because GetNthControlPointPosition returns a double*
384 // (as it is safe to do so) and so the method that returns a vtkVector3d cannot have the same name.
385 vtkVector3d GetNthControlPointPositionVector(int pointIndex);
386
390 int GetNthControlPointPositionWorld(int pointIndex, double worldxyz[3]);
391 vtkVector3d GetNthControlPointPositionWorld(int pointIndex);
393
394
397 void SetNthControlPointPosition(const int pointIndex, const double x, const double y, const double z, int positionStatus = PositionDefined);
398 void SetNthControlPointPosition(const int pointIndex, const double position[3], int positionStatus = PositionDefined);
400
405 void SetNthControlPointPositionWorld(const int pointIndex, const double x, const double y, const double z, int positionStatus = PositionDefined);
406 void SetNthControlPointPositionWorld(const int pointIndex, const double position[3], int positionStatus = PositionDefined);
408
413 const double pos[3], const double orientationMatrix[9], const char* associatedNodeID, int positionStatus = PositionDefined);
414
418 void SetNthControlPointOrientation(int n, double w, double x, double y, double z);
419 void SetNthControlPointOrientation(int n, const double wxyz[4]);
421
424 void GetNthControlPointOrientation(int n, double orientationWXYZ[4]);
425
429 double* GetNthControlPointOrientationMatrix(int n) VTK_SIZEHINT(9);
430 void SetNthControlPointOrientationMatrix(int n, double orientationMatrix[9]);
432
435 void GetNthControlPointOrientationMatrix(int n, vtkMatrix3x3* matrix);
436 void SetNthControlPointOrientationMatrix(int n, vtkMatrix3x3* matrix);
438
442 void GetNthControlPointOrientationMatrixWorld(int n, double orientationMatrix[9]);
443 vtkVector<double, 9> GetNthControlPointOrientationMatrixWorld(int n);
444 void SetNthControlPointOrientationMatrixWorld(int n, const double orientationMatrix[9]);
446
449 void GetNthControlPointOrientationMatrixWorld(int n, vtkMatrix3x3* matrix);
450 void SetNthControlPointOrientationMatrixWorld(int n, vtkMatrix3x3* matrix);
452
455
460 int GetNthControlPointIndexByPositionStatus(int pointIndex, int positionStatus);
461
463 void UnsetNthControlPointPosition(int pointIndex);
464
467
470
473
477 vtkVector3d GetCenterOfRotation();
478
482 bool GetCenterOfRotation(double point[3]);
483
487 // \sa GetCenterOfRotation
488 bool GetCenterOfRotationWorld(double worldxyz[3]);
489
493 void SetCenterOfRotation(const double x, const double y, const double z);
494 void SetCenterOfRotation(const double position[3]);
496
500 void SetCenterOfRotationWorld(const double x, const double y, const double z);
501 void SetCenterOfRotationWorld(const double positionWorld[3]);
503
506 void GetNthControlPointNormal(int n, double normal[3]);
507 vtkVector3d GetNthControlPointNormal(int n);
509
512 void GetNthControlPointNormalWorld(int n, double normalWorld[3]);
515
519 void SetNthControlPointAssociatedNodeID(int n, std::string id);
521
523 std::string GetNthControlPointID(int n);
524
527 int GetNthControlPointIndexByID(const char* controlPointID);
529 ControlPoint* GetNthControlPointByID(const char* controlPointID);
530
534 int GetControlPointIndexByID(const char* id);
535 int GetControlPointIndexByLabel(const char* label);
536 int GetControlPointIndexByDescription(const char* description);
538
544 void SetNthControlPointSelected(int n, bool flag);
545
555 void SetNthControlPointLocked(int n, bool flag);
556
560
565
573 void SetNthControlPointVisibility(int n, bool flag);
574
577 std::string GetNthControlPointLabel(int n = 0);
578 void SetNthControlPointLabel(int n, std::string label);
580
582 void GetControlPointLabels(vtkStringArray* labels);
583
587 std::string GetNthControlPointDescription(int n = 0);
588 void SetNthControlPointDescription(int n, std::string description);
590
593 bool CanApplyNonLinearTransforms()const override;
594
597 void ApplyTransform(vtkAbstractTransform* transform) override;
598
608 void SetControlPointLabelFormat(std::string format);
610
616
624 bool GetModifiedSinceRead() override;
625
630
638
642 vtkGetMacro(RequiredNumberOfControlPoints, int);
643
652 vtkGetMacro(MaximumNumberOfControlPoints, int);
653
657 static void ConvertOrientationMatrixToWXYZ(const double orientationMatrix[9], double orientationWXYZ[4]);
658 static void ConvertOrientationWXYZToMatrix(const double orientationWXYZ[4], double orientationMatrix[9]);
660
663 virtual vtkPoints* GetCurvePoints();
664 virtual vtkPoints* GetCurvePointsWorld();
665 virtual vtkPolyData* GetCurve();
666 virtual vtkPolyData* GetCurveWorld();
667 virtual vtkAlgorithmOutput* GetCurveWorldConnection();
669
671 int GetControlPointIndexFromInterpolatedPointIndex(vtkIdType interpolatedPointIndex);
672
674 vtkGetMacro(CurveClosed, bool);
675
679 vtkCurveGenerator* GetCurveGenerator() { return this->CurveGenerator.GetPointer(); };
680
683 vtkParallelTransportFrame* GetCurveCoordinateSystemGeneratorWorld() { return this->CurveCoordinateSystemGeneratorWorld.GetPointer(); };
684
685 void GetRASBounds(double bounds[6]) override;
686 void GetBounds(double bounds[6]) override;
687
690 int GetClosestControlPointIndexToPositionWorld(double pos[3], bool visibleOnly=false);
691
693 virtual vtkMatrix4x4* GetInteractionHandleToWorldMatrix();
694
697 virtual std::string GetPropertiesLabelText();
698
700 vtkMRMLUnitNode* GetUnitNode(const char* quantity);
701
704 virtual void UpdateAssignedAttribute() {};
705
708
719
724 vtkGetMacro(LastUsedControlPointNumber, int);
725 vtkSetMacro(LastUsedControlPointNumber, int);
727
728 //-----------------------------------------------------------
729 // All public methods below are deprecated
730 //
731 // These methods are either deprecated because they use old terms (markup instead of control point),
732 // or include "array", "vector", "pointer" in the name (it is redundant, as input arguments can be
733 // deduced from the type; and return type for vectors is always vtkVectorNd).
734 //
735
738 {
739 vtkWarningMacro("vtkMRMLMarkupsNode::RemoveAllMarkups method is deprecated, please use RemoveAllControlPoints instead");
740 this->RemoveAllControlPoints();
741 };
742
744 bool MarkupExists(int n)
745 {
746 vtkWarningMacro("vtkMRMLMarkupsNode::MarkupExists method is deprecated, please use ControlPointExists instead");
747 return this->ControlPointExists(n);
748 };
749
752 {
753 vtkWarningMacro("vtkMRMLMarkupsNode::GetNumberOfMarkups method is deprecated, please use GetNumberOfControlPoints instead");
754 return this->GetNumberOfControlPoints();
755 };
758 {
759 vtkWarningMacro("vtkMRMLMarkupsNode::GetNumberOfPointsInNthMarkup method is deprecated, please use GetNumberOfControlPoints instead");
760 return this->GetNumberOfControlPoints();
761 };
762
764 vtkVector3d GetMarkupPointVector(int markupIndex, int)
765 {
766 vtkWarningMacro("vtkMRMLMarkupsNode::GetMarkupPointVector method is deprecated, please use GetNthControlPointPositionVector instead");
767 return this->GetNthControlPointPositionVector(markupIndex);
768 };
769
771 void GetMarkupPoint(int markupIndex, int pointIndex, double point[3]);
772
774 void RemoveMarkup(int pointIndex)
775 {
776 vtkWarningMacro("vtkMRMLMarkupsNode::RemoveMarkup method is deprecated, please use RemoveNthControlPoint instead");
777 this->RemoveNthControlPoint(pointIndex);
778 };
779
783 void SetNthControlPointPositionFromPointer(const int pointIndex, const double* pos);
784
787 void SetNthControlPointPositionFromArray(const int pointIndex, const double pos[3], int positionStatus = PositionDefined)
788 {
789 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthControlPointPositionFromArray method is deprecated, please use SetNthControlPointPosition instead");
790 this->SetNthControlPointPosition(pointIndex, pos[0], pos[1], pos[2], positionStatus);
791 }
792
796 void SetNthControlPointPositionWorldFromArray(const int pointIndex, const double pos[3], int positionStatus = PositionDefined);
797
803 const double positionWorld[3], const double orientationMatrix_World[9],
804 const char* associatedNodeID, int positionStatus = PositionDefined)
805 {
806 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthControlPointPositionOrientationWorldFromArray method is deprecated,"
807 << " please use SetNthControlPointPositionOrientationWorld instead");
808 this->SetNthControlPointPositionOrientationWorld(
809 pointIndex, positionWorld, orientationMatrix_World, associatedNodeID, positionStatus);
810 }
811
817 vtkVector4d GetNthControlPointOrientationVector(int pointIndex);
818
823 {
824 vtkWarningMacro("vtkMRMLMarkupsNode::GetCenterOfRotationVector method is deprecated, please use GetCenterOfRotation instead");
825 return this->GetCenterOfRotation();
826 }
827
831 void SetCenterOfRotationFromPointer(const double* pos);
835 void SetCenterOfRotationFromArray(const double pos[3])
836 {
837 vtkWarningMacro("vtkMRMLMarkupsNode::SetCenterOfRotationFromArray method is deprecated, please use SetCenterOfRotation instead");
838 this->SetCenterOfRotation(pos[0], pos[1], pos[2]);
839 }
840
845 void SetNthControlPointOrientationFromPointer(int n, const double* orientationWXYZ);
846 void SetNthControlPointOrientationFromArray(int n, const double orientationWXYZ[4])
847 {
848 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthControlPointOrientationFromArray method is deprecated, please use SetNthControlPointOrientation instead");
849 this->SetNthControlPointOrientation(n, orientationWXYZ[0], orientationWXYZ[1], orientationWXYZ[2], orientationWXYZ[3]);
850 }
852
854 std::string GetNthMarkupAssociatedNodeID(int n = 0)
855 {
856 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupAssociatedNodeID method is deprecated, please use GetNthControlPointAssociatedNodeID instead");
857 return this->GetNthControlPointAssociatedNodeID(n);
858 };
860 void SetNthMarkupAssociatedNodeID(int n, std::string id)
861 {
862 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthMarkupAssociatedNodeID method is deprecated, please use SetNthControlPointAssociatedNodeID instead");
863 this->SetNthControlPointAssociatedNodeID(n, id);
864 };
865
867 std::string GetNthMarkupID(int n = 0)
868 {
869 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupID method is deprecated, please use GetNthControlPointID instead");
870 return this->GetNthControlPointID(n);
871 };
872
874 bool GetNthMarkupLocked(int n = 0)
875 {
876 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupLocked method is deprecated, please use GetNthControlPointLocked instead");
877 return this->GetNthControlPointLocked(n);
878 };
880 void SetNthMarkupLocked(int n, bool flag)
881 {
882 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthMarkupLocked method is deprecated, please use SetNthControlPointLocked instead");
883 this->SetNthControlPointLocked(n, flag);
884 };
885
887 std::string GetNthMarkupLabel(int n = 0)
888 {
889 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupLabel method is deprecated, please use GetNthControlPointLabel instead");
890 return this->GetNthControlPointLabel(n);
891 };
893 void SetNthMarkupLabel(int n, std::string label)
894 {
895 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthMarkupLabel method is deprecated, please use SetNthControlPointLabel instead");
896 this->SetNthControlPointLabel(n, label);
897 };
900 {
901 vtkWarningMacro("vtkMRMLMarkupsNode::GetMarkupLabelFormat method is deprecated, please use GetControlPointLabelFormat instead");
902 return this->GetControlPointLabelFormat();
903 };
905 void SetMarkupLabelFormat(std::string format)
906 {
907 // Not warning this at the moment as existing scene files will contain the markupLabelFormat attribute name and would warn on load
908 // vtkWarningMacro("vtkMRMLMarkupsNode::SetMarkupLabelFormat method is deprecated, please use SetControlPointLabelFormat instead");
909 return this->SetControlPointLabelFormat(format);
910 };
913 {
914 vtkWarningMacro("vtkMRMLMarkupsNode::ReplaceListNameInMarkupLabelFormat method is deprecated, please use ReplaceListNameInControlPointLabelFormat instead");
915 return this->ReplaceListNameInControlPointLabelFormat();
916 };
917
918protected:
923
924 vtkSmartPointer<vtkStringArray> TextList;
925
931 bool SetControlPointLabelsWorld(vtkStringArray* labels, vtkPoints* points, std::string separator = "");
932
936 ControlPoint* GetNthControlPointCustomLog(int n, const char* failedMethodName);
937
941 void SetNthControlPointID(int n, std::string id);
942
947
948 std::string GenerateControlPointLabel(int controlPointIndex);
949
951
953
957
961
964
967 const double position_Node[3], const double orientationMatrix_Node[9], double orientationMatrix_World[9]);
968
971 const double position_World[3], const double orientationMatrix_World[9], double orientationMatrix_Node[9]);
972
975 int RequiredNumberOfControlPoints{0};
978 int MaximumNumberOfControlPoints{-1};
979
980 bool CurveClosed{false};
981
984
986 vtkSmartPointer<vtkCurveGenerator> CurveGenerator;
987
992 vtkSmartPointer<vtkParallelTransportFrame> CurveCoordinateSystemGeneratorWorld;
993
996 vtkSmartPointer<vtkPolyData> CurveInputPoly;
997
998 vtkSmartPointer<vtkTransformPolyDataFilter> CurvePolyToWorldTransformer;
999 vtkSmartPointer<vtkGeneralTransform> CurvePolyToWorldTransform;
1000
1003 vtkSmartPointer<vtkPointLocator> TransformedCurvePolyLocator;
1004
1006 int Locked{0};
1007
1010 bool FixedNumberOfControlPoints{false};
1011
1012 std::string ControlPointLabelFormat{"%N-%d"};
1013
1017 int LastUsedControlPointNumber{0};
1018
1020 int ControlPointPlacementStartIndex{ -1 };
1021
1024 vtkVector3d CenterOfRotation;
1025
1027 vtkCollection* Measurements;
1028
1030
1032 vtkSmartPointer<vtkMatrix4x4> InteractionHandleToWorldMatrix;
1033
1035 bool IsUpdatingPoints{false};
1036
1037 friend class qSlicerMarkupsModuleWidget; // To directly access measurements
1038};
1039
1040#endif
Simple class for storing standard coded entries (coding scheme, value, meaning triplets)
vtkParallelTransportFrame * GetCurveCoordinateSystemGeneratorWorld()
void SetNthControlPointOrientationFromArray(int n, const double orientationWXYZ[4])
void GetNthControlPointNormalWorld(int n, double normalWorld[3])
void GetControlPointPositionsWorld(vtkPoints *points)
Get a copy of all control point positions in world coordinate system.
void ClearValueForAllMeasurements()
void SetCenterOfRotationWorld(const double x, const double y, const double z)
int GetNthControlPointPositionWorld(int pointIndex, double worldxyz[3])
bool GetNthControlPointSelected(int n=0)
void ProcessMRMLEvents(vtkObject *, unsigned long, void *) override
Alternative method to propagate events generated in Display nodes.
virtual bool GetControlPointPlacementComplete()
Returns true if no additional control points can be added to this node.
vtkMRMLUnitNode * GetUnitNode(const char *quantity)
Utility function to get unit node from scene.
vtkMRMLMarkupsNode(const vtkMRMLMarkupsNode &)
vtkMRMLStorageNode * CreateDefaultStorageNode() override
Create default storage node or nullptr if does not have one.
void ApplyTransform(vtkAbstractTransform *transform) override
bool GetNthMarkupLocked(int n=0)
int AddControlPointWorld(double point[3], std::string label=std::string())
void SetNthControlPointOrientationMatrix(int n, double orientationMatrix[9])
bool GetNthControlPointAutoCreated(int n)
void GetNthControlPointOrientationMatrixWorld(int n, vtkMatrix3x3 *matrix)
std::vector< ControlPoint * > ControlPointsListType
void GetNthControlPointOrientationMatrix(int n, vtkMatrix3x3 *matrix)
int GetNthControlPointIndexByPositionStatus(int pointIndex, int positionStatus)
vtkSmartPointer< vtkParallelTransportFrame > CurveCoordinateSystemGeneratorWorld
vtkMRMLMeasurement * GetMeasurement(const char *name)
std::string GetNthMarkupLabel(int n=0)
void UpdateAllMeasurements()
int AddNControlPoints(int n, std::string label=std::string(), vtkVector3d *point=nullptr)
void GetControlPointLabels(vtkStringArray *labels)
Get all control point labels at once.
int GetControlPointIndexByID(const char *id)
void SetNthControlPointPositionOrientationWorldFromArray(const int pointIndex, const double positionWorld[3], const double orientationMatrix_World[9], const char *associatedNodeID, int positionStatus=PositionDefined)
virtual vtkPolyData * GetCurveWorld()
virtual vtkPoints * GetCurvePoints()
bool InsertControlPointWorld(int n, double pointWorld[3], std::string label=std::string())
bool InsertControlPoint(int n, vtkVector3d point, std::string label=std::string())
void SetNthControlPointOrientation(int n, double w, double x, double y, double z)
ControlPoint * GetNthControlPointCustomLog(int n, const char *failedMethodName)
std::string GetControlPointLabelFormat()
virtual void TransformOrientationMatrixFromWorldToNode(const double position_World[3], const double orientationMatrix_World[9], double orientationMatrix_Node[9])
Transform the orientation matrix from world to node coordinates.
virtual const char * GetPlaceAddIcon()
void SetFixedNumberOfControlPoints(bool fixed)
void UnsetNthControlPointPosition(int pointIndex)
Set control point status to undefined.
void SetControlPointPlacementStartIndex(int)
void SetNthControlPointPositionMissing(int pointIndex)
Set control point status to ignored.
void SetNthControlPointID(int n, std::string id)
bool ResetNthControlPointID(int n)
void WriteXML(ostream &of, int indent) override
Write this node's information to a MRML file in XML format.
int GetNthControlPointPositionStatus(int pointIndex)
Get control point position status (PositionUndefined, PositionPreview, PositionDefined)
virtual void UpdateCurvePolyFromControlPoints()
void AddMeasurement(vtkMRMLMeasurement *measurement)
vtkSmartPointer< vtkTransformPolyDataFilter > CurvePolyToWorldTransformer
int AddControlPoint(ControlPoint *controlPoint, bool autoLabel=true)
void SetNthControlPointAssociatedNodeID(int n, std::string id)
void SetNthControlPointVisibility(int n, bool flag)
int GetNumberOfMovableControlPoints()
Return the number of unlocked control points with defined position in this node.
virtual void UpdateAssignedAttribute()
virtual vtkPoints * GetCurvePointsWorld()
double * GetNthControlPointPosition(int pointIndex) VTK_SIZEHINT(3)
bool GetNthControlPointLocked(int n=0)
static int GetPositionStatusFromString(const char *name)
void SetNthControlPointPosition(const int pointIndex, const double x, const double y, const double z, int positionStatus=PositionDefined)
Set of the Nth control point position from coordinates.
void GetNthControlPointOrientationMatrixWorld(int n, double orientationMatrix[9])
void SetNthControlPointOrientationFromPointer(int n, const double *orientationWXYZ)
void GetNthControlPointPosition(int pointIndex, double point[3])
void SetNthMarkupLabel(int n, std::string label)
static void ConvertOrientationWXYZToMatrix(const double orientationWXYZ[4], double orientationMatrix[9])
virtual void TransformOrientationMatrixFromNodeToWorld(const double position_Node[3], const double orientationMatrix_Node[9], double orientationMatrix_World[9])
Transform the orientation matrix from node to world coordinates.
vtkSmartPointer< vtkPolyData > CurveInputPoly
bool SetControlPointLabelsWorld(vtkStringArray *labels, vtkPoints *points, std::string separator="")
vtkMRMLCopyContentMacro(vtkMRMLMarkupsNode)
int GetNthControlPointIndexByID(const char *controlPointID)
vtkVector3d GetCenterOfRotationVector()
std::string GetMarkupLabelFormat()
double * GetNthControlPointOrientationMatrix(int n) VTK_SIZEHINT(9)
int GetNumberOfUndefinedControlPoints(bool includePreview=false)
Return the number of control points that have not been placed (not being previewed or skipped).
~vtkMRMLMarkupsNode() override
void SetNthMarkupAssociatedNodeID(int n, std::string id)
vtkSmartPointer< vtkMatrix4x4 > InteractionHandleToWorldMatrix
Transform that moves the xyz unit vectors and origin of the interaction handles to local coordinates.
int GetClosestControlPointIndexToPositionWorld(double pos[3], bool visibleOnly=false)
bool InsertControlPoint(ControlPoint *controlPoint, int targetIndex)
void SetControlPointLabelFormat(std::string format)
void SetNthControlPointPositionFromPointer(const int pointIndex, const double *pos)
virtual void UpdateMeasurementsInternal()
bool GetModifiedSinceRead() override
void CreateDefaultDisplayNodes() override
Create and observe default display node(s)
void SetNthControlPointPositionOrientationWorld(const int pointIndex, const double pos[3], const double orientationMatrix[9], const char *associatedNodeID, int positionStatus=PositionDefined)
std::string GenerateControlPointLabel(int controlPointIndex)
static const char * GetPositionStatusAsString(int id)
vtkVector4d GetNthControlPointOrientationVector(int pointIndex)
std::string ReplaceListNameInControlPointLabelFormat()
bool InsertControlPoint(int n, double point[3], std::string label=std::string())
void ResetNthControlPointPosition(int n)
Set control point status to preview.
void SetNthControlPointPositionFromArray(const int pointIndex, const double pos[3], int positionStatus=PositionDefined)
int AddNControlPoints(int n, std::string label, double point[3])
vtkVector< double, 9 > GetNthControlPointOrientationMatrixWorld(int n)
int GetControlPointIndexByDescription(const char *description)
vtkVector3d GetNthControlPointNormal(int n)
@ PointRemovedEvent
Control point(s) deleted. Modified event is NOT invoked.
@ PointPositionNonMissingEvent
Point missing before and now it is not missing.
@ PointAboutToBeRemovedEvent
Point is about to be deleted. Thus it is alive when event is called.
@ CenterOfRotationModifiedEvent
When position of the center of rotation is changed (used for example for rotating closed curves).
@ PointModifiedEvent
Existing control point(s) modified, added, or removed. Modified event is NOT invoked.
@ FixedNumberOfControlPointsModifiedEvent
When fixed number of points set/unset.
@ PointAddedEvent
New control point(s) added. Modified event is NOT invoked.
@ PointPositionUndefinedEvent
Point position was defined and now it is not defined anymore (point deleted or position is not define...
@ LabelFormatModifiedEvent
Markups node label format changed. Modified event is invoked, too.
@ PointEndInteractionEvent
When an interaction with a control point process finishes.
@ PointPositionMissingEvent
Point was not not missing before and now it is missing.
@ PointStartInteractionEvent
When starting interacting with a control point.
bool CanApplyNonLinearTransforms() const override
bool InsertControlPointWorld(int n, vtkVector3d pointWorld, std::string label=std::string())
std::string GetNthControlPointID(int n)
Get the id for the Nth control point.
vtkVector3d GetMarkupPointVector(int markupIndex, int)
vtkCurveGenerator * GetCurveGenerator()
vtkMRMLMarkupsDisplayNode * GetMarkupsDisplayNode()
Return a cast display node, returns null if none.
void GetMarkupPoint(int markupIndex, int pointIndex, double point[3])
void SetNthMarkupLocked(int n, bool flag)
vtkSmartPointer< vtkCurveGenerator > CurveGenerator
Converts curve control points to curve points.
void SetCenterOfRotation(const double position[3])
int GetNumberOfPointsInNthMarkup(int)
vtkVector3d GetNthControlPointNormalWorld(int n)
bool GetNthControlPointVisibility(int n=0)
void OnTransformNodeReferenceChanged(vtkMRMLTransformNode *transformNode) override
Called when transform node reference added/modified/removed.
int GetControlPointPlacementStartIndex()
void SetNthControlPointOrientationMatrixWorld(int n, const double orientationMatrix[9])
int GetControlPointIndexByLabel(const char *label)
void SetCenterOfRotationFromArray(const double pos[3])
virtual vtkPolyData * GetCurve()
void PrintSelf(ostream &os, vtkIndent indent) override
bool GetFixedNumberOfControlPoints()
virtual const char * GetMarkupType()
std::string GetNthControlPointLabel(int n=0)
int AddControlPoint(double point[3], std::string label=std::string())
virtual const char * GetAddIcon()
void SetNthMeasurement(int id, vtkMRMLMeasurement *measurement)
virtual const char * GetDefaultNodeNamePrefix()
Get markup short name.
void SetNthControlPointSelected(int n, bool flag)
vtkSmartPointer< vtkStringArray > TextList
virtual std::string GetPropertiesLabelText()
void SetControlPointPositionsWorld(vtkPoints *points, bool setUndefinedPoints=true)
void SwapControlPoints(int m1, int m2)
Swap two control points (position data and all other properties).
void GetBounds(double bounds[6]) override
void SetNthControlPointDescription(int n, std::string description)
vtkSmartPointer< vtkPointLocator > TransformedCurvePolyLocator
int GetNumberOfDefinedControlPoints(bool includePreview=false)
Return the number of control points that are already placed (not being previewed or undefined).
vtkSmartPointer< vtkGeneralTransform > CurvePolyToWorldTransform
vtkVector3d GetNthControlPointPositionVector(int pointIndex)
std::string GetNthControlPointAssociatedNodeID(int n=0)
void SetCenterOfRotationWorld(const double positionWorld[3])
void SetNthControlPointOrientation(int n, const double wxyz[4])
void SetNthControlPointPositionWorld(const int pointIndex, const double x, const double y, const double z, int positionStatus=PositionDefined)
std::string ReplaceListNameInMarkupLabelFormat()
void SetNthControlPointLabel(int n, std::string label)
void RemoveMarkup(int pointIndex)
void SetCenterOfRotationFromPointer(const double *pos)
void GetNthControlPointNormal(int n, double normal[3])
void SetMarkupLabelFormat(std::string format)
std::string GetNthMarkupAssociatedNodeID(int n=0)
std::vector< ControlPoint * > * GetControlPoints()
Return a pointer to the std::vector of control points stored in this node.
void SetNthControlPointOrientationMatrixWorld(int n, vtkMatrix3x3 *matrix)
@ PositionMissing
PositionMissing: point is undefined and placement should not be attempted.
@ PositionUndefined
PositionUndefined: position is undefined (coordinate values must not be used).
@ PositionPreview
PositionPreview: new point is being placed, position is tentative.
@ PositionDefined
PositionDefined: position is specified.
bool ControlPointExists(int n)
Return true if n is a valid control point, false otherwise.
void SetNthControlPointPositionWorld(const int pointIndex, const double position[3], int positionStatus=PositionDefined)
vtkMRMLMeasurement * GetNthMeasurement(int id)
bool GetCenterOfRotationWorld(double worldxyz[3])
void SetNthControlPointPosition(const int pointIndex, const double position[3], int positionStatus=PositionDefined)
int AddControlPointWorld(double x, double y, double z, std::string label=std::string())
bool GetCenterOfRotation(double point[3])
virtual vtkAlgorithmOutput * GetCurveWorldConnection()
void ReadXMLAttributes(const char **atts) override
Read node attributes from XML file.
int GetNumberOfControlPoints()
Return the number of control points that are stored in this node.
std::string GenerateUniqueControlPointID()
virtual void RemoveAllControlPoints()
Clear out the node of all control points.
ControlPoint * GetNthControlPointByID(const char *controlPointID)
Get the Nth control point based on it's ID.
std::string GetNthControlPointDescription(int n=0)
void SetLocked(int locked)
int AddControlPointWorld(vtkVector3d point, std::string label=std::string())
virtual vtkMatrix4x4 * GetInteractionHandleToWorldMatrix()
4x4 matrix detailing the orientation and position in world coordinates of the interaction handles.
virtual void UpdateInteractionHandleToWorldMatrix()
Calculates the handle to world matrix based on the current control points.
int GetControlPointIndexFromInterpolatedPointIndex(vtkIdType interpolatedPointIndex)
Converts curve point index to control point index.
virtual const char * GetIcon()
ControlPointsListType ControlPoints
Vector of control points.
void SetCenterOfRotation(const double x, const double y, const double z)
void RemoveNthMeasurement(int id)
void operator=(const vtkMRMLMarkupsNode &)
void WriteCLI(std::vector< std::string > &commandLine, std::string prefix, int coordinateSystem=vtkMRMLStorageNode::CoordinateSystemRAS, int multipleFlag=1) override
virtual void UnsetAllControlPoints()
int GetNumberOfEnabledMeasurements()
static void ConvertOrientationMatrixToWXYZ(const double orientationMatrix[9], double orientationWXYZ[4])
int AddControlPoint(vtkVector3d point, std::string label=std::string())
void GetRASBounds(double bounds[6]) override
vtkVector3d GetCenterOfRotation()
int GetNumberOfMeasurements()
void RemoveAllMeasurements()
std::string GetNthMarkupID(int n=0)
virtual void WriteMeasurementsToDescription()
void RestoreNthControlPointPosition(int n)
Set control point status to defined and return to the previous position.
bool GetNthControlPointPositionVisibility(int n=0)
vtkCollection * Measurements
List of measurements stored for the markup.
void SetNthControlPointLocked(int n, bool flag)
void GetNthControlPointOrientation(int n, double orientationWXYZ[4])
void SetNthControlPointPositionWorldFromArray(const int pointIndex, const double pos[3], int positionStatus=PositionDefined)
void RemoveNthControlPoint(int pointIndex)
Remove Nth Control Point.
int AddControlPoint(double x, double y, double z, std::string label=std::string())
vtkVector3d GetNthControlPointPositionWorld(int pointIndex)
void SetNthMeasurement(int id, const std::string &name, double value, const std::string &units, std::string printFormat="", const std::string description="", vtkCodedEntry *quantityCode=nullptr, vtkCodedEntry *derivationCode=nullptr, vtkCodedEntry *unitsCode=nullptr, vtkCodedEntry *methodCode=nullptr)
void SetNthControlPointAutoCreated(int n, bool flag)
ControlPoint * GetNthControlPoint(int n)
Return a pointer to the Nth control point stored in this node, null if n is out of bounds.
void SetNthControlPointOrientationMatrix(int n, vtkMatrix3x3 *matrix)
int EndModify(int previousDisableModifiedEventState) override
End modifying the node. Updates pending measurements and other updates.
Class for storing well-defined measurement results, using coded entries.
A superclass for other storage nodes.
MRML node for representing a transformation between this node space and a parent node space.
Node that holds the information about a unit.