[vtkusers] Stream lines from custom data (Partially solved)
Berk Geveci
berk.geveci at kitware.com
Fri Apr 16 20:20:37 EDT 2010
I didn't see this when I answered previously. Are you sure
sGrid->SetDimensions(num_pts,1,1) is right? That defines a num_pts x 1
x 1 grid which is not very exciting for streamlines.
To color the streamline, you need something like:
# We indicate to the mapper to use the velcoity magnitude, which is a
# vtkDataArray that makes up part of the point attribute data.
isoMapper = vtk.vtkPolyDataMapper()
isoMapper.SetInputConnection(normals.GetOutputPort())
isoMapper.ScalarVisibilityOn()
isoMapper.SetScalarRange(0, 1500)
isoMapper.SetScalarModeToUsePointFieldData()
isoMapper.ColorByArrayComponent("VelocityMagnitude", 0)
This code is from VTK/Examples/VisualizationAlgorithms/Python/ColorIsosurface.py
Also, I suggest getting the 5.6 branch as we made some major
improvements to vtkStreamTracer recently. The easiest thing to do is
to download ParaView 3.8 and play with the parameters there. To load
your data there, you can use a vtkStructuredGridWriter first.
-berk
On Thu, Apr 15, 2010 at 9:45 AM, Gomez, Alberto <alberto.gomez at kcl.ac.uk> wrote:
> Hi, and thanks for the answers,
>
> I somehow achieved to display my stream lines with stream tracer (also works
> with streamlines). The problem is now that they are all white, and I don't
> know how to colour them. Also, some help on how to set the different
> parameters efficiently (step length etc) would be of much help. My code is
> now:
>
> for (int i = 0; i < num_pts; i++) {
> pts->InsertNextPoint(positions[i][0], positions[i][1],
> positions[i][2]);
> float tuple[3] = {(float) directions[i][0] * sf, (float)
> directions[i][1] * sf, (float) directions[i][2] * sf};
> vecArr->InsertNextTuple(tuple);
>
> }
>
> vtkSmartPointer<vtkStructuredGrid> sGrid =
> vtkSmartPointer<vtkStructuredGrid>::New();
> sGrid->SetDimensions(num_pts,1,1); // Is this correct? if I remove this
> line it does not work
> sGrid->SetPoints(pts);
> sGrid->GetPointData()->SetVectors(vecArr);
> //seeds
> vtkSmartPointer<vtkPolyData> startingPointsData =
> vtkSmartPointer<vtkPolyData>::New();
> startingPointsData->SetPoints(pts);
>
> vtkSmartPointer<vtkRungeKutta4> integ =
> vtkSmartPointer<vtkRungeKutta4>::New();
> vtkSmartPointer<vtkStreamTracer> streamer =
> vtkSmartPointer<vtkStreamTracer>::New();
> streamer->SetInput(sGrid);
> streamer->SetSource(startingPointsData);
> streamer->SetMaximumPropagation(2, 1); //This defines the length of
> the stream
> streamer->SetMinimumIntegrationStep(2, 0.1);
> streamer->SetMaximumIntegrationStep(2, 1.5);
> streamer->SetIntegrator(integ);
> streamer->SetIntegrationDirectionToForward();
> streamer->DebugOn();
> streamer->Update();
>
> vtkSmartPointer<vtkPolyDataMapper> gMapper = vtkSmartPointer<
> vtkPolyDataMapper>::New();
> gMapper->SetInputConnection(streamer->GetOutputPort());
> gMapper->SetScalarRange(streamer->GetOutput()->GetScalarRange());
>
> vtkSmartPointer<vtkActor> gactor = vtkSmartPointer<vtkActor>::New();
> gactor->SetMapper(gMapper);
> gactor->VisibilityOn();
> ren->AddActor(gactor);
>
>
> etc.
>
>
> Thanks!
>
> Darshan Pai wrote:
>>
>> I dont see a SetPolys() or some variation of it which suggests that you
>> have cells in your StructuredGrid . Also If you do have then is thee number
>> of points equal to number of cells ? because the for loop where you input
>> your vectors suggest that you have a vector at each point and not at each
>> cell .
>>
>> On Wed, Apr 14, 2010 at 11:09 AM, Gomez, Alberto
>> <alberto.gomez at kcl.ac.uk<mailto:alberto.gomez at kcl.ac.uk>> wrote:
>> Thanks for the quick answer,
>>
>> Unfortunately, it doesn't work for me: the vtkCellToPointData filter
>> crashes. Would you have a sample code that I can compare to mine? That would
>> be very useful :-).
>>
>> Anyway, I found out a tournaround that, I think, gets me closer to the
>> visualisation of streamlines (but does not work yet):
>> ...
>> ...
>> vtkSmartPointer<vtkPolyData> sGrid = vtkSmartPointer<vtkPolyData>::New();
>> sGrid->GetPointData()->SetVectors(vecArr);
>> sGrid->SetPoints(pts);
>>
>> vtkSmartPointer<vtkStreamLine> streamer =
>> vtkSmartPointer<vtkStreamLine>::New();
>> streamer->SetInput(sGrid);
>>
>> Then I still see black but I get
>>
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Filtering/vtkAlgorithm.h, line 150
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): setting AbortExecute
>> to 0
>>
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.cxx, line 475
>> vtkStreamLine (0x22fd980): Generating streamers
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 149
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> TerminalSpeed of 0
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 107
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> MaximumPropagationTime of 200
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 165
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> SavePointInterval of 0.1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 149
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> TerminalSpeed of 0
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 107
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> MaximumPropagationTime of 200
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 165
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> SavePointInterval of 0.1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 174
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning Integrator
>> address 0x2300f50
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 149
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> TerminalSpeed of 0
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 107
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> MaximumPropagationTime of 200
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 165
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> SavePointInterval of 0.1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 149
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> TerminalSpeed of 0
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 107
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> MaximumPropagationTime of 200
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 165
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> SavePointInterval of 0.1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.h, line 290
>> vtkStreamLine (0x22fd980): vtkStreamLine (0x22fd980): returning
>> NumberOfStreamers of 1
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamLine.cxx, line
>> 178
>> vtkStreamLine (0x22fd980): Created 0 points, 0 lines
>>
>>
>> Any clue?
>>
>> Thanks
>> Sebastian Gatzka wrote:
>> I had the same problem.
>>
>> You will have to use the vtkCellDataToPointData filter first!
>> Input to the filter should be your structured grid.
>>
>> And then you can use the output from this filter as input to the stream
>> line.
>>
>> -----Ursprüngliche Nachricht-----
>> Von: vtkusers-bounces at vtk.org<mailto:vtkusers-bounces at vtk.org>
>> [mailto:vtkusers-bounces at vtk.org<mailto:vtkusers-bounces at vtk.org>] Im
>> Auftrag
>> von Gomez, Alberto
>> Gesendet: Mittwoch, 14. April 2010 16:05
>> Cc: vtkusers
>> Betreff: [vtkusers] Stream lines from custom data
>>
>> Hi all,
>>
>> I have been looking for a way to represent a vector field with stream
>> lines, but I have not found a solution so far. My case differs from the
>> example in http://www.itk.org/Wiki/VTK/Examples/StreamLines in two things:
>>
>> I would like to use vtkStreamTracer as vtkStreamLine may be deprecated
>> soon.
>> I am using custom data and not reading from a file.
>>
>> So I have my points in the variable positions[][] ( size n x 3) and my
>> vectors in the variable directions[][] (size n x 3 also).
>>
>> I have tried both StreamTracer and StreamLines but all I see is a black
>> background. When using vtkStreamLines I get the error :
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Filtering/vtkAlgorithm.h, line 150
>> vtkStreamLine (0x22a0880): vtkStreamLine (0x22a0880): setting AbortExecute
>> to 0
>>
>> Debug: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.cxx, line 475
>> vtkStreamLine (0x22a0880): Generating streamers
>>
>> ERROR: In /data/workspace/vtk-5.4.2/src/Graphics/vtkStreamer.cxx, line 488
>> vtkStreamLine (0x22a0880): No vector data defined!
>>
>> But I actually define the vectors, so I do not know what I am doing wrong.
>>
>> This is my source code (an extract of it)
>>
>>
>> vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();
>>
>> vtkSmartPointer<vtkDoubleArray> vecArr =
>> vtkSmartPointer<vtkDoubleArray>::New();
>> vecArr->SetNumberOfComponents(3);
>>
>> for (int i = 0; i < n; i++) {
>> pts->InsertNextPoint(positions[i][0], positions[i][1],
>> positions[i][2]);
>> vecArr->InsertNextTuple3(directions[i][0] , directions[i][1] ,
>> directions[i][2] );
>> }
>>
>> // Generate the vector field
>> vtkSmartPointer<vtkStructuredGrid> sGrid =
>> vtkSmartPointer<vtkStructuredGrid>::New();
>> sGrid->GetCellData()->SetVectors(vecArr);
>> sGrid->SetPoints(pts);
>> //Generate start points
>> vtkSmartPointer<vtkPointSource> seeds =
>> vtkSmartPointer<vtkPointSource>::New();
>> seeds->SetRadius(20.0);
>> seeds->SetCenter(positions[0][0], positions[0][1], positions[0][2]);
>> seeds->SetNumberOfPoints(100);
>>
>> //vtkSmartPointer<vtkStreamTracer> streamer =
>> vtkSmartPointer<vtkStreamTracer>::New();
>> vtkSmartPointer<vtkStreamLine> streamer =
>> vtkSmartPointer<vtkStreamLine>::New();
>>
>> streamer->SetInput(sGrid);
>> streamer->SetSource(seeds->GetOutput());
>> streamer->SetIntegrationDirection(0);
>> streamer->DebugOn();
>> streamer->Update();
>> vtkSmartPointer<vtkPolyDataMapper> gMapper = vtkSmartPointer<
>> vtkPolyDataMapper>::New();
>> gMapper->SetInputConnection(streamer->GetOutputPort());
>> ...
>>
>>
>> Many thanks!!!!
>>
>>
>>
>>
>> --
>>
>> Alberto Gómez
>>
>> /Division of Imaging Sciences
>> The Rayne Institute
>> 4th Floor, Lambeth Wing
>> St Thomas' Hospital
>> London SE1 7EH /
>>
>> phone: +44 (0) 20 718 88364
>> email: alberto.gomez at kcl.ac.uk<mailto:alberto.gomez at kcl.ac.uk>
>> <mailto:alberto.gomez at kcl.ac.uk<mailto:alberto.gomez at kcl.ac.uk>>
>>
>> _______________________________________________
>> Powered by www.kitware.com<http://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 VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
>>
>>
>
>
> --
>
> Alberto Gómez
>
> /Division of Imaging Sciences
> The Rayne Institute
> 4th Floor, Lambeth Wing
> St Thomas' Hospital
> London SE1 7EH /
>
> phone: +44 (0) 20 718 88364
> email: alberto.gomez at kcl.ac.uk <mailto:alberto.gomez at kcl.ac.uk>
>
> _______________________________________________
> 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 VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
More information about the vtkusers
mailing list