mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
STYLE: avoid VTK InsertNextPoint if we already know the sizes
- avoids potentially issues if we reusing a vtkPoints array, and should be marginally faster without the additional range checking.
This commit is contained in:
@ -332,7 +332,7 @@ class vtkPVFoam
|
|||||||
template<class PatchType>
|
template<class PatchType>
|
||||||
vtkSmartPointer<vtkPolyData> patchVTKMesh
|
vtkSmartPointer<vtkPolyData> patchVTKMesh
|
||||||
(
|
(
|
||||||
const word& name,
|
const string& name,
|
||||||
const PatchType& p
|
const PatchType& p
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -602,15 +602,14 @@ void Foam::vtkPVFoam::convertPointField
|
|||||||
const labelUList& addPointCellLabels = vtuData.additionalIds();
|
const labelUList& addPointCellLabels = vtuData.additionalIds();
|
||||||
const labelUList& pointMap = vtuData.pointMap();
|
const labelUList& pointMap = vtuData.pointMap();
|
||||||
|
|
||||||
// use a pointMap or address directly into mesh
|
// Use a pointMap or address directly into mesh
|
||||||
const label nPoints = (pointMap.size() ? pointMap.size() : pfld.size());
|
const label nPoints = (pointMap.size() ? pointMap.size() : pfld.size());
|
||||||
|
|
||||||
vtkSmartPointer<vtkFloatArray> fldData =
|
vtkSmartPointer<vtkFloatArray> fldData =
|
||||||
vtkSmartPointer<vtkFloatArray>::New();
|
vtkSmartPointer<vtkFloatArray>::New();
|
||||||
|
|
||||||
fldData->SetNumberOfTuples(nPoints + addPointCellLabels.size());
|
|
||||||
fldData->SetNumberOfComponents(nComp);
|
fldData->SetNumberOfComponents(nComp);
|
||||||
fldData->Allocate(nComp*(nPoints + addPointCellLabels.size()));
|
fldData->SetNumberOfTuples(nPoints + addPointCellLabels.size());
|
||||||
|
|
||||||
// Note: using the name of the original volField
|
// Note: using the name of the original volField
|
||||||
// not the name generated by the interpolation "volPointInterpolate(<name>)"
|
// not the name generated by the interpolation "volPointInterpolate(<name>)"
|
||||||
@ -635,6 +634,7 @@ void Foam::vtkPVFoam::convertPointField
|
|||||||
|
|
||||||
float vec[nComp];
|
float vec[nComp];
|
||||||
|
|
||||||
|
label pointi = 0;
|
||||||
if (pointMap.size())
|
if (pointMap.size())
|
||||||
{
|
{
|
||||||
forAll(pointMap, i)
|
forAll(pointMap, i)
|
||||||
@ -646,7 +646,7 @@ void Foam::vtkPVFoam::convertPointField
|
|||||||
}
|
}
|
||||||
foamPvFields::remapTuple<Type>(vec);
|
foamPvFields::remapTuple<Type>(vec);
|
||||||
|
|
||||||
fldData->InsertTuple(i, vec);
|
fldData->SetTuple(pointi++, vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -660,12 +660,11 @@ void Foam::vtkPVFoam::convertPointField
|
|||||||
}
|
}
|
||||||
foamPvFields::remapTuple<Type>(vec);
|
foamPvFields::remapTuple<Type>(vec);
|
||||||
|
|
||||||
fldData->InsertTuple(i, vec);
|
fldData->SetTuple(pointi++, vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// continue insertion from here
|
// Continue additional points
|
||||||
label i = nPoints;
|
|
||||||
|
|
||||||
if (&vfld != &GeometricField<Type, fvPatchField, volMesh>::null())
|
if (&vfld != &GeometricField<Type, fvPatchField, volMesh>::null())
|
||||||
{
|
{
|
||||||
@ -678,7 +677,7 @@ void Foam::vtkPVFoam::convertPointField
|
|||||||
}
|
}
|
||||||
foamPvFields::remapTuple<Type>(vec);
|
foamPvFields::remapTuple<Type>(vec);
|
||||||
|
|
||||||
fldData->InsertTuple(i++, vec);
|
fldData->SetTuple(pointi++, vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -692,7 +691,7 @@ void Foam::vtkPVFoam::convertPointField
|
|||||||
}
|
}
|
||||||
foamPvFields::remapTuple<Type>(vec);
|
foamPvFields::remapTuple<Type>(vec);
|
||||||
|
|
||||||
fldData->InsertTuple(i++, vec);
|
fldData->SetTuple(pointi++, vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -766,22 +765,21 @@ Foam::vtkPVFoam::convertFieldToVTK
|
|||||||
vtkSmartPointer<vtkFloatArray> fldData =
|
vtkSmartPointer<vtkFloatArray> fldData =
|
||||||
vtkSmartPointer<vtkFloatArray>::New();
|
vtkSmartPointer<vtkFloatArray>::New();
|
||||||
|
|
||||||
fldData->SetNumberOfTuples(fld.size());
|
|
||||||
fldData->SetNumberOfComponents(nComp);
|
fldData->SetNumberOfComponents(nComp);
|
||||||
fldData->Allocate(nComp*fld.size());
|
fldData->SetNumberOfTuples(fld.size());
|
||||||
fldData->SetName(name.c_str());
|
fldData->SetName(name.c_str());
|
||||||
|
|
||||||
float vec[nComp];
|
float vec[nComp];
|
||||||
forAll(fld, i)
|
forAll(fld, idx)
|
||||||
{
|
{
|
||||||
const Type& t = fld[i];
|
const Type& t = fld[idx];
|
||||||
for (direction d=0; d<nComp; ++d)
|
for (direction d=0; d<nComp; ++d)
|
||||||
{
|
{
|
||||||
vec[d] = component(t, d);
|
vec[d] = component(t, d);
|
||||||
}
|
}
|
||||||
foamPvFields::remapTuple<Type>(vec);
|
foamPvFields::remapTuple<Type>(vec);
|
||||||
|
|
||||||
fldData->InsertTuple(i, vec);
|
fldData->SetTuple(idx, vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fldData;
|
return fldData;
|
||||||
@ -814,18 +812,17 @@ Foam::vtkPVFoam::convertFaceFieldToVTK
|
|||||||
vtkSmartPointer<vtkFloatArray> fldData =
|
vtkSmartPointer<vtkFloatArray> fldData =
|
||||||
vtkSmartPointer<vtkFloatArray>::New();
|
vtkSmartPointer<vtkFloatArray>::New();
|
||||||
|
|
||||||
fldData->SetNumberOfTuples(faceLabels.size());
|
|
||||||
fldData->SetNumberOfComponents(nComp);
|
fldData->SetNumberOfComponents(nComp);
|
||||||
fldData->Allocate(nComp*faceLabels.size());
|
fldData->SetNumberOfTuples(faceLabels.size());
|
||||||
fldData->SetName(fld.name().c_str());
|
fldData->SetName(fld.name().c_str());
|
||||||
|
|
||||||
float vec[nComp];
|
float vec[nComp];
|
||||||
|
|
||||||
// for interior faces: average owner/neighbour
|
// for interior faces: average owner/neighbour
|
||||||
// for boundary faces: owner
|
// for boundary faces: owner
|
||||||
forAll(faceLabels, facei)
|
forAll(faceLabels, idx)
|
||||||
{
|
{
|
||||||
const label faceNo = faceLabels[facei];
|
const label faceNo = faceLabels[idx];
|
||||||
if (faceNo < nInternalFaces)
|
if (faceNo < nInternalFaces)
|
||||||
{
|
{
|
||||||
Type t = 0.5*(fld[faceOwner[faceNo]] + fld[faceNeigh[faceNo]]);
|
Type t = 0.5*(fld[faceOwner[faceNo]] + fld[faceNeigh[faceNo]]);
|
||||||
@ -845,7 +842,7 @@ Foam::vtkPVFoam::convertFaceFieldToVTK
|
|||||||
}
|
}
|
||||||
foamPvFields::remapTuple<Type>(vec);
|
foamPvFields::remapTuple<Type>(vec);
|
||||||
|
|
||||||
fldData->InsertTuple(facei, vec);
|
fldData->SetTuple(idx, vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fldData;
|
return fldData;
|
||||||
@ -866,9 +863,8 @@ Foam::vtkPVFoam::convertVolFieldToVTK
|
|||||||
vtkSmartPointer<vtkFloatArray> fldData =
|
vtkSmartPointer<vtkFloatArray> fldData =
|
||||||
vtkSmartPointer<vtkFloatArray>::New();
|
vtkSmartPointer<vtkFloatArray>::New();
|
||||||
|
|
||||||
fldData->SetNumberOfTuples(cellMap.size());
|
|
||||||
fldData->SetNumberOfComponents(nComp);
|
fldData->SetNumberOfComponents(nComp);
|
||||||
fldData->Allocate(nComp*cellMap.size());
|
fldData->SetNumberOfTuples(cellMap.size());
|
||||||
fldData->SetName(fld.name().c_str());
|
fldData->SetName(fld.name().c_str());
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
@ -891,7 +887,7 @@ Foam::vtkPVFoam::convertVolFieldToVTK
|
|||||||
}
|
}
|
||||||
foamPvFields::remapTuple<Type>(vec);
|
foamPvFields::remapTuple<Type>(vec);
|
||||||
|
|
||||||
fldData->InsertTuple(i, vec);
|
fldData->SetTuple(i, vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fldData;
|
return fldData;
|
||||||
|
|||||||
@ -575,17 +575,21 @@ void Foam::vtkPVFoam::convertMeshPointZones
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const pointField& meshPoints = mesh.points();
|
||||||
const labelUList& pointLabels = zMesh[zoneId];
|
const labelUList& pointLabels = zMesh[zoneId];
|
||||||
|
|
||||||
vtkSmartPointer<vtkPoints> vtkpoints =
|
vtkSmartPointer<vtkPoints> vtkpoints =
|
||||||
vtkSmartPointer<vtkPoints>::New();
|
vtkSmartPointer<vtkPoints>::New();
|
||||||
|
|
||||||
vtkpoints->Allocate(pointLabels.size());
|
vtkpoints->SetNumberOfPoints(pointLabels.size());
|
||||||
|
|
||||||
const pointField& meshPoints = mesh.points();
|
|
||||||
forAll(pointLabels, pointi)
|
forAll(pointLabels, pointi)
|
||||||
{
|
{
|
||||||
vtkpoints->InsertNextPoint(meshPoints[pointLabels[pointi]].v_);
|
vtkpoints->SetPoint
|
||||||
|
(
|
||||||
|
pointi,
|
||||||
|
meshPoints[pointLabels[pointi]].v_
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkSmartPointer<vtkPolyData> vtkmesh =
|
vtkSmartPointer<vtkPolyData> vtkmesh =
|
||||||
@ -647,17 +651,21 @@ void Foam::vtkPVFoam::convertMeshPointSets
|
|||||||
Info<< "Creating VTK mesh for pointSet=" << partName << endl;
|
Info<< "Creating VTK mesh for pointSet=" << partName << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
const pointSet pSet(mesh, partName);
|
const pointField& meshPoints = mesh.points();
|
||||||
|
const labelList pointLabels = pointSet(mesh, partName).sortedToc();
|
||||||
|
|
||||||
vtkSmartPointer<vtkPoints> vtkpoints =
|
vtkSmartPointer<vtkPoints> vtkpoints =
|
||||||
vtkSmartPointer<vtkPoints>::New();
|
vtkSmartPointer<vtkPoints>::New();
|
||||||
|
|
||||||
vtkpoints->Allocate(pSet.size());
|
vtkpoints->SetNumberOfPoints(pointLabels.size());
|
||||||
|
|
||||||
const pointField& meshPoints = mesh.points();
|
forAll(pointLabels, pointi)
|
||||||
forAllConstIters(pSet, iter)
|
|
||||||
{
|
{
|
||||||
vtkpoints->InsertNextPoint(meshPoints[iter.key()].v_);
|
vtkpoints->SetPoint
|
||||||
|
(
|
||||||
|
pointi,
|
||||||
|
meshPoints[pointLabels[pointi]].v_
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkSmartPointer<vtkPolyData> vtkmesh =
|
vtkSmartPointer<vtkPolyData> vtkmesh =
|
||||||
|
|||||||
@ -81,15 +81,16 @@ vtkSmartPointer<vtkPolyData> Foam::vtkPVFoam::lagrangianVTKMesh
|
|||||||
vtkSmartPointer<vtkCellArray> vtkcells =
|
vtkSmartPointer<vtkCellArray> vtkcells =
|
||||||
vtkSmartPointer<vtkCellArray>::New();
|
vtkSmartPointer<vtkCellArray>::New();
|
||||||
|
|
||||||
vtkpoints->Allocate(parcels.size());
|
vtkpoints->SetNumberOfPoints(parcels.size());
|
||||||
vtkcells->Allocate(parcels.size());
|
vtkcells->Allocate(2*parcels.size());
|
||||||
|
// If reusing memory, ensure insert always starts from 0
|
||||||
|
vtkcells->Reset();
|
||||||
|
|
||||||
vtkIdType particleId = 0;
|
vtkIdType particleId = 0;
|
||||||
forAllConstIters(parcels, iter)
|
forAllConstIters(parcels, iter)
|
||||||
{
|
{
|
||||||
vtkpoints->InsertNextPoint(iter().position().v_);
|
vtkpoints->SetPoint(particleId, iter().position().v_);
|
||||||
|
vtkcells->InsertNextCell(1, &particleId); // VTK_VERTEX
|
||||||
vtkcells->InsertNextCell(1, &particleId);
|
|
||||||
particleId++;
|
particleId++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,7 @@ License
|
|||||||
template<class PatchType>
|
template<class PatchType>
|
||||||
vtkSmartPointer<vtkPolyData> Foam::vtkPVFoam::patchVTKMesh
|
vtkSmartPointer<vtkPolyData> Foam::vtkPVFoam::patchVTKMesh
|
||||||
(
|
(
|
||||||
const word& name,
|
const string& name,
|
||||||
const PatchType& p
|
const PatchType& p
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -59,20 +59,29 @@ vtkSmartPointer<vtkPolyData> Foam::vtkPVFoam::patchVTKMesh
|
|||||||
vtkSmartPointer<vtkPoints> vtkpoints =
|
vtkSmartPointer<vtkPoints> vtkpoints =
|
||||||
vtkSmartPointer<vtkPoints>::New();
|
vtkSmartPointer<vtkPoints>::New();
|
||||||
|
|
||||||
vtkpoints->Allocate(points.size());
|
vtkpoints->SetNumberOfPoints(points.size());
|
||||||
forAll(points, i)
|
forAll(points, i)
|
||||||
{
|
{
|
||||||
vtkpoints->InsertNextPoint(points[i].v_);
|
vtkpoints->SetPoint(i, points[i].v_);
|
||||||
}
|
}
|
||||||
vtkmesh->SetPoints(vtkpoints);
|
vtkmesh->SetPoints(vtkpoints);
|
||||||
|
|
||||||
// Add faces as polygons
|
// Add faces as polygons
|
||||||
const faceList& faces = p.localFaces();
|
const faceList& faces = p.localFaces();
|
||||||
|
|
||||||
|
label nAlloc = faces.size();
|
||||||
|
forAll(faces, facei)
|
||||||
|
{
|
||||||
|
nAlloc += faces[facei].size();
|
||||||
|
}
|
||||||
|
|
||||||
vtkSmartPointer<vtkCellArray> vtkcells =
|
vtkSmartPointer<vtkCellArray> vtkcells =
|
||||||
vtkSmartPointer<vtkCellArray>::New();
|
vtkSmartPointer<vtkCellArray>::New();
|
||||||
|
|
||||||
vtkcells->Allocate(faces.size());
|
vtkcells->Allocate(nAlloc);
|
||||||
|
// If reusing memory, ensure insert always starts from 0
|
||||||
|
vtkcells->Reset();
|
||||||
|
|
||||||
forAll(faces, facei)
|
forAll(faces, facei)
|
||||||
{
|
{
|
||||||
const face& f = faces[facei];
|
const face& f = faces[facei];
|
||||||
|
|||||||
@ -40,26 +40,6 @@ License
|
|||||||
#include "vtkSmartPointer.h"
|
#include "vtkSmartPointer.h"
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
//! \cond fileScope
|
|
||||||
inline static void insertNextPoint
|
|
||||||
(
|
|
||||||
vtkPoints *points,
|
|
||||||
const Foam::point& p,
|
|
||||||
const Foam::scalar scaleFactor
|
|
||||||
)
|
|
||||||
{
|
|
||||||
points->InsertNextPoint
|
|
||||||
(
|
|
||||||
p.x()*scaleFactor,
|
|
||||||
p.y()*scaleFactor,
|
|
||||||
p.z()*scaleFactor
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! \endcond
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::vtkPVblockMesh::convertMeshBlocks
|
void Foam::vtkPVblockMesh::convertMeshBlocks
|
||||||
@ -68,22 +48,20 @@ void Foam::vtkPVblockMesh::convertMeshBlocks
|
|||||||
int& blockNo
|
int& blockNo
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "<beg> convertMeshBlocks" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
vtkDataArraySelection* selection = reader_->GetBlockSelection();
|
vtkDataArraySelection* selection = reader_->GetBlockSelection();
|
||||||
arrayRange& range = rangeBlocks_;
|
arrayRange& range = rangeBlocks_;
|
||||||
range.block(blockNo); // set output block
|
range.block(blockNo); // set output block
|
||||||
label datasetNo = 0; // restart at dataset 0
|
label datasetNo = 0; // restart at dataset 0
|
||||||
|
|
||||||
const blockMesh& blkMesh = *meshPtr_;
|
const blockMesh& blkMesh = *meshPtr_;
|
||||||
const Foam::pointField& blockPoints = blkMesh.vertices();
|
const pointField blkPoints(blkMesh.vertices() * blkMesh.scaleFactor());
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Info<< "<beg> convertMeshBlocks" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
int blockI = 0;
|
int blockI = 0;
|
||||||
const scalar scaleFactor = blkMesh.scaleFactor();
|
|
||||||
|
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
auto iter = range.cbegin();
|
auto iter = range.cbegin();
|
||||||
@ -98,26 +76,22 @@ void Foam::vtkPVblockMesh::convertMeshBlocks
|
|||||||
}
|
}
|
||||||
|
|
||||||
const blockDescriptor& blockDef = blkMesh[blockI];
|
const blockDescriptor& blockDef = blkMesh[blockI];
|
||||||
|
const labelList& blockLabels = blockDef.blockShape();
|
||||||
|
|
||||||
// Convert OpenFOAM mesh vertices to VTK
|
|
||||||
vtkSmartPointer<vtkPoints> vtkpoints =
|
vtkSmartPointer<vtkPoints> vtkpoints =
|
||||||
vtkSmartPointer<vtkPoints>::New();
|
vtkSmartPointer<vtkPoints>::New();
|
||||||
|
|
||||||
vtkpoints->Allocate(blockDef.nPoints());
|
vtkpoints->SetNumberOfPoints(blockLabels.size());
|
||||||
const labelList& blockLabels = blockDef.blockShape();
|
|
||||||
|
|
||||||
vtkIdType nodeIds[8];
|
vtkIdType nodeIds[8];
|
||||||
|
forAll(blockLabels, pointi)
|
||||||
forAll(blockLabels, ptI)
|
|
||||||
{
|
{
|
||||||
insertNextPoint
|
vtkpoints->SetPoint
|
||||||
(
|
(
|
||||||
vtkpoints,
|
pointi,
|
||||||
blockPoints[blockLabels[ptI]],
|
blkPoints[blockLabels[pointi]].v_
|
||||||
scaleFactor
|
|
||||||
);
|
);
|
||||||
|
nodeIds[pointi] = pointi;
|
||||||
nodeIds[ptI] = ptI;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkSmartPointer<vtkUnstructuredGrid> vtkmesh =
|
vtkSmartPointer<vtkUnstructuredGrid> vtkmesh =
|
||||||
@ -138,7 +112,6 @@ void Foam::vtkPVblockMesh::convertMeshBlocks
|
|||||||
output, vtkmesh, range, datasetNo,
|
output, vtkmesh, range, datasetNo,
|
||||||
selection->GetArrayName(partId)
|
selection->GetArrayName(partId)
|
||||||
);
|
);
|
||||||
|
|
||||||
++datasetNo;
|
++datasetNo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,10 +143,9 @@ void Foam::vtkPVblockMesh::convertMeshEdges
|
|||||||
|
|
||||||
const blockMesh& blkMesh = *meshPtr_;
|
const blockMesh& blkMesh = *meshPtr_;
|
||||||
const blockEdgeList& edges = blkMesh.edges();
|
const blockEdgeList& edges = blkMesh.edges();
|
||||||
|
|
||||||
int edgeI = 0;
|
|
||||||
const scalar scaleFactor = blkMesh.scaleFactor();
|
const scalar scaleFactor = blkMesh.scaleFactor();
|
||||||
|
|
||||||
|
int edgeI = 0;
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
auto iter = range.cbegin();
|
auto iter = range.cbegin();
|
||||||
@ -214,27 +186,24 @@ void Foam::vtkPVblockMesh::convertMeshEdges
|
|||||||
{
|
{
|
||||||
const List<point>& edgePoints = edgesPoints[foundEdgeI];
|
const List<point>& edgePoints = edgesPoints[foundEdgeI];
|
||||||
|
|
||||||
vtkSmartPointer<vtkPolyData> vtkmesh =
|
|
||||||
vtkSmartPointer<vtkPolyData>::New();
|
|
||||||
|
|
||||||
vtkSmartPointer<vtkPoints> vtkpoints =
|
vtkSmartPointer<vtkPoints> vtkpoints =
|
||||||
vtkSmartPointer<vtkPoints>::New();
|
vtkSmartPointer<vtkPoints>::New();
|
||||||
|
|
||||||
vtkpoints->Allocate( edgePoints.size() );
|
vtkpoints->SetNumberOfPoints(edgePoints.size());
|
||||||
vtkmesh->Allocate(1);
|
|
||||||
|
|
||||||
vtkIdType pointIds[edgePoints.size()];
|
vtkIdType pointIds[edgePoints.size()];
|
||||||
forAll(edgePoints, ptI)
|
forAll(edgePoints, pointi)
|
||||||
{
|
{
|
||||||
insertNextPoint
|
const point p = edgePoints[pointi] * scaleFactor;
|
||||||
(
|
|
||||||
vtkpoints,
|
vtkpoints->SetPoint(pointi, p.v_);
|
||||||
edgePoints[ptI],
|
pointIds[pointi] = pointi;
|
||||||
scaleFactor
|
|
||||||
);
|
|
||||||
pointIds[ptI] = ptI;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vtkSmartPointer<vtkPolyData> vtkmesh =
|
||||||
|
vtkSmartPointer<vtkPolyData>::New();
|
||||||
|
|
||||||
|
vtkmesh->Allocate(1);
|
||||||
vtkmesh->InsertNextCell
|
vtkmesh->InsertNextCell
|
||||||
(
|
(
|
||||||
VTK_POLY_LINE,
|
VTK_POLY_LINE,
|
||||||
@ -249,8 +218,7 @@ void Foam::vtkPVblockMesh::convertMeshEdges
|
|||||||
output, vtkmesh, range, datasetNo,
|
output, vtkmesh, range, datasetNo,
|
||||||
selection->GetArrayName(partId)
|
selection->GetArrayName(partId)
|
||||||
);
|
);
|
||||||
|
++datasetNo;
|
||||||
datasetNo++;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -281,8 +249,7 @@ void Foam::vtkPVblockMesh::convertMeshCorners
|
|||||||
range.block(blockNo); // set output block
|
range.block(blockNo); // set output block
|
||||||
label datasetNo = 0; // restart at dataset 0
|
label datasetNo = 0; // restart at dataset 0
|
||||||
|
|
||||||
const pointField& blockPoints = meshPtr_->vertices();
|
const pointField blkPoints(meshPtr_->vertices() * meshPtr_->scaleFactor());
|
||||||
const scalar& scaleFactor = meshPtr_->scaleFactor();
|
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
@ -300,20 +267,16 @@ void Foam::vtkPVblockMesh::convertMeshCorners
|
|||||||
vtkSmartPointer<vtkCellArray> vtkcells =
|
vtkSmartPointer<vtkCellArray> vtkcells =
|
||||||
vtkSmartPointer<vtkCellArray>::New();
|
vtkSmartPointer<vtkCellArray>::New();
|
||||||
|
|
||||||
vtkpoints->Allocate( blockPoints.size() );
|
vtkpoints->SetNumberOfPoints(blkPoints.size());
|
||||||
vtkcells->Allocate( blockPoints.size() );
|
vtkcells->Allocate(2*blkPoints.size());
|
||||||
|
// If reusing memory, ensure insert always starts from 0
|
||||||
|
vtkcells->Reset();
|
||||||
|
|
||||||
vtkIdType pointId = 0;
|
vtkIdType pointId = 0;
|
||||||
forAll(blockPoints, ptI)
|
forAll(blkPoints, pointi)
|
||||||
{
|
{
|
||||||
insertNextPoint
|
vtkpoints->SetPoint(pointi, blkPoints[pointi].v_);
|
||||||
(
|
vtkcells->InsertNextCell(1, &pointId); // VTK_VERTEX
|
||||||
vtkpoints,
|
|
||||||
blockPoints[ptI],
|
|
||||||
scaleFactor
|
|
||||||
);
|
|
||||||
|
|
||||||
vtkcells->InsertNextCell(1, &pointId); // VTK_VERTEX
|
|
||||||
pointId++;
|
pointId++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user