非常简单的问题。我试图使用vtkImageTracerWidget来表示我的分割算法中的用户输入。我对这个小部件选择的灵感来自David Doria的代码here。
换句话说,用户绘制图像,它基本上作为画笔,为算法播种。
我目前正在使用以下代码:
tracer->GetLineProperty()->SetLineWidth(20.0);
如果我尝试使线宽1.0,它的效果非常好。或者,如果我尝试以相同的方式使用SetColor()更改线条颜色。但是,我只是无法让它比任何看起来更宽的线条更宽。我希望用户使用大刷子来进行大量粗略输入。 5.0 vtkImageTracerWidget的行不够用。
如何增加用户输入的大小?是否有我应该使用的另一个小部件?我检查了最大线宽,它大约是10 ^ 36,所以这显然不是问题。
非常感谢!
答案 0 :(得分:0)
Goodwin Lawlor在这里的回答http://vtk.1045678.n5.nabble.com/Problem-with-vtkPolyLine-width-greater-than-20-td5667414.html#a5672819解释说这是一个OpenGL限制。您可以通过检查来确认最大GL线宽对应于线宽(在存在GL上下文之后,这意味着在您调用renderWindowInteractor->Start()
之后的某个时间)。对于测试,您可以使用以下方式在交互器样式事件或类似事件中执行:
// Initialize so we get these values back instead of garbage if the call doesn't work
GLfloat lineWidthRange[2];
lineWidthRange[0] = 123;
lineWidthRange[1] = 123;
glGetFloatv(GL_LINE_WIDTH_RANGE, lineWidthRange);
std::cout << "GL_LINE_WIDTH_RANGE: " << lineWidthRange[0] << " " << lineWidthRange[1] << std::endl;
在我的硬件上,打印
GL_LINE_WIDTH_RANGE: 0.5 10
表示10(正如我在实验中看到的)是OpenGL将绘制的最大行。