]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Bug IPAL18657 - VTK 3D Viewer: Bad representation of Local Coordinate systems.
authorouv <ouv@opencascade.com>
Fri, 13 Nov 2009 09:15:26 +0000 (09:15 +0000)
committerouv <ouv@opencascade.com>
Fri, 13 Nov 2009 09:15:26 +0000 (09:15 +0000)
src/GEOMGUI/GEOM_Displayer.cxx
src/OBJECT/GEOM_VTKTrihedron.cxx
src/OBJECT/GEOM_VTKTrihedron.hxx

index 57d7252a2cfbdb7a9f830c271b2199476b50695a..7cbc862c3dfd4ff64ca1d9e9b597f355554f1ce8 100644 (file)
@@ -822,7 +822,7 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
 
   if ( myType == GEOM_MARKER && myShape.ShapeType() == TopAbs_FACE )
   {
-    myToActivate = false;
+    //myToActivate = false; // ouv: commented to make the trihedron pickable (see IPAL18657)
     GEOM_VTKTrihedron* aTrh = GEOM_VTKTrihedron::New();
 
     if ( HasColor() )
index bc05f288e3e08a87f291a2534bb4822c7714685e..b88a14528c050e6feedf5982653b5a7f61377c0f 100644 (file)
@@ -200,9 +200,18 @@ GEOM_VTKTrihedron::GEOM_VTKTrihedron()
   myMapper = vtkPolyDataMapper::New();
   myAxis[ 0 ] = myAxis[ 1 ] = myAxis[ 2 ] = 0;
   mySize = 100;
-  SetInfinitive( true );
-  myColor[ 0 ] = myColor[ 1 ] = myColor[ 1 ] = -1;
-  SetInfinitive( true );
+
+  myColor[ 0 ] = myColor[ 1 ] = myColor[ 2 ] = -1;
+
+  myDefaultColor[ 0 ] = myDefaultColor[ 1 ] = myDefaultColor[ 2 ] = 1;
+
+  myPreHighlightColor[ 0 ] = 0;
+  myPreHighlightColor[ 1 ] = myPreHighlightColor[ 2 ] = 1;
+
+  myHighlightColor[ 0 ] = myHighlightColor[ 1 ] = myHighlightColor[ 2 ] = 1;
+
+  //SetInfinitive( true );
+  SetPickable( true );
 }
 
 GEOM_VTKTrihedron::~GEOM_VTKTrihedron()
@@ -254,6 +263,12 @@ void GEOM_VTKTrihedron::SetSize( vtkFloatingPointType theSize )
   aRes->Delete();
 }
 
+void GEOM_VTKTrihedron::SetVisibility( int theVisibility )
+{
+  Superclass::SetVisibility( theVisibility );
+  SetVisibility( theVisibility == 1 ? VTKViewer_Trihedron::eOn : VTKViewer_Trihedron::eOff );
+}
+
 void GEOM_VTKTrihedron::SetVisibility( VTKViewer_Trihedron::TVisibility theVis )
 {
   for ( int i = 0; i < 3; i++ )
@@ -368,21 +383,48 @@ bool GEOM_VTKTrihedron::IsSetCamera() const
 
 bool GEOM_VTKTrihedron::IsResizable() const
 {
-  return true;
+  return false;
 }
 
+void GEOM_VTKTrihedron::Highlight( bool theIsHighlight )
+{
+  if( theIsHighlight )
+    SetAxesColors( myHighlightColor );
+  else
+    ResetAxesColors();
 
+  Superclass::Highlight( theIsHighlight );
+}
 
+bool GEOM_VTKTrihedron::PreHighlight( vtkInteractorStyle *theInteractorStyle, 
+                                      SVTK_SelectionEvent* theSelectionEvent,
+                                      bool theIsHighlight )
+{
+  if ( !GetPickable() )
+    return false;  
 
+  if ( !isHighlighted() )
+  {
+    if( theIsHighlight )
+      SetAxesColors( myPreHighlightColor );
+    else
+      ResetAxesColors();
+  }
 
+  return Superclass::PreHighlight( theInteractorStyle, theSelectionEvent, theIsHighlight );
+}
 
+void GEOM_VTKTrihedron::ResetAxesColors()
+{
+  if( myColor[0] != -1 )
+    SetAxesColors( myColor );
+  else
+    SetAxesColors( myDefaultColor, true );
+}
 
-
-
-
-
-
-
-
-
-
+void GEOM_VTKTrihedron::SetAxesColors( vtkFloatingPointType theColor[3], bool theIsDiffuse )
+{
+  myAxis[ 0 ]->SetColor( theColor[0], theIsDiffuse ? 0.0 : theColor[1], theIsDiffuse ? 0.0 : theColor[2] );
+  myAxis[ 1 ]->SetColor( theIsDiffuse ? 0.0 : theColor[0], theColor[1], theIsDiffuse ? 0.0 : theColor[2] );
+  myAxis[ 2 ]->SetColor( theIsDiffuse ? 0.0 : theColor[0], theIsDiffuse ? 0.0 : theColor[1], theColor[2] );
+}
index 9dde2edd4a829ae32db1622743c674f9abc8937c..7808b0b6059b08abf975241f92382329ea1a76da 100644 (file)
@@ -57,6 +57,7 @@ public:
 
   virtual vtkFloatingPointType      GetSize() { return mySize;}
 
+  virtual void                      SetVisibility( int theVisibility );
   virtual void                      SetVisibility( VTKViewer_Trihedron::TVisibility theVis );
   virtual void                      VisibilityOff() { SetVisibility( VTKViewer_Trihedron::eOff ); }
   virtual void                      VisibilityOn() { SetVisibility( VTKViewer_Trihedron::eOn ); }
@@ -79,7 +80,16 @@ public:
   void                              SetColor( vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b );
   void                              GetColor( vtkFloatingPointType& r, vtkFloatingPointType& g, vtkFloatingPointType& b );
 
-  virtual bool                      hasHighlight() { return false; } 
+  virtual bool                      hasHighlight() { return true; } 
+
+  virtual void                      Highlight( bool theHighlight );
+  virtual bool                      PreHighlight( vtkInteractorStyle* theInteractorStyle,
+                                                  SVTK_SelectionEvent* theSelectionEvent,
+                                                  bool theIsHighlight );
+
+protected:
+  virtual void                      ResetAxesColors();
+  virtual void                      SetAxesColors( vtkFloatingPointType theColor[3], bool theIsDiffuse = false );
 
 protected:
   VTKViewer_Axis*                   myAxis[3];
@@ -88,6 +98,9 @@ protected:
   gp_Pnt                            myLocation;
   gp_Dir                            myDirX, myDirY, myDirZ;
   vtkFloatingPointType              myColor[ 3 ];
+  vtkFloatingPointType              myDefaultColor[ 3 ];
+  vtkFloatingPointType              myPreHighlightColor[ 3 ];
+  vtkFloatingPointType              myHighlightColor[ 3 ];
 };
 
 #endif