iMSTK
Interactive Medical Simulation Toolkit
imstkVolumeRenderMaterialPresets.cpp
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #include "imstkVolumeRenderMaterialPresets.h"
8 #include "imstkVolumeRenderMaterial.h"
9 
10 #include <vtkColorTransferFunction.h>
11 #include <vtkPiecewiseFunction.h>
12 #include <vtkSmartPointer.h>
13 #include <vtkVolumeProperty.h>
14 
15 namespace imstk
16 {
17 std::shared_ptr<VolumeRenderMaterial>
19 {
20  auto mat = std::make_shared<VolumeRenderMaterial>();
21  auto volProp = mat->getVolumeProperty();
22  auto ctf = vtkSmartPointer<vtkColorTransferFunction>::New();
23  volProp->SetColor(ctf);
24  auto of = vtkSmartPointer<vtkPiecewiseFunction>::New();
25  volProp->SetScalarOpacity(of);
26  auto gf = vtkSmartPointer<vtkPiecewiseFunction>::New();
27  volProp->SetGradientOpacity(gf);
28 
29  switch (p)
30  {
31  case Presets::CT_AAA:
32  {
33  // color
34  ctf->AddRGBPoint(-3024, 0.0, 0.0, 0.0);
35  ctf->AddRGBPoint(143.556, 0.615686, 0.356863, 0.184314);
36  ctf->AddRGBPoint(166.222, 0.882353, 0.603922, 0.290196);
37  ctf->AddRGBPoint(214.389, 1, 1, 1);
38  ctf->AddRGBPoint(419.736, 1, 0.937033, 0.954531);
39  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
40 
41  // scalar opacity
42  of->AddPoint(-3024, 0);
43  of->AddPoint(143.556, 0);
44  of->AddPoint(166.222, 0.686275);
45  of->AddPoint(214.389, 0.696078);
46  of->AddPoint(419.736, 0.833333);
47  of->AddPoint(3071, 0.803922);
48 
49  // gradient opacity
50  gf->AddPoint(0, 1);
51  gf->AddPoint(255, 1);
52 
53  // lighting / material properties
54  volProp->SetAmbient(0.1);
55  volProp->SetDiffuse(0.9);
56  volProp->SetInterpolationTypeToLinear();
57  volProp->SetShade(1);
58  volProp->SetSpecular(0.2);
59  volProp->SetSpecularPower(10);
60 
61  // blend mode
62  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
63 
64  break;
65  }
66  case Presets::CT_AAA2:
67  {
68  // color
69  ctf->AddRGBPoint(-3024, 0, 0, 0);
70  ctf->AddRGBPoint(129.542, 0.54902, 0.25098, 0.14902);
71  ctf->AddRGBPoint(145.244, 0.6, 0.627451, 0.843137);
72  ctf->AddRGBPoint(157.02, 0.890196, 0.47451, 0.6);
73  ctf->AddRGBPoint(169.918, 0.992157, 0.870588, 0.392157);
74  ctf->AddRGBPoint(395.575, 1, 0.886275, 0.658824);
75  ctf->AddRGBPoint(1578.73, 1, 0.829256, 0.957922);
76  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
77 
78  // scalar opacity
79  of->AddPoint(-3024, 0);
80  of->AddPoint(129.542, 0);
81  of->AddPoint(145.244, 0.166667);
82  of->AddPoint(157.02, 0.5);
83  of->AddPoint(169.918, 0.627451);
84  of->AddPoint(395.575, 0.8125);
85  of->AddPoint(1578.73, 0.8125);
86  of->AddPoint(3071, 0.8125);
87 
88  // gradient opacity
89  gf->AddPoint(0, 1);
90  gf->AddPoint(255, 1);
91 
92  // lighting / material properties
93  volProp->SetAmbient(0.1);
94  volProp->SetDiffuse(0.9);
95  volProp->SetInterpolationTypeToLinear();
96  volProp->SetShade(1);
97  volProp->SetSpecular(0.2);
98  volProp->SetSpecularPower(10);
99 
100  // blend mode
101  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
102 
103  break;
104  }
105  case Presets::CT_BONE:
106  {
107  // color
108  ctf->AddRGBPoint(-3024, 0, 0, 0);
109  ctf->AddRGBPoint(-16.4458, 0.729412, 0.254902, 0.301961);
110  ctf->AddRGBPoint(641.385, 0.905882, 0.815686, 0.552941);
111  ctf->AddRGBPoint(3071, 1, 1, 1);
112 
113  // scalar opacity
114  of->AddPoint(-3024, 0);
115  of->AddPoint(-16.4458, 0);
116  of->AddPoint(641.385, 0.715686);
117  of->AddPoint(3071, 0.705882);
118 
119  // gradient opacity
120  gf->AddPoint(0, 1);
121  gf->AddPoint(255, 1);
122 
123  // lighting / material properties
124  volProp->SetAmbient(0.1);
125  volProp->SetDiffuse(0.9);
126  volProp->SetInterpolationTypeToLinear();
127  volProp->SetShade(1);
128  volProp->SetSpecular(0.2);
129  volProp->SetSpecularPower(10);
130 
131  // blend mode
132  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
133 
134  break;
135  }
136  case Presets::CT_BONES:
137  {
138  // color
139  ctf->AddRGBPoint(-1000, 0.3, 0.3, 1);
140  ctf->AddRGBPoint(-488, 0.3, 1, 0.3);
141  ctf->AddRGBPoint(463.28, 1, 0, 0);
142  ctf->AddRGBPoint(659.15, 1, 0.912535, 0.0374849);
143  ctf->AddRGBPoint(953, 1, 0.3, 0.3);
144 
145  // scalar opacity
146  of->AddPoint(152.19, 0);
147  of->AddPoint(278.93, 0.190476);
148  of->AddPoint(952, 0.2);
149 
150  // gradient opacity
151  gf->AddPoint(0, 1);
152  gf->AddPoint(255, 1);
153 
154  // lighting / material properties
155  volProp->SetAmbient(0.2);
156  volProp->SetDiffuse(1);
157  volProp->SetInterpolationTypeToLinear();
158  volProp->SetShade(1);
159  volProp->SetSpecular(0);
160  volProp->SetSpecularPower(10);
161 
162  // blend mode
163  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
164 
165  break;
166  }
167  case Presets::CT_CARDIAC:
168  {
169  // color
170  ctf->AddRGBPoint(-3024, 0, 0, 0);
171  ctf->AddRGBPoint(-77.6875, 0.54902, 0.25098, 0.14902);
172  ctf->AddRGBPoint(94.9518, 0.882353, 0.603922, 0.290196);
173  ctf->AddRGBPoint(179.052, 1, 0.937033, 0.954531);
174  ctf->AddRGBPoint(260.439, 0.615686, 0, 0);
175  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
176 
177  // scalar opacity
178  of->AddPoint(-3024, 0);
179  of->AddPoint(-77.6875, 0);
180  of->AddPoint(94.9518, 0.285714);
181  of->AddPoint(179.052, 0.553571);
182  of->AddPoint(260.439, 0.848214);
183  of->AddPoint(3071, 0.875);
184 
185  // gradient opacity
186  gf->AddPoint(0, 1);
187  gf->AddPoint(255, 1);
188 
189  // lighting / material properties
190  volProp->SetAmbient(0.1);
191  volProp->SetDiffuse(0.9);
192  volProp->SetInterpolationTypeToLinear();
193  volProp->SetShade(1);
194  volProp->SetSpecular(0.2);
195  volProp->SetSpecularPower(10);
196 
197  // blend mode
198  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
199 
200  break;
201  }
202  case Presets::CT_CARDIAC2:
203  {
204  // color
205  ctf->AddRGBPoint(-3024, 0, 0, 0);
206  ctf->AddRGBPoint(42.8964, 0.54902, 0.25098, 0.14902);
207  ctf->AddRGBPoint(163.488, 0.917647, 0.639216, 0.0588235);
208  ctf->AddRGBPoint(277.642, 1, 0.878431, 0.623529);
209  ctf->AddRGBPoint(1587, 1, 1, 1);
210  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
211 
212  // scalar opacity
213  of->AddPoint(-3024, 0);
214  of->AddPoint(42.8964, 0);
215  of->AddPoint(163.488, 0.428571);
216  of->AddPoint(277.642, 0.776786);
217  of->AddPoint(1587, 0.754902);
218  of->AddPoint(3071, 0.754902);
219 
220  // gradient opacity
221  gf->AddPoint(0, 1);
222  gf->AddPoint(255, 1);
223 
224  // lighting / material properties
225  volProp->SetAmbient(0.1);
226  volProp->SetDiffuse(0.9);
227  volProp->SetInterpolationTypeToLinear();
228  volProp->SetShade(1);
229  volProp->SetSpecular(0.2);
230  volProp->SetSpecularPower(10);
231 
232  // blend mode
233  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
234 
235  break;
236  }
237  case Presets::CT_CARDIAC3:
238  {
239  // color
240  ctf->AddRGBPoint(-3024, 0, 0, 0);
241  ctf->AddRGBPoint(-86.9767, 0, 0.25098, 1);
242  ctf->AddRGBPoint(45.3791, 1, 0, 0);
243  ctf->AddRGBPoint(139.919, 1, 0.894893, 0.894893);
244  ctf->AddRGBPoint(347.907, 1, 1, 0.25098);
245  ctf->AddRGBPoint(1224.16, 1, 1, 1);
246  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
247 
248  // scalar opacity
249  of->AddPoint(-3024, 0);
250  of->AddPoint(-86.9767, 0);
251  of->AddPoint(45.3791, 0.169643);
252  of->AddPoint(139.919, 0.589286);
253  of->AddPoint(347.907, 0.607143);
254  of->AddPoint(1224.16, 0.607143);
255  of->AddPoint(3071, 0.616071);
256 
257  // gradient opacity
258  gf->AddPoint(0, 1);
259  gf->AddPoint(255, 1);
260 
261  // lighting / material properties
262  volProp->SetAmbient(0.1);
263  volProp->SetDiffuse(0.9);
264  volProp->SetInterpolationTypeToLinear();
265  volProp->SetShade(1);
266  volProp->SetSpecular(0.2);
267  volProp->SetSpecularPower(10);
268 
269  // blend mode
270  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
271 
272  break;
273  }
274  case Presets::CT_CHEST_CONTRAST_ENHANCED:
275  {
276  // color
277  ctf->AddRGBPoint(-3024, 0, 0, 0);
278  ctf->AddRGBPoint(67.0106, 0.54902, 0.25098, 0.14902);
279  ctf->AddRGBPoint(251.105, 0.882353, 0.603922, 0.290196);
280  ctf->AddRGBPoint(439.291, 1, 0.937033, 0.954531);
281  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
282 
283  // scalar opacity
284  of->AddPoint(-3024, 0);
285  of->AddPoint(67.0106, 0);
286  of->AddPoint(251.105, 0.446429);
287  of->AddPoint(439.291, 0.625);
288  of->AddPoint(3071, 0.616071);
289 
290  // gradient opacity
291  gf->AddPoint(0, 1);
292  gf->AddPoint(255, 1);
293 
294  // lighting / material properties
295  volProp->SetAmbient(0.1);
296  volProp->SetDiffuse(0.9);
297  volProp->SetInterpolationTypeToLinear();
298  volProp->SetShade(1);
299  volProp->SetSpecular(0.2);
300  volProp->SetSpecularPower(10);
301 
302  // blend mode
303  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
304 
305  break;
306  }
307  case Presets::CT_CHEST_VESSELS:
308  {
309  // color
310  ctf->AddRGBPoint(-3024, 0, 0, 0);
311  ctf->AddRGBPoint(-1278.35, 0.54902, 0.25098, 0.14902);
312  ctf->AddRGBPoint(22.8277, 0.882353, 0.603922, 0.290196);
313  ctf->AddRGBPoint(439.291, 1, 0.937033, 0.954531);
314  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
315 
316  // scalar opacity
317  of->AddPoint(-3024, 0);
318  of->AddPoint(-1278.35, 0);
319  of->AddPoint(22.8277, 0.428571);
320  of->AddPoint(439.291, 0.625);
321  of->AddPoint(3071, 0.616071);
322 
323  // gradient opacity
324  gf->AddPoint(0, 1);
325  gf->AddPoint(255, 1);
326 
327  // lighting / material properties
328  volProp->SetAmbient(0.1);
329  volProp->SetDiffuse(1);
330  volProp->SetInterpolationTypeToLinear();
331  volProp->SetShade(1);
332  volProp->SetSpecular(0);
333  volProp->SetSpecularPower(1);
334 
335  // blend mode
336  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
337 
338  break;
339  }
340  case Presets::CT_CORONARY_ARTERIES:
341  {
342  // color
343  ctf->AddRGBPoint(-2048, 0, 0, 0);
344  ctf->AddRGBPoint(136.47, 0, 0, 0);
345  ctf->AddRGBPoint(159.215, 0.159804, 0.159804, 0.159804);
346  ctf->AddRGBPoint(318.43, 0.764706, 0.764706, 0.764706);
347  ctf->AddRGBPoint(478.693, 1, 1, 1);
348  ctf->AddRGBPoint(3661, 1, 1, 1);
349 
350  // scalar opacity
351  of->AddPoint(-2048, 0);
352  of->AddPoint(136.47, 0);
353  of->AddPoint(159.215, 0.258929);
354  of->AddPoint(318.43, 0.571429);
355  of->AddPoint(478.693, 0.776786);
356  of->AddPoint(3661, 1);
357 
358  // gradient opacity
359  gf->AddPoint(0, 1);
360  gf->AddPoint(255, 1);
361 
362  // lighting / material properties
363  volProp->SetAmbient(0.2);
364  volProp->SetDiffuse(1);
365  volProp->SetInterpolationTypeToLinear();
366  volProp->SetShade(0);
367  volProp->SetSpecular(0);
368  volProp->SetSpecularPower(1);
369 
370  // blend mode
371  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
372 
373  break;
374  }
375  case Presets::CT_CORONARY_ARTERIES_2:
376  {
377  // color
378  ctf->AddRGBPoint(-2048, 0, 0, 0);
379  ctf->AddRGBPoint(142.677, 0, 0, 0);
380  ctf->AddRGBPoint(145.016, 0.615686, 0, 0.0156863);
381  ctf->AddRGBPoint(192.174, 0.909804, 0.454902, 0);
382  ctf->AddRGBPoint(217.24, 0.972549, 0.807843, 0.611765);
383  ctf->AddRGBPoint(384.347, 0.909804, 0.909804, 1);
384  ctf->AddRGBPoint(3661, 1, 1, 1);
385 
386  // scalar opacity
387  of->AddPoint(-2048, 0);
388  of->AddPoint(142.677, 0);
389  of->AddPoint(145.016, 0.116071);
390  of->AddPoint(192.174, 0.5625);
391  of->AddPoint(217.24, 0.776786);
392  of->AddPoint(384.347, 0.830357);
393  of->AddPoint(3661, 0.830357);
394 
395  // gradient opacity
396  gf->AddPoint(0, 1);
397  gf->AddPoint(255, 1);
398 
399  // lighting / material properties
400  volProp->SetAmbient(0.2);
401  volProp->SetDiffuse(1);
402  volProp->SetInterpolationTypeToLinear();
403  volProp->SetShade(1);
404  volProp->SetSpecular(0);
405  volProp->SetSpecularPower(1);
406 
407  // blend mode
408  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
409 
410  break;
411  }
412  case Presets::CT_CORONARY_ARTERIES_3:
413  {
414  // color
415  ctf->AddRGBPoint(-2048, 0, 0, 0);
416  ctf->AddRGBPoint(128.643, 0, 0, 0);
417  ctf->AddRGBPoint(129.982, 0.615686, 0, 0.0156863);
418  ctf->AddRGBPoint(173.636, 0.909804, 0.454902, 0);
419  ctf->AddRGBPoint(255.884, 0.886275, 0.886275, 0.886275);
420  ctf->AddRGBPoint(584.878, 0.968627, 0.968627, 0.968627);
421  ctf->AddRGBPoint(3661, 1, 1, 1);
422 
423  // scalar opacity
424  of->AddPoint(-2048, 0);
425  of->AddPoint(128.643, 0);
426  of->AddPoint(129.982, 0.0982143);
427  of->AddPoint(173.636, 0.669643);
428  of->AddPoint(255.884, 0.857143);
429  of->AddPoint(584.878, 0.866071);
430  of->AddPoint(3661, 1);
431 
432  // gradient opacity
433  gf->AddPoint(0, 1);
434  gf->AddPoint(255, 1);
435 
436  // lighting / material properties
437  volProp->SetAmbient(0.1);
438  volProp->SetDiffuse(0.9);
439  volProp->SetInterpolationTypeToLinear();
440  volProp->SetShade(1);
441  volProp->SetSpecular(0.2);
442  volProp->SetSpecularPower(10);
443 
444  // blend mode
445  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
446 
447  break;
448  }
449  case Presets::CT_VOLUME_BONE:
450  {
451  // color
452  ctf->AddRGBPoint(-2048, 0, 0, 0);
453  ctf->AddRGBPoint(-451, 0, 0, 0);
454  ctf->AddRGBPoint(-450, 0.0556356, 0.0556356, 0.0556356);
455  ctf->AddRGBPoint(1050, 1, 1, 1);
456  ctf->AddRGBPoint(3661, 1, 1, 1);
457 
458  // scalar opacity
459  of->AddPoint(-2048, 0);
460  of->AddPoint(-451, 0);
461  of->AddPoint(-450, 1);
462  of->AddPoint(1050, 1);
463  of->AddPoint(3661, 1);
464 
465  // gradient opacity
466  gf->AddPoint(0, 1);
467  gf->AddPoint(255, 1);
468 
469  // lighting / material properties
470  volProp->SetAmbient(0.2);
471  volProp->SetDiffuse(1);
472  volProp->SetInterpolationTypeToLinear();
473  volProp->SetShade(0);
474  volProp->SetSpecular(0);
475  volProp->SetSpecularPower(1);
476 
477  // blend mode
478  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
479 
480  break;
481  }
482  case Presets::CT_FAT:
483  {
484  // color
485  ctf->AddRGBPoint(-1000, 0.3, 0.3, 1);
486  ctf->AddRGBPoint(-497.5, 0.3, 1, 0.3);
487  ctf->AddRGBPoint(-99, 0, 0, 1);
488  ctf->AddRGBPoint(-76.946, 0, 1, 0);
489  ctf->AddRGBPoint(-65.481, 0.835431, 0.888889, 0.0165387);
490  ctf->AddRGBPoint(83.89, 1, 0, 0);
491  ctf->AddRGBPoint(463.28, 1, 0, 0);
492  ctf->AddRGBPoint(659.15, 1, 0.912535, 0.0374849);
493  ctf->AddRGBPoint(2952, 1, 0.300267, 0.299886);
494 
495  // scalar opacity
496  of->AddPoint(-1000, 0);
497  of->AddPoint(-100, 0);
498  of->AddPoint(-99, 0.15);
499  of->AddPoint(-60, 0.15);
500  of->AddPoint(-59, 0);
501  of->AddPoint(101.2, 0);
502  of->AddPoint(952, 0);
503 
504  // gradient opacity
505  gf->AddPoint(0, 1);
506  gf->AddPoint(255, 1);
507 
508  // lighting / material properties
509  volProp->SetAmbient(0.2);
510  volProp->SetDiffuse(1);
511  volProp->SetInterpolationTypeToLinear();
512  volProp->SetShade(0);
513  volProp->SetSpecular(0);
514  volProp->SetSpecularPower(1);
515 
516  // blend mode
517  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
518 
519  break;
520  }
521  case Presets::CT_LIVER_VASCULATURE:
522  {
523  // color
524  ctf->AddRGBPoint(-2048, 0, 0, 0);
525  ctf->AddRGBPoint(149.113, 0, 0, 0);
526  ctf->AddRGBPoint(157.884, 0.501961, 0.25098, 0);
527  ctf->AddRGBPoint(339.96, 0.695386, 0.59603, 0.36886);
528  ctf->AddRGBPoint(388.526, 0.854902, 0.85098, 0.827451);
529  ctf->AddRGBPoint(1197.95, 1, 1, 1);
530  ctf->AddRGBPoint(3661, 1, 1, 1);
531 
532  // scalar opacity
533  of->AddPoint(-2048, 0);
534  of->AddPoint(149.113, 0);
535  of->AddPoint(157.884, 0.482143);
536  of->AddPoint(339.96, 0.660714);
537  of->AddPoint(388.526, 0.830357);
538  of->AddPoint(1197.95, 0.839286);
539  of->AddPoint(3661, 0.848214);
540 
541  // gradient opacity
542  gf->AddPoint(0, 1);
543  gf->AddPoint(255, 1);
544 
545  // lighting / material properties
546  volProp->SetAmbient(0.2);
547  volProp->SetDiffuse(1);
548  volProp->SetInterpolationTypeToLinear();
549  volProp->SetShade(0);
550  volProp->SetSpecular(0);
551  volProp->SetSpecularPower(1);
552 
553  // blend mode
554  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
555 
556  break;
557  }
558  case Presets::CT_LUNG:
559  {
560  // color
561  ctf->AddRGBPoint(-1000, 0.3, 0.3, 1);
562  ctf->AddRGBPoint(-600, 0, 0, 1);
563  ctf->AddRGBPoint(-530, 0.134704, 0.781726, 0.0724558);
564  ctf->AddRGBPoint(-460, 0.929244, 1, 0.109473);
565  ctf->AddRGBPoint(-400, 0.888889, 0.254949, 0.0240258);
566  ctf->AddRGBPoint(2952, 1, 0.3, 0.3);
567 
568  // scalar opacity
569  of->AddPoint(-1000, 0);
570  of->AddPoint(-600, 0);
571  of->AddPoint(-599, 0.15);
572  of->AddPoint(-400, 0.15);
573  of->AddPoint(-399, 0);
574  of->AddPoint(2952, 0);
575 
576  // gradient opacity
577  gf->AddPoint(0, 1);
578  gf->AddPoint(255, 1);
579 
580  // lighting / material properties
581  volProp->SetAmbient(0.2);
582  volProp->SetDiffuse(1);
583  volProp->SetInterpolationTypeToLinear();
584  volProp->SetShade(1);
585  volProp->SetSpecular(0);
586  volProp->SetSpecularPower(1);
587 
588  // blend mode
589  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
590 
591  break;
592  }
593  case Presets::CT_MIP:
594  {
595  // color
596  ctf->AddRGBPoint(-3024, 0, 0, 0);
597  ctf->AddRGBPoint(-637.62, 1, 1, 1);
598  ctf->AddRGBPoint(700, 1, 1, 1);
599  ctf->AddRGBPoint(3071, 1, 1, 1);
600 
601  // scalar opacity
602  of->AddPoint(-3024, 0);
603  of->AddPoint(-637.62, 0);
604  of->AddPoint(700, 1);
605  of->AddPoint(3071, 1);
606 
607  // gradient opacity
608  gf->AddPoint(0, 1);
609  gf->AddPoint(255, 1);
610 
611  // lighting / material properties
612  volProp->SetAmbient(0.1);
613  volProp->SetDiffuse(0.9);
614  volProp->SetInterpolationTypeToLinear();
615  volProp->SetShade(0);
616  volProp->SetSpecular(0.2);
617  volProp->SetSpecularPower(10);
618 
619  // blend mode
620  mat->setBlendMode(VolumeRenderMaterial::BlendMode::MaximumIntensity);
621 
622  break;
623  }
624  case Presets::CT_MUSCLE:
625  {
626  // color
627  ctf->AddRGBPoint(-3024, 0, 0, 0);
628  ctf->AddRGBPoint(-155.407, 0.54902, 0.25098, 0.14902);
629  ctf->AddRGBPoint(217.641, 0.882353, 0.603922, 0.290196);
630  ctf->AddRGBPoint(419.736, 1, 0.937033, 0.954531);
631  ctf->AddRGBPoint(3071, 0.827451, 0.658824, 1);
632 
633  // scalar opacity
634  of->AddPoint(-3024, 0);
635  of->AddPoint(-155.407, 0);
636  of->AddPoint(217.641, 0.676471);
637  of->AddPoint(419.736, 0.833333);
638  of->AddPoint(3071, 0.803922);
639 
640  // gradient opacity
641  gf->AddPoint(0, 1);
642  gf->AddPoint(255, 1);
643 
644  // lighting / material properties
645  volProp->SetAmbient(0.1);
646  volProp->SetDiffuse(0.9);
647  volProp->SetInterpolationTypeToLinear();
648  volProp->SetShade(1);
649  volProp->SetSpecular(0.2);
650  volProp->SetSpecularPower(10);
651 
652  // blend mode
653  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
654 
655  break;
656  }
657  case Presets::CT_PULMONARY_ARTERIES:
658  {
659  // color
660  ctf->AddRGBPoint(-2048, 0, 0, 0);
661  ctf->AddRGBPoint(-568.625, 0, 0, 0);
662  ctf->AddRGBPoint(-364.081, 0.396078, 0.301961, 0.180392);
663  ctf->AddRGBPoint(-244.813, 0.611765, 0.352941, 0.0705882);
664  ctf->AddRGBPoint(18.2775, 0.843137, 0.0156863, 0.156863);
665  ctf->AddRGBPoint(447.798, 0.752941, 0.752941, 0.752941);
666  ctf->AddRGBPoint(3592.73, 1, 1, 1);
667 
668  // scalar opacity
669  of->AddPoint(-2048, 0);
670  of->AddPoint(-568.625, 0);
671  of->AddPoint(-364.081, 0.0714286);
672  of->AddPoint(-244.813, 0.401786);
673  of->AddPoint(18.2775, 0.607143);
674  of->AddPoint(447.798, 0.830357);
675  of->AddPoint(3592.73, 0.839286);
676 
677  // gradient opacity
678  gf->AddPoint(0, 1);
679  gf->AddPoint(255, 1);
680 
681  // lighting / material properties
682  volProp->SetAmbient(0.2);
683  volProp->SetDiffuse(1);
684  volProp->SetInterpolationTypeToLinear();
685  volProp->SetShade(1);
686  volProp->SetSpecular(0);
687  volProp->SetSpecularPower(1);
688 
689  // blend mode
690  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
691 
692  break;
693  }
694  case Presets::CT_SOFT_TISSUE:
695  {
696  // color
697  ctf->AddRGBPoint(-2048, 0, 0, 0);
698  ctf->AddRGBPoint(-167.01, 0, 0, 0);
699  ctf->AddRGBPoint(-160, 0.0556356, 0.0556356, 0.0556356);
700  ctf->AddRGBPoint(240, 1, 1, 1);
701  ctf->AddRGBPoint(3661, 1, 1, 1);
702 
703  // scalar opacity
704  of->AddPoint(-2048, 0);
705  of->AddPoint(-167.01, 0);
706  of->AddPoint(-160, 1);
707  of->AddPoint(240, 1);
708  of->AddPoint(3661, 1);
709 
710  // gradient opacity
711  gf->AddPoint(0, 1);
712  gf->AddPoint(255, 1);
713 
714  // lighting / material properties
715  volProp->SetAmbient(0.2);
716  volProp->SetDiffuse(1);
717  volProp->SetInterpolationTypeToLinear();
718  volProp->SetShade(0);
719  volProp->SetSpecular(0);
720  volProp->SetSpecularPower(1);
721 
722  // blend mode
723  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
724 
725  break;
726  }
727  case Presets::CT_AIR:
728  {
729  // color
730  ctf->AddRGBPoint(-3024, 1, 1, 1);
731  ctf->AddRGBPoint(-900.0, 0.2, 1.0, 1.0);
732  ctf->AddRGBPoint(-500.0, 0.3, 0.3, 1.0);
733  ctf->AddRGBPoint(3071, 0, 0, 0);
734 
735  // scalar opacity
736  of->AddPoint(-3024, 0.705882);
737  of->AddPoint(-900.0, 0.715686);
738  of->AddPoint(-500.0, 0);
739  of->AddPoint(3071, 0);
740 
741  // gradient opacity
742  gf->AddPoint(0, 1);
743  gf->AddPoint(255, 1);
744 
745  // lighting / material properties
746  volProp->SetAmbient(0.9);
747  volProp->SetDiffuse(1);
748  volProp->SetInterpolationTypeToLinear();
749  volProp->SetShade(1);
750  volProp->SetSpecular(0.2);
751  volProp->SetSpecularPower(10);
752 
753  // blend mode
754  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
755 
756  break;
757  }
758  case Presets::CT_X_RAY:
759  {
760  // color
761  ctf->AddRGBPoint(-3024, 1, 1, 1);
762  ctf->AddRGBPoint(3071, 1, 1, 1);
763 
764  // scalar opacity
765  of->AddPoint(-3024, 0);
766  of->AddPoint(-200.0, 0.0);
767  of->AddPoint(1500.0, 0.05);
768  of->AddPoint(3071, 0.05);
769 
770  // gradient opacity
771  gf->AddPoint(0, 1);
772  gf->AddPoint(255, 1);
773 
774  // lighting / material properties
775  volProp->SetAmbient(0.1);
776  volProp->SetDiffuse(1);
777  volProp->SetInterpolationTypeToLinear();
778  volProp->SetShade(0);
779  volProp->SetSpecular(0.2);
780  volProp->SetSpecularPower(10);
781 
782  // blend mode
783  mat->setBlendMode(VolumeRenderMaterial::BlendMode::MaximumIntensity);
784 
785  break;
786  }
787  case Presets::MR_ANGIO:
788  {
789  // color
790  ctf->AddRGBPoint(-2048, 0, 0, 0);
791  ctf->AddRGBPoint(151.354, 0, 0, 0);
792  ctf->AddRGBPoint(158.279, 0.74902, 0.376471, 0);
793  ctf->AddRGBPoint(190.112, 1, 0.866667, 0.733333);
794  ctf->AddRGBPoint(200.873, 0.937255, 0.937255, 0.937255);
795  ctf->AddRGBPoint(3661, 1, 1, 1);
796 
797  // scalar opacity
798  of->AddPoint(-2048, 0);
799  of->AddPoint(151.354, 0);
800  of->AddPoint(158.279, 0.4375);
801  of->AddPoint(190.112, 0.580357);
802  of->AddPoint(200.873, 0.732143);
803  of->AddPoint(3661, 0.741071);
804 
805  // gradient opacity
806  gf->AddPoint(0, 1);
807  gf->AddPoint(255, 1);
808 
809  // lighting / material properties
810  volProp->SetAmbient(0.2);
811  volProp->SetDiffuse(1);
812  volProp->SetInterpolationTypeToLinear();
813  volProp->SetShade(1);
814  volProp->SetSpecular(0);
815  volProp->SetSpecularPower(1);
816 
817  // blend mode
818  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
819 
820  break;
821  }
822  case Presets::MR_DEFAULT:
823  {
824  // color
825  ctf->AddRGBPoint(0, 0, 0, 0);
826  ctf->AddRGBPoint(20, 0.168627, 0, 0);
827  ctf->AddRGBPoint(40, 0.403922, 0.145098, 0.0784314);
828  ctf->AddRGBPoint(120, 0.780392, 0.607843, 0.380392);
829  ctf->AddRGBPoint(220, 0.847059, 0.835294, 0.788235);
830  ctf->AddRGBPoint(1024, 1, 1, 1);
831 
832  // scalar opacity
833  of->AddPoint(0, 0);
834  of->AddPoint(20, 0);
835  of->AddPoint(40, 0.15);
836  of->AddPoint(120, 0.3);
837  of->AddPoint(220, 0.375);
838  of->AddPoint(1024, 0.5);
839 
840  // gradient opacity
841  gf->AddPoint(0, 1);
842  gf->AddPoint(255, 1);
843 
844  // lighting / material properties
845  volProp->SetAmbient(0.2);
846  volProp->SetDiffuse(1);
847  volProp->SetInterpolationTypeToLinear();
848  volProp->SetShade(1);
849  volProp->SetSpecular(0);
850  volProp->SetSpecularPower(1);
851 
852  // blend mode
853  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
854 
855  break;
856  }
857  case Presets::MR_MIP:
858  {
859  // color
860  ctf->AddRGBPoint(0, 1, 1, 1);
861  ctf->AddRGBPoint(98.3725, 1, 1, 1);
862  ctf->AddRGBPoint(416.637, 1, 1, 1);
863  ctf->AddRGBPoint(2800, 1, 1, 1);
864 
865  // scalar opacity
866  of->AddPoint(0, 0);
867  of->AddPoint(98.3725, 0);
868  of->AddPoint(416.637, 1);
869  of->AddPoint(2800, 1);
870 
871  // gradient opacity
872  gf->AddPoint(0, 1);
873  gf->AddPoint(255, 1);
874 
875  // lighting / material properties
876  volProp->SetAmbient(0.2);
877  volProp->SetDiffuse(1);
878  volProp->SetInterpolationTypeToLinear();
879  volProp->SetShade(0);
880  volProp->SetSpecular(0);
881  volProp->SetSpecularPower(1);
882 
883  // blend mode
884  mat->setBlendMode(VolumeRenderMaterial::BlendMode::MaximumIntensity);
885 
886  break;
887  }
888  case Presets::MR_T2_BRAIN:
889  {
890  // color
891  ctf->AddRGBPoint(0, 0, 0, 0);
892  ctf->AddRGBPoint(98.7223, 0.956863, 0.839216, 0.192157);
893  ctf->AddRGBPoint(412.406, 0, 0.592157, 0.807843);
894  ctf->AddRGBPoint(641, 1, 1, 1);
895 
896  // scalar opacity
897  of->AddPoint(0, 0);
898  of->AddPoint(36.05, 0);
899  of->AddPoint(218.302, 0.171429);
900  of->AddPoint(412.406, 1);
901  of->AddPoint(641, 1);
902 
903  // gradient opacity
904  gf->AddPoint(0, 1);
905  gf->AddPoint(255, 1);
906 
907  // lighting / material properties
908  volProp->SetAmbient(0.3);
909  volProp->SetDiffuse(1);
910  volProp->SetInterpolationTypeToLinear();
911  volProp->SetShade(1);
912  volProp->SetSpecular(0.5);
913  volProp->SetSpecularPower(40);
914 
915  // blend mode
916  mat->setBlendMode(VolumeRenderMaterial::BlendMode::Alpha);
917 
918  break;
919  }
920  }
921 
922  return mat;
923 }
924 
925 const char*
926 VolumeRenderMaterialPresets::getPresetName(Presets p)
927 {
928  if (p >= Presets::NUM_PRESETS)
929  {
930  return "";
931  }
932  const char* presets[] = {
933  "CT_AAA",
934  "CT_AAA2",
935  "CT_BONE",
936  "CT_BONES",
937  "CT_CARDIAC",
938  "CT_CARDIAC2",
939  "CT_CARDIAC3",
940  "CT_CHEST_CONTRAST_ENHANCED",
941  "CT_CHEST_VESSELS",
942  "CT_CORONARY_ARTERIES",
943  "CT_CORONARY_ARTERIES_2",
944  "CT_CORONARY_ARTERIES_3",
945  "CT_VOLUME_BONE",
946  "CT_FAT",
947  "CT_LIVER_VASCULATURE",
948  "CT_LUNG",
949  "CT_MIP",
950  "CT_MUSCLE",
951  "CT_PULMONARY_ARTERIES",
952  "CT_SOFT_TISSUE",
953  "CT_AIR",
954  "CT_X_RAY",
955  "MR_ANGIO",
956  "MR_DEFAULT",
957  "MR_MIP",
958  "MR_T2_BRAIN",
959  };
960  return presets[static_cast<int>(p)];
961 }
962 } // namespace imstk
Compound Geometry.
static std::shared_ptr< VolumeRenderMaterial > getPreset(Presets p=Presets::CT_BONES)
TODO.