Salome HOME
0023124: EDF 11219 GEOM: Ray tracing in the OCC viewer
[modules/gui.git] / src / LightApp / LightApp_Application.cxx
index 0eb31709f6981ae725eb7959f6f5a4c717525167..3093f12fca6760f089daac4080e26e01de75965e 100644 (file)
@@ -1576,6 +1576,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType
       vm->setProjectionMode( resMgr->integerValue( "VTKViewer", "projection_mode", vm->projectionMode() ) );
       vm->setStereoType( resMgr->integerValue( "VTKViewer", "stereo_type", vm->stereoType() ) );
       vm->setAnaglyphFilter( resMgr->integerValue( "VTKViewer", "anaglyph_filter", vm->anaglyphFilter() ) );
+      vm->setQuadBufferSupport( resMgr->booleanValue( "VTKViewer", "enable_quad_buffer_support", vm->isQuadBufferSupport() ) );
       vm->setBackground( resMgr->backgroundValue( "VTKViewer", "background", vm->background() ) );
       vm->setTrihedronSize( resMgr->doubleValue( "3DViewer", "trihedron_size", vm->trihedronSize() ),
                             resMgr->booleanValue( "3DViewer", "relative_size", vm->trihedronRelative() ) );
@@ -2514,6 +2515,61 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref )
   pref->setItemProperty( "step", 0.1, scaleFactor );
   // ... "Clipping" group <<end>>
 
+  // ... "Ray tracing" group <<start>>
+  int occRayTracingGroup = pref->addPreference( tr( "PREF_GROUP_RAY_TRACING" ), occGroup );
+  int rtPref = pref->addPreference( "", occRayTracingGroup, LightApp_Preferences::Frame );
+  pref->setItemProperty( "columns", 2, rtPref );
+  // .... -> depth
+  int rt_depth = pref->addPreference( tr( "PREF_RAY_TRACING_DEPTH" ), rtPref,
+               LightApp_Preferences::IntSpin, "OCCViewer", "rt_depth" );
+  pref->setItemProperty( "min", 1, rt_depth );
+  pref->setItemProperty( "max", 10, rt_depth );
+  pref->setItemProperty( "step", 1, rt_depth );
+  pref->addPreference( "", rtPref, LightApp_Preferences::Frame );
+  // .... -> specular reflections
+  pref->addPreference( tr( "PREF_RAY_TRACING_REFLECTION" ), rtPref,
+               LightApp_Preferences::Bool, "OCCViewer", "rt_reflection" );
+  // .... -> adaptive anti-aliasing
+  pref->addPreference( tr( "PREF_RAY_TRACING_ANTIALIASING" ), rtPref,
+               LightApp_Preferences::Bool, "OCCViewer", "rt_antialiasing" );
+  // .... -> shadows rendering
+  pref->addPreference( tr( "PREF_RAY_TRACING_SHADOW" ), rtPref,
+               LightApp_Preferences::Bool, "OCCViewer", "rt_shadow" );
+  // .... -> transparent shadow
+  pref->addPreference( tr( "PREF_RAY_TRACING_TRANS_SHADOW" ), rtPref,
+               LightApp_Preferences::Bool, "OCCViewer", "rt_trans_shadow" );
+  // ... "Ray tracing" group <<end>>
+
+  // ... "Light source" group <<start>>
+  int occLightGroup = pref->addPreference( tr( "PREF_GROUP_LIGHT" ), occGroup );
+  // .... -> light color
+  pref->addPreference( tr( "PREF_LIGHT_COLOR" ), occLightGroup,
+               LightApp_Preferences::Color, "OCCViewer", "light_color" );
+  int directionPref = pref->addPreference( "", occLightGroup, LightApp_Preferences::Frame );
+  pref->setItemProperty( "columns", 3, directionPref );
+  // .... -> light direction (dx component)
+  int light_dx = pref->addPreference( tr( "Dx" ), directionPref,
+               LightApp_Preferences::DblSpin, "OCCViewer", "light_dx" );
+  pref->setItemProperty( "precision", 2, light_dx );
+  pref->setItemProperty( "min", -1.0E03, light_dx );
+  pref->setItemProperty( "max", 1.0E03, light_dx );
+  pref->setItemProperty( "step", 0.1, light_dx );
+  // .... -> light direction (dy component)
+  int light_dy = pref->addPreference( tr( "Dy" ), directionPref,
+               LightApp_Preferences::DblSpin, "OCCViewer", "light_dy" );
+  pref->setItemProperty( "precision", 2, light_dy );
+  pref->setItemProperty( "min", -1.0E03, light_dy );
+  pref->setItemProperty( "max", 1.0E03, light_dy );
+  pref->setItemProperty( "step", 0.1, light_dy );
+  // .... -> light direction (dz component)
+  int light_dz = pref->addPreference( tr( "Dz" ), directionPref,
+               LightApp_Preferences::DblSpin, "OCCViewer", "light_dz" );
+  pref->setItemProperty( "precision", 2, light_dz );
+  pref->setItemProperty( "min", -1.0E03, light_dz );
+  pref->setItemProperty( "max", 1.0E03, light_dz );
+  pref->setItemProperty( "step", 0.1, light_dz );
+  // ... "Light source" group <<end>>
+
   // ... -> empty frame (for layout) <<start>>
   int occGen = pref->addPreference( "", occGroup, LightApp_Preferences::Frame );
   pref->setItemProperty( "margin",  0, occGen );
@@ -3382,6 +3438,27 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString
   }
 #endif
 
+#ifndef DISABLE_VTKVIEWER
+  if ( sec == QString( "VTKViewer" ) && param == QString( "enable_quad_buffer_support" ) )
+  {
+    int enable = resMgr->booleanValue( "VTKViewer", "enable_quad_buffer_support", false );
+    QList<SUIT_ViewManager*> lst;
+#ifndef DISABLE_SALOMEOBJECT
+    viewManagers( SVTK_Viewer::Type(), lst );
+    QListIterator<SUIT_ViewManager*> it( lst );
+    while ( it.hasNext() )
+    {
+      SUIT_ViewModel* vm = it.next()->getViewModel();
+      if ( !vm || !vm->inherits( "SVTK_Viewer" ) )
+        continue;
+
+      SVTK_Viewer* vtkVM = dynamic_cast<SVTK_Viewer*>( vm );
+      if( vtkVM ) vtkVM->setQuadBufferSupport( enable );
+    }
+#endif
+  }
+#endif
+
 #ifndef DISABLE_VTKVIEWER
   if ( sec == QString( "VTKViewer" ) && param == QString( "preselection" ) )
   {