├── .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 | 
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 | 
28 |
29 | This is what you'll see on your Mac:
30 |
31 | 
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 | };
--------------------------------------------------------------------------------