Slicer 5.13
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 "vtkMRMLExport.h"
29
30// VTK includes
31#include <vtkParallelTransportFrame.h>
32#include <vtkPointLocator.h>
33#include <vtkSmartPointer.h>
34#include <vtkVector.h>
35
36// STL includes
37#include <map>
38
39// VTK 9.3 does not have VTK_PROPEXCLUDE
40#ifndef VTK_PROPEXCLUDE
41# define VTK_PROPEXCLUDE
42#endif
43
44class vtkMatrix3x3;
45class vtkMRMLUnitNode;
46
73
74class vtkAlgorithmOutput;
75class vtkCollection;
76class vtkDataArray;
77class vtkGeneralTransform;
78class vtkMatrix4x4;
80class vtkPolyData;
81class vtkStringArray;
82class vtkTransformPolyDataFilter;
83
84class VTK_MRML_EXPORT vtkMRMLMarkupsNode : public vtkMRMLDisplayableNode
85{
90
91public:
93 {
95 {
96 // position is 0
97 this->Position[0] = 0.0;
98 this->Position[1] = 0.0;
99 this->Position[2] = 0.0;
100
101 this->OrientationMatrix[0] = 1.0;
102 this->OrientationMatrix[1] = 0.0;
103 this->OrientationMatrix[2] = 0.0;
104
105 this->OrientationMatrix[3] = 0.0;
106 this->OrientationMatrix[4] = 1.0;
107 this->OrientationMatrix[5] = 0.0;
108
109 this->OrientationMatrix[6] = 0.0;
110 this->OrientationMatrix[7] = 0.0;
111 this->OrientationMatrix[8] = 1.0;
112
113 Selected = true;
114 Locked = false;
115 Visibility = true;
117 AutoCreated = false;
118 }
119
120 // Positions and orientation in local coordinates.
121 // If transform is applied to the markup node then world
122 // coordinates may be obtained by applying "to world" transform.
123 double Position[3];
124 // Orientation of control point in 3x3 matrix.
125 // x axis (0, 3, 6), y axis (1, 4, 7), and z axis (2, 5, 8).
127
128 std::string ID;
129 std::string Label;
130 std::string Description;
131 std::string AssociatedNodeID;
132
134 bool Locked;
138 };
139
140 typedef std::vector<ControlPoint*> ControlPointsListType;
141
143
144 void PrintSelf(ostream& os, vtkIndent indent) override;
145
146 virtual const char* GetIcon() { return ":/Icons/MarkupsGeneric.png"; }
147 virtual const char* GetAddIcon() { return ":/Icons/MarkupsGenericMouseModePlace.png"; }
148 virtual const char* GetPlaceAddIcon() { return ":/Icons/MarkupsGenericMouseModePlaceAdd.png"; }
149
150 //--------------------------------------------------------------------------
151 // MRMLNode methods
152 //--------------------------------------------------------------------------
153
156 virtual const char* GetMarkupType() { return "Markup"; };
157
159 void ReadXMLAttributes(const char** atts) override;
160
162 void WriteXML(ostream& of, int indent) override;
163
168 void WriteCLI(std::vector<std::string>& commandLine, std::string prefix, int coordinateSystem = vtkMRMLStorageNode::CoordinateSystemRAS, int multipleFlag = 1) override;
169
173
175 void ProcessMRMLEvents(vtkObject* /*caller*/, unsigned long /*event*/, 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,
218 const std::string& name,
219 double value,
220 const std::string& units,
221 std::string printFormat = "",
222 const std::string description = "",
223 vtkCodedEntry* quantityCode = nullptr,
224 vtkCodedEntry* derivationCode = nullptr,
225 vtkCodedEntry* unitsCode = nullptr,
226 vtkCodedEntry* methodCode = nullptr);
229
237 enum
238 {
254 };
255
257 enum
258 {
264 };
265
266 static const char* GetPositionStatusAsString(int id);
267 static int GetPositionStatusFromString(const char* name);
268
271 virtual void UnsetAllControlPoints();
272
281 vtkGetMacro(Locked, int);
282 void SetLocked(int locked);
283 vtkBooleanMacro(Locked, int);
285
288
291
297 int GetNumberOfDefinedControlPoints(bool includePreview = false);
299 int GetNumberOfUndefinedControlPoints(bool includePreview = false);
300
304 std::vector<ControlPoint*>* GetControlPoints();
305
313 int AddNControlPoints(int n, std::string label = std::string(), vtkVector3d* point = nullptr);
314 int AddNControlPoints(int n, std::string label, double point[3]);
316
322 void SetControlPointPositionsWorld(vtkPoints* points, bool setUndefinedPoints = true);
323
325 void GetControlPointPositionsWorld(vtkPoints* points);
326
329 int AddControlPoint(vtkVector3d point, std::string label = std::string());
330 int AddControlPoint(double point[3], std::string label = std::string());
331 int AddControlPoint(double x, double y, double z, std::string label = std::string());
333
339 int AddControlPoint(ControlPoint* controlPoint, bool autoLabel = true);
340
344 int AddControlPointWorld(vtkVector3d point, std::string label = std::string());
345 int AddControlPointWorld(double point[3], std::string label = std::string());
346 int AddControlPointWorld(double x, double y, double z, std::string label = std::string());
348
356 bool InsertControlPoint(ControlPoint* controlPoint, int targetIndex);
357 bool InsertControlPoint(int n, vtkVector3d point, std::string label = std::string());
358 bool InsertControlPoint(int n, double point[3], std::string label = std::string());
360
362 // Add and insert control point at index, defined in the world coordinate system.
363 //\sa InsertControlPoint
364 bool InsertControlPointWorld(int n, vtkVector3d pointWorld, std::string label = std::string());
365 bool InsertControlPointWorld(int n, double pointWorld[3], std::string label = std::string());
367
369 void RemoveNthControlPoint(int pointIndex);
370
372 void SwapControlPoints(int m1, int m2);
373
377 void SetNthControlPointAutoCreated(int n, bool flag);
379
383 void GetNthControlPointPosition(int pointIndex, double point[3]);
384 double* GetNthControlPointPosition(int pointIndex) VTK_SIZEHINT(3);
386
389 // Note: this method is not redundant because GetNthControlPointPosition returns a double*
390 // (as it is safe to do so) and so the method that returns a vtkVector3d cannot have the same name.
391 vtkVector3d GetNthControlPointPositionVector(int pointIndex);
392
396 int GetNthControlPointPositionWorld(int pointIndex, double worldxyz[3]);
397 vtkVector3d GetNthControlPointPositionWorld(int pointIndex);
399
402 void SetNthControlPointPosition(const int pointIndex, const double x, const double y, const double z, int positionStatus = PositionDefined);
403 void SetNthControlPointPosition(const int pointIndex, const double position[3], int positionStatus = PositionDefined);
405
410 void SetNthControlPointPositionWorld(const int pointIndex, const double x, const double y, const double z, int positionStatus = PositionDefined);
411 void SetNthControlPointPositionWorld(const int pointIndex, const double position[3], int positionStatus = PositionDefined);
413
418 const double pos[3],
419 const double orientationMatrix[9],
420 const char* associatedNodeID,
421 int positionStatus = PositionDefined);
422
426 void SetNthControlPointOrientation(int n, double w, double x, double y, double z);
427 void SetNthControlPointOrientation(int n, const double wxyz[4]);
429
432 void GetNthControlPointOrientation(int n, double orientationWXYZ[4]);
433
437 double* GetNthControlPointOrientationMatrix(int n) VTK_SIZEHINT(9);
438 void SetNthControlPointOrientationMatrix(int n, double orientationMatrix[9]);
440
443 void GetNthControlPointOrientationMatrix(int n, vtkMatrix3x3* matrix);
444 void SetNthControlPointOrientationMatrix(int n, vtkMatrix3x3* matrix);
446
450 void GetNthControlPointOrientationMatrixWorld(int n, double orientationMatrix[9]);
451 vtkVector<double, 9> GetNthControlPointOrientationMatrixWorld(int n);
452 void SetNthControlPointOrientationMatrixWorld(int n, const double orientationMatrix[9]);
454
457 void GetNthControlPointOrientationMatrixWorld(int n, vtkMatrix3x3* matrix);
458 void SetNthControlPointOrientationMatrixWorld(int n, vtkMatrix3x3* matrix);
460
463
468 int GetNthControlPointIndexByPositionStatus(int pointIndex, int positionStatus);
469
471 void UnsetNthControlPointPosition(int pointIndex);
472
475
478
481
485 vtkVector3d GetCenterOfRotation();
486
490 bool GetCenterOfRotation(double point[3]);
491
495 // \sa GetCenterOfRotation
496 bool GetCenterOfRotationWorld(double worldxyz[3]);
497
501 void SetCenterOfRotation(const double x, const double y, const double z);
502 void SetCenterOfRotation(const double position[3]);
504
508 void SetCenterOfRotationWorld(const double x, const double y, const double z);
509 void SetCenterOfRotationWorld(const double positionWorld[3]);
511
514 void GetNthControlPointNormal(int n, double normal[3]);
515 vtkVector3d GetNthControlPointNormal(int n);
517
520 void GetNthControlPointNormalWorld(int n, double normalWorld[3]);
523
527 void SetNthControlPointAssociatedNodeID(int n, std::string id);
529
531 std::string GetNthControlPointID(int n);
532
535 int GetNthControlPointIndexByID(const char* controlPointID);
537 ControlPoint* GetNthControlPointByID(const char* controlPointID);
538
542 int GetControlPointIndexByID(const char* id);
543 int GetControlPointIndexByLabel(const char* label);
544 int GetControlPointIndexByDescription(const char* description);
546
552 void SetNthControlPointSelected(int n, bool flag);
553
563 void SetNthControlPointLocked(int n, bool flag);
564
568
573
581 void SetNthControlPointVisibility(int n, bool flag);
582
585 std::string GetNthControlPointLabel(int n = 0);
586 void SetNthControlPointLabel(int n, std::string label);
588
590 void GetControlPointLabels(vtkStringArray* labels);
591
595 std::string GetNthControlPointDescription(int n = 0);
596 void SetNthControlPointDescription(int n, std::string description);
598
601 bool CanApplyNonLinearTransforms() const override;
602
605 void ApplyTransform(vtkAbstractTransform* transform) override;
606 virtual void ApplyTransform(vtkAbstractTransform* transform, bool applyToLockedControlPoints);
607
618 void SetControlPointLabelFormat(std::string format);
620
623 std::string FormatControlPointLabel(double number);
624
630
644 static std::string FormatLabel(const std::string& format,
645 const std::map<char, std::string>& textPlaceholders,
646 const double* number = nullptr,
647 bool* numberPlaceholderFound = nullptr);
648
656 bool GetModifiedSinceRead() override;
657
662
670
675
685
689 static void ConvertOrientationMatrixToWXYZ(const double orientationMatrix[9], double orientationWXYZ[4]);
690 static void ConvertOrientationWXYZToMatrix(const double orientationWXYZ[4], double orientationMatrix[9]);
692
695 virtual vtkPoints* GetCurvePoints();
696 virtual vtkPoints* GetCurvePointsWorld();
697 virtual vtkPolyData* GetCurve();
698 virtual vtkPolyData* GetCurveWorld();
699 virtual vtkAlgorithmOutput* GetCurveWorldConnection();
701
703 int GetControlPointIndexFromInterpolatedPointIndex(vtkIdType interpolatedPointIndex);
704
715 static bool BuildLineDirectionMarkers(vtkPoints* curvePoints,
716 bool closedCurve,
717 double spacing,
718 vtkPoints* outPositions,
719 vtkDoubleArray* outTangents,
720 bool directionFirstToLastControlPoint = true);
721
723 vtkGetMacro(CurveClosed, bool);
724
728 vtkCurveGenerator* GetCurveGenerator() { return this->CurveGenerator.GetPointer(); };
729
732 vtkParallelTransportFrame* GetCurveCoordinateSystemGeneratorWorld() { return this->CurveCoordinateSystemGeneratorWorld.GetPointer(); };
733
734 void GetRASBounds(double bounds[6]) override;
735 void GetBounds(double bounds[6]) override;
736
739 int GetClosestControlPointIndexToPositionWorld(double pos[3], bool visibleOnly = false);
740
742 virtual vtkMatrix4x4* GetInteractionHandleToWorldMatrix();
743
749 virtual std::string GetPropertiesLabelText();
750
752 vtkMRMLUnitNode* GetUnitNode(const char* quantity);
753
756 virtual void UpdateAssignedAttribute() {};
757
760
771
776 vtkGetMacro(LastUsedControlPointNumber, int);
777 vtkSetMacro(LastUsedControlPointNumber, int);
779
780 //-----------------------------------------------------------
781 // All public methods below are deprecated
782 //
783 // These methods are either deprecated because they use old terms (markup instead of control point),
784 // or include "array", "vector", "pointer" in the name (it is redundant, as input arguments can be
785 // deduced from the type; and return type for vectors is always vtkVectorNd).
786 //
787
790 {
791 vtkWarningMacro("vtkMRMLMarkupsNode::RemoveAllMarkups method is deprecated, please use RemoveAllControlPoints instead");
793 };
794
796 bool MarkupExists(int n)
797 {
798 vtkWarningMacro("vtkMRMLMarkupsNode::MarkupExists method is deprecated, please use ControlPointExists instead");
799 return this->ControlPointExists(n);
800 };
801
804 {
805 vtkWarningMacro("vtkMRMLMarkupsNode::GetNumberOfMarkups method is deprecated, please use GetNumberOfControlPoints instead");
806 return this->GetNumberOfControlPoints();
807 };
808
810 {
811 vtkWarningMacro("vtkMRMLMarkupsNode::GetNumberOfPointsInNthMarkup method is deprecated, please use GetNumberOfControlPoints instead");
812 return this->GetNumberOfControlPoints();
813 };
814
816 vtkVector3d GetMarkupPointVector(int markupIndex, int)
817 {
818 vtkWarningMacro("vtkMRMLMarkupsNode::GetMarkupPointVector method is deprecated, please use GetNthControlPointPositionVector instead");
819 return this->GetNthControlPointPositionVector(markupIndex);
820 };
821
823 void GetMarkupPoint(int markupIndex, int pointIndex, double point[3]);
824
826 void RemoveMarkup(int pointIndex)
827 {
828 vtkWarningMacro("vtkMRMLMarkupsNode::RemoveMarkup method is deprecated, please use RemoveNthControlPoint instead");
829 this->RemoveNthControlPoint(pointIndex);
830 };
831
835 void SetNthControlPointPositionFromPointer(const int pointIndex, const double* pos);
836
839 void SetNthControlPointPositionFromArray(const int pointIndex, const double pos[3], int positionStatus = PositionDefined)
840 {
841 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthControlPointPositionFromArray method is deprecated, please use SetNthControlPointPosition instead");
842 this->SetNthControlPointPosition(pointIndex, pos[0], pos[1], pos[2], positionStatus);
843 }
844
848 void SetNthControlPointPositionWorldFromArray(const int pointIndex, const double pos[3], int positionStatus = PositionDefined);
849
855 const double positionWorld[3],
856 const double orientationMatrix_World[9],
857 const char* associatedNodeID,
858 int positionStatus = PositionDefined)
859 {
860 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthControlPointPositionOrientationWorldFromArray method is deprecated,"
861 << " please use SetNthControlPointPositionOrientationWorld instead");
862 this->SetNthControlPointPositionOrientationWorld(pointIndex, positionWorld, orientationMatrix_World, associatedNodeID, positionStatus);
863 }
864
870 vtkVector4d GetNthControlPointOrientationVector(int pointIndex);
871
876 {
877 vtkWarningMacro("vtkMRMLMarkupsNode::GetCenterOfRotationVector method is deprecated, please use GetCenterOfRotation instead");
878 return this->GetCenterOfRotation();
879 }
880
884 void SetCenterOfRotationFromPointer(const double* pos);
888 void SetCenterOfRotationFromArray(const double pos[3])
889 {
890 vtkWarningMacro("vtkMRMLMarkupsNode::SetCenterOfRotationFromArray method is deprecated, please use SetCenterOfRotation instead");
891 this->SetCenterOfRotation(pos[0], pos[1], pos[2]);
892 }
893
898 void SetNthControlPointOrientationFromPointer(int n, const double* orientationWXYZ);
899 void SetNthControlPointOrientationFromArray(int n, const double orientationWXYZ[4])
900 {
901 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthControlPointOrientationFromArray method is deprecated, please use SetNthControlPointOrientation instead");
902 this->SetNthControlPointOrientation(n, orientationWXYZ[0], orientationWXYZ[1], orientationWXYZ[2], orientationWXYZ[3]);
903 }
904
905
907 std::string GetNthMarkupAssociatedNodeID(int n = 0)
908 {
909 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupAssociatedNodeID method is deprecated, please use GetNthControlPointAssociatedNodeID instead");
911 };
912
913 void SetNthMarkupAssociatedNodeID(int n, std::string id)
914 {
915 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthMarkupAssociatedNodeID method is deprecated, please use SetNthControlPointAssociatedNodeID instead");
917 };
918
920 std::string GetNthMarkupID(int n = 0)
921 {
922 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupID method is deprecated, please use GetNthControlPointID instead");
923 return this->GetNthControlPointID(n);
924 };
925
927 bool GetNthMarkupLocked(int n = 0)
928 {
929 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupLocked method is deprecated, please use GetNthControlPointLocked instead");
930 return this->GetNthControlPointLocked(n);
931 };
932
933 void SetNthMarkupLocked(int n, bool flag)
934 {
935 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthMarkupLocked method is deprecated, please use SetNthControlPointLocked instead");
936 this->SetNthControlPointLocked(n, flag);
937 };
938
940 std::string GetNthMarkupLabel(int n = 0)
941 {
942 vtkWarningMacro("vtkMRMLMarkupsNode::GetNthMarkupLabel method is deprecated, please use GetNthControlPointLabel instead");
943 return this->GetNthControlPointLabel(n);
944 };
945
946 void SetNthMarkupLabel(int n, std::string label)
947 {
948 vtkWarningMacro("vtkMRMLMarkupsNode::SetNthMarkupLabel method is deprecated, please use SetNthControlPointLabel instead");
949 this->SetNthControlPointLabel(n, label);
950 };
951
953 {
954 vtkWarningMacro("vtkMRMLMarkupsNode::GetMarkupLabelFormat method is deprecated, please use GetControlPointLabelFormat instead");
955 return this->GetControlPointLabelFormat();
956 };
957
958 void SetMarkupLabelFormat(std::string format)
959 {
960 // Not warning this at the moment as existing scene files will contain the markupLabelFormat attribute name and would warn on load
961 // vtkWarningMacro("vtkMRMLMarkupsNode::SetMarkupLabelFormat method is deprecated, please use SetControlPointLabelFormat instead");
962 return this->SetControlPointLabelFormat(format);
963 };
964
966 {
967 vtkWarningMacro("vtkMRMLMarkupsNode::ReplaceListNameInMarkupLabelFormat method is deprecated, please use ReplaceListNameInControlPointLabelFormat instead");
969 };
970
971protected:
976
977 vtkSmartPointer<vtkStringArray> TextList;
978
984 bool SetControlPointLabelsWorld(vtkStringArray* labels, vtkPoints* points, std::string separator = "");
985
989 ControlPoint* GetNthControlPointCustomLog(int n, const char* failedMethodName);
990
994 void SetNthControlPointID(int n, std::string id);
995
1000
1001 std::string GenerateControlPointLabel(int controlPointIndex);
1002
1004
1006
1010
1014
1017
1019 virtual void TransformOrientationMatrixFromNodeToWorld(const double position_Node[3], const double orientationMatrix_Node[9], double orientationMatrix_World[9]);
1020
1022 virtual void TransformOrientationMatrixFromWorldToNode(const double position_World[3], const double orientationMatrix_World[9], double orientationMatrix_Node[9]);
1023
1030
1031 bool CurveClosed{ false };
1032
1035
1037 vtkSmartPointer<vtkCurveGenerator> CurveGenerator;
1038
1043 vtkSmartPointer<vtkParallelTransportFrame> CurveCoordinateSystemGeneratorWorld;
1044
1047 vtkSmartPointer<vtkPolyData> CurveInputPoly;
1048
1049 vtkSmartPointer<vtkTransformPolyDataFilter> CurvePolyToWorldTransformer;
1050 vtkSmartPointer<vtkGeneralTransform> CurvePolyToWorldTransform;
1051
1054 vtkSmartPointer<vtkPointLocator> TransformedCurvePolyLocator;
1055
1057 int Locked{ 0 };
1058
1062
1063 std::string ControlPointLabelFormat{ "%N-%d" };
1064
1069
1072
1075 vtkVector3d CenterOfRotation;
1076
1078 vtkCollection* Measurements;
1079
1081
1083 vtkSmartPointer<vtkMatrix4x4> InteractionHandleToWorldMatrix;
1084
1086 bool IsUpdatingPoints{ false };
1087
1088 friend class qSlicerMarkupsModuleWidget; // To directly access measurements
1089};
1090
1091#endif
Simple class for storing standard coded entries (coding scheme, value, meaning triplets)
friend class vtkMRMLMarkupsFiducialStorageNode
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)
friend class qSlicerMarkupsModuleWidget
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::string FormatControlPointLabel(double number)
std::vector< ControlPoint * > ControlPointsListType
VTK_PROPEXCLUDE void SetNthControlPointPositionMissing(int pointIndex)
Set control point status to ignored.
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)
friend class vtkMRMLMarkupsJsonStorageNode
ControlPoint * GetNthControlPointCustomLog(int n, const char *failedMethodName)
int ControlPointPlacementStartIndex
Index of the control point index that placement is started from (if no other point is requested speci...
std::string GetControlPointLabelFormat()
static bool BuildLineDirectionMarkers(vtkPoints *curvePoints, bool closedCurve, double spacing, vtkPoints *outPositions, vtkDoubleArray *outTangents, bool directionFirstToLastControlPoint=true)
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)
int Locked
Locks all the points and GUI.
void UnsetNthControlPointPosition(int pointIndex)
Set control point status to undefined.
void SetControlPointPlacementStartIndex(int)
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)
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])
bool IsUpdatingPoints
Flag set from SetControlPointPositionsWorld that pauses update of measurements until the update is co...
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)
@ PointRemovedEvent
Control point(s) deleted. Modified event is NOT invoked.
@ PointPositionNonMissingEvent
Point missing before and now it is not missing.
@ LockModifiedEvent
Markups node lock status is changed. Modified event is invoked, too.
@ 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.
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)
@ PositionStatus_Last
PositionStatus_Last: indicates the end of the enum (int first = 0, int last = PositionStatus_Last)
@ 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.
int GetControlPointIndexByDescription(const char *description)
vtkVector3d GetNthControlPointNormal(int n)
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)
static std::string FormatLabel(const std::string &format, const std::map< char, std::string > &textPlaceholders, const double *number=nullptr, bool *numberPlaceholderFound=nullptr)
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)
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).
std::string ControlPointLabelFormat
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)
virtual void ApplyTransform(vtkAbstractTransform *transform, bool applyToLockedControlPoints)
std::vector< ControlPoint * > * GetControlPoints()
Return a pointer to the std::vector of control points stored in this node.
void SetNthControlPointOrientationMatrixWorld(int n, vtkMatrix3x3 *matrix)
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])
friend class vtkMRMLMarkupsStorageNode
Make the storage node a friend so that ReadDataInternal can set the ControlPoint ids.
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.
#define VTK_PROPEXCLUDE