Salome HOME
INT PAL 0052660: Plot2D Viewer: Plot2d_Curve can't be selected
[modules/gui.git] / src / OCCViewer / OCCViewer_ViewModel.cxx
index 83574b1969debc8e52f24929d51fc18589b6951a..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>
 
 #include <Graphic3d_Texture2Dmanual.hxx>
+#include <Graphic3d_MaterialAspect.hxx>
 #include <Graphic3d_TextureParams.hxx>
 
 #include <Geom_Axis2Placement.hxx>
@@ -120,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));
@@ -141,6 +151,14 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron)
   // selection
   mySelectionEnabled = true;
   myMultiSelectionEnabled = true;
+
+  //set clipping color and texture to standard
+  myClippingColor = QColor( 50, 50, 50 );
+  myDefaultTextureUsed = true;
+  myClippingTexture = QString();
+  myTextureModulated = true;
+  myClippingTextureScale = 1.0;
+
 }
 
 /*!
@@ -572,6 +590,111 @@ void OCCViewer_Viewer::enableMultiselection(bool isEnable)
   }
 }
 
+/*!
+  Sets a color of the clipped region
+  \param theColor - a new color of the clipped region
+*/
+void OCCViewer_Viewer::setClippingColor( const QColor& theColor )
+{
+  myClippingColor = theColor;
+
+  if( myInternalClipPlanes.IsEmpty() )
+    return;
+
+  Graphic3d_MaterialAspect aMaterialAspect = Graphic3d_MaterialAspect();
+  aMaterialAspect.SetColor( Quantity_Color( theColor.redF(), theColor.greenF(),
+                                            theColor.blueF(), Quantity_TOC_RGB ) );
+
+  for( int i = 1; i <= myInternalClipPlanes.Size(); i++ )
+    myInternalClipPlanes.Value(i)->SetCappingMaterial( aMaterialAspect );
+
+  update();
+}
+
+/*!
+  \return clipping color
+*/
+QColor OCCViewer_Viewer::clippingColor() const
+{
+  return myClippingColor;
+}
+
+// initialize a texture for clipped region
+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 );
+  const Handle(Image_PixMap) aPixmap = OCCViewer_Utilities::imageToPixmap( px.toImage() );
+  Handle(Graphic3d_Texture2Dmanual) aTexture = new Graphic3d_Texture2Dmanual( aPixmap );
+  if( aTexture->IsDone() ) {
+    aTexture->EnableRepeat();
+    isModulate ? aTexture->EnableModulate() : aTexture->DisableModulate();
+    aTexture->GetParams()->SetScale( Graphic3d_Vec2( 1/( theScale*100 ), -1 / ( theScale*100 ) ) );
+  }
+  return aTexture;
+}
+
+/*!
+  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::setClippingTextureParams( const bool isDefault, const QString& theTexture,
+                                                 const bool isModulate, const double theScale )
+{
+  myDefaultTextureUsed = isDefault;
+  myClippingTexture = theTexture;
+  myTextureModulated = isModulate;
+  myClippingTextureScale = theScale;
+
+  if( myInternalClipPlanes.IsEmpty() )
+    return;
+
+  Handle(Graphic3d_Texture2Dmanual) aTexture =
+    initClippingTexture( myDefaultTextureUsed, myClippingTexture,
+                         myTextureModulated, myClippingTextureScale );
+
+  for( int i = 1; i <= myInternalClipPlanes.Size(); i++ )
+    myInternalClipPlanes.Value(i)->SetCappingTexture( aTexture );
+
+  update();
+}
+
+/*!
+  \return true if default texture is used
+*/
+bool OCCViewer_Viewer::isDefaultTextureUsed() const
+{
+  return myDefaultTextureUsed;
+}
+
+/*!
+  \return clipping texture
+*/
+QString OCCViewer_Viewer::clippingTexture() const
+{
+  return myClippingTexture;
+}
+
+/*!
+  \return true if texture is modulated
+*/
+bool OCCViewer_Viewer::isTextureModulated() const
+{
+  return myTextureModulated;
+}
+
+/*!
+  \return scale factor of texture
+*/
+double OCCViewer_Viewer::clippingTextureScale() const
+{
+  return myClippingTextureScale;
+}
+
 /*!
   Builds popup for occ viewer
 */
@@ -1051,18 +1174,16 @@ Handle(Graphic3d_ClipPlane) OCCViewer_Viewer::createClipPlane(const gp_Pln& theP
   aGraphic3dPlane->SetOn( theIsOn );
   aGraphic3dPlane->SetCapping( Standard_True );
 
-  // load capping texture
-  QPixmap px( ":images/hatch.png" );
-  if( !px.isNull() ) {
-    const Handle(Image_PixMap) aPixmap = OCCViewer_Utilities::imageToPixmap( px.toImage() );
-    Handle(Graphic3d_Texture2Dmanual) aTexture = new Graphic3d_Texture2Dmanual( aPixmap );
-    if( aTexture->IsDone() ) {
-      aTexture->EnableModulate();
-      aTexture->EnableRepeat();
-      aTexture->GetParams()->SetScale( Graphic3d_Vec2( 0.01, 0.01 ) );
-      aGraphic3dPlane->SetCappingTexture( aTexture );
-    }
-  }
+  // set capping color
+  Graphic3d_MaterialAspect aMaterialAspect = Graphic3d_MaterialAspect();
+  aMaterialAspect.SetColor( Quantity_Color( myClippingColor.redF(), myClippingColor.greenF(),
+                                            myClippingColor.blueF(), Quantity_TOC_RGB ) );
+  aGraphic3dPlane->SetCappingMaterial( aMaterialAspect );
+
+  // set capping texture
+  aGraphic3dPlane->SetCappingTexture( initClippingTexture( myDefaultTextureUsed, myClippingTexture,
+                                                           myTextureModulated, myClippingTextureScale ) );
+
   return aGraphic3dPlane;
 }
 /*!