├── .gitignore ├── README.md ├── addon_config.mk ├── addons.make ├── example ├── Makefile ├── Project.xcconfig ├── addons.make ├── bin │ └── data │ │ └── selena.otf ├── config.make ├── example.sln ├── example.vcxproj ├── example.vcxproj.filters ├── example.vcxproj.user ├── example.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── example Debug.xcscheme │ │ └── example Release.xcscheme ├── icon.rc ├── openFrameworks-Info.plist └── src │ ├── main.cpp │ ├── ofApp.cpp │ └── ofApp.h ├── kinect.jpg ├── ofxaddons_thumbnail.png ├── screenshot-mac.png ├── screenshot-win.png └── src ├── Body ├── Hand.cpp ├── Hand.h ├── Interpreter.cpp ├── Interpreter.h ├── Joint.cpp ├── Joint.h ├── Skeleton.cpp └── Skeleton.h ├── DataTransform ├── Logger.cpp ├── Logger.h ├── Mapper.cpp ├── Mapper.h ├── Parser.cpp └── Parser.h ├── Draw ├── BodyRenderer.cpp └── BodyRenderer.h ├── ofxKinectV2OSC.cpp └── ofxKinectV2OSC.h /.gitignore: -------------------------------------------------------------------------------- 1 | ######################### 2 | # openFrameworks patterns 3 | ######################### 4 | 5 | # build files 6 | openFrameworks.a 7 | openFrameworksDebug.a 8 | openFrameworksUniversal.a 9 | libs/openFrameworksCompiled/lib/*/* 10 | !libs/openFrameworksCompiled/lib/*/.gitkeep 11 | 12 | # apothecary 13 | scripts/apothecary/build 14 | 15 | # rule to avoid non-official addons going into git 16 | # see addons/.gitignore 17 | addons/* 18 | 19 | # rule to avoid non-official apps going into git 20 | # see apps/.gitignore 21 | apps/* 22 | 23 | # also, see examples/.gitignore 24 | 25 | ######################### 26 | # general 27 | ######################### 28 | 29 | [Bb]uild/ 30 | [Oo]bj/ 31 | *.o 32 | [Dd]ebug*/ 33 | [Rr]elease*/ 34 | *.mode* 35 | *.app/ 36 | *.pyc 37 | .svn/ 38 | *.log 39 | *.cpp.eep 40 | *.cpp.elf 41 | *.cpp.hex 42 | 43 | ######################### 44 | # IDE 45 | ######################### 46 | 47 | #Visual Studio 48 | 49 | /bin/ 50 | !/bin/data/ 51 | .vs 52 | *.vcxproj.user 53 | example/*.vcxproj.user 54 | 55 | # XCode 56 | *.pbxuser 57 | *.perspective 58 | *.perspectivev3 59 | *.mode1v3 60 | *.mode2v3 61 | # XCode 4 62 | xcuserdata 63 | *.xcworkspace 64 | 65 | # Code::Blocks 66 | *.depend 67 | *.layout 68 | 69 | # Visual Studio 70 | *.sdf 71 | *.opensdf 72 | *.suo 73 | *.pdb 74 | *.ilk 75 | *.aps 76 | *.exp 77 | *.exe 78 | *.lib 79 | *.dll 80 | ipch/ 81 | 82 | # Eclipse 83 | .metadata 84 | local.properties 85 | .externalToolBuilders 86 | 87 | ######################### 88 | # operating system 89 | ######################### 90 | 91 | # Linux 92 | *~ 93 | # KDE 94 | .directory 95 | .AppleDouble 96 | 97 | # OSX 98 | .DS_Store 99 | *.swp 100 | *~.nib 101 | # Thumbnails 102 | ._* 103 | 104 | # Windows 105 | # Windows image file caches 106 | Thumbs.db 107 | # Folder config file 108 | Desktop.ini 109 | 110 | # Android 111 | .csettings 112 | /libs/openFrameworksCompiled/project/android/paths.make 113 | 114 | ######################### 115 | # miscellaneous 116 | ######################### 117 | 118 | .mailmap -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ofxKinectV2-OSC 2 | =============== 3 | Easily get the [Kinect V2 sensor](http://www.microsoft.com/en-us/kinectforwindows/purchase/)'s realtime skeleton data into openFrameworks on a Mac. 4 | 5 | ![A Kinect V2 sensor](kinect.jpg) 6 | 7 | If you are used to using openFrameworks on a Mac, **and all you want is skeletal data**, this addon is for you. 8 | 9 | You still need Windows 10 | ---------------------- 11 | For the foreseeable future, the Kinect V2 sensor runs only on Windows using a USB3 port. There's no way around that, but what you can do is have a small, simple program on your Windows computer, which broadcasts to a Mac. 12 | 13 | Then you can just leave Windows running and get back to doing the rest of your coding on a Mac. The Windows and Mac computers will of course have to be on the same network. 14 | 15 | Instructions 16 | ------------ 17 | - On your Windows machine, download and run [KinectV2-OSC.exe](https://github.com/microcosm/KinectV2-OSC/releases/download/v0.1.0/KinectV2-OSC.zip) (based on [this repo](https://github.com/microcosm/KinectV2-OSC)) 18 | - Edit the file `ip.txt` to specify the IP addresses you want to broadcast to (or ignore this step if you are broadcasting back to the same machine on `127.0.0.1` which is the default) 19 | - That will broadcast the Kinect's skeletal data across the network from Windows 20 | - Over on your Mac, clone and run ofxKinectV2-OSC (this repo) 21 | - Once you fire up the example, you should see a skeleton that looks a bit like you! 22 | 23 | Screenshots 24 | ----------- 25 | This is what you'll see on your Windows machine: 26 | 27 | ![KinectV2-OSC running on Windows](screenshot-win.png) 28 | 29 | This is what you'll see on your Mac: 30 | 31 | ![ofxKinectV2-OSC running on Mac](screenshot-mac.png) 32 | 33 | See the red and green hands? That's showing detection of open or closed hand states. 34 | 35 | And the thin lines on the legs? That's where the bones are inferred (low confidence). 36 | 37 | Project dependencies 38 | -------------------- 39 | - [ofxOSC](https://github.com/openframeworks/openFrameworks/tree/master/addons/ofxOsc) to recieve messages - it's part of the openFrameworks core 40 | - Tested against [openFrameworks 0.10.0](http://openframeworks.cc/download/) -------------------------------------------------------------------------------- /addon_config.mk: -------------------------------------------------------------------------------- 1 | meta: 2 | ADDON_NAME = ofxKinectV2OSC 3 | ADDON_DESCRIPTION = Get Kinect V2 sensor data into openFrameworks over OSC 4 | ADDON_AUTHOR = Andrew McWilliams 5 | ADDON_TAGS = osc skeleton full-body interaction kinect kinect2 kinectv2 6 | ADDON_URL = http://github.com/microcosm/ofxKinectV2OSC 7 | 8 | common: 9 | ADDON_DEPENDENCIES = ofxOsc -------------------------------------------------------------------------------- /addons.make: -------------------------------------------------------------------------------- 1 | ofxOsc -------------------------------------------------------------------------------- /example/Makefile: -------------------------------------------------------------------------------- 1 | # Attempt to load a config.make file. 2 | # If none is found, project defaults in config.project.make will be used. 3 | ifneq ($(wildcard config.make),) 4 | include config.make 5 | endif 6 | 7 | # make sure the the OF_ROOT location is defined 8 | ifndef OF_ROOT 9 | OF_ROOT=../../.. 10 | endif 11 | 12 | # call the project makefile! 13 | include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk 14 | -------------------------------------------------------------------------------- /example/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_LDFLAGS = $(OF_CORE_LIBS) 17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 18 | -------------------------------------------------------------------------------- /example/addons.make: -------------------------------------------------------------------------------- 1 | ofxKinectV2-OSC 2 | ofxOsc 3 | -------------------------------------------------------------------------------- /example/bin/data/selena.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxKinectV2-OSC/3d9bce120262f006cc11ae834c0cb22e510c1de3/example/bin/data/selena.otf -------------------------------------------------------------------------------- /example/config.make: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # CONFIGURE PROJECT MAKEFILE (optional) 3 | # This file is where we make project specific configurations. 4 | ################################################################################ 5 | 6 | ################################################################################ 7 | # OF ROOT 8 | # The location of your root openFrameworks installation 9 | # (default) OF_ROOT = ../../.. 10 | ################################################################################ 11 | # OF_ROOT = ../../.. 12 | 13 | ################################################################################ 14 | # PROJECT ROOT 15 | # The location of the project - a starting place for searching for files 16 | # (default) PROJECT_ROOT = . (this directory) 17 | # 18 | ################################################################################ 19 | # PROJECT_ROOT = . 20 | 21 | ################################################################################ 22 | # PROJECT SPECIFIC CHECKS 23 | # This is a project defined section to create internal makefile flags to 24 | # conditionally enable or disable the addition of various features within 25 | # this makefile. For instance, if you want to make changes based on whether 26 | # GTK is installed, one might test that here and create a variable to check. 27 | ################################################################################ 28 | # None 29 | 30 | ################################################################################ 31 | # PROJECT EXTERNAL SOURCE PATHS 32 | # These are fully qualified paths that are not within the PROJECT_ROOT folder. 33 | # Like source folders in the PROJECT_ROOT, these paths are subject to 34 | # exlclusion via the PROJECT_EXLCUSIONS list. 35 | # 36 | # (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) 37 | # 38 | # Note: Leave a leading space when adding list items with the += operator 39 | ################################################################################ 40 | # PROJECT_EXTERNAL_SOURCE_PATHS = 41 | 42 | ################################################################################ 43 | # PROJECT EXCLUSIONS 44 | # These makefiles assume that all folders in your current project directory 45 | # and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations 46 | # to look for source code. The any folders or files that match any of the 47 | # items in the PROJECT_EXCLUSIONS list below will be ignored. 48 | # 49 | # Each item in the PROJECT_EXCLUSIONS list will be treated as a complete 50 | # string unless teh user adds a wildcard (%) operator to match subdirectories. 51 | # GNU make only allows one wildcard for matching. The second wildcard (%) is 52 | # treated literally. 53 | # 54 | # (default) PROJECT_EXCLUSIONS = (blank) 55 | # 56 | # Will automatically exclude the following: 57 | # 58 | # $(PROJECT_ROOT)/bin% 59 | # $(PROJECT_ROOT)/obj% 60 | # $(PROJECT_ROOT)/%.xcodeproj 61 | # 62 | # Note: Leave a leading space when adding list items with the += operator 63 | ################################################################################ 64 | # PROJECT_EXCLUSIONS = 65 | 66 | ################################################################################ 67 | # PROJECT LINKER FLAGS 68 | # These flags will be sent to the linker when compiling the executable. 69 | # 70 | # (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs 71 | # 72 | # Note: Leave a leading space when adding list items with the += operator 73 | ################################################################################ 74 | 75 | # Currently, shared libraries that are needed are copied to the 76 | # $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to 77 | # add a runtime path to search for those shared libraries, since they aren't 78 | # incorporated directly into the final executable application binary. 79 | # TODO: should this be a default setting? 80 | # PROJECT_LDFLAGS=-Wl,-rpath=./libs 81 | 82 | ################################################################################ 83 | # PROJECT DEFINES 84 | # Create a space-delimited list of DEFINES. The list will be converted into 85 | # CFLAGS with the "-D" flag later in the makefile. 86 | # 87 | # (default) PROJECT_DEFINES = (blank) 88 | # 89 | # Note: Leave a leading space when adding list items with the += operator 90 | ################################################################################ 91 | # PROJECT_DEFINES = 92 | 93 | ################################################################################ 94 | # PROJECT CFLAGS 95 | # This is a list of fully qualified CFLAGS required when compiling for this 96 | # project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS 97 | # defined in your platform specific core configuration files. These flags are 98 | # presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. 99 | # 100 | # (default) PROJECT_CFLAGS = (blank) 101 | # 102 | # Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in 103 | # your platform specific configuration file will be applied by default and 104 | # further flags here may not be needed. 105 | # 106 | # Note: Leave a leading space when adding list items with the += operator 107 | ################################################################################ 108 | # PROJECT_CFLAGS = 109 | 110 | ################################################################################ 111 | # PROJECT OPTIMIZATION CFLAGS 112 | # These are lists of CFLAGS that are target-specific. While any flags could 113 | # be conditionally added, they are usually limited to optimization flags. 114 | # These flags are added BEFORE the PROJECT_CFLAGS. 115 | # 116 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. 117 | # 118 | # (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) 119 | # 120 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. 121 | # 122 | # (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) 123 | # 124 | # Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the 125 | # PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration 126 | # file will be applied by default and further optimization flags here may not 127 | # be needed. 128 | # 129 | # Note: Leave a leading space when adding list items with the += operator 130 | ################################################################################ 131 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE = 132 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG = 133 | 134 | ################################################################################ 135 | # PROJECT COMPILERS 136 | # Custom compilers can be set for CC and CXX 137 | # (default) PROJECT_CXX = (blank) 138 | # (default) PROJECT_CC = (blank) 139 | # Note: Leave a leading space when adding list items with the += operator 140 | ################################################################################ 141 | # PROJECT_CXX = 142 | # PROJECT_CC = 143 | -------------------------------------------------------------------------------- /example/example.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio 15 3 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example.vcxproj", "{7FD42DF7-442E-479A-BA76-D0022F99702A}" 4 | EndProject 5 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openframeworksLib", "..\..\..\libs\openFrameworksCompiled\project\vs\openframeworksLib.vcxproj", "{5837595D-ACA9-485C-8E76-729040CE4B0B}" 6 | EndProject 7 | Global 8 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 9 | Debug|Win32 = Debug|Win32 10 | Debug|x64 = Debug|x64 11 | Release|Win32 = Release|Win32 12 | Release|x64 = Release|x64 13 | EndGlobalSection 14 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 15 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug|Win32.ActiveCfg = Debug|Win32 16 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug|Win32.Build.0 = Debug|Win32 17 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug|x64.ActiveCfg = Debug|x64 18 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug|x64.Build.0 = Debug|x64 19 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Release|Win32.ActiveCfg = Release|Win32 20 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Release|Win32.Build.0 = Release|Win32 21 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Release|x64.ActiveCfg = Release|x64 22 | {7FD42DF7-442E-479A-BA76-D0022F99702A}.Release|x64.Build.0 = Release|x64 23 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Debug|Win32.ActiveCfg = Debug|Win32 24 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Debug|Win32.Build.0 = Debug|Win32 25 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Debug|x64.ActiveCfg = Debug|x64 26 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Debug|x64.Build.0 = Debug|x64 27 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Release|Win32.ActiveCfg = Release|Win32 28 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Release|Win32.Build.0 = Release|Win32 29 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Release|x64.ActiveCfg = Release|x64 30 | {5837595D-ACA9-485C-8E76-729040CE4B0B}.Release|x64.Build.0 = Release|x64 31 | EndGlobalSection 32 | GlobalSection(SolutionProperties) = preSolution 33 | HideSolutionNode = FALSE 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /example/example.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Debug 10 | x64 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) 23 | $(LatestTargetPlatformVersion) 24 | $(WindowsTargetPlatformVersion) 25 | 26 | 27 | {7FD42DF7-442E-479A-BA76-D0022F99702A} 28 | Win32Proj 29 | example 30 | 31 | 32 | 33 | Application 34 | Unicode 35 | v141 36 | 37 | 38 | Application 39 | Unicode 40 | v141 41 | 42 | 43 | Application 44 | Unicode 45 | true 46 | v141 47 | 48 | 49 | Application 50 | Unicode 51 | true 52 | v141 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | bin\ 74 | obj\$(Configuration)\ 75 | $(ProjectName)_debug 76 | true 77 | true 78 | 79 | 80 | bin\ 81 | obj\$(Configuration)\ 82 | $(ProjectName)_debug 83 | true 84 | true 85 | 86 | 87 | bin\ 88 | obj\$(Configuration)\ 89 | false 90 | 91 | 92 | bin\ 93 | obj\$(Configuration)\ 94 | false 95 | 96 | 97 | 98 | Disabled 99 | EnableFastChecks 100 | %(PreprocessorDefinitions) 101 | MultiThreadedDebugDLL 102 | Level3 103 | %(AdditionalIncludeDirectories);src;..\..\..\addons\ofxKinectV2-OSC\src;..\..\..\addons\ofxKinectV2-OSC\src\Body;..\..\..\addons\ofxKinectV2-OSC\src\DataTransform;..\..\..\addons\ofxKinectV2-OSC\src\Draw;..\..\..\addons\ofxOsc\libs;..\..\..\addons\ofxOsc\libs\oscpack;..\..\..\addons\ofxOsc\libs\oscpack\src;..\..\..\addons\ofxOsc\libs\oscpack\src\ip;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\posix;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\win32;..\..\..\addons\ofxOsc\libs\oscpack\src\osc;..\..\..\addons\ofxOsc\src 104 | CompileAsCpp 105 | $(IntDir)/%(RelativeDir)/ 106 | OSC_HOST_LITTLE_ENDIAN 107 | 108 | 109 | true 110 | Console 111 | false 112 | %(AdditionalDependencies) 113 | %(AdditionalLibraryDirectories) 114 | 115 | 116 | 117 | 118 | 119 | Disabled 120 | EnableFastChecks 121 | %(PreprocessorDefinitions) 122 | MultiThreadedDebugDLL 123 | Level3 124 | %(AdditionalIncludeDirectories);src;..\..\..\addons\ofxKinectV2-OSC\src;..\..\..\addons\ofxKinectV2-OSC\src\Body;..\..\..\addons\ofxKinectV2-OSC\src\DataTransform;..\..\..\addons\ofxKinectV2-OSC\src\Draw;..\..\..\addons\ofxOsc\libs;..\..\..\addons\ofxOsc\libs\oscpack;..\..\..\addons\ofxOsc\libs\oscpack\src;..\..\..\addons\ofxOsc\libs\oscpack\src\ip;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\posix;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\win32;..\..\..\addons\ofxOsc\libs\oscpack\src\osc;..\..\..\addons\ofxOsc\src 125 | CompileAsCpp 126 | $(IntDir)/%(RelativeDir)/ 127 | true 128 | OSC_HOST_LITTLE_ENDIAN 129 | 130 | 131 | true 132 | Console 133 | false 134 | %(AdditionalDependencies) 135 | %(AdditionalLibraryDirectories) 136 | 137 | 138 | 139 | 140 | 141 | false 142 | %(PreprocessorDefinitions) 143 | MultiThreadedDLL 144 | Level3 145 | %(AdditionalIncludeDirectories);src;..\..\..\addons\ofxKinectV2-OSC\src;..\..\..\addons\ofxKinectV2-OSC\src\Body;..\..\..\addons\ofxKinectV2-OSC\src\DataTransform;..\..\..\addons\ofxKinectV2-OSC\src\Draw;..\..\..\addons\ofxOsc\libs;..\..\..\addons\ofxOsc\libs\oscpack;..\..\..\addons\ofxOsc\libs\oscpack\src;..\..\..\addons\ofxOsc\libs\oscpack\src\ip;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\posix;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\win32;..\..\..\addons\ofxOsc\libs\oscpack\src\osc;..\..\..\addons\ofxOsc\src 146 | CompileAsCpp 147 | $(IntDir)/%(RelativeDir)/ 148 | true 149 | OSC_HOST_LITTLE_ENDIAN 150 | 151 | 152 | false 153 | false 154 | Console 155 | true 156 | true 157 | false 158 | %(AdditionalDependencies) 159 | %(AdditionalLibraryDirectories) 160 | 161 | 162 | 163 | 164 | 165 | false 166 | %(PreprocessorDefinitions) 167 | MultiThreadedDLL 168 | Level3 169 | %(AdditionalIncludeDirectories);src;..\..\..\addons\ofxKinectV2-OSC\src;..\..\..\addons\ofxKinectV2-OSC\src\Body;..\..\..\addons\ofxKinectV2-OSC\src\DataTransform;..\..\..\addons\ofxKinectV2-OSC\src\Draw;..\..\..\addons\ofxOsc\libs;..\..\..\addons\ofxOsc\libs\oscpack;..\..\..\addons\ofxOsc\libs\oscpack\src;..\..\..\addons\ofxOsc\libs\oscpack\src\ip;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\posix;..\..\..\addons\ofxOsc\libs\oscpack\src\ip\win32;..\..\..\addons\ofxOsc\libs\oscpack\src\osc;..\..\..\addons\ofxOsc\src 170 | CompileAsCpp 171 | $(IntDir)/%(RelativeDir)/ 172 | OSC_HOST_LITTLE_ENDIAN 173 | 174 | 175 | false 176 | false 177 | Console 178 | true 179 | true 180 | false 181 | %(AdditionalDependencies) 182 | %(AdditionalLibraryDirectories) 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | {5837595d-aca9-485c-8e76-729040ce4b0b} 246 | 247 | 248 | 249 | 250 | /D_DEBUG %(AdditionalOptions) 251 | /D_DEBUG %(AdditionalOptions) 252 | $(OF_ROOT)\libs\openFrameworksCompiled\project\vs 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | -------------------------------------------------------------------------------- /example/example.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | src 6 | 7 | 8 | src 9 | 10 | 11 | src 12 | 13 | 14 | src 15 | 16 | 17 | addons\ofxKinectV2-OSC\src\Body 18 | 19 | 20 | addons\ofxKinectV2-OSC\src\Body 21 | 22 | 23 | addons\ofxKinectV2-OSC\src\Body 24 | 25 | 26 | addons\ofxKinectV2-OSC\src\Body 27 | 28 | 29 | addons\ofxKinectV2-OSC\src\DataTransform 30 | 31 | 32 | addons\ofxKinectV2-OSC\src\DataTransform 33 | 34 | 35 | addons\ofxKinectV2-OSC\src\DataTransform 36 | 37 | 38 | addons\ofxKinectV2-OSC\src\Draw 39 | 40 | 41 | addons\ofxKinectV2-OSC\src 42 | 43 | 44 | addons\ofxOsc\src 45 | 46 | 47 | addons\ofxOsc\src 48 | 49 | 50 | addons\ofxOsc\src 51 | 52 | 53 | addons\ofxOsc\src 54 | 55 | 56 | addons\ofxOsc\src 57 | 58 | 59 | addons\ofxOsc\libs\oscpack\src\ip 60 | 61 | 62 | addons\ofxOsc\libs\oscpack\src\ip\win32 63 | 64 | 65 | addons\ofxOsc\libs\oscpack\src\ip\win32 66 | 67 | 68 | addons\ofxOsc\libs\oscpack\src\osc 69 | 70 | 71 | addons\ofxOsc\libs\oscpack\src\osc 72 | 73 | 74 | addons\ofxOsc\libs\oscpack\src\osc 75 | 76 | 77 | addons\ofxOsc\libs\oscpack\src\osc 78 | 79 | 80 | 81 | 82 | {d8376475-7454-4a24-b08a-aac121d3ad6f} 83 | 84 | 85 | {71834F65-F3A9-211E-73B8-DC85} 86 | 87 | 88 | {F0D87036-4F02-FB7C-230B-2412} 89 | 90 | 91 | {E56E661B-BEA5-681A-A22E-55C4} 92 | 93 | 94 | {C7AFF248-8116-11EB-C3A1-6061} 95 | 96 | 97 | {7747AD9E-7338-37A4-6E0E-244B} 98 | 99 | 100 | {326DB2CF-57B9-0216-50F7-DF70} 101 | 102 | 103 | {D91DCA33-6E5D-4481-2AEC-9FBB} 104 | 105 | 106 | {B9DD339A-D93D-92A1-0A2F-4B41} 107 | 108 | 109 | {99ECA1D9-873F-4622-8FC0-FC7B} 110 | 111 | 112 | {D3A98534-1602-4FEF-57A6-6593} 113 | 114 | 115 | {BFB5BB47-98C8-BBCB-3066-1046} 116 | 117 | 118 | {5A029128-EB41-95C5-CBC0-CDED} 119 | 120 | 121 | {79DFDFE2-400B-8654-3675-01A3} 122 | 123 | 124 | {EDACB89C-9768-9551-4D41-B590} 125 | 126 | 127 | 128 | 129 | src 130 | 131 | 132 | src 133 | 134 | 135 | addons\ofxKinectV2-OSC\src\Body 136 | 137 | 138 | addons\ofxKinectV2-OSC\src\Body 139 | 140 | 141 | addons\ofxKinectV2-OSC\src\Body 142 | 143 | 144 | addons\ofxKinectV2-OSC\src\Body 145 | 146 | 147 | addons\ofxKinectV2-OSC\src\DataTransform 148 | 149 | 150 | addons\ofxKinectV2-OSC\src\DataTransform 151 | 152 | 153 | addons\ofxKinectV2-OSC\src\DataTransform 154 | 155 | 156 | addons\ofxKinectV2-OSC\src\Draw 157 | 158 | 159 | addons\ofxKinectV2-OSC\src 160 | 161 | 162 | addons\ofxOsc\src 163 | 164 | 165 | addons\ofxOsc\src 166 | 167 | 168 | addons\ofxOsc\src 169 | 170 | 171 | addons\ofxOsc\src 172 | 173 | 174 | addons\ofxOsc\src 175 | 176 | 177 | addons\ofxOsc\src 178 | 179 | 180 | addons\ofxOsc\src 181 | 182 | 183 | addons\ofxOsc\libs\oscpack\src\ip 184 | 185 | 186 | addons\ofxOsc\libs\oscpack\src\ip 187 | 188 | 189 | addons\ofxOsc\libs\oscpack\src\ip 190 | 191 | 192 | addons\ofxOsc\libs\oscpack\src\ip 193 | 194 | 195 | addons\ofxOsc\libs\oscpack\src\ip 196 | 197 | 198 | addons\ofxOsc\libs\oscpack\src\osc 199 | 200 | 201 | addons\ofxOsc\libs\oscpack\src\osc 202 | 203 | 204 | addons\ofxOsc\libs\oscpack\src\osc 205 | 206 | 207 | addons\ofxOsc\libs\oscpack\src\osc 208 | 209 | 210 | addons\ofxOsc\libs\oscpack\src\osc 211 | 212 | 213 | addons\ofxOsc\libs\oscpack\src\osc 214 | 215 | 216 | addons\ofxOsc\libs\oscpack\src\osc 217 | 218 | 219 | addons\ofxOsc\libs\oscpack\src\osc 220 | 221 | 222 | 223 | 224 | 225 | 226 | -------------------------------------------------------------------------------- /example/example.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | $(ProjectDir)/bin 5 | WindowsLocalDebugger 6 | 7 | 8 | $(ProjectDir)/bin 9 | WindowsLocalDebugger 10 | 11 | 12 | $(ProjectDir)/bin 13 | WindowsLocalDebugger 14 | 15 | 16 | $(ProjectDir)/bin 17 | WindowsLocalDebugger 18 | 19 | -------------------------------------------------------------------------------- /example/example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0546D1A38E13BD319CC9755B /* OscReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BF3AA0D4FAA89D0F8A0E545 /* OscReceivedElements.cpp */; }; 11 | 28090DEB5109115003E8F1C5 /* UdpSocketWin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5928AA323F5C2690B06C837D /* UdpSocketWin.cpp */; }; 12 | 4ADB88E2FB52E76A471065DE /* ofxOscParameterSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0AED834CE4DEC5260AF302A2 /* ofxOscParameterSync.cpp */; }; 13 | 510CAFE035E576A4E1502D52 /* UdpSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6DEF695B88BA5FAACEAA937 /* UdpSocket.cpp */; }; 14 | 5864AD82E20F15536D054EA3 /* ofxOscMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF49D76C45D5DB505A234880 /* ofxOscMessage.cpp */; }; 15 | 62545D179C94265CA1389D4A /* OscOutboundPacketStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 63A47AC60FFAFC3BF093EC0F /* OscOutboundPacketStream.cpp */; }; 16 | 640279EE111671BD026CB013 /* ofxOscReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2FAC65C491D4231379F3298 /* ofxOscReceiver.cpp */; }; 17 | 67FE4C7B15C2F0478C8126C2 /* NetworkingUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B361208CD4107E479F04E7B /* NetworkingUtils.cpp */; }; 18 | 72A929D3561B8232A182ABFC /* ofxOscBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65EEFA3DA3526E9CDD9C21F9 /* ofxOscBundle.cpp */; }; 19 | 84405CE319E1B7B0009B0D4F /* Hand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84405CD419E1B7B0009B0D4F /* Hand.cpp */; }; 20 | 84405CE419E1B7B0009B0D4F /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84405CD619E1B7B0009B0D4F /* Joint.cpp */; }; 21 | 84405CE519E1B7B0009B0D4F /* Skeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84405CD819E1B7B0009B0D4F /* Skeleton.cpp */; }; 22 | 84405CE619E1B7B0009B0D4F /* Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84405CDB19E1B7B0009B0D4F /* Logger.cpp */; }; 23 | 84405CE719E1B7B0009B0D4F /* Mapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84405CDD19E1B7B0009B0D4F /* Mapper.cpp */; }; 24 | 84405CE819E1B7B0009B0D4F /* Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84405CDF19E1B7B0009B0D4F /* Parser.cpp */; }; 25 | 84405CE919E1B7B0009B0D4F /* ofxKinectV2OSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84405CE119E1B7B0009B0D4F /* ofxKinectV2OSC.cpp */; }; 26 | 844D8B3319EF6617005EAC43 /* BodyRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 844D8B3119EF65D9005EAC43 /* BodyRenderer.cpp */; }; 27 | 84D5C4BD1A194B9B005E6ECE /* Interpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D5C4BB1A194B9B005E6ECE /* Interpreter.cpp */; }; 28 | 879A251454401BC0B6E4F238 /* OscTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9BFFBBF4CC43DEE890B3C3E /* OscTypes.cpp */; }; 29 | 8F5205AEF8861EF234F0651A /* ofxOscSender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81967292BFC87A0144BD32C6 /* ofxOscSender.cpp */; }; 30 | A29D8C96AE042ECEAA1BD4F3 /* NetworkingUtilsWin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A5B1FAD3F30C8065C396ACB /* NetworkingUtilsWin.cpp */; }; 31 | ADE367465D2A8EBAD4C7A8D9 /* IpEndpointName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADD194746185E2DA11468377 /* IpEndpointName.cpp */; }; 32 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; 33 | C4782ECC372420ACE0615B74 /* OscPrintReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC8881B3C8C0A1C45F042E7A /* OscPrintReceivedElements.cpp */; }; 34 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; 35 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; 36 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; 37 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; }; 38 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; }; 39 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; }; 40 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; }; 41 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; }; 42 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; }; 43 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; 44 | E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; 45 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; }; 46 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; }; 47 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; }; 48 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; 49 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; }; 50 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; }; 51 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; }; 52 | /* End PBXBuildFile section */ 53 | 54 | /* Begin PBXContainerItemProxy section */ 55 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { 56 | isa = PBXContainerItemProxy; 57 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 58 | proxyType = 2; 59 | remoteGlobalIDString = E4B27C1510CBEB8E00536013; 60 | remoteInfo = openFrameworks; 61 | }; 62 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { 63 | isa = PBXContainerItemProxy; 64 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 65 | proxyType = 1; 66 | remoteGlobalIDString = E4B27C1410CBEB8E00536013; 67 | remoteInfo = openFrameworks; 68 | }; 69 | /* End PBXContainerItemProxy section */ 70 | 71 | /* Begin PBXCopyFilesBuildPhase section */ 72 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = { 73 | isa = PBXCopyFilesBuildPhase; 74 | buildActionMask = 2147483647; 75 | dstPath = ""; 76 | dstSubfolderSpec = 10; 77 | files = ( 78 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */, 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | /* End PBXCopyFilesBuildPhase section */ 83 | 84 | /* Begin PBXFileReference section */ 85 | 00D6D32B84B099226431108C /* ofxOsc.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOsc.h; path = ../../../addons/ofxOsc/src/ofxOsc.h; sourceTree = SOURCE_ROOT; }; 86 | 029684CF678F70F6D3537A29 /* OscOutboundPacketStream.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscOutboundPacketStream.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscOutboundPacketStream.h; sourceTree = SOURCE_ROOT; }; 87 | 0AED834CE4DEC5260AF302A2 /* ofxOscParameterSync.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscParameterSync.cpp; path = ../../../addons/ofxOsc/src/ofxOscParameterSync.cpp; sourceTree = SOURCE_ROOT; }; 88 | 20F35AFADAF0068B067E713F /* OscReceivedElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscReceivedElements.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscReceivedElements.h; sourceTree = SOURCE_ROOT; }; 89 | 23640F57DF6C4BB6BFC5DA4C /* PacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = PacketListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/PacketListener.h; sourceTree = SOURCE_ROOT; }; 90 | 2A5B1FAD3F30C8065C396ACB /* NetworkingUtilsWin.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = NetworkingUtilsWin.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/win32/NetworkingUtilsWin.cpp; sourceTree = SOURCE_ROOT; }; 91 | 2FD4B0329909D3527F003494 /* UdpSocket.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = UdpSocket.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/UdpSocket.h; sourceTree = SOURCE_ROOT; }; 92 | 3B361208CD4107E479F04E7B /* NetworkingUtils.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = NetworkingUtils.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/posix/NetworkingUtils.cpp; sourceTree = SOURCE_ROOT; }; 93 | 444657A12E59D0ED86981498 /* TimerListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TimerListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/TimerListener.h; sourceTree = SOURCE_ROOT; }; 94 | 48974F980F51769171D0B2F5 /* IpEndpointName.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = IpEndpointName.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/IpEndpointName.h; sourceTree = SOURCE_ROOT; }; 95 | 4E95FB446A9C9C6F0DE12D75 /* OscPrintReceivedElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscPrintReceivedElements.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscPrintReceivedElements.h; sourceTree = SOURCE_ROOT; }; 96 | 5928AA323F5C2690B06C837D /* UdpSocketWin.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = UdpSocketWin.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/win32/UdpSocketWin.cpp; sourceTree = SOURCE_ROOT; }; 97 | 63A47AC60FFAFC3BF093EC0F /* OscOutboundPacketStream.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscOutboundPacketStream.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscOutboundPacketStream.cpp; sourceTree = SOURCE_ROOT; }; 98 | 65EEFA3DA3526E9CDD9C21F9 /* ofxOscBundle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscBundle.cpp; path = ../../../addons/ofxOsc/src/ofxOscBundle.cpp; sourceTree = SOURCE_ROOT; }; 99 | 6B65E6930994CC4B2D2B8B33 /* OscPacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscPacketListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscPacketListener.h; sourceTree = SOURCE_ROOT; }; 100 | 7689F8A0F3D0B7635A8C3104 /* ofxOscArg.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscArg.h; path = ../../../addons/ofxOsc/src/ofxOscArg.h; sourceTree = SOURCE_ROOT; }; 101 | 81967292BFC87A0144BD32C6 /* ofxOscSender.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscSender.cpp; path = ../../../addons/ofxOsc/src/ofxOscSender.cpp; sourceTree = SOURCE_ROOT; }; 102 | 84405CD419E1B7B0009B0D4F /* Hand.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Hand.cpp; sourceTree = ""; }; 103 | 84405CD519E1B7B0009B0D4F /* Hand.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Hand.h; sourceTree = ""; }; 104 | 84405CD619E1B7B0009B0D4F /* Joint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Joint.cpp; sourceTree = ""; }; 105 | 84405CD719E1B7B0009B0D4F /* Joint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Joint.h; sourceTree = ""; }; 106 | 84405CD819E1B7B0009B0D4F /* Skeleton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Skeleton.cpp; sourceTree = ""; }; 107 | 84405CD919E1B7B0009B0D4F /* Skeleton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Skeleton.h; sourceTree = ""; }; 108 | 84405CDB19E1B7B0009B0D4F /* Logger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Logger.cpp; sourceTree = ""; }; 109 | 84405CDC19E1B7B0009B0D4F /* Logger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Logger.h; sourceTree = ""; }; 110 | 84405CDD19E1B7B0009B0D4F /* Mapper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Mapper.cpp; sourceTree = ""; }; 111 | 84405CDE19E1B7B0009B0D4F /* Mapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mapper.h; sourceTree = ""; }; 112 | 84405CDF19E1B7B0009B0D4F /* Parser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Parser.cpp; sourceTree = ""; }; 113 | 84405CE019E1B7B0009B0D4F /* Parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Parser.h; sourceTree = ""; }; 114 | 84405CE119E1B7B0009B0D4F /* ofxKinectV2OSC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxKinectV2OSC.cpp; sourceTree = ""; }; 115 | 84405CE219E1B7B0009B0D4F /* ofxKinectV2OSC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxKinectV2OSC.h; sourceTree = ""; }; 116 | 844D8B3119EF65D9005EAC43 /* BodyRenderer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BodyRenderer.cpp; sourceTree = ""; }; 117 | 844D8B3219EF65D9005EAC43 /* BodyRenderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BodyRenderer.h; sourceTree = ""; }; 118 | 84D5C4BB1A194B9B005E6ECE /* Interpreter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Interpreter.cpp; sourceTree = ""; }; 119 | 84D5C4BC1A194B9B005E6ECE /* Interpreter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Interpreter.h; sourceTree = ""; }; 120 | 8B30E93FD3D3475EED522A0E /* ofxOscBundle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscBundle.h; path = ../../../addons/ofxOsc/src/ofxOscBundle.h; sourceTree = SOURCE_ROOT; }; 121 | 8C75AFC8774A62495DD53464 /* ofxOscReceiver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscReceiver.h; path = ../../../addons/ofxOsc/src/ofxOscReceiver.h; sourceTree = SOURCE_ROOT; }; 122 | 9BF3AA0D4FAA89D0F8A0E545 /* OscReceivedElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscReceivedElements.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscReceivedElements.cpp; sourceTree = SOURCE_ROOT; }; 123 | 9F7986DC4EB05E75FCE2C777 /* ofxOscSender.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscSender.h; path = ../../../addons/ofxOsc/src/ofxOscSender.h; sourceTree = SOURCE_ROOT; }; 124 | A2AAA8CA403479E6FCDF920E /* OscHostEndianness.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscHostEndianness.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscHostEndianness.h; sourceTree = SOURCE_ROOT; }; 125 | ADD194746185E2DA11468377 /* IpEndpointName.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = IpEndpointName.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/IpEndpointName.cpp; sourceTree = SOURCE_ROOT; }; 126 | AE335EB4709BFD4671EEAC84 /* MessageMappingOscPacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MessageMappingOscPacketListener.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/MessageMappingOscPacketListener.h; sourceTree = SOURCE_ROOT; }; 127 | B31C608870ECEB2490A93736 /* ofxOscParameterSync.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscParameterSync.h; path = ../../../addons/ofxOsc/src/ofxOscParameterSync.h; sourceTree = SOURCE_ROOT; }; 128 | BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; 129 | BC8881B3C8C0A1C45F042E7A /* OscPrintReceivedElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscPrintReceivedElements.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscPrintReceivedElements.cpp; sourceTree = SOURCE_ROOT; }; 130 | C2FAC65C491D4231379F3298 /* ofxOscReceiver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscReceiver.cpp; path = ../../../addons/ofxOsc/src/ofxOscReceiver.cpp; sourceTree = SOURCE_ROOT; }; 131 | C58862C6D212C8E8A83810F4 /* ofxOscMessage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscMessage.h; path = ../../../addons/ofxOsc/src/ofxOscMessage.h; sourceTree = SOURCE_ROOT; }; 132 | C6937888E126BADC8777423B /* OscTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscTypes.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscTypes.h; sourceTree = SOURCE_ROOT; }; 133 | D9BFFBBF4CC43DEE890B3C3E /* OscTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscTypes.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscTypes.cpp; sourceTree = SOURCE_ROOT; }; 134 | DF49D76C45D5DB505A234880 /* ofxOscMessage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscMessage.cpp; path = ../../../addons/ofxOsc/src/ofxOscMessage.cpp; sourceTree = SOURCE_ROOT; }; 135 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; 136 | E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; 137 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; 138 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 139 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; 140 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 141 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 142 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; 143 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; 144 | E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = exampleDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; 145 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; 146 | E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; 147 | E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; 148 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; 149 | E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 150 | E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 151 | E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 152 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; 153 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; 154 | E6DEF695B88BA5FAACEAA937 /* UdpSocket.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = UdpSocket.cpp; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/posix/UdpSocket.cpp; sourceTree = SOURCE_ROOT; }; 155 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; 156 | E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; 157 | E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; }; 158 | F4F5B6B8BA2BD52C646ED908 /* OscException.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscException.h; path = ../../../addons/ofxOsc/libs/oscpack/src/osc/OscException.h; sourceTree = SOURCE_ROOT; }; 159 | F7FBC56859535E597B24BB91 /* NetworkingUtils.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = NetworkingUtils.h; path = ../../../addons/ofxOsc/libs/oscpack/src/ip/NetworkingUtils.h; sourceTree = SOURCE_ROOT; }; 160 | /* End PBXFileReference section */ 161 | 162 | /* Begin PBXFrameworksBuildPhase section */ 163 | E4B69B590A3A1756003C02F2 /* Frameworks */ = { 164 | isa = PBXFrameworksBuildPhase; 165 | buildActionMask = 2147483647; 166 | files = ( 167 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */, 168 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */, 169 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */, 170 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, 171 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */, 172 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */, 173 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */, 174 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */, 175 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */, 176 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */, 177 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */, 178 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */, 179 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */, 180 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */, 181 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */, 182 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */, 183 | ); 184 | runOnlyForDeploymentPostprocessing = 0; 185 | }; 186 | /* End PBXFrameworksBuildPhase section */ 187 | 188 | /* Begin PBXGroup section */ 189 | 30CB364908817057B430D528 /* osc */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | AE335EB4709BFD4671EEAC84 /* MessageMappingOscPacketListener.h */, 193 | F4F5B6B8BA2BD52C646ED908 /* OscException.h */, 194 | A2AAA8CA403479E6FCDF920E /* OscHostEndianness.h */, 195 | 63A47AC60FFAFC3BF093EC0F /* OscOutboundPacketStream.cpp */, 196 | 029684CF678F70F6D3537A29 /* OscOutboundPacketStream.h */, 197 | 6B65E6930994CC4B2D2B8B33 /* OscPacketListener.h */, 198 | BC8881B3C8C0A1C45F042E7A /* OscPrintReceivedElements.cpp */, 199 | 4E95FB446A9C9C6F0DE12D75 /* OscPrintReceivedElements.h */, 200 | 9BF3AA0D4FAA89D0F8A0E545 /* OscReceivedElements.cpp */, 201 | 20F35AFADAF0068B067E713F /* OscReceivedElements.h */, 202 | D9BFFBBF4CC43DEE890B3C3E /* OscTypes.cpp */, 203 | C6937888E126BADC8777423B /* OscTypes.h */, 204 | ); 205 | name = osc; 206 | sourceTree = ""; 207 | }; 208 | 38871A5825686AE018EC2BF0 /* libs */ = { 209 | isa = PBXGroup; 210 | children = ( 211 | 86D2677079A3AF4A5A88E29A /* oscpack */, 212 | ); 213 | name = libs; 214 | sourceTree = ""; 215 | }; 216 | 641362CA659FAFEE4E81001B /* posix */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | 3B361208CD4107E479F04E7B /* NetworkingUtils.cpp */, 220 | E6DEF695B88BA5FAACEAA937 /* UdpSocket.cpp */, 221 | ); 222 | name = posix; 223 | sourceTree = ""; 224 | }; 225 | 84405CD119E1B7B0009B0D4F /* ofxKinectV2-OSC */ = { 226 | isa = PBXGroup; 227 | children = ( 228 | 84405CD219E1B7B0009B0D4F /* src */, 229 | ); 230 | name = "ofxKinectV2-OSC"; 231 | sourceTree = ""; 232 | }; 233 | 84405CD219E1B7B0009B0D4F /* src */ = { 234 | isa = PBXGroup; 235 | children = ( 236 | 84405CD319E1B7B0009B0D4F /* Body */, 237 | 84405CDA19E1B7B0009B0D4F /* DataTransform */, 238 | 844D8B3019EF65D9005EAC43 /* Draw */, 239 | 84405CE119E1B7B0009B0D4F /* ofxKinectV2OSC.cpp */, 240 | 84405CE219E1B7B0009B0D4F /* ofxKinectV2OSC.h */, 241 | ); 242 | name = src; 243 | path = ../src; 244 | sourceTree = ""; 245 | }; 246 | 84405CD319E1B7B0009B0D4F /* Body */ = { 247 | isa = PBXGroup; 248 | children = ( 249 | 84405CD419E1B7B0009B0D4F /* Hand.cpp */, 250 | 84405CD519E1B7B0009B0D4F /* Hand.h */, 251 | 84405CD619E1B7B0009B0D4F /* Joint.cpp */, 252 | 84405CD719E1B7B0009B0D4F /* Joint.h */, 253 | 84405CD819E1B7B0009B0D4F /* Skeleton.cpp */, 254 | 84405CD919E1B7B0009B0D4F /* Skeleton.h */, 255 | 84D5C4BB1A194B9B005E6ECE /* Interpreter.cpp */, 256 | 84D5C4BC1A194B9B005E6ECE /* Interpreter.h */, 257 | ); 258 | path = Body; 259 | sourceTree = ""; 260 | }; 261 | 84405CDA19E1B7B0009B0D4F /* DataTransform */ = { 262 | isa = PBXGroup; 263 | children = ( 264 | 84405CDB19E1B7B0009B0D4F /* Logger.cpp */, 265 | 84405CDC19E1B7B0009B0D4F /* Logger.h */, 266 | 84405CDD19E1B7B0009B0D4F /* Mapper.cpp */, 267 | 84405CDE19E1B7B0009B0D4F /* Mapper.h */, 268 | 84405CDF19E1B7B0009B0D4F /* Parser.cpp */, 269 | 84405CE019E1B7B0009B0D4F /* Parser.h */, 270 | ); 271 | path = DataTransform; 272 | sourceTree = ""; 273 | }; 274 | 844D8B3019EF65D9005EAC43 /* Draw */ = { 275 | isa = PBXGroup; 276 | children = ( 277 | 844D8B3119EF65D9005EAC43 /* BodyRenderer.cpp */, 278 | 844D8B3219EF65D9005EAC43 /* BodyRenderer.h */, 279 | ); 280 | path = Draw; 281 | sourceTree = ""; 282 | }; 283 | 86D2677079A3AF4A5A88E29A /* oscpack */ = { 284 | isa = PBXGroup; 285 | children = ( 286 | D27B2221A225CA523C019676 /* src */, 287 | ); 288 | name = oscpack; 289 | sourceTree = ""; 290 | }; 291 | BA6760AC87647DD61A92BD41 /* win32 */ = { 292 | isa = PBXGroup; 293 | children = ( 294 | 2A5B1FAD3F30C8065C396ACB /* NetworkingUtilsWin.cpp */, 295 | 5928AA323F5C2690B06C837D /* UdpSocketWin.cpp */, 296 | ); 297 | name = win32; 298 | sourceTree = ""; 299 | }; 300 | BB4B014C10F69532006C3DED /* addons */ = { 301 | isa = PBXGroup; 302 | children = ( 303 | 84405CD119E1B7B0009B0D4F /* ofxKinectV2-OSC */, 304 | E6053AB7FEC63D5F83825B88 /* ofxOsc */, 305 | ); 306 | name = addons; 307 | sourceTree = ""; 308 | }; 309 | BBAB23C913894ECA00AA2426 /* system frameworks */ = { 310 | isa = PBXGroup; 311 | children = ( 312 | E7F985F515E0DE99003869B5 /* Accelerate.framework */, 313 | E4C2424410CC5A17004149E2 /* AppKit.framework */, 314 | E4C2424510CC5A17004149E2 /* Cocoa.framework */, 315 | E4C2424610CC5A17004149E2 /* IOKit.framework */, 316 | E45BE9710E8CC7DD009D7055 /* AGL.framework */, 317 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */, 318 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */, 319 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */, 320 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */, 321 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */, 322 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */, 323 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */, 324 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */, 325 | E7E077E715D3B6510020DFD4 /* QTKit.framework */, 326 | ); 327 | name = "system frameworks"; 328 | sourceTree = ""; 329 | }; 330 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = { 331 | isa = PBXGroup; 332 | children = ( 333 | BBAB23BE13894E4700AA2426 /* GLUT.framework */, 334 | ); 335 | name = "3rd party frameworks"; 336 | sourceTree = ""; 337 | }; 338 | BD2F1A9F8D0C05EDB29122D0 /* src */ = { 339 | isa = PBXGroup; 340 | children = ( 341 | 00D6D32B84B099226431108C /* ofxOsc.h */, 342 | 7689F8A0F3D0B7635A8C3104 /* ofxOscArg.h */, 343 | 65EEFA3DA3526E9CDD9C21F9 /* ofxOscBundle.cpp */, 344 | 8B30E93FD3D3475EED522A0E /* ofxOscBundle.h */, 345 | DF49D76C45D5DB505A234880 /* ofxOscMessage.cpp */, 346 | C58862C6D212C8E8A83810F4 /* ofxOscMessage.h */, 347 | 0AED834CE4DEC5260AF302A2 /* ofxOscParameterSync.cpp */, 348 | B31C608870ECEB2490A93736 /* ofxOscParameterSync.h */, 349 | C2FAC65C491D4231379F3298 /* ofxOscReceiver.cpp */, 350 | 8C75AFC8774A62495DD53464 /* ofxOscReceiver.h */, 351 | 81967292BFC87A0144BD32C6 /* ofxOscSender.cpp */, 352 | 9F7986DC4EB05E75FCE2C777 /* ofxOscSender.h */, 353 | ); 354 | name = src; 355 | sourceTree = ""; 356 | }; 357 | D27B2221A225CA523C019676 /* src */ = { 358 | isa = PBXGroup; 359 | children = ( 360 | FF8CDF57858E9B94E3237115 /* ip */, 361 | 30CB364908817057B430D528 /* osc */, 362 | ); 363 | name = src; 364 | sourceTree = ""; 365 | }; 366 | E4328144138ABC890047C5CB /* Products */ = { 367 | isa = PBXGroup; 368 | children = ( 369 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */, 370 | ); 371 | name = Products; 372 | sourceTree = ""; 373 | }; 374 | E45BE5980E8CC70C009D7055 /* frameworks */ = { 375 | isa = PBXGroup; 376 | children = ( 377 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */, 378 | BBAB23C913894ECA00AA2426 /* system frameworks */, 379 | ); 380 | name = frameworks; 381 | sourceTree = ""; 382 | }; 383 | E4B69B4A0A3A1720003C02F2 = { 384 | isa = PBXGroup; 385 | children = ( 386 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, 387 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, 388 | E4B69E1C0A3A1BDC003C02F2 /* src */, 389 | E4EEC9E9138DF44700A80321 /* openFrameworks */, 390 | BB4B014C10F69532006C3DED /* addons */, 391 | E45BE5980E8CC70C009D7055 /* frameworks */, 392 | E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */, 393 | ); 394 | sourceTree = ""; 395 | }; 396 | E4B69E1C0A3A1BDC003C02F2 /* src */ = { 397 | isa = PBXGroup; 398 | children = ( 399 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, 400 | E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, 401 | E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, 402 | ); 403 | path = src; 404 | sourceTree = SOURCE_ROOT; 405 | }; 406 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = { 407 | isa = PBXGroup; 408 | children = ( 409 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, 410 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, 411 | ); 412 | name = openFrameworks; 413 | sourceTree = ""; 414 | }; 415 | E6053AB7FEC63D5F83825B88 /* ofxOsc */ = { 416 | isa = PBXGroup; 417 | children = ( 418 | BD2F1A9F8D0C05EDB29122D0 /* src */, 419 | 38871A5825686AE018EC2BF0 /* libs */, 420 | ); 421 | name = ofxOsc; 422 | sourceTree = ""; 423 | }; 424 | FF8CDF57858E9B94E3237115 /* ip */ = { 425 | isa = PBXGroup; 426 | children = ( 427 | ADD194746185E2DA11468377 /* IpEndpointName.cpp */, 428 | 48974F980F51769171D0B2F5 /* IpEndpointName.h */, 429 | F7FBC56859535E597B24BB91 /* NetworkingUtils.h */, 430 | 23640F57DF6C4BB6BFC5DA4C /* PacketListener.h */, 431 | 641362CA659FAFEE4E81001B /* posix */, 432 | 444657A12E59D0ED86981498 /* TimerListener.h */, 433 | 2FD4B0329909D3527F003494 /* UdpSocket.h */, 434 | BA6760AC87647DD61A92BD41 /* win32 */, 435 | ); 436 | name = ip; 437 | sourceTree = ""; 438 | }; 439 | /* End PBXGroup section */ 440 | 441 | /* Begin PBXNativeTarget section */ 442 | E4B69B5A0A3A1756003C02F2 /* example */ = { 443 | isa = PBXNativeTarget; 444 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "example" */; 445 | buildPhases = ( 446 | E4B69B580A3A1756003C02F2 /* Sources */, 447 | E4B69B590A3A1756003C02F2 /* Frameworks */, 448 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, 449 | E4C2427710CC5ABF004149E2 /* CopyFiles */, 450 | ); 451 | buildRules = ( 452 | ); 453 | dependencies = ( 454 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, 455 | ); 456 | name = example; 457 | productName = myOFApp; 458 | productReference = E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */; 459 | productType = "com.apple.product-type.application"; 460 | }; 461 | /* End PBXNativeTarget section */ 462 | 463 | /* Begin PBXProject section */ 464 | E4B69B4C0A3A1720003C02F2 /* Project object */ = { 465 | isa = PBXProject; 466 | attributes = { 467 | LastUpgradeCheck = 0460; 468 | }; 469 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example" */; 470 | compatibilityVersion = "Xcode 3.2"; 471 | developmentRegion = English; 472 | hasScannedForEncodings = 0; 473 | knownRegions = ( 474 | English, 475 | Japanese, 476 | French, 477 | German, 478 | ); 479 | mainGroup = E4B69B4A0A3A1720003C02F2; 480 | productRefGroup = E4B69B4A0A3A1720003C02F2; 481 | projectDirPath = ""; 482 | projectReferences = ( 483 | { 484 | ProductGroup = E4328144138ABC890047C5CB /* Products */; 485 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 486 | }, 487 | ); 488 | projectRoot = ""; 489 | targets = ( 490 | E4B69B5A0A3A1756003C02F2 /* example */, 491 | ); 492 | }; 493 | /* End PBXProject section */ 494 | 495 | /* Begin PBXReferenceProxy section */ 496 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { 497 | isa = PBXReferenceProxy; 498 | fileType = archive.ar; 499 | path = openFrameworksDebug.a; 500 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; 501 | sourceTree = BUILT_PRODUCTS_DIR; 502 | }; 503 | /* End PBXReferenceProxy section */ 504 | 505 | /* Begin PBXShellScriptBuildPhase section */ 506 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { 507 | isa = PBXShellScriptBuildPhase; 508 | buildActionMask = 2147483647; 509 | files = ( 510 | ); 511 | inputPaths = ( 512 | ); 513 | outputPaths = ( 514 | ); 515 | runOnlyForDeploymentPostprocessing = 0; 516 | shellPath = /bin/sh; 517 | shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\ncp -f \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n"; 518 | }; 519 | /* End PBXShellScriptBuildPhase section */ 520 | 521 | /* Begin PBXSourcesBuildPhase section */ 522 | E4B69B580A3A1756003C02F2 /* Sources */ = { 523 | isa = PBXSourcesBuildPhase; 524 | buildActionMask = 2147483647; 525 | files = ( 526 | 844D8B3319EF6617005EAC43 /* BodyRenderer.cpp in Sources */, 527 | 84405CE319E1B7B0009B0D4F /* Hand.cpp in Sources */, 528 | 84405CE619E1B7B0009B0D4F /* Logger.cpp in Sources */, 529 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, 530 | E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, 531 | 72A929D3561B8232A182ABFC /* ofxOscBundle.cpp in Sources */, 532 | 84D5C4BD1A194B9B005E6ECE /* Interpreter.cpp in Sources */, 533 | 84405CE719E1B7B0009B0D4F /* Mapper.cpp in Sources */, 534 | 5864AD82E20F15536D054EA3 /* ofxOscMessage.cpp in Sources */, 535 | 84405CE519E1B7B0009B0D4F /* Skeleton.cpp in Sources */, 536 | 4ADB88E2FB52E76A471065DE /* ofxOscParameterSync.cpp in Sources */, 537 | 640279EE111671BD026CB013 /* ofxOscReceiver.cpp in Sources */, 538 | 84405CE919E1B7B0009B0D4F /* ofxKinectV2OSC.cpp in Sources */, 539 | 8F5205AEF8861EF234F0651A /* ofxOscSender.cpp in Sources */, 540 | ADE367465D2A8EBAD4C7A8D9 /* IpEndpointName.cpp in Sources */, 541 | 67FE4C7B15C2F0478C8126C2 /* NetworkingUtils.cpp in Sources */, 542 | 84405CE819E1B7B0009B0D4F /* Parser.cpp in Sources */, 543 | 510CAFE035E576A4E1502D52 /* UdpSocket.cpp in Sources */, 544 | A29D8C96AE042ECEAA1BD4F3 /* NetworkingUtilsWin.cpp in Sources */, 545 | 28090DEB5109115003E8F1C5 /* UdpSocketWin.cpp in Sources */, 546 | 62545D179C94265CA1389D4A /* OscOutboundPacketStream.cpp in Sources */, 547 | C4782ECC372420ACE0615B74 /* OscPrintReceivedElements.cpp in Sources */, 548 | 0546D1A38E13BD319CC9755B /* OscReceivedElements.cpp in Sources */, 549 | 879A251454401BC0B6E4F238 /* OscTypes.cpp in Sources */, 550 | 84405CE419E1B7B0009B0D4F /* Joint.cpp in Sources */, 551 | ); 552 | runOnlyForDeploymentPostprocessing = 0; 553 | }; 554 | /* End PBXSourcesBuildPhase section */ 555 | 556 | /* Begin PBXTargetDependency section */ 557 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { 558 | isa = PBXTargetDependency; 559 | name = openFrameworks; 560 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; 561 | }; 562 | /* End PBXTargetDependency section */ 563 | 564 | /* Begin XCBuildConfiguration section */ 565 | E4B69B4E0A3A1720003C02F2 /* Debug */ = { 566 | isa = XCBuildConfiguration; 567 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 568 | buildSettings = { 569 | ARCHS = "$(NATIVE_ARCH)"; 570 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 571 | COPY_PHASE_STRIP = NO; 572 | DEAD_CODE_STRIPPING = YES; 573 | GCC_AUTO_VECTORIZATION = YES; 574 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 575 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 576 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 577 | GCC_OPTIMIZATION_LEVEL = 0; 578 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 579 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 580 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 581 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 582 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 583 | GCC_WARN_UNUSED_VALUE = NO; 584 | GCC_WARN_UNUSED_VARIABLE = NO; 585 | HEADER_SEARCH_PATHS = ( 586 | "$(OF_CORE_HEADERS)", 587 | ../../../addons/ofxOsc/libs, 588 | ../../../addons/ofxOsc/libs/oscpack, 589 | ../../../addons/ofxOsc/libs/oscpack/src, 590 | ../../../addons/ofxOsc/libs/oscpack/src/ip, 591 | ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, 592 | ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, 593 | ../../../addons/ofxOsc/libs/oscpack/src/osc, 594 | ../../../addons/ofxOsc/src, 595 | ../../../addons/ofxKinectV2OSC/libs, 596 | ../../../addons/ofxKinectV2OSC/src, 597 | ../../../addons/ofxKinectV2OSC/src/Body, 598 | ../../../addons/ofxKinectV2OSC/src/DataTransform, 599 | ); 600 | MACOSX_DEPLOYMENT_TARGET = 10.6; 601 | OTHER_CPLUSPLUSFLAGS = ( 602 | "-D__MACOSX_CORE__", 603 | "-lpthread", 604 | "-mtune=native", 605 | ); 606 | SDKROOT = macosx; 607 | }; 608 | name = Debug; 609 | }; 610 | E4B69B4F0A3A1720003C02F2 /* Release */ = { 611 | isa = XCBuildConfiguration; 612 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 613 | buildSettings = { 614 | ARCHS = "$(NATIVE_ARCH)"; 615 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 616 | COPY_PHASE_STRIP = YES; 617 | DEAD_CODE_STRIPPING = YES; 618 | GCC_AUTO_VECTORIZATION = YES; 619 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 620 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 621 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 622 | GCC_OPTIMIZATION_LEVEL = 3; 623 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 624 | GCC_UNROLL_LOOPS = YES; 625 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 626 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 627 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 628 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 629 | GCC_WARN_UNUSED_VALUE = NO; 630 | GCC_WARN_UNUSED_VARIABLE = NO; 631 | HEADER_SEARCH_PATHS = ( 632 | "$(OF_CORE_HEADERS)", 633 | ../../../addons/ofxOsc/libs, 634 | ../../../addons/ofxOsc/libs/oscpack, 635 | ../../../addons/ofxOsc/libs/oscpack/src, 636 | ../../../addons/ofxOsc/libs/oscpack/src/ip, 637 | ../../../addons/ofxOsc/libs/oscpack/src/ip/posix, 638 | ../../../addons/ofxOsc/libs/oscpack/src/ip/win32, 639 | ../../../addons/ofxOsc/libs/oscpack/src/osc, 640 | ../../../addons/ofxOsc/src, 641 | ../../../addons/ofxKinectV2OSC/libs, 642 | ../../../addons/ofxKinectV2OSC/src, 643 | ../../../addons/ofxKinectV2OSC/src/Body, 644 | ../../../addons/ofxKinectV2OSC/src/DataTransform, 645 | ); 646 | MACOSX_DEPLOYMENT_TARGET = 10.6; 647 | OTHER_CPLUSPLUSFLAGS = ( 648 | "-D__MACOSX_CORE__", 649 | "-lpthread", 650 | "-mtune=native", 651 | ); 652 | SDKROOT = macosx; 653 | }; 654 | name = Release; 655 | }; 656 | E4B69B600A3A1757003C02F2 /* Debug */ = { 657 | isa = XCBuildConfiguration; 658 | buildSettings = { 659 | COMBINE_HIDPI_IMAGES = YES; 660 | COPY_PHASE_STRIP = NO; 661 | FRAMEWORK_SEARCH_PATHS = ( 662 | "$(inherited)", 663 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 664 | ); 665 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; 666 | GCC_DYNAMIC_NO_PIC = NO; 667 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 668 | GCC_MODEL_TUNING = NONE; 669 | ICON = "$(ICON_NAME_DEBUG)"; 670 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; 671 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 672 | INSTALL_PATH = "$(HOME)/Applications"; 673 | LIBRARY_SEARCH_PATHS = ( 674 | "$(inherited)", 675 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 676 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 677 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 678 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", 679 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", 680 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", 681 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 682 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 683 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 684 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 685 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 686 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 687 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 688 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", 689 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", 690 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 691 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 692 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 693 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 694 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 695 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 696 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 697 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 698 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 699 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", 700 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", 701 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", 702 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", 703 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", 704 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", 705 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", 706 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", 707 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", 708 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", 709 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", 710 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", 711 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", 712 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", 713 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", 714 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", 715 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", 716 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", 717 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", 718 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", 719 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", 720 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", 721 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", 722 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", 723 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", 724 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", 725 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", 726 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", 727 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", 728 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", 729 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", 730 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", 731 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", 732 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", 733 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", 734 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", 735 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)", 736 | ); 737 | PRODUCT_NAME = "$(TARGET_NAME)Debug"; 738 | USER_HEADER_SEARCH_PATHS = ""; 739 | WRAPPER_EXTENSION = app; 740 | }; 741 | name = Debug; 742 | }; 743 | E4B69B610A3A1757003C02F2 /* Release */ = { 744 | isa = XCBuildConfiguration; 745 | buildSettings = { 746 | COMBINE_HIDPI_IMAGES = YES; 747 | COPY_PHASE_STRIP = YES; 748 | FRAMEWORK_SEARCH_PATHS = ( 749 | "$(inherited)", 750 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 751 | ); 752 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; 753 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 754 | GCC_MODEL_TUNING = NONE; 755 | ICON = "$(ICON_NAME_RELEASE)"; 756 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; 757 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 758 | INSTALL_PATH = "$(HOME)/Applications"; 759 | LIBRARY_SEARCH_PATHS = ( 760 | "$(inherited)", 761 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 762 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 763 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 764 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", 765 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", 766 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", 767 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 768 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 769 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 770 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 771 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 772 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 773 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 774 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", 775 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", 776 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 777 | "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", 778 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 779 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 780 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 781 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 782 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 783 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 784 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 785 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 786 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", 787 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", 788 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", 789 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", 790 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", 791 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", 792 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", 793 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", 794 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", 795 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", 796 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", 797 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", 798 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", 799 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", 800 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", 801 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", 802 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", 803 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", 804 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", 805 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", 806 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", 807 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", 808 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", 809 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", 810 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", 811 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", 812 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", 813 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", 814 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", 815 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", 816 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", 817 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", 818 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", 819 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", 820 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", 821 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", 822 | ); 823 | PRODUCT_NAME = "$(TARGET_NAME)"; 824 | USER_HEADER_SEARCH_PATHS = ""; 825 | WRAPPER_EXTENSION = app; 826 | }; 827 | name = Release; 828 | }; 829 | /* End XCBuildConfiguration section */ 830 | 831 | /* Begin XCConfigurationList section */ 832 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example" */ = { 833 | isa = XCConfigurationList; 834 | buildConfigurations = ( 835 | E4B69B4E0A3A1720003C02F2 /* Debug */, 836 | E4B69B4F0A3A1720003C02F2 /* Release */, 837 | ); 838 | defaultConfigurationIsVisible = 0; 839 | defaultConfigurationName = Release; 840 | }; 841 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "example" */ = { 842 | isa = XCConfigurationList; 843 | buildConfigurations = ( 844 | E4B69B600A3A1757003C02F2 /* Debug */, 845 | E4B69B610A3A1757003C02F2 /* Release */, 846 | ); 847 | defaultConfigurationIsVisible = 0; 848 | defaultConfigurationName = Release; 849 | }; 850 | /* End XCConfigurationList section */ 851 | }; 852 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; 853 | } 854 | -------------------------------------------------------------------------------- /example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /example/icon.rc: -------------------------------------------------------------------------------- 1 | // Icon Resource Definition 2 | #define MAIN_ICON 102 3 | 4 | #if defined(_DEBUG) 5 | MAIN_ICON ICON "icon_debug.ico" 6 | #else 7 | MAIN_ICON ICON "icon.ico" 8 | #endif 9 | -------------------------------------------------------------------------------- /example/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | cc.openFrameworks.ofapp 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | 22 | 23 | -------------------------------------------------------------------------------- /example/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | #include "ofApp.h" 3 | 4 | //======================================================================== 5 | int main( ){ 6 | ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context 7 | 8 | // this kicks off the running of my app 9 | // can be OF_WINDOW or OF_FULLSCREEN 10 | // pass in width and height too: 11 | ofRunApp(new ofApp()); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /example/src/ofApp.cpp: -------------------------------------------------------------------------------- 1 | #include "ofApp.h" 2 | 3 | void ofApp::setup(){ 4 | smallFont.loadFont("selena.otf", 16); //http://openfontlibrary.org/en/font/selena 5 | largeFont.loadFont("selena.otf", 48); 6 | 7 | //The Kinect here is just an OSC receiver and parser 8 | //It just needs a port number and font for the debug text 9 | kinect.setup(12345, smallFont); 10 | 11 | //Here we get a pointer to the list of skeletons it has parsed 12 | //from OSC 13 | skeletons = kinect.getSkeletons(); 14 | 15 | //We could inspect the skeletons and draw them here in ofApp 16 | //but for now let's pass the list to a default renderer class 17 | renderer.setup(skeletons, largeFont); 18 | } 19 | 20 | void ofApp::update(){ 21 | //Each frame check for new Kinect OSC messages 22 | kinect.update(); 23 | } 24 | 25 | void ofApp::draw(){ 26 | 27 | ofBackground(ofColor::darkGray); 28 | 29 | //Print out strings with the values from the network 30 | kinect.drawDebug(); 31 | 32 | //We passed the skeleton list pointer to the renderer earlier, 33 | //now we tell it to draw them 34 | renderer.draw(); 35 | 36 | //If you want to stop using the default renderer and start 37 | //drawing your own graphics, uncomment this for a starting point: 38 | /*for(int i = 0; i < skeletons->size(); i++) { 39 | ofSetColor(ofColor::fromHsb(ofGetFrameNum() % 255, 255, 255)); 40 | Joint handLeft = skeletons->at(i).getHandLeft(); 41 | ofCircle(handLeft.x(), handLeft.y(), 60); 42 | Joint handRight = skeletons->at(i).getHandRight(); 43 | ofCircle(handRight.x(), handRight.y(), 60); 44 | }*/ 45 | 46 | //Print out commands and text 47 | string commands = "COMMANDS\n\n"; 48 | commands.append("d = debug\n"); 49 | commands.append("j = joints\n"); 50 | commands.append("b = bones\n"); 51 | commands.append("h = hands\n"); 52 | commands.append("r = ranges\n"); 53 | 54 | ofSetColor(ofColor::white); 55 | smallFont.drawString(commands, 20, 40); 56 | largeFont.drawString("fps:\n" + ofToString(ofGetFrameRate()), 20, ofGetHeight() - 100); 57 | } 58 | 59 | void ofApp::keyPressed(int key){ 60 | if(key == 'd') kinect.toggleDebug(); 61 | if(key == 'j') renderer.toggleJoints(); 62 | if(key == 'b') renderer.toggleBones(); 63 | if(key == 'h') renderer.toggleHands(); 64 | if(key == 'r') renderer.toggleRanges(); 65 | } 66 | 67 | void ofApp::keyReleased(int key){ 68 | 69 | } 70 | 71 | void ofApp::mouseMoved(int x, int y ){ 72 | 73 | } 74 | 75 | void ofApp::mouseDragged(int x, int y, int button){ 76 | 77 | } 78 | 79 | void ofApp::mousePressed(int x, int y, int button){ 80 | 81 | } 82 | 83 | void ofApp::mouseReleased(int x, int y, int button){ 84 | 85 | } 86 | 87 | void ofApp::windowResized(int w, int h){ 88 | 89 | } 90 | 91 | void ofApp::gotMessage(ofMessage msg){ 92 | 93 | } 94 | 95 | void ofApp::dragEvent(ofDragInfo dragInfo){ 96 | 97 | } 98 | -------------------------------------------------------------------------------- /example/src/ofApp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxKinectV2OSC.h" 5 | 6 | class ofApp : public ofBaseApp{ 7 | 8 | public: 9 | void setup(); 10 | void update(); 11 | void draw(); 12 | 13 | void keyPressed(int key); 14 | void keyReleased(int key); 15 | void mouseMoved(int x, int y ); 16 | void mouseDragged(int x, int y, int button); 17 | void mousePressed(int x, int y, int button); 18 | void mouseReleased(int x, int y, int button); 19 | void windowResized(int w, int h); 20 | void dragEvent(ofDragInfo dragInfo); 21 | void gotMessage(ofMessage msg); 22 | 23 | ofxKinectV2OSC kinect; 24 | Skeleton* skeleton; 25 | vector* skeletons; 26 | ofTrueTypeFont smallFont, largeFont; 27 | 28 | BodyRenderer renderer; 29 | }; -------------------------------------------------------------------------------- /kinect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxKinectV2-OSC/3d9bce120262f006cc11ae834c0cb22e510c1de3/kinect.jpg -------------------------------------------------------------------------------- /ofxaddons_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxKinectV2-OSC/3d9bce120262f006cc11ae834c0cb22e510c1de3/ofxaddons_thumbnail.png -------------------------------------------------------------------------------- /screenshot-mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxKinectV2-OSC/3d9bce120262f006cc11ae834c0cb22e510c1de3/screenshot-mac.png -------------------------------------------------------------------------------- /screenshot-win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microcosm/ofxKinectV2-OSC/3d9bce120262f006cc11ae834c0cb22e510c1de3/screenshot-win.png -------------------------------------------------------------------------------- /src/Body/Hand.cpp: -------------------------------------------------------------------------------- 1 | #include "Hand.h" 2 | 3 | void Hand::setState(HandState _state) { 4 | state = _state; 5 | } 6 | 7 | void Hand::setConfidence(HandConfidence _confidence) { 8 | confidence = _confidence; 9 | } 10 | 11 | void Hand::setPosition(HandPosition _position) { 12 | position = _position; 13 | } 14 | 15 | HandState Hand::getState() { 16 | return state; 17 | } 18 | 19 | HandConfidence Hand::getConfidence() { 20 | return confidence; 21 | } 22 | 23 | HandPosition Hand::getPosition() { 24 | return position; 25 | } 26 | 27 | void Hand::clone(Hand* hand) { 28 | setState(hand->getState()); 29 | setConfidence(hand->getConfidence()); 30 | setPosition(hand->getPosition()); 31 | } 32 | 33 | bool Hand::isOpen() { 34 | return state == OPEN; 35 | } 36 | 37 | bool Hand::isClosed() { 38 | return state == CLOSED; 39 | } 40 | 41 | bool Hand::isHighConfidence() { 42 | return confidence == HIGH; 43 | } 44 | 45 | bool Hand::isConfidentlyDetected() { 46 | return isHighConfidence() && (isOpen() || isClosed()); 47 | } 48 | 49 | bool Hand::isLeft() { 50 | return position == LEFT; 51 | } 52 | 53 | bool Hand::isRight() { 54 | return position == RIGHT; 55 | } -------------------------------------------------------------------------------- /src/Body/Hand.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | 4 | enum HandState { 5 | UNKNOWN, OPEN, CLOSED 6 | }; 7 | 8 | enum HandConfidence { 9 | LOW, HIGH 10 | }; 11 | 12 | enum HandPosition { 13 | LEFT, RIGHT 14 | }; 15 | 16 | class Hand { 17 | public: 18 | void setState(HandState _state); 19 | void setConfidence(HandConfidence _confidence); 20 | void setPosition(HandPosition _position); 21 | HandState getState(); 22 | HandConfidence getConfidence(); 23 | HandPosition getPosition(); 24 | void clone(Hand* hand); 25 | 26 | bool isClosed(); 27 | bool isOpen(); 28 | bool isHighConfidence(); 29 | bool isConfidentlyDetected(); 30 | bool isLeft(); 31 | bool isRight(); 32 | 33 | protected: 34 | HandState state; 35 | HandConfidence confidence; 36 | HandPosition position; 37 | }; -------------------------------------------------------------------------------- /src/Body/Interpreter.cpp: -------------------------------------------------------------------------------- 1 | #include "Interpreter.h" 2 | 3 | const float RANGE_Z = 5.6; 4 | 5 | ofRectangle Interpreter::leftHandRange(Joint* spineShoulder, Joint* leftShoulder) { 6 | ofRectangle result = handRange(spineShoulder, leftShoulder); 7 | result.x -= estimatedSpan.x; 8 | return result; 9 | } 10 | 11 | ofRectangle Interpreter::rightHandRange(Joint* spineShoulder, Joint* rightShoulder) { 12 | return handRange(spineShoulder, rightShoulder); 13 | } 14 | 15 | ofVec3f Interpreter::leftHandNormal(Joint* leftHand, Joint* spineShoulder, Joint* leftShoulder) { 16 | ofRectangle range = leftHandRange(spineShoulder, leftShoulder); 17 | return normalise(leftHand, range, spineShoulder->z(), true); 18 | } 19 | 20 | ofVec3f Interpreter::rightHandNormal(Joint* rightHand, Joint* spineShoulder, Joint* rightShoulder) { 21 | ofRectangle range = rightHandRange(spineShoulder, rightShoulder); 22 | return normalise(rightHand, range, spineShoulder->z()); 23 | } 24 | 25 | ofRectangle Interpreter::handRange(Joint* spineShoulder, Joint* shoulder) { 26 | float distance = shoulder->distanceTo(spineShoulder); 27 | estimatedSpan.x = distance * 3.5; 28 | estimatedSpan.y = distance * 4.7; 29 | 30 | return ofRectangle( 31 | spineShoulder->x(), 32 | shoulder->y() - estimatedSpan.y * 0.57, 33 | estimatedSpan.x, 34 | estimatedSpan.y); 35 | } 36 | 37 | ofVec3f Interpreter::normalise(Joint *joint, ofRectangle range, float torsoDistance, bool reverseX) { 38 | ofVec3f normal; 39 | if(reverseX) { 40 | normal.x = ofMap(joint->x(), range.x, range.x + range.width, 1, 0, true); 41 | } else { 42 | normal.x = ofMap(joint->x(), range.x, range.x + range.width, 0, 1, true); 43 | } 44 | normal.y = ofMap(joint->y(), range.y, range.y + range.height, 0, 1, true); 45 | normal.z = ofMap(joint->z(), torsoDistance, torsoDistance + RANGE_Z, 0, 1, true); 46 | return normal; 47 | } -------------------------------------------------------------------------------- /src/Body/Interpreter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "Joint.h" 4 | 5 | class Interpreter { 6 | public: 7 | ofRectangle leftHandRange(Joint* spineShoulder, Joint* leftShoulder); 8 | ofRectangle rightHandRange(Joint* spineShoulder, Joint* rightShoulder); 9 | ofVec3f leftHandNormal(Joint* leftHand, Joint* spineShoulder, Joint* leftShoulder); 10 | ofVec3f rightHandNormal(Joint* rightHand, Joint* spineShoulder, Joint* rightShoulder); 11 | protected: 12 | ofRectangle handRange(Joint* spineShoulder, Joint* shoulder); 13 | ofVec3f normalise(Joint* joint, ofRectangle range, float torsoDistance, bool reverseX=false); 14 | ofVec2f estimatedSpan; 15 | }; -------------------------------------------------------------------------------- /src/Body/Joint.cpp: -------------------------------------------------------------------------------- 1 | #include "Joint.h" 2 | 3 | float Joint::x() { 4 | return currentPoint().x; 5 | } 6 | 7 | float Joint::y() { 8 | return currentPoint().y; 9 | } 10 | 11 | float Joint::z() { 12 | return currentPoint().z; 13 | } 14 | 15 | void Joint::setType(string _type) { 16 | type = _type; 17 | } 18 | 19 | void Joint::setPoint(ofVec3f _point) { 20 | pointHistory.push_front(_point); 21 | trimHistory(); 22 | } 23 | 24 | void Joint::setTrackingState(TrackingState _trackingState) { 25 | trackingState = _trackingState; 26 | } 27 | 28 | void Joint::setSmoothing(SmoothingTechnique _smoothing) { 29 | smoothing = _smoothing; 30 | } 31 | 32 | string Joint::getType() { 33 | return type; 34 | } 35 | 36 | ofVec3f Joint::getPoint() { 37 | if(smoothing == SIMPLE_MOVING_AVERAGE) { 38 | return simpleMovingAveragePoint(); 39 | } 40 | return currentPoint(); 41 | } 42 | 43 | TrackingState Joint::getTrackingState() { 44 | return trackingState; 45 | } 46 | 47 | SmoothingTechnique Joint::getSmoothing() { 48 | return smoothing; 49 | } 50 | 51 | void Joint::clone(Joint* other) { 52 | setPoint(other->getPoint()); 53 | setType(other->getType()); 54 | setTrackingState(other->getTrackingState()); 55 | setSmoothing(other->getSmoothing()); 56 | } 57 | 58 | void Joint::clone(Joint* other, SmoothingTechnique technique) { 59 | setPoint(other->getPoint()); 60 | setType(other->getType()); 61 | setTrackingState(other->getTrackingState()); 62 | setSmoothing(technique); 63 | } 64 | 65 | float Joint::distanceTo(Joint* other) { 66 | return currentPoint().distance(other->getPoint()); 67 | } 68 | 69 | bool Joint::isTracked() { 70 | return trackingState == TRACKED; 71 | } 72 | 73 | bool Joint::isInferred() { 74 | return trackingState == INFERRED; 75 | } 76 | 77 | bool Joint::isNotTracked() { 78 | return trackingState == NOT_TRACKED; 79 | } 80 | 81 | void Joint::trimHistory() { 82 | if(pointHistory.size() > MAX_POINT_HISTORY) { 83 | pointHistory.pop_back(); 84 | } 85 | } 86 | 87 | ofVec3f Joint::currentPoint() { 88 | if(pointHistory.size() > 0) { 89 | return pointHistory.at(0); 90 | } else { 91 | cout << "Joint point history is empty. Returning zeros." << endl; 92 | return ofVec3f(0, 0, 0); 93 | } 94 | } 95 | 96 | ofVec3f Joint::simpleMovingAveragePoint() { 97 | calcPoint = ofVec3f(0, 0, 0); 98 | for(int i = 0; i < pointHistory.size(); i++) { 99 | calcPoint += pointHistory.at(i); 100 | } 101 | return calcPoint / pointHistory.size(); 102 | } -------------------------------------------------------------------------------- /src/Body/Joint.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | 4 | enum SmoothingTechnique { 5 | NO_SMOOTHING, 6 | SIMPLE_MOVING_AVERAGE 7 | }; 8 | 9 | enum TrackingState { 10 | TRACKED, NOT_TRACKED, INFERRED 11 | }; 12 | 13 | static int MAX_POINT_HISTORY = 3; 14 | 15 | class Joint { 16 | public: 17 | float x(); 18 | float y(); 19 | float z(); 20 | void setType(string _type); 21 | void setPoint(ofVec3f _point); 22 | void setTrackingState(TrackingState _trackingState); 23 | void setSmoothing(SmoothingTechnique _smoothing); 24 | 25 | string getType(); 26 | ofVec3f getPoint(); 27 | TrackingState getTrackingState(); 28 | SmoothingTechnique getSmoothing(); 29 | void clone(Joint* other); 30 | void clone(Joint* other, SmoothingTechnique technique); 31 | float distanceTo(Joint* other); 32 | 33 | bool isTracked(); 34 | bool isInferred(); 35 | bool isNotTracked(); 36 | 37 | protected: 38 | void trimHistory(); 39 | ofVec3f currentPoint(); 40 | ofVec3f simpleMovingAveragePoint(); 41 | string type; 42 | TrackingState trackingState; 43 | deque pointHistory; 44 | ofVec3f calcPoint; 45 | SmoothingTechnique smoothing; 46 | }; -------------------------------------------------------------------------------- /src/Body/Skeleton.cpp: -------------------------------------------------------------------------------- 1 | #include "Skeleton.h" 2 | 3 | void Skeleton::init(string _bodyId) { 4 | bodyId = _bodyId; 5 | resetFreshness(); 6 | } 7 | 8 | void Skeleton::setSmoothing(SmoothingTechnique technique) { 9 | smoothing = technique; 10 | } 11 | 12 | void Skeleton::update() { 13 | freshness--; 14 | } 15 | 16 | void Skeleton::resetFreshness() { 17 | freshness = MAX_FRESHNESS; 18 | } 19 | 20 | bool Skeleton::isStale() { 21 | return freshness == 0; 22 | } 23 | 24 | bool Skeleton::isCloserThan(Skeleton* other) { 25 | return spineShoulder.z() > other->getSpineShoulder().z(); 26 | } 27 | 28 | void Skeleton::setHand(Hand hand) { 29 | if(hand.isLeft()) { 30 | setLeftHand(hand); 31 | } else { 32 | setRightHand(hand); 33 | } 34 | } 35 | 36 | void Skeleton::setJoint(Joint joint) { 37 | string jointType = joint.getType(); 38 | 39 | if (jointType == "ThumbRight") { 40 | setThumbRight(joint); 41 | } else if (jointType == "SpineBase") { 42 | setSpineBase(joint); 43 | } else if (jointType == "SpineMid") { 44 | setSpineMid(joint); 45 | } else if (jointType == "Neck") { 46 | setNeck(joint); 47 | } else if (jointType == "Head") { 48 | setHead(joint); 49 | } else if (jointType == "ShoulderLeft") { 50 | setShoulderLeft(joint); 51 | } else if (jointType == "ElbowLeft") { 52 | setElbowLeft(joint); 53 | } else if (jointType == "WristLeft") { 54 | setWristLeft(joint); 55 | } else if (jointType == "HandLeft") { 56 | setHandLeft(joint); 57 | } else if (jointType == "ShoulderRight") { 58 | setShoulderRight(joint); 59 | } else if (jointType == "ElbowRight") { 60 | setElbowRight(joint); 61 | } else if (jointType == "WristRight") { 62 | setWristRight(joint); 63 | } else if (jointType == "HandRight") { 64 | setHandRight(joint); 65 | } else if (jointType == "HipLeft") { 66 | setHipLeft(joint); 67 | } else if (jointType == "KneeLeft") { 68 | setKneeLeft(joint); 69 | } else if (jointType == "AnkleLeft") { 70 | setAnkleLeft(joint); 71 | } else if (jointType == "FootLeft") { 72 | setFootLeft(joint); 73 | } else if (jointType == "HipRight") { 74 | setHipRight(joint); 75 | } else if (jointType == "KneeRight") { 76 | setKneeRight(joint); 77 | } else if (jointType == "AnkleRight") { 78 | setAnkleRight(joint); 79 | } else if (jointType == "FootRight") { 80 | setFootRight(joint); 81 | } else if (jointType == "SpineShoulder") { 82 | setSpineShoulder(joint); 83 | } else if (jointType == "HandTipLeft") { 84 | setHandTipLeft(joint); 85 | } else if (jointType == "ThumbLeft") { 86 | setThumbLeft(joint); 87 | } else if (jointType == "HandTipRight") { 88 | setHandTipRight(joint); 89 | } 90 | } 91 | 92 | Hand Skeleton::getLeftHand() { 93 | return leftHand; 94 | } 95 | 96 | Hand Skeleton::getRightHand() { 97 | return rightHand; 98 | } 99 | 100 | string Skeleton::getBodyId() { 101 | return bodyId; 102 | } 103 | 104 | Joint Skeleton::getThumbRight() { 105 | return thumbRight; 106 | } 107 | 108 | Joint Skeleton::getSpineBase() { 109 | return spineBase; 110 | } 111 | 112 | Joint Skeleton::getSpineMid() { 113 | return spineMid; 114 | } 115 | 116 | Joint Skeleton::getNeck() { 117 | return neck; 118 | } 119 | 120 | Joint Skeleton::getHead() { 121 | return head; 122 | } 123 | 124 | Joint Skeleton::getShoulderLeft() { 125 | return shoulderLeft; 126 | } 127 | 128 | Joint Skeleton::getElbowLeft() { 129 | return elbowLeft; 130 | } 131 | 132 | Joint Skeleton::getWristLeft() { 133 | return wristLeft; 134 | } 135 | 136 | Joint Skeleton::getHandLeft() { 137 | return handLeft; 138 | } 139 | 140 | Joint Skeleton::getShoulderRight() { 141 | return shoulderRight; 142 | } 143 | 144 | Joint Skeleton::getElbowRight() { 145 | return elbowRight; 146 | } 147 | 148 | Joint Skeleton::getWristRight() { 149 | return wristRight; 150 | } 151 | 152 | Joint Skeleton::getHandRight() { 153 | return handRight; 154 | } 155 | 156 | Joint Skeleton::getHipLeft() { 157 | return hipLeft; 158 | } 159 | 160 | Joint Skeleton::getKneeLeft() { 161 | return kneeLeft; 162 | } 163 | 164 | Joint Skeleton::getAnkleLeft() { 165 | return ankleLeft; 166 | } 167 | 168 | Joint Skeleton::getFootLeft() { 169 | return footLeft; 170 | } 171 | 172 | Joint Skeleton::getHipRight() { 173 | return hipRight; 174 | } 175 | 176 | Joint Skeleton::getKneeRight() { 177 | return kneeRight; 178 | } 179 | 180 | Joint Skeleton::getAnkleRight() { 181 | return ankleRight; 182 | } 183 | 184 | Joint Skeleton::getFootRight() { 185 | return footRight; 186 | } 187 | 188 | Joint Skeleton::getSpineShoulder() { 189 | return spineShoulder; 190 | } 191 | 192 | Joint Skeleton::getHandTipLeft() { 193 | return handTipLeft; 194 | } 195 | 196 | Joint Skeleton::getThumbLeft() { 197 | return thumbLeft; 198 | } 199 | 200 | Joint Skeleton::getHandTipRight() { 201 | return handTipRight; 202 | } 203 | 204 | ofRectangle Skeleton::getLeftHandRange() { 205 | return interpreter.leftHandRange(&spineShoulder, &shoulderLeft); 206 | } 207 | 208 | ofRectangle Skeleton::getRightHandRange() { 209 | return interpreter.rightHandRange(&spineShoulder, &shoulderRight); 210 | } 211 | 212 | ofVec3f Skeleton::getLeftHandNormal() { 213 | return interpreter.leftHandNormal(&handLeft, &spineShoulder, &shoulderLeft); 214 | } 215 | 216 | ofVec3f Skeleton::getRightHandNormal() { 217 | return interpreter.rightHandNormal(&handRight, &spineShoulder, &shoulderRight); 218 | } 219 | 220 | void Skeleton::setLeftHand(Hand &hand) { 221 | leftHand.clone(&hand); 222 | resetFreshness(); 223 | } 224 | 225 | void Skeleton::setRightHand(Hand &hand) { 226 | rightHand.clone(&hand); 227 | resetFreshness(); 228 | } 229 | 230 | void Skeleton::setThumbRight(Joint &joint) { 231 | thumbRight.clone(&joint, smoothing); 232 | resetFreshness(); 233 | } 234 | 235 | void Skeleton::setSpineBase(Joint &joint) { 236 | spineBase.clone(&joint, smoothing); 237 | resetFreshness(); 238 | } 239 | 240 | void Skeleton::setSpineMid(Joint &joint) { 241 | spineMid.clone(&joint, smoothing); 242 | resetFreshness(); 243 | } 244 | 245 | void Skeleton::setNeck(Joint &joint) { 246 | neck.clone(&joint, smoothing); 247 | resetFreshness(); 248 | } 249 | 250 | void Skeleton::setHead(Joint &joint) { 251 | head.clone(&joint, smoothing); 252 | resetFreshness(); 253 | } 254 | 255 | void Skeleton::setShoulderLeft(Joint &joint) { 256 | shoulderLeft.clone(&joint, smoothing); 257 | resetFreshness(); 258 | } 259 | 260 | void Skeleton::setElbowLeft(Joint &joint) { 261 | elbowLeft.clone(&joint, smoothing); 262 | resetFreshness(); 263 | } 264 | 265 | void Skeleton::setWristLeft(Joint &joint) { 266 | wristLeft.clone(&joint, smoothing); 267 | resetFreshness(); 268 | } 269 | 270 | void Skeleton::setHandLeft(Joint &joint) { 271 | handLeft.clone(&joint, smoothing); 272 | resetFreshness(); 273 | } 274 | 275 | void Skeleton::setShoulderRight(Joint &joint) { 276 | shoulderRight.clone(&joint, smoothing); 277 | resetFreshness(); 278 | } 279 | 280 | void Skeleton::setElbowRight(Joint &joint) { 281 | elbowRight.clone(&joint, smoothing); 282 | resetFreshness(); 283 | } 284 | 285 | void Skeleton::setWristRight(Joint &joint) { 286 | wristRight.clone(&joint, smoothing); 287 | resetFreshness(); 288 | } 289 | 290 | void Skeleton::setHandRight(Joint &joint) { 291 | handRight.clone(&joint, smoothing); 292 | resetFreshness(); 293 | } 294 | 295 | void Skeleton::setHipLeft(Joint &joint) { 296 | hipLeft.clone(&joint, smoothing); 297 | resetFreshness(); 298 | } 299 | 300 | void Skeleton::setKneeLeft(Joint &joint) { 301 | kneeLeft.clone(&joint, smoothing); 302 | resetFreshness(); 303 | } 304 | 305 | void Skeleton::setAnkleLeft(Joint &joint) { 306 | ankleLeft.clone(&joint, smoothing); 307 | resetFreshness(); 308 | } 309 | 310 | void Skeleton::setFootLeft(Joint &joint) { 311 | footLeft.clone(&joint, smoothing); 312 | resetFreshness(); 313 | } 314 | 315 | void Skeleton::setHipRight(Joint &joint) { 316 | hipRight.clone(&joint, smoothing); 317 | resetFreshness(); 318 | } 319 | 320 | void Skeleton::setKneeRight(Joint &joint) { 321 | kneeRight.clone(&joint, smoothing); 322 | resetFreshness(); 323 | } 324 | 325 | void Skeleton::setAnkleRight(Joint &joint) { 326 | ankleRight.clone(&joint, smoothing); 327 | resetFreshness(); 328 | } 329 | 330 | void Skeleton::setFootRight(Joint &joint) { 331 | footRight.clone(&joint, smoothing); 332 | resetFreshness(); 333 | } 334 | 335 | void Skeleton::setSpineShoulder(Joint &joint) { 336 | spineShoulder.clone(&joint, smoothing); 337 | resetFreshness(); 338 | } 339 | 340 | void Skeleton::setHandTipLeft(Joint &joint) { 341 | handTipLeft.clone(&joint, smoothing); 342 | resetFreshness(); 343 | } 344 | 345 | void Skeleton::setThumbLeft(Joint &joint) { 346 | thumbLeft.clone(&joint, smoothing); 347 | resetFreshness(); 348 | } 349 | 350 | void Skeleton::setHandTipRight(Joint &joint) { 351 | handTipRight.clone(&joint, smoothing); 352 | resetFreshness(); 353 | } -------------------------------------------------------------------------------- /src/Body/Skeleton.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "Interpreter.h" 4 | #include "Joint.h" 5 | #include "Hand.h" 6 | 7 | const int MAX_FRESHNESS = 12; 8 | 9 | class Skeleton { 10 | public: 11 | void init(string _bodyId); 12 | void setSmoothing(SmoothingTechnique technique); 13 | void update(); 14 | void resetFreshness(); 15 | bool isStale(); 16 | bool isCloserThan(Skeleton* other); 17 | 18 | void setHand(Hand hand); 19 | void setJoint(Joint joint); 20 | 21 | string getBodyId(); 22 | Hand getLeftHand(); 23 | Hand getRightHand(); 24 | 25 | Joint getThumbRight(); 26 | Joint getSpineBase(); 27 | Joint getSpineMid(); 28 | Joint getNeck(); 29 | Joint getHead(); 30 | Joint getShoulderLeft(); 31 | Joint getElbowLeft(); 32 | Joint getWristLeft(); 33 | Joint getHandLeft(); 34 | Joint getShoulderRight(); 35 | Joint getElbowRight(); 36 | Joint getWristRight(); 37 | Joint getHandRight(); 38 | Joint getHipLeft(); 39 | Joint getKneeLeft(); 40 | Joint getAnkleLeft(); 41 | Joint getFootLeft(); 42 | Joint getHipRight(); 43 | Joint getKneeRight(); 44 | Joint getAnkleRight(); 45 | Joint getFootRight(); 46 | Joint getSpineShoulder(); 47 | Joint getHandTipLeft(); 48 | Joint getThumbLeft(); 49 | Joint getHandTipRight(); 50 | 51 | ofRectangle getLeftHandRange(); 52 | ofRectangle getRightHandRange(); 53 | ofVec3f getLeftHandNormal(); 54 | ofVec3f getRightHandNormal(); 55 | 56 | protected: 57 | void setLeftHand(Hand &hand); 58 | void setRightHand(Hand &hand); 59 | void setThumbRight(Joint &joint); 60 | void setSpineBase(Joint &joint); 61 | void setSpineMid(Joint &joint); 62 | void setNeck(Joint &joint); 63 | void setHead(Joint &joint); 64 | void setShoulderLeft(Joint &joint); 65 | void setElbowLeft(Joint &joint); 66 | void setWristLeft(Joint &joint); 67 | void setHandLeft(Joint &joint); 68 | void setShoulderRight(Joint &joint); 69 | void setElbowRight(Joint &joint); 70 | void setWristRight(Joint &joint); 71 | void setHandRight(Joint &joint); 72 | void setHipLeft(Joint &joint); 73 | void setKneeLeft(Joint &joint); 74 | void setAnkleLeft(Joint &joint); 75 | void setFootLeft(Joint &joint); 76 | void setHipRight(Joint &joint); 77 | void setKneeRight(Joint &joint); 78 | void setAnkleRight(Joint &joint); 79 | void setFootRight(Joint &joint); 80 | void setSpineShoulder(Joint &joint); 81 | void setHandTipLeft(Joint &joint); 82 | void setThumbLeft(Joint &joint); 83 | void setHandTipRight(Joint &joint); 84 | 85 | string bodyId; 86 | int freshness; 87 | Interpreter interpreter; 88 | SmoothingTechnique smoothing; 89 | 90 | Hand leftHand; 91 | Hand rightHand; 92 | Joint thumbRight; 93 | Joint spineBase; 94 | Joint spineMid; 95 | Joint neck; 96 | Joint head; 97 | Joint shoulderLeft; 98 | Joint elbowLeft; 99 | Joint wristLeft; 100 | Joint handLeft; 101 | Joint shoulderRight; 102 | Joint elbowRight; 103 | Joint wristRight; 104 | Joint handRight; 105 | Joint hipLeft; 106 | Joint kneeLeft; 107 | Joint ankleLeft; 108 | Joint footLeft; 109 | Joint hipRight; 110 | Joint kneeRight; 111 | Joint ankleRight; 112 | Joint footRight; 113 | Joint spineShoulder; 114 | Joint handTipLeft; 115 | Joint thumbLeft; 116 | Joint handTipRight; 117 | }; -------------------------------------------------------------------------------- /src/DataTransform/Logger.cpp: -------------------------------------------------------------------------------- 1 | #include "Logger.h" 2 | #define BUFFER_SIZE 40 3 | 4 | void Logger::log(ofxOscMessage message) { 5 | buffer.insert(buffer.begin(), parse(message)); 6 | if(buffer.size() > BUFFER_SIZE) { 7 | buffer.pop_back(); 8 | } 9 | } 10 | 11 | int Logger::size() { 12 | return buffer.size(); 13 | } 14 | 15 | string Logger::getLine(int i) { 16 | return buffer[i]; 17 | } 18 | 19 | string Logger::parse(ofxOscMessage message) { 20 | string result; 21 | result = message.getAddress(); 22 | result += ": ["; 23 | 24 | for(int i = 0; i < message.getNumArgs(); i++) { 25 | result += " " + message.getArgTypeName(i) + ":"; 26 | 27 | switch(message.getArgType(i)) { 28 | case OFXOSC_TYPE_INT32: 29 | result += ofToString(message.getArgAsInt32(i)); 30 | break; 31 | case OFXOSC_TYPE_FLOAT: 32 | result += ofToString(message.getArgAsFloat(i)); 33 | break; 34 | case OFXOSC_TYPE_STRING: 35 | result += message.getArgAsString(i); 36 | break; 37 | default: 38 | result += "unknown"; 39 | } 40 | result += " "; 41 | }; 42 | return result + "]"; 43 | } -------------------------------------------------------------------------------- /src/DataTransform/Logger.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "ofxOscReceiver.h" 4 | 5 | class Logger { 6 | public: 7 | void log(ofxOscMessage message); 8 | int size(); 9 | string getLine(int i); 10 | protected: 11 | string parse(ofxOscMessage message); 12 | vector buffer; 13 | }; -------------------------------------------------------------------------------- /src/DataTransform/Mapper.cpp: -------------------------------------------------------------------------------- 1 | #include "Mapper.h" 2 | 3 | void Mapper::mapTo(vector* skeletons) { 4 | this->skeletons = skeletons; 5 | } 6 | 7 | void Mapper::map(ofxOscMessage &_message) { 8 | parser.setMessage(_message); 9 | 10 | if(parser.isBody()) { 11 | Skeleton* skeleton = getSkeleton(parser.parseBodyId()); 12 | 13 | if(parser.isJoint()) { 14 | skeleton->setJoint(parser.parseJoint()); 15 | } else if(parser.isHand()) { 16 | skeleton->setHand(parser.parseHand()); 17 | } 18 | } 19 | } 20 | 21 | void Mapper::refresh() { 22 | skeletons->clear(); 23 | } 24 | 25 | void Mapper::setSmoothing(SmoothingTechnique technique) { 26 | defaultSmoothing = technique; 27 | } 28 | 29 | Skeleton* Mapper::getSkeleton(string id) { 30 | for(int i = 0; i < skeletons->size(); i++) { 31 | if(skeletons->at(i).getBodyId() == id) { 32 | return &skeletons->at(i); 33 | } 34 | } 35 | return newSkeleton(id); 36 | } 37 | 38 | Skeleton* Mapper::newSkeleton(string id) { 39 | Skeleton skeleton; 40 | skeleton.init(id); 41 | skeleton.setSmoothing(defaultSmoothing); 42 | skeletons->push_back(skeleton); 43 | return &skeletons->at(skeletons->size()-1); 44 | } -------------------------------------------------------------------------------- /src/DataTransform/Mapper.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "../Body/Skeleton.h" 4 | #include "Parser.h" 5 | #include "ofxOscReceiver.h" 6 | 7 | class Mapper { 8 | public: 9 | void mapTo(vector* skeletons); 10 | void map(ofxOscMessage &_message); 11 | void refresh(); 12 | void setSmoothing(SmoothingTechnique technique); 13 | 14 | protected: 15 | Skeleton* getSkeleton(string id); 16 | Skeleton* newSkeleton(string id); 17 | 18 | vector* skeletons; 19 | Parser parser; 20 | SmoothingTechnique defaultSmoothing; 21 | }; -------------------------------------------------------------------------------- /src/DataTransform/Parser.cpp: -------------------------------------------------------------------------------- 1 | #include "Parser.h" 2 | 3 | void Parser::setMessage(ofxOscMessage messageToParse) { 4 | message = messageToParse; 5 | tokenize(message.getAddress()); 6 | } 7 | 8 | string Parser::parseBodyId() { 9 | return addressTokens[1]; 10 | } 11 | 12 | Hand Parser::parseHand() { 13 | hand.setState(parseHandState()); 14 | hand.setConfidence(parseHandConfidence()); 15 | hand.setPosition(parseHandPosition()); 16 | return hand; 17 | } 18 | 19 | Joint Parser::parseJoint() { 20 | joint.setType(parseJointType()); 21 | joint.setPoint(parseJointPoint()); 22 | joint.setTrackingState(parseJointTrackingState()); 23 | return joint; 24 | } 25 | 26 | bool Parser::isBody() { 27 | return addressTokens[0] == "bodies"; 28 | } 29 | 30 | bool Parser::isJoint() { 31 | return addressTokens[2] == "joints"; 32 | } 33 | 34 | bool Parser::isHand() { 35 | return addressTokens[2] == "hands"; 36 | } 37 | 38 | HandState Parser::parseHandState() { 39 | string state = message.getArgAsString(0); 40 | if(state == "Open") return OPEN; 41 | else if(state == "Closed") return CLOSED; 42 | return UNKNOWN; 43 | } 44 | 45 | HandConfidence Parser::parseHandConfidence() { 46 | string confidence = message.getArgAsString(1); 47 | if(confidence == "High") return HIGH; 48 | return LOW; 49 | } 50 | 51 | HandPosition Parser::parseHandPosition() { 52 | string position = addressTokens[3]; 53 | if(position == "Left") return LEFT; 54 | return RIGHT; 55 | } 56 | 57 | string Parser::parseJointType() { 58 | return addressTokens[3]; 59 | } 60 | 61 | ofVec3f Parser::parseJointPoint() { 62 | ofVec3f point; 63 | point.x = message.getArgAsFloat(0); 64 | point.y = message.getArgAsFloat(1); 65 | point.z = message.getArgAsFloat(2); 66 | return orient(point); 67 | } 68 | 69 | TrackingState Parser::parseJointTrackingState() { 70 | string trackingState = message.getArgAsString(3); 71 | if(trackingState == "Tracked") return TRACKED; 72 | else if(trackingState == "Inferred") return INFERRED; 73 | else return NOT_TRACKED; 74 | } 75 | 76 | void Parser::tokenize(string address) { 77 | istringstream iss(address); 78 | string token; 79 | addressTokens.clear(); 80 | while(getline(iss, token, '/')) { 81 | if(token != ""){ 82 | addressTokens.push_back(token); 83 | } 84 | } 85 | } 86 | 87 | ofVec3f Parser::orient(ofVec3f &point){ 88 | point.x = ofMap(point.x, -1, 1, 0, ofGetWidth()); 89 | point.y = ofMap(point.y, -1, 1, ofGetHeight(), 0); 90 | point.z = ofMap(point.z, 0, 2, 30, 10); 91 | return point; 92 | } -------------------------------------------------------------------------------- /src/DataTransform/Parser.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "../Body/Skeleton.h" 4 | #include "ofxOscReceiver.h" 5 | 6 | class Parser { 7 | public: 8 | void setMessage(ofxOscMessage messageToParse); 9 | 10 | string parseBodyId(); 11 | Hand parseHand(); 12 | Joint parseJoint(); 13 | 14 | bool isBody(); 15 | bool isJoint(); 16 | bool isHand(); 17 | 18 | protected: 19 | HandState parseHandState(); 20 | HandConfidence parseHandConfidence(); 21 | HandPosition parseHandPosition(); 22 | 23 | string parseJointType(); 24 | ofVec3f parseJointPoint(); 25 | TrackingState parseJointTrackingState(); 26 | 27 | void tokenize(string address); 28 | ofVec3f orient(ofVec3f &point); 29 | 30 | Hand hand; 31 | Joint joint; 32 | 33 | vector addressTokens; 34 | ofxOscMessage message; 35 | }; -------------------------------------------------------------------------------- /src/Draw/BodyRenderer.cpp: -------------------------------------------------------------------------------- 1 | #include "BodyRenderer.h" 2 | 3 | void BodyRenderer::setup(vector* _skeletons) { 4 | skeletons = _skeletons; 5 | isDrawHandsEnabled = isDrawJointsEnabled = isDrawBonesEnabled = true; 6 | isDrawRangesEnabled = isFontEnabled = false; 7 | } 8 | 9 | void BodyRenderer::setup(vector* _skeletons, ofTrueTypeFont _font) { 10 | setup(_skeletons); 11 | loadFont(_font); 12 | } 13 | 14 | void BodyRenderer::draw() { 15 | ofPushStyle(); 16 | ofSetLineWidth(8); 17 | for(int i = 0; i < skeletons->size(); i++) { 18 | drawSkeleton(&skeletons->at(i)); 19 | } 20 | ofPopStyle(); 21 | } 22 | 23 | void BodyRenderer::drawSkeleton(Skeleton* _skeleton) { 24 | skeleton = _skeleton; 25 | if (isDrawHandsEnabled) drawHands(); 26 | if (isDrawBonesEnabled) drawBones(); 27 | if (isDrawJointsEnabled) drawJoints(); 28 | if (isDrawRangesEnabled) drawRanges(); 29 | } 30 | 31 | void BodyRenderer::loadFont(ofTrueTypeFont _font) { 32 | font = _font; 33 | if(font.isLoaded()) { 34 | isFontEnabled = true; 35 | } 36 | } 37 | 38 | void BodyRenderer::toggleHands() { 39 | isDrawHandsEnabled = !isDrawHandsEnabled; 40 | } 41 | 42 | void BodyRenderer::toggleBones() { 43 | isDrawBonesEnabled = !isDrawBonesEnabled; 44 | } 45 | 46 | void BodyRenderer::toggleJoints() { 47 | isDrawJointsEnabled = !isDrawJointsEnabled; 48 | } 49 | 50 | void BodyRenderer::toggleRanges() { 51 | isDrawRangesEnabled = !isDrawRangesEnabled; 52 | } 53 | 54 | void BodyRenderer::hideAll() { 55 | isDrawHandsEnabled = false; 56 | isDrawBonesEnabled = false; 57 | isDrawJointsEnabled = false; 58 | isDrawRangesEnabled = false; 59 | } 60 | 61 | void BodyRenderer::showAll() { 62 | isDrawHandsEnabled = true; 63 | isDrawBonesEnabled = true; 64 | isDrawJointsEnabled = true; 65 | isDrawRangesEnabled = true; 66 | } 67 | 68 | void BodyRenderer::drawHands() { 69 | drawHand(skeleton->getLeftHand(), skeleton->getHandLeft()); 70 | drawHand(skeleton->getRightHand(), skeleton->getHandRight()); 71 | } 72 | 73 | void BodyRenderer::drawHand(Hand hand, Joint handJoint) { 74 | if(hand.isConfidentlyDetected()) { 75 | ofFill(); 76 | if(hand.isOpen()) ofSetColor(ofColor::green); 77 | else ofSetColor(ofColor::red); 78 | ofCircle(handJoint.getPoint(), 25); 79 | } 80 | } 81 | 82 | void BodyRenderer::drawBones() { 83 | drawTorso(); 84 | drawRightArm(); 85 | drawLeftArm(); 86 | drawRightLeg(); 87 | drawLeftLeg(); 88 | } 89 | 90 | void BodyRenderer::drawTorso(){ 91 | drawBone(skeleton->getHead(), skeleton->getNeck()); 92 | drawBone(skeleton->getNeck(), skeleton->getSpineShoulder()); 93 | drawBone(skeleton->getSpineShoulder(), skeleton->getSpineMid()); 94 | drawBone(skeleton->getSpineMid(), skeleton->getSpineBase()); 95 | drawBone(skeleton->getSpineShoulder(), skeleton->getShoulderRight()); 96 | drawBone(skeleton->getSpineShoulder(), skeleton->getShoulderLeft()); 97 | drawBone(skeleton->getSpineBase(), skeleton->getHipRight()); 98 | drawBone(skeleton->getSpineBase(), skeleton->getHipLeft()); 99 | } 100 | 101 | void BodyRenderer::drawRightArm(){ 102 | drawBone(skeleton->getShoulderRight(), skeleton->getElbowRight()); 103 | drawBone(skeleton->getElbowRight(), skeleton->getWristRight()); 104 | drawBone(skeleton->getWristRight(), skeleton->getHandRight()); 105 | drawBone(skeleton->getHandRight(), skeleton->getHandTipRight()); 106 | drawBone(skeleton->getWristRight(), skeleton->getThumbRight()); 107 | } 108 | 109 | void BodyRenderer::drawLeftArm(){ 110 | drawBone(skeleton->getShoulderLeft(), skeleton->getElbowLeft()); 111 | drawBone(skeleton->getElbowLeft(), skeleton->getWristLeft()); 112 | drawBone(skeleton->getWristLeft(), skeleton->getHandLeft()); 113 | drawBone(skeleton->getHandLeft(), skeleton->getHandTipLeft()); 114 | drawBone(skeleton->getWristLeft(), skeleton->getThumbLeft()); 115 | } 116 | 117 | void BodyRenderer::drawRightLeg(){ 118 | drawBone(skeleton->getHipRight(), skeleton->getKneeRight()); 119 | drawBone(skeleton->getKneeRight(), skeleton->getAnkleRight()); 120 | drawBone(skeleton->getAnkleRight(), skeleton->getFootRight()); 121 | } 122 | 123 | void BodyRenderer::drawLeftLeg(){ 124 | drawBone(skeleton->getHipLeft(), skeleton->getKneeLeft()); 125 | drawBone(skeleton->getKneeLeft(), skeleton->getAnkleLeft()); 126 | drawBone(skeleton->getAnkleLeft(), skeleton->getFootLeft()); 127 | } 128 | 129 | void BodyRenderer::drawBone(Joint joint1, Joint joint2){ 130 | 131 | TrackingState trackingState = combinedTrackingState(joint1, joint2); 132 | 133 | if(trackingState == TRACKED) { 134 | ofSetLineWidth(10); 135 | ofSetColor(ofColor::white); 136 | ofLine(joint1.getPoint(), joint2.getPoint()); 137 | } else if(trackingState == INFERRED) { 138 | ofSetLineWidth(1); 139 | ofSetColor(ofColor::gray); 140 | ofLine(joint1.getPoint(), joint2.getPoint()); 141 | } 142 | } 143 | 144 | void BodyRenderer::drawJoints() { 145 | drawJoint(skeleton->getThumbRight()); 146 | drawJoint(skeleton->getSpineBase()); 147 | drawJoint(skeleton->getSpineMid()); 148 | drawJoint(skeleton->getNeck()); 149 | drawJoint(skeleton->getHead()); 150 | drawJoint(skeleton->getShoulderLeft()); 151 | drawJoint(skeleton->getElbowLeft()); 152 | drawJoint(skeleton->getWristLeft()); 153 | drawJoint(skeleton->getHandLeft()); 154 | drawJoint(skeleton->getShoulderRight()); 155 | drawJoint(skeleton->getElbowRight()); 156 | drawJoint(skeleton->getWristRight()); 157 | drawJoint(skeleton->getHandRight()); 158 | drawJoint(skeleton->getHipLeft()); 159 | drawJoint(skeleton->getKneeLeft()); 160 | drawJoint(skeleton->getAnkleLeft()); 161 | drawJoint(skeleton->getFootLeft()); 162 | drawJoint(skeleton->getHipRight()); 163 | drawJoint(skeleton->getKneeRight()); 164 | drawJoint(skeleton->getAnkleRight()); 165 | drawJoint(skeleton->getFootRight()); 166 | drawJoint(skeleton->getSpineShoulder()); 167 | drawJoint(skeleton->getHandTipLeft()); 168 | drawJoint(skeleton->getThumbLeft()); 169 | drawJoint(skeleton->getHandTipRight()); 170 | } 171 | 172 | void BodyRenderer::drawJoint(Joint joint) { 173 | if(joint.getTrackingState() == TRACKED || joint.getTrackingState() == INFERRED) { 174 | ofSetColor(ofColor::lightGray); 175 | ofFill(); 176 | ofCircle(joint.getPoint(), 10); 177 | } 178 | } 179 | 180 | void BodyRenderer::drawRanges() { 181 | ofSetColor(ofColor::purple); 182 | ofNoFill(); 183 | ofSetLineWidth(1); 184 | drawRange(skeleton->getLeftHandRange(), skeleton->getHandLeft(), skeleton->getLeftHandNormal()); 185 | drawRange(skeleton->getRightHandRange(), skeleton->getHandRight(), skeleton->getRightHandNormal()); 186 | } 187 | 188 | void BodyRenderer::drawRange(ofRectangle range, Joint hand, ofVec2f normal) { 189 | ofRect(range); 190 | if(isFontEnabled) { 191 | normalReport = ofToString(normal.x) + ", " + ofToString(normal.y); 192 | font.drawString(normalReport, hand.x(), hand.y() - 50); 193 | } 194 | } 195 | 196 | TrackingState BodyRenderer::combinedTrackingState(Joint &joint1, Joint &joint2) { 197 | if (joint1.isTracked() && joint2.isTracked()) return TRACKED; 198 | if (joint1.isInferred() && joint2.isTracked()) return INFERRED; 199 | if (joint1.isTracked() && joint2.isInferred()) return INFERRED; 200 | return NOT_TRACKED; 201 | } -------------------------------------------------------------------------------- /src/Draw/BodyRenderer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "ofxKinectV2OSC.h" 4 | 5 | class BodyRenderer { 6 | public: 7 | virtual void setup(vector* _skeletons); 8 | virtual void setup(vector* _skeletons, ofTrueTypeFont _font); 9 | void draw(); 10 | void drawSkeleton(Skeleton* _skeleton); 11 | void loadFont(ofTrueTypeFont _font); 12 | 13 | void toggleHands(); 14 | void toggleBones(); 15 | void toggleJoints(); 16 | void toggleRanges(); 17 | void hideAll(); 18 | void showAll(); 19 | 20 | void drawHands(); 21 | virtual void drawHand(Hand hand, Joint handJoint); 22 | 23 | void drawBones(); 24 | void drawTorso(); 25 | void drawRightArm(); 26 | void drawLeftArm(); 27 | void drawRightLeg(); 28 | void drawLeftLeg(); 29 | virtual void drawBone(Joint joint1, Joint joint2); 30 | 31 | void drawJoints(); 32 | virtual void drawJoint(Joint joint); 33 | 34 | void drawRanges(); 35 | virtual void drawRange(ofRectangle range, Joint hand, ofVec2f normal); 36 | 37 | 38 | 39 | protected: 40 | TrackingState combinedTrackingState(Joint &joint1, Joint &joint2); 41 | 42 | vector* skeletons; 43 | Skeleton* skeleton; 44 | ofTrueTypeFont font; 45 | string normalReport; 46 | 47 | bool isDrawHandsEnabled, isDrawBonesEnabled, isDrawJointsEnabled, isDrawRangesEnabled, isFontEnabled; 48 | }; -------------------------------------------------------------------------------- /src/ofxKinectV2OSC.cpp: -------------------------------------------------------------------------------- 1 | #include "ofxKinectV2OSC.h" 2 | 3 | void ofxKinectV2OSC::setup(int port, ofTrueTypeFont &_font) { 4 | isDebugEnabled = false; 5 | setFont(_font); 6 | receiver.setup(port); 7 | mapper.mapTo(&skeletons); 8 | } 9 | 10 | void ofxKinectV2OSC::update() { 11 | parseOscMessages(); 12 | clearStaleSkeletons(); 13 | } 14 | 15 | void ofxKinectV2OSC::setSmoothing(SmoothingTechnique technique) { 16 | mapper.setSmoothing(technique); 17 | } 18 | 19 | void ofxKinectV2OSC::setFont(ofTrueTypeFont _font) { 20 | font = _font; 21 | if(!font.isLoaded()) { 22 | isDebugEnabled = true; 23 | } 24 | } 25 | 26 | vector* ofxKinectV2OSC::getSkeletons() { 27 | return &skeletons; 28 | } 29 | 30 | Skeleton* ofxKinectV2OSC::getNearestSkeleton() { 31 | Skeleton* nearestSkeleton; 32 | for(int i = 0; i < skeletons.size(); i++) { 33 | if(i == 0 || skeletons.at(i).isCloserThan(nearestSkeleton)) { 34 | nearestSkeleton = &skeletons.at(i); 35 | } 36 | } 37 | return nearestSkeleton; 38 | } 39 | 40 | bool ofxKinectV2OSC::hasSkeletons() { 41 | return skeletons.size() > 0; 42 | } 43 | 44 | void ofxKinectV2OSC::parseOscMessages() { 45 | while(receiver.hasWaitingMessages()) { 46 | receiver.getNextMessage(&lastMessage); 47 | logger.log(lastMessage); 48 | mapper.map(lastMessage); 49 | } 50 | } 51 | 52 | void ofxKinectV2OSC::clearStaleSkeletons() { 53 | for(int i = 0; i < skeletons.size(); i++) { 54 | Skeleton* skeleton = &skeletons.at(i); 55 | skeleton->update(); 56 | if(skeleton->isStale()) { 57 | skeletons.erase(skeletons.begin() + i); 58 | } 59 | } 60 | } 61 | 62 | void ofxKinectV2OSC::drawDebug() { 63 | if(isDebugEnabled) { 64 | string debug = buildDebugString(); 65 | if(font.isLoaded()) { 66 | font.drawString(debug, 220, 40); 67 | } else { 68 | ofDrawBitmapString(debug, 60, 60); 69 | } 70 | } 71 | } 72 | 73 | void ofxKinectV2OSC::toggleDebug() { 74 | isDebugEnabled = !isDebugEnabled; 75 | } 76 | 77 | 78 | 79 | string ofxKinectV2OSC::buildDebugString() { 80 | string debug = "DEBUG\n"; 81 | if(!font.isLoaded()) { 82 | debug.append("\nFont not loaded correctly... see ofApp() and copy the font into the bin/data directory\n"); 83 | } 84 | 85 | if(logger.size() == 0) { 86 | debug.append("\nNo data received... try re-initiating the source"); 87 | } else { 88 | debug.append(parseLogger()); 89 | } 90 | return debug; 91 | } 92 | 93 | string ofxKinectV2OSC::parseLogger() { 94 | string parsed = ""; 95 | for (int i = 0; i < logger.size(); i++) { 96 | parsed.append("\n" + logger.getLine(i)); 97 | } 98 | return parsed; 99 | } -------------------------------------------------------------------------------- /src/ofxKinectV2OSC.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | #include "DataTransform/Logger.h" 4 | #include "DataTransform/Mapper.h" 5 | #include "Body/Skeleton.h" 6 | #include "Draw/BodyRenderer.h" 7 | 8 | class ofxKinectV2OSC { 9 | public: 10 | void setup(int port, ofTrueTypeFont &_font); 11 | void update(); 12 | void setSmoothing(SmoothingTechnique technique); 13 | void setFont(ofTrueTypeFont _font); 14 | vector* getSkeletons(); 15 | Skeleton* getNearestSkeleton(); 16 | bool hasSkeletons(); 17 | void parseOscMessages(); 18 | void clearStaleSkeletons(); 19 | void drawDebug(); 20 | void toggleDebug(); 21 | 22 | protected: 23 | string buildDebugString(); 24 | string parseLogger(); 25 | 26 | ofxOscReceiver receiver; 27 | ofxOscMessage lastMessage; 28 | string lastParsedMessage; 29 | Logger logger; 30 | Mapper mapper; 31 | vector skeletons; 32 | ofTrueTypeFont font; 33 | bool isDebugEnabled; 34 | }; --------------------------------------------------------------------------------