Hi, Paw, I believe the problem is that you are mixing calls for scalars and vectors…
For scalars you want to use SetNumberOfValues()/SetValue(): vtkIntArray* temperature = vtkIntArray::New(); temperature->SetName("Temperature"); temperature->SetNumberOfComponents(1); temperature->SetNumberOfValues(nx*ny*nz); for(int i=0;i<mesh.nn;i++){ temperature->SetValue(i,10); // set everything to 10 } rgrid->GetPointData()->AddArray(temperature); For vectors you want to use SetNumberOfTuples()/SetTuple3() (assuming SetNumberOfComponents(3)): vtkFloatArray* velocity = vtkFloatArray::New(); velocity->SetName("Velocity"); velocity->SetNumberOfComponents(3); velocity->SetNumberOfTuples(nx*ny*nz); for(int i=0;i<mesh.nn;i++){ velocity->SetTuple3(i,10, 10, 10); // set everything to 10 } rgrid->GetPointData()->AddArray(velocity); I also tend to use GetPointData()->AddArray() rather than SetScalars()/SetVectors(), which has caused me trouble if I have more than one scalar/vector. I don't know if that is necessarily the best practice, but it has worked well for me. Hope that helps, joe. On Apr 2, 2013, at 1:10 PM, Paw Møller wrote: > Hi, > > Using the C++ VTK library for writing an .vtr file, I'm able to create the > mesh, but not assign any skalars/vectors to the grid points. This is more or > less given in the example file RGrid.cxx. > > But how do I assign values at the mesh-points? > > Write the mesh: > #include <stdio.h> > #include <vtkRectilinearGrid.h> > #include <vtkXMLRectilinearGridWriter.h> > #include <vtkDoubleArray.h> > #include <vtkIntArray.h> > #include <vtkSmartPointer.h> > > int main(){ > int nx = 3, ny = 3, nz = 3; > > // coordinates > vtkDoubleArray *xCoords = vtkDoubleArray::New(); > for (int i=0; i<nx; i++) xCoords->InsertNextValue(i); > vtkDoubleArray *yCoords = vtkDoubleArray::New(); > for (int i=0; i<ny; i++) yCoords->InsertNextValue(i); > vtkDoubleArray *zCoords = vtkDoubleArray::New(); > for (int i=0; i<nz; i++) zCoords->InsertNextValue(i); > > // The coordinates are assigned to the rectilinear grid. > vtkRectilinearGrid *rgrid = vtkRectilinearGrid::New(); > rgrid->SetDimensions(nx,ny,nz); > rgrid->SetXCoordinates(xCoords); > rgrid->SetYCoordinates(yCoords); > rgrid->SetZCoordinates(zCoords); > > /* Write to file */ > vtkSmartPointer<vtkXMLRectilinearGridWriter> > writer = vtkSmartPointer<vtkXMLRectilinearGridWriter>::New(); > writer->SetFileName("test.vtr"); > > #if VTK_MAJOR_VERSION <= 5 > writer->SetInput(rgrid); > #else > writer->SetInputData(rgrid); > #endif > writer->Write(); > > /* clean up */ > xCoords->Delete(); > yCoords->Delete(); > zCoords->Delete(); > rgrid->Delete(); > > printf("DONE printing\n"); > } > > For setting values at the mesh-points, I assumed something like: > vtkIntArray* temperature = vtkIntArray::New(); > temperature->SetName("Temperature"); > temperature->SetNumberOfComponents(1); > temperature->SetNumberOfTuples(nx*ny*nz); > for(int i=0;i<mesh.nn;i++){ > temperature->SetValue(i,10); // set everything to 10 > } > > rgrid->GetPointData()->SetScalars(temperature); > > But that doesn't work. As expected, when looking at > http://www.vtk.org/doc/nightly/html/classvtkRectilinearGrid.html > > So how do I set values/vectors for all the points in the mesh. > > Regards, > Paw > _______________________________________________ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the ParaView Wiki at: > http://paraview.org/Wiki/ParaView > > Follow this link to subscribe/unsubscribe: > http://www.paraview.org/mailman/listinfo/paraview
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Follow this link to subscribe/unsubscribe: http://www.paraview.org/mailman/listinfo/paraview