[vtkusers] How to cut and flat a volumedata with an spline
Bill Lorensen
bill.lorensen at gmail.com
Tue Oct 26 01:48:45 EDT 2010
Try displaying the ruled surface.
On Fri, Oct 22, 2010 at 6:36 AM, Raúl Ferriz <raul at torresyvalero.com> wrote:
> El 21/10/2010 8:28, Raúl Ferriz escribió:
>>
>> El 20/10/2010 20:48, Bill Lorensen escribió:
>>>
>>> BTW, this is sometimes called curvilinear reformatting. It is
>>> available on most commercial radiology workstations and many
>>> commercial PACS systems. A google search on "curvilinear reformat"
>>> will show you many papers and examples.
>>>
>>> Bill
>>>
>>> On Wed, Oct 20, 2010 at 2:45 PM, Bill Lorensen<bill.lorensen at gmail.com>
>>> wrote:
>>>>
>>>> I did this many years ago. This is what I recall...
>>>>
>>>> I would use the RuledSurfaceFilter to create a surface between two
>>>> splines. I assume you have one spline. You can use
>>>> vtkTransformPolyDataFilter to create a second spline translated from
>>>> the first. �The original and translated splines will be the input to
>>>> the ruled surface filter. Then I would use vtkProbeFilter to sample
>>>> the imagedata with the ruled surface The input will be the output of
>>>> the RuledSurface filter, the Source will be the image data.
>>>>
>>>> See how that works, then we can attack the flattening issue.
>>>>
>>>> Bill
>>>
>>
>> Many thanks Bill!!
>>
>> I will work around this and ask again if I weren't able to this work as I
>> want.
>>
> Hello users,
> I have this code:
>
> line_sup = vtkPolyData::New();
>
> this->m_LineaSP->GetPolyData ( line_sup );
>
> // Create second spline 30 units down
> trans = vtkTransform::New();
> trans->Translate ( 0.0, 0.0, -30.0 );
>
> transFilter = vtkTransformPolyDataFilter::New();
> transFilter->SetInput ( line_sup );
> transFilter->SetTransform ( trans );
> transFilter->Update ();
>
> // Merge two lines on one polydata
> vtkAppendPolyData * mergedPolyData = vtkAppendPolyData::New();
> mergedPolyData->AddInput ( line_sup );
> mergedPolyData->AddInputConnection ( transFilter->GetOutputPort () );
> mergedPolyData->Update();
>
> // Create ruled surface
> vtkRuledSurfaceFilter * surface = vtkRuledSurfaceFilter::New();
> surface->SetInputConnection ( mergedPolyData->GetOutputPort() );
> surface->SetOffset ( 0 );
> surface->SetOnRatio ( 2 );
> surface->PassLinesOn ();
> surface->SetRuledModeToResample ();
> surface->SetDistanceFactor ( 60.0 );
>
> vtkProbeFilter * probe = vtkProbeFilter::New();
> probe->SetSource ( imageData );
> probe->SetInputConnection ( surface->GetOutputPort () ) ;
> probe->Update();
>
>
> This seems to work, but at probe filter,
> vtkImageData::SafeDowncast(probe->GetOutput()) allways return NULL, if I
> don't safedowncast, object returned seems to have 0 valid points. I had
> checked bounding boxes of mergedPolyData and imageData and they intersects,
> so I can assume that surface is working properly. Am I doing something wrong
> ?
> _______________________________________________
> 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