Hi,<div><br></div><div>I'm using polydata and the GetPointCells function to return for a given point the number of cells that use that point. I want to mark these point and so the cells where corners exist, so i can remove these cells.<br>
</div><div><br></div><div>This works great in the most part, but for a few given corners (which I can visualise both the cell id and point id in ParaView) I know that it is a vertex that is used solely by one cell.</div><div>
<br></div><div>pd->GetPointCells(pointIds->GetId(j),ncells,dummyIDT);</div><div><br></div><div>returns ncells as 2. (when I believe it should be one?)</div><div><br></div><div>Can anyone explain why that may be? Incidentally, I only use data that has been run through vtkTriangleFilter before doing this. I enclose the function I use below.</div>
<div><br></div><div>Any help would be greatly appreciated.</div><div><br></div><div>Gordon.</div><div><br></div><div><div>vtkSmartPointer<vtkPolyData> CleanMesh(vtkSmartPointer<vtkPolyData> pd){</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>// want to take in a polydata pd, and remove any cells (triangles) that are</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>// have vertices that have no links to other cells.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>//show user current EC.</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>//GetEulerCharacteristic(pd);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>//for each cell in the mesh</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>unsigned short ncells;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>int lonevertex,badcellcount;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>//variable to store number of cells that are deleted.</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>badcellcount = 0.0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int a = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>bool cornersfound = true;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>while(cornersfound){</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>//create connectivity list for cells. --required for GetPointCells calls.</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>pd->BuildLinks();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>cornersfound = false;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>int b;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>//for each cell.</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>for(vtkIdType i = 0; i<pd->GetNumberOfCells(); i++){</div><div><span class="Apple-tab-span" style="white-space:pre">        </span> <span class="Apple-tab-span" style="white-space:pre">                </span>//generate the points each that cell.</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>vtkSmartPointer<vtkIdList> pointIds = vtkSmartPointer<vtkIdList>::New();</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>pointIds = pd->GetCell(i)->GetPointIds();<span class="Apple-tab-span" style="white-space:pre">                        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (pointIds->GetNumberOfIds() > 3) {</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>std::cout << "Polygon got more than 3 vertices!" << std::endl;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>vtkIdType *dummyIDT;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>lonevertex = 0;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>ncells = 0.0;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>//so for each point in the triangle, check that the vertex has more than one cell</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>//that uses it.</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>//loop over each vertex in the cell.</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>for(vtkIdType j = 0; j < pointIds->GetNumberOfIds(); j++){<span class="Apple-tab-span" style="white-space:pre">                                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>//get the number of cells that use this vertex.</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>b = pointIds->GetId(j);</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>pd->GetPointCells(pointIds->GetId(j),ncells,dummyIDT);<span class="Apple-tab-span" style="white-space:pre">                                </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>//if vertex is not used by any other cells then -- including itself.</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>if (ncells == 1.0){<span class="Apple-tab-span" style="white-space:pre">                                </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                </span>//vertex is a corner, and therefore a candidate for deletion.</div><div><span class="Apple-tab-span" style="white-space:pre">                                                </span>lonevertex++;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>//have we got any lone vertices?</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>if(lonevertex!=0){</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>badcellcount++;</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>//put up cell as candidate for deletion.</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>pd->DeleteCell(i);<span class="Apple-tab-span" style="white-space:pre">                                        </span></div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>//need to loop back over the cells again checking for more corners</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>//that may have been revealed.</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>cornersfound = true;</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>pd->RemoveDeletedCells();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>pd->Modified();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>std::cout << "\n Corner cells removed = " << badcellcount << std::endl;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>//GetEulerCharacteristic(pd);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return pd;</div><div>}</div></div><div><br></div>