# Difference and use cases for \`vtkMRMLProceduralColorNode\` and \`vtkMRMLColorTableNode\`

**URL:** <https://discourse.slicer.org/t/difference-and-use-cases-for-vtkmrmlproceduralcolornode-and-vtkmrmlcolortablenode/24602>\
**Category:** Development\
**Created:** [August 2, 2022, 10:35am UTC](https://discourse.slicer.org/t/difference-and-use-cases-for-vtkmrmlproceduralcolornode-and-vtkmrmlcolortablenode/24602 "2022-08-02T10:35:07Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![keri](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/keri/32/11618_2.png) [@keri](https://discourse.slicer.org/u/keri)\
**Post date:** [August 2, 2022, 10:35am UTC](https://discourse.slicer.org/t/difference-and-use-cases-for-vtkmrmlproceduralcolornode-and-vtkmrmlcolortablenode/24602/1 "2022-08-02T10:35:07Z")

</div>

Hi,

I’m wondering what is the difference between `vtkMRMLProceduralColorNode` and `vtkMRMLColorTableNode`?  
For example I can see that `vtkMRMLColorTableNode` creates discrete color map while `vtkMRMLProceduralColorNode` creates continous.

Maybe they serve to different purposes?

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [August 2, 2022, 10:57am UTC](https://discourse.slicer.org/t/difference-and-use-cases-for-vtkmrmlproceduralcolornode-and-vtkmrmlcolortablenode/24602/2 "2022-08-02T10:57:16Z")

</div>

All these mode types can store both discrete and continuous (depending on what you set inside - color transfer function or lookup table).

Procedural color node is a special kind of color node that does not need to be saved into a file because the color function or table entries are generated programmatically.

---

<div class="post-metadata">

**Author:** ![keri](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/keri/32/11618_2.png) [@keri](https://discourse.slicer.org/u/keri)\
**Post date:** [August 2, 2022, 2:56pm UTC](https://discourse.slicer.org/t/difference-and-use-cases-for-vtkmrmlproceduralcolornode-and-vtkmrmlcolortablenode/24602/3 "2022-08-02T14:56:52Z")

</div>

Thank you, that make sense

I just can’t find a method that triggers discrete or contigous color.  
This is my attemt that results in discrete color map:

```auto
  vtkNew<vtkMRMLColorTableNode> bwrColorTable;

  bwrColorTable->SetType(vtkMRMLColorTableNode::User);
  bwrColorTable->HideFromEditorsOff(); // make the color table selectable in the GUI outside Colors module
  bwrColorTable->SetSaveWithScene(true);
  bwrColorTable->SetNumberOfColors(5);
  bwrColorTable->GetLookupTable()->SetTableRange(0.,1.);

  bwrColorTable->SetColor(0, 0.0, 0.0, 0.5, 1.0);
  bwrColorTable->SetColor(1, 0.0, 0.375, 0.8314, 0.5);
  bwrColorTable->SetColor(2, 1.0, 1.0, 1.0, 0.0);
  bwrColorTable->SetColor(3, 0.8314, 0.375, 0.0, 0.5);
  bwrColorTable->SetColor(4, 0.5, 0.0, 0.0, 1.0);

  bwrColorTable->SetName("BWR");
  bwrColorTable->SetScene(this->GetMRMLScene());
  bwrColorTable->SetHideFromEditors(false);
  this->GetMRMLScene()->AddNode(bwrColorTable);

```

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [August 29, 2022, 3:34am UTC](https://discourse.slicer.org/t/difference-and-use-cases-for-vtkmrmlproceduralcolornode-and-vtkmrmlcolortablenode/24602/4 "2022-08-29T03:34:27Z")

</div>

You can find examples in the script repository:

- [Create discrete color table](https://slicer.readthedocs.io/en/latest/developer_guide/script_repository.html#create-color-table-node)
- [Create continuous colormap](https://slicer.readthedocs.io/en/latest/developer_guide/script_repository.html#create-custom-color-map-and-display-color-legend)
