Salome HOME
INT PAL 0052660: Plot2D Viewer: Plot2d_Curve can't be selected
[modules/gui.git] / src / OCCViewer / OCCViewer_ViewModel.cxx
index 9f4e6f761ab68b6dbda58443861dcd6be61daf78..d7eae71b8e218e1880be08f8efc94bb9277f26d6 100755 (executable)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  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
 #include <QDesktopWidget>
 
 #include <AIS_Axis.hxx>
-#include <AIS_Drawer.hxx>
+#if OCC_VERSION_LARGE > 0x06080000
+  #include <Prs3d_Drawer.hxx>
+#else
+  #include <AIS_Drawer.hxx>
+#endif
 #include <AIS_ListOfInteractive.hxx>
 #include <AIS_ListIteratorOfListOfInteractive.hxx>
 
@@ -121,8 +125,13 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron)
     //myTrihedron->SetColor( Col );
     myTrihedron->SetArrowColor( Col.Name() );
     myTrihedron->SetSize(100);
-    Handle(AIS_Drawer) drawer = myTrihedron->Attributes();
-    if (drawer->HasDatumAspect()) {
+#if OCC_VERSION_LARGE > 0x06080000
+      Handle(Prs3d_Drawer) drawer = myTrihedron->Attributes();
+      if (drawer->HasOwnDatumAspect()) {
+#else
+      Handle(AIS_Drawer) drawer = myTrihedron->Attributes();
+      if (drawer->HasDatumAspect()) {
+#endif
       Handle(Prs3d_DatumAspect) daspect = drawer->DatumAspect();
       daspect->FirstAxisAspect()->SetColor(Quantity_Color(1.0, 0.0, 0.0, Quantity_TOC_RGB));
       daspect->SecondAxisAspect()->SetColor(Quantity_Color(0.0, 1.0, 0.0, Quantity_TOC_RGB));
@@ -147,6 +156,8 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron)
   myClippingColor = QColor( 50, 50, 50 );
   myDefaultTextureUsed = true;
   myClippingTexture = QString();
+  myTextureModulated = true;
+  myClippingTextureScale = 1.0;
 
 }
 
@@ -609,7 +620,8 @@ QColor OCCViewer_Viewer::clippingColor() const
 }
 
 // initialize a texture for clipped region
-Handle(Graphic3d_Texture2Dmanual) initClippingTexture( const bool isDefault, const QString& theTexture)
+Handle(Graphic3d_Texture2Dmanual) initClippingTexture( const bool isDefault, const QString& theTexture,
+                                                       const bool isModulate, const double theScale )
 {
   QString aTextureFile = isDefault ? ":images/hatch.png" : theTexture;
   QPixmap px( aTextureFile );
@@ -617,31 +629,33 @@ Handle(Graphic3d_Texture2Dmanual) initClippingTexture( const bool isDefault, con
   Handle(Graphic3d_Texture2Dmanual) aTexture = new Graphic3d_Texture2Dmanual( aPixmap );
   if( aTexture->IsDone() ) {
     aTexture->EnableRepeat();
-    if( isDefault ) {
-      aTexture->EnableModulate();
-      aTexture->GetParams()->SetScale( Graphic3d_Vec2( 0.01, 0.01 ) );
-    }
-    else {
-      aTexture->DisableModulate();
-      aTexture->GetParams()->SetScale( Graphic3d_Vec2( 0.005, 0.005 ) );
-    }
+    isModulate ? aTexture->EnableModulate() : aTexture->DisableModulate();
+    aTexture->GetParams()->SetScale( Graphic3d_Vec2( 1/( theScale*100 ), -1 / ( theScale*100 ) ) );
   }
   return aTexture;
 }
 
 /*!
-  Sets default texture enabled status
-  \param isUsed - new status
+  Sets default texture parameters
+  \param isDefault - use/non-use default texture
+  \param theTexture - new texture of the clipped region
+  \param isModulate - enable/disable texture modulate mode
+  \param theScale - scale factor.
 */
-void OCCViewer_Viewer::useDefaultTexture( const bool isUsed )
+void OCCViewer_Viewer::setClippingTextureParams( const bool isDefault, const QString& theTexture,
+                                                 const bool isModulate, const double theScale )
 {
-  myDefaultTextureUsed = isUsed;
+  myDefaultTextureUsed = isDefault;
+  myClippingTexture = theTexture;
+  myTextureModulated = isModulate;
+  myClippingTextureScale = theScale;
 
   if( myInternalClipPlanes.IsEmpty() )
     return;
 
   Handle(Graphic3d_Texture2Dmanual) aTexture =
-    initClippingTexture( myDefaultTextureUsed, myClippingTexture );
+    initClippingTexture( myDefaultTextureUsed, myClippingTexture,
+                         myTextureModulated, myClippingTextureScale );
 
   for( int i = 1; i <= myInternalClipPlanes.Size(); i++ )
     myInternalClipPlanes.Value(i)->SetCappingTexture( aTexture );
@@ -658,31 +672,27 @@ bool OCCViewer_Viewer::isDefaultTextureUsed() const
 }
 
 /*!
-  Sets a texture of the clipped region
-  \param theTexture - a new texture of the clipped region
+  \return clipping texture
 */
-void OCCViewer_Viewer::setClippingTexture( const QString& theTexture )
+QString OCCViewer_Viewer::clippingTexture() const
 {
-  myClippingTexture = theTexture;
-
-  if( myInternalClipPlanes.IsEmpty() || myDefaultTextureUsed )
-    return;
-
-  Handle(Graphic3d_Texture2Dmanual) aTexture =
-    initClippingTexture( myDefaultTextureUsed, myClippingTexture );
-
-  for( int i = 1; i <= myInternalClipPlanes.Size(); i++ )
-    myInternalClipPlanes.Value(i)->SetCappingTexture( aTexture );
+  return myClippingTexture;
+}
 
-  update();
+/*!
+  \return true if texture is modulated
+*/
+bool OCCViewer_Viewer::isTextureModulated() const
+{
+  return myTextureModulated;
 }
 
 /*!
-  \return clipping texture
+  \return scale factor of texture
 */
-QString OCCViewer_Viewer::clippingTexture() const
+double OCCViewer_Viewer::clippingTextureScale() const
 {
-  return myClippingTexture;
+  return myClippingTextureScale;
 }
 
 /*!
@@ -1171,7 +1181,8 @@ Handle(Graphic3d_ClipPlane) OCCViewer_Viewer::createClipPlane(const gp_Pln& theP
   aGraphic3dPlane->SetCappingMaterial( aMaterialAspect );
 
   // set capping texture
-  aGraphic3dPlane->SetCappingTexture( initClippingTexture( myDefaultTextureUsed, myClippingTexture) );
+  aGraphic3dPlane->SetCappingTexture( initClippingTexture( myDefaultTextureUsed, myClippingTexture,
+                                                           myTextureModulated, myClippingTextureScale ) );
 
   return aGraphic3dPlane;
 }