[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