diff --git a/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx b/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx index addbfb6d876..f33f1713fa9 100644 --- a/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx +++ b/Modules/Loadable/Markups/Logic/vtkSlicerMarkupsLogic.cxx @@ -755,20 +755,28 @@ char * vtkSlicerMarkupsLogic::LoadMarkupsFromFcsv(const char* fileName, const ch } vtkDebugMacro("LoadMarkups, file name = " << fileName << ", nodeName = " << (nodeName ? nodeName : "null")); - - vtkMRMLMarkupsNode* markupsNode = vtkMRMLMarkupsNode::SafeDownCast(this->GetMRMLScene()->AddNewNodeByClass("vtkMRMLMarkupsFiducialNode", nodeName)); - if (!markupsNode) - { - vtkErrorMacro("LoadMarkups: failed to instantiate markups node by class vtkMRMLMarkupsFiducialNode"); - return nullptr; - } - // make a storage node and fiducial node and set the file name vtkMRMLStorageNode* storageNode = vtkMRMLStorageNode::SafeDownCast(this->GetMRMLScene()->AddNewNodeByClass("vtkMRMLMarkupsFiducialStorageNode")); if (!storageNode) { vtkErrorMacro("LoadMarkups: failed to instantiate markups storage node by class vtkMRMLMarkupsFiducialNode"); - this->GetMRMLScene()->RemoveNode(markupsNode); + return nullptr; + } + + std::string newNodeName; + if (nodeName && strlen(nodeName)>0) + { + newNodeName = nodeName; + } + else + { + newNodeName = this->GetMRMLScene()->GetUniqueNameByString(storageNode->GetFileNameWithoutExtension(fileName).c_str()); + } + vtkMRMLMarkupsNode* markupsNode = vtkMRMLMarkupsNode::SafeDownCast(this->GetMRMLScene()->AddNewNodeByClass("vtkMRMLMarkupsFiducialNode", newNodeName)); + if (!markupsNode) + { + vtkErrorMacro("LoadMarkups: failed to instantiate markups node by class vtkMRMLMarkupsFiducialNode"); + this->GetMRMLScene()->RemoveNode(storageNode); return nullptr; } diff --git a/Modules/Loadable/Markups/MRML/vtkMRMLMarkupsJsonStorageNode.cxx b/Modules/Loadable/Markups/MRML/vtkMRMLMarkupsJsonStorageNode.cxx index f9930441eac..c49b1b91d75 100644 --- a/Modules/Loadable/Markups/MRML/vtkMRMLMarkupsJsonStorageNode.cxx +++ b/Modules/Loadable/Markups/MRML/vtkMRMLMarkupsJsonStorageNode.cxx @@ -710,7 +710,17 @@ vtkMRMLMarkupsNode* vtkMRMLMarkupsJsonStorageNode::AddNewMarkupsNodeFromFile(con return nullptr; } std::string markupsType = markup["type"].GetString(); - vtkMRMLMarkupsNode* markupsNode = vtkMRMLMarkupsNode::SafeDownCast(scene->AddNewNodeByClass(className.c_str(), nodeName ? nodeName : "")); + + std::string newNodeName; + if (nodeName && strlen(nodeName)>0) + { + newNodeName = nodeName; + } + else + { + newNodeName = scene->GetUniqueNameByString(this->GetFileNameWithoutExtension(filePath).c_str()); + } + vtkMRMLMarkupsNode* markupsNode = vtkMRMLMarkupsNode::SafeDownCast(scene->AddNewNodeByClass(className.c_str(), newNodeName)); if (!markupsNode) { vtkErrorMacro("vtkMRMLMarkupsStorageNode::ReadDataInternal failed: cannot instantiate class '" << className); diff --git a/Modules/Loadable/Markups/qSlicerMarkupsReader.cxx b/Modules/Loadable/Markups/qSlicerMarkupsReader.cxx index 7e90aee09ca..2b747a9f51c 100644 --- a/Modules/Loadable/Markups/qSlicerMarkupsReader.cxx +++ b/Modules/Loadable/Markups/qSlicerMarkupsReader.cxx @@ -102,7 +102,7 @@ bool qSlicerMarkupsReader::load(const IOProperties& properties) Q_ASSERT(properties.contains("fileName")); QString fileName = properties["fileName"].toString(); - QString name = QFileInfo(fileName).baseName(); + QString name; if (properties.contains("name")) { name = properties["name"].toString();