void UDPKinectSkeleton::_transmitCurrentPoseOSC() { if (_udp.valid() && _skeleton.valid()) { ArConstRef<Joint> torso = _skeleton->findJoint("torso"); ArRef<MemoryBlock> memory = MemoryBlock::NEW(); ArRef<MemoryOStream> stream = MemoryOStream::NEW(memory,0); _writeStringOSC("/skeleton",stream); ArRef<MemoryBlock> memory2 = MemoryBlock::NEW(); ArRef<MemoryOStream> stream2 = MemoryOStream::NEW(memory2,0); _writeStringOSC("/skeleton_local",stream2); unsigned int nb = _skeleton->getNbJoints(); StlString typeString = ","; for (size_t i(0);i<nb;++i) { typeString+="sfff"; } _writeStringOSC(typeString,stream); _writeStringOSC(typeString,stream2); for (unsigned int i(0);i<nb;++i) { ArConstRef<Joint> joint = _skeleton->getJoint(i); const StlString jointName = joint->getName(); _writeStringOSC(jointName,stream); _writeStringOSC(jointName,stream2); double x,y,z; joint->getPosition(x,y,z); stream->writeFloat(x); stream->writeFloat(y); stream->writeFloat(z); if ( (torso.valid()) && (joint != torso) ) { torso->globalToLocalPosition(x,y,z); } stream2->writeFloat(x); stream2->writeFloat(y); stream2->writeFloat(z); } for (unsigned int i(0);i<_addresses.size();++i) { if (_addresses[i].OSC) { _udp->sendBytes(memory,0,memory->getSize(), _addresses[i].ip,_addresses[i].port); if (_addresses[i].port2 != 0) { _udp->sendBytes(memory2,0,memory2->getSize(), _addresses[i].ip,_addresses[i].port2); } } } } }