I'm writing a program that samples points from a VTKUnstructuredGrid
dataset by using calls to vtkDataSet::FindPoint(). Every call to
FindPoint results in a segmentation fault. Any help would be
appreciated.<br><br>John<br>
<br>[code]<br>#include &lt;sstream&gt;<br>#include &lt;iostream&gt;<br><br>#include &lt;cstddef&gt;<br>#include &quot;vtkDataSetReader.h&quot;<br>#include &quot;vtkSmartPointer.h&quot;<br>#include &quot;vtkDataSet.h&quot;<br>

#include &quot;vtkGenericCell.h&quot;<br>#include &quot;vtkPointData.h&quot;<br><br>class vtkBlenderTexture<br>{<br>    private:<br>        vtkSmartPointer &lt;vtkDataSet&gt; dataset;<br>        int dims[3];<br>        <br>

        void load_vtk(char* filename);<br>        char vtkfilename[240];<br>        vtkGenericCell *gencell;<br>        <br>    public:<br>        <br>        vtkBlenderTexture();<br>        <br>        double SamplePoint(double x, double y, double z, int array);<br>

        <br>        void SetInputFilename(char* filename);<br>        <br>        char* GetInputFilename();<br>};<br><br>void vtkBlenderTexture::load_vtk(char filename[240])<br>        {<br>            strcpy(vtkfilename,filename);<br>

            vtkSmartPointer&lt;vtkDataSetReader&gt; reader = vtkSmartPointer&lt;vtkDataSetReader&gt;::New();<br>            reader-&gt;SetFileName(filename);<br>            if(reader-&gt;IsFileValid(&quot;unstructured_grid&quot;)||reader-&gt;IsFileValid(&quot;structured_grid&quot;))<br>

            {<br>                reader-&gt;Update();<br>                dataset=reader-&gt;GetOutput();<br>                cout &lt;&lt; &quot;Done reading &quot;&lt;&lt; filename &lt;&lt;endl;<br>            }<br>            else<br>

            {<br>                cout &lt;&lt; &quot;Invalid VTK file &quot;&lt;&lt;filename&lt;&lt;endl;<br>                dataset=NULL;<br>            }<br>        }<br>        <br>vtkBlenderTexture::vtkBlenderTexture()<br>

        {<br>                gencell = vtkGenericCell::New();<br>        }<br>        <br>double vtkBlenderTexture::SamplePoint(double x, double y, double z, int array)<br>        {<br>            double value=0;<br>            if(dataset!=NULL)<br>

            {<br>                double pos[3]={x,y,z};<br>                double pcoords[3];<br>                vtkIdType cellId=NULL;<br>                int subId;<br>                double * weights;<br>                cellId = dataset-&gt;FindCell(pos,NULL,gencell,cellId,0.01,subId,pcoords,weights);<br>

                if(cellId&gt;=0)<br>                {<br>                    vtkIdList*pointIds;<br>                    dataset-&gt;GetCellPoints(cellId,pointIds);<br>                    value = dataset-&gt;GetPointData()-&gt;GetScalars()-&gt;GetComponent(pointIds-&gt;GetId(0),array);<br>

                }<br>            }<br>                <br>            return value;<br>        }<br>        <br>void vtkBlenderTexture::SetInputFilename(char filename[240])<br>        {<br>            load_vtk(filename);<br>

        }<br>        <br>char* vtkBlenderTexture::GetInputFilename()<br>        {<br>            return vtkfilename;<br>        }<br><br><br>int main( int argc, const char* argv[] )<br>{<br>    vtkBlenderTexture * texobj = new vtkBlenderTexture();<br>

    <br>    char filename[240]=&quot;/home/haiduced/PumpStudy/pumpstudy.vtk&quot;;<br>    texobj-&gt;SetInputFilename(filename);<br>    double value = texobj-&gt;SamplePoint(0.01, 0, 0,0);<br>    cout &lt;&lt; value &lt;&lt; endl;<br>

    return 0;<br>}<br>[/code]