No one experienced that OSG consumes 3DConnexion messages until you move the window with the mouse, then auddenly messages related to the 3DConnexion Space Navigator starts coming in...?<br><br>On Friday, 13 November 2015, Anders Backman <<a href="mailto:andersb@cs.umu.se">andersb@cs.umu.se</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>It seems to me that OSG eats the 3DConnexion messages, until you move the window explicitly with the mouse.</div><div>The code below show that a console window works just fine, all messages are intercepted by the "message window".</div><div>However, when a osgViewer run loop is being used, the messages seem to be filtered.</div><div><br></div><div><div>I only get a Spaceball event when I move the window(!).</div><div><br></div><div><br></div><div>#include <osgViewer/Viewer></div><div>#include <osgViewer/api/Win32/GraphicsWindowWin32></div><div><br></div><div>#include <iostream></div><div><br></div><div><br></div><div>#pragma comment(lib, "siapp.lib")</div><div><br></div><div>#include"windows.h"</div><div>#include <iostream></div><div><br></div><div>#include "spwmacro.h"  /* Common macros used by SpaceWare functions. */</div><div>#include "si.h"        /* Required for any SpaceWare support within an app.*/</div><div>#include "siapp.h"     /* Required for siapp.lib symbols */</div><div><br></div><div>#pragma warning(disable:4700)</div><div><br></div><div>SiHdl       devHdl;       /* Handle to 3D Mouse Device */</div><div>SiOpenData oData;</div><div>WNDPROC wndProcOrig;</div><div><br></div><div>void ClearScreen() {</div><div>  for (unsigned i = 0; i<100; ++i) std::cout << std::endl;</div><div>}</div><div><br></div><div>int SbInit(HWND hwndC);</div><div>void  SbMotionEvent(SiSpwEvent *pEvent);</div><div>void  SbZeroEvent();</div><div>void  SbButtonPressEvent(int buttonnumber);</div><div>void  SbButtonReleaseEvent(int buttonnumber);</div><div>void  HandleDeviceChangeEvent(SiSpwEvent *pEvent);</div><div><br></div><div><br></div><div>LRESULT CALLBACK MyWndCBProc(</div><div>  HWND hwnd, UINT wm, WPARAM wParam, LPARAM lParam)</div><div>{</div><div>  SiSpwEvent     Event;    /* SpaceWare Event */</div><div>  SiGetEventData EData;    /* SpaceWare Event Data */</div><div><br></div><div>  /* initialize Window platform specific data for a call to SiGetEvent */</div><div>  SiGetEventWinInit(&EData, wm, wParam, lParam);</div><div><br></div><div>  /* check whether wm was a 3D mouse event and process it */</div><div>  //if (SiGetEvent (devHdl, SI_AVERAGE_EVENTS, &EData, &Event) == SI_IS_EVENT)</div><div>  SpwRetVal retval = SiGetEvent(devHdl, 0, &EData, &Event);</div><div><br></div><div>  if (retval == SI_IS_EVENT)</div><div>  {</div><div>    if (Event.type == SI_MOTION_EVENT)</div><div>    {</div><div>      SbMotionEvent(&Event);        /* process 3D mouse motion event */</div><div>    }</div><div>    else if (Event.type == SI_ZERO_EVENT)</div><div>    {</div><div>      SbZeroEvent();                /* process 3D mouse zero event */</div><div>    }</div><div>    else if (Event.type == SI_BUTTON_PRESS_EVENT)</div><div>    {</div><div>      SbButtonPressEvent(Event.u.hwButtonEvent.buttonNumber);  /* process button press event */</div><div>    }</div><div>    else if (Event.type == SI_BUTTON_RELEASE_EVENT)</div><div>    {</div><div>      SbButtonReleaseEvent(Event.u.hwButtonEvent.buttonNumber); /* process button release event */</div><div>    }</div><div>    else if (Event.type == SI_DEVICE_CHANGE_EVENT)</div><div>    {</div><div>      //SbHandleDeviceChangeEvent(&Event); /* process 3D mouse device change event */</div><div>    }</div><div>  }</div><div><br></div><div>  return DefWindowProc(hwnd, wm, wParam, lParam);</div><div>}</div><div><br></div><div>void mainx(void) {</div><div><br></div><div>  </div><div>  /* Implement message loop */</div><div>  int bRet;</div><div>  MSG msg;      /* incoming message to be evaluated */</div><div>  while (bRet = GetMessage(&msg, NULL, 0, 0))</div><div>  {</div><div>    if (bRet == -1){</div><div>      /* handle the error and possibly exit */</div><div>      return;</div><div>    }</div><div>    else{</div><div>      TranslateMessage(&msg);</div><div>      DispatchMessage(&msg);</div><div>    }</div><div>  }</div><div>}</div><div><br></div><div><br></div><div>int SbInit(HWND hwndC)</div><div>{</div><div>  int res;                             /* result of SiOpen, to be returned  */</div><div><br></div><div>  /*init the SpaceWare input library */</div><div>  if (SiInitialize() == SPW_DLL_LOAD_ERROR)  {</div><div>    std::cout << "Error: Could not load SiAppDll dll files" << std::endl;</div><div>  }</div><div>  else {</div><div>    //std::cout << "SiInitialize() done " << std::endl;</div><div>  }</div><div><br></div><div>  SiOpenWinInit(&oData, hwndC);    /* init Win. platform specific data  */</div><div><br></div><div>  /* open data, which will check for device type and return the device handle to be used by this function */</div><div>  if ((devHdl = SiOpen("AppSpaceMouse.exe", SI_ANY_DEVICE, SI_NO_MASK, SI_EVENT, &oData)) == NULL) {</div><div>    std::cout << "SiOpen error:" << std::endl;</div><div>    SiTerminate();  /* called to shut down the SpaceWare input library */</div><div>    std::cout << "SiTerminate()" << std::endl;</div><div>    res = 0;        /* could not open device */</div><div>    return res;</div><div>  }</div><div><br></div><div>  SiDeviceName pname;</div><div>  SiGetDeviceName(devHdl, &pname);</div><div>  //std::cout << "devicename =  " << <a href="http://pname.name" target="_blank">pname.name</a> << std::endl;</div><div><br></div><div>  SiSetUiMode(devHdl, SI_UI_ALL_CONTROLS); /* Config SoftButton Win Display */</div><div>  SiGrabDevice(devHdl, SPW_TRUE); /* PREVENTS OTHER APPLICATIONS FROM RECEIVING 3D CONNEXION DATA !!! */</div><div>  res = 1;        /* opened device succesfully */</div><div>  return res;</div><div>}</div><div><br></div><div>void  SbMotionEvent(SiSpwEvent *pEvent) {</div><div>  std::cout << "TX=" << pEvent->u.spwData.mData[SI_TX] << " TY=" << pEvent->u.spwData.mData[SI_TY] << " TZ=" << pEvent->u.spwData.mData[SI_TZ] << " RX=" << pEvent->u.spwData.mData[SI_RX] << " RY=" << pEvent->u.spwData.mData[SI_RY] << " RZ=" << pEvent->u.spwData.mData[SI_RZ] << std::endl;</div><div>}</div><div>void  SbZeroEvent() {</div><div>  std::cout << "zeroevent: " << std::endl;</div><div>}</div><div>void  SbButtonPressEvent(int buttonnumber) {</div><div>  std::cout << "Buttonnumber : " << buttonnumber << std::endl;</div><div>}</div><div>void  SbButtonReleaseEvent(int buttonnumber) {</div><div>  std::cout << "Buttonnumber : " << buttonnumber << std::endl;</div><div>}</div><div>void  HandleDeviceChangeEvent(SiSpwEvent *pEvent) {</div><div>  std::cout << "HandleDeviceChangeEvent : " << std::endl;</div><div><br></div><div>}</div><div><br></div><div><br></div><div>int main(int argc, char** argv)</div><div>{</div><div>  osg::ArgumentParser arguments(&argc, argv);</div><div>#if 1</div><div>  osgViewer::Viewer viewer(arguments);</div><div>#else</div><div>  osgViewer::CompositeViewer viewer(arguments);</div><div><br></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()->setName("Cam one");</div><div>  view->getCamera()->setViewport(new osg::Viewport(0, 0, traits->width / 2, traits->height / 2));</div><div>  view->getCamera()->setGraphicsContext(gc.get());</div><div><br></div><div>#endif</div><div><br></div><div>   </div><div><br></div><div>    viewer.realize();</div><div><br></div><div>    osgViewer::Viewer::Windows windows;</div><div>    viewer.getWindows(windows);</div><div><br></div><div>    osgViewer::GraphicsWindow* window = windows[0];</div><div>    window->setWindowRectangle(40, 40,1024,768);</div><div>    window->setWindowDecoration(true);</div><div><br></div><div><br></div><div><br></div><div><br></div><div>    /* Retrieve console application main window using GetConsoleWindow() */</div><div>    //HWND windowHandle = GetConsoleWindow(); /* Great!!  This function  cleverly "retrieves the window handle  used by the console associated with the calling process",   as msdn says */</div><div><br></div><div>    /* Register a custom window class */</div><div>    WNDCLASSEX wcex;</div><div>    wcex.cbSize = sizeof(WNDCLASSEX);</div><div>    wcex.style = CS_HREDRAW | CS_VREDRAW;</div><div>    wcex.lpfnWndProc = MyWndCBProc;</div><div>    wcex.cbClsExtra = 0;</div><div>    wcex.cbWndExtra = 0;</div><div>    wcex.hInstance = GetModuleHandle(NULL);</div><div>    wcex.hIcon = NULL;</div><div>    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);</div><div>    wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);</div><div>    wcex.lpszMenuName = NULL;</div><div>    wcex.lpszClassName = "MyWindowClassName";</div><div>    wcex.hIconSm = NULL;</div><div>    RegisterClassEx(&wcex);</div><div><br></div><div>    /* Create a hidden window owned by our process and parented to the console window */</div><div>    HWND hWndChild = CreateWindow(wcex.lpszClassName, "MyWindowTitle", WS_OVERLAPPEDWINDOW,</div><div>      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, wcex.hInstance, NULL);</div><div><br></div><div>    /* Initialise 3DxWare access / call to SbInit() */</div><div>    SbInit(hWndChild);</div><div><br></div><div>#if 0</div><div>     /* Implement message loop */</div><div>  int bRet;</div><div>  MSG msg;      /* incoming message to be evaluated */</div><div>  while (bRet = GetMessage(&msg, NULL, 0, 0))</div><div>  {</div><div>    if (bRet == -1){</div><div>      /* handle the error and possibly exit */</div><div>      return 1;</div><div>    }</div><div>    else{</div><div>      TranslateMessage(&msg);</div><div>      DispatchMessage(&msg);</div><div>    }</div><div>  }</div><div>  return 0;</div><div>#else</div><div>  return viewer.run();</div><div>#endif</div><div>}</div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 13, 2015 at 3:50 PM, Anders Backman <span dir="ltr"><<a href="javascript:_e(%7B%7D,'cvml','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">Ah thats great. A good step forward.<div>However, two minor questions:</div><div><br></div><div>1. Do you need the instance to the main osg window?</div><div>2. If not, how do you manage to get events from the device when you apply force on it?</div><div><br></div><div>I get it to read data (in my message callback) but only if a move/modify the osg window (Im using osgViewer::Viewer with just one window).</div><span><font color="#888888"><div><br></div><div>/A</div></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 12, 2015 at 10:53 PM, Farshid Lashkari <span dir="ltr"><<a href="javascript:_e(%7B%7D,'cvml','flashk@gmail.com');" target="_blank">flashk@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>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" target="_blank">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><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="javascript:_e(%7B%7D,'cvml','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><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 Thu, Nov 12, 2015 at 3:54 PM, Anders Backman <span dir="ltr"><<a href="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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></div>
</div></div><br>_______________________________________________<br>
osg-users mailing list<br>
<a href="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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="javascript:_e(%7B%7D,'cvml','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: +46-70-392 64 67</div>
</div>
</blockquote><br><br>-- <br>__________________________________________<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: +46-70-392 64 67<br>