-// Copyright (C) 2010-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2014 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
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-#define CHRONODEF
#include "SMDS_UnstructuredGrid.hxx"
#include "SMDS_Mesh.hxx"
#include "SMDS_MeshInfo.hxx"
return new SMDS_CellLinks();
}
-vtkCellLinks::Link* SMDS_CellLinks::ResizeL(vtkIdType sz)
+void SMDS_CellLinks::ResizeForPoint(vtkIdType vtkID)
{
- return vtkCellLinks::Resize(sz);
-}
-
-vtkIdType SMDS_CellLinks::GetLinksSize()
-{
- return this->Size;
+ if ( vtkID > this->MaxId )
+ {
+ this->MaxId = vtkID;
+ if ( vtkID >= this->Size )
+ vtkCellLinks::Resize( vtkID+SMDS_Mesh::chunkSize );
+ }
}
SMDS_CellLinks::SMDS_CellLinks() :
MESSAGE("vtkUnstructuredGrid::GetMTime: " << mtime);
return mtime;
}
-
+// OUV_PORTING_VTK6: seems to be useless
+/*
void SMDS_UnstructuredGrid::Update()
{
MESSAGE("SMDS_UnstructuredGrid::Update");
MESSAGE("SMDS_UnstructuredGrid::UpdateInformation");
return vtkUnstructuredGrid::UpdateInformation();
}
-
+*/
vtkPoints* SMDS_UnstructuredGrid::GetPoints()
{
// TODO erreur incomprehensible de la macro vtk GetPoints apparue avec la version paraview de fin aout 2010
void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int newNodeSize,
std::vector<int>& idCellsOldToNew, int newCellSize)
{
- MESSAGE("------------------------- SMDS_UnstructuredGrid::compactGrid " << newNodeSize << " " << newCellSize);CHRONO(1);
+ MESSAGE("------------------------- SMDS_UnstructuredGrid::compactGrid " << newNodeSize << " " << newCellSize);//CHRONO(1);
int alreadyCopied = 0;
// --- if newNodeSize, create a new compacted vtkPoints
}
newFaceLocations->Squeeze();
newFaces->Squeeze();
- newFaceLocations->Register(this);
- newFaces->Register(this);
this->SetCells(newTypes, newLocations, newConnectivity, newFaceLocations, newFaces);
newFaceLocations->Delete();
newFaces->Delete();
int start,
int end)
{
- MESSAGE("copyBloc " << alreadyCopied << " " << start << " " << end << " size: " << end - start << " total: " << alreadyCopied + end - start);
+ //MESSAGE("copyBloc " << alreadyCopied << " " << start << " " << end << " size: " << end - start << " total: " << alreadyCopied + end - start);
for (int j = start; j < end; j++)
{
newTypes->SetValue(alreadyCopied, this->Types->GetValue(j));
_downArray[VTK_QUADRATIC_EDGE] = new SMDS_DownQuadEdge(this);
_downArray[VTK_TRIANGLE] = new SMDS_DownTriangle(this);
_downArray[VTK_QUADRATIC_TRIANGLE] = new SMDS_DownQuadTriangle(this);
+ _downArray[VTK_BIQUADRATIC_TRIANGLE] = new SMDS_DownQuadTriangle(this);
_downArray[VTK_QUAD] = new SMDS_DownQuadrangle(this);
_downArray[VTK_QUADRATIC_QUAD] = new SMDS_DownQuadQuadrangle(this);
_downArray[VTK_BIQUADRATIC_QUAD] = new SMDS_DownQuadQuadrangle(this);
GuessSize[VTK_QUADRATIC_EDGE] = nbQuadEdgeGuess;
GuessSize[VTK_TRIANGLE] = nbLinTriaGuess;
GuessSize[VTK_QUADRATIC_TRIANGLE] = nbQuadTriaGuess;
+ GuessSize[VTK_BIQUADRATIC_TRIANGLE] = nbQuadTriaGuess;
GuessSize[VTK_QUAD] = nbLinQuadGuess;
GuessSize[VTK_QUADRATIC_QUAD] = nbQuadQuadGuess;
GuessSize[VTK_BIQUADRATIC_QUAD] = nbQuadQuadGuess;
_downArray[VTK_QUADRATIC_EDGE] ->allocate(nbQuadEdgeGuess);
_downArray[VTK_TRIANGLE] ->allocate(nbLinTriaGuess);
_downArray[VTK_QUADRATIC_TRIANGLE] ->allocate(nbQuadTriaGuess);
+ _downArray[VTK_BIQUADRATIC_TRIANGLE] ->allocate(nbQuadTriaGuess);
_downArray[VTK_QUAD] ->allocate(nbLinQuadGuess);
_downArray[VTK_QUADRATIC_QUAD] ->allocate(nbQuadQuadGuess);
_downArray[VTK_BIQUADRATIC_QUAD] ->allocate(nbQuadQuadGuess);
* @param vtkId the vtk id of the cell
* @return number of neighbors
*/
-int SMDS_UnstructuredGrid::GetNeighbors(int* neighborsVtkIds, int* downIds, unsigned char* downTypes, int vtkId)
+int SMDS_UnstructuredGrid::GetNeighbors(int* neighborsVtkIds, int* downIds, unsigned char* downTypes, int vtkId, bool getSkin)
{
int vtkType = this->GetCellType(vtkId);
int cellDim = SMDS_Downward::getCellDimension(vtkType);
downIds[nb] = downId;
downTypes[nb] = cellType;
nb++;
+ if (nb >= NBMAXNEIGHBORS)
+ {
+ INFOS("SMDS_UnstructuredGrid::GetNeighbors problem: NBMAXNEIGHBORS=" <<NBMAXNEIGHBORS << " not enough");
+ return nb;
+ }
+ }
+ if (getSkin)
+ {
+ if (cellDim == 3 && nbUp == 1) // this face is on the skin of the volume
+ {
+ neighborsVtkIds[nb] = _downArray[cellType]->getVtkCellId(downId); // OK if skin present
+ downIds[nb] = downId;
+ downTypes[nb] = cellType;
+ nb++;
+ if (nb >= NBMAXNEIGHBORS)
+ {
+ INFOS("SMDS_UnstructuredGrid::GetNeighbors problem: NBMAXNEIGHBORS=" <<NBMAXNEIGHBORS << " not enough");
+ return nb;
+ }
+ }
}
- if (nb >= NBMAXNEIGHBORS)
- assert(0);
}
return nb;
}
double *coords = this->GetPoint(oldId);
SMDS_MeshNode *newNode = _mesh->AddNode(coords[0], coords[1], coords[2]);
newId = newNode->getVtkId();
- std::map<long, int> emptyMap;
- nodeQuadDomains[oldId] = emptyMap;
+ if (! nodeQuadDomains.count(oldId))
+ {
+ std::map<long, int> emptyMap;
+ nodeQuadDomains[oldId] = emptyMap;
+ }
nodeQuadDomains[oldId][dom1_2] = newId;
}
orderedNodes.push_back(newId);