Salome HOME
Copyright update 2021
[modules/smesh.git] / src / OBJECT / SMESH_FaceOrientationFilter.cxx
index da38ecf2f11f532fc315375ce4cae7813f5abfeb..e9dbd511da1554eee2c62f2a542d2aee2bb4ec6b 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  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.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 #include <VTKViewer_CellCenters.h>
 
+#include <vtkCellArray.h>
 #include <vtkCellData.h>
 #include <vtkDataSet.h>
-#include <vtkPolyData.h>
-#include <vtkObjectFactory.h>
-#include <vtkInformation.h>
-#include <vtkInformationVector.h>
-
 #include <vtkFloatArray.h>
-#include <vtkCellArray.h>
-#include <vtkMaskPoints.h>
 #include <vtkGlyph3D.h>
 #include <vtkGlyphSource2D.h>
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
+#include <vtkMaskPoints.h>
+#include <vtkObjectFactory.h>
+#include <vtkPolyData.h>
+#include <vtkPolygon.h>
 
 #include <QColor>
 
 #define PI   3.14159265359
 
-vtkCxxRevisionMacro(SMESH_FaceOrientationFilter, "$Revision$");
-vtkStandardNewMacro(SMESH_FaceOrientationFilter);
+vtkStandardNewMacro(SMESH_FaceOrientationFilter)
 
 /*!
  * \class SMESH_FaceOrientationFilter
@@ -61,10 +60,10 @@ SMESH_FaceOrientationFilter::SMESH_FaceOrientationFilter()
   myFacePolyData = vtkPolyData::New();
 
   myFaceCenters = VTKViewer_CellCenters::New();
-  myFaceCenters->SetInput(myFacePolyData);
+  myFaceCenters->SetInputData(myFacePolyData);
 
   myFaceMaskPoints = vtkMaskPoints::New();
-  myFaceMaskPoints->SetInput(myFaceCenters->GetOutput());
+  myFaceMaskPoints->SetInputConnection(myFaceCenters->GetOutputPort());
   myFaceMaskPoints->SetOnRatio(1);
 
   myGlyphSource = vtkGlyphSource2D::New();
@@ -73,11 +72,14 @@ SMESH_FaceOrientationFilter::SMESH_FaceOrientationFilter()
   myGlyphSource->SetCenter(0.5, 0.0, 0.0);
 
   myBaseGlyph = vtkGlyph3D::New();
-  myBaseGlyph->SetInput(myFaceMaskPoints->GetOutput());
+  myBaseGlyph->SetInputConnection(myFaceMaskPoints->GetOutputPort());
   myBaseGlyph->SetVectorModeToUseVector();
   myBaseGlyph->SetScaleModeToDataScalingOff();
   myBaseGlyph->SetColorModeToColorByScalar();
-  myBaseGlyph->SetSource(my3dVectors ? myArrowPolyData : myGlyphSource->GetOutput());
+  if( my3dVectors )
+    myBaseGlyph->SetSourceData(myArrowPolyData);
+  else
+    myBaseGlyph->SetSourceConnection(myGlyphSource->GetOutputPort());
 }
 
 SMESH_FaceOrientationFilter::~SMESH_FaceOrientationFilter()
@@ -90,7 +92,7 @@ SMESH_FaceOrientationFilter::~SMESH_FaceOrientationFilter()
   myBaseGlyph->Delete();
 }
 
-void SMESH_FaceOrientationFilter::SetOrientationScale( vtkFloatingPointType theScale )
+void SMESH_FaceOrientationFilter::SetOrientationScale( double theScale )
 {
   myOrientationScale = theScale;
   Modified();
@@ -99,7 +101,10 @@ void SMESH_FaceOrientationFilter::SetOrientationScale( vtkFloatingPointType theS
 void SMESH_FaceOrientationFilter::Set3dVectors( bool theState )
 {
   my3dVectors = theState;
-  myBaseGlyph->SetSource(my3dVectors ? myArrowPolyData : myGlyphSource->GetOutput());
+  if( my3dVectors )
+    myBaseGlyph->SetSourceData(myArrowPolyData);
+  else
+    myBaseGlyph->SetSourceConnection(myGlyphSource->GetOutputPort());
   Modified();
 }
 
@@ -211,13 +216,16 @@ void GetFaceParams( vtkCell* theFace, double theNormal[3], double& theSize )
   vtkPoints* aPoints = theFace->GetPoints();
 
   // here we get first 3 points from the face and calculate the normal as a cross-product of vectors
-  double x0 = aPoints->GetPoint(0)[0], y0 = aPoints->GetPoint(0)[1], z0 = aPoints->GetPoint(0)[2];
-  double x1 = aPoints->GetPoint(1)[0], y1 = aPoints->GetPoint(1)[1], z1 = aPoints->GetPoint(1)[2];
-  double x2 = aPoints->GetPoint(2)[0], y2 = aPoints->GetPoint(2)[1], z2 = aPoints->GetPoint(2)[2];
+  // double x0 = aPoints->GetPoint(0)[0], y0 = aPoints->GetPoint(0)[1], z0 = aPoints->GetPoint(0)[2];
+  // double x1 = aPoints->GetPoint(1)[0], y1 = aPoints->GetPoint(1)[1], z1 = aPoints->GetPoint(1)[2];
+  // double x2 = aPoints->GetPoint(2)[0], y2 = aPoints->GetPoint(2)[1], z2 = aPoints->GetPoint(2)[2];
+
+  // theNormal[0] = ( y1 - y0 ) * ( z2 - z0 ) - ( z1 - z0 ) * ( y2 - y0 );
+  // theNormal[1] = ( z1 - z0 ) * ( x2 - x0 ) - ( x1 - x0 ) * ( z2 - z0 );
+  // theNormal[2] = ( x1 - x0 ) * ( y2 - y0 ) - ( y1 - y0 ) * ( x2 - x0 );
 
-  theNormal[0] = ( y1 - y0 ) * ( z2 - z0 ) - ( z1 - z0 ) * ( y2 - y0 );
-  theNormal[1] = ( z1 - z0 ) * ( x2 - x0 ) - ( x1 - x0 ) * ( z2 - z0 );
-  theNormal[2] = ( x1 - x0 ) * ( y2 - y0 ) - ( y1 - y0 ) * ( x2 - x0 );
+  // issue #18665: Polyhedron volume calculation
+  vtkPolygon::ComputeNormal( aPoints, theNormal );
 
   double* aBounds = theFace->GetBounds();
   theSize = pow( pow( aBounds[1] - aBounds[0], 2 ) +
@@ -229,7 +237,7 @@ void GetFaceParams( vtkCell* theFace, double theNormal[3], double& theSize )
  * Execute method. Output calculation.
  */
 int SMESH_FaceOrientationFilter::RequestData(
-  vtkInformation *request,
+  vtkInformation * /*request*/,
   vtkInformationVector **inputVector,
   vtkInformationVector *outputVector)
 {
@@ -237,7 +245,7 @@ int SMESH_FaceOrientationFilter::RequestData(
   vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
   vtkInformation *outInfo = outputVector->GetInformationObject(0);
 
-  // get the input and ouptut
+  // get the input and output
   vtkDataSet *input = vtkDataSet::SafeDownCast(
     inInfo->Get(vtkDataObject::DATA_OBJECT()));
   vtkPolyData *output = vtkPolyData::SafeDownCast(