[vtkusers] How to crop a vtkImageData volume?
allan.martin at utoronto.ca
allan.martin at utoronto.ca
Mon Sep 22 09:35:07 EDT 2008
Thanks... Actually, I got it working. I didn't realize that
vtkExtractVOI was 0-based (and I also forgot to convert from voxel
indices to actual coordinates). Works great now, so thanks again.
Cheers,
Al
Quoting Amy Squillacote <ahs at cfdrc.com>:
> Hi Al,
>
> I'm copying this back to the vtkusers list. Please keep the discussion
> on the list so other people can contribute to the conversation and so
> the discussion is archived.
>
> - Amy
>
> allan.martin at utoronto.ca wrote:
>> Hey Amy,
>>
>> Thanks for your help. Do you have a brief example of how to use
>> this? When I do the following, it doesn't seem to get the right
>> region. I checked the bounds values and they look to be correct (a
>> subset of the original VoxelData bounds), so I'm rather confused.
>> Thoughts?
>>
>> vtkPlanes * boxVOIPlanes = vtkPlanes::New();
>> boxVOI->GetPlanes(boxVOIPlanes);
>> vtkExtractVOI * clipDataSet = vtkExtractVOI::New();
>> clipDataSet->SetInput(VoxelData);
>> double* bounds = boxVOIPlanes->GetPoints()->GetBounds();
>> clipDataSet->SetVOI((int)bounds[0],(int)bounds[1],(int)bounds[2],
>> (int)bounds[3],(int)bounds[4],(int)bounds[5]);
>> clipDataSet->Update();
>> mc->SetInput(clipDataSet->GetOutput());
>>
>> Cheers,
>> Al
>>
>>
>>
>> Quoting Amy Squillacote <ahs at cfdrc.com>:
>>
>>> Hi Al,
>>>
>>> Assuming that you're cropping planes are aligned with the axes of the
>>> vtkImageData volume, you could try using vtkExtractVOI instead. Its
>>> output is still a vtkImageData, so you wouldn't have a problem with
>>> passing it to vtkMarchingCubes.
>>>
>>> - Amy
>>>
>>> allan.martin at utoronto.ca wrote:
>>>> Hi all,
>>>>
>>>> I'm trying to take a vtkImageData volume and crop it with a box
>>>> widget to make a smaller volume, so that when I subsequently
>>>> render an isosurface it isn't so slow. I think I'm close, but I
>>>> can't seem to get something that vtkMarchingCubes will eat (it
>>>> wants a vtkImageData object, and I don't know how to copy my
>>>> vtkUnstructuredGrid back to a vtkImageData object). Anyone have
>>>> an example of how to do this?
>>>>
>>>> Here is my broken code:
>>>>
>>>> //Start with a volume, and make it smaller with a box widget
>>>> boxVOI = vtkBoxWidget::New();
>>>> VoxelData = vtkImageData::New();
>>>> ...
>>>> //Now take the region defined by the box widget, and make a new
>>>> volume data set
>>>> //that is smaller
>>>> vtkPlanes* boxVOIPlanes = vtkPlanes::New();
>>>> boxVOI->GetPlanes(boxVOIPlanes);
>>>> vtkExtractGeometry* clipDataSet = vtkExtractGeometry::New();
>>>> clipDataSet->SetInput(VoxelData);
>>>> clipDataSet->SetImplicitFunction(boxVOIPlanes);
>>>> vtkDataSet* output = (vtkDataSet*) clipDataSet->GetOutput();
>>>> vtkImageData* croppedVoxelData = vtkImageData::New();
>>>>
>>>> //This copy doesn't seem to be sufficient as it doesn't copy the
>>>> number of dimensions and other vtkImageData fields
>>>> croppedVoxelData->ShallowCopy(output);
>>>> croppedVoxelData->AllocateScalars(); //It complains if scalars
>>>> aren't allocated
>>>> mc->SetInput(croppedVoxelData);
>>>>
>>>>
>>>> Thanks for your help,
>>>>
>>>> Al Martin
>>>>
>>>> _______________________________________________
>>>> 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
>>>>
>>>>
>>>
>>> --
>>> Amy Squillacote Phone: (256) 726-4839
>>> Computer Scientist Fax: (256) 726-4806
>>> CFD Research Corporation Web: http://www.cfdrc.com
>>> 215 Wynn Drive, Suite 501
>>> Huntsville, AL 35805
>>
>>
>>
>> Regards,
>>
>> Al Martin
>>
>>
>>
>
> --
> Amy Squillacote Phone: (256) 726-4839
> Computer Scientist Fax: (256) 726-4806
> CFD Research Corporation Web: http://www.cfdrc.com
> 215 Wynn Drive, Suite 501
> Huntsville, AL 35805
Regards,
Al Martin
More information about the vtkusers
mailing list