[vtkusers] vtkOBBTree problem (vtkMath::Jacobi: Error extracting eigenfunctions)
Alex Malyushytskyy
alexmalvtk at gmail.com
Wed Aug 17 16:09:57 EDT 2011
It looks like valid input I used was cut (by precision) by vtk stl writer
and stl file I mentioned above has 2 degenerated triangles.
Alex
On Tue, Aug 16, 2011 at 7:51 PM, Alex Malyushytskyy
<alexmalvtk at gmail.com> wrote:
> vtkOBBTree is using vtkMath (vtkJacobiN function) when building locator,
> which fails on very simple polydata read from the following stl file.
> There is some Qt classes usage in the code below (mostly string handling),
> but I hope this will not hide the problem.
>
> Any idea why and what is wrong?
>
> Regards,
> Alex
>
>
> // stl data file:
>
> solid ascii
> facet normal 0. 0. 1.
> outer loop
> vertex 0.00094e+006 1. 340.981
> vertex 0.00099e+006 1. 340.981
> vertex 0.00091e+006 1. 340.981
>
> endloop
> endfacet
> facet normal 0. 0. 1.
> outer loop
> vertex 0.00094e+006 1. 330.981
> vertex 0.00099e+006 1. 330.981
> vertex 0.00091e+006 1. 330.981
> endloop
> endfacet
> endsolid
>
>
> // to reproduce read polydata, then build vtkOBBTree
> // Basically this is polydata
> QString fileName =...;// set file name
>
> vtkPolyData* poly = stlModifier::createPolyDataFromStlFile( fileName );
>
> vtkSmartPointer<vtkOBBTree> tree = vtkSmartPointer<vtkOBBTree>::New();
> tree->SetDataSet( poly );
> tree->BuildLocator();
>
> // function which reads polydata
> // I don't think it is needed to reproduce the brlem, but just in case
>
> vtkPolyData* stlModifier::createPolyDataFromStlFile( const QString& fileName )
> {
> vtkPolyData* poly = NULL;
> Q_ASSERT( !fileName.isEmpty() );
>
> if( ! fileName.isEmpty() )
> {
> QByteArray byteArray = QFile::encodeName ( fileName );
>
> vtkSmartPointer<vtkSTLReader> sr = vtkSmartPointer<vtkSTLReader>::New();
> sr->SetFileName( byteArray.data() );
>
> vtkSmartPointer<vtkGeometryFilter> filter =
> vtkSmartPointer<vtkGeometryFilter>::New();
> filter->SetInputConnection( sr->GetOutputPort( ) );
> filter->Update();
>
> vtkSmartPointer<vtkCleanPolyData> cleanFilter =
> vtkSmartPointer<vtkCleanPolyData>::New();
> cleanFilter->SetInputConnection( filter->GetOutputPort( ) );
> cleanFilter->PointMergingOn ();
>
> vtkSmartPointer<vtkTriangleFilter> triangleFilter =
> vtkSmartPointer<vtkTriangleFilter>::New();
> triangleFilter->SetInputConnection( cleanFilter->GetOutputPort( ) );
> triangleFilter->PassLinesOff ();
> triangleFilter->PassVertsOff ();
> triangleFilter->Update();
>
> // make poly forget about the way it was created and release all the
> vtkObjects
> poly = triangleFilter->GetOutput();
> poly->Register(NULL);
> poly->SetSource(NULL);
>
> #ifdef DEBUG_POLY_DATA_MEMORY_LEAKS
> poly->DebugOn();
> #endif
> }
>
> return poly;
> }
>
>
> Reading the following stl file to the
>
More information about the vtkusers
mailing list