Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
vtkSlicerTerminologiesModuleLogic.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Laboratory for Percutaneous Surgery (PerkLab)
6 Queen's University, Kingston, ON, Canada. All Rights Reserved.
7
8 See COPYRIGHT.txt
9 or http://www.slicer.org/copyright/copyright.txt for details.
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16
17 This file was originally developed by Csaba Pinter, PerkLab, Queen's University
18 and was supported through the Applied Cancer Research Unit program of Cancer Care
19 Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care
20
21==============================================================================*/
22
23#ifndef __vtkSlicerTerminologiesModuleLogic_h
24#define __vtkSlicerTerminologiesModuleLogic_h
25
26// Slicer includes
28
29#include "vtkSlicerTerminologiesModuleLogicExport.h"
30
31class vtkCodedEntry;
33class vtkSegment;
34class vtkStringArray;
38
39class VTK_SLICER_TERMINOLOGIES_LOGIC_EXPORT vtkSlicerTerminologiesModuleLogic :
41{
42public:
45 void PrintSelf(ostream& os, vtkIndent indent) override;
46
49 {
50 public:
52 { };
53 CodeIdentifier(std::string codingSchemeDesignator, std::string codeValue, std::string codeMeaning=std::string())
54 : CodingSchemeDesignator(codingSchemeDesignator)
55 , CodeValue(codeValue)
56 , CodeMeaning(codeMeaning)
57 { };
58 bool IsValid() const
59 {
60 return !CodingSchemeDesignator.empty() && !CodeValue.empty();
61 };
63 std::string CodeValue;
64 std::string CodeMeaning; // Human readable name (not required for ID)
65 };
66
68 static const char* GetNameAutoGeneratedAttributeName() { return "Terminologies.AutoUpdateNodeName"; };
70 static const char* GetColorAutoGeneratedAttributeName() { return "Terminologies.AutoUpdateNodeColor"; };
72 static const char* GetTerminologyEntryAttributeName() { return "Terminologies.TerminologyEntry"; };
75 static const char* GetDefaultTerminologyEntryAttributeName() { return "Terminologies.DefaultTerminologyEntry"; };
76
79 static std::string GetTerminologyEntryAsString(vtkMRMLNode* node);
80 static void SetTerminologyEntryAsString(vtkMRMLNode* node, std::string entryStr);
81
85 static void SetDefaultTerminologyEntryAsString(vtkMRMLNode* node, std::string entryStr);
86
92 bool LoadContextFromFile(std::string filePath);
96 std::string LoadTerminologyFromFile(std::string filePath);
100 std::string LoadRegionContextFromFile(std::string filePath);
105 bool LoadTerminologyFromSegmentDescriptorFile(std::string contextName, std::string filePath);
108 bool LoadRegionContextFromSegmentDescriptorFile(std::string contextName, std::string filePath);
109
111 void GetLoadedTerminologyNames(std::vector<std::string> &terminologyNames);
113 bool IsTerminologyContextLoaded(std::string terminologyName);
115 void GetLoadedTerminologyNames(vtkStringArray* terminologyNames);
117 void GetLoadedRegionContextNames(std::vector<std::string> &regionContextNames);
119 void GetLoadedRegionContextNames(vtkStringArray* regionContextNames);
120
122 std::vector<std::string> GetCompatibleColorNodeIDs();
123
126
131 bool GetCategoriesInTerminology(std::string terminologyName, std::vector<CodeIdentifier>& categories);
136 bool FindCategoriesInTerminology(std::string terminologyName, std::vector<CodeIdentifier>& categories, std::string search);
137
142 std::vector<std::string> FindColorNodes(
143 std::string categoryCodingSchemeDesignator, std::string categoryCodeValue,
144 std::string typeCodingSchemeDesignator, std::string typeCodeValue,
145 std::string typeModifierCodingSchemeDesignator, std::string typeModifierCodeValue,
146 std::string regionCodingSchemeDesignator, std::string regionCodeValue,
147 std::string regionModifierCodingSchemeDesignator, std::string regionModifierCodeValue,
148 std::vector<std::string> preferredColorNodeNames,
149 vtkIntArray* foundColorIndices=nullptr,
150 vtkIntArray* foundPreferredColorNodeIndices=nullptr);
151
157 std::vector<std::string> FindTerminologyNames(
158 std::string categoryCodingSchemeDesignator, std::string categoryCodeValue,
159 std::string typeCodingSchemeDesignator, std::string typeCodeValue,
160 std::string typeModifierCodingSchemeDesignator, std::string typeModifierCodeValue,
161 std::vector<std::string> preferredTerminologyNames,
162 vtkCollection* foundEntries=nullptr,
163 vtkIntArray* foundPreferredTerminologyNameIndices =nullptr);
164
172 std::vector<std::string> preferredTerminologyNames,
173 std::string& foundTerminologyName,
174 std::string& foundColorNodeID,
175 int& foundColorIndex);
176
183 std::string categoryCodingSchemeDesignator, std::string categoryCodeValue,
184 std::string typeCodingSchemeDesignator, std::string typeCodeValue,
185 std::string typeModifierCodingSchemeDesignator, std::string typeModifierCodeValue,
186 std::string regionCodingSchemeDesignator, std::string regionCodeValue,
187 std::string regionModifierCodingSchemeDesignator, std::string regionModifierCodeValue,
188 std::vector<std::string> preferredTerminologyNames,
189 std::string& foundTerminologyName,
190 std::string &foundColorNodeID,
191 int& foundColorIndex);
192
195 std::vector<std::string> FindRegionContextNames(
196 std::string regionCodingSchemeDesignator, std::string regionCodeValue,
197 std::string regionModifierCodingSchemeDesignator, std::string regionModifierCodeValue,
198 std::vector<std::string> preferredRegionContextNames,
199 vtkCollection* foundEntries=nullptr);
200
204 bool GetCategoryInTerminology(std::string terminologyName, CodeIdentifier categoryId, vtkSlicerTerminologyCategory* categoryObject);
206 int GetNumberOfCategoriesInTerminology(std::string terminologyName);
211 bool GetNthCategoryInTerminology(std::string terminologyName, int categoryIndex, vtkSlicerTerminologyCategory* category);
212
217 bool GetTypesInTerminologyCategory(std::string terminologyName, CodeIdentifier categoryId, std::vector<CodeIdentifier>& types);
224 bool FindTypesInTerminologyCategory(std::string terminologyName, CodeIdentifier categoryId, std::vector<CodeIdentifier>& types, std::string search,
225 std::vector<vtkSmartPointer<vtkSlicerTerminologyType>>* typeObjects=nullptr);
229 bool GetTypeInTerminologyCategory(std::string terminologyName, CodeIdentifier categoryId, CodeIdentifier typeId, vtkSlicerTerminologyType* typeObject);
231 int GetNumberOfTypesInTerminologyCategory(std::string terminologyName, vtkSlicerTerminologyCategory* category);
238 bool GetNthTypeInTerminologyCategory(std::string terminologyName, vtkSlicerTerminologyCategory* category, int typeIndex, vtkSlicerTerminologyType* type);
239
244 bool GetTypeModifiersInTerminologyType(std::string terminologyName, CodeIdentifier categoryId, CodeIdentifier typeId, std::vector<CodeIdentifier>& typeModifiers);
248 bool GetTypeModifierInTerminologyType(std::string terminologyName,
249 CodeIdentifier categoryId, CodeIdentifier typeId, CodeIdentifier modifierId, vtkSlicerTerminologyType* typeModifier);
259 bool GetNthTypeModifierInTerminologyType(std::string terminologyName, vtkSlicerTerminologyCategory* category, vtkSlicerTerminologyType* type, int typeModifierIndex, vtkSlicerTerminologyType* typeModifier);
260
265 bool GetRegionsInRegionContext(std::string regionContextName, std::vector<CodeIdentifier>& regions);
268 int GetNumberOfRegionsInRegionContext(std::string regionContextName);
275 bool GetNthRegionInRegionContext(std::string regionContextName, int regionIndex, vtkSlicerTerminologyType* regionObject);
276
279 bool FindRegionsInRegionContext(std::string regionContextName, std::vector<CodeIdentifier>& regions, std::string search);
283 bool GetRegionInRegionContext(std::string regionContextName, CodeIdentifier regionId, vtkSlicerTerminologyType* regionObject);
284
289 bool GetRegionModifiersInRegion(std::string regionContextName, CodeIdentifier regionId, std::vector<CodeIdentifier>& regionModifiers);
293 bool GetRegionModifierInRegion(std::string regionContextName,
294 CodeIdentifier regionId, CodeIdentifier modifierId, vtkSlicerTerminologyType* regionModifier);
297 int GetNumberOfRegionModifierInRegion(std::string regionContextName, vtkSlicerTerminologyType* regionObject);
305 bool GetNthRegionModifierInRegion(std::string regionContextName, vtkSlicerTerminologyType* regionObject,
306 int regionModifierIndex, vtkSlicerTerminologyType* regionModifier);
307
313 bool FindTypeInTerminologyBy3dSlicerLabel(std::string terminologyName, std::string slicerLabel, vtkSlicerTerminologyEntry* entry);
314
317
322
334 static std::string SerializeTerminologyEntry(
335 std::string terminologyContextName,
336 std::string categoryValue, std::string categorySchemeDesignator, std::string categoryMeaning,
337 std::string typeValue, std::string typeSchemeDesignator, std::string typeMeaning,
338 std::string modifierValue, std::string modifierSchemeDesignator, std::string modifierMeaning,
339 std::string regionContextName,
340 std::string regionValue, std::string regionSchemeDesignator, std::string regionMeaning,
341 std::string regionModifierValue, std::string regionModifierSchemeDesignator, std::string regionModifierMeaning );
342
347 static bool DeserializeTerminologyEntry(std::string serializedEntry, vtkSlicerTerminologyEntry* entry);
348
353 std::vector<std::string> preferredTerminologyNames,
354 std::vector<std::string> preferredRegionContextNames);
355
358
362 // These functions are not static because in the future conversion may involve translation tables
363 // to accept equivalent codes as equal (to allow comparing terms between different coding schemes)
366 bool AreTerminologyEntriesEqual(std::string terminologyEntry1, std::string terminologyEntry2);
367 bool AreCodedEntriesEqual(vtkCodedEntry* codedEntry1, vtkCodedEntry* codedEntry2);
371 static bool AreCodedEntriesExactMatch(vtkCodedEntry* codedEntry1, vtkCodedEntry* codedEntry2);
372
382 static int GetColorIndexByTerminology(vtkMRMLColorNode* colorNode, const std::string& terminologyStr, bool ignoreContextName = true);
383
384public:
385 vtkGetStringMacro(UserContextsPath);
386 vtkSetStringMacro(UserContextsPath);
387
388protected:
391
392 void SetMRMLSceneInternal(vtkMRMLScene* newScene) override;
393
400
401protected:
403 char* UserContextsPath{nullptr};
404
405private:
407 void operator=(const vtkSlicerTerminologiesModuleLogic&) = delete;
408
409 class vtkInternal;
410 vtkInternal* Internal;
411 friend class vtkInternal;
412};
413
414#endif
Simple class for storing standard coded entries (coding scheme, value, meaning triplets)
Abstract MRML node to represent color information.
Abstract Superclass for all specific types of MRML nodes.
A set of MRML Nodes that supports serialization and undo/redo.
This class encapsulates a segment that is part of a segmentation.
Definition vtkSegment.h:45
Information needed to uniquely identify a terminology code.
CodeIdentifier(std::string codingSchemeDesignator, std::string codeValue, std::string codeMeaning=std::string())
static bool GetTerminologyEntry(vtkMRMLNode *node, vtkSlicerTerminologyEntry *entry)
bool AreSegmentTerminologyEntriesEqual(vtkSegment *segment1, vtkSegment *segment2)
bool GetTypeModifiersInTerminologyType(std::string terminologyName, CodeIdentifier categoryId, CodeIdentifier typeId, std::vector< CodeIdentifier > &typeModifiers)
char * UserContextsPath
The path from which the json files are automatically loaded on startup.
bool GetCategoryInTerminology(std::string terminologyName, CodeIdentifier categoryId, vtkSlicerTerminologyCategory *categoryObject)
void GetLoadedTerminologyNames(vtkStringArray *terminologyNames)
Python accessor variant of.
static std::string SerializeTerminologyEntry(vtkSlicerTerminologyEntry *entry)
void PrintSelf(ostream &os, vtkIndent indent) override
static vtkSlicerTerminologiesModuleLogic * New()
bool AreTerminologyEntriesEqual(std::string terminologyEntry1, std::string terminologyEntry2)
static void SetTerminologyEntry(vtkMRMLNode *node, vtkSlicerTerminologyEntry *entry)
static bool AreCodedEntriesExactMatch(vtkCodedEntry *codedEntry1, vtkCodedEntry *codedEntry2)
static std::string SerializeTerminologyEntry(std::string terminologyContextName, std::string categoryValue, std::string categorySchemeDesignator, std::string categoryMeaning, std::string typeValue, std::string typeSchemeDesignator, std::string typeMeaning, std::string modifierValue, std::string modifierSchemeDesignator, std::string modifierMeaning, std::string regionContextName, std::string regionValue, std::string regionSchemeDesignator, std::string regionMeaning, std::string regionModifierValue, std::string regionModifierSchemeDesignator, std::string regionModifierMeaning)
bool UpdateEntryFromLoadedTerminologies(vtkSlicerTerminologyEntry *entry, std::vector< std::string > preferredTerminologyNames, std::vector< std::string > preferredRegionContextNames)
std::vector< std::string > FindRegionContextNames(std::string regionCodingSchemeDesignator, std::string regionCodeValue, std::string regionModifierCodingSchemeDesignator, std::string regionModifierCodeValue, std::vector< std::string > preferredRegionContextNames, vtkCollection *foundEntries=nullptr)
bool FindFirstColorNodeOrTerminology(vtkSlicerTerminologyEntry *entry, std::vector< std::string > preferredTerminologyNames, std::string &foundTerminologyName, std::string &foundColorNodeID, int &foundColorIndex)
int GetNumberOfRegionsInRegionContext(std::string regionContextName)
int GetNumberOfTypeModifiersInTerminologyType(std::string terminologyName, vtkSlicerTerminologyCategory *category, vtkSlicerTerminologyType *type)
Get number of type modifiers for the chosen category and type in a terminology.
static void SetDefaultTerminologyEntry(vtkMRMLNode *node, vtkSlicerTerminologyEntry *entry)
bool FindFirstColorNodeOrTerminology(std::string categoryCodingSchemeDesignator, std::string categoryCodeValue, std::string typeCodingSchemeDesignator, std::string typeCodeValue, std::string typeModifierCodingSchemeDesignator, std::string typeModifierCodeValue, std::string regionCodingSchemeDesignator, std::string regionCodeValue, std::string regionModifierCodingSchemeDesignator, std::string regionModifierCodeValue, std::vector< std::string > preferredTerminologyNames, std::string &foundTerminologyName, std::string &foundColorNodeID, int &foundColorIndex)
static int GetColorIndexByTerminology(vtkMRMLColorNode *colorNode, const std::string &terminologyStr, bool ignoreContextName=true)
bool GetNthTypeInTerminologyCategory(std::string terminologyName, vtkSlicerTerminologyCategory *category, int typeIndex, vtkSlicerTerminologyType *type)
static const char * GetColorAutoGeneratedAttributeName()
Node attribute name for color auto generated.
vtkMRMLColorNode * GetFirstCompatibleColorNodeByName(std::string name)
Return the first compatible color node that has a matching name.
bool GetCategoriesInTerminology(std::string terminologyName, std::vector< CodeIdentifier > &categories)
bool IsTerminologyContextLoaded(std::string terminologyName)
Returns true if the terminology name is loaded.
void GetLoadedRegionContextNames(vtkStringArray *regionContextNames)
Python accessor variant of.
bool FindTypesInTerminologyCategory(std::string terminologyName, CodeIdentifier categoryId, std::vector< CodeIdentifier > &types, std::string search, std::vector< vtkSmartPointer< vtkSlicerTerminologyType > > *typeObjects=nullptr)
int GetNumberOfCategoriesInTerminology(std::string terminologyName)
Get number of categories in a terminology.
bool GetTypesInTerminologyCategory(std::string terminologyName, CodeIdentifier categoryId, std::vector< CodeIdentifier > &types)
int GetNumberOfTypesInTerminologyCategory(std::string terminologyName, vtkSlicerTerminologyCategory *category)
Get number of types in the chosen category in a terminology.
bool FindCategoriesInTerminology(std::string terminologyName, std::vector< CodeIdentifier > &categories, std::string search)
bool AreTerminologyEntriesEqual(vtkSlicerTerminologyEntry *entry1, vtkSlicerTerminologyEntry *entry2)
void LoadUserContexts()
Load terminologies and region contexts from the user settings directory.
std::vector< std::string > FindTerminologyNames(std::string categoryCodingSchemeDesignator, std::string categoryCodeValue, std::string typeCodingSchemeDesignator, std::string typeCodeValue, std::string typeModifierCodingSchemeDesignator, std::string typeModifierCodeValue, std::vector< std::string > preferredTerminologyNames, vtkCollection *foundEntries=nullptr, vtkIntArray *foundPreferredTerminologyNameIndices=nullptr)
std::string LoadTerminologyFromFile(std::string filePath)
bool GetRegionModifiersInRegion(std::string regionContextName, CodeIdentifier regionId, std::vector< CodeIdentifier > &regionModifiers)
bool FindTypeInTerminologyBy3dSlicerLabel(std::string terminologyName, std::string slicerLabel, vtkSlicerTerminologyEntry *entry)
bool GetRegionInRegionContext(std::string regionContextName, CodeIdentifier regionId, vtkSlicerTerminologyType *regionObject)
void GetLoadedTerminologyNames(std::vector< std::string > &terminologyNames)
Get context names of loaded terminologies.
bool GetNthRegionModifierInRegion(std::string regionContextName, vtkSlicerTerminologyType *regionObject, int regionModifierIndex, vtkSlicerTerminologyType *regionModifier)
bool FindRegionsInRegionContext(std::string regionContextName, std::vector< CodeIdentifier > &regions, std::string search)
bool GetNthRegionInRegionContext(std::string regionContextName, int regionIndex, vtkSlicerTerminologyType *regionObject)
static std::string GetDefaultTerminologyEntryAsString(vtkMRMLNode *node)
static bool GetDefaultTerminologyEntry(vtkMRMLNode *node, vtkSlicerTerminologyEntry *entry)
bool GetRegionModifierInRegion(std::string regionContextName, CodeIdentifier regionId, CodeIdentifier modifierId, vtkSlicerTerminologyType *regionModifier)
bool GetNthCategoryInTerminology(std::string terminologyName, int categoryIndex, vtkSlicerTerminologyCategory *category)
static std::string GetTerminologyEntryAsString(vtkMRMLNode *node)
static CodeIdentifier GetCodeIdentifierFromCodedEntry(vtkCodedEntry *entry)
Convert terminology category, type, etc. object to code identifier.
static std::string GetInfoStringFromTerminologyEntry(vtkSlicerTerminologyEntry *entry)
Assemble human readable info string from a terminology entry, for example for tooltips.
std::string LoadRegionContextFromFile(std::string filePath)
bool GetTypeModifierInTerminologyType(std::string terminologyName, CodeIdentifier categoryId, CodeIdentifier typeId, CodeIdentifier modifierId, vtkSlicerTerminologyType *typeModifier)
bool LoadRegionContextFromSegmentDescriptorFile(std::string contextName, std::string filePath)
void GetLoadedRegionContextNames(std::vector< std::string > &regionContextNames)
Get context names of loaded region contexts.
bool GetNthTypeModifierInTerminologyType(std::string terminologyName, vtkSlicerTerminologyCategory *category, vtkSlicerTerminologyType *type, int typeModifierIndex, vtkSlicerTerminologyType *typeModifier)
void SetMRMLSceneInternal(vtkMRMLScene *newScene) override
static const char * GetNameAutoGeneratedAttributeName()
Node attribute name for name auto generated.
static void SetTerminologyEntryAsString(vtkMRMLNode *node, std::string entryStr)
bool GetTypeInTerminologyCategory(std::string terminologyName, CodeIdentifier categoryId, CodeIdentifier typeId, vtkSlicerTerminologyType *typeObject)
bool LoadContextFromFile(std::string filePath)
int GetNumberOfRegionModifierInRegion(std::string regionContextName, vtkSlicerTerminologyType *regionObject)
void LoadDefaultRegionContexts()
Load default region context dictionaries from JSON into.
static void SetDefaultTerminologyEntryAsString(vtkMRMLNode *node, std::string entryStr)
static bool DeserializeTerminologyEntry(std::string serializedEntry, vtkSlicerTerminologyEntry *entry)
std::vector< std::string > FindColorNodes(std::string categoryCodingSchemeDesignator, std::string categoryCodeValue, std::string typeCodingSchemeDesignator, std::string typeCodeValue, std::string typeModifierCodingSchemeDesignator, std::string typeModifierCodeValue, std::string regionCodingSchemeDesignator, std::string regionCodeValue, std::string regionModifierCodingSchemeDesignator, std::string regionModifierCodeValue, std::vector< std::string > preferredColorNodeNames, vtkIntArray *foundColorIndices=nullptr, vtkIntArray *foundPreferredColorNodeIndices=nullptr)
bool AreCodedEntriesEqual(vtkCodedEntry *codedEntry1, vtkCodedEntry *codedEntry2)
bool LoadTerminologyFromSegmentDescriptorFile(std::string contextName, std::string filePath)
static const char * GetTerminologyEntryAttributeName()
Terminology entry (serialized to string)
bool GetRegionsInRegionContext(std::string regionContextName, std::vector< CodeIdentifier > &regions)
std::vector< std::string > GetCompatibleColorNodeIDs()
Get list of color node IDs that contain terminology information.
void LoadDefaultTerminologies()
Load default terminology dictionaries from JSON into.
Terminology property category object.
Terminology property type object.