Okay, here we go. Should we ever meet the beers go on you. ;-)<br />
Most of the things were correct.<br />The main problem was you missed one important thing.<br /><br />When you create a vtkPolyData by hand from an vtkUnstructuredGrid you must copy the cells as well, not only the points.<br />So the reason no triangles could have been found was simply that no triangles did exist.<br />


<pre class="sourcecode"><font color="#008000"><code class="comment">// Catch mouse events</code></font>
<code class="keyword">class</code> MouseInteractorStyle : <code class="keyword">public</code> vtkInteractorStyleTrackballCamera
{
<code class="keyword">public</code>:
    static MouseInteractorStyle* <code class="keyword">New</code>();

    MouseInteractorStyle() {
        selectedMapper = vtkSmartPointer&lt;vtkDataSetMapper&gt;::<code class="keyword">New</code>();
        selectedActor = vtkSmartPointer&lt;vtkActor&gt;::<code class="keyword">New</code>();
        selected = vtkSmartPointer&lt;vtkUnstructuredGrid&gt;::<code class="keyword">New</code>();

<font color="#008000">        <code class="comment">// the next 5 lines can be done once here in the constructor. </code>
        <code class="comment">// It's not necessary to do this with every pick</code></font>
        selectedMapper-&gt;SetInput(selected);
        selectedActor-&gt;SetMapper(selectedMapper);
        selectedActor-&gt;GetProperty()-&gt;EdgeVisibilityOn();
        selectedActor-&gt;GetProperty()-&gt;SetEdgeColor(1,0,0);
        selectedActor-&gt;GetProperty()-&gt;SetLineWidth(3);
    }


    <code class="keyword">virtual</code> <code class="keyword">void</code> OnLeftButtonDown()
    {
        <code class="keyword">int</code>* pos = <code class="keyword">this</code>-&gt;GetInteractor()-&gt;GetEventPosition();
        vtkSmartPointer&lt;vtkCellPicker&gt; picker =
            vtkSmartPointer&lt;vtkCellPicker&gt;::<code class="keyword">New</code>();
        picker-&gt;SetTolerance(0.0005);
        picker-&gt;Pick(pos[0], pos[1], 0, <code class="keyword">this</code>-&gt;GetDefaultRenderer());
        <code class="keyword">double</code>* worldPosition = picker-&gt;GetPickPosition();

        <code class="keyword">if</code>(picker-&gt;GetCellId() != -1)
        {
            vtkSmartPointer&lt;vtkIdTypeArray&gt; ids =
                vtkSmartPointer&lt;vtkIdTypeArray&gt;::<code class="keyword">New</code>();
            ids-&gt;SetNumberOfComponents(1);
            ids-&gt;InsertNextValue(picker-&gt;GetCellId());

            vtkSmartPointer&lt;vtkSelectionNode&gt; selectionNode =
                vtkSmartPointer&lt;vtkSelectionNode&gt;::<code class="keyword">New</code>();
            selectionNode-&gt;SetFieldType(vtkSelectionNode::CELL);
            selectionNode-&gt;SetContentType(vtkSelectionNode::INDICES);
            selectionNode-&gt;SetSelectionList(ids);

            vtkSmartPointer&lt;vtkSelection&gt; selection =
                vtkSmartPointer&lt;vtkSelection&gt;::<code class="keyword">New</code>();
            selection-&gt;AddNode(selectionNode);

            vtkSmartPointer&lt;vtkExtractSelection&gt; extractSelection =
                vtkSmartPointer&lt;vtkExtractSelection&gt;::<code class="keyword">New</code>();

            extractSelection-&gt;SetInput(0, <code class="keyword">this</code>-&gt;Data);
            extractSelection-&gt;SetInput(1, selection);
            extractSelection-&gt;Update();

            selected-&gt;ShallowCopy(extractSelection-&gt;GetOutput());

            vtkSmartPointer&lt;vtkPolyData&gt; newdata =
                vtkSmartPointer&lt;vtkPolyData&gt;::<code class="keyword">New</code>();
            newdata-&gt;SetPoints(selected-&gt;GetPoints());

          <b> <font size="2" color="#008000"> <code class="comment">// you missed to copy the cells</code>
            <code class="comment">// it's not enough to copy points only
</code>
</font><font size="2">          </font><font color="#008000"><font size="2">  </font><code class="comment"><font size="2">/**********************************************************************/</font></code></font><font size="2">
            newdata-&gt;SetPolys(selected-&gt;GetCells());
          </font><font color="#008000"><font size="2">  </font><code class="comment"><font size="2">/**********************************************************************/</font></code></font>
</b>
           <font color="#008000"> <code class="comment">// the triangle filter is not necessary</code>
            <code class="comment">// but see my comment in the main function</code>
            <code class="comment">//vtkSmartPointer&lt; vtkTriangleFilter &gt; triangleFilter =</code>
            <code class="comment">//        vtkSmartPointer&lt;vtkTriangleFilter&gt;::New();</code>
            <code class="comment">//triangleFilter-&gt;SetInputConnection(newdata-&gt;GetProducerPort());</code>
            <code class="comment">//triangleFilter-&gt;Update(); // not necessary</code>
</font>
            <code class="keyword">int</code> numberOfSubdivisions = 1;

            vtkSmartPointer&lt; vtkLoopSubdivisionFilter &gt; subdivisionFilter =
                vtkSmartPointer&lt;vtkLoopSubdivisionFilter&gt;::<code class="keyword">New</code>();
            subdivisionFilter-&gt;SetNumberOfSubdivisions(numberOfSubdivisions);
            subdivisionFilter-&gt;SetInput(newdata);
           <font color="#008000"> <code class="comment">//subdivisionFilter-&gt;SetInputConnection(triangleFilter-&gt;GetOutputPort());</code></font>

            subdivisionFilter-&gt;Update();<font color="#008000"> <code class="comment">// not necessary</code></font>
           <font color="#008000"> <code class="comment">// show the subdivsions</code></font>
            selectedMapper.SetInputConnection(subdivisionFilter.GetOutputPort());
           <font color="#008000"> <code class="comment">// comment the line above and uncomment the next code line if you prefer </code>
            <code class="comment">// to show the selected cell as a whole</code>
            <code class="comment">// selectedMapper.SetInputConnection(selected.GetOutputPort());</code></font>

<font color="#008000">            <code class="comment">// ???</code>
            <code class="comment">//vtkSmartPointer&lt;vtkIdTypeArray&gt; id = vtkSmartPointer&lt;vtkIdTypeArray&gt;::New();</code>
            <code class="comment">//id-&gt;SetNumberOfComponents(1);</code></font>
        }

        vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
    }

    vtkSmartPointer&lt;vtkPolyData&gt; Data;
    vtkSmartPointer&lt;vtkDataSetMapper&gt; selectedMapper;
    vtkSmartPointer&lt;vtkActor&gt; selectedActor;
    vtkSmartPointer&lt;vtkUnstructuredGrid&gt; selected;
};

vtkStandardNewMacro(MouseInteractorStyle);


<code class="keyword">int</code> main(<code class="keyword">int</code>, <code class="keyword">char</code> *[])
{
    vtkSmartPointer&lt;vtkSphereSource&gt; sphereSource =
        vtkSmartPointer&lt;vtkSphereSource&gt;::<code class="keyword">New</code>();
    sphereSource-&gt;Update();<font color="#008000"> <code class="comment">// not necessary</code></font>

    vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapper =
        vtkSmartPointer&lt;vtkPolyDataMapper&gt;::<code class="keyword">New</code>();

   <font color="#008000"> <code class="comment">// next commented lines are only necessary if you want to </code>
    <code class="comment">// subdivide the complete sphere at once and not only the selected cell </code>
    <code class="comment">/*
    vtkSmartPointer&lt;vtkTriangleFilter&gt; triangleFilter =
    vtkSmartPointer&lt;vtkTriangleFilter&gt;::New();
    triangleFilter-&gt;SetInputConnection(sphereSource-&gt;GetOutputPort());
    triangleFilter-&gt;Update();
    mapper-&gt;SetInputConnection(triangleFilter-&gt;GetOutputPort());
    */</code></font>
   <font color="#008000"> <code class="comment">// instead use the spheresource directly as input</code></font>
    mapper-&gt;SetInputConnection(sphere-&gt;GetOutputPort());

    vtkSmartPointer&lt;vtkActor&gt; actor =
        vtkSmartPointer&lt;vtkActor&gt;::<code class="keyword">New</code>();
    actor-&gt;SetMapper(mapper);

    vtkSmartPointer&lt;vtkRenderer&gt; renderer =
        vtkSmartPointer&lt;vtkRenderer&gt;::<code class="keyword">New</code>();
    vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow =
        vtkSmartPointer&lt;vtkRenderWindow&gt;::<code class="keyword">New</code>();
    renderWindow-&gt;AddRenderer(renderer);

    vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor =
        vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::<code class="keyword">New</code>();
    renderWindowInteractor-&gt;SetRenderWindow(renderWindow);
    renderWindowInteractor-&gt;Initialize();

    vtkSmartPointer&lt;MouseInteractorStyle&gt; style =
        vtkSmartPointer&lt;MouseInteractorStyle&gt;::<code class="keyword">New</code>();
    style-&gt;SetDefaultRenderer(renderer);

  <font color="#008000">  <code class="comment">/* see my comment several lines above */</code>
    <code class="comment">//style-&gt;Data = triangleFilter-&gt;GetOutput();</code></font>
    style-&gt;Data = sphere.GetOutput();
    renderWindowInteractor-&gt;SetInteractorStyle(style);

    renderer-&gt;AddActor(actor);
    renderer-&gt;ResetCamera();
    renderer-&gt;SetBackground(0,0,1);<font color="#008000"> <code class="comment">// Blue</code></font>

    renderWindow-&gt;Render();
    renderWindowInteractor-&gt;Start();

    <code class="keyword">return</code> EXIT_SUCCESS;

</pre>
<br /><br /><br />
with best regards
Jochen

        
<br/><hr align="left" width="300" />
View this message in context: <a href="http://vtk.1045678.n5.nabble.com/error-message-in-subdividing-a-cell-tp5713334p5713389.html">Re: error message in subdividing a cell</a><br/>
Sent from the <a href="http://vtk.1045678.n5.nabble.com/VTK-Users-f1224199.html">VTK - Users mailing list archive</a> at Nabble.com.<br/>