2013-01-06 25 views
1

非常簡單的問題。我正在嘗試使用vtkImageTracerWidget來表示我的分割算法中的用戶輸入。我對這個小部件選擇的啓發是David Doria的代碼here> 5.0 lineWidth爲vtkImageTracerWidget?

換句話說,用戶在圖像上繪畫,它基本上起着畫筆的作用,爲算法播種。

我目前使用下面的代碼:

tracer->GetLineProperty()->SetLineWidth(20.0); 

它完美,如果我努力使線寬1.0。或者,如果我嘗試以相同的方式使用SetColor()更改線條顏色。但是,我無法讓它的線寬度超過5.0。我希望用戶使用大刷子來製作大量粗略的輸入。 5.0 vtkImageTracerWidget的行不足。

如何增加用戶輸入的大小?有可能是我應該使用的另一個小部件?我檢查了最大線寬,大約是10^36,所以這顯然不是問題。

非常感謝!

+0

我可以確認設置線寬> 10不會改變任何東西。我會研究它。 –

+0

Goodwin Lawlor的答案在這裏http://vtk.1045678.n5.nabble.com/Problem-with-vtkPolyLine-width-greater-than-20-tp5667414p5672819.html解釋說,這是一個OpenGL限制。我試圖驗證最大總線行寬度對應於寬度停止變化時的行寬設置,但不成功。我試過#include GLint smoothWidthRange [2]; glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE,smoothWidthRange); std :: cout <<「GL_SMOOTH_LINE_WIDTH_RANGE:」<< smoothWidthRange [0] <<「」<< smoothWidthRange [1] << std :: endl;但輸出是「1 0」,這看起來不正確。 –

回答

0

Goodwin Lawlor在這裏的答案http://vtk.1045678.n5.nabble.com/Problem-with-vtkPolyLine-width-greater-than-20-td5667414.html#a5672819解釋說,這是一個OpenGL限制。您可以通過檢查最大總線行寬度與線寬相對應(在存在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將繪製的線。

+0

這也取決於使用的OpenGL版本/配置文件。寬線在覈心配置文件中被標記爲不推薦使用,因此如果使用具有核心配置文件的向前兼容上下文則不可用。 –

+0

@ReetoKoradi如果你想畫一條寬線,你應該用什麼來代替「寬線」? –