X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_DeviceActor.cxx;h=bf9521bab009c42893fcc3ec4cc4cac86c0d90b7;hb=HEAD;hp=338994a650c94c3b0c6ca9c77fc54a43d671c630;hpb=a274ade365bd0f0e19d56c577acc4a13aa1972a7;p=modules%2Fsmesh.git diff --git a/src/OBJECT/SMESH_DeviceActor.cxx b/src/OBJECT/SMESH_DeviceActor.cxx index 338994a65..be17fe3c3 100644 --- a/src/OBJECT/SMESH_DeviceActor.cxx +++ b/src/OBJECT/SMESH_DeviceActor.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -31,7 +31,7 @@ #include "SMESH_ControlsDef.hxx" #include "SMESH_ActorUtils.h" #include "SMESH_FaceOrientationFilter.h" -#include "VTKViewer_CellLocationsArray.h" +//#include "VTKViewer_CellLocationsArray.h" #include "VTKViewer_PolyDataMapper.h" #include @@ -60,7 +60,7 @@ #include #include -#include +#include #include @@ -68,11 +68,6 @@ #include "utilities.h" -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif using namespace std; @@ -83,7 +78,7 @@ vtkStandardNewMacro(SMESH_DeviceActor) SMESH_DeviceActor ::SMESH_DeviceActor() { - if(MYDEBUG) MESSAGE("SMESH_DeviceActor - "<Delete(); // myPlaneCollection->Delete(); -- it is vtkSmartPointer @@ -161,7 +156,7 @@ SMESH_DeviceActor myTransformFilter->Delete(); - for(int i = 0, iEnd = myPassFilter.size(); i < iEnd; i++) + for(size_t i = 0, iEnd = myPassFilter.size(); i < iEnd; i++) myPassFilter[i]->Delete(); myShrinkFilter->Delete(); @@ -426,7 +421,7 @@ SMESH_DeviceActor aCellTypesArray->SetNumberOfTuples( aNbCells ); aScalars->SetNumberOfTuples( aNbCells ); - VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New(); + vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New(); aCellLocationsArray->SetNumberOfComponents( 1 ); aCellLocationsArray->SetNumberOfTuples( aNbCells ); @@ -491,7 +486,7 @@ SMESH_DeviceActor aCellTypesArray->SetNumberOfTuples( aNbCells ); aScalars->SetNumberOfTuples( aNbCells ); - VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New(); + vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New(); aCellLocationsArray->SetNumberOfComponents( 1 ); aCellLocationsArray->SetNumberOfTuples( aNbCells ); @@ -509,6 +504,80 @@ SMESH_DeviceActor theLookupTable->SetRange(aScalars->GetRange()); theLookupTable->Build(); + myMergeFilter->SetScalarsData(aDataSet); + aDataSet->Delete(); + } + else if (Warping3D* aWarping3D = dynamic_cast(theFunctor.get())){ + + SMESH::Controls::Warping3D::WValues aValues; + + aWarping3D->GetValues(aValues); + vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New(); + vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid(); + + aDataSet->SetPoints(aGrid->GetPoints()); + + vtkIdType aNbCells = aValues.size(); + + vtkDoubleArray* aScalars = vtkDoubleArray::New(); + aScalars->SetNumberOfComponents(1); + aScalars->SetNumberOfTuples(aNbCells); + + vtkIdType aCellsSize = 3 * aNbCells; + vtkCellArray* aConnectivity = vtkCellArray::New(); + aConnectivity->Allocate(aCellsSize, 0); + + vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); + aCellTypesArray->SetNumberOfComponents(1); + aCellTypesArray->Allocate(aNbCells* aCellTypesArray->GetNumberOfComponents()); + + Warping3D::WValues::const_iterator anIter = aValues.begin(); + aNbCells = 0; + for (; anIter != aValues.end(); anIter++) { + + const Warping3D::Value& aValue = *anIter; + vtkIdList* anIdList = vtkIdList::New(); + anIdList->SetNumberOfIds(aValue.myPntIds.size()); + bool isExist = true; + for (int i = 0; i < aValue.myPntIds.size(); ++i) + { + int aVTKId = myVisualObj->GetNodeVTKId(aValue.myPntIds[i]); + if (aVTKId < 0) + { + isExist = false; + break; + } + anIdList->SetId(i, aVTKId); + } + if (isExist) + { + aConnectivity->InsertNextCell(anIdList); + aCellTypesArray->InsertNextValue(VTK_POLYGON); + aScalars->SetValue(aNbCells, aValue.myWarp); + aNbCells++; + } + } + aCellTypesArray->SetNumberOfTuples(aNbCells); + aScalars->SetNumberOfTuples(aNbCells); + + vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New(); + aCellLocationsArray->SetNumberOfComponents(1); + aCellLocationsArray->SetNumberOfTuples(aNbCells); + + aConnectivity->InitTraversal(); + vtkIdType const* pts(nullptr); + for (vtkIdType idType = 0, npts; aConnectivity->GetNextCell(npts, pts); idType++) + aCellLocationsArray->SetValue(idType, aConnectivity->GetTraversalLocation(npts)); + + aDataSet->SetCells(aCellTypesArray, aCellLocationsArray, aConnectivity); + SetUnstructuredGrid(aDataSet); + + aDataSet->GetCellData()->SetScalars(aScalars); + aScalars->Delete(); + + theLookupTable->SetRange(aScalars->GetRange()); + theLookupTable->Build(); + myMergeFilter->SetScalarsData(aDataSet); aDataSet->Delete(); } @@ -586,7 +655,7 @@ SMESH_DeviceActor } } - VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New(); + vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New(); aCellLocationsArray->SetNumberOfComponents( 1 ); aCellLocationsArray->SetNumberOfTuples( aNbCells ); @@ -604,7 +673,7 @@ SMESH_DeviceActor ( aPredicate = dynamic_cast(theFunctor.get()))) { myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); - vtkIdType aNbNodes = myVisualObj->GetNbEntities(SMDSAbs_Node); + vtkIdType aNbNodes = FromSmIdType(myVisualObj->GetNbEntities(SMDSAbs_Node)); for( vtkIdType i = 0; i < aNbNodes; i++ ){ vtkIdType anObjId = myVisualObj->GetNodeObjId(i); if(aPredicate->IsSatisfy(anObjId)) @@ -783,6 +852,8 @@ SMESH_DeviceActor myGeomFilter->SetInside(false); myGeomFilter->SetWireframeMode(false); GetProperty()->SetRepresentation(theMode); + case eNoneRepr: + return; } SetMarkerEnabled(theMode == ePoint); myRepresentation = theMode; @@ -839,9 +910,9 @@ SMESH_DeviceActor } -int +vtkIdType SMESH_DeviceActor -::GetNodeObjId(int theVtkID) +::GetNodeObjId(vtkIdType theVtkID) { vtkIdType anID = theVtkID; @@ -849,31 +920,31 @@ SMESH_DeviceActor anID = myExtractGeometry->GetNodeObjId(theVtkID); vtkIdType aRetID = myVisualObj->GetNodeObjId(anID); - if(MYDEBUG) MESSAGE("GetNodeObjId - theVtkID = "<