[vtkusers] how to iterate over extracted edges?
David Doria
daviddoria+vtk at gmail.com
Thu Jan 14 16:50:15 EST 2010
On Thu, Jan 14, 2010 at 4:14 PM, <lynx.abraxas at freenet.de> wrote:
>
> On 12/01/10 14:55:11, David Doria wrote:
>> It may be helpful in cases like this for some of the experienced
>> members to give a "not that I've seen/heard of" type of response. A
>> few negative responses from some experienced members can be very
>> useful to decide if he should go ahead and write something himself.
>> What I'm imagining is happening if people don't know the answer, they
>> are just not responding in hopes that someone else will know the
>> answer and respond. However, sometimes the answer is "no one knows the
>> answer/ such a filter does not exist" and this can be inferred by a
>> few "I don't knows".
>>
>
> So I'm stuck again: I want to iterate over the edges of the output of
> vtkDelaunay3D. I triede the following code but it never reports any angles.
> Why's that? It seems there's no GetNextCell() ever.
>
> Thanks for any help or hints.
> Lynx
> _________________________________________
>
>
> vtkExtractEdges *edges= vtkExtractEdges::New();
> edges->SetInputConnection(delaunay3D->GetOutputPort());
>
> //vtkCellArray *lines= delaunay3D->GetOutput()->GetLines(); //does this work as well?
> vtkCellArray *lines= edges->GetOutput()->GetLines();
> vtkPoints *epoints = edges->GetOutput()->GetPoints();
>
> //unsigned int num_e= lines->GetNumberOfCells();
>
> cout << "Computing angles... " << endl;
> double angle;
> // for(int i= 0; i << num_e; i++){
> // angle= vtkMath::Dot(vtkMath::Normalize(lines->Get),
> // }
>
> vtkIdType npts, *pts;
> double p0[3], p1[3];
>
> lines->InitTraversal();
> while(lines->GetNextCell(npts, pts)){
> if (npts != 2){
> cout << "Didn't get two points! Skipping edge!" << endl;
> continue;
> }
> epoints->GetPoint(pts[0], p0);
> epoints->GetPoint(pts[1], p1);
> vtkMath::Normalize(p0);
> vtkMath::Normalize(p1);
> angle= acos(vtkMath::Dot(p0, p1)) * 180.0 / PI;
> cout << angle << "; ";
> }
> cout << endl;
Lynx,
It seems to work for me...
Try the data file (cow.vtp) from here:
http://www.cmake.org/Wiki/VTK/Examples/Modelling/Cxx/Delaunay3D
with this example:
http://www.cmake.org/Wiki/VTK/Examples/ExtractEdges
Does it do what you needed?
Thanks,
David
More information about the vtkusers
mailing list