Salome HOME
projects
/
modules
/
smesh.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
22711: [CEA 1297] Regression of mesh with a projection on a spherical face
[modules/smesh.git]
/
src
/
OBJECT
/
SMESH_Object.cxx
diff --git
a/src/OBJECT/SMESH_Object.cxx
b/src/OBJECT/SMESH_Object.cxx
index 96b25c9b99e95134faa13b0e26c0c82c2516fff8..71711f81aaae0caf663eb07aea1fbeff8899e998 100644
(file)
--- a/
src/OBJECT/SMESH_Object.cxx
+++ b/
src/OBJECT/SMESH_Object.cxx
@@
-1,4
+1,4
@@
-// Copyright (C) 2007-201
2
CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-201
4
CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@
-6,7
+6,7
@@
// 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
// 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
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
@@
-30,6
+30,7
@@
#include "SMDS_Mesh.hxx"
#include "SMDS_PolyhedralVolumeOfNodes.hxx"
#include "SMDS_Mesh.hxx"
#include "SMDS_PolyhedralVolumeOfNodes.hxx"
+#include "SMDS_BallElement.hxx"
#include "SMESH_Actor.h"
#include "SMESH_ControlsDef.hxx"
#include "SalomeApp_Application.h"
#include "SMESH_Actor.h"
#include "SMESH_ControlsDef.hxx"
#include "SalomeApp_Application.h"
@@
-43,7
+44,7
@@
#include <vtkIdList.h>
#include <vtkCellArray.h>
#include <vtkUnsignedCharArray.h>
#include <vtkIdList.h>
#include <vtkCellArray.h>
#include <vtkUnsignedCharArray.h>
-
+#include <vtkCellData.h>
#include <vtkUnstructuredGrid.h>
#include <memory>
#include <vtkUnstructuredGrid.h>
#include <memory>
@@
-103,6
+104,7
@@
static inline vtkIdType getCellType( const SMDSAbs_ElementType theType,
else if ( theNbNodes == 6 ) return VTK_QUADRATIC_TRIANGLE;
else if ( theNbNodes == 8 ) return VTK_QUADRATIC_QUAD;
else if ( theNbNodes == 9 ) return VTK_BIQUADRATIC_QUAD;
else if ( theNbNodes == 6 ) return VTK_QUADRATIC_TRIANGLE;
else if ( theNbNodes == 8 ) return VTK_QUADRATIC_QUAD;
else if ( theNbNodes == 9 ) return VTK_BIQUADRATIC_QUAD;
+ else if ( theNbNodes == 7 ) return VTK_BIQUADRATIC_TRIANGLE;
else return VTK_EMPTY_CELL;
case SMDSAbs_Volume:
else return VTK_EMPTY_CELL;
case SMDSAbs_Volume:
@@
-278,7
+280,9
@@
void SMESH_VisualObjDef::buildPrs(bool buildGrid)
//MESSAGE(myGrid->GetReferenceCount());
//MESSAGE( "Update - myGrid->GetNumberOfCells() = "<<myGrid->GetNumberOfCells() );
//MESSAGE( "Update - myGrid->GetNumberOfPoints() = "<<myGrid->GetNumberOfPoints() );
//MESSAGE(myGrid->GetReferenceCount());
//MESSAGE( "Update - myGrid->GetNumberOfCells() = "<<myGrid->GetNumberOfCells() );
//MESSAGE( "Update - myGrid->GetNumberOfPoints() = "<<myGrid->GetNumberOfPoints() );
- if( MYDEBUGWITHFILES ) SMESH::WriteUnstructuredGrid( myGrid,"buildPrs.vtu" );
+ if( MYDEBUGWITHFILES ) {
+ SMESH::WriteUnstructuredGrid( myGrid,"myPrs.vtu" );
+ }
}
}
}
}
@@
-416,7
+420,13
@@
void SMESH_VisualObjDef::buildElemPrs()
aConnect.reserve(VTK_CELL_SIZE);
SMDS_Mesh::CheckMemory(); // PAL16631
aConnect.reserve(VTK_CELL_SIZE);
SMDS_Mesh::CheckMemory(); // PAL16631
-
+ bool hasBalls = nbEnts[ SMDSAbs_Ball ] > 0;
+ vtkDataArray* aScalars = 0;
+ if(hasBalls) {
+ aScalars = vtkDataArray::CreateDataArray(VTK_DOUBLE);
+ aScalars->SetNumberOfComponents(1);
+ aScalars->SetNumberOfTuples(aNbCells);
+ }
for ( int i = 0; i < nbTypes; i++ ) // iterate through all types of elements
{
if ( nbEnts[ aTypes[ i ] ] > 0 ) {
for ( int i = 0; i < nbTypes; i++ ) // iterate through all types of elements
{
if ( nbEnts[ aTypes[ i ] ] > 0 ) {
@@
-474,8
+484,19
@@
void SMESH_VisualObjDef::buildElemPrs()
}
}
}
}
}
}
- aConnectivity->InsertNextCell( anIdList );
+
vtkIdType aCurId =
aConnectivity->InsertNextCell( anIdList );
aCellTypesArray->InsertNextValue( vtkElemType );
aCellTypesArray->InsertNextValue( vtkElemType );
+
+ //Store diameters of the balls
+ if(aScalars) {
+ double aDiam = 0;
+ if(aType == SMDSAbs_Ball) {
+ if (const SMDS_BallElement* ball = dynamic_cast<const SMDS_BallElement*>(anElem) ) {
+ aDiam = ball->GetDiameter();
+ }
+ }
+ aScalars->SetTuple(aCurId,&aDiam);
+ }
iElem++;
}
iElem++;
}
@@
-496,6
+517,7
@@
void SMESH_VisualObjDef::buildElemPrs()
aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) );
myGrid->SetCells( aCellTypesArray, aCellLocationsArray,aConnectivity );
aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) );
myGrid->SetCells( aCellTypesArray, aCellLocationsArray,aConnectivity );
+ myGrid->GetCellData()->SetScalars(aScalars);
aCellLocationsArray->Delete();
aCellTypesArray->Delete();
aCellLocationsArray->Delete();
aCellTypesArray->Delete();
@@
-522,7
+544,7
@@
bool SMESH_VisualObjDef::GetEdgeNodes( const int theElemId,
if ( anElem == 0 )
return false;
if ( anElem == 0 )
return false;
- int nbNodes = anElem->NbNodes();
+ int nbNodes = anElem->Nb
Corner
Nodes();
if ( theEdgeNum < 0 || theEdgeNum > 3 || (nbNodes != 3 && nbNodes != 4) || theEdgeNum > nbNodes )
return false;
if ( theEdgeNum < 0 || theEdgeNum > 3 || (nbNodes != 3 && nbNodes != 4) || theEdgeNum > nbNodes )
return false;
@@
-530,7
+552,7
@@
bool SMESH_VisualObjDef::GetEdgeNodes( const int theElemId,
vector<int> anIds( nbNodes );
SMDS_ElemIteratorPtr anIter = anElem->nodesIterator();
int i = 0;
vector<int> anIds( nbNodes );
SMDS_ElemIteratorPtr anIter = anElem->nodesIterator();
int i = 0;
- while( anIter->more() )
+ while( anIter->more()
&& i < nbNodes
)
anIds[ i++ ] = anIter->next()->GetID();
if ( theEdgeNum < nbNodes - 1 )
anIds[ i++ ] = anIter->next()->GetID();
if ( theEdgeNum < nbNodes - 1 )