X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSVTK%2FSVTK_Actor.cxx;h=a4e404ee69cbd7bd39002f4d48c5e9bda91ff20e;hb=refs%2Fheads%2Fngr%2Fpython3_dev_pv5.4;hp=1d32a1c2b1f099d19fb54268ed880cc76671e4ad;hpb=f830c97c748d8f8a6a7eccc8e3a58e19066a1181;p=modules%2Fgui.git diff --git a/src/SVTK/SVTK_Actor.cxx b/src/SVTK/SVTK_Actor.cxx index 1d32a1c2b..a4e404ee6 100644 --- a/src/SVTK/SVTK_Actor.cxx +++ b/src/SVTK/SVTK_Actor.cxx @@ -1,24 +1,30 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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. +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// 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. +// 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. // -// 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 +// 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 +// #include "SVTK_Actor.h" #include "SALOME_Actor.h" +#include "SVTK_Utils.h" + +#include "SALOME_InteractiveObject.hxx" // VTK Includes #include @@ -27,25 +33,17 @@ #include #include +#include +#define VTK_XVERSION (VTK_MAJOR_VERSION*10000+VTK_MINOR_VERSION*100+VTK_BUILD_VERSION) +#if VTK_XVERSION > 50700 +#include +#endif #include -using namespace std; +#include "Utils_SALOME_Exception.hxx" +#include "utilities.h" -static -void -CopyPoints(vtkUnstructuredGrid* theGrid, vtkDataSet *theSourceDataSet) -{ - vtkPoints *aPoints = vtkPoints::New(); - vtkIdType iEnd = theSourceDataSet->GetNumberOfPoints(); - aPoints->SetNumberOfPoints(iEnd); - for(vtkIdType i = 0; i < iEnd; i++){ - aPoints->SetPoint(i,theSourceDataSet->GetPoint(i)); - } - theGrid->SetPoints(aPoints); - aPoints->Delete(); -} - vtkStandardNewMacro(SVTK_Actor); /*! @@ -68,7 +66,7 @@ void SVTK_Actor ::Initialize() { - SetInput(GetSource()); + SetInputData(GetSource()); } void @@ -80,7 +78,7 @@ SVTK_Actor myUnstructuredGrid = theUnstructuredGrid; - SetInput(theUnstructuredGrid); + SetInputData(theUnstructuredGrid); } vtkUnstructuredGrid* @@ -108,19 +106,34 @@ SVTK_Actor void SVTK_Actor ::MapCells(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex) + const TColStd_IndexedMapOfInteger& theMapIndex) { myUnstructuredGrid->Initialize(); myUnstructuredGrid->Allocate(); - vtkDataSet *aSourceDataSet = theMapActor->GetInput(); - CopyPoints(GetSource(),aSourceDataSet); + vtkUnstructuredGrid * aSourceGrid = (vtkUnstructuredGrid *)theMapActor->GetInput(); + GetSource()->SetPoints( aSourceGrid->GetPoints() ); int aNbOfParts = theMapIndex.Extent(); for(int ind = 1; ind <= aNbOfParts; ind++){ int aPartId = theMapIndex( ind ); if(vtkCell* aCell = theMapActor->GetElemCell(aPartId)) - myUnstructuredGrid->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds()); + { +#if VTK_XVERSION > 50700 + if (aCell->GetCellType() != VTK_POLYHEDRON) +#endif + myUnstructuredGrid->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds()); +#if VTK_XVERSION > 50700 + else + { + vtkPolyhedron *polyhedron = dynamic_cast(aCell); + if (!polyhedron) + throw SALOME_Exception(LOCALIZED ("not a polyhedron")); + vtkIdType *pts = polyhedron->GetFaces(); + myUnstructuredGrid->InsertNextCell(aCell->GetCellType(),pts[0], pts+1); + } +#endif + } } UnShrink(); @@ -135,7 +148,7 @@ SVTK_Actor void SVTK_Actor ::MapPoints(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex) + const TColStd_IndexedMapOfInteger& theMapIndex) { myUnstructuredGrid->Initialize(); myUnstructuredGrid->Allocate(); @@ -143,11 +156,13 @@ SVTK_Actor if(int aNbOfParts = theMapIndex.Extent()){ vtkPoints *aPoints = vtkPoints::New(); aPoints->SetNumberOfPoints(aNbOfParts); - for(int i = 0; i < aNbOfParts; i++){ + for(vtkIdType i = 0; i < aNbOfParts; i++){ int aPartId = theMapIndex( i+1 ); - if(vtkFloatingPointType* aCoord = theMapActor->GetNodeCoord(aPartId)){ - aPoints->SetPoint(i,aCoord); - myUnstructuredGrid->InsertNextCell(VTK_VERTEX,1,&i); + if(double* aCoord = theMapActor->GetNodeCoord(aPartId)){ + aPoints->SetPoint(i,aCoord); + // Change the type from int to vtkIdType in order to avoid compilation errors while using VTK + // from ParaView-3.4.0 compiled on 64-bit Debian platform with VTK_USE_64BIT_IDS = ON + myUnstructuredGrid->InsertNextCell(VTK_VERTEX,(vtkIdType) 1,&i); } } myUnstructuredGrid->SetPoints(aPoints); @@ -162,13 +177,13 @@ SVTK_Actor void SVTK_Actor ::MapEdge(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex) + const TColStd_IndexedMapOfInteger& theMapIndex) { myUnstructuredGrid->Initialize(); myUnstructuredGrid->Allocate(); - vtkDataSet *aSourceDataSet = theMapActor->GetInput(); - CopyPoints(GetSource(),aSourceDataSet); + vtkUnstructuredGrid * aSourceGrid = (vtkUnstructuredGrid *)theMapActor->GetInput(); + GetSource()->SetPoints( aSourceGrid->GetPoints() ); if(theMapIndex.Extent() == 2){ @@ -177,14 +192,14 @@ SVTK_Actor if(aCellId > 0){ if(vtkCell* aCell = theMapActor->GetElemCell(aCellId)){ - if(anEdgeId < 0){ - anEdgeId = -anEdgeId - 1; - int aNbOfEdges = aCell->GetNumberOfEdges(); - if(0 <= anEdgeId || anEdgeId < aNbOfEdges){ - if(vtkCell* anEdge = aCell->GetEdge(anEdgeId)) - myUnstructuredGrid->InsertNextCell(VTK_LINE,anEdge->GetPointIds()); - } - } + if(anEdgeId < 0){ + anEdgeId = -anEdgeId - 1; + int aNbOfEdges = aCell->GetNumberOfEdges(); + if(0 <= anEdgeId || anEdgeId < aNbOfEdges){ + if(vtkCell* anEdge = aCell->GetEdge(anEdgeId)) + myUnstructuredGrid->InsertNextCell(VTK_LINE,anEdge->GetPointIds()); + } + } } } } @@ -197,3 +212,20 @@ SVTK_Actor myMapIndex = theMapIndex; } + +/*! + To publish the actor an all its internal devices +*/ +void +SVTK_Actor +::AddToRender(vtkRenderer* theRenderer) +{ + theRenderer->AddActor(this); +} + +void +SVTK_Actor +::RemoveFromRender(vtkRenderer* theRenderer) +{ + theRenderer->RemoveActor(this); +}