[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