-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014 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
// 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 "SMDS_Mesh.hxx"
#include "SMDS_PolyhedralVolumeOfNodes.hxx"
+#include "SMDS_BallElement.hxx"
#include "SMESH_Actor.h"
#include "SMESH_ControlsDef.hxx"
#include "SalomeApp_Application.h"
#include <vtkIdList.h>
#include <vtkCellArray.h>
#include <vtkUnsignedCharArray.h>
-
+#include <vtkCellData.h>
#include <vtkUnstructuredGrid.h>
#include <memory>
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:
//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" );
+ }
}
}
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 ) {
}
}
}
- aConnectivity->InsertNextCell( anIdList );
+ vtkIdType aCurId = aConnectivity->InsertNextCell( anIdList );
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++;
}
aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) );
myGrid->SetCells( aCellTypesArray, aCellLocationsArray,aConnectivity );
+ myGrid->GetCellData()->SetScalars(aScalars);
aCellLocationsArray->Delete();
aCellTypesArray->Delete();
if ( anElem == 0 )
return false;
- int nbNodes = anElem->NbNodes();
+ int nbNodes = anElem->NbCornerNodes();
if ( theEdgeNum < 0 || theEdgeNum > 3 || (nbNodes != 3 && nbNodes != 4) || theEdgeNum > nbNodes )
return false;
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 )
bool SMESH_VisualObjDef::IsValid() const
{
//MESSAGE("SMESH_VisualObjDef::IsValid");
- return GetNbEntities(SMDSAbs_Node) > 0 ||
- GetNbEntities(SMDSAbs_0DElement) > 0 ||
- GetNbEntities(SMDSAbs_Ball) > 0 ||
- GetNbEntities(SMDSAbs_Edge) > 0 ||
- GetNbEntities(SMDSAbs_Face) > 0 ||
- GetNbEntities(SMDSAbs_Volume) > 0 ;
+ return ( GetNbEntities(SMDSAbs_0DElement) > 0 ||
+ GetNbEntities(SMDSAbs_Ball ) > 0 ||
+ GetNbEntities(SMDSAbs_Edge ) > 0 ||
+ GetNbEntities(SMDSAbs_Face ) > 0 ||
+ GetNbEntities(SMDSAbs_Volume ) > 0 ||
+ GetNbEntities(SMDSAbs_Node ) > 0 );
}
//=================================================================================
{
if ( MYDEBUG )
MESSAGE("SMESH_MeshObj - this = "<<this<<"\n");
+ if ( myEmptyGrid )
+ myEmptyGrid->Delete();
}
//=================================================================================
theResList.clear();
SMDS_Mesh* aMesh = myMeshObj->GetMesh();
- if ( myGroupServer->Size() == 0 || aMesh == 0 )
+ if ( aMesh == 0 )
return 0;
SMDSAbs_ElementType aGrpType = SMDSAbs_ElementType(myGroupServer->GetType());
+ if ( aGrpType != theType && theType != SMDSAbs_Node )
+ return 0;
+
SMESH::long_array_var anIds = myGroupServer->GetListOfID();
+ if ( anIds->length() == 0 )
+ return 0;
if ( aGrpType == theType )
return getPointers( theType, anIds, aMesh, theResList );
return getNodesFromElems( anIds, aMesh, theResList );
else
return 0;
-}
+}