[vtkusers] GaussianSplatter with individually weighted splats possible?

lynx.abraxas at freenet.de lynx.abraxas at freenet.de
Sun Jan 10 08:20:01 EST 2010


Hello again!


Another problem arose in my little test program (see below): How do I save the
output of GaussianSplatter into a (3D) TIFF? What could convert the output  of
GaussianSplatter to vtkImageData?


Thanks for any help or hint.
Lynx

On 10/01/10 13:44:40, lynx.abraxas at freenet.de wrote:
> Hello!
> 
> 
> I have unstructured points (on a sphere). Each point has its own weight.
> I   want   to  use  GaussianSplatter  but  with  a  ScaleFactor  (weight)  set
> individually  for  each  point.  Sadly  the  wiki   example   does   not   use
> scalarwarping.
> How  do  I  get  a  scalar assigned to each point that then weights the splat?
> SetScaleFactor weights all point same (if I'm not mistaken). I couldn't find a
> setScalar for vtkPoints either.
> Is it possible at all?
> 
> Thanks for any hint or help.
> Lynx
>


#include <iostream>
//#include <fstream>
//#include <vector>
#include <string>
#include <sstream> //std::stringstream
 
//#include "vtkCellArray.h"
#include "vtkPolyData.h"
#include "vtkTIFFWriter.h"
#include "vtkGaussianSplatter.h"
 
#include <cmath>
 
vtkPoints* ReadPoints(char* fn){
//    std::string Filename = fn;        
//    ifstream fin(Filename.c_str());
    ifstream fin(fn);
 
    std::string line;
    vtkPoints* Points = vtkPoints::New();
 
    while(getline(fin, line))
        {
        if (line[0] == '#'){
            std::cerr << "Skipping line: " << line << std::endl;
            continue;
            }
        unsigned int i;
        double x,y,z,w;
        std::stringstream linestream;
        linestream << line;
        linestream >> i >> x >> y >> z >> w;
        printf("Adding point (%d): [%f;%f;%f] with weight: %f\n", i, x, y, z, w);
        Points->InsertNextPoint(x, y, z);
        Points->SetScalar(w);
        }
 
    fin.close();
 
    return Points;
    }
 
int main(int argc, char **argv) {
 
    vtkPoints* points = ReadPoints(argv[1]);
    vtkPolyData* polydata = vtkPolyData::New();
    polydata->SetPoints(points);
 
    vtkGaussianSplatter *Splatter = vtkGaussianSplatter::New();
    Splatter->SetInput(polydata);
    Splatter->SetSampleDimensions(atoi(argv[2]),atoi(argv[2]),atoi(argv[2])); //set the resolution of the final! volume
    Splatter->SetRadius(atof(argv[3])); //GaussianSplat truncated outside Radius
    Splatter->SetExponentFactor(atof(argv[4])); //GaussianSplat decay value
    Splatter->ScalarWarpingOn();
    //Splatter->SetScaleFactor(atof(argv[4]));//scale comes from each point
 
    vtkTIFFWriter *writer = vtkTIFFWriter::New();
    std::cout << "Writinig TIFF..."; 
    writer->SetFileName(argv[5]);
    writer->SetInput(Splatter->GetOutput());
    writer->Write();
    std::cout << "done." << std::endl; 

    return 0;
 
    }




PROJECT(GenerateSurfacefromUnstructuredPoints)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

SET(CMAKE_INCLUDE_PATH /usr/local/lib/vtk-5.4)

FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
 
ADD_EXECUTABLE(gaus-spalt_01 gaus-spalt_01.cxx)
TARGET_LINK_LIBRARIES(gaus-spalt_01 vtkHybrid)


 



More information about the vtkusers mailing list