<p dir="ltr"><br>
Den 11 feb. 2017 5:39 em skrev "Utkarsh Ayachit" <<a href="mailto:utkarsh.ayachit@kitware.com">utkarsh.ayachit@kitware.com</a>>:<br>
><br>
> Abel,<br>
><br>
> You may want to look into using vtkGenericOpenGLRenderWindow. See the newly added QVTKOpenGLWidget [1] in VTK/master as an example. There's too we're letting QOpenGLWidget create the OpenGL context and VTK manage the rendering.</p>
<p dir="ltr">Sorry for hijacking with a question of my own: I hadn't heard of this new QVTKOpenGLWidget, do you know if it'll be part of 7.2.0?</p>
<p dir="ltr">Elvis</p>
<p dir="ltr">><br>
> Utkarsh<br>
><br>
> [1] <a href="https://gitlab.kitware.com/vtk/vtk/blob/master/GUISupport/Qt/QVTKOpenGLWidget.cxx">https://gitlab.kitware.com/vtk/vtk/blob/master/GUISupport/Qt/QVTKOpenGLWidget.cxx</a><br>
><br>
><br>
> On Fri, Feb 10, 2017 at 5:29 PM, huabel <<a href="mailto:hu.ds.abel@icloud.com">hu.ds.abel@icloud.com</a>> wrote:<br>
>><br>
>> Hi, <br>
>> I am try to use GLFW as window manager, get this result:<br>
>><br>
>><br>
>><br>
>> It create two independent window, how can I let the vtk renderwindow show in glfw window?<br>
>><br>
>> The code demo1.cpp:<br>
>><br>
>> #include "vtkConeSource.h"<br>
>> #include "vtkPolyDataMapper.h"<br>
>> #include "vtkRenderWindow.h"<br>
>> #include "vtkRenderWindowInteractor.h"<br>
>> #include "vtkCamera.h"<br>
>> #include "vtkActor.h"<br>
>> #include "vtkRenderer.h"<br>
>> #include "vtkCommand.h"<br>
>> #include "vtkBoxWidget.h"<br>
>> #include "vtkTransform.h"<br>
>> #include "vtkInteractorStyleTrackballCamera.h"<br>
>> #include <GLFW/glfw3.h><br>
>><br>
>> #define SCREEN_WIDTH 800<br>
>> #define SCREEN_HEIGHT 600<br>
>><br>
>> class vtkMyCallback : public vtkCommand<br>
>> {<br>
>> public:<br>
>> static vtkMyCallback *New()<br>
>>   { return new vtkMyCallback; }<br>
>> void Execute(vtkObject *caller, unsigned long, void*) VTK_OVERRIDE<br>
>> {<br>
>>     vtkTransform *t = vtkTransform::New();<br>
>>     vtkBoxWidget *widget = reinterpret_cast<vtkBoxWidget*>(caller);<br>
>>     widget->GetTransform(t);<br>
>>     widget->GetProp3D()->SetUserTransform(t);<br>
>>     t->Delete();<br>
>> }<br>
>> };<br>
>><br>
>> static void error_cb(int error, const char* description) {<br>
>> fprintf(stderr, "Error: %s\n", description);<br>
>> }<br>
>><br>
>> void drawScene(void) {<br>
>> glClear(GL_COLOR_BUFFER_BIT);<br>
>> vtkConeSource *cone = vtkConeSource::New();<br>
>> cone->SetHeight( 3.0 );<br>
>> cone->SetRadius( 1.0 );<br>
>> cone->SetResolution( 10 );<br>
>><br>
>> vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();<br>
>> coneMapper->SetInputConnection( cone->GetOutputPort() );<br>
>><br>
>> vtkActor *coneActor = vtkActor::New();<br>
>> coneActor->SetMapper( coneMapper );<br>
>><br>
>> vtkRenderer *ren1= vtkRenderer::New();<br>
>> ren1->AddActor( coneActor );<br>
>> ren1->SetBackground( 0.1, 0.2, 0.4 );<br>
>><br>
>> vtkRenderWindow *renWin = vtkRenderWindow::New();<br>
>> renWin->AddRenderer( ren1 );<br>
>> renWin->SetSize( 300, 300 );<br>
>><br>
>> vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();<br>
>> iren->SetRenderWindow(renWin);<br>
>><br>
>> vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();<br>
>> iren->SetInteractorStyle(style);<br>
>><br>
>> vtkBoxWidget *boxWidget = vtkBoxWidget::New();<br>
>> boxWidget->SetInteractor(iren);<br>
>> boxWidget->SetPlaceFactor(1.25);<br>
>><br>
>> boxWidget->SetProp3D(coneActor);<br>
>> boxWidget->PlaceWidget();<br>
>> vtkMyCallback *callback = vtkMyCallback::New();<br>
>> boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);<br>
>><br>
>> boxWidget->On();<br>
>><br>
>> iren->Initialize();<br>
>> iren->Start();<br>
>><br>
>> cone->Delete();<br>
>> coneMapper->Delete();<br>
>> coneActor->Delete();<br>
>> callback->Delete();<br>
>> boxWidget->Delete();<br>
>> ren1->Delete();<br>
>> renWin->Delete();<br>
>> iren->Delete();<br>
>> style->Delete();<br>
>> }<br>
>><br>
>> void setup(void) {<br>
>> glClearColor(0.2, 0.2, 0.2, 0.0);<br>
>><br>
>> glShadeModel(GL_FLAT);<br>
>> }<br>
>><br>
>> void reshape(GLFWwindow* window) {<br>
>> glViewport(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT);<br>
>> glMatrixMode(GL_PROJECTION);<br>
>> glLoadIdentity();<br>
>> glOrtho(0, SCREEN_WIDTH, 0, SCREEN_HEIGHT, 0, 1);<br>
>> glMatrixMode(GL_MODELVIEW);<br>
>> glLoadIdentity();<br>
>> }<br>
>><br>
>> static void key_cb(GLFWwindow* window, int key, int s, int action, int mods) {<br>
>> if (action != GLFW_PRESS) return;<br>
>><br>
>> switch (key) {<br>
>>   case GLFW_KEY_ESCAPE:<br>
>>     glfwSetWindowShouldClose(window, 1);<br>
>>     break;<br>
>> }<br>
>> }<br>
>> int main()<br>
>> {<br>
>> GLFWwindow* window;<br>
>><br>
>> glfwSetErrorCallback(error_cb);<br>
>><br>
>> if (!glfwInit()) exit(EXIT_FAILURE);<br>
>><br>
>> window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "demo1", NULL, NULL);<br>
>> if (!window) {<br>
>>   glfwTerminate();<br>
>>   exit(EXIT_FAILURE);<br>
>> }<br>
>><br>
>> glfwMakeContextCurrent(window);<br>
>> glfwSwapInterval(1);<br>
>><br>
>> glfwSetKeyCallback(window, key_cb);<br>
>><br>
>> setup();<br>
>><br>
>> while (!glfwWindowShouldClose(window)) {<br>
>>   reshape(window);<br>
>>   drawScene();<br>
>>   glfwSwapBuffers(window);<br>
>>   glfwWaitEvents();<br>
>> }<br>
>><br>
>> glfwTerminate();<br>
>> exit(EXIT_SUCCESS);<br>
>> return 0;<br>
>> }<br>
>><br>
>> The CMakeLists.txt<br>
>><br>
>> cmake_minimum_required(VERSION 3.4)<br>
>><br>
>> project(examples)<br>
>><br>
>> include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})<br>
>><br>
>> find_package(VTK REQUIRED)<br>
>> include(${VTK_USE_FILE})<br>
>><br>
>> #set(glfw3_DIR "/opt/glfw/lib/cmake/glfw3")<br>
>> find_package(glfw3 REQUIRED)<br>
>> find_package(OpenGL REQUIRED)<br>
>> find_package(GLEW REQUIRED)<br>
>><br>
>> include_directories(${OPENGL_INCLUDE_DIR})<br>
>> include_directories(${GLEW_INCLUDE_DIR})<br>
>> include_directories(${GLFW_INCLUDE_DIR})<br>
>><br>
>> if(CMAKE_HOST_SYSTEM MATCHES Linux)<br>
>> message("---> ${CMAKE_HOST_SYSTEM}")<br>
>> set(libs ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} glfw m)<br>
>> endif()<br>
>><br>
>> if(CMAKE_HOST_SYSTEM MATCHES Darwin)<br>
>> message("---> ${CMAKE_HOST_SYSTEM}")<br>
>> set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenGL")<br>
>> set(libs ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} glfw m)<br>
>> endif()<br>
>><br>
>> set(lib ${VTK_LIBRARIES} ${ITK_LIBRARIES})<br>
>><br>
>> set(EXAMPLES_SRCS<br>
>> demo1<br>
>> )<br>
>><br>
>> foreach(name ${EXAMPLES_SRCS})<br>
>> add_executable(${name} ${name}.cpp)<br>
>> target_link_libraries(${name} ${VTK_LIBRARIES} ${libs})<br>
>> #target_link_libraries(${name} ${VTK_LIBRARIES})<br>
>> endforeach()<br>
>><br>
>><br>
>><br>
>> Thanks!<br>
>> Abel<br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>> _______________________________________________<br>
>> Powered by <a href="http://www.kitware.com">www.kitware.com</a><br>
>><br>
>> Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a><br>
>><br>
>> Search the list archives at: <a href="http://markmail.org/search/?q=vtk-developers">http://markmail.org/search/?q=vtk-developers</a><br>
>><br>
>> Follow this link to subscribe/unsubscribe:<br>
>> <a href="http://public.kitware.com/mailman/listinfo/vtk-developers">http://public.kitware.com/mailman/listinfo/vtk-developers</a><br>
>><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> Powered by <a href="http://www.kitware.com">www.kitware.com</a><br>
><br>
> Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a><br>
><br>
> Search the list archives at: <a href="http://markmail.org/search/?q=vtk-developers">http://markmail.org/search/?q=vtk-developers</a><br>
><br>
> Follow this link to subscribe/unsubscribe:<br>
> <a href="http://public.kitware.com/mailman/listinfo/vtk-developers">http://public.kitware.com/mailman/listinfo/vtk-developers</a><br>
><br>
></p>