Salome HOME
Upgrade to paraview 5.4
[modules/gui.git] / src / VTKViewer / VTKViewer_Actor.cxx
index da05fc98df4fa0c0a82b9c96066d6c83c94210c8..76f5d153bde1b9a64534a216f774c4ab2b6b0c82 100755 (executable)
@@ -1,42 +1,38 @@
-//  SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
 //
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
 //
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
+//  SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers
 //  File   : SALOME_Actor.cxx
 //  Author : Nicolas REJNERI
-//  Module : SALOME
-//  $Header$
 
 /*!
   \class SALOME_Actor SALOME_Actor.h
   \brief Abstract class of SALOME Objects in VTK.
 */
 
-
 #include "VTKViewer_Actor.h"
 
 #include "VTKViewer_Transform.h"
 #include "VTKViewer_TransformFilter.h"
-#include "VTKViewer_PassThroughFilter.h"
 #include "VTKViewer_GeometryFilter.h"
 
 // VTK Includes
 #include <vtkObjectFactory.h>
 #include <vtkDataSetMapper.h>
 #include <vtkPolyDataMapper.h>
-#include <vtkProperty.h>
 #include <vtkRenderer.h>
-
-using namespace std;
+#include <vtkPassThroughFilter.h>
 
 #if defined __GNUC__
   #if __GNUC__ == 2
@@ -60,34 +54,36 @@ int VTKViewer_POINT_SIZE = 5;
 int VTKViewer_LINE_WIDTH = 3;
 
 
-//----------------------------------------------------------------------------
 vtkStandardNewMacro(VTKViewer_Actor);
 
-
-//----------------------------------------------------------------------------
+/*!
+  Constructor
+*/
 VTKViewer_Actor
 ::VTKViewer_Actor():
-  myIsHighlighted(false),
-  myIsPreselected(false),
-  myRepresentation(VTK_SURFACE),
+  myIsResolveCoincidentTopology(true),
+  myOpacity(1.0),
   myDisplayMode(1),
-  myProperty(vtkProperty::New()),
-  PreviewProperty(NULL),
   myIsInfinite(false),
-  myIsResolveCoincidentTopology(true),
   myStoreMapping(false),
   myGeomFilter(VTKViewer_GeometryFilter::New()),
-  myTransformFilter(VTKViewer_TransformFilter::New())
+  myTransformFilter(VTKViewer_TransformFilter::New()),
+  myRepresentation(VTKViewer::Representation::Surface),
+  myProperty(vtkProperty::New()),
+  PreviewProperty(NULL),
+  myIsPreselected(false),
+  myIsHighlighted(false)
 {
   vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor,
-                                                                myPolygonOffsetUnits);
+                                                                 myPolygonOffsetUnits);
 
   for(int i = 0; i < 6; i++)
-    myPassFilter.push_back(VTKViewer_PassThroughFilter::New());
+    myPassFilter.push_back(vtkPassThroughFilter::New());
 }
 
-
-//----------------------------------------------------------------------------
+/*!
+  Destructor
+*/
 VTKViewer_Actor
 ::~VTKViewer_Actor()
 {
@@ -104,8 +100,9 @@ VTKViewer_Actor
   myProperty->Delete();
 }
 
-
-//----------------------------------------------------------------------------
+/*!
+  \return name
+*/
 const char* 
 VTKViewer_Actor
 ::getName() 
@@ -113,6 +110,10 @@ VTKViewer_Actor
   return myName.c_str(); 
 }
 
+/*!
+  Sets name
+  \param theName - new name
+*/
 void
 VTKViewer_Actor
 ::setName(const char* theName)
@@ -120,8 +121,9 @@ VTKViewer_Actor
   myName = theName;
 }
 
-
-//----------------------------------------------------------------------------
+/*!
+  To publish the actor an all its internal devices
+*/
 void
 VTKViewer_Actor
 ::AddToRender(vtkRenderer* theRenderer)
@@ -129,6 +131,9 @@ VTKViewer_Actor
   theRenderer->AddActor(this);
 }
 
+/*!
+  To remove the actor an all its internal devices
+*/
 void 
 VTKViewer_Actor
 ::RemoveFromRender(vtkRenderer* theRenderer)
@@ -136,13 +141,18 @@ VTKViewer_Actor
   theRenderer->RemoveActor(this);
 }
 
+/*!
+  Used to obtain all dependent actors
+*/
 void
 VTKViewer_Actor
 ::GetChildActors(vtkActorCollection*) 
 {}
 
-
-//----------------------------------------------------------------------------
+/*!
+  Apply view transformation
+  \param theTransform - view transformation
+*/
 void
 VTKViewer_Actor
 ::SetTransform(VTKViewer_Transform* theTransform)
@@ -151,6 +161,9 @@ VTKViewer_Actor
 }
 
 
+/*!
+  To insert some additional filters and then sets the given #vtkMapper
+*/
 void
 VTKViewer_Actor
 ::SetMapper(vtkMapper* theMapper)
@@ -158,64 +171,75 @@ VTKViewer_Actor
   InitPipeLine(theMapper);
 }
 
+/*!
+  Initialization
+*/
 void
 VTKViewer_Actor
 ::InitPipeLine(vtkMapper* theMapper)
 {
   if(theMapper){
     int anId = 0;
-    myPassFilter[ anId ]->SetInput( theMapper->GetInput() );
-    myPassFilter[ anId + 1]->SetInput( myPassFilter[ anId ]->GetOutput() );
+    myPassFilter[ anId ]->SetInputData( theMapper->GetInput() );
+    myPassFilter[ anId + 1]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
     
     anId++; // 1
     myGeomFilter->SetStoreMapping( myStoreMapping );
-    myGeomFilter->SetInput( myPassFilter[ anId ]->GetOutput() );
+    myGeomFilter->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
 
     anId++; // 2
-    myPassFilter[ anId ]->SetInput( myGeomFilter->GetOutput() ); 
-    myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() );
+    myPassFilter[ anId ]->SetInputConnection( myGeomFilter->GetOutputPort() ); 
+    myPassFilter[ anId + 1 ]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
 
     anId++; // 3
-    myTransformFilter->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() );
+    myTransformFilter->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
 
     anId++; // 4
-    myPassFilter[ anId ]->SetInput( myTransformFilter->GetOutput() );
-    myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() );
+    myPassFilter[ anId ]->SetInputConnection( myTransformFilter->GetOutputPort() );
+    myPassFilter[ anId + 1 ]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
 
     anId++; // 5
-    if(vtkDataSetMapper* aMapper = dynamic_cast<vtkDataSetMapper*>(theMapper)){
-      aMapper->SetInput(myPassFilter[anId]->GetOutput());
-    }else if(vtkPolyDataMapper* aMapper = dynamic_cast<vtkPolyDataMapper*>(theMapper)){
-      aMapper->SetInput(myPassFilter[anId]->GetPolyDataOutput());
-    }
+    theMapper->SetInputConnection(myPassFilter[anId]->GetOutputPort());
   }
   Superclass::SetMapper(theMapper);
 }
 
-
-//----------------------------------------------------------------------------
+/*!
+  Renders actor
+*/
 void
 VTKViewer_Actor
 ::Render(vtkRenderer *ren, vtkMapper* m)
 {
+  if(vtkDataSet* aDataSet = GetInput()){
+    static double PERCENTS_OF_DETAILS = 0.50;
+    vtkIdType aNbOfPoints = vtkIdType(aDataSet->GetNumberOfPoints()*PERCENTS_OF_DETAILS);
+    if(aNbOfPoints > 0)
+      SetNumberOfCloudPoints(aNbOfPoints);
+  }
+
+  int aResolveCoincidentTopology = vtkMapper::GetResolveCoincidentTopology();
   if(myIsResolveCoincidentTopology){
-    int aResolveCoincidentTopology = vtkMapper::GetResolveCoincidentTopology();
-    float aFactor, aUnit; 
+    double aFactor, aUnit; 
     vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(aFactor,aUnit);
     
     vtkMapper::SetResolveCoincidentTopologyToPolygonOffset();
     vtkMapper::SetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor,
-                                                                  myPolygonOffsetUnits);
+                                                                   myPolygonOffsetUnits);
     Superclass::Render(ren,m);
     
     vtkMapper::SetResolveCoincidentTopologyPolygonOffsetParameters(aFactor,aUnit);
-    vtkMapper::SetResolveCoincidentTopology(aResolveCoincidentTopology);
   }else{
+    vtkMapper::SetResolveCoincidentTopologyToOff();
     Superclass::Render(ren,m);
   }
+  vtkMapper::SetResolveCoincidentTopology(aResolveCoincidentTopology);
 }
 
-
+/*!
+  Set ResolveCoincidentTopology flag
+  \param theIsResolve - new flag value
+*/
 void
 VTKViewer_Actor
 ::SetResolveCoincidentTopology(bool theIsResolve) 
@@ -223,31 +247,45 @@ VTKViewer_Actor
   myIsResolveCoincidentTopology = theIsResolve;
 }
 
+/*!
+  Set polygon offset parameters
+  \param factor, units  - Opengl polygon offset parameters
+*/
 void
 VTKViewer_Actor
-::SetPolygonOffsetParameters(float factor, float units)
+::SetPolygonOffsetParameters(double factor, 
+                             double units)
 {
   myPolygonOffsetFactor = factor;
   myPolygonOffsetUnits = units;
 }
 
+/*!
+  Get polygon offset parameters
+  \param factor, units  - Opengl polygon offset parameters
+*/
 void
 VTKViewer_Actor
-::GetPolygonOffsetParameters(float& factor, float& units)
+::GetPolygonOffsetParameters(double& factor, 
+                             double& units)
 {
   factor = myPolygonOffsetFactor;
   units = myPolygonOffsetUnits;
 }
 
-
-//----------------------------------------------------------------------------
-float
+/*!
+  \return shrink factor
+*/
+double
 VTKViewer_Actor
 ::GetShrinkFactor() 
 { 
   return 1.0;
 }
 
+/*!
+  \return true if the actor is shrunkable
+*/
 bool
 VTKViewer_Actor
 ::IsShrunkable() 
@@ -255,6 +293,9 @@ VTKViewer_Actor
   return false;
 }
 
+/*!
+  \return true if the actor is shrunk
+*/
 bool
 VTKViewer_Actor
 ::IsShrunk() 
@@ -262,18 +303,25 @@ VTKViewer_Actor
   return false;
 }
 
+/*!
+  Insert shrink filter into pipeline
+*/
 void
 VTKViewer_Actor
 ::SetShrink() 
 {} 
 
+/*!
+  Remove shrink filter from pipeline
+*/
 void
 VTKViewer_Actor
 ::UnShrink() 
 {}
 
-
-//----------------------------------------------------------------------------
+/*!
+  Allows to get initial #vtkDataSet
+*/
 vtkDataSet* 
 VTKViewer_Actor
 ::GetInput()
@@ -281,68 +329,87 @@ VTKViewer_Actor
   return myPassFilter.front()->GetOutput();
 }
 
-
-unsigned long int
+/*!
+  To calculatate last modified time
+*/
+vtkMTimeType
 VTKViewer_Actor
 ::GetMTime()
 {
-  unsigned long mTime = this->Superclass::GetMTime();
-  unsigned long time = myTransformFilter->GetMTime();
+  vtkMTimeType mTime = this->Superclass::GetMTime();
+  vtkMTimeType time = myTransformFilter->GetMTime();
   mTime = ( time > mTime ? time : mTime );
-  if(vtkDataSet *aDataSet = myPassFilter[0]->GetInput()){
+  if(vtkDataSet *aDataSet = dynamic_cast<vtkDataSet*>(myPassFilter[0]->GetInput())){ // bad usage of GetInput
     time = aDataSet->GetMTime();
     mTime = ( time > mTime ? time : mTime );
   }
   return mTime;
 }
 
-
-//----------------------------------------------------------------------------
+/*!
+  Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on)
+  param theMode - new mode
+*/
 void
 VTKViewer_Actor
 ::SetRepresentation(int theMode) 
 { 
+  using namespace VTKViewer::Representation;
   switch(myRepresentation){
-  case VTK_POINTS : 
-  case VTK_SURFACE : 
-    myProperty->DeepCopy(GetProperty());
+  case Points : 
+  case Surface : 
+  case SurfaceWithEdges :
+    myProperty->SetAmbient(GetProperty()->GetAmbient());
+    myProperty->SetDiffuse(GetProperty()->GetDiffuse());
+    myProperty->SetSpecular(GetProperty()->GetSpecular());
+    break;
   }    
+
   switch(theMode){
-  case VTK_POINTS : 
-  case VTK_SURFACE : 
-    GetProperty()->DeepCopy(myProperty);
+  case Points : 
+  case Surface : 
+  case SurfaceWithEdges :
+    GetProperty()->SetAmbient(myProperty->GetAmbient());
+    GetProperty()->SetDiffuse(myProperty->GetDiffuse());
+    GetProperty()->SetSpecular(myProperty->GetSpecular());
     break;
   default:
     GetProperty()->SetAmbient(1.0);
     GetProperty()->SetDiffuse(0.0);
     GetProperty()->SetSpecular(0.0);
   }
+
   switch(theMode){
-  case 3 : 
+  case Insideframe : 
     myGeomFilter->SetInside(true);
     myGeomFilter->SetWireframeMode(true);
     GetProperty()->SetRepresentation(VTK_WIREFRAME);
     break;
-  case VTK_POINTS : 
+  case Points : 
     GetProperty()->SetPointSize(VTKViewer_POINT_SIZE);  
     GetProperty()->SetRepresentation(theMode);
     myGeomFilter->SetWireframeMode(false);
     myGeomFilter->SetInside(false);
     break;
-  case VTK_WIREFRAME : 
+  case Wireframe : 
     GetProperty()->SetRepresentation(theMode);
     myGeomFilter->SetWireframeMode(true);
     myGeomFilter->SetInside(false);
     break;
-  case VTK_SURFACE : 
+  case Surface : 
+  case SurfaceWithEdges :
     GetProperty()->SetRepresentation(theMode);
     myGeomFilter->SetWireframeMode(false);
     myGeomFilter->SetInside(false);
     break;
   }
+
   myRepresentation = theMode;
 }
 
+/*!
+  \return current representation mode
+*/
 int
 VTKViewer_Actor
 ::GetRepresentation()
@@ -350,8 +417,9 @@ VTKViewer_Actor
   return myRepresentation;
 }
 
-
-//----------------------------------------------------------------------------
+/*!
+  Maps VTK index of a node to corresponding object index
+*/
 int 
 VTKViewer_Actor
 ::GetNodeObjId(int theVtkID)
@@ -359,13 +427,19 @@ VTKViewer_Actor
   return theVtkID;
 }
 
-float* 
+/*!
+  Get coordinates of a node for given object index
+*/
+double* 
 VTKViewer_Actor
 ::GetNodeCoord(int theObjID)
 {
   return GetInput()->GetPoint(theObjID);
 }
 
+/*!
+  Get corresponding #vtkCell for given object index
+*/
 vtkCell* 
 VTKViewer_Actor
 ::GetElemCell(int theObjID)
@@ -373,6 +447,9 @@ VTKViewer_Actor
   return GetInput()->GetCell(theObjID);
 }
 
+/*!
+  Maps VTK index of a cell to corresponding object index
+*/
 int
 VTKViewer_Actor
 ::GetElemObjId(int theVtkID) 
@@ -381,11 +458,9 @@ VTKViewer_Actor
 }
 
 
-//=================================================================================
-// function : GetObjDimension
-// purpose  : Return object dimension.
-//            Virtual method shoulb be redifined by derived classes
-//=================================================================================
+/*!
+  \return object dimension. Virtual method should be redifined by derived classes
+*/
 int
 VTKViewer_Actor
 ::GetObjDimension( const int theObjId )
@@ -395,7 +470,10 @@ VTKViewer_Actor
   return 0;
 }
 
-
+/*!
+  Infinitive means actor without size (point for example),
+  which is not taken into account in calculation of boundaries of the scene
+*/
 void
 VTKViewer_Actor
 ::SetInfinitive(bool theIsInfinite)
@@ -403,16 +481,34 @@ VTKViewer_Actor
   myIsInfinite = theIsInfinite;
 }
 
-
+/*!
+  \return infinive flag
+*/
 bool
 VTKViewer_Actor
 ::IsInfinitive()
 { 
-  return myIsInfinite; 
-}
+  if(myIsInfinite)
+    return true;
 
+  static double MAX_DISTANCE = 0.9*VTK_FLOAT_MAX;
+  double aBounds[6];
+  GetBounds(aBounds);
+  for(int i = 0; i < 6; i++)
+    if(fabs(aBounds[i]) > MAX_DISTANCE)
+      return true;
+  
+  static double MIN_DISTANCE = 1.0/VTK_FLOAT_MAX;
+  if(GetLength() < MIN_DISTANCE)
+    return true;
+  
+  return false;
+}
 
-float* 
+/*!
+  \return current bounding box
+*/
+double* 
 VTKViewer_Actor
 ::GetBounds()
 {
@@ -420,15 +516,17 @@ VTKViewer_Actor
 }
 
 
+/*!
+  \return current bounding box
+*/
 void
 VTKViewer_Actor
-::GetBounds(float theBounds[6])
+::GetBounds(double theBounds[6])
 {
   Superclass::GetBounds(theBounds);
 }
 
 
-//----------------------------------------------------------------------------
 bool
 VTKViewer_Actor
 ::IsSetCamera() const 
@@ -445,7 +543,7 @@ VTKViewer_Actor
 
 void
 VTKViewer_Actor
-::SetSize( const float ) 
+::SetSize( const double ) 
 {}
 
 
@@ -454,16 +552,16 @@ VTKViewer_Actor
 ::SetCamera( vtkCamera* ) 
 {}
 
-//----------------------------------------------------------------------------
+
 void
 VTKViewer_Actor
-::SetOpacity(float theOpacity)
+::SetOpacity(double theOpacity)
 { 
   myOpacity = theOpacity;
   GetProperty()->SetOpacity(theOpacity);
 }
 
-float
+double
 VTKViewer_Actor
 ::GetOpacity()
 {
@@ -471,25 +569,38 @@ VTKViewer_Actor
 }
 
 
+/*!
+  Change color
+*/
 void
 VTKViewer_Actor
-::SetColor(float r,float g,float b)
+::SetColor(double r,
+           double g,
+           double b)
 {
   GetProperty()->SetColor(r,g,b);
 }
 
+/*!
+  Change color
+*/
 void
 VTKViewer_Actor
-::SetColor(const float theRGB[3])
+::SetColor(const double theRGB[3])
 { 
   SetColor(theRGB[0],theRGB[1],theRGB[2]);
 }
 
+/*!
+  Get color
+*/
 void
 VTKViewer_Actor
-::GetColor(float& r,float& g,float& b)
+::GetColor(double& r,
+           double& g,
+           double& b)
 {
-  float aColor[3];
+  double aColor[3];
   GetProperty()->GetColor(aColor);
   r = aColor[0];
   g = aColor[1];
@@ -497,7 +608,38 @@ VTKViewer_Actor
 }
 
 
-//----------------------------------------------------------------------------
+/*!
+  Change material
+*/
+void
+VTKViewer_Actor
+::SetMaterial(std::vector<vtkProperty*> theProps)
+{
+}
+
+/*!
+  Get current front material\r
+*/\r
+vtkProperty* \r
+VTKViewer_Actor\r
+::GetFrontMaterial()\r
+{\r
+  return NULL;\r
+}\r
+\r
+/*!\r
+  Get current back material\r
+*/\r
+vtkProperty* \r
+VTKViewer_Actor\r
+::GetBackMaterial()\r
+{\r
+  return NULL;\r
+}
+
+/*!
+  \return display mode
+*/
 int
 VTKViewer_Actor
 ::getDisplayMode()
@@ -505,6 +647,9 @@ VTKViewer_Actor
   return myDisplayMode; 
 }
 
+/*!
+  Change display mode
+*/
 void
 VTKViewer_Actor
 ::setDisplayMode(int theMode)
@@ -514,7 +659,9 @@ VTKViewer_Actor
 }
 
 
-//----------------------------------------------------------------------------
+/*!
+  \return true if the descendant of the VTKViewer_Actor will implement its own highlight or not
+*/
 bool
 VTKViewer_Actor
 ::hasHighlight() 
@@ -522,6 +669,9 @@ VTKViewer_Actor
   return false; 
 } 
 
+/*!
+  \return true if the VTKViewer_Actor is already highlighted
+*/
 bool
 VTKViewer_Actor
 ::isHighlighted() 
@@ -529,6 +679,19 @@ VTKViewer_Actor
   return myIsHighlighted; 
 }
 
+/*!
+  \return true if the VTKViewer_Actor is already preselected
+*/
+bool
+VTKViewer_Actor
+::isPreselected() 
+{ 
+  return myIsPreselected; 
+}
+
+/*!
+  Set preselection mode
+*/
 void
 VTKViewer_Actor
 ::SetPreSelected(bool thePreselect) 
@@ -536,8 +699,9 @@ VTKViewer_Actor
   myIsPreselected = thePreselect;
 }
 
-
-//----------------------------------------------------------------
+/*!
+  Just to update visibility of the highlight devices
+*/
 void
 VTKViewer_Actor
 ::highlight(bool theIsHighlight)
@@ -545,4 +709,41 @@ VTKViewer_Actor
   myIsHighlighted = theIsHighlight; 
 }
 
+/*!
+ * On/Off representation 2D quadratic element as arked polygon
+ */
+void VTKViewer_Actor::SetQuadraticArcMode(bool theFlag){
+  myGeomFilter->SetQuadraticArcMode(theFlag);
+}
+
+/*!
+ * Return true if 2D quadratic element displayed as arked polygon
+ */
+bool VTKViewer_Actor::GetQuadraticArcMode() const{
+  return myGeomFilter->GetQuadraticArcMode();
+}
+/*!
+ * Set Max angle for representation 2D quadratic element as arked polygon
+ */
+void VTKViewer_Actor::SetQuadraticArcAngle(double theMaxAngle){
+  myGeomFilter->SetQuadraticArcAngle(theMaxAngle);
+}
+
+/*!
+ * Return Max angle of the representation 2D quadratic element as arked polygon
+ */
+double VTKViewer_Actor::GetQuadraticArcAngle() const{
+  return myGeomFilter->GetQuadraticArcAngle();
+}
+
+/*!
+ * Return pointer to the dataset, which used to calculation of the bounding box of the actor.
+ * By default it is the input dataset.
+ */
+vtkDataSet* VTKViewer_Actor::GetHighlightedDataSet() {
+  return GetInput();
+}
+
+
+
 vtkCxxSetObjectMacro(VTKViewer_Actor,PreviewProperty,vtkProperty);