Exemplo n.º 1
0
void OscSendingDevice::sendUserDataContainer(const std::string& key, const osg::UserDataContainer* udc, bool asBundle, MsgIdType msg_id)
{
    if (asBundle) {
        beginBundle(msg_id);
    }
    
    OscSendingDeviceGetValueVisitor gvv(_oscStream);
    
    unsigned int num_objects = udc->getNumUserObjects();
    for(unsigned int i = 0; i < num_objects; ++i)
    {
        const osg::Object* o = udc->getUserObject(i);
        const osg::UserDataContainer* child_udc = dynamic_cast<const osg::UserDataContainer*>(o);
        if (child_udc)
        {
            std::string new_key = key + "/" + (child_udc->getName().empty() ? "user_data" : child_udc->getName());
            sendUserDataContainer(transliterateKey(key), child_udc, false, msg_id);
        }
        else if (const osg::ValueObject* vo = dynamic_cast<const osg::ValueObject*>(o))
        {
            _oscStream << osc::BeginMessage(std::string("/" + key + "/" + transliterateKey(vo->getName())).c_str());
            vo->get(gvv);
            _oscStream << osc::EndMessage;
        }
    }
    
    if (asBundle)
        _oscStream << osc::EndBundle;
    
}
Exemplo n.º 2
0
bool OscSendingDevice::sendEventImpl(const osgGA::Event &ea, MsgIdType msg_id)
{
    bool do_send(false);
    if (ea.getUserDataContainer())
    {
        std::string key = ea.getUserDataContainer()->getName();
        if (key.empty()) key = ea.getName();
        if (key.empty()) key = "user_data";
        
        sendUserDataContainer(transliterateKey(key), ea.getUserDataContainer(), true, msg_id);
        
        do_send = true;
    }
    
    if (do_send)
    {
        OSG_INFO << "OscDevice :: sending event per OSC " << std::endl;
        
        _transmitSocket.Send( _oscStream.Data(), _oscStream.Size() );
        _oscStream.Clear();
    }
    
    return do_send;
}
Exemplo n.º 3
0
bool OscSendingDevice::sendUIEventImpl(const osgGA::GUIEventAdapter &ea, MsgIdType msg_id)
{
    bool do_send(false);
    switch(ea.getEventType())
    {
        case osgGA::GUIEventAdapter::RESIZE:
            beginBundle(msg_id);
            _oscStream << osc::BeginMessage("/osgga/resize") << ea.getWindowX() << ea.getWindowY() << ea.getWindowWidth() << ea.getWindowHeight() << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::SCROLL:
            beginSendInputRange(ea, msg_id);
            _oscStream << osc::BeginMessage("/osgga/mouse/scroll") << ea.getScrollingMotion() << ea.getScrollingDeltaX() << ea.getScrollingDeltaY() << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::PEN_PRESSURE:
            beginBundle(msg_id);
            _oscStream
                << osc::BeginMessage("/osgga/pen/pressure")
                << ea.getPenPressure()
                << osc::EndMessage;
            _oscStream << osc::EndBundle;
            
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::PEN_ORIENTATION:
            beginBundle(msg_id);
            _oscStream
                << osc::BeginMessage("/osgga/pen/orientation")
                << ea.getPenRotation()
                << ea.getPenTiltX()
                << ea.getPenTiltY()
                << osc::EndMessage;
            do_send = true;
            _oscStream << osc::EndBundle;
            break;
            
        case osgGA::GUIEventAdapter::PEN_PROXIMITY_ENTER:
            beginBundle(msg_id);
            _oscStream
                << osc::BeginMessage("/osgga/pen/proximity/enter")
                << ea.getTabletPointerType()
                << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::PEN_PROXIMITY_LEAVE:
            beginBundle(msg_id);
            _oscStream
                << osc::BeginMessage("/osgga/pen/proximity/leave")
                << ea.getTabletPointerType()
                << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::PUSH:
            beginSendInputRange(ea, msg_id);
            if (!sendMultiTouchData(ea))
                _oscStream << osc::BeginMessage("/osgga/mouse/press") << ea.getX() << ea.getY() << getButtonNum(ea)  << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::RELEASE:
            beginSendInputRange(ea, msg_id);
            if (!sendMultiTouchData(ea))
                _oscStream << osc::BeginMessage("/osgga/mouse/release") << ea.getX() << ea.getY() << getButtonNum(ea)  << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::DOUBLECLICK:
            beginSendInputRange(ea, msg_id);
            if (!sendMultiTouchData(ea))
                _oscStream << osc::BeginMessage("/osgga/mouse/doublepress") << ea.getX() << ea.getY() << getButtonNum(ea) << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::MOVE:
        case osgGA::GUIEventAdapter::DRAG:
            beginSendInputRange(ea, msg_id);
            if (!sendMultiTouchData(ea))
                _oscStream << osc::BeginMessage("/osgga/mouse/motion") << ea.getX() << ea.getY() << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::KEYDOWN:
            beginBundle(msg_id);
            _oscStream << osc::BeginMessage("/osgga/key/press") << ea.getKey() << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::KEYUP:
            beginBundle(msg_id);
            _oscStream << osc::BeginMessage("/osgga/key/release") << ea.getKey() << osc::EndMessage;
            _oscStream << osc::EndBundle;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::USER:
            if (ea.getUserDataContainer())
            {
                std::string key = ea.getUserDataContainer()->getName();
                if (key.empty()) key = ea.getName();
                if (key.empty()) key = "user_data";
                
                sendUserDataContainer(transliterateKey(key), ea.getUserDataContainer(), true, msg_id);
                
                do_send = true;
            }
        
        default:
            break;
        
    }
    
    if (do_send)
    {
        _transmitSocket.Send( _oscStream.Data(), _oscStream.Size() );
        _oscStream.Clear();
    }
    
    return do_send;
}
Exemplo n.º 4
0
void OscSendingDevice::sendEvent(const osgGA::GUIEventAdapter &ea)
{
    bool do_send(false);
    switch(ea.getEventType())
    {
        case osgGA::GUIEventAdapter::RESIZE:
            sendInit(ea);
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::SCROLL:
            _oscStream << osc::BeginMessage("/osgga/mouse/scroll") << ea.getScrollingMotion() << ea.getScrollingDeltaX() << ea.getScrollingDeltaY() << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::PEN_PRESSURE:
            _oscStream
                << osc::BeginMessage("/osgga/pen/pressure")
                << ea.getPenPressure()
                << osc::EndMessage;
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::PEN_ORIENTATION:
            
             _oscStream
                << osc::BeginMessage("/osgga/pen/orientation")
                << ea.getPenRotation()
                << ea.getPenTiltX()
                << ea.getPenTiltY()
                << osc::EndMessage;
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::PEN_PROXIMITY_ENTER:
            _oscStream
                << osc::BeginMessage("/osgga/pen/proximity/enter")
                << ea.getTabletPointerType()
                << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::PEN_PROXIMITY_LEAVE:
            _oscStream
                << osc::BeginMessage("/osgga/pen/proximity/leave")
                << ea.getTabletPointerType()
                << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::PUSH:
            _oscStream << osc::BeginMessage("/osgga/mouse/press") << ea.getX() << ea.getY() << getButtonNum(ea)  << osc::EndMessage;
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::RELEASE:
            _oscStream << osc::BeginMessage("/osgga/mouse/release") << ea.getX() << ea.getY() << getButtonNum(ea)  << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::DOUBLECLICK:
            _oscStream << osc::BeginMessage("/osgga/mouse/doublepress") << ea.getX() << ea.getY() << getButtonNum(ea) << osc::EndMessage;
            do_send = true;
            break;
            
        case osgGA::GUIEventAdapter::MOVE:
            if (_firstRun)
            {
                _firstRun = false;
                sendInit(ea);
                do_send = true;
                break;
            }
            // break missing by intent;
            
        case osgGA::GUIEventAdapter::DRAG:
            _oscStream << osc::BeginMessage("/osgga/mouse/motion") << ea.getX() << ea.getY() << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::KEYDOWN:
            _oscStream << osc::BeginMessage("/osgga/key/press") << ea.getKey() << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::KEYUP:
            _oscStream << osc::BeginMessage("/osgga/key/release") << ea.getKey() << osc::EndMessage;
            do_send = true;
            break;
        
        case osgGA::GUIEventAdapter::USER:
            if (ea.getUserDataContainer())
            {
                std::string key = ea.getUserDataContainer()->getName();
                if (key.empty()) key = ea.getName();
                if (key.empty()) key = "user_data";
                
                sendUserDataContainer(transliterateKey(key), ea.getUserDataContainer(), true);
                
                do_send = true;
            }
        
        default:
            break;
        
    }
    if (do_send)
    {
        OSG_INFO << "OscDevice :: sending event per OSC " << std::endl;
        
        _transmitSocket.Send( _oscStream.Data(), _oscStream.Size() );
        _oscStream.Clear();
    }
}