[vtkusers] remove vtkImageBlend item

Mauro Maiorca mauromaiorca at gmail.com
Thu Feb 3 08:46:53 EST 2011


Hi David,

thank you very much for your quick reply.
The function RemoveInputConnection was what I was actually looking
for, and works fine with the canvas objects.
I'll also take into account your clever suggestion to don't mess up
with the indexes!!
The "only" problem left is with AddInputConnection and the grayscale
2D image (to which I have to attach/detach the canvas objects).
Before your input, I was using "blend->SetInput(color->GetOutput());"
where color is an instance of vtkImageMapToColors, that gets as input
a casted image (vtkImageCast) and a lookup table (vtkLookupTable).
Unfortunately, AddInputConnection wants vtkImageStencilData (while
SetInput is happy with vtkImageData), so I had to convert vtkImageData
into vtkImageStencilData. You actually helped a lot on that (you
replied few years ago to a similar help request), recommending the
good old Rube Goldberg machine and few handy tricks! However I'm still
far from the solution, what I've got till now (and still not quite
there) is:

//convert poly to image data
vtkSmartPointer<vtkPolyDataToImageStencil> dataToStencil =
vtkSmartPointer<vtkPolyDataToImageStencil>::New();
dataToStencil->SetInputConnection (color->GetOutputPort());
dataToStencil -> Update();

// Create an empty image
vtkSmartPointer<vtkImageGridSource> source =
vtkSmartPointer<vtkImageGridSource>::New();
source->SetFillValue(0);
source->SetLineValue (0);
source -> SetDataExtent ((imageCast->GetOutput())->GetExtent());
source->Update();

//apply the stencil to the image
vtkSmartPointer<vtkImageStencil> stencil =
vtkSmartPointer<vtkImageStencil>::New();
stencil->SetInputConnection (source->GetOutputPort());
stencil -> SetStencil (dataToStencil->GetOutput() );
stencil -> ReverseStencilOn();
stencil -> Update();

//blend
blend->AddInputConnection(0, stencil->GetOutputPort());


but nothing, it compiles but I get segmentation fault in runtime. The
segmentation fault goes away if I comment out the line:
blend->AddInputConnection(0, stencil->GetOutputPort());
I'm definitely forgetting something, but not sure what exactly! Any
suggestion would be appreciated!!!

thanks a lot for your help!

cheers,
Mauro



On Mon, Jan 31, 2011 at 4:12 PM, David Gobbi <david.gobbi at gmail.com> wrote:
> Hi Mauro,
>
> The inputs can be added/removed with these vtkAlgorithm methods:
>   blend->AddInputConnection(0, canvas->GetOutputPort());
>   blend->RemoveInputConnection(0, canvas->GetOutputPort());
>
> In all honesty, though, I find it easiest to call this:
>   blend->RemoveAllInputs();
> Then I can start over again by adding all the inputs. Otherwise,
> it can be difficult to keep the inputs in the correct order.
>
>  - David
>
> On Sun, Jan 30, 2011 at 9:11 PM, Mauro Maiorca <mauromaiorca at gmail.com> wrote:
>>
>> Hello vtk users,
>>
>> I'm struggling to understand how to remove an item from a vtkImageBlend object.
>>
>> To be more specific, I have a (grayscale) 2D image and few
>> vtkImageCanvasSource2D objects to interactively attach/detach to the
>> greyscale image.
>> In order to attach the objects to the grayscale image I'm using
>> vtkImageBlend, and it's working fine.
>> The problem is to detach the vtkImageCanvasSource2D objects from
>> vtkImageBlend: I don't see any "remove" function in vtkImageBlend.
>> Do you know whether it is possible? If vtkImageBlend is not the best
>> approach to solve my problem, do you know a better (VTK) approach to
>> it?
>> As a quick and dirty solution, I create a new vtkImageBlend and I
>> attach to it the grayscale image plus all the
>> vtkImageCanvasSource2Dobjects except the one I want to "remove", it's
>> working but it's (obviously) slow with a big image and a big number of
>> objects.
>>
>> cheers,
>> Mauro
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>



More information about the vtkusers mailing list