Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int IsoSurfacer::ComputeSimpleIntersection(vtkCell *tet) {
- vtkCell *edge;
- double *p = new double[3];
- vtkIdType *ids = new vtkIdType[6],
- *edges = new vtkIdType[8];
- int idn = 0;
- for (unsigned i=0; i<6; i++) {
- edge = tet->GetEdge(i);
- if (!IsCellOnLevelSet(edge)) continue;
- edges[2*idn] = edge->GetPointId(0);
- edges[2*idn+1] = edge->GetPointId(1);
- ComputeEdgeIntersection(edge->GetPointId(0),
- edge->GetPointId(1), p);
- ids[idn] = Output->GetPoints()->InsertNextPoint(p);
- idn++;
- if (idn==4) {
- ReOrderTetEdges(edges, ids);
- break;
- }
- }
- Output->InsertNextCell(VTK_POLYGON, idn, ids);
- delete[] ids;
- delete[] edges;
- delete[] p;
- return 0;
- }
- int IsoSurfacer::ReOrderTetEdges(
- vtkIdType *edges, vtkIdType *ids) const {
- int i;
- vtkIdType buf1, buf2, buf3;
- if (edges[2] != edges[0]
- && edges[2] != edges[1]
- && edges[3] != edges[0]
- && edges[3] != edges[1]) {
- buf1 = edges[2];
- buf2 = edges[3];
- buf3 = ids[1];
- edges[2] = edges[4];
- edges[3] = edges[5];
- ids[1] = ids[2];
- edges[4] = buf1;
- edges[5] = buf2;
- ids[2] = buf3;
- return 0;
- }
- if (edges[4] != edges[2]
- && edges[4] != edges[3]
- && edges[5] != edges[2]
- && edges[5] != edges[3]) {
- buf1 = edges[4];
- buf2 = edges[5];
- buf3 = ids[2];
- edges[4] = edges[6];
- edges[5] = edges[7];
- ids[2] = ids[3];
- edges[6] = buf1;
- edges[7] = buf2;
- ids[3] = buf3;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment