Medical Imaging Interaction Toolkit  2016.11.0
Medical Imaging Interaction Toolkit
mitkSurfaceVtkMapper3D.cpp
Go to the documentation of this file.
1 /*===================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center,
6 Division of Medical and Biological Informatics.
7 All rights reserved.
8 
9 This software is distributed WITHOUT ANY WARRANTY; without
10 even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 A PARTICULAR PURPOSE.
12 
13 See LICENSE.txt or http://www.mitk.org for details.
14 
15 ===================================================================*/
16 
17 #include "mitkSurfaceVtkMapper3D.h"
18 #include <mitkClippingProperty.h>
19 #include <mitkColorProperty.h>
20 #include <mitkCoreServices.h>
21 #include <mitkDataNode.h>
22 #include <mitkExtractSliceFilter.h>
23 #include <mitkIPropertyAliases.h>
25 #include <mitkIShaderRepository.h>
26 #include <mitkImageSliceSelector.h>
28 #include <mitkProperties.h>
34 
35 // VTK
36 #include <vtkActor.h>
37 #include <vtkPlaneCollection.h>
38 #include <vtkPointData.h>
39 #include <vtkPolyData.h>
40 #include <vtkPolyDataMapper.h>
41 #include <vtkPolyDataNormals.h>
42 #include <vtkProperty.h>
43 #include <vtkSmartPointer.h>
44 
46 {
47  return static_cast<const mitk::Surface *>(GetDataNode()->GetData());
48 }
49 
51 {
52  m_GenerateNormals = false;
53 }
54 
56 {
57 }
58 
60 {
61  LocalStorage *ls = m_LSH.GetLocalStorage(renderer);
62 
63  bool visible = true;
64  GetDataNode()->GetVisibility(visible, renderer, "visible");
65 
66  if (!visible)
67  {
68  ls->m_Actor->VisibilityOff();
69  return;
70  }
71 
72  //
73  // set the input-object at time t for the mapper
74  //
75  mitk::Surface::Pointer input = const_cast<mitk::Surface *>(this->GetInput());
76  vtkSmartPointer<vtkPolyData> polydata = input->GetVtkPolyData(this->GetTimestep());
77  if (polydata == NULL)
78  {
79  ls->m_Actor->VisibilityOff();
80  return;
81  }
82  if (m_GenerateNormals)
83  {
84  ls->m_VtkPolyDataNormals->SetInputData(polydata);
85  ls->m_VtkPolyDataMapper->SetInputConnection(ls->m_VtkPolyDataNormals->GetOutputPort());
86  }
87  else
88  {
89  bool depthsorting = false;
90  GetDataNode()->GetBoolProperty("Depth Sorting", depthsorting);
91 
92  if (depthsorting)
93  {
94  ls->m_DepthSort->SetInputData(polydata);
95  ls->m_DepthSort->SetCamera(renderer->GetVtkRenderer()->GetActiveCamera());
96  ls->m_DepthSort->SetDirectionToBackToFront();
97  ls->m_DepthSort->Update();
98  ls->m_VtkPolyDataMapper->SetInputConnection(ls->m_DepthSort->GetOutputPort());
99  }
100  else
101  {
102  ls->m_VtkPolyDataMapper->SetInputData(polydata);
103  }
104  }
105 
106  //
107  // apply properties read from the PropertyList
108  //
109  ApplyAllProperties(renderer, ls->m_Actor);
110 
111  if (visible)
112  ls->m_Actor->VisibilityOn();
113 }
114 
116 {
117  LocalStorage *ls = m_LSH.GetLocalStorage(renderer);
118  ls->m_Actor->VisibilityOff();
119 }
120 
122  vtkProperty *property,
123  mitk::BaseRenderer *renderer)
124 {
125  // Backface culling
126  {
128  node->GetProperty(p, "Backface Culling", renderer);
129  bool useCulling = false;
130  if (p.IsNotNull())
131  useCulling = p->GetValue();
132  property->SetBackfaceCulling(useCulling);
133  }
134 
135  // Colors
136  {
137  double ambient[3] = {0.5, 0.5, 0.0};
138  double diffuse[3] = {0.5, 0.5, 0.0};
139  double specular[3] = {1.0, 1.0, 1.0};
140 
141  float coeff_ambient = 0.5f;
142  float coeff_diffuse = 0.5f;
143  float coeff_specular = 0.5f;
144  float power_specular = 10.0f;
145 
146  // Color
147  {
149  node->GetProperty(p, "color", renderer);
150  if (p.IsNotNull())
151  {
152  mitk::Color c = p->GetColor();
153  ambient[0] = c.GetRed();
154  ambient[1] = c.GetGreen();
155  ambient[2] = c.GetBlue();
156  diffuse[0] = c.GetRed();
157  diffuse[1] = c.GetGreen();
158  diffuse[2] = c.GetBlue();
159  // Setting specular color to the same, make physically no real sense, however vtk rendering slows down, if these
160  // colors are different.
161  specular[0] = c.GetRed();
162  specular[1] = c.GetGreen();
163  specular[2] = c.GetBlue();
164  }
165  }
166 
167  // Ambient
168  {
170  node->GetProperty(p, "material.ambientColor", renderer);
171  if (p.IsNotNull())
172  {
173  mitk::Color c = p->GetColor();
174  ambient[0] = c.GetRed();
175  ambient[1] = c.GetGreen();
176  ambient[2] = c.GetBlue();
177  }
178  }
179 
180  // Diffuse
181  {
183  node->GetProperty(p, "material.diffuseColor", renderer);
184  if (p.IsNotNull())
185  {
186  mitk::Color c = p->GetColor();
187  diffuse[0] = c.GetRed();
188  diffuse[1] = c.GetGreen();
189  diffuse[2] = c.GetBlue();
190  }
191  }
192 
193  // Specular
194  {
196  node->GetProperty(p, "material.specularColor", renderer);
197  if (p.IsNotNull())
198  {
199  mitk::Color c = p->GetColor();
200  specular[0] = c.GetRed();
201  specular[1] = c.GetGreen();
202  specular[2] = c.GetBlue();
203  }
204  }
205 
206  // Ambient coeff
207  {
208  node->GetFloatProperty("material.ambientCoefficient", coeff_ambient, renderer);
209  }
210 
211  // Diffuse coeff
212  {
213  node->GetFloatProperty("material.diffuseCoefficient", coeff_diffuse, renderer);
214  }
215 
216  // Specular coeff
217  {
218  node->GetFloatProperty("material.specularCoefficient", coeff_specular, renderer);
219  }
220 
221  // Specular power
222  {
223  node->GetFloatProperty("material.specularPower", power_specular, renderer);
224  }
225 
226  property->SetAmbient(coeff_ambient);
227  property->SetDiffuse(coeff_diffuse);
228  property->SetSpecular(coeff_specular);
229  property->SetSpecularPower(power_specular);
230 
231  property->SetAmbientColor(ambient);
232  property->SetDiffuseColor(diffuse);
233  property->SetSpecularColor(specular);
234  }
235 
236  // Render mode
237  {
238  // Opacity
239  {
240  float opacity = 1.0f;
241  if (node->GetOpacity(opacity, renderer))
242  property->SetOpacity(opacity);
243  }
244 
245  // Wireframe line width
246  {
247  float lineWidth = 1;
248  node->GetFloatProperty("material.wireframeLineWidth", lineWidth, renderer);
249  property->SetLineWidth(lineWidth);
250  }
251 
252  // Point size
253  {
254  float pointSize = 1.0f;
255  node->GetFloatProperty("material.pointSize", pointSize, renderer);
256  property->SetPointSize(pointSize);
257  }
258 
259  // Representation
260  {
262  node->GetProperty(p, "material.representation", renderer);
263  if (p.IsNotNull())
264  property->SetRepresentation(p->GetVtkRepresentation());
265  }
266 
267  // Interpolation
268  {
270  node->GetProperty(p, "material.interpolation", renderer);
271  if (p.IsNotNull())
272  property->SetInterpolation(p->GetVtkInterpolation());
273  }
274  }
275 }
276 
278 {
279  LocalStorage *ls = m_LSH.GetLocalStorage(renderer);
280 
281  // Applying shading properties
282  Superclass::ApplyColorAndOpacityProperties(renderer, ls->m_Actor);
283  this->ApplyShaderProperties(renderer);
284  // VTK Properties
285  ApplyMitkPropertiesToVtkProperty(this->GetDataNode(), ls->m_Actor->GetProperty(), renderer);
286 
288  this->GetDataNode()->GetProperty(transferFuncProp, "Surface.TransferFunction", renderer);
289  if (transferFuncProp.IsNotNull())
290  {
291  ls->m_VtkPolyDataMapper->SetLookupTable(transferFuncProp->GetValue()->GetColorTransferFunction());
292  }
293 
294  mitk::LookupTableProperty::Pointer lookupTableProp;
295  this->GetDataNode()->GetProperty(lookupTableProp, "LookupTable", renderer);
296  if (lookupTableProp.IsNotNull())
297  {
298  ls->m_VtkPolyDataMapper->SetLookupTable(lookupTableProp->GetLookupTable()->GetVtkLookupTable());
299  }
300 
301  mitk::LevelWindow levelWindow;
302  if (this->GetDataNode()->GetLevelWindow(levelWindow, renderer, "levelWindow"))
303  {
304  ls->m_VtkPolyDataMapper->SetScalarRange(levelWindow.GetLowerWindowBound(), levelWindow.GetUpperWindowBound());
305  }
306  else if (this->GetDataNode()->GetLevelWindow(levelWindow, renderer))
307  {
308  ls->m_VtkPolyDataMapper->SetScalarRange(levelWindow.GetLowerWindowBound(), levelWindow.GetUpperWindowBound());
309  }
310 
311  bool scalarVisibility = false;
312  this->GetDataNode()->GetBoolProperty("scalar visibility", scalarVisibility);
313  ls->m_VtkPolyDataMapper->SetScalarVisibility((scalarVisibility ? 1 : 0));
314 
315  if (scalarVisibility)
316  {
317  mitk::VtkScalarModeProperty *scalarMode;
318  if (this->GetDataNode()->GetProperty(scalarMode, "scalar mode", renderer))
319  ls->m_VtkPolyDataMapper->SetScalarMode(scalarMode->GetVtkScalarMode());
320  else
321  ls->m_VtkPolyDataMapper->SetScalarModeToDefault();
322 
323  bool colorMode = false;
324  this->GetDataNode()->GetBoolProperty("color mode", colorMode);
325  ls->m_VtkPolyDataMapper->SetColorMode((colorMode ? 1 : 0));
326 
327  double scalarsMin = 0;
328  this->GetDataNode()->GetDoubleProperty("ScalarsRangeMinimum", scalarsMin, renderer);
329 
330  double scalarsMax = 1.0;
331  this->GetDataNode()->GetDoubleProperty("ScalarsRangeMaximum", scalarsMax, renderer);
332 
333  ls->m_VtkPolyDataMapper->SetScalarRange(scalarsMin, scalarsMax);
334  }
335 
336  mitk::SmartPointerProperty::Pointer imagetextureProp =
337  dynamic_cast<mitk::SmartPointerProperty *>(GetDataNode()->GetProperty("Surface.Texture", renderer));
338 
339  if (imagetextureProp.IsNotNull())
340  {
341  mitk::Image *miktTexture = dynamic_cast<mitk::Image *>(imagetextureProp->GetSmartPointer().GetPointer());
342  vtkSmartPointer<vtkTexture> vtkTxture = vtkSmartPointer<vtkTexture>::New();
343  // Either select the first slice of a volume
344  if (miktTexture->GetDimension(2) > 1)
345  {
346  MITK_WARN << "3D Textures are not supported by VTK and MITK. The first slice of the volume will be used instead!";
348  sliceselector->SetSliceNr(0);
349  sliceselector->SetChannelNr(0);
350  sliceselector->SetTimeNr(0);
351  sliceselector->SetInput(miktTexture);
352  sliceselector->Update();
353  vtkTxture->SetInputData(sliceselector->GetOutput()->GetVtkImageData());
354  }
355  else // or just use the 2D image
356  {
357  vtkTxture->SetInputData(miktTexture->GetVtkImageData());
358  }
359  // pass the texture to the actor
360  ls->m_Actor->SetTexture(vtkTxture);
361  if (ls->m_VtkPolyDataMapper->GetInput()->GetPointData()->GetTCoords() == NULL)
362  {
363  MITK_ERROR << "Surface.Texture property was set, but there are no texture coordinates. Please provide texture "
364  "coordinates for the vtkPolyData via vtkPolyData->GetPointData()->SetTCoords().";
365  }
366  // if no texture is set, this will also remove a previously used texture
367  // and reset the actor to it's default behaviour
368  }
369  else
370  {
371  ls->m_Actor->SetTexture(0);
372  }
373 
374  // deprecated settings
375  bool deprecatedUseCellData = false;
376  this->GetDataNode()->GetBoolProperty("deprecated useCellDataForColouring", deprecatedUseCellData);
377 
378  bool deprecatedUsePointData = false;
379  this->GetDataNode()->GetBoolProperty("deprecated usePointDataForColouring", deprecatedUsePointData);
380 
381  if (deprecatedUseCellData)
382  {
383  ls->m_VtkPolyDataMapper->SetColorModeToDefault();
384  ls->m_VtkPolyDataMapper->SetScalarRange(0, 255);
385  ls->m_VtkPolyDataMapper->ScalarVisibilityOn();
386  ls->m_VtkPolyDataMapper->SetScalarModeToUseCellData();
387  ls->m_Actor->GetProperty()->SetSpecular(1);
388  ls->m_Actor->GetProperty()->SetSpecularPower(50);
389  ls->m_Actor->GetProperty()->SetInterpolationToPhong();
390  }
391  else if (deprecatedUsePointData)
392  {
393  float scalarsMin = 0;
394  if (dynamic_cast<mitk::FloatProperty *>(this->GetDataNode()->GetProperty("ScalarsRangeMinimum")) != NULL)
395  scalarsMin =
396  dynamic_cast<mitk::FloatProperty *>(this->GetDataNode()->GetProperty("ScalarsRangeMinimum"))->GetValue();
397 
398  float scalarsMax = 0.1;
399  if (dynamic_cast<mitk::FloatProperty *>(this->GetDataNode()->GetProperty("ScalarsRangeMaximum")) != NULL)
400  scalarsMax =
401  dynamic_cast<mitk::FloatProperty *>(this->GetDataNode()->GetProperty("ScalarsRangeMaximum"))->GetValue();
402 
403  ls->m_VtkPolyDataMapper->SetScalarRange(scalarsMin, scalarsMax);
404  ls->m_VtkPolyDataMapper->SetColorModeToMapScalars();
405  ls->m_VtkPolyDataMapper->ScalarVisibilityOn();
406  ls->m_Actor->GetProperty()->SetSpecular(1);
407  ls->m_Actor->GetProperty()->SetSpecularPower(50);
408  ls->m_Actor->GetProperty()->SetInterpolationToPhong();
409  }
410 
411  int deprecatedScalarMode = VTK_COLOR_MODE_DEFAULT;
412  if (this->GetDataNode()->GetIntProperty("deprecated scalar mode", deprecatedScalarMode, renderer))
413  {
414  ls->m_VtkPolyDataMapper->SetScalarMode(deprecatedScalarMode);
415  ls->m_VtkPolyDataMapper->ScalarVisibilityOn();
416  ls->m_Actor->GetProperty()->SetSpecular(1);
417  ls->m_Actor->GetProperty()->SetSpecularPower(50);
418  }
419 
420  // Check whether one or more ClippingProperty objects have been defined for
421  // this node. Check both renderer specific and global property lists, since
422  // properties in both should be considered.
423  const PropertyList::PropertyMap *rendererProperties = this->GetDataNode()->GetPropertyList(renderer)->GetMap();
424  const PropertyList::PropertyMap *globalProperties = this->GetDataNode()->GetPropertyList(NULL)->GetMap();
425 
426  // Add clipping planes (if any)
427  ls->m_ClippingPlaneCollection->RemoveAllItems();
428 
429  PropertyList::PropertyMap::const_iterator it;
430  for (it = rendererProperties->begin(); it != rendererProperties->end(); ++it)
431  {
432  this->CheckForClippingProperty(renderer, (*it).second.GetPointer());
433  }
434 
435  for (it = globalProperties->begin(); it != globalProperties->end(); ++it)
436  {
437  this->CheckForClippingProperty(renderer, (*it).second.GetPointer());
438  }
439 
440  if (ls->m_ClippingPlaneCollection->GetNumberOfItems() > 0)
441  {
442  ls->m_VtkPolyDataMapper->SetClippingPlanes(ls->m_ClippingPlaneCollection);
443  }
444  else
445  {
446  ls->m_VtkPolyDataMapper->RemoveAllClippingPlanes();
447  }
448 }
449 
451 {
452  LocalStorage *ls = m_LSH.GetLocalStorage(renderer);
453  return ls->m_Actor;
454 }
455 
457 {
458  LocalStorage *ls = m_LSH.GetLocalStorage(renderer);
459 
460  ClippingProperty *clippingProperty = dynamic_cast<ClippingProperty *>(property);
461 
462  if ((clippingProperty != NULL) && (clippingProperty->GetClippingEnabled()))
463  {
464  const Point3D &origin = clippingProperty->GetOrigin();
465  const Vector3D &normal = clippingProperty->GetNormal();
466 
467  vtkSmartPointer<vtkPlane> clippingPlane = vtkSmartPointer<vtkPlane>::New();
468  clippingPlane->SetOrigin(origin[0], origin[1], origin[2]);
469  clippingPlane->SetNormal(normal[0], normal[1], normal[2]);
470 
471  ls->m_ClippingPlaneCollection->AddItem(clippingPlane);
472  }
473 }
474 
476  mitk::BaseRenderer *renderer,
477  bool overwrite)
478 {
479  // Shading
480  {
481  node->AddProperty("material.wireframeLineWidth", mitk::FloatProperty::New(1.0f), renderer, overwrite);
482  node->AddProperty("material.pointSize", mitk::FloatProperty::New(1.0f), renderer, overwrite);
483 
484  node->AddProperty("material.ambientCoefficient", mitk::FloatProperty::New(0.05f), renderer, overwrite);
485  node->AddProperty("material.diffuseCoefficient", mitk::FloatProperty::New(0.9f), renderer, overwrite);
486  node->AddProperty("material.specularCoefficient", mitk::FloatProperty::New(1.0f), renderer, overwrite);
487  node->AddProperty("material.specularPower", mitk::FloatProperty::New(16.0f), renderer, overwrite);
488 
489  node->AddProperty("material.representation", mitk::VtkRepresentationProperty::New(), renderer, overwrite);
490  node->AddProperty("material.interpolation", mitk::VtkInterpolationProperty::New(), renderer, overwrite);
491  }
492 
493  // Shaders
495  if (shaderRepo)
496  {
497  shaderRepo->AddDefaultProperties(node, renderer, overwrite);
498  }
499 }
500 
502 {
503  node->AddProperty("color", mitk::ColorProperty::New(1.0f, 1.0f, 1.0f), renderer, overwrite);
504  node->AddProperty("opacity", mitk::FloatProperty::New(1.0), renderer, overwrite);
505 
506  mitk::SurfaceVtkMapper3D::SetDefaultPropertiesForVtkProperty(node, renderer, overwrite); // Shading
507 
508  node->AddProperty("scalar visibility", mitk::BoolProperty::New(false), renderer, overwrite);
509  node->AddProperty("color mode", mitk::BoolProperty::New(false), renderer, overwrite);
510  node->AddProperty("scalar mode", mitk::VtkScalarModeProperty::New(), renderer, overwrite);
511  mitk::Surface::Pointer surface = dynamic_cast<Surface *>(node->GetData());
512  if (surface.IsNotNull())
513  {
514  if ((surface->GetVtkPolyData() != 0) && (surface->GetVtkPolyData()->GetPointData() != NULL) &&
515  (surface->GetVtkPolyData()->GetPointData()->GetScalars() != 0))
516  {
517  node->AddProperty("scalar visibility", mitk::BoolProperty::New(true), renderer, overwrite);
518  node->AddProperty("color mode", mitk::BoolProperty::New(true), renderer, overwrite);
519  }
520  }
521 
522  // Backface culling
523  node->AddProperty("Backface Culling", mitk::BoolProperty::New(false), renderer, overwrite);
524 
525  node->AddProperty("Depth Sorting", mitk::BoolProperty::New(false), renderer, overwrite);
527  "Depth Sorting",
528  "Enables correct rendering for transparent objects by ordering polygons according to the distance "
529  "to the camera. It is not recommended to enable this property for large surfaces (rendering might "
530  "be slow).");
531  Superclass::SetDefaultProperties(node, renderer, overwrite);
532 }
Class for storing surfaces (vtkPolyData).
Definition: mitkSurface.h:32
vtkSmartPointer< vtkDepthSortPolyData > m_DepthSort
virtual bool AddDescription(const std::string &propertyName, const std::string &description, const std::string &className="", bool overwrite=false)=0
Add a description for a specific property.
ScalarType GetLowerWindowBound() const
Property for clipping datasets; currently only clipping planes are possible.
virtual void GenerateDataForRenderer(mitk::BaseRenderer *renderer) override
Generate the data needed for rendering into renderer.
virtual void AddDefaultProperties(mitk::DataNode *node, mitk::BaseRenderer *renderer, bool overwrite) const =0
Adds all parsed shader uniforms to property list of the given DataNode; used by mappers.
#define MITK_ERROR
Definition: mitkLogMacros.h:24
vtkSmartPointer< vtkPlaneCollection > m_ClippingPlaneCollection
static Pointer New()
Organizes the rendering process.
static IShaderRepository * GetShaderRepository()
Get an IShaderRepository instance.
virtual vtkImageData * GetVtkImageData(int t=0, int n=0)
Get a volume at a specific time t of channel n as a vtkImageData.
Definition: mitkImage.cpp:221
BaseData * GetData() const
Get the data object (instance of BaseData, e.g., an Image) managed by this DataNode.
static Pointer New()
mitk::BaseProperty * GetProperty(const char *propertyKey, const mitk::BaseRenderer *renderer=nullptr) const
Get the property (instance of BaseProperty) with key propertyKey from the PropertyList of the rendere...
Property containing a smart-pointer.
virtual void ResetMapper(mitk::BaseRenderer *renderer) override
Reset the mapper (i.e., make sure that nothing is displayed) if no valid data is present. In most cases the reimplemented function disables the according actors (toggling visibility off)
static IPropertyDescriptions * GetPropertyDescriptions(us::ModuleContext *context=us::GetModuleContext())
Get an IPropertyDescriptions instance.
The LevelWindow class Class to store level/window values.
static Pointer New()
virtual vtkProp * GetVtkProp(mitk::BaseRenderer *renderer) override
Abstract base class for properties.
void AddProperty(const char *propertyKey, BaseProperty *property, const mitk::BaseRenderer *renderer=nullptr, bool overwrite=false)
Add the property (instance of BaseProperty) if it does not exist (or always ifoverwrite istrue) with ...
#define MITK_WARN
Definition: mitkLogMacros.h:23
Management class for vtkShader XML descriptions.
bool GetOpacity(float &opacity, const mitk::BaseRenderer *renderer, const char *propertyKey="opacity") const
Convenience access method for opacity properties (instances of FloatProperty)
std::map< std::string, BaseProperty::Pointer > PropertyMap
virtual const mitk::Surface * GetInput()
static void SetDefaultProperties(mitk::DataNode *node, mitk::BaseRenderer *renderer=NULL, bool overwrite=false)
static void ApplyMitkPropertiesToVtkProperty(mitk::DataNode *node, vtkProperty *property, mitk::BaseRenderer *renderer)
const Vector3D & GetNormal() const
bool GetFloatProperty(const char *propertyKey, float &floatValue, const mitk::BaseRenderer *renderer=nullptr) const
Convenience access method for float properties (instances of FloatProperty)
virtual void CheckForClippingProperty(mitk::BaseRenderer *renderer, mitk::BaseProperty *property)
Image class for storing images.
Definition: mitkImage.h:76
static void SetDefaultPropertiesForVtkProperty(mitk::DataNode *node, mitk::BaseRenderer *renderer, bool overwrite)
itk::RGBPixel< float > Color
Color Standard RGB color typedef (float)
static Pointer New()
const Point3D & GetOrigin() const
vtkSmartPointer< vtkPolyDataNormals > m_VtkPolyDataNormals
ScalarType GetUpperWindowBound() const
virtual DataNode * GetDataNode() const
Get the DataNode containing the data to map. Method only returns valid DataNode Pointer if the mapper...
Definition: mitkMapper.cpp:36
unsigned int GetDimension() const
Get dimension of the image.
Definition: mitkImage.cpp:110
vtkRenderer * GetVtkRenderer() const
vtkSmartPointer< vtkPainterPolyDataMapper > m_VtkPolyDataMapper
Class for nodes of the DataTree.
Definition: mitkDataNode.h:66
virtual void ApplyAllProperties(mitk::BaseRenderer *renderer, vtkActor *actor)
static itkEventMacro(BoundingShapeInteractionEvent, itk::AnyEvent) class MITKBOUNDINGSHAPE_EXPORT BoundingShapeInteractor Pointer New()
Basic interaction methods for mitk::GeometryData.