X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_FaceOrientationFilter.cxx;h=e9dbd511da1554eee2c62f2a542d2aee2bb4ec6b;hb=a274ade365bd0f0e19d56c577acc4a13aa1972a7;hp=da38ecf2f11f532fc315375ce4cae7813f5abfeb;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6;p=modules%2Fsmesh.git diff --git a/src/OBJECT/SMESH_FaceOrientationFilter.cxx b/src/OBJECT/SMESH_FaceOrientationFilter.cxx index da38ecf2f..e9dbd511d 100644 --- a/src/OBJECT/SMESH_FaceOrientationFilter.cxx +++ b/src/OBJECT/SMESH_FaceOrientationFilter.cxx @@ -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 @@ -25,25 +25,24 @@ #include +#include #include #include -#include -#include -#include -#include - #include -#include -#include #include #include +#include +#include +#include +#include +#include +#include #include #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(