[vtkusers] Problems building UnstructuredGrid, desperately needing help!

Lise Angell lise.angell at gmail.com
Sun Oct 23 10:14:33 EDT 2005


Hi everybody!

I'm trying to translate C++ code to Python, but I'm having some
trouble so I would really appreciate some help (I'm not that
experienced with VTK).

My program does the following:
- reads point coordinates and connectivity from file (not a vtk formatted file)
- builds a vtkUnstructuredGrid and visualizes it.

The problem arises in the building of the unstructuredGrid...

The method
vtkUnstructuredGrid::InsertNextCell(int type, vtkIdType npts, vtkIdType *pts)
seems to be unreachable from Python (although it works fine in C++,
for code sample, see below)...
When I try to run it I get

Traceback (most recent call last):
  File "readBinarySimres.py", line 1092, in ?
    u_field = mount_vtk_structures(fields)
  File "readBinarySimres.py", line 828, in mount_vtk_structures
    vtk_field.InsertNextCell(cell_type, npts, pt_list)
TypeError: function takes exactly 2 arguments (3 given)



So I tried to use the other method instead,
InsertNextCell (int type, vtkIdList *ptIds)

for el in range (0,nel):
  id_list = vtk.vtkIdList()
  (cell_type, npts, id_list) = convertElm(grid, el, id_list)  #define
the connectivity in the cell
  vtk_field.InsertNextCell(cell_type, id_list)


def convertElm(grid, e, ids):
  vtk_cell_type=0; npt=0
  nsd = grid.nsd; nne = grid.nne

  # check element type
  elm_type = grid.elm_type

  if elm_type == 'ElmB4n2D':
    vtk_cell_type = VTK_QUAD
    #print 'element type ', vtk_cell_type
    npt = 4
    ids.InsertNextId(1)
    ids.InsertNextId(2)
    ids.InsertNextId(4)
    ids.InsertNextId(3)
  [...]
  return (vtk_cell_type, npt, ids)



Now I get a Bus error while visualizing (with GeometryFilter,
WarpScalar, PolyDataNormals and PolyDataMapper)

Any ideas what is wrong or how I can work around this?

Best regards,
Lise

(Running Mac OSX Tiger, python2.3 and VTK from cvs 11.oct 2005)

###--------------------------------------------------------------------------
###--------------------------------------------------------------------------

C++ code that works:

   // Grab the grid and related parameters
  const GridFE& grid = scalar_field.grid();
  const int      nsd = grid.getNoSpaceDim();
  const int      nno = grid.getNoNodes();
  const int      nel = grid.getNoElms();

  // Allocate Vtk data structures for the coordinates and data fields.
  vtkPoints* pts = vtkPoints::New();
  pts->SetNumberOfPoints (nno);

  vtkDoubleArray* data = vtkDoubleArray::New();
  data->SetNumberOfValues (nno);
  //------------------------------------------------------------------------
  // First, tell vtk structures about the "geometry" (nodal coords & values)
  //------------------------------------------------------------------------
  for (int i = 0; i < nno; i++) {                // run through all nodes
    s = scalar_field.valueNode(i+1);

    x[0]=grid.getCoor (i+1,1);  // x coordinate of node i+1
    x[1] = x[2] = scale*s;      // Assumes 1D,  scaled field values as 2nd/3rd
    if (nsd > 1)
      x[1]=grid.getCoor (i+1,2);  // y coordinate of node i+1
    if (nsd  > 2)
      x[2]=grid.getCoor (i+1,3);  // z coordinate of node i+1


    data->SetValue(i,s);      // put field value in vtk object
    pts->SetPoint(i,x);               // put points in vtk object
  }
  vtk_u_grid = vtkUnstructuredGrid::New();

  vtk_u_grid->Allocate (nel,0);                   // set no of elements
  vtk_u_grid->SetPoints (pts);                    // put points in grid
  vtk_u_grid->GetPointData()->SetScalars(data);  // put field values in grid

  //---------------------------------------------------------
  // Next, tell vtk grid structure about the element topology
  //---------------------------------------------------------

  // Maximum 8 nodes in the allowable Vtk cell types.
  int vtk_cell_type = 0;
  int npt = 0, pt_list[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };

  for (int e = 1; e <= nel; ++e) {
    convertElm(grid, e, vtk_cell_type, npt, pt_list);
    vtk_u_grid->InsertNextCell (vtk_cell_type, npt, pt_list);
  }



###--------------------------------------------------------------------------
###--------------------------------------------------------------------------



--
"Je forme une entreprise qui n'eut jamais d'exemple,
et dont l'exécution n'aura point d'imitateur."  J-J Rousseau



More information about the vtkusers mailing list