[vtkusers] contour widget with live wire interpolation not working
Jonathan Morra
jonmorra at gmail.com
Wed Oct 27 18:32:21 EDT 2010
I have a vtkContourWidget and I wish to use a Live Wire method for drawing
the lines. When I make a contour widget without the live wire stuff
everything looks fine. However, when I add in the live wire stuff the line
that is connecting two control points is not being shown. Below is a
snippet of my code that deals with the live wire part (I'm writing in Java).
Does anyone know why this is happening?
Thanks
vtkImageAnisotropicDiffusion3D diffusion = new
vtkImageAnisotropicDiffusion3D();
diffusion.SetInput(imageData);
// Gradient magnitude for edges
vtkImageGradientMagnitude grad = new vtkImageGradientMagnitude();
grad.SetDimensionality(3);
grad.HandleBoundariesOn();
grad.SetInputConnection(diffusion.GetOutputPort());
grad.Update();
double[] range = grad.GetOutput().GetScalarRange();
// Invert the gradient magnitude so that low costs are
// associated with strong edges and scale from 0 to 1
vtkImageShiftScale gradInvert = new vtkImageShiftScale();
gradInvert.SetShift(-1.0*range[1]);
gradInvert.SetScale(1.0 / (range[0] - range[1]));
gradInvert.SetOutputScalarTypeToFloat();
gradInvert.SetInputConnection(grad.GetOutputPort());
gradInvert.Update();
gradInverseData = gradInvert.GetOutput();
vtkContourWidget contourWidget = new vtkContourWidget();
contourWidget.FollowCursorOn();
vtkOrientedGlyphContourRepresentation rep = new
vtkOrientedGlyphContourRepresentation();
rep.GetLinesProperty().SetLineWidth(5);
rep.GetProperty().SetPointSize(6);
rep.SetWorldTolerance(0.000005);
// The contour rep requires a suitable point placer
vtkImageActorPointPlacer placer = new vtkImageActorPointPlacer();
placer.SetImageActor(imageViewer.GetImageActor());
rep.SetPointPlacer(placer);
// Reslice the data because the gradient only works in 2D
int[] dims = imageViewer.GetImageActor().GetDisplayExtent();
vtkImageReslice reslice = new vtkImageReslice();
reslice.SetInput(gradDataInverse);
reslice.SetOutputExtent(dims);
reslice.Update();
// The line interpolator defines how intermediate points are
// generated between the representations nodes. This
// interpolator uses Dijkstra's shortest path algorithm.
vtkDijkstraImageContourLineInterpolator interpolator = new
vtkDijkstraImageContourLineInterpolator();
interpolator.SetCostImage(reslice.GetOutput());
interpolator.GetDijkstraImageGeodesicPath().StopWhenEndReachedOn();
// prevent contour segments from overlapping
interpolator.GetDijkstraImageGeodesicPath().RepelPathFromVerticesOn();
// weights are scaled from 0 to 1 as are associated cost
// components
interpolator.GetDijkstraImageGeodesicPath().SetCurvatureWeight(0.15);
interpolator.GetDijkstraImageGeodesicPath().SetEdgeLengthWeight(0.8);
interpolator.GetDijkstraImageGeodesicPath().SetImageWeight(1.0);
rep.SetLineInterpolator(interpolator);
contourWidget.SetRepresentation(rep);
contourWidget.SetInteractor(panel.getRenWin().getIren());
contourWidget.On();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20101027/25a2b77a/attachment.htm>
More information about the vtkusers
mailing list