Skip to content

Commit

Permalink
BUG: Fix control point numbering restarting from 1 when scene is relo…
Browse files Browse the repository at this point in the history
…aded

Control point numbering restarted from 1 when a markup node was loaded because LastUsedControlPointNumber was not saved.
See user error report: https://discourse.slicer.org/t/markups-new-point-id-restart-from-1-when-loaded-from-saved-scene/21142/4
  • Loading branch information
lassoan committed Dec 22, 2021
1 parent 365c194 commit b76bceb
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
Expand Up @@ -617,6 +617,11 @@ bool vtkMRMLMarkupsJsonStorageNode::vtkInternal::UpdateMarkupsNodeFromJsonValue(
markupsNode->SetMarkupLabelFormat(markupObject["labelFormat"].GetString());
}

if (markupObject.HasMember("lastUsedControlPointNumber"))
{
markupsNode->SetLastUsedControlPointNumber(markupObject["lastUsedControlPointNumber"].GetInt());
}

if (markupObject.HasMember("controlPoints"))
{
if (!this->ReadControlPoints(markupObject["controlPoints"], coordinateSystem, markupsNode))
Expand Down Expand Up @@ -867,6 +872,9 @@ bool vtkMRMLMarkupsJsonStorageNode::vtkInternal::WriteBasicProperties(
writer.Key("labelFormat");
writer.String(markupsNode->GetMarkupLabelFormat().c_str());

writer.Key("lastUsedControlPointNumber");
writer.Int(markupsNode->GetLastUsedControlPointNumber());

/*
if (markupsNode->GetName())
{
Expand Down
8 changes: 8 additions & 0 deletions Modules/Loadable/Markups/MRML/vtkMRMLMarkupsNode.h
Expand Up @@ -697,6 +697,14 @@ class VTK_SLICER_MARKUPS_MODULE_MRML_EXPORT vtkMRMLMarkupsNode : public vtkMRML
void SetControlPointPlacementStartIndex(int);
///@}

///@{
/// This value is used for generating number in the control point's name when a new point is added.
/// The value is not decremented when a control point is deleted to keep the control point names unique.
/// The value is reset to 0 when \sa RemoveAllControlPoints is called.
vtkGetMacro(LastUsedControlPointNumber, int);
vtkSetMacro(LastUsedControlPointNumber, int);
///@}

//-----------------------------------------------------------
// All public methods below are deprecated
//
Expand Down
Expand Up @@ -95,6 +95,13 @@
"description": "Format of generation new labels. %N refers to node name, %d refers to point index.",
"default": "%N-%d"
},
"lastUsedControlPointNumber": {
"$id": "#markup/lastUsedControlPointNumber",
"type": "integer",
"title": "Last used control point number",
"description": "This value is used for generating number in the control point's name when a new point is added.",
"default": 0
},
"roiType": {
"$id": "#markup/roiType",
"type": "string",
Expand Down

0 comments on commit b76bceb

Please sign in to comment.