]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
Salome HOME
Merge branch 'V9_13_BR'
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_AddMeshElementDlg.cxx
index e4654aa620cc1ab8b8104f30185e55b89ba0805f..a1af7d57277e84216a85a4f7ddc6fe5ca24b00a0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  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
@@ -70,6 +70,8 @@
 #include <vtkPolyDataMapper.h>
 #include <vtkProperty.h>
 #include <vtkCellData.h>
+#include <vtkTriangleFilter.h>
+#include <vtkGeometryFilter.h>
 
 // Qt includes
 #include <QComboBox>
@@ -108,6 +110,8 @@ namespace SMESH
     SALOME_Actor* myFaceOrientation;
     vtkPolyDataMapper* myFaceOrientationDataMapper;
     SMESH_FaceOrientationFilter* myFaceOrientationFilter;
+    vtkSmartPointer<vtkGeometryFilter> myGeometryFilter = nullptr;
+    vtkSmartPointer<vtkTriangleFilter> myTriangleFilter = nullptr;
 
   public:
     TElementSimulation (SalomeApp_Application* theApplication)
@@ -120,9 +124,15 @@ namespace SMESH
 
       myGrid = vtkUnstructuredGrid::New();
 
+      myGeometryFilter = vtkSmartPointer<vtkGeometryFilter>::New();
+      myGeometryFilter->SetInputData(myGrid);
+
+      myTriangleFilter = vtkSmartPointer<vtkTriangleFilter>::New();
+      myTriangleFilter->SetInputConnection(myGeometryFilter->GetOutputPort());
+
       // Create and display actor
       myMapper = vtkDataSetMapper::New();
-      myMapper->SetInputData(myGrid);
+      myMapper->SetInputConnection(myTriangleFilter->GetOutputPort());
 
       myPreviewActor = SALOME_Actor::New();
       myPreviewActor->PickableOff();
@@ -148,7 +158,7 @@ namespace SMESH
 
       // Orientation of faces
       myFaceOrientationFilter = SMESH_FaceOrientationFilter::New();
-      myFaceOrientationFilter->SetInputData(myGrid);
+      myFaceOrientationFilter->SetInputConnection(myTriangleFilter->GetOutputPort());
 
       myFaceOrientationDataMapper = vtkPolyDataMapper::New();
       myFaceOrientationDataMapper->SetInputConnection(myFaceOrientationFilter->GetOutputPort());
@@ -209,6 +219,9 @@ namespace SMESH
       myGrid->InsertNextCell(theType,anIds);
       anIds->Delete();
 
+      myGeometryFilter->Update();
+      myTriangleFilter->Update();
+
       myGrid->Modified();
 
       SetVisibility(true, theActor->GetFacesOriented(), false);
@@ -217,6 +230,7 @@ namespace SMESH
     void SetBallPosition(SMESH_Actor* theActor,TVTKIds& theIds, double theDiameter)
     {
       vtkUnstructuredGrid *aGrid = theActor->GetUnstructuredGrid();
+      myBallPolyData->SetPoints(NULL);
       myBallPolyData->Reset();
       myBallPolyData->DeleteCells();
       myBallPolyData->SetPoints(aGrid->GetPoints());
@@ -552,7 +566,7 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
   if (myNbOkNodes && !SMESHGUI::isStudyLocked()) {
     myBusy = true;
     QStringList aListId = myEditCurrentArgument->text().split(" ", QString::SkipEmptyParts);
-    SMESH::long_array_var anArrayOfIndices = new SMESH::long_array;
+    SMESH::smIdType_array_var anArrayOfIndices = new SMESH::smIdType_array;
     anArrayOfIndices->length(aListId.count());
     const std::vector<int>& revIndex = SMDS_MeshCell::reverseSmdsOrder( myGeomType );
     if ( ReverseOrDulicate && ReverseOrDulicate->isChecked() && (int)revIndex.size() == aListId.count() )
@@ -597,10 +611,10 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
     }
 
     SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
-    SMESH::long_array_var anIdList = new SMESH::long_array;
+    SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
     anIdList->length( 1 );
     anIdList[0] = -1;
-    int nbElemsBefore = 0;
+    smIdType nbElemsBefore = 0;
 
     switch (myElementType) {
     case SMDSAbs_0DElement: {
@@ -610,7 +624,7 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
       for ( size_t i = 0; i < anArrayOfIndices->length(); ++i )
         anIdList[i] = aMeshEditor->Add0DElement(anArrayOfIndices[i], duplicateElements);
 
-      CORBA::ULong nbAdded = myMesh->Nb0DElements() - nbElemsBefore;
+      SMESH::smIdType nbAdded = myMesh->Nb0DElements() - nbElemsBefore;
       if ( !duplicateElements && nbAdded < anArrayOfIndices->length() )
         SUIT_MessageBox::information(SMESHGUI::desktop(),
                                      tr("SMESH_INFORMATION"),
@@ -783,7 +797,7 @@ void SMESHGUI_AddMeshElementDlg::onTextChange (const QString& theNewText)
     aMesh = myActor->GetObject()->GetMesh();
 
   if (aMesh) {
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
     bool allOk = true;