<html><head></head><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px">Greetings,<br class="yiv6865191490"><div class="qtdSeparateBR"><br><br></div><div style="display: block;" id="yui_3_16_0_1_1457516628614_6511" class="yahoo_quoted"><div id="yui_3_16_0_1_1457516628614_6510" style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"><div id="yui_3_16_0_1_1457516628614_6509" style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"><div id="yui_3_16_0_1_1457516628614_6508" class="y_msg_container"><div id="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_6507"><div id="yui_3_16_0_1_1457516628614_6506" dir="ltr" class="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_6505" class="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_6504" class="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_6503" class="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_6533" class="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_6534" class="yiv6865191490"><br class="yiv6865191490"></div>Having trouble with a simple set of polygon data, read from an STL file, rendering in an ExternalVTKWidget.  I am migrating from VTK 6.2 with OpenGL1 back-end, and having trouble with 6.3 (OpenGL1 or 2) and 7.0.<br class="yiv6865191490"><br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6624" class="yiv6865191490">I've tried a few configurations using ExternalVTKWidget and deriving a class from QOpenGLWidget:<br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6614" class="yiv6865191490">With <b id="yui_3_16_0_1_1457516628614_7393" class="yiv6865191490">6.2/OpenGL1</b>, the polydata looks how I expect, with some normals, lighting depth sorting and transparency (see 1st picture).  In <b id="yui_3_16_0_1_1457516628614_6613" class="yiv6865191490">6.3/OpenGL1</b>, the surface was not visible.  With <b id="yui_3_16_0_1_1457516628614_7326" class="yiv6865191490">6.3/OpenGL2</b>, surface quality is bad, as if some normals or translucency info is gone or ignored (see 2nd picture).  Same result with 7.0.<br class="yiv6865191490"><br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6552" class="yiv6865191490"><div dir="ltr">I then tried QVTKWidget2 and the surface looked fine.  But I need more control over the rendering process which I can't get with this class.  For example, rendering other things before or after the render() call, and having my own control over mouse behavior.  I also want to display the same rendering in multiple windows.  Deriving a class from QOpenGLWidget seems to offer the control I need, and seems more amenable to context sharing.</div></div><div id="yui_3_16_0_1_1457516628614_6831" class="yiv6865191490"><br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6686" class="yiv6865191490">So I'm wondering what is going wrong with the vtkExternalOpenGLRenderWindow that it's not rendering the surface as in QVTKWidget2.  Is there some initialization step missing?  Hopefully it is something silly I missed.<br class="yiv6865191490"><br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6692" class="yiv6865191490">Here are relevant code snippets:<br class="yiv6865191490"><br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6532" class="yiv6865191490">In initializeGL():<br class="yiv6865191490"><span id="yui_3_16_0_1_1457516628614_6753" style="font-family:monospace, monospace;" class="yiv6865191490">  externalVTKWidget = vtkSmartPointer<ExternalVTKWidget>::New();<br class="yiv6865191490">  mRenWin = externalVTKWidget->GetRenderWindow();<br class="yiv6865191490">  mRenWin->Start();<br class="yiv6865191490"><br class="yiv6865191490">  vtkSmartPointer<vtkCallbackCommand> callback = vtkSmartPointer<vtkCallbackCommand>::New();<br class="yiv6865191490">  callback->SetClientData(this);<br class="yiv6865191490">  callback->SetCallback(makeCurrentCallback);<br class="yiv6865191490">  mRenWin->AddObserver(vtkCommand::WindowMakeCurrentEvent, callback);<br class="yiv6865191490"></span><br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6512" class="yiv6865191490">In resizeGL():<br class="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_7045"><span id="yui_3_16_0_1_1457516628614_6513" style="font-family:monospace, monospace;" class="yiv6865191490">  mRenWin->SetSize(w, h);  // not needed anymore, </span></div><div id="yui_3_16_0_1_1457516628614_7111" dir="ltr"><span id="yui_3_16_0_1_1457516628614_6513" style="font-family:monospace, monospace;" class="yiv6865191490">I think<br></span></div><span id="yui_3_16_0_1_1457516628614_6513" style="font-family:monospace, monospace;" class="yiv6865191490">  renderer = externalVTKWidget->AddRenderer();<br class="yiv6865191490"></span><br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_6502" class="yiv6865191490">This is how the polydata is read, nothing unusual here, I think:<br class="yiv6865191490"><span id="yui_3_16_0_1_1457516628614_6514" style="font-family:monospace, monospace;" class="yiv6865191490">    vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();<br class="yiv6865191490">    reader->SetFileName(fileName.c_str());<br class="yiv6865191490">    reader->Update();<br class="yiv6865191490">    polydata = reader->GetOutput();<br class="yiv6865191490">    vtkSmartPointer<vtkPolyDataNormals> normalGenerator = vtkSmartPointer<vtkPolyDataNormals>::New();<br class="yiv6865191490">    normalGenerator->SetInputData(polydata);<br class="yiv6865191490">    vtkSmartPointer<vtkDepthSortPolyData> depthSort = vtkSmartPointer<vtkDepthSortPolyData>::New();<br class="yiv6865191490">    depthSort->SetInputConnection(normalGenerator->GetOutputPort());<br class="yiv6865191490">    depthSort->SetDirectionToBackToFront();<br class="yiv6865191490">    depthSort->SetVector(1, 1, 1);<br class="yiv6865191490">    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();<br class="yiv6865191490">    mapper->SetInputConnection(depthSort->GetOutputPort());<br class="yiv6865191490">    mapper->ScalarVisibilityOff();<br class="yiv6865191490">    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();<br class="yiv6865191490">    actor->SetMapper(mapper);<br class="yiv6865191490">    actor->GetProperty()->SetOpacity(0.7);<br class="yiv6865191490"></span></div><div id="yui_3_16_0_1_1457516628614_6531" class="yiv6865191490"><span id="yui_3_16_0_1_1457516628614_6530" style="font-family:monospace, monospace;" class="yiv6865191490">    mRenWin->renderer->AddActor(actor);<br class="yiv6865191490"></span></div><div id="yui_3_16_0_1_1457516628614_6515" class="yiv6865191490"><br class="yiv6865191490">I'm using depth sorter b/c I was having trouble getting depth peeling working.  This is what got me started trying to migrate.<br class="yiv6865191490"><br class="yiv6865191490"></div></div>BTW, the VTK folks seem to say that QVTKWidget2 is the way to go for the future of VTK within Qt.  However, it is derived from QGLWidget, which the Qt folks say is deprecated.  I wonder what is going to happen here.<br class="yiv6865191490"><br class="yiv6865191490"></div>Thank you in advance for any help you can offer,<br class="yiv6865191490"></div><div id="yui_3_16_0_1_1457516628614_7671">Mike</div><div id="yui_3_16_0_1_1457516628614_8015"><br></div><div id="yui_3_16_0_1_1457516628614_7884">PS: 1st picture is the way it's supposed to look (as I get in 6.2/OpenGL1).  2nd picture is the way it's looking in 6.3/OpenGL2 and 7.0.<br></div><div id="yui_3_16_0_1_1457516628614_6525" class="yiv6865191490"><div id="yui_3_16_0_1_1457516628614_6524" class="yiv6865191490"><br class="yiv6865191490"></div></div></div>
<img data-id="7f18eb10-7618-1226-5eb0-1ee35bc94964" name="vtk6.2-opengl1.jpg" id="yiv686519149013BAF06F-B19A-4FCF-9929-6BB6D44B862D" src="cid:sIfoer0M8CwReoMNUU3l" class="yiv6865191490" height="378" width="322"><img data-id="6ef7e9a4-ca84-4994-80b2-ce9d5eb7144f" name="vtk6.3-opengl2-externwidget.jpg" id="yiv6865191490C83DA987-D2B4-4B09-9B15-9990383DDFEC" src="cid:XuYjXirTGdGHyDiizEoa" class="yiv6865191490" height="331" width="306"><br class="yiv6865191490"><br class="yiv6865191490"></div></div><br><br></div>  </div> </div>  </div></div></body></html>