[vtkusers] Setting scalar point attributes in a contour

Marc Cotran marc at cotran.ca
Thu Jun 14 14:15:14 EDT 2007


Hi Christian,

Please look at my comments below. I haven't tested the code, but when I 
get the chance, I'll try to help you out more with this.

Christian Zemlin wrote:
> Dear Marc,
>
> thank you very much for your help.  My first question is completely 
> answered,  and for the second one, I basically know what to do, and 
> did it. The program runs but does not color the vertices as I want 
> yet, but I think it should be a small mistake.  Could you look through 
> the code I made following your suggestions and let me know if you see 
> what I am missing?
>
> Best wishes,
>
> Christian
>
> --------------------------
>
> vtkContourFilter *contours = vtkContourFilter::New();
>  contours->SetInputConnection(myFilter->GetOutputPort());
>  contours->GenerateValues(1, isoLevel, isoLevel);
>  contours->Update();
>  int numPoints = contours->GetOutput()->GetNumberOfPoints();
>
>  // Get the poly data
>  vtkPolyData *polys = vtkPolyData::New();
>  polys=contours->GetOutput();
You don't need to create a new instance for the polyData. Instead you 
should simply write:

vtkPolyData *polys = contours->GetOutput();
>
>  // Make a 1D float array in which entries equal row numbers
>  vtkFloatArray* vm = vtkFloatArray::New();
>  vm->SetNumberOfValues(numPoints);
>  int vertex;
>  for (vertex=0; vertex<numPoints; vertex++)
>    vm->SetValue(vertex, (float) vertex);
You might need to call Allocate() here...
>
>  // Make a vtkFieldData object that contains the 1D array
>  vtkFieldData* vmField = vtkFieldData::New();
>  vmField->AddArray(vm);
>
>  // Attribute the field data to the poly data
>    polys->SetFieldData(vmField);
>
>  // Define lookup table
>    vtkLookupTable *lut= vtkLookupTable::New();
>    lut->SetHueRange(0.4,0.0);
>    lut->SetSaturationRange(1,1);
>    lut->SetValueRange(1,1);
What about Table range? You need to specify the range of scalars you 
wish to color.
>
>  // map the contours to graphical primitives
>  vtkPolyDataMapper *contMapper = vtkPolyDataMapper::New();
>  contMapper->SetInput(polys);
>  contMapper-> SetScalarVisibility(1);
>  contMapper->SetLookupTable(lut);
>  contMapper->SetScalarRange(0.0, 100000.0);  // there are between 
> 80,000 and 90,000 vertices
>
>  // create an actor for the contours
>  vtkActor *contActor = vtkActor::New();
>  contActor->SetMapper(contMapper);
Can you tell me what errors you get when you run this? And with the 
corrections I proposed?

Marc
>
>
>
>
>
>
>
>
>
>
> ----- Original Message ----- From: "Marc Cotran" <marc at cotran.ca>
> To: "Christian Zemlin" <zemlinc at upstate.edu>
> Cc: <vtkusers at vtk.org>
> Sent: Sunday, June 10, 2007 12:23 PM
> Subject: Re: [vtkusers] Setting scalar point attributes in a contour
>
>
>> Hi Christian,
>>
>> For 1) - You can use vtkMassProperties to get the number of polygons 
>> in your isosurface. You may wish to use a vtkTriangleFilter first to 
>> ensure that only triangle polys are present. You can also look at the 
>> vtkPolyData instance directly. In your case, 
>> yourContourFilter->GetOutput() is a vtkPolyData instance, which is 
>> composed of:
>>
>>    * Points - a vtkPoints instance defining the geometry of the 
>> isosurface
>>    * Cells - 4 vtkCellArray instances defining how the points are
>>      connected together to make the isosurface's triangles, vertices,
>>      lines, and triangle strips
>>
>> You can either vtkPolyData::GetNumberOfPolys() or 
>> vtkPolyData::GetPolys()::GetNumberOfCells. Before using any of these 
>> methods, make sure you Update() the pipeline (eg. 
>> yourContourFilter->Update) .
>>
>> For 2) - Take a look at vtkFieldData and vtkDataObject (of which 
>> vtkPolyData is a subclass). You can create your attribute scalar data 
>> for the points as a vtkFieldData object, and then 
>> vtkDataObject::SetFieldData with that object. You may wish to 
>> vtkMapper::SetScalarVisibility(1) in order to visualize the scalars. 
>> If you do so, you will need to vtkMapper::SetLookupTable as well.
>>
>> hth
>>
>> Marc
>>
>> Christian Zemlin wrote:
>>> Dear vtk-experts,
>>>  I would like to assign a scalar attribute to each vertex of an 
>>> isosurface that I generated using vtkContourFilter.
>>> 1) How can I determine the number of triangles that a contour 
>>> consists of ?
>>> 2) How can I assign scalar properties to a particular vertex of a 
>>> contour?
>>>  Thank you,
>>>  Christian
>>>
>>> ------------------------------------------------------------------------ 
>>>
>>> _______________________________________________
>>> This is the private VTK discussion list.
>>> Please keep messages on-topic. Check the FAQ at: 
>>> http://www.vtk.org/Wiki/VTK_FAQ
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>> ------------------------------------------------------------------------ 
>>>
>>>
>>> _______________________________________________
>>> This is the private VTK discussion list. Please keep messages 
>>> on-topic. Check the 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