[vtkusers] Rendering in the existing window!
Alex Malyushytskyy
alexmalvtk at gmail.com
Thu May 23 15:05:52 EDT 2013
>> As far as I can tell your code at every paint event creates pipeline
then deletes it.
And that does mean that there is nothing visually happens beside time
consuming operations which allocate memory, create child window, draw in
it, then delete everything what just was done and return to native pain
event .
On Thu, May 23, 2013 at 10:43 AM, Alex Malyushytskyy
<alexmalvtk at gmail.com>wrote:
> You will have more chances to get help if you post/reply to mailing list,
> so I am forwarding this to it.
> As for your problem, look at the code I recommended to look above.
> As far as I can tell your code at every paint event creates pipeline then
> deletes it.
>
>
> Alex
>
>
> On Wed, May 22, 2013 at 9:16 PM, Le Minh Nhat <nhatleminh10 at gmail.com>wrote:
>
>> Hi Alex,
>> Yes, I tried what u said adding the function SetParentId(handler).
>> However, when I ran the program, it was hang and nothing happened! Do u
>> have any idea? Is it because of the place I called the function
>> drawSphere(handler) in the WinProc?
>> Looking forward to hearing from you!
>> Thanks.
>>
>>
>>
>> On Thu, May 23, 2013 at 2:06 AM, Alex Malyushytskyy <alexmalvtk at gmail.com
>> > wrote:
>>
>>> try add
>>>
>>> renWin->SetParentId(handler);
>>>
>>> to
>>> drawSphere(HWND handler)
>>>
>>> vtk source has Win32Cone.cxx example which might be useful
>>>
>>> Alex
>>>
>>>
>>>
>>> On Wed, May 22, 2013 at 2:36 AM, Le Minh Nhat <nhatleminh10 at gmail.com>wrote:
>>>
>>>> Hi everyone,
>>>> I am quite new to Vtk, and I have tried to create a sphere using Vtk.
>>>> However, the rendering window is separated from my existing window. Here is
>>>> my source code:
>>>>
>>>> #include <windows.h>
>>>>
>>>> #include "vtkSphereSource.h"
>>>> #include "vtkPolyDataMapper.h"
>>>> #include "vtkProperty.h"
>>>> #include "vtkActor.h"
>>>> #include "vtkRenderWindow.h"
>>>> #include "vtkRenderer.h"
>>>> #include "vtkRenderWindowInteractor.h"
>>>> #include "vtkWin32OpenGLRenderWindow.h"
>>>> #include "vtkNew.h"
>>>> #include "vtkCamera.h"
>>>> //
>>>> //
>>>> void drawSphere(HWND handler)
>>>> {
>>>> // create sphere geometry
>>>> vtkSphereSource *sphere = vtkSphereSource::New();
>>>> sphere->SetRadius(1.0);
>>>> sphere->SetThetaResolution(18);
>>>> sphere->SetPhiResolution(18);
>>>>
>>>> // map to graphics library
>>>> vtkPolyDataMapper *map = vtkPolyDataMapper::New();
>>>> map->SetInput(sphere->GetOutput());
>>>>
>>>> // actor coordinates geometry, properties, transformation
>>>> vtkActor *aSphere = vtkActor::New();
>>>> aSphere->SetMapper(map);
>>>> aSphere->GetProperty()->SetColor(0,0,1); // sphere color blue
>>>>
>>>> // a renderer and render window
>>>> vtkRenderer *ren1 = vtkRenderer::New();
>>>> vtkRenderWindow *renWin = vtkRenderWindow::New();
>>>>
>>>> renWin->AddRenderer(ren1);
>>>>
>>>> // an interactor
>>>> vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>>>> iren->SetRenderWindow(renWin);
>>>>
>>>> // add the actor to the scene
>>>> ren1->AddActor(aSphere);
>>>> ren1->SetBackground(1,1,1); // Background color white
>>>>
>>>> // render an image (lights and cameras are created automatically)
>>>> //renWin->InitializeFromCurrentContext();
>>>> renWin->Render();
>>>>
>>>>
>>>> // begin mouse interaction
>>>> iren->Start();
>>>>
>>>> // release memory and return
>>>> sphere->Delete();
>>>> map->Delete();
>>>> aSphere->Delete();
>>>> ren1->Delete();
>>>> renWin->Delete();
>>>> iren->Delete();
>>>>
>>>> }
>>>>
>>>> LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
>>>> lParam)
>>>> {
>>>> switch(msg)
>>>> {
>>>>
>>>>
>>>> case WM_CLOSE:
>>>> DestroyWindow(hwnd);
>>>> break;
>>>>
>>>> case WM_DESTROY:
>>>> PostQuitMessage(0);
>>>> break;
>>>>
>>>> case WM_PAINT:
>>>> drawSphere(hwnd);
>>>> break;
>>>>
>>>> default:
>>>> return DefWindowProc(hwnd, msg, wParam, lParam);
>>>> }
>>>> return 0;
>>>> }
>>>>
>>>> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
>>>> lpCmdLine, int nCmdShow)
>>>> {
>>>> WNDCLASSEX wc;
>>>> HWND hwnd;
>>>> MSG Msg;
>>>>
>>>> wc.cbSize = sizeof(WNDCLASSEX);
>>>> wc.style = 0;
>>>> wc.lpfnWndProc = WndProc;
>>>> wc.cbClsExtra = 0;
>>>> wc.cbWndExtra = 0;
>>>> wc.hInstance = hInstance;
>>>> wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
>>>> wc.hCursor = LoadCursor(NULL, IDC_ARROW);
>>>> wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
>>>> wc.lpszMenuName = NULL;
>>>> wc.lpszClassName = "mySphere";
>>>> wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
>>>>
>>>> if(!RegisterClassEx(&wc))
>>>> {
>>>> MessageBox(NULL, "Window Registration Failed!", "Error!",
>>>> MB_ICONEXCLAMATION | MB_OK);
>>>> return 0;
>>>> }
>>>>
>>>> hwnd = CreateWindowEx(
>>>> WS_EX_CLIENTEDGE,
>>>> "mySphere",
>>>> "Sphere",
>>>> WS_OVERLAPPEDWINDOW,
>>>> CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
>>>> NULL, NULL, hInstance, NULL);
>>>>
>>>> if(hwnd == NULL)
>>>> {
>>>> MessageBox(NULL, "Window Creation Failed!", "Error!",
>>>> MB_ICONEXCLAMATION | MB_OK);
>>>> return 0;
>>>> }
>>>>
>>>> ShowWindow(hwnd, nCmdShow);
>>>> UpdateWindow(hwnd);
>>>>
>>>> while(GetMessage(&Msg, NULL, 0, 0) > 0)
>>>> {
>>>> TranslateMessage(&Msg);
>>>> DispatchMessage(&Msg);
>>>> }
>>>> return Msg.wParam;
>>>> }
>>>>
>>>> Anyone has any idea how to set the rendering window and the existing
>>>> window to be one! Any response will be appreciated.
>>>> Best regards,
>>>> Bent
>>>>
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130523/9ade912a/attachment.htm>
More information about the vtkusers
mailing list