James, Great. I am glad you found the problem. You set scalar data by 1. create and fill a vtkDataArray 2. dataset->GetPointData()->SetScalars(vtkDataArray*)
On Wed, Aug 26, 2015 at 10:49 AM, James Furness <[email protected]> wrote: > Thanks Dan, > > I found the problem whilst cleaning up the code to send you a copy. Funny > how that happens… > > It turned out to be an old > > int extent[6] = {0, 1, 0, 1, 0, 1}; > outInfo->Set > (vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(), extent, 6); > > call in RequestInformation( … ) that was wrongly setting the extent to > [0,1,0,1,0,1]. > > Fixing that seemed to fix the problem of only 8 points showing up. > > I’ve been looking now at using the vtkRectilinearGrid class, I’ve set the > X, Y and Z coordinates using the respective > SetXCoordinates (vtkDataArray *) methods. But I can’t work out from the > documentation how to enter my scalar data into this grid for use within > paraview. > > Can you offer any advice on this? Or better point me to an example to > learn from? > > Many thanks, > James > > On 25 Aug 2015, at 15:39, Dan Lipsa <[email protected]> wrote: > > Hi James, > I was used to the old style and it kind of made sense with the problem you > are seeing, but you are right, setDimensions does not seem to be the > problem. > > Is it any way I can get the code and a sample data so that I can run it > through a debugger. I cannot see anything else in the code. > > Dan > > > On Tue, Aug 25, 2015 at 9:20 AM, James Furness <[email protected]> > wrote: > >> Thanks for your advice, however it hasn’t quite solved my problem. >> >> You are missing image->SetDimensions() - that may be a reason why your >> scalar does not have all values. >> >> >> The documentation marks vtkImageData::SetDimensions( ... ) as >> depreciated, and instead vtkImageData::SetExtent( ... ) should be used. It >> remarks that SetDimension is equivalent to SetExtent(0, i-1, 0, j-1, 0, >> k-1). >> >> (( doc page - >> http://www.vtk.org/doc/nightly/html/classvtkImageData.html#a42bc5faee908c50407e9d9ec97f74238 >> )) >> >> Regardless, I tried using SetDimensions in this way, and resulted in some >> nasty set-fault crashes. Whilst now 64 elements were found correctly, all >> passed the first 8 were memory junk. When I use SetExtent( … ) the >> information print on the image object happily reports dimensions of 4, 4, 4 >> as expected. So it seems this is set by SetExtent( … ). >> >> vtkRectilinear grid is like an image data with variable extents and >> warped grid. >> >> >> I’ll look into this class. It’s possible that I am mangling this reader >> by trying to shoehorn my problem into an inappropriate class at the moment. >> Thanks for pointing this out. >> >> Many thanks, >> James >> >> On 24 Aug 2015, at 15:31, Dan Lipsa <[email protected]> wrote: >> >> James, >> You are missing image->SetDimensions() - that may be a reason why your >> scalar does not have all values. >> >> vtkRectilinear grid is like an image data with variable extents and >> warped grid. >> >> >> On Fri, Aug 21, 2015 at 6:55 AM, James Furness <[email protected]> >> wrote: >> >>> Hello, >>> >>> I have a program that will produce an output either in csv, or a binary >>> format (which I have written and can alter). >>> >>> The data points are constructed by taking 3 vectors, and stepping at set >>> intervals along these vectors to construct a 3D set of data. Ultimately >>> there shouldn’t be a restriction on the three vectors, so the data may not >>> be in a rectilinear array. But I’m leaving this for now and assuming the >>> data is constructed from 3 orthogonal Axis aligned vectors to create a >>> rectilinear structured grid. When I have a better grasp of preview readers >>> I’ll update the reader to account for this. I guess it would require an >>> unstructured data type to handle non-orthogonal grids? >>> >>> Also, the user is free to select what data they save from the program. >>> This could be many fields, both vector and scalar quantities. What has been >>> selected is stored in a header to the file, and known on reading. For my >>> toy example I save only one scalar quantity. >>> >>> I’ve been trying to write a reader for paraview to import the binary >>> files output. The csv format works ok, but the files can become large and >>> it is a pain to have to construct the vector quantities from 3 scalars in >>> each case, I want to avoid the user having to do this work. Another reason >>> for writing a custom reader is to include additional information into the >>> binary file for visualisation (e.g. the position of atoms, not a field >>> quantity). >>> >>> With that background and reasoning I have managed to follow the >>> documentation enough to read a basic test file, get the origin and point >>> spacing, and read a single scalar quantity into a vtkDataArray owned by a >>> vtkImageData object. Paraview picks this up seemingly correctly, with one >>> flaw: >>> >>> It only takes 2 elements from each dimension, 0 and 1 displaying 8 >>> elements in total. I am confident it has read the other values correctly as >>> the Information tab reports “X extent 0 to 3” “X range: -1 to 1” (as >>> expected) and similar for the other dimensions. If I view the data in >>> spreadsheet layout the 8 values it has seem correct, but the others are >>> missing. >>> >>> The code I am using in the reader’s RequestData( ) function is added >>> below. >>> >>> Does anyone know why this may be happening and how to fix it? Also, any >>> advice on how I should structure the reader to handle the non-orthogonal >>> data? >>> >>> Thanks for your time, and thank you for such a stellar program. The >>> results paraview produces for this data is brilliant, hence my want to make >>> it convenient for our users! >>> >>> Regards, >>> James Furness >>> >>> >>> CODE for RequestData( ) Method: >>> ——————————————————————— >>> >>> int LondonReader::RequestData( >>> vtkInformation*, >>> vtkInformationVector**, >>> vtkInformationVector *outputVector) >>> { >>> vtkWarningMacro("Requesting the data!"); >>> >>> >>> ifstream finp; >>> finp.open(this->FileName, ios::in | ios::binary); >>> >>> if (finp.is_open()) { >>> cerr << "File is open without problem!" << endl; >>> } else { >>> cerr << "File failed to open :(" << endl; >>> return 0; >>> } >>> >>> // size of real numbers may not be 8. Check for this from file header >>> int realSize; >>> finp.read((char*)&realSize, sizeof(int)); >>> if(realSize != 8) { >>> cerr << "Not implimented yet!" << endl; >>> return 0; >>> } >>> >>> // number of data fields >>> int nFields; >>> finp.read((char*)&nFields, sizeof(int)); >>> >>> vtkImageData* image = vtkImageData::GetData(outputVector); >>> >>> // Read the dimensions of the grid and set the extent accordingly >>> int gridDim[3]; >>> finp.read((char*)&gridDim, 3*sizeof(int)); >>> int extent[6] = {0, gridDim[0]-1, 0, gridDim[1]-1, 0, gridDim[2]-1}; >>> image->SetExtent(extent); >>> >>> >>> // Read the field names from the file >>> std::vector<std::string> fields; >>> std::string strBuf; >>> for (int i = 0; i < nFields; i++) { >>> std::getline( finp, strBuf, '\0'); >>> fields.push_back(strBuf); >>> cerr << "Printing Fields (" << i << "): " << fields[i] << endl; >>> } >>> >>> // setup image for only one field for test case >>> image->AllocateScalars(VTK_FLOAT, 1); >>> vtkDataArray* scalars = image->GetPointData()->GetScalars(); >>> >>> // currently there is only one field 'rho' >>> scalars->SetName(fields[3].c_str()); >>> >>> double x, y, z, rho; >>> double oX, oY, oZ; //origin coordinates >>> double sX, sY, sZ; //spacing of points >>> >>> for (vtkIdType itx = 0; itx < gridDim[0]; itx++) { >>> for (vtkIdType ity = 0; ity < gridDim[1]; ity++) { >>> for (vtkIdType itz = 0; itz < gridDim[2]; itz++) { >>> finp.read((char*)&x, realSize); >>> finp.read((char*)&y, realSize); >>> finp.read((char*)&z, realSize); >>> finp.read((char*)&rho, realSize); >>> >>> // Find and set the origin and spacing >>> if (itx == 0 && ity == 0 && itz == 0) { >>> image->SetOrigin(x, y, z); >>> oX = x; oY = y; oZ = z; >>> } else if (itx == 1 && ity == 0 && itz == 0) { >>> sX = x - oX; >>> } else if (itx == 0 && ity == 1 && itz == 0) { >>> sY = y - oY; >>> } else if (itx == 0 && ity == 0 && itz == 1) { >>> sZ = z - oZ; >>> } >>> //check correct read. >>> cerr << x << "," << y << "," << z << "," << rho << ", at >>> " << itx*(gridDim[1]*gridDim[2]) + ity*gridDim[2] + itz << endl; >>> >>> //add value >>> scalars->SetTuple1(itx*gridDim[1]*gridDim[2] + >>> ity*gridDim[2] + itz, >>> rho); >>> } >>> } >>> } >>> >>> image->SetSpacing(sX, sY, sZ); >>> >>> image->Print(cerr); >>> >>> return 1; >>> } >>> >>> >>> >>> >>> >>> This message and any attachment are intended solely for the addressee >>> and may contain confidential information. If you have received this >>> message in error, please send it back to me, and immediately delete it. >>> >>> Please do not use, copy or disclose the information contained in this >>> message or in any attachment. Any views or opinions expressed by the >>> author of this email do not necessarily reflect the views of the >>> University of Nottingham. >>> >>> This message has been checked for viruses but the contents of an >>> attachment may still contain software viruses which could damage your >>> computer system, you are advised to perform your own checks. Email >>> communications with the University of Nottingham may be monitored as >>> permitted by UK legislation. >>> >>> _______________________________________________ >>> 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 >>> >>> Search the list archives at: http://markmail.org/search/?q=ParaView >>> >>> Follow this link to subscribe/unsubscribe: >>> http://public.kitware.com/mailman/listinfo/paraview >>> >> >> >> This message and any attachment are intended solely for the addressee >> and may contain confidential information. If you have received this >> message in error, please send it back to me, and immediately delete it. >> >> Please do not use, copy or disclose the information contained in this >> message or in any attachment. Any views or opinions expressed by the >> author of this email do not necessarily reflect the views of the >> University of Nottingham. >> >> This message has been checked for viruses but the contents of an >> attachment may still contain software viruses which could damage your >> computer system, you are advised to perform your own checks. Email >> communications with the University of Nottingham may be monitored as >> permitted by UK legislation. >> >> > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please send it back to me, and immediately delete it. > > Please do not use, copy or disclose the information contained in this > message or in any attachment. Any views or opinions expressed by the > author of this email do not necessarily reflect the views of the > University of Nottingham. > > This message has been checked for viruses but the contents of an > attachment may still contain software viruses which could damage your > computer system, you are advised to perform your own checks. Email > communications with the University of Nottingham may be monitored as > permitted by UK legislation. > > > _______________________________________________ > 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 > > Search the list archives at: http://markmail.org/search/?q=ParaView > > Follow this link to subscribe/unsubscribe: > http://public.kitware.com/mailman/listinfo/paraview > >
_______________________________________________ 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 Search the list archives at: http://markmail.org/search/?q=ParaView Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/paraview
