<div dir="ltr">Hi Anders,<div><br></div><div>You can create a separate "message-only" window to receive windows messages from the SpaceMouse. See the following MSDN page:</div><div><br></div><div><a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms632599(v=vs.85).aspx#message_only">https://msdn.microsoft.com/en-us/library/windows/desktop/ms632599(v=vs.85).aspx#message_only</a></div><div><br></div><div>I've integrated the 3DConnexion SpaceNavigator into our application using this method, along with other 3rd party APIs that require a window handle.</div><div><br></div><div>Cheers,</div><div>Farshid</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 11:01 AM, Anders Backman <span dir="ltr"><<a href="mailto:andersb@cs.umu.se" target="_blank">andersb@cs.umu.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">So there seem to be only a very few alternatives for integrating such a windows oriented toolkit as the 3DConnexion SpaceMouse...<div><br></div><div>My idea of being able to create a custom implementation of a GraphicsWindowWin32 would really open up for a better integration, albeit not a portable one...</div><div><br></div><div>Right now, using VRPN feels a bit strange in a native application (as it requires a server).</div><div><br></div><div>As far as I know there is no polling API for the 3DConnexion devices, no?</div><div><br></div><div>I see older emails about accessing it through Direct3D, and native USB...whereas listening to windows messages would be the "correct" way of integrating it.</div><div>I would have to hack into the context classes to do this...</div><div><br></div><div>Hm....</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>/Anders</div><div><br></div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 3:54 PM, Anders Backman <span dir="ltr"><<a href="mailto:andersb@cs.umu.se" target="_blank">andersb@cs.umu.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">That is certainly an important call yes.<div><br></div><div>I guess my problem is that these two calls are not interchangeable:</div><div><br></div><div>#if 1</div><div><span><div>    osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());</div></span><div>#else</div><div>    osg::ref_ptr<osgViewer::GraphicsWindowWin32> window = new osgViewer::GraphicsWindowWin32(traits);</div><div>    gc = window.get();</div></div><div>#endif</div><div><br></div><div>createGraphicsContext() will do a few more things which the creation of a osgViewer::GraphicsWindowWin32 does not. The question is really, is it possible to even consider this?</div><div>Is there a mechanism for creating a custom GraphicsWindowWin32 or is this path doomed to fail.</div><span><font color="#888888"><div><br></div><div>/Anders</div><div><br></div><div><br></div></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 3:31 PM, Trajce Nikolov NICK <span dir="ltr"><<a href="mailto:trajce.nikolov.nick@gmail.com" target="_blank">trajce.nikolov.nick@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Did you tried something like:<div><br></div><div>osgViewer::Viewer viewer;</div><div>viewer.getCamera()->setGraphicContext(gc);</div><div><br></div><div>?</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 2:52 PM, Anders Backman <span dir="ltr"><<a href="mailto:andersb@cs.umu.se" target="_blank">andersb@cs.umu.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I notice that there is a major difference between osgViewer::Viewer and osgViewer::CompositeViewer:<div><br></div><div>The following code:</div><div><br></div><div>osgViewer::CompositeViewer viewer;</div><div><br></div><div><div> osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;</div><div>    traits->x = 100;</div><div>    traits->y = 100;</div><div>    traits->width = 1000;</div><div>    traits->height = 800;</div><div>    traits->windowDecoration = true;</div><div>    traits->doubleBuffer = true;</div><div>    traits->sharedContext = 0;</div><span><div><br></div><div>    osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());</div></span></div><div><br></div><div><div>   osgViewer::View* view = new osgViewer::View;</div><div>    view->setName("View one");</div><div>    viewer.addView(view);</div><div><br></div><div>    view->setSceneData(scene.get());</div><div>    view->getCamera()->setViewport(new osg::Viewport(0, 0, traits->width / 2, traits->height / 2));<br></div><div>    view->getCamera()->setGraphicsContext(gc.get());</div></div><div><br></div><div>    viewer.realize(); // Context already created. No call to GraphicsWIndowWIn32::GraphicsWIndowWin32 will be called</div><div><br></div><div><br></div><div><br></div><div>If I replace osgViewerCompositeViewer with a osgViewer::Viewer and remove the creation of View, I get:</div><div><br></div><div><div>    viewer.realize(); // A new context is created. A new call to GraphicsWIndowWIn32::GraphicsWIndowWin32 will be called</div></div><div><br></div><div><br></div><div>So it seems that osgViewer::Viewer does not respect? the previously created GraphicsCOntext?</div><span><font color="#888888"><div><br></div><div>/Anders</div><div><br></div><div><br></div></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 2:24 PM, Anders Backman <span dir="ltr"><<a href="mailto:andersb@cs.umu.se" target="_blank">andersb@cs.umu.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">That is quite explicit. I was thinking about some method for intercepting events.<div>I tried fiddling with creating a custom GraphicsWindowWin32 class, but it turns out that this is explicitly created internally in:</div><div><br></div><div><div>osg::GraphicsContext* Win32WindowingSystem::createGraphicsContext( osg::GraphicsContext::Traits* traits )</div><div>{</div><div>...</div><div><div>        osg::ref_ptr<osgViewer::GraphicsWindowWin32> window = new GraphicsWindowWin32(traits);</div></div><div><br></div><div>}</div><div><br></div></div><div>So this does not seem to be the way to catch windows messages. </div><div>My idea was that I could register my instance of the GraphicsWindowWin32 to implement the virtual method:</div><div><br></div><div><div>LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )</div></div><div><br></div><div><br></div><div>Where I could catch all windows events.</div><div><br></div><div><br></div><div>Turns out that I do not have enough understanding when and where context etc is created.</div><div><br></div><div>It seems that a GraphicsWindowWIn32 is first created at the call to:</div><div><br></div><div><div>    osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());</div></div><div><br></div><div><br></div><div>And then at the call to:</div><div><br></div><div>viewer->realize();</div><div><br></div><div>will also result in a call to GraphicsContext::createGraphicsContext(Traits* traits), which in turn will create yet another GraphicsWindowWin32.</div><div><br></div><div>So there lies my problem, my call to viewer->realize() will override my first call to GraphicsContext::createGraphicsContext(traits.get());</div><div><br></div><div><br></div><div>Not sure how to get around this though. Ideas?</div><span><font color="#888888"><div><br></div><div>/Anders</div><div><br></div></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 11, 2015 at 5:05 PM, Trajce Nikolov NICK <span dir="ltr"><<a href="mailto:trajce.nikolov.nick@gmail.com" target="_blank">trajce.nikolov.nick@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Anders,<div><br></div><div>here is what I do for this on Windows</div><div><br></div><div><div>    while (!viewer->done())</div><div>    {</div><div><br></div><div>#if defined(_WIN32)</div><div>        MSG msg;</div><div>        if (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))</div><div>        {</div><div>            ::GetMessage(&msg, NULL, 0, 0);</div><div><br></div><div>            if (wins.size())</div><div>            {</div><div>                osgViewer::GraphicsHandleWin32 *hdl = dynamic_cast<osgViewer::GraphicsHandleWin32*>(<a href="http://wins.at" target="_blank">wins.at</a>(0));</div><div>                if(hdl)</div><div>                {</div><div>                    WNDPROC fWndProc = (WNDPROC)::GetWindowLongPtr(hdl->getHWND(), GWLP_WNDPROC);</div><div>                    if (fWndProc && hdl->getHWND())</div><div><span style="white-space:pre-wrap">                                     </span>{</div><div><span style="white-space:pre-wrap">                                                </span>::CallWindowProc(fWndProc,hdl->getHWND(),msg.message, msg.wParam, msg.lParam);</div><div><span style="white-space:pre-wrap">                                        </span>}</div><div>                }</div><div>            }</div><div>        }</div><div>#endif</div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Wed, Nov 11, 2015 at 4:21 PM, Anders Backman <span dir="ltr"><<a href="mailto:andersb@cs.umu.se" target="_blank">andersb@cs.umu.se</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr">Hi.<div><br></div><div>Trying the 3DConnexion SpaceNavigator with OSG. However I would like to stay away from VRPN and such dependencies...</div><div><br></div><div>I was wondering how to best intercept Windows messages from the GraphicsWindowWin32 class.</div><div><br></div><div>This class has a virtual method handleNativeWindowingEvent which I would like to override to catch custom messages from my device.</div><div><br></div><div>Would it be possible to implement a derived class and have that instantiated instead of the standard osgViewer::GraphicsWindowWin32 one?</div><div><br></div><div>Or is there a different method to listen to the  messages:</div><div><br></div><div>( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )<br></div><div><br></div><div>Thanks,</div><div>Anders</div><span><font color="#888888"><div><br></div><div><br clear="all"><div><br></div>-- <br><div>__________________________________________<br>Anders Backman, HPC2N<br>90187 Umeå University, Sweden<br><a href="mailto:anders@cs.umu.se" target="_blank">anders@cs.umu.se</a> <a href="http://www.hpc2n.umu.se/" target="_blank">http://www.hpc2n.umu.se</a><br>Cell: <a href="tel:%2B46-70-392%2064%2067" value="+46703926467" target="_blank">+46-70-392 64 67</a></div>
</div></font></span></div>
<br></div></div>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><span><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div>trajce nikolov nick<br></div>
</font></span></div>
<br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>__________________________________________<br>Anders Backman, HPC2N<br>90187 Umeå University, Sweden<br><a href="mailto:anders@cs.umu.se" target="_blank">anders@cs.umu.se</a> <a href="http://www.hpc2n.umu.se/" target="_blank">http://www.hpc2n.umu.se</a><br>Cell: <a href="tel:%2B46-70-392%2064%2067" value="+46703926467" target="_blank">+46-70-392 64 67</a></div>
</div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>__________________________________________<br>Anders Backman, HPC2N<br>90187 Umeå University, Sweden<br><a href="mailto:anders@cs.umu.se" target="_blank">anders@cs.umu.se</a> <a href="http://www.hpc2n.umu.se/" target="_blank">http://www.hpc2n.umu.se</a><br>Cell: <a href="tel:%2B46-70-392%2064%2067" value="+46703926467" target="_blank">+46-70-392 64 67</a></div>
</div>
</div></div><br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>trajce nikolov nick<br></div>
</div>
</div></div><br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>__________________________________________<br>Anders Backman, HPC2N<br>90187 Umeå University, Sweden<br><a href="mailto:anders@cs.umu.se" target="_blank">anders@cs.umu.se</a> <a href="http://www.hpc2n.umu.se/" target="_blank">http://www.hpc2n.umu.se</a><br>Cell: <a href="tel:%2B46-70-392%2064%2067" value="+46703926467" target="_blank">+46-70-392 64 67</a></div>
</div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>__________________________________________<br>Anders Backman, HPC2N<br>90187 Umeå University, Sweden<br><a href="mailto:anders@cs.umu.se" target="_blank">anders@cs.umu.se</a> <a href="http://www.hpc2n.umu.se/" target="_blank">http://www.hpc2n.umu.se</a><br>Cell: <a href="tel:%2B46-70-392%2064%2067" value="+46703926467" target="_blank">+46-70-392 64 67</a></div>
</div>
</div></div><br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br></div>