-// SALOME GEOM :
+// 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
+//
+// 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 GEOM :
// File : GEOM_VTKTrihedron.cxx
// Author : Sergey LITONIN
// Module : SALOME
-// $Header:
-
+//
#include "GEOM_VTKTrihedron.hxx"
-#include "utilities.h"
-#include "GEOM_OCCReader.h"
#include <Geom_Axis2Placement.hxx>
#include <gp_Ax2.hxx>
#include <gp_Ax3.hxx>
#include <gp_Pnt.hxx>
-#include <BRep_Builder.hxx>
-#include <BRepBuilderAPI_MakeEdge.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Compound.hxx>
-#include <vtkMath.h>
#include <vtkMapper.h>
-#include <vtkDataSet.h>
#include <vtkRenderer.h>
-#include <vtkFollower.h>
-#include <vtkRenderWindow.h>
#include <vtkObjectFactory.h>
-#include <vtkPolyData.h>
#include <vtkActor.h>
+#include <vtkActorCollection.h>
#include <vtkProperty.h>
#include <vtkLineSource.h>
-#include <vtkConeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkAppendPolyData.h>
#include <vtkMatrix4x4.h>
#include <vtkTransform.h>
-
-#include "VTKViewer_VectorText.h"
-
-
+#include <vtkVectorText.h>
+#include <vtkCoordinate.h>
+#include <vtkTextActor.h>
+#include <vtkTextMapper.h>
/*
Class : GEOM_VTKTrihedron
vtkTypeMacro( GEOM_VTKTrihedronAxis, VTKViewer_Axis );
static GEOM_VTKTrihedronAxis* New();
- void SetAxis( const gp_Ax1& theAxis, const int theRot, float theColor[ 3 ] );
+ void SetAxis( const gp_Ax1& theAxis, const int theRot, double theColor[ 3 ] );
virtual void Render( vtkRenderer* theRenderer );
- virtual void SetSize( float theSize );
+ virtual void SetSize( double theSize );
gp_Pnt GetOri() const;
- void SetColor( const float theColor[ 3 ] );
+ void SetColor( const double theColor[ 3 ] );
private:
- float myOri[ 3 ];
+ double myOri[ 3 ];
vtkMatrix4x4* myMatrix;
vtkTransform* myTrsf;
};
GEOM_VTKTrihedronAxis::GEOM_VTKTrihedronAxis()
{
- vtkProperty* aProperty = vtkProperty::New();
- aProperty->SetColor( 0.0, 0.0, 1.0 );
- SetProperty( aProperty );
- aProperty->Delete();
+ VTKViewer_Axis::SetColor( 0.0, 0.0, 1.0 );
myMatrix = vtkMatrix4x4::New();
myTrsf = vtkTransform::New();
}
myTrsf->Delete();
}
-void GEOM_VTKTrihedronAxis::SetSize( float theSize )
+void GEOM_VTKTrihedronAxis::SetSize( double theSize )
{
- float aPosition[ 3 ] = { myOri[ 0 ] + myDir[ 0 ] * theSize,
- myOri[ 1 ] + myDir[ 1 ] * theSize,
- myOri[ 2 ] + myDir[ 2 ] * theSize };
+ double aPosition[ 3 ] = { myOri[ 0 ] + myDir[ 0 ] * theSize,
+ myOri[ 1 ] + myDir[ 1 ] * theSize,
+ myOri[ 2 ] + myDir[ 2 ] * theSize };
myLineSource->SetPoint1( myOri[ 0 ], myOri[ 1 ], myOri[ 2 ] );
myLineSource->SetPoint2( aPosition );
aTrsf.SetDisplacement( gp_Ax3( gp_Pnt( 0, 0, 0 ), gp_Dir( 1, 0, 0 ) ),
gp_Ax3( GetOri(), gp_Dir( myDir[ 0 ], myDir[ 1 ], myDir[ 2 ] ) ) );
- const gp_XYZ& aTrans = aTrsf.TranslationPart();
+// const gp_XYZ& aTrans = aTrsf.TranslationPart();
gp_Mat aRot = aTrsf.VectorialPart();
for ( int i = 1; i <= 3; i++ )
+ {
for ( int j = 1; j <= 3; j++ )
myMatrix->SetElement( i - 1, j - 1, aRot( i, j ) );
+
+ // Set Arrow Position
+ myMatrix->SetElement( i - 1 , 3, aPosition[ i - 1 ] );
+ }
myArrowActor->SetUserMatrix( myMatrix );
- myArrowActor->SetPosition( aPosition );
+#ifdef IPAL21440
+ if( vtkCoordinate* aCoord = myLabelActor->GetPositionCoordinate()->GetReferenceCoordinate() )
+ aCoord->SetValue( aPosition );
+#else
myLabelActor->SetPosition( 0, 0, 0 );
myLabelActor->AddPosition( aPosition );
+#endif
}
void GEOM_VTKTrihedronAxis::Render(vtkRenderer* theRenderer)
{
myLineActor->Render( theRenderer );
myArrowActor->Render( theRenderer );
+#ifndef IPAL21440
myLabelActor->Render( theRenderer );
+#endif
vtkCamera* aCamera = theRenderer->GetActiveCamera();
SetCamera( aCamera );
void GEOM_VTKTrihedronAxis::SetAxis( const gp_Ax1& theAxis,
const int theRot,
- float theColor[ 3 ] )
+ double theColor[ 3 ] )
{
gp_Pnt aLoc = theAxis.Location();
gp_Dir aDir = theAxis.Direction();
myDir[ 1 ] = aDir.Y();
myDir[ 2 ] = aDir.Z();
- float aColor[ 3 ] = { 0, 0, 0 };
+ double aColor[ 3 ] = { 0, 0, 0 };
aColor[ theRot ] = 1;
- vtkProperty* aProperty = vtkProperty::New();
if ( theColor[ 0 ] == -1 )
- aProperty->SetColor( aColor[ 0 ], aColor[ 1 ], aColor[ 2 ] );
+ VTKViewer_Axis::SetColor( aColor[ 0 ], aColor[ 1 ], aColor[ 2 ] );
else
- aProperty->SetColor( theColor[ 0 ], theColor[ 1 ], theColor[ 2 ] );
- SetProperty( aProperty );
- aProperty->Delete();
+ VTKViewer_Axis::SetColor( theColor[ 0 ], theColor[ 1 ], theColor[ 2 ] );
+#ifdef IPAL21440
+ if ( theRot == 0 ) myTextMapper->SetInput( "X" );
+ else if ( theRot == 1 ) myTextMapper->SetInput( "Y" );
+ else if ( theRot == 2 ) myTextMapper->SetInput( "Z" );
+#else
if ( theRot == 0 ) myVectorText->SetText( "X" );
else if ( theRot == 1 ) myVectorText->SetText( "Y" );
else if ( theRot == 2 ) myVectorText->SetText( "Z" );
+#endif
}
-void GEOM_VTKTrihedronAxis::SetColor( const float theColor[ 3 ] )
+void GEOM_VTKTrihedronAxis::SetColor( const double theColor[ 3 ] )
{
- vtkProperty* aProperty = vtkProperty::New();
- aProperty->SetColor( theColor[ 0 ], theColor[ 1 ], theColor[ 2 ] );
- SetProperty( aProperty );
- aProperty->Delete();
+ VTKViewer_Axis::SetColor( theColor[ 0 ], theColor[ 1 ], theColor[ 2 ] );
}
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()
myMapper->Delete();
}
-void GEOM_VTKTrihedron::SetSize( float theSize )
+void GEOM_VTKTrihedron::SetSize( double theSize )
{
mySize = theSize;
for ( int i = 0; i < 3; i++ )
aSrcZ->SetPoint2( aEndZ.X(), aEndZ.Y(), aEndZ.Z() );
vtkAppendPolyData* aRes = vtkAppendPolyData::New();
- aRes->AddInput( aSrcX->GetOutput() );
- aRes->AddInput( aSrcY->GetOutput() );
- aRes->AddInput( aSrcZ->GetOutput() );
+ aRes->AddInputConnection( aSrcX->GetOutputPort() );
+ aRes->AddInputConnection( aSrcY->GetOutputPort() );
+ aRes->AddInputConnection( aSrcZ->GetOutputPort() );
- myMapper->SetInput( aRes->GetOutput() );
+ myMapper->SetInputConnection( aRes->GetOutputPort() );
+ aRes->Update();
SALOME_Actor::SetMapper( myMapper );
aSrcX->Delete();
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++ )
( (GEOM_VTKTrihedronAxis*)myAxis[ 2 ] )->Render( r );
}
-void GEOM_VTKTrihedron::SetColor( float r, float g, float b )
+void GEOM_VTKTrihedron::SetColor( double r, double g, double b )
{
myColor[ 0 ] = r;
myColor[ 1 ] = g;
if ( myAxis[ 2 ] ) ( (GEOM_VTKTrihedronAxis*)myAxis[ 2 ] )->SetColor( myColor );
}
-void GEOM_VTKTrihedron::GetColor( float& r, float& g, float& b )
+void GEOM_VTKTrihedron::GetColor( double& r, double& g, double& b )
{
r = myColor[ 0 ];
g = myColor[ 1 ];
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( double 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] );
+}