[vtkusers] vtkUnstructuredGrid problem

Mike Jackson imikejackson at gmail.com
Wed May 21 11:44:43 EDT 2008


Try looking at the vtkPoints->InsertNextPoint(...) Methods. This is
probably what you are looking for.

Mike

On Wed, May 21, 2008 at 11:27 AM, Teresa Azevedo
<teresa.azevedo at fe.up.pt> wrote:
> Hi all.
>
> I am new at VTK, but I tried to find a solution in this forum, without
> success.
> So, my problem is:
>
> I want to draw several voxels using an vtkUnstructuredGrid. Assuming that I
> know how many voxels (for example, 2) I need to draw and its 3D coordinates,
> I can use this code and it works fine:
>
> vtkUnstructuredGrid *octreeGrid = vtkUnstructuredGrid::New();
>         octreeGrid->Allocate(2);
>
>         vtkPoints *voxelPoints = vtkPoints::New();
>         voxelPoints->SetNumberOfPoints(16);
>         voxelPoints->InsertPoint(0, 0, 0, 0);
>         voxelPoints->InsertPoint(1, 1, 0, 0);
>         voxelPoints->InsertPoint(2, 0, 1, 0);
>         voxelPoints->InsertPoint(3, 1, 1, 0);
>         voxelPoints->InsertPoint(4, 0, 0, 1);
>         voxelPoints->InsertPoint(5, 1, 0, 1);
>         voxelPoints->InsertPoint(6, 0, 1, 1);
>         voxelPoints->InsertPoint(7, 1, 1, 1);
>
>         voxelPoints->InsertPoint(8, 0, 0, 1);
>         voxelPoints->InsertPoint(9, 1, 0, 1);
>         voxelPoints->InsertPoint(10, 0, 1, 1);
>         voxelPoints->InsertPoint(11, 1, 1, 1);
>         voxelPoints->InsertPoint(12, 0, 0, 2);
>         voxelPoints->InsertPoint(13, 1, 0, 2);
>         voxelPoints->InsertPoint(14, 0, 1, 2);
>         voxelPoints->InsertPoint(15, 1, 1, 2);
>
>         vtkVoxel *aVoxel1 = vtkVoxel::New();
>         aVoxel1->GetPointIds()->SetId(0, 0);
>         aVoxel1->GetPointIds()->SetId(1, 1);
>         aVoxel1->GetPointIds()->SetId(2, 2);
>         aVoxel1->GetPointIds()->SetId(3, 3);
>         aVoxel1->GetPointIds()->SetId(4, 4);
>         aVoxel1->GetPointIds()->SetId(5, 5);
>         aVoxel1->GetPointIds()->SetId(6, 6);
>         aVoxel1->GetPointIds()->SetId(7, 7);
>
>         vtkVoxel *aVoxel2 = vtkVoxel::New();
>         aVoxel2->GetPointIds()->SetId(0, 8);
>         aVoxel2->GetPointIds()->SetId(1, 9);
>         aVoxel2->GetPointIds()->SetId(2, 10);
>         aVoxel2->GetPointIds()->SetId(3, 11);
>         aVoxel2->GetPointIds()->SetId(4, 12);
>         aVoxel2->GetPointIds()->SetId(5, 13);
>         aVoxel2->GetPointIds()->SetId(6, 14);
>         aVoxel2->GetPointIds()->SetId(7, 15);
>
>         octreeGrid->InsertNextCell(VTK_VOXEL,aVoxel1->GetPointIds());
>         octreeGrid->InsertNextCell(VTK_VOXEL,aVoxel2->GetPointIds());
>
>         octreeGrid->SetPoints(voxelPoints);
>
> My problem is: in the beginning of my program, I do not how many
> voxels I need to draw. I tried this and it did not work:
>
> vtkUnstructuredGrid *octreeGrid = vtkUnstructuredGrid::New();
>         octreeGrid->Allocate(2);
>
>         vtkPoints *voxelPoints1 = vtkPoints::New();
>         voxelPoints->SetNumberOfPoints(8);
>         voxelPoints->InsertPoint(0, 0, 0, 0);
>         voxelPoints->InsertPoint(1, 1, 0, 0);
>         voxelPoints->InsertPoint(2, 0, 1, 0);
>         voxelPoints->InsertPoint(3, 1, 1, 0);
>         voxelPoints->InsertPoint(4, 0, 0, 1);
>         voxelPoints->InsertPoint(5, 1, 0, 1);
>         voxelPoints->InsertPoint(6, 0, 1, 1);
>         voxelPoints->InsertPoint(7, 1, 1, 1);
>
>        vtkVoxel *aVoxel1 = vtkVoxel::New();
>         aVoxel1->GetPointIds()->SetId(0, 0);
>         aVoxel1->GetPointIds()->SetId(1, 1);
>         aVoxel1->GetPointIds()->SetId(2, 2);
>         aVoxel1->GetPointIds()->SetId(3, 3);
>         aVoxel1->GetPointIds()->SetId(4, 4);
>         aVoxel1->GetPointIds()->SetId(5, 5);
>         aVoxel1->GetPointIds()->SetId(6, 6);
>         aVoxel1->GetPointIds()->SetId(7, 7);
>
>        octreeGrid->InsertNextCell(VTK_VOXEL,aVoxel1->GetPointIds());
>        octreeGrid->SetPoints(voxelPoints1);
>
>         vtkPoints *voxelPoints2 = vtkPoints::New();
>         voxelPoints2->SetNumberOfPoints(8);
>         voxelPoints2->InsertPoint(8, 0, 0, 1);
>         voxelPoints2->InsertPoint(9, 1, 0, 1);
>         voxelPoints2->InsertPoint(10, 0, 1, 1);
>         voxelPoints2->InsertPoint(11, 1, 1, 1);
>         voxelPoints2->InsertPoint(12, 0, 0, 2);
>         voxelPoints2->InsertPoint(13, 1, 0, 2);
>         voxelPoints2->InsertPoint(14, 0, 1, 2);
>         voxelPoints2->InsertPoint(15, 1, 1, 2);
>
>         vtkVoxel *aVoxel2 = vtkVoxel::New();
>         aVoxel2->GetPointIds()->SetId(0, 8);
>         aVoxel2->GetPointIds()->SetId(1, 9);
>         aVoxel2->GetPointIds()->SetId(2, 10);
>         aVoxel2->GetPointIds()->SetId(3, 11);
>         aVoxel2->GetPointIds()->SetId(4, 12);
>         aVoxel2->GetPointIds()->SetId(5, 13);
>         aVoxel2->GetPointIds()->SetId(6, 14);
>         aVoxel2->GetPointIds()->SetId(7, 15);
>
>         octreeGrid->InsertNextCell(VTK_VOXEL,aVoxel2->GetPointIds());
>        octreeGrid->SetPoints(voxelPoints2);
>
> Is there any possible way to put the voxels in the unstructuredGrid using
> separate vtkPoints? Something like this pseudo-code:
>
> vtkUnstructuredGrid octreeGrid
> allocate_enough_memory octreeGrid
>
> while (voxels_to_draw)
>  vtkVoxel voxel
>  vtkPoints points
>  points->put_coordinates
>  voxel->insert_points
>  grid->insert_voxel
> end
>
> Thank you,
> Teresa
>
> _______________________________________________
> This is the private VTK discussion list.
> Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



-- 
Mike Jackson
imikejackson _at_ gee-mail dot com



More information about the vtkusers mailing list