<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-06-22 15:54 GMT+02:00 Elvis Stansvik <span dir="ltr"><<a href="mailto:elvis.stansvik@orexplore.com" target="_blank">elvis.stansvik@orexplore.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>Hi all,<br><br>I'd like to use a vtkCompositeTransferFunctionItem + vtkCompositeControlPointsItem combo inside a vtkChartXY, for editing a color transfer function (and visualizing the opacity transfer function at the same time).<br><br></div>I want to use SetPointsFunction(vtkCompositeControlPointsItem.ColorPointsFunction) on the vtkCompositeControlPointsItem, to enable editing only of the color transfer function (while still showing the opacity transfer function). But if I do so, I get a<br><br>ERROR: In /build/vtk7-0qbNHX/vtk7-7.0.0/Common/DataModel/vtkPiecewiseFunction.cxx, line 349<br>vtkPiecewiseFunction (0x277bc50): Index out of range!<br><br></div>when I double a certain point in the plot to edit it.<br><br></div>Here's a minimal test case:<br><div><div><div><br>from vtk import vtkRenderWindow<br>from vtk import vtkRenderWindowInteractor<br>from vtk import vtkColorTransferFunction<br>from vtk import vtkPiecewiseFunction<br>from vtk import vtkContextView<br>from vtk import vtkChartXY<br>from vtk import vtkAxis<br>from vtk import vtkCompositeTransferFunctionItem<br>from vtk import vtkCompositeControlPointsItem<br>from vtk import vtkControlPointsItem<br><br># Create a render window and interactor<br>renderWindow = vtkRenderWindow()<br>interactor = vtkRenderWindowInteractor()<br><br># Create a color transfer function<br>colorFunction = vtkColorTransferFunction()<br>colorFunction.AddHSVSegment(0., 0., 1., 1., 1./3, 1./3, 1., 1.)<br>colorFunction.AddHSVSegment(1./3, 1./3, 1., 1., 2./3, 2./3, 1., 1.)<br>colorFunction.AddHSVSegment(2./3, 2./3, 1., 1., 1., 0., 1., 1.)<br><br># Create an opacity transfer function<br>opacityFunction = vtkPiecewiseFunction()<br>opacityFunction.AddPoint(0.2, 0.)<br>opacityFunction.AddPoint(0.5, 0.5)<br>opacityFunction.AddPoint(1., 1.)<br><br># Create an item for showing the transfer functions<br>functionsItem = vtkCompositeTransferFunctionItem()<br>functionsItem.SetColorTransferFunction(colorFunction)<br>functionsItem.SetOpacityFunction(opacityFunction)<br>functionsItem.SetMaskAboveCurve(True)<br><br># Create an item for showing/controlling the color<br># transfer function points<br>pointsItem = vtkCompositeControlPointsItem()<br>pointsItem.SetPointsFunction(<br>    vtkCompositeControlPointsItem.ColorPointsFunction)<br>pointsItem.SetColorTransferFunction(colorFunction)<br>pointsItem.SetOpacityFunction(opacityFunction)<br>pointsItem.SetUseOpacityPointHandles(True)<br>pointsItem.SetEndPointsXMovable(False)<br>pointsItem.SetEndPointsRemovable(False)<br>pointsItem.SetShowLabels(True)<br>pointsItem.SetLabelFormat("%.3f : %.3f")<br><br>def editPoint(sender, event):<br>    print('TODO: edit point')<br><br>pointsItem.AddObserver(<br>    vtkControlPointsItem.CurrentPointEditEvent, editPoint)<br><br># Create an XY chart to hold the items<br>chart = vtkChartXY()<br>chart.AddPlot(functionsItem)<br>chart.AddPlot(pointsItem)<br><br># Create a context view to show the chart<br>view = vtkContextView()<br>view.GetScene().AddItem(chart)<br>view.SetRenderWindow(renderWindow)<br>view.SetInteractor(interactor)<br><br>interactor.Start()<br><br></div><div>Launch the program and then double click the third point. You will get<br><br>TODO: edit point<br>ERROR: In /build/vtk7-0qbNHX/vtk7-7.0.0/Common/DataModel/vtkPiecewiseFunction.cxx, line 349<br>vtkPiecewiseFunction (0x1c4d430): Index out of range!<br><br></div><div>printed. The first printout ("TODO: edit point") is from my editPoint(...) function, while the ERROR message comes from inside VTK. After having made the first double click these error messages keeps spewing on the console as soon as you move the mouse over the chart. This only happens when doubleclicking the third point (at index 2), not when doubleclicking point 0, 1 or 3.<br><br></div><div>Anyone know what is going on? I also noticed that if I remove the line<br><br>pointsItem.SetPointsFunction(<br>    vtkCompositeControlPointsItem.ColorPointsFunction)<br><br></div><div>The problem disappears. But this will not give me the kind of editor I want.<span class="HOEnZb"><font color="#888888"><br></font></span></div></div></div></div></blockquote><div><br></div><div>To clarify which point I mean, and to show the behavior I'm seeing, I'm attaching a screenshot. I took this after doubleclicking the selected point and moving the mouse outside the window.<br><br></div><div>Elvis<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div>Elvis<br><br></div></font></span></div></div></div>
</blockquote></div><br></div></div>