├── .clang-format
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── LICENSE
├── Makefile
├── Project.xcconfig
├── README.md
├── RPI_listeners
├── udpLPD8806
├── udpLPD8806.c
├── udpWS281x
└── udpWS281x.c
├── addons.make
├── bin
├── data
│ ├── .gitkeep
│ ├── grab.frag
│ ├── grab.vert
│ ├── gui
│ │ ├── mouse_grab_circle.jpg
│ │ ├── mouse_grab_line.jpg
│ │ ├── mouse_grab_matrix.jpg
│ │ └── mouse_select.jpg
│ ├── icon.icns
│ └── ofxbraitsch
│ │ ├── fonts
│ │ ├── MavenPro-Medium.ttf
│ │ ├── MavenPro-Regular.ttf
│ │ └── Verdana.ttf
│ │ └── ofxdatgui
│ │ ├── icon-group-closed.png
│ │ ├── icon-group-open.png
│ │ ├── icon-radio-off.png
│ │ ├── icon-radio-on.png
│ │ └── picker-rainbow.png
└── lm-enigma.evb
├── config.make
├── icon.rc
├── images
├── RPI_3_ledMapper_pinout.png
├── ledMapper_icon_200.png
└── ledMapper_screenshot.png
├── ledMapper.sln
├── ledMapper.vcxproj
├── ledMapper.vcxproj.filters
├── ledMapper.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcshareddata
│ └── xcschemes
│ ├── ledMapper Debug.xcscheme
│ └── ledMapper Release.xcscheme
├── ledmapper_icon.ico
├── openFrameworks-Info.plist
└── src
├── Player.cpp
├── Player.h
├── ledMapperApp.cpp
├── ledMapperApp.h
└── main.cpp
/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | Language: Cpp
3 | ConstructorInitializerIndentWidth: 4
4 | AccessModifierOffset: -4
5 | ConstructorInitializerIndentWidth: 4
6 | AlignEscapedNewlinesLeft: false
7 | AlignTrailingComments: false
8 | AllowAllParametersOfDeclarationOnNextLine: true
9 | AllowShortBlocksOnASingleLine: true
10 | AllowShortIfStatementsOnASingleLine: false
11 | AllowShortLoopsOnASingleLine: false
12 | AllowShortFunctionsOnASingleLine: All
13 | AlwaysBreakTemplateDeclarations: false
14 | AlwaysBreakBeforeMultilineStrings: false
15 | BreakBeforeBinaryOperators: true
16 | BreakBeforeTernaryOperators: true
17 | BreakConstructorInitializersBeforeComma: true
18 | BinPackParameters: true
19 | ColumnLimit: 100
20 | ConstructorInitializerAllOnOneLineOrOnePerLine: false
21 | DerivePointerAlignment: false
22 | ExperimentalAutoDetectBinPacking: false
23 | IndentCaseLabels: true
24 | IndentWrappedFunctionNames: false
25 | IndentFunctionDeclarationAfterType: false
26 | MaxEmptyLinesToKeep: 1
27 | KeepEmptyLinesAtTheStartOfBlocks: true
28 | NamespaceIndentation: None
29 | ObjCSpaceAfterProperty: true
30 | ObjCSpaceBeforeProtocolList: true
31 | PenaltyBreakBeforeFirstCallParameter: 19
32 | PenaltyBreakComment: 300
33 | PenaltyBreakString: 1000
34 | PenaltyBreakFirstLessLess: 120
35 | PenaltyExcessCharacter: 1000000
36 | PenaltyReturnTypeOnItsOwnLine: 60
37 | PointerAlignment: Right
38 | SpacesBeforeTrailingComments: 1
39 | Cpp11BracedListStyle: false
40 | Standard: Cpp11
41 | IndentWidth: 4
42 | TabWidth: 4
43 | UseTab: Never
44 | BreakBeforeBraces: Stroustrup
45 | SpacesInParentheses: false
46 | SpacesInAngles: false
47 | SpaceInEmptyParentheses: false
48 | SpacesInCStyleCastParentheses: false
49 | SpacesInContainerLiterals: true
50 | SpaceBeforeAssignmentOperators: true
51 | ContinuationIndentWidth: 4
52 | CommentPragmas: '^ IWYU pragma:'
53 | ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
54 | SpaceBeforeParens: ControlStatements
55 | DisableFormat: false
56 | ...
57 |
58 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .idea
3 | cmake-build-debug
4 |
5 | *.xcbkptlist
6 |
7 | ## User settings
8 | xcuserdata/
9 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
10 | *.xcscmblueprint
11 | *.xccheckout
12 |
13 | # Compiled Object files
14 | *.slo
15 | *.lo
16 | *.o
17 |
18 | # Compiled Dynamic libraries
19 | *.so
20 | *.dylib
21 |
22 | # Compiled Static libraries
23 | *.lai
24 | *.la
25 | *.a
26 |
27 | *.app
28 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "rpi_ws281x"]
2 | path = rpi_ws281x
3 | url = https://github.com/techtim/rpi_ws281x.git
4 | [submodule "rpi_sk9822"]
5 | path = rpi_sk9822
6 | url = https://github.com/techtim/rpi_sk9822.git
7 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # ======================= ofxCMake Vers. 0.1 =============
2 | # PUT THIS FILE INTO YOUR OPENFRAMEWORKS PROJECT FOLDER
3 |
4 | # ========================================================
5 | # ===================== CMake Settings ===================
6 | # ========================================================
7 | cmake_minimum_required( VERSION 3.3 )
8 | project( openframeworks )
9 |
10 | # ========================================================
11 | # ===================== User Settings ====================
12 | # ========================================================
13 | # ---------------------- App name -----------------------
14 | set( APP_NAME ledMapper )
15 |
16 | # ------------------------ OF Path -----------------------
17 | # --- If outside the OF structure, set an absolute OF path
18 | set( OF_DIRECTORY_BY_USER "../../.." )
19 |
20 | # --------------------- Source Files ---------------------
21 | set( ${APP_NAME}_SOURCE_FILES
22 | src/main.cpp
23 | src/ledMapperApp.cpp
24 | src/Player.cpp )
25 |
26 |
27 | # ------------------------ AddOns -----------------------
28 | set( OFX_ADDONS_ACTIVE
29 | ofxXmlSettings
30 | ofxPoco
31 | ofxNetwork
32 | ofxDatGui
33 | ofxLedMapper
34 | ofxSyphon
35 | ofxMidi )
36 |
37 | # =========================================================================
38 | # ============================== OpenFrameworks ===========================
39 | # =========================================================================
40 | include( ${OF_DIRECTORY_BY_USER}/addons/ofxCMake/modules/main.cmake )
41 | # =========================================================================
42 |
43 | if( APPLE ) # Set App icon
44 | set_source_files_properties(ledMapper.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
45 | endif()
46 |
47 | ADD_CUSTOM_COMMAND(
48 | TARGET ${APP_NAME}
49 | POST_BUILD
50 | COMMAND rsync
51 | ARGS -av --exclude='.DS_Store'
52 | "${PROJECT_SOURCE_DIR}/bin/data/"
53 | "${PROJECT_SOURCE_DIR}/bin/${APP_NAME}.app/Contents/Resources"
54 | COMMENT "Copying Bundle Stuff")
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 2, June 1991
3 |
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | Preamble
10 |
11 | The licenses for most software are designed to take away your
12 | freedom to share and change it. By contrast, the GNU General Public
13 | License is intended to guarantee your freedom to share and change free
14 | software--to make sure the software is free for all its users. This
15 | General Public License applies to most of the Free Software
16 | Foundation's software and to any other program whose authors commit to
17 | using it. (Some other Free Software Foundation software is covered by
18 | the GNU Lesser General Public License instead.) You can apply it to
19 | your programs, too.
20 |
21 | When we speak of free software, we are referring to freedom, not
22 | price. Our General Public Licenses are designed to make sure that you
23 | have the freedom to distribute copies of free software (and charge for
24 | this service if you wish), that you receive source code or can get it
25 | if you want it, that you can change the software or use pieces of it
26 | in new free programs; and that you know you can do these things.
27 |
28 | To protect your rights, we need to make restrictions that forbid
29 | anyone to deny you these rights or to ask you to surrender the rights.
30 | These restrictions translate to certain responsibilities for you if you
31 | distribute copies of the software, or if you modify it.
32 |
33 | For example, if you distribute copies of such a program, whether
34 | gratis or for a fee, you must give the recipients all the rights that
35 | you have. You must make sure that they, too, receive or can get the
36 | source code. And you must show them these terms so they know their
37 | rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and
40 | (2) offer you this license which gives you legal permission to copy,
41 | distribute and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain
44 | that everyone understands that there is no warranty for this free
45 | software. If the software is modified by someone else and passed on, we
46 | want its recipients to know that what they have is not the original, so
47 | that any problems introduced by others will not reflect on the original
48 | authors' reputations.
49 |
50 | Finally, any free program is threatened constantly by software
51 | patents. We wish to avoid the danger that redistributors of a free
52 | program will individually obtain patent licenses, in effect making the
53 | program proprietary. To prevent this, we have made it clear that any
54 | patent must be licensed for everyone's free use or not licensed at all.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | GNU GENERAL PUBLIC LICENSE
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 |
62 | 0. This License applies to any program or other work which contains
63 | a notice placed by the copyright holder saying it may be distributed
64 | under the terms of this General Public License. The "Program", below,
65 | refers to any such program or work, and a "work based on the Program"
66 | means either the Program or any derivative work under copyright law:
67 | that is to say, a work containing the Program or a portion of it,
68 | either verbatim or with modifications and/or translated into another
69 | language. (Hereinafter, translation is included without limitation in
70 | the term "modification".) Each licensee is addressed as "you".
71 |
72 | Activities other than copying, distribution and modification are not
73 | covered by this License; they are outside its scope. The act of
74 | running the Program is not restricted, and the output from the Program
75 | is covered only if its contents constitute a work based on the
76 | Program (independent of having been made by running the Program).
77 | Whether that is true depends on what the Program does.
78 |
79 | 1. You may copy and distribute verbatim copies of the Program's
80 | source code as you receive it, in any medium, provided that you
81 | conspicuously and appropriately publish on each copy an appropriate
82 | copyright notice and disclaimer of warranty; keep intact all the
83 | notices that refer to this License and to the absence of any warranty;
84 | and give any other recipients of the Program a copy of this License
85 | along with the Program.
86 |
87 | You may charge a fee for the physical act of transferring a copy, and
88 | you may at your option offer warranty protection in exchange for a fee.
89 |
90 | 2. You may modify your copy or copies of the Program or any portion
91 | of it, thus forming a work based on the Program, and copy and
92 | distribute such modifications or work under the terms of Section 1
93 | above, provided that you also meet all of these conditions:
94 |
95 | a) You must cause the modified files to carry prominent notices
96 | stating that you changed the files and the date of any change.
97 |
98 | b) You must cause any work that you distribute or publish, that in
99 | whole or in part contains or is derived from the Program or any
100 | part thereof, to be licensed as a whole at no charge to all third
101 | parties under the terms of this License.
102 |
103 | c) If the modified program normally reads commands interactively
104 | when run, you must cause it, when started running for such
105 | interactive use in the most ordinary way, to print or display an
106 | announcement including an appropriate copyright notice and a
107 | notice that there is no warranty (or else, saying that you provide
108 | a warranty) and that users may redistribute the program under
109 | these conditions, and telling the user how to view a copy of this
110 | License. (Exception: if the Program itself is interactive but
111 | does not normally print such an announcement, your work based on
112 | the Program is not required to print an announcement.)
113 |
114 | These requirements apply to the modified work as a whole. If
115 | identifiable sections of that work are not derived from the Program,
116 | and can be reasonably considered independent and separate works in
117 | themselves, then this License, and its terms, do not apply to those
118 | sections when you distribute them as separate works. But when you
119 | distribute the same sections as part of a whole which is a work based
120 | on the Program, the distribution of the whole must be on the terms of
121 | this License, whose permissions for other licensees extend to the
122 | entire whole, and thus to each and every part regardless of who wrote it.
123 |
124 | Thus, it is not the intent of this section to claim rights or contest
125 | your rights to work written entirely by you; rather, the intent is to
126 | exercise the right to control the distribution of derivative or
127 | collective works based on the Program.
128 |
129 | In addition, mere aggregation of another work not based on the Program
130 | with the Program (or with a work based on the Program) on a volume of
131 | a storage or distribution medium does not bring the other work under
132 | the scope of this License.
133 |
134 | 3. You may copy and distribute the Program (or a work based on it,
135 | under Section 2) in object code or executable form under the terms of
136 | Sections 1 and 2 above provided that you also do one of the following:
137 |
138 | a) Accompany it with the complete corresponding machine-readable
139 | source code, which must be distributed under the terms of Sections
140 | 1 and 2 above on a medium customarily used for software interchange; or,
141 |
142 | b) Accompany it with a written offer, valid for at least three
143 | years, to give any third party, for a charge no more than your
144 | cost of physically performing source distribution, a complete
145 | machine-readable copy of the corresponding source code, to be
146 | distributed under the terms of Sections 1 and 2 above on a medium
147 | customarily used for software interchange; or,
148 |
149 | c) Accompany it with the information you received as to the offer
150 | to distribute corresponding source code. (This alternative is
151 | allowed only for noncommercial distribution and only if you
152 | received the program in object code or executable form with such
153 | an offer, in accord with Subsection b above.)
154 |
155 | The source code for a work means the preferred form of the work for
156 | making modifications to it. For an executable work, complete source
157 | code means all the source code for all modules it contains, plus any
158 | associated interface definition files, plus the scripts used to
159 | control compilation and installation of the executable. However, as a
160 | special exception, the source code distributed need not include
161 | anything that is normally distributed (in either source or binary
162 | form) with the major components (compiler, kernel, and so on) of the
163 | operating system on which the executable runs, unless that component
164 | itself accompanies the executable.
165 |
166 | If distribution of executable or object code is made by offering
167 | access to copy from a designated place, then offering equivalent
168 | access to copy the source code from the same place counts as
169 | distribution of the source code, even though third parties are not
170 | compelled to copy the source along with the object code.
171 |
172 | 4. You may not copy, modify, sublicense, or distribute the Program
173 | except as expressly provided under this License. Any attempt
174 | otherwise to copy, modify, sublicense or distribute the Program is
175 | void, and will automatically terminate your rights under this License.
176 | However, parties who have received copies, or rights, from you under
177 | this License will not have their licenses terminated so long as such
178 | parties remain in full compliance.
179 |
180 | 5. You are not required to accept this License, since you have not
181 | signed it. However, nothing else grants you permission to modify or
182 | distribute the Program or its derivative works. These actions are
183 | prohibited by law if you do not accept this License. Therefore, by
184 | modifying or distributing the Program (or any work based on the
185 | Program), you indicate your acceptance of this License to do so, and
186 | all its terms and conditions for copying, distributing or modifying
187 | the Program or works based on it.
188 |
189 | 6. Each time you redistribute the Program (or any work based on the
190 | Program), the recipient automatically receives a license from the
191 | original licensor to copy, distribute or modify the Program subject to
192 | these terms and conditions. You may not impose any further
193 | restrictions on the recipients' exercise of the rights granted herein.
194 | You are not responsible for enforcing compliance by third parties to
195 | this License.
196 |
197 | 7. If, as a consequence of a court judgment or allegation of patent
198 | infringement or for any other reason (not limited to patent issues),
199 | conditions are imposed on you (whether by court order, agreement or
200 | otherwise) that contradict the conditions of this License, they do not
201 | excuse you from the conditions of this License. If you cannot
202 | distribute so as to satisfy simultaneously your obligations under this
203 | License and any other pertinent obligations, then as a consequence you
204 | may not distribute the Program at all. For example, if a patent
205 | license would not permit royalty-free redistribution of the Program by
206 | all those who receive copies directly or indirectly through you, then
207 | the only way you could satisfy both it and this License would be to
208 | refrain entirely from distribution of the Program.
209 |
210 | If any portion of this section is held invalid or unenforceable under
211 | any particular circumstance, the balance of the section is intended to
212 | apply and the section as a whole is intended to apply in other
213 | circumstances.
214 |
215 | It is not the purpose of this section to induce you to infringe any
216 | patents or other property right claims or to contest validity of any
217 | such claims; this section has the sole purpose of protecting the
218 | integrity of the free software distribution system, which is
219 | implemented by public license practices. Many people have made
220 | generous contributions to the wide range of software distributed
221 | through that system in reliance on consistent application of that
222 | system; it is up to the author/donor to decide if he or she is willing
223 | to distribute software through any other system and a licensee cannot
224 | impose that choice.
225 |
226 | This section is intended to make thoroughly clear what is believed to
227 | be a consequence of the rest of this License.
228 |
229 | 8. If the distribution and/or use of the Program is restricted in
230 | certain countries either by patents or by copyrighted interfaces, the
231 | original copyright holder who places the Program under this License
232 | may add an explicit geographical distribution limitation excluding
233 | those countries, so that distribution is permitted only in or among
234 | countries not thus excluded. In such case, this License incorporates
235 | the limitation as if written in the body of this License.
236 |
237 | 9. The Free Software Foundation may publish revised and/or new versions
238 | of the General Public License from time to time. Such new versions will
239 | be similar in spirit to the present version, but may differ in detail to
240 | address new problems or concerns.
241 |
242 | Each version is given a distinguishing version number. If the Program
243 | specifies a version number of this License which applies to it and "any
244 | later version", you have the option of following the terms and conditions
245 | either of that version or of any later version published by the Free
246 | Software Foundation. If the Program does not specify a version number of
247 | this License, you may choose any version ever published by the Free Software
248 | Foundation.
249 |
250 | 10. If you wish to incorporate parts of the Program into other free
251 | programs whose distribution conditions are different, write to the author
252 | to ask for permission. For software which is copyrighted by the Free
253 | Software Foundation, write to the Free Software Foundation; we sometimes
254 | make exceptions for this. Our decision will be guided by the two goals
255 | of preserving the free status of all derivatives of our free software and
256 | of promoting the sharing and reuse of software generally.
257 |
258 | NO WARRANTY
259 |
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268 | REPAIR OR CORRECTION.
269 |
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278 | POSSIBILITY OF SUCH DAMAGES.
279 |
280 | END OF TERMS AND CONDITIONS
281 |
282 | How to Apply These Terms to Your New Programs
283 |
284 | If you develop a new program, and you want it to be of the greatest
285 | possible use to the public, the best way to achieve this is to make it
286 | free software which everyone can redistribute and change under these terms.
287 |
288 | To do so, attach the following notices to the program. It is safest
289 | to attach them to the start of each source file to most effectively
290 | convey the exclusion of warranty; and each file should have at least
291 | the "copyright" line and a pointer to where the full notice is found.
292 |
293 | {description}
294 | Copyright (C) {year} {fullname}
295 |
296 | This program is free software; you can redistribute it and/or modify
297 | it under the terms of the GNU General Public License as published by
298 | the Free Software Foundation; either version 2 of the License, or
299 | (at your option) any later version.
300 |
301 | This program is distributed in the hope that it will be useful,
302 | but WITHOUT ANY WARRANTY; without even the implied warranty of
303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 | GNU General Public License for more details.
305 |
306 | You should have received a copy of the GNU General Public License along
307 | with this program; if not, write to the Free Software Foundation, Inc.,
308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309 |
310 | Also add information on how to contact you by electronic and paper mail.
311 |
312 | If the program is interactive, make it output a short notice like this
313 | when it starts in an interactive mode:
314 |
315 | Gnomovision version 69, Copyright (C) year name of author
316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 | This is free software, and you are welcome to redistribute it
318 | under certain conditions; type `show c' for details.
319 |
320 | The hypothetical commands `show w' and `show c' should show the appropriate
321 | parts of the General Public License. Of course, the commands you use may
322 | be called something other than `show w' and `show c'; they could even be
323 | mouse-clicks or menu items--whatever suits your program.
324 |
325 | You should also get your employer (if you work as a programmer) or your
326 | school, if any, to sign a "copyright disclaimer" for the program, if
327 | necessary. Here is a sample; alter the names:
328 |
329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 | `Gnomovision' (which makes passes at compilers) written by James Hacker.
331 |
332 | {signature of Ty Coon}, 1 April 1989
333 | Ty Coon, President of Vice
334 |
335 | This General Public License does not permit incorporating your program into
336 | proprietary programs. If your program is a subroutine library, you may
337 | consider it more useful to permit linking proprietary applications with the
338 | library. If this is what you want to do, use the GNU Lesser General
339 | Public License instead of this License.
340 |
--------------------------------------------------------------------------------
/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=$(realpath ../../..)
10 | endif
11 |
12 | # call the project makefile!
13 | include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk
14 |
--------------------------------------------------------------------------------
/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_CFLAGS = $(OF_CORE_CFLAGS)
17 | OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS)
18 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS)
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ledMapper
5 | ===
6 |
7 | Open-source application for receiving input from Syphon/Spout or built-in video player and mapping it to distributed ligting system based on network connected RaspberryPi clients serving as controllers for digital LED ICs like LPD8806, WS281X, SK9822, SK6822, etc.
8 |
9 |
10 |
11 |
12 | Check [Interface Description](https://github.com/techtim/ledMapper/wiki/ledMapper-Interface) page for details.
13 |
14 | Try out compiled apps for Windows and OSX and image for RaspberryPi 3 on [TVL website](https://tvl.io/soft/ledMapper/)
15 |
16 | ### Raspberry Pi
17 |
18 | C++ based UDP listener, listen localhost:3001 and sending data to GPIO pins. (https://github.com/techtim/lmListener)
19 |
20 | Pin numbers depends on LED IC type:
21 | - LPD8806/SK9822 - SCK > GPIO11 (SPI_CLK), DATA > GPIO10 (SPI_MOSI)
22 | - WS281X driver from https://github.com/jgarff/rpi_ws281x using 2 channel PWM on GPIO12 and GPIO13
23 |
24 |
25 |
26 | __RPI2/3:__ SK9822/APA102/LPD8806 (BLUE PINS)
27 | __RPI2/3:__ WS2812 (GREEN PINS)
--------------------------------------------------------------------------------
/RPI_listeners/udpLPD8806:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/RPI_listeners/udpLPD8806
--------------------------------------------------------------------------------
/RPI_listeners/udpLPD8806.c:
--------------------------------------------------------------------------------
1 | /*
2 | * udp_listen.c
3 | *
4 | * Tim Tavlintsev 2016 < tim@tvl.io >
5 | *
6 | * Illustrate simple UDP connection
7 | * It opens a blocking socket and
8 | * listens for messages in a for loop. It takes the name of the machine
9 | * that it will be listening on as argument.
10 | * Then messages sending to SPI GPIO pins using lpd8806 lib (https://github.com/eranrund/blinky-pants/tree/master/lpd)
11 | */
12 |
13 | // compile using:
14 | // sudo gcc -lm ./lpd8806led.c ./udpLPD8806.c -o udpLPD8806
15 |
16 | #include
17 | #include
18 | #include
19 |
20 | #include "lpd8806led.h"
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 |
30 | static const char *device = "/dev/spidev0.0";
31 | static const int leds = 2000;
32 | static const int message_size = 2048*3;
33 | static int continue_looping;
34 |
35 | #define SERVER_PORT 3000
36 |
37 | void stop_program(int sig);
38 | void HSVtoRGB(double h, double s, double v, double *r, double *g, double *b);
39 |
40 |
41 | main(int argc, char *argv[]) {
42 | char message[message_size];
43 | int sock;
44 | struct sockaddr_in name;
45 | struct hostent *hp, *gethostbyname();
46 | int bytes;
47 |
48 | printf("Listen activating.\n");
49 |
50 | /* Create socket from which to read */
51 | sock = socket(AF_INET, SOCK_DGRAM, 0);
52 | if (sock < 0) {
53 | perror("Opening datagram socket");
54 | exit(1);
55 | }
56 |
57 | /* Bind our local address so that the client can send to us */
58 | bzero((char *) &name, sizeof(name));
59 | name.sin_family = AF_INET;
60 | name.sin_addr.s_addr = htonl(INADDR_ANY);
61 | name.sin_port = htons(SERVER_PORT);
62 |
63 | if (bind(sock, (struct sockaddr *) &name, sizeof(name))) {
64 | perror("binding datagram socket");
65 | exit(1);
66 | }
67 |
68 | printf("Socket has port number #%d\n", ntohs(name.sin_port));
69 | // -------- LPD8806 ----------
70 | lpd8806_buffer buf;
71 | int fd;
72 | int return_value;
73 | lpd8806_color *p;
74 | int i;
75 | double h, r, g, b;
76 |
77 | /* Open the device file using Low-Level IO */
78 | fd = open(device,O_WRONLY);
79 | if(fd<0) {
80 | fprintf(stderr,"Error %d: %s\n",errno,strerror(errno));
81 | exit(1);
82 | }
83 |
84 | /* Initialize the SPI bus for Total Control Lighting */
85 | return_value = spi_init(fd);
86 | if(return_value==-1) {
87 | fprintf(stderr,"SPI initialization error %d: %s\n",errno, strerror(errno));
88 | exit(1);
89 | }
90 |
91 | /* Initialize pixel buffer */
92 | if(lpd8806_init(&buf,leds)<0) {
93 | fprintf(stderr,"Pixel buffer initialization error: Not enough memory.\n");
94 | exit(1);
95 | }
96 |
97 | /* Set the gamma correction factors for each color */
98 | set_gamma(2.2,2.2,2.2);
99 |
100 | /* Blank the pixels */
101 | for(i=0;i 0) {
111 | // message[bytes] = '\0';
112 | // printf("recv: %s\n", message);
113 | printf("%d %d %d\n",message[i*3+0], message[i*3+1], message[i*3+2]);
114 |
115 | for (i=0; i < bytes/3; i++) {
116 | write_gamma_color(&buf.pixels[i], message[i*3+0], message[i*3+1], message[i*3+2]);
117 | }
118 | send_buffer(fd,&buf);
119 |
120 | usleep(1000);
121 | }
122 | }
123 |
124 | for(i=0;i
5 | * Copyright (c) 2014 Jeremy Garff
6 | *
7 | * All rights reserved.
8 | *
9 | * Redistribution and use in source and binary forms, with or without modification, are permitted
10 | * provided that the following conditions are met:
11 | *
12 | * 1. Redistributions of source code must retain the above copyright notice, this list of
13 | * conditions and the following disclaimer.
14 | * 2. Redistributions in binary form must reproduce the above copyright notice, this list
15 | * of conditions and the following disclaimer in the documentation and/or other materials
16 | * provided with the distribution.
17 | * 3. Neither the name of the owner nor the names of its contributors may be used to endorse
18 | * or promote products derived from this software without specific prior written permission.
19 | *
20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
21 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
22 | * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
23 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
25 | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
27 | * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | *
29 | */
30 |
31 | // compile using: scons
32 | // sudo apt-get install scons
33 |
34 | #include
35 | #include
36 | #include
37 | #include
38 | #include
39 | #include
40 | #include
41 | #include
42 | #include
43 | #include
44 |
45 | #include
46 | #include
47 | #include
48 |
49 | #include "clk.h"
50 | #include "gpio.h"
51 | #include "dma.h"
52 | #include "pwm.h"
53 |
54 | #include "ws2811.h"
55 |
56 |
57 | #define ARRAY_SIZE(stuff) (sizeof(stuff) / sizeof(stuff[0]))
58 | #define TARGET_FREQ WS2811_TARGET_FREQ
59 | #define GPIO_PIN 18
60 | #define GPIO_PIN_2 17
61 | #define DMA 5
62 | #define LED_COUNT 1024
63 | #define MESSAGE_SIZE 1024*3
64 |
65 | #define SERVER_PORT 3000
66 |
67 | ws2811_t ledstring =
68 | {
69 | .freq = TARGET_FREQ,
70 | .dmanum = DMA,
71 | .channel =
72 | {
73 | [0] =
74 | {
75 | .gpionum = GPIO_PIN,
76 | .count = LED_COUNT,
77 | .invert = 0,
78 | .brightness = 255,
79 | },
80 | [1] =
81 | {
82 | .gpionum = 0,
83 | .count = 0,
84 | .invert = 0,
85 | .brightness = 255,
86 | },
87 | },
88 | };
89 |
90 |
91 | static void ctrl_c_handler(int signum)
92 | {
93 | ws2811_fini(&ledstring);
94 | }
95 |
96 | static void setup_handlers(void)
97 | {
98 | struct sigaction sa =
99 | {
100 | .sa_handler = ctrl_c_handler,
101 | };
102 |
103 | sigaction(SIGKILL, &sa, NULL);
104 | }
105 |
106 | int main(int argc, char *argv[])
107 | {
108 | int ret = 0;
109 | setup_handlers();
110 |
111 | // --- WS281x SETUP ---
112 |
113 | if (ws2811_init(&ledstring))
114 | {
115 | printf("ws2811_init failed!\n");
116 | return -1;
117 | }
118 |
119 | // --- UDP SETUP ---
120 | char message[MESSAGE_SIZE];
121 | int sock;
122 | struct sockaddr_in name;
123 | //struct hostent *hp, *gethostbyname();
124 | int bytes;
125 |
126 | printf("Listen activating.\n");
127 |
128 | /* Create socket from which to read */
129 | sock = socket(AF_INET, SOCK_DGRAM, 0);
130 | if (sock < 0) {
131 | perror("Opening datagram socket");
132 | exit(1);
133 | }
134 |
135 | /* Bind our local address so that the client can send to us */
136 | bzero((char *) &name, sizeof(name));
137 | name.sin_family = AF_INET;
138 | name.sin_addr.s_addr = htonl(INADDR_ANY);
139 | name.sin_port = htons(SERVER_PORT);
140 |
141 | if (bind(sock, (struct sockaddr *) &name, sizeof(name))) {
142 | perror("binding datagram socket");
143 | exit(1);
144 | }
145 |
146 | printf("Socket has port number #%d\n", ntohs(name.sin_port));
147 |
148 | int i;
149 |
150 | while (1)
151 | {
152 | while ((bytes = read(sock, message, MESSAGE_SIZE)) > 0) {
153 | // message[bytes] = '\0';
154 | // printf("recv: %s\n", message);
155 | // printf("%d %d %d\n",message[i*3+0], message[i*3+1], message[i*3+2]);
156 |
157 | for (i=0; i < bytes/3; i++) {
158 | ledstring.channel[0].leds[i] = (message[i*3+0] << 16) | (message[i*3+1] << 8) | message[i*3+2];
159 | // &buf.pixels[i], message[i*3+0], message[i*3+1], message[i*3+2]);
160 | }
161 | if (ws2811_render(&ledstring))
162 | {
163 | ret = -1;
164 | break;
165 | }
166 |
167 | // 15 frames /sec
168 | // usleep(1000000 / 15);
169 | usleep(1000000 / 60);
170 |
171 | }
172 | }
173 |
174 | ws2811_fini(&ledstring);
175 |
176 | return ret;
177 | }
178 |
179 |
180 |
181 |
182 |
--------------------------------------------------------------------------------
/addons.make:
--------------------------------------------------------------------------------
1 | ofxDatGui
2 | ofxLedMapper
3 | ofxNetwork
4 | ofxSyphon
5 | ofxSpout2
6 | ofxXmlSettings
7 |
--------------------------------------------------------------------------------
/bin/data/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/.gitkeep
--------------------------------------------------------------------------------
/bin/data/grab.frag:
--------------------------------------------------------------------------------
1 | #version 330
2 |
3 | uniform sampler2DRect texIn;
4 | in vec2 ledPos;
5 | out vec4 vFragColor;
6 |
7 | vec4 colorConvert(vec4 col) {
8 | return vec4(col.g, col.b, col.r, 1.0);
9 | }
10 |
11 | void main()
12 | {
13 | vFragColor = colorConvert(texture(texIn, ledPos));
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/bin/data/grab.vert:
--------------------------------------------------------------------------------
1 | #version 330
2 |
3 | precision mediump float;
4 | uniform mat4 modelViewProjectionMatrix;
5 | uniform ivec2 outTexResolution;
6 |
7 | layout(location = 0) in vec3 VertexPosition;
8 | out vec2 ledPos;
9 |
10 | void main()
11 | {
12 | ledPos = VertexPosition.xy;
13 | gl_Position = modelViewProjectionMatrix
14 | * vec4(gl_VertexID % outTexResolution.x, 1+floor(gl_VertexID / outTexResolution.x),
15 | 0.0, 1.0);
16 | }
--------------------------------------------------------------------------------
/bin/data/gui/mouse_grab_circle.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/gui/mouse_grab_circle.jpg
--------------------------------------------------------------------------------
/bin/data/gui/mouse_grab_line.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/gui/mouse_grab_line.jpg
--------------------------------------------------------------------------------
/bin/data/gui/mouse_grab_matrix.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/gui/mouse_grab_matrix.jpg
--------------------------------------------------------------------------------
/bin/data/gui/mouse_select.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/gui/mouse_select.jpg
--------------------------------------------------------------------------------
/bin/data/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/icon.icns
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/fonts/MavenPro-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/fonts/MavenPro-Medium.ttf
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/fonts/MavenPro-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/fonts/MavenPro-Regular.ttf
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/fonts/Verdana.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/fonts/Verdana.ttf
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/ofxdatgui/icon-group-closed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/ofxdatgui/icon-group-closed.png
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/ofxdatgui/icon-group-open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/ofxdatgui/icon-group-open.png
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/ofxdatgui/icon-radio-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/ofxdatgui/icon-radio-off.png
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/ofxdatgui/icon-radio-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/ofxdatgui/icon-radio-on.png
--------------------------------------------------------------------------------
/bin/data/ofxbraitsch/ofxdatgui/picker-rainbow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/bin/data/ofxbraitsch/ofxdatgui/picker-rainbow.png
--------------------------------------------------------------------------------
/bin/lm-enigma.evb:
--------------------------------------------------------------------------------
1 |
2 | <>
3 | ledMapper.exe
4 | C:\Users\tim\source\repos\of10\apps\myApps\ledMapper\bin\ledMapper_boxed.exe
5 |
6 | True
7 | False
8 | False
9 |
10 |
11 | 3
12 | %DEFAULT FOLDER%
13 | 0
14 | False
15 | False
16 | 0
17 |
18 |
19 | 3
20 | data
21 | 0
22 | False
23 | False
24 | 0
25 |
26 |
27 | 3
28 | gui
29 | 0
30 | False
31 | False
32 | 0
33 |
34 |
35 | 2
36 | mouse_grab_circle.jpg
37 | data\gui\mouse_grab_circle.jpg
38 | False
39 | False
40 | 0
41 | False
42 | False
43 | False
44 | 0
45 |
46 |
47 | 2
48 | mouse_grab_line.jpg
49 | data\gui\mouse_grab_line.jpg
50 | False
51 | False
52 | 0
53 | False
54 | False
55 | False
56 | 0
57 |
58 |
59 | 2
60 | mouse_grab_matrix.jpg
61 | data\gui\mouse_grab_matrix.jpg
62 | False
63 | False
64 | 0
65 | False
66 | False
67 | False
68 | 0
69 |
70 |
71 | 2
72 | mouse_select.jpg
73 | data\gui\mouse_select.jpg
74 | False
75 | False
76 | 0
77 | False
78 | False
79 | False
80 | 0
81 |
82 |
83 |
84 |
85 | 2
86 | icon.icns
87 | data\icon.icns
88 | False
89 | False
90 | 0
91 | False
92 | False
93 | False
94 | 0
95 |
96 |
97 | 3
98 | ofxbraitsch
99 | 0
100 | False
101 | False
102 | 0
103 |
104 |
105 | 3
106 | fonts
107 | 0
108 | False
109 | False
110 | 0
111 |
112 |
113 | 2
114 | MavenPro-Medium.ttf
115 | data\ofxbraitsch\fonts\MavenPro-Medium.ttf
116 | False
117 | False
118 | 0
119 | False
120 | False
121 | False
122 | 0
123 |
124 |
125 | 2
126 | MavenPro-Regular.ttf
127 | data\ofxbraitsch\fonts\MavenPro-Regular.ttf
128 | False
129 | False
130 | 0
131 | False
132 | False
133 | False
134 | 0
135 |
136 |
137 | 2
138 | Verdana.ttf
139 | data\ofxbraitsch\fonts\Verdana.ttf
140 | False
141 | False
142 | 0
143 | False
144 | False
145 | False
146 | 0
147 |
148 |
149 |
150 |
151 | 3
152 | ofxdatgui
153 | 0
154 | False
155 | False
156 | 0
157 |
158 |
159 | 2
160 | icon-group-closed.png
161 | data\ofxbraitsch\ofxdatgui\icon-group-closed.png
162 | False
163 | False
164 | 0
165 | False
166 | False
167 | False
168 | 0
169 |
170 |
171 | 2
172 | icon-group-open.png
173 | data\ofxbraitsch\ofxdatgui\icon-group-open.png
174 | False
175 | False
176 | 0
177 | False
178 | False
179 | False
180 | 0
181 |
182 |
183 | 2
184 | icon-radio-off.png
185 | data\ofxbraitsch\ofxdatgui\icon-radio-off.png
186 | False
187 | False
188 | 0
189 | False
190 | False
191 | False
192 | 0
193 |
194 |
195 | 2
196 | icon-radio-on.png
197 | data\ofxbraitsch\ofxdatgui\icon-radio-on.png
198 | False
199 | False
200 | 0
201 | False
202 | False
203 | False
204 | 0
205 |
206 |
207 | 2
208 | picker-rainbow.png
209 | data\ofxbraitsch\ofxdatgui\picker-rainbow.png
210 | False
211 | False
212 | 0
213 | False
214 | False
215 | False
216 | 0
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 | 2
226 | fmodex64.dll
227 | fmodex64.dll
228 | False
229 | False
230 | 0
231 | False
232 | False
233 | False
234 | 0
235 |
236 |
237 | 2
238 | fmodexL64.dll
239 | fmodexL64.dll
240 | False
241 | False
242 | 0
243 | False
244 | False
245 | False
246 | 0
247 |
248 |
249 | 2
250 | FreeImage.dll
251 | FreeImage.dll
252 | False
253 | False
254 | 0
255 | False
256 | False
257 | False
258 | 0
259 |
260 |
261 |
262 |
263 |
264 |
265 | False
266 |
267 |
268 | 1
269 | True
270 | Classes
271 | 0
272 |
273 |
274 |
275 |
276 | 1
277 | True
278 | User
279 | 0
280 |
281 |
282 |
283 |
284 | 1
285 | True
286 | Machine
287 | 0
288 |
289 |
290 |
291 |
292 | 1
293 | True
294 | Users
295 | 0
296 |
297 |
298 |
299 |
300 | 1
301 | True
302 | Config
303 | 0
304 |
305 |
306 |
307 |
308 |
309 |
310 | False
311 |
312 |
313 | False
314 | True
315 | True
316 |
317 | >
318 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/icon.rc:
--------------------------------------------------------------------------------
1 | // Icon Resource Definition
2 | #define MAIN_ICON 102
3 |
4 | #if defined(_DEBUG)
5 | MAIN_ICON ICON "ledmapper_icon.ico"
6 | #else
7 | MAIN_ICON ICON "ledmapper_icon.ico"
8 | #endif
9 |
--------------------------------------------------------------------------------
/images/RPI_3_ledMapper_pinout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/images/RPI_3_ledMapper_pinout.png
--------------------------------------------------------------------------------
/images/ledMapper_icon_200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/images/ledMapper_icon_200.png
--------------------------------------------------------------------------------
/images/ledMapper_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/images/ledMapper_screenshot.png
--------------------------------------------------------------------------------
/ledMapper.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 12.00
2 | # Visual Studio 15
3 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ledMapper", "ledMapper.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 |
--------------------------------------------------------------------------------
/ledMapper.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 | ledMapper
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\ofxDatGui\src;..\..\..\addons\ofxDatGui\src\components;..\..\..\addons\ofxDatGui\src\core;..\..\..\addons\ofxDatGui\src\libs;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data\raleway;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata\xcschemes;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\readme-img;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\themes;..\..\..\addons\ofxLedMapper\src;..\..\..\addons\ofxNetwork\src;..\..\..\addons\ofxSpout2\libs;..\..\..\addons\ofxSpout2\libs\include;..\..\..\addons\ofxSpout2\libs\src;..\..\..\addons\ofxSpout2\src;..\..\..\addons\ofxXmlSettings\libs;..\..\..\addons\ofxXmlSettings\src
104 | CompileAsCpp
105 | $(IntDir)/%(RelativeDir)/
106 |
107 |
108 | true
109 | Console
110 | false
111 | %(AdditionalDependencies)
112 | %(AdditionalLibraryDirectories)
113 |
114 |
115 |
116 |
117 |
118 | Disabled
119 | EnableFastChecks
120 | %(PreprocessorDefinitions)
121 | MultiThreadedDebugDLL
122 | Level3
123 | %(AdditionalIncludeDirectories);src;..\..\..\addons\ofxDatGui\src;..\..\..\addons\ofxDatGui\src\components;..\..\..\addons\ofxDatGui\src\core;..\..\..\addons\ofxDatGui\src\libs;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data\raleway;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata\xcschemes;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\readme-img;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\themes;..\..\..\addons\ofxLedMapper\src;..\..\..\addons\ofxNetwork\src;..\..\..\addons\ofxSpout2\libs;..\..\..\addons\ofxSpout2\libs\include;..\..\..\addons\ofxSpout2\libs\src;..\..\..\addons\ofxSpout2\src;..\..\..\addons\ofxXmlSettings\libs;..\..\..\addons\ofxXmlSettings\src
124 | CompileAsCpp
125 | $(IntDir)/%(RelativeDir)/
126 | true
127 |
128 |
129 | true
130 | Windows
131 | false
132 | %(AdditionalDependencies)
133 | %(AdditionalLibraryDirectories)
134 |
135 |
136 |
137 |
138 |
139 | false
140 | %(PreprocessorDefinitions)
141 | MultiThreadedDLL
142 | Level3
143 | %(AdditionalIncludeDirectories);src;..\..\..\addons\ofxDatGui\src;..\..\..\addons\ofxDatGui\src\components;..\..\..\addons\ofxDatGui\src\core;..\..\..\addons\ofxDatGui\src\libs;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data\raleway;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata\xcschemes;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\readme-img;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\themes;..\..\..\addons\ofxLedMapper\src;..\..\..\addons\ofxNetwork\src;..\..\..\addons\ofxSpout2\libs;..\..\..\addons\ofxSpout2\libs\include;..\..\..\addons\ofxSpout2\libs\src;..\..\..\addons\ofxSpout2\src;..\..\..\addons\ofxXmlSettings\libs;..\..\..\addons\ofxXmlSettings\src
144 | CompileAsCpp
145 | $(IntDir)/%(RelativeDir)/
146 | true
147 |
148 |
149 | false
150 | false
151 | Console
152 | true
153 | true
154 | false
155 | %(AdditionalDependencies)
156 | %(AdditionalLibraryDirectories)
157 |
158 |
159 |
160 |
161 |
162 | false
163 | %(PreprocessorDefinitions)
164 | MultiThreadedDLL
165 | Level3
166 | %(AdditionalIncludeDirectories);src;..\..\..\addons\ofxDatGui\src;..\..\..\addons\ofxDatGui\src\components;..\..\..\addons\ofxDatGui\src\core;..\..\..\addons\ofxDatGui\src\libs;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\bin\data\raleway;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\example-ofxSmartFont.xcodeproj\xcshareddata\xcschemes;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\example-ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\readme-img;..\..\..\addons\ofxDatGui\src\libs\ofxSmartFont\src;..\..\..\addons\ofxDatGui\src\themes;..\..\..\addons\ofxLedMapper\src;..\..\..\addons\ofxNetwork\src;..\..\..\addons\ofxSpout2\libs;..\..\..\addons\ofxSpout2\libs\include;..\..\..\addons\ofxSpout2\libs\src;..\..\..\addons\ofxSpout2\src;..\..\..\addons\ofxXmlSettings\libs;..\..\..\addons\ofxXmlSettings\src
167 | CompileAsCpp
168 | $(IntDir)/%(RelativeDir)/
169 |
170 |
171 | false
172 | false
173 | Windows
174 | true
175 | true
176 | false
177 | %(AdditionalDependencies)
178 | %(AdditionalLibraryDirectories)
179 |
180 |
181 |
182 |
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 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 | {5837595d-aca9-485c-8e76-729040ce4b0b}
273 |
274 |
275 |
276 |
277 | /D_DEBUG %(AdditionalOptions)
278 | /D_DEBUG %(AdditionalOptions)
279 | $(OF_ROOT)\libs\openFrameworksCompiled\project\vs
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
--------------------------------------------------------------------------------
/ledMapper.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | src
6 |
7 |
8 | src
9 |
10 |
11 | src
12 |
13 |
14 | src
15 |
16 |
17 | addons\ofxDatGui\src\core
18 |
19 |
20 | addons\ofxDatGui\src\libs\ofxSmartFont\src
21 |
22 |
23 | addons\ofxDatGui\src
24 |
25 |
26 | addons\ofxLedMapper\src
27 |
28 |
29 | addons\ofxLedMapper\src
30 |
31 |
32 | addons\ofxNetwork\src
33 |
34 |
35 | addons\ofxNetwork\src
36 |
37 |
38 | addons\ofxNetwork\src
39 |
40 |
41 | addons\ofxNetwork\src
42 |
43 |
44 | addons\ofxNetwork\src
45 |
46 |
47 | addons\ofxSpout2\src
48 |
49 |
50 | addons\ofxSpout2\src
51 |
52 |
53 | addons\ofxSpout2\libs\src
54 |
55 |
56 | addons\ofxSpout2\libs\src
57 |
58 |
59 | addons\ofxSpout2\libs\src
60 |
61 |
62 | addons\ofxSpout2\libs\src
63 |
64 |
65 | addons\ofxSpout2\libs\src
66 |
67 |
68 | addons\ofxSpout2\libs\src
69 |
70 |
71 | addons\ofxSpout2\libs\src
72 |
73 |
74 | addons\ofxSpout2\libs\src
75 |
76 |
77 | addons\ofxSpout2\libs\src
78 |
79 |
80 | addons\ofxXmlSettings\src
81 |
82 |
83 | addons\ofxXmlSettings\libs
84 |
85 |
86 | addons\ofxXmlSettings\libs
87 |
88 |
89 | addons\ofxXmlSettings\libs
90 |
91 |
92 | addons\ofxLedMapper\src\output
93 |
94 |
95 |
96 |
97 | {d8376475-7454-4a24-b08a-aac121d3ad6f}
98 |
99 |
100 | {71834F65-F3A9-211E-73B8-DC85}
101 |
102 |
103 | {B36B06DF-1AA4-00D4-5A1B-6893}
104 |
105 |
106 | {CAA2E9BA-611F-99B2-780A-B8BA}
107 |
108 |
109 | {8EFE15E2-401E-A657-3818-AD66}
110 |
111 |
112 | {6835CAB6-404A-D3AD-148B-CD60}
113 |
114 |
115 | {ABAEF2A2-DCDC-DB83-4614-EB2B}
116 |
117 |
118 | {A694AB8C-4705-277A-3AC8-2B8E}
119 |
120 |
121 | {11149A5A-9ACC-C40C-6630-21F5}
122 |
123 |
124 | {2646318C-49AB-44C5-70D8-23E6}
125 |
126 |
127 | {A96BFA17-5DD8-8C27-30D2-8E1A}
128 |
129 |
130 | {84117DA6-D35A-5A56-BA02-FB0C}
131 |
132 |
133 | {01A15744-29A6-108D-08E9-83A7}
134 |
135 |
136 | {3D1C10C7-8F35-E796-9C70-F5F3}
137 |
138 |
139 | {DB49CB87-27C8-0C02-F602-86D7}
140 |
141 |
142 | {917203BC-05C2-034C-1B38-B098}
143 |
144 |
145 | {68A64BA7-C89A-C657-EC7A-10D6}
146 |
147 |
148 | {76E15BF2-5348-07F8-F8E1-A911}
149 |
150 |
151 | {EED9D931-64B9-6EC6-5E54-A96C}
152 |
153 |
154 | {877F005D-13E6-0592-1D97-F2E3}
155 |
156 |
157 | {CCB2AC63-49D2-977C-CFE8-AEAD}
158 |
159 |
160 | {687714A8-1662-FA1C-261F-50F0}
161 |
162 |
163 | {53e9c937-5ffc-41f2-98b0-5579218fc3e7}
164 |
165 |
166 |
167 |
168 | src
169 |
170 |
171 | src
172 |
173 |
174 | addons\ofxDatGui\src\components
175 |
176 |
177 | addons\ofxDatGui\src\components
178 |
179 |
180 | addons\ofxDatGui\src\components
181 |
182 |
183 | addons\ofxDatGui\src\components
184 |
185 |
186 | addons\ofxDatGui\src\components
187 |
188 |
189 | addons\ofxDatGui\src\components
190 |
191 |
192 | addons\ofxDatGui\src\components
193 |
194 |
195 | addons\ofxDatGui\src\components
196 |
197 |
198 | addons\ofxDatGui\src\components
199 |
200 |
201 | addons\ofxDatGui\src\components
202 |
203 |
204 | addons\ofxDatGui\src\components
205 |
206 |
207 | addons\ofxDatGui\src\components
208 |
209 |
210 | addons\ofxDatGui\src\components
211 |
212 |
213 | addons\ofxDatGui\src\components
214 |
215 |
216 | addons\ofxDatGui\src\core
217 |
218 |
219 | addons\ofxDatGui\src\core
220 |
221 |
222 | addons\ofxDatGui\src\core
223 |
224 |
225 | addons\ofxDatGui\src\core
226 |
227 |
228 | addons\ofxDatGui\src\libs\ofxSmartFont\src
229 |
230 |
231 | addons\ofxDatGui\src
232 |
233 |
234 | addons\ofxDatGui\src\themes
235 |
236 |
237 | addons\ofxDatGui\src\themes
238 |
239 |
240 | addons\ofxLedMapper\src
241 |
242 |
243 | addons\ofxLedMapper\src
244 |
245 |
246 | addons\ofxLedMapper\src
247 |
248 |
249 | addons\ofxLedMapper\src
250 |
251 |
252 | addons\ofxLedMapper\src
253 |
254 |
255 | addons\ofxLedMapper\src
256 |
257 |
258 | addons\ofxNetwork\src
259 |
260 |
261 | addons\ofxNetwork\src
262 |
263 |
264 | addons\ofxNetwork\src
265 |
266 |
267 | addons\ofxNetwork\src
268 |
269 |
270 | addons\ofxNetwork\src
271 |
272 |
273 | addons\ofxNetwork\src
274 |
275 |
276 | addons\ofxNetwork\src
277 |
278 |
279 | addons\ofxNetwork\src
280 |
281 |
282 | addons\ofxSpout2\src
283 |
284 |
285 | addons\ofxSpout2\src
286 |
287 |
288 | addons\ofxSpout2\libs\include
289 |
290 |
291 | addons\ofxSpout2\libs\include
292 |
293 |
294 | addons\ofxSpout2\libs\include
295 |
296 |
297 | addons\ofxSpout2\libs\include
298 |
299 |
300 | addons\ofxSpout2\libs\include
301 |
302 |
303 | addons\ofxSpout2\libs\include
304 |
305 |
306 | addons\ofxSpout2\libs\include
307 |
308 |
309 | addons\ofxSpout2\libs\include
310 |
311 |
312 | addons\ofxSpout2\libs\include
313 |
314 |
315 | addons\ofxSpout2\libs\include
316 |
317 |
318 | addons\ofxSpout2\libs\include
319 |
320 |
321 | addons\ofxXmlSettings\src
322 |
323 |
324 | addons\ofxXmlSettings\libs
325 |
326 |
327 | addons\ofxLedMapper\src\output
328 |
329 |
330 | addons\ofxLedMapper\src\output
331 |
332 |
333 |
334 |
335 |
336 |
--------------------------------------------------------------------------------
/ledMapper.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 0294CC40A9B329B0BC2E56EA /* ofxSmartFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2F86770A7EF44B62E23A5B /* ofxSmartFont.cpp */; };
11 | 11DF9AB1B4EAA63E3B190CA0 /* ofxSyphonServerDirectory.mm in Sources */ = {isa = PBXBuildFile; fileRef = E723BEF4C55D236E24639608 /* ofxSyphonServerDirectory.mm */; };
12 | 125506CD3E5F428AAFE5CC65 /* ofxTCPManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F399B91E98DC31CDA6DDACB4 /* ofxTCPManager.cpp */; };
13 | 1F558B76FB3412843DDAA031 /* ofxSyphonClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 03EA4DA95B5E1B8409FC058E /* ofxSyphonClient.mm */; };
14 | 286029986107AE7D1E316D5F /* ofxLedRpi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CD3B211D65ECBA1185B3265 /* ofxLedRpi.cpp */; };
15 | 2C0BFEEEA8FC74648567F8D0 /* ledMapperApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7EBBFE8BF9D851CEAB1AF783 /* ledMapperApp.cpp */; };
16 | 3A68D60BBC83A9B2916DD444 /* ofxLedMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57A5AA75AAA997CD805B12E0 /* ofxLedMapper.cpp */; };
17 | 4D508D34156E7076531D9084 /* Syphon.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = D58DCB2C0AEFDE6171E29540 /* Syphon.framework */; };
18 | 5A4349E9754D6FA14C0F2A3A /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */; };
19 | 63B57AC5BF4EF088491E0317 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */; };
20 | 661A1991F5CE4CCC2919D8E7 /* ofxNetworkUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE30B18B42BAF0E92CB140E5 /* ofxNetworkUtils.cpp */; };
21 | 66CA411C5A9664E27326BF36 /* ofxTCPServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C085E327DAB912CFA2A443D /* ofxTCPServer.cpp */; };
22 | 8D60C222CBD3F869382832E9 /* ofxSyphonServer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 32D6F27DC6308427F9A278C1 /* ofxSyphonServer.mm */; };
23 | 933A2227713C720CEFF80FD9 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */; };
24 | 960D20B191346612D5C05A6A /* ofxTCPClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF88F02779DD820913ACEA06 /* ofxTCPClient.cpp */; };
25 | 9D44DC88EF9E7991B4A09951 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */; };
26 | C1F59DBDF31035FEDBDE8018 /* readme.md in Sources */ = {isa = PBXBuildFile; fileRef = CC9FA26E1F7B54F1C5CB1CE4 /* readme.md */; };
27 | C9109422648B170B07A778CF /* SyphonNameboundClient.m in Sources */ = {isa = PBXBuildFile; fileRef = E3405C5AE387BDDC2AD19473 /* SyphonNameboundClient.m */; };
28 | C9466C434D1CF8AB968D298D /* ofxDatGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26490D7CC31EF7D6ED5F925A /* ofxDatGui.cpp */; };
29 | CB70B178311B16CC26AC0B3E /* Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7B46A3AD8E3B2B2B99C0D3D /* Player.cpp */; };
30 | D3C1C48E59CAA2D68C0DD477 /* ofxDatGuiComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A3E3B8F332A1A3C7EDF4998 /* ofxDatGuiComponent.cpp */; };
31 | E09536E345D4B6B8E303FAC3 /* ofxSmartFont.png in Sources */ = {isa = PBXBuildFile; fileRef = 5BF1E1022187F07E14503CFD /* ofxSmartFont.png */; };
32 | E1A3FD40C8BCD507345F1126 /* Syphon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D58DCB2C0AEFDE6171E29540 /* Syphon.framework */; };
33 | E2564CF7DDB3713772BB682E /* ofxUDPManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35BB9BB90DBABFD3B39F8DB6 /* ofxUDPManager.cpp */; };
34 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; };
35 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; };
36 | F7A0454B4E90992C5F26200E /* ofxLedDmx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9777D7DB866861604412EC2B /* ofxLedDmx.cpp */; };
37 | FBF33B1A4D323955BA965F7B /* ofxLedController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B30F06EFD0AC0041DC16B85 /* ofxLedController.cpp */; };
38 | /* End PBXBuildFile section */
39 |
40 | /* Begin PBXContainerItemProxy section */
41 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = {
42 | isa = PBXContainerItemProxy;
43 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
44 | proxyType = 2;
45 | remoteGlobalIDString = E4B27C1510CBEB8E00536013;
46 | remoteInfo = openFrameworks;
47 | };
48 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = {
49 | isa = PBXContainerItemProxy;
50 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
51 | proxyType = 1;
52 | remoteGlobalIDString = E4B27C1410CBEB8E00536013;
53 | remoteInfo = openFrameworks;
54 | };
55 | /* End PBXContainerItemProxy section */
56 |
57 | /* Begin PBXCopyFilesBuildPhase section */
58 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = {
59 | isa = PBXCopyFilesBuildPhase;
60 | buildActionMask = 2147483647;
61 | dstPath = "";
62 | dstSubfolderSpec = 10;
63 | files = (
64 | 4D508D34156E7076531D9084 /* Syphon.framework in CopyFiles */,
65 | );
66 | runOnlyForDeploymentPostprocessing = 0;
67 | };
68 | /* End PBXCopyFilesBuildPhase section */
69 |
70 | /* Begin PBXFileReference section */
71 | 01DCC0911400F9ACF5B65578 /* ofxXmlSettings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxXmlSettings.h; path = ../../../addons/ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = SOURCE_ROOT; };
72 | 01FAC3552E00C3620035EA2F /* ofxSyphonClient.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxSyphonClient.h; path = ../../../addons/ofxSyphon/src/ofxSyphonClient.h; sourceTree = SOURCE_ROOT; };
73 | 03EA4DA95B5E1B8409FC058E /* ofxSyphonClient.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = ofxSyphonClient.mm; path = ../../../addons/ofxSyphon/src/ofxSyphonClient.mm; sourceTree = SOURCE_ROOT; };
74 | 04C339FF9ADCF05DF2DA62A3 /* ofxDatGuiTextInputField.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiTextInputField.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiTextInputField.h; sourceTree = SOURCE_ROOT; };
75 | 0A42C807BEF3A18E8E105A3B /* ofxDatGuiTimeGraph.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiTimeGraph.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiTimeGraph.h; sourceTree = SOURCE_ROOT; };
76 | 0FB83AC7747296DD35C1C295 /* ofxSyphon.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxSyphon.h; path = ../../../addons/ofxSyphon/src/ofxSyphon.h; sourceTree = SOURCE_ROOT; };
77 | 163ABB7F5E22B6A0ECF51B07 /* ofxTCPSettings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxTCPSettings.h; path = ../../../addons/ofxNetwork/src/ofxTCPSettings.h; sourceTree = SOURCE_ROOT; };
78 | 1A3E3B8F332A1A3C7EDF4998 /* ofxDatGuiComponent.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxDatGuiComponent.cpp; path = ../../../addons/ofxDatGui/src/core/ofxDatGuiComponent.cpp; sourceTree = SOURCE_ROOT; };
79 | 1C085E327DAB912CFA2A443D /* ofxTCPServer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxTCPServer.cpp; path = ../../../addons/ofxNetwork/src/ofxTCPServer.cpp; sourceTree = SOURCE_ROOT; };
80 | 1DFA26F2C6BBD1B8AC24C0B1 /* ofxNetworkUtils.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxNetworkUtils.h; path = ../../../addons/ofxNetwork/src/ofxNetworkUtils.h; sourceTree = SOURCE_ROOT; };
81 | 21E1E3071CB7B11914428B62 /* ofxDatGuiThemes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiThemes.h; path = ../../../addons/ofxDatGui/src/themes/ofxDatGuiThemes.h; sourceTree = SOURCE_ROOT; };
82 | 26490D7CC31EF7D6ED5F925A /* ofxDatGui.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxDatGui.cpp; path = ../../../addons/ofxDatGui/src/ofxDatGui.cpp; sourceTree = SOURCE_ROOT; };
83 | 26EF3E71A07C6948EAF6709E /* ofxTCPManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxTCPManager.h; path = ../../../addons/ofxNetwork/src/ofxTCPManager.h; sourceTree = SOURCE_ROOT; };
84 | 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = tinyxml.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxml.cpp; sourceTree = SOURCE_ROOT; };
85 | 2F519EB3B0DCD7378FB86ABE /* ofxUDPManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxUDPManager.h; path = ../../../addons/ofxNetwork/src/ofxUDPManager.h; sourceTree = SOURCE_ROOT; };
86 | 30841703B7AC8487D16FB4AA /* ofxTCPServer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxTCPServer.h; path = ../../../addons/ofxNetwork/src/ofxTCPServer.h; sourceTree = SOURCE_ROOT; };
87 | 32D6F27DC6308427F9A278C1 /* ofxSyphonServer.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = ofxSyphonServer.mm; path = ../../../addons/ofxSyphon/src/ofxSyphonServer.mm; sourceTree = SOURCE_ROOT; };
88 | 337B812806A0E7D26A029E5A /* ofxSyphonServerDirectory.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxSyphonServerDirectory.h; path = ../../../addons/ofxSyphon/src/ofxSyphonServerDirectory.h; sourceTree = SOURCE_ROOT; };
89 | 35BB9BB90DBABFD3B39F8DB6 /* ofxUDPManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxUDPManager.cpp; path = ../../../addons/ofxNetwork/src/ofxUDPManager.cpp; sourceTree = SOURCE_ROOT; };
90 | 36E40AF65DF6F84EAAD2B281 /* ofxLedRpi.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedRpi.h; path = ../../../addons/ofxLedMapper/src/output/ofxLedRpi.h; sourceTree = SOURCE_ROOT; };
91 | 3CD3B211D65ECBA1185B3265 /* ofxLedRpi.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxLedRpi.cpp; path = ../../../addons/ofxLedMapper/src/output/ofxLedRpi.cpp; sourceTree = SOURCE_ROOT; };
92 | 3EE52579F19D9666EFBD2FB0 /* ofxDatGuiButtonImage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiButtonImage.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiButtonImage.h; sourceTree = SOURCE_ROOT; };
93 | 422C4E1AAC7EC4D30B17702D /* ofxDatGuiIntObject.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiIntObject.h; path = ../../../addons/ofxDatGui/src/core/ofxDatGuiIntObject.h; sourceTree = SOURCE_ROOT; };
94 | 4505C12B49020110D28FB6D1 /* ofxSmartFont.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxSmartFont.h; path = ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src/ofxSmartFont.h; sourceTree = SOURCE_ROOT; };
95 | 46BBCC26D60B589958BF0D03 /* ofxSyphonServer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxSyphonServer.h; path = ../../../addons/ofxSyphon/src/ofxSyphonServer.h; sourceTree = SOURCE_ROOT; };
96 | 4A323001EC8050B5E3B8971F /* ofxLedGrabLine.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedGrabLine.h; path = ../../../addons/ofxLedMapper/src/ofxLedGrabLine.h; sourceTree = SOURCE_ROOT; };
97 | 4B30F06EFD0AC0041DC16B85 /* ofxLedController.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxLedController.cpp; path = ../../../addons/ofxLedMapper/src/ofxLedController.cpp; sourceTree = SOURCE_ROOT; };
98 | 4DEC3C2F68AAF4858A6FE2B9 /* ofxLedMapper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedMapper.h; path = ../../../addons/ofxLedMapper/src/ofxLedMapper.h; sourceTree = SOURCE_ROOT; };
99 | 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxXmlSettings.cpp; path = ../../../addons/ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = SOURCE_ROOT; };
100 | 545BBA6F6669BED2DA497BC6 /* ofxDatGuiScrollView.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiScrollView.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiScrollView.h; sourceTree = SOURCE_ROOT; };
101 | 57A5AA75AAA997CD805B12E0 /* ofxLedMapper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxLedMapper.cpp; path = ../../../addons/ofxLedMapper/src/ofxLedMapper.cpp; sourceTree = SOURCE_ROOT; };
102 | 5BF1E1022187F07E14503CFD /* ofxSmartFont.png */ = {isa = PBXFileReference; explicitFileType = file; fileEncoding = 4; name = ofxSmartFont.png; path = "../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme-img/ofxSmartFont.png"; sourceTree = SOURCE_ROOT; };
103 | 64C563B8158C37E9D07AE29D /* ofxDatGuiFRM.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiFRM.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiFRM.h; sourceTree = SOURCE_ROOT; };
104 | 71FFD50EA75BCC76F0C58D12 /* SyphonNameboundClient.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = SyphonNameboundClient.h; path = ../../../addons/ofxSyphon/libs/Syphon/src/SyphonNameboundClient.h; sourceTree = SOURCE_ROOT; };
105 | 744031A3E8F8DAF9FE6F3EA8 /* ofxDatGuiGroups.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiGroups.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiGroups.h; sourceTree = SOURCE_ROOT; };
106 | 787315438BF1DD00C81DF413 /* ofxDatGuiLabel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiLabel.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiLabel.h; sourceTree = SOURCE_ROOT; };
107 | 7EBBFE8BF9D851CEAB1AF783 /* ledMapperApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ledMapperApp.cpp; path = src/ledMapperApp.cpp; sourceTree = SOURCE_ROOT; };
108 | 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = tinyxmlerror.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxmlerror.cpp; sourceTree = SOURCE_ROOT; };
109 | 902724601B82C6AD81BBCD71 /* ofxDatGui2dPad.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGui2dPad.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGui2dPad.h; sourceTree = SOURCE_ROOT; };
110 | 946FF9210F175C3956CB16B6 /* ledMapperApp.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ledMapperApp.h; path = src/ledMapperApp.h; sourceTree = SOURCE_ROOT; };
111 | 9705D66270ED89ECA6E6FECE /* ofxDatGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGui.h; path = ../../../addons/ofxDatGui/src/ofxDatGui.h; sourceTree = SOURCE_ROOT; };
112 | 9777D7DB866861604412EC2B /* ofxLedDmx.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxLedDmx.cpp; path = ../../../addons/ofxLedMapper/src/output/ofxLedDmx.cpp; sourceTree = SOURCE_ROOT; };
113 | 9B5051062C6A871714E6F5F4 /* ofxDatGuiConstants.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiConstants.h; path = ../../../addons/ofxDatGui/src/core/ofxDatGuiConstants.h; sourceTree = SOURCE_ROOT; };
114 | 9DB1266C68243123FFBAB6C1 /* json.hpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = json.hpp; path = ../../../addons/ofxLedMapper/src/json.hpp; sourceTree = SOURCE_ROOT; };
115 | A507F73A41048908D4FEF0A2 /* Common.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = Common.h; path = ../../../addons/ofxLedMapper/src/Common.h; sourceTree = SOURCE_ROOT; };
116 | A7B46A3AD8E3B2B2B99C0D3D /* Player.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = Player.cpp; path = src/Player.cpp; sourceTree = SOURCE_ROOT; };
117 | A837538A506CA52AF2214190 /* Player.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = Player.h; path = src/Player.h; sourceTree = SOURCE_ROOT; };
118 | AE30B18B42BAF0E92CB140E5 /* ofxNetworkUtils.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxNetworkUtils.cpp; path = ../../../addons/ofxNetwork/src/ofxNetworkUtils.cpp; sourceTree = SOURCE_ROOT; };
119 | B21E7E5F548EEA92F368040B /* tinyxml.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = tinyxml.h; path = ../../../addons/ofxXmlSettings/libs/tinyxml.h; sourceTree = SOURCE_ROOT; };
120 | B498F0559F473CF855EF6062 /* ofxDatGuiTheme.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiTheme.h; path = ../../../addons/ofxDatGui/src/themes/ofxDatGuiTheme.h; sourceTree = SOURCE_ROOT; };
121 | B71E597923645D590CF2B6CA /* ofxLedOutput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedOutput.h; path = ../../../addons/ofxLedMapper/src/output/ofxLedOutput.h; sourceTree = SOURCE_ROOT; };
122 | BCC84C6EB3417706F4F762F0 /* ofxDatGuiComponent.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiComponent.h; path = ../../../addons/ofxDatGui/src/core/ofxDatGuiComponent.h; sourceTree = SOURCE_ROOT; };
123 | BF88F02779DD820913ACEA06 /* ofxTCPClient.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxTCPClient.cpp; path = ../../../addons/ofxNetwork/src/ofxTCPClient.cpp; sourceTree = SOURCE_ROOT; };
124 | C085A33340AB0C1DB647AC2F /* ofxDatGuiTextInput.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiTextInput.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiTextInput.h; sourceTree = SOURCE_ROOT; };
125 | C1278B7557E7CD889064CEB8 /* ofJson.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofJson.h; path = ../../../addons/ofxLedMapper/src/ofJson.h; sourceTree = SOURCE_ROOT; };
126 | C84ED7FCC017328C6F58283D /* ofxDatGuiColorPicker.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiColorPicker.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiColorPicker.h; sourceTree = SOURCE_ROOT; };
127 | C8C9B823D7872F9CBF03A813 /* ofxTCPClient.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxTCPClient.h; path = ../../../addons/ofxNetwork/src/ofxTCPClient.h; sourceTree = SOURCE_ROOT; };
128 | CC9FA26E1F7B54F1C5CB1CE4 /* readme.md */ = {isa = PBXFileReference; explicitFileType = file; fileEncoding = 4; name = readme.md; path = ../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme.md; sourceTree = SOURCE_ROOT; };
129 | CDF7278CB636137FE7BF91A5 /* ofxDatGuiMatrix.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiMatrix.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiMatrix.h; sourceTree = SOURCE_ROOT; };
130 | D0D6A66BEBA820EA1D396889 /* ofxDatGuiSlider.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiSlider.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiSlider.h; sourceTree = SOURCE_ROOT; };
131 | D38F3868AA05BA46C75D3C42 /* ofxLedGrabObject.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedGrabObject.h; path = ../../../addons/ofxLedMapper/src/ofxLedGrabObject.h; sourceTree = SOURCE_ROOT; };
132 | D58DCB2C0AEFDE6171E29540 /* Syphon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Syphon.framework; path = ../../../addons/ofxSyphon/libs/Syphon/lib/osx/Syphon.framework; sourceTree = ""; };
133 | D67FE8EDE92985070F3FD992 /* ofxUDPSettings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxUDPSettings.h; path = ../../../addons/ofxNetwork/src/ofxUDPSettings.h; sourceTree = SOURCE_ROOT; };
134 | DA137B8F97182895CF34D714 /* ofxLedController.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedController.h; path = ../../../addons/ofxLedMapper/src/ofxLedController.h; sourceTree = SOURCE_ROOT; };
135 | DD2F86770A7EF44B62E23A5B /* ofxSmartFont.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxSmartFont.cpp; path = ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src/ofxSmartFont.cpp; sourceTree = SOURCE_ROOT; };
136 | DF371044B637F86956E83B66 /* ofxLedPixelGrab.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedPixelGrab.h; path = ../../../addons/ofxLedMapper/src/ofxLedPixelGrab.h; sourceTree = SOURCE_ROOT; };
137 | E100ED9DCB412957A879CD5A /* ofxDatGuiControls.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiControls.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiControls.h; sourceTree = SOURCE_ROOT; };
138 | E1144CF43D89A9FAB71ACCE5 /* ofxLedDmx.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxLedDmx.h; path = ../../../addons/ofxLedMapper/src/output/ofxLedDmx.h; sourceTree = SOURCE_ROOT; };
139 | E3405C5AE387BDDC2AD19473 /* SyphonNameboundClient.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = SyphonNameboundClient.m; path = ../../../addons/ofxSyphon/libs/Syphon/src/SyphonNameboundClient.m; sourceTree = SOURCE_ROOT; };
140 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; };
141 | E4B69B5B0A3A1756003C02F2 /* ledMapperDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ledMapperDebug.app; sourceTree = BUILT_PRODUCTS_DIR; };
142 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; };
143 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; };
144 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; };
145 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; };
146 | E723BEF4C55D236E24639608 /* ofxSyphonServerDirectory.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = ofxSyphonServerDirectory.mm; path = ../../../addons/ofxSyphon/src/ofxSyphonServerDirectory.mm; sourceTree = SOURCE_ROOT; };
147 | F399B91E98DC31CDA6DDACB4 /* ofxTCPManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofxTCPManager.cpp; path = ../../../addons/ofxNetwork/src/ofxTCPManager.cpp; sourceTree = SOURCE_ROOT; };
148 | F59384ED57A7C6A7A8B0351D /* ofxDatGuiEvents.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiEvents.h; path = ../../../addons/ofxDatGui/src/core/ofxDatGuiEvents.h; sourceTree = SOURCE_ROOT; };
149 | F66993296A3AEEC70FD444F5 /* ofxNetwork.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxNetwork.h; path = ../../../addons/ofxNetwork/src/ofxNetwork.h; sourceTree = SOURCE_ROOT; };
150 | FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = tinyxmlparser.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxmlparser.cpp; sourceTree = SOURCE_ROOT; };
151 | FDA86F4C2F1F1964D35391C6 /* ofxDatGuiButton.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = ofxDatGuiButton.h; path = ../../../addons/ofxDatGui/src/components/ofxDatGuiButton.h; sourceTree = SOURCE_ROOT; };
152 | /* End PBXFileReference section */
153 |
154 | /* Begin PBXFrameworksBuildPhase section */
155 | E4B69B590A3A1756003C02F2 /* Frameworks */ = {
156 | isa = PBXFrameworksBuildPhase;
157 | buildActionMask = 2147483647;
158 | files = (
159 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */,
160 | E1A3FD40C8BCD507345F1126 /* Syphon.framework in Frameworks */,
161 | );
162 | runOnlyForDeploymentPostprocessing = 0;
163 | };
164 | /* End PBXFrameworksBuildPhase section */
165 |
166 | /* Begin PBXGroup section */
167 | 037363833F55AC730CC42F3E /* src */ = {
168 | isa = PBXGroup;
169 | children = (
170 | DD2F86770A7EF44B62E23A5B /* ofxSmartFont.cpp */,
171 | 4505C12B49020110D28FB6D1 /* ofxSmartFont.h */,
172 | );
173 | name = src;
174 | sourceTree = "";
175 | };
176 | 09D35E9640961BEC4FAAFB0D /* output */ = {
177 | isa = PBXGroup;
178 | children = (
179 | A507F73A41048908D4FEF0A2 /* Common.h */,
180 | 9777D7DB866861604412EC2B /* ofxLedDmx.cpp */,
181 | 3CD3B211D65ECBA1185B3265 /* ofxLedRpi.cpp */,
182 | B71E597923645D590CF2B6CA /* ofxLedOutput.h */,
183 | E1144CF43D89A9FAB71ACCE5 /* ofxLedDmx.h */,
184 | 36E40AF65DF6F84EAAD2B281 /* ofxLedRpi.h */,
185 | );
186 | name = output;
187 | sourceTree = "";
188 | };
189 | 0EF29D3ABD6E4147AE024D7A /* ofxSmartFont */ = {
190 | isa = PBXGroup;
191 | children = (
192 | CC9FA26E1F7B54F1C5CB1CE4 /* readme.md */,
193 | 82716BE1C4EFC36AF3DB74FA /* readme-img */,
194 | 037363833F55AC730CC42F3E /* src */,
195 | );
196 | name = ofxSmartFont;
197 | sourceTree = "";
198 | };
199 | 18240ECCE4076FB0833A8578 /* ofxNetwork */ = {
200 | isa = PBXGroup;
201 | children = (
202 | 219374A14594D121F27FED3A /* src */,
203 | );
204 | name = ofxNetwork;
205 | sourceTree = "";
206 | };
207 | 1F4FB5C423662B96ADFDCC0B /* ofxXmlSettings */ = {
208 | isa = PBXGroup;
209 | children = (
210 | 6ECEF0D76BC33727823EADFF /* src */,
211 | 6E54289412D2D94F45A05113 /* libs */,
212 | );
213 | name = ofxXmlSettings;
214 | sourceTree = "";
215 | };
216 | 219374A14594D121F27FED3A /* src */ = {
217 | isa = PBXGroup;
218 | children = (
219 | 26EF3E71A07C6948EAF6709E /* ofxTCPManager.h */,
220 | C8C9B823D7872F9CBF03A813 /* ofxTCPClient.h */,
221 | F66993296A3AEEC70FD444F5 /* ofxNetwork.h */,
222 | 35BB9BB90DBABFD3B39F8DB6 /* ofxUDPManager.cpp */,
223 | 1C085E327DAB912CFA2A443D /* ofxTCPServer.cpp */,
224 | D67FE8EDE92985070F3FD992 /* ofxUDPSettings.h */,
225 | 1DFA26F2C6BBD1B8AC24C0B1 /* ofxNetworkUtils.h */,
226 | F399B91E98DC31CDA6DDACB4 /* ofxTCPManager.cpp */,
227 | BF88F02779DD820913ACEA06 /* ofxTCPClient.cpp */,
228 | AE30B18B42BAF0E92CB140E5 /* ofxNetworkUtils.cpp */,
229 | 163ABB7F5E22B6A0ECF51B07 /* ofxTCPSettings.h */,
230 | 2F519EB3B0DCD7378FB86ABE /* ofxUDPManager.h */,
231 | 30841703B7AC8487D16FB4AA /* ofxTCPServer.h */,
232 | );
233 | name = src;
234 | sourceTree = "";
235 | };
236 | 2317994671CD76BBA16927B8 /* libs */ = {
237 | isa = PBXGroup;
238 | children = (
239 | 65F3085962B3A8825746C3C2 /* Syphon */,
240 | );
241 | name = libs;
242 | sourceTree = "";
243 | };
244 | 398D2AD7D162CE13BF40CD4F /* lib */ = {
245 | isa = PBXGroup;
246 | children = (
247 | 821159A073ABA066739FD401 /* osx */,
248 | );
249 | name = lib;
250 | sourceTree = "";
251 | };
252 | 49A9E39C52C2DF4DDA1E185F /* src */ = {
253 | isa = PBXGroup;
254 | children = (
255 | 0FB83AC7747296DD35C1C295 /* ofxSyphon.h */,
256 | 32D6F27DC6308427F9A278C1 /* ofxSyphonServer.mm */,
257 | 46BBCC26D60B589958BF0D03 /* ofxSyphonServer.h */,
258 | 03EA4DA95B5E1B8409FC058E /* ofxSyphonClient.mm */,
259 | E723BEF4C55D236E24639608 /* ofxSyphonServerDirectory.mm */,
260 | 01FAC3552E00C3620035EA2F /* ofxSyphonClient.h */,
261 | 337B812806A0E7D26A029E5A /* ofxSyphonServerDirectory.h */,
262 | );
263 | name = src;
264 | sourceTree = "";
265 | };
266 | 50EAFB5FF7C5722E7B4895C7 /* src */ = {
267 | isa = PBXGroup;
268 | children = (
269 | E3405C5AE387BDDC2AD19473 /* SyphonNameboundClient.m */,
270 | 71FFD50EA75BCC76F0C58D12 /* SyphonNameboundClient.h */,
271 | );
272 | name = src;
273 | sourceTree = "";
274 | };
275 | 65F3085962B3A8825746C3C2 /* Syphon */ = {
276 | isa = PBXGroup;
277 | children = (
278 | 50EAFB5FF7C5722E7B4895C7 /* src */,
279 | 398D2AD7D162CE13BF40CD4F /* lib */,
280 | );
281 | name = Syphon;
282 | sourceTree = "";
283 | };
284 | 69146F0BA46E48E576618E5E /* libs */ = {
285 | isa = PBXGroup;
286 | children = (
287 | 0EF29D3ABD6E4147AE024D7A /* ofxSmartFont */,
288 | );
289 | name = libs;
290 | sourceTree = "";
291 | };
292 | 6948EE371B920CB800B5AC1A /* local_addons */ = {
293 | isa = PBXGroup;
294 | children = (
295 | );
296 | name = local_addons;
297 | sourceTree = "";
298 | };
299 | 6E54289412D2D94F45A05113 /* libs */ = {
300 | isa = PBXGroup;
301 | children = (
302 | B21E7E5F548EEA92F368040B /* tinyxml.h */,
303 | FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */,
304 | 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */,
305 | 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */,
306 | );
307 | name = libs;
308 | sourceTree = "";
309 | };
310 | 6ECEF0D76BC33727823EADFF /* src */ = {
311 | isa = PBXGroup;
312 | children = (
313 | 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */,
314 | 01DCC0911400F9ACF5B65578 /* ofxXmlSettings.h */,
315 | );
316 | name = src;
317 | sourceTree = "";
318 | };
319 | 7F3C04577424427D348B1425 /* ofxSyphon */ = {
320 | isa = PBXGroup;
321 | children = (
322 | 49A9E39C52C2DF4DDA1E185F /* src */,
323 | 2317994671CD76BBA16927B8 /* libs */,
324 | );
325 | name = ofxSyphon;
326 | sourceTree = "";
327 | };
328 | 821159A073ABA066739FD401 /* osx */ = {
329 | isa = PBXGroup;
330 | children = (
331 | D58DCB2C0AEFDE6171E29540 /* Syphon.framework */,
332 | );
333 | name = osx;
334 | sourceTree = "";
335 | };
336 | 82716BE1C4EFC36AF3DB74FA /* readme-img */ = {
337 | isa = PBXGroup;
338 | children = (
339 | 5BF1E1022187F07E14503CFD /* ofxSmartFont.png */,
340 | );
341 | name = "readme-img";
342 | sourceTree = "";
343 | };
344 | 8870759BC9CAEA1E4E9EA3A8 /* core */ = {
345 | isa = PBXGroup;
346 | children = (
347 | 422C4E1AAC7EC4D30B17702D /* ofxDatGuiIntObject.h */,
348 | 1A3E3B8F332A1A3C7EDF4998 /* ofxDatGuiComponent.cpp */,
349 | 9B5051062C6A871714E6F5F4 /* ofxDatGuiConstants.h */,
350 | F59384ED57A7C6A7A8B0351D /* ofxDatGuiEvents.h */,
351 | BCC84C6EB3417706F4F762F0 /* ofxDatGuiComponent.h */,
352 | );
353 | name = core;
354 | sourceTree = "";
355 | };
356 | 911FE1C75E520EE70A7B4830 /* themes */ = {
357 | isa = PBXGroup;
358 | children = (
359 | B498F0559F473CF855EF6062 /* ofxDatGuiTheme.h */,
360 | 21E1E3071CB7B11914428B62 /* ofxDatGuiThemes.h */,
361 | );
362 | name = themes;
363 | sourceTree = "";
364 | };
365 | 947FCD1248D8B0A16B53C1AA /* components */ = {
366 | isa = PBXGroup;
367 | children = (
368 | C84ED7FCC017328C6F58283D /* ofxDatGuiColorPicker.h */,
369 | D0D6A66BEBA820EA1D396889 /* ofxDatGuiSlider.h */,
370 | 64C563B8158C37E9D07AE29D /* ofxDatGuiFRM.h */,
371 | 0A42C807BEF3A18E8E105A3B /* ofxDatGuiTimeGraph.h */,
372 | 04C339FF9ADCF05DF2DA62A3 /* ofxDatGuiTextInputField.h */,
373 | FDA86F4C2F1F1964D35391C6 /* ofxDatGuiButton.h */,
374 | E100ED9DCB412957A879CD5A /* ofxDatGuiControls.h */,
375 | 744031A3E8F8DAF9FE6F3EA8 /* ofxDatGuiGroups.h */,
376 | 545BBA6F6669BED2DA497BC6 /* ofxDatGuiScrollView.h */,
377 | 3EE52579F19D9666EFBD2FB0 /* ofxDatGuiButtonImage.h */,
378 | 787315438BF1DD00C81DF413 /* ofxDatGuiLabel.h */,
379 | 902724601B82C6AD81BBCD71 /* ofxDatGui2dPad.h */,
380 | C085A33340AB0C1DB647AC2F /* ofxDatGuiTextInput.h */,
381 | CDF7278CB636137FE7BF91A5 /* ofxDatGuiMatrix.h */,
382 | );
383 | name = components;
384 | sourceTree = "";
385 | };
386 | BB4B014C10F69532006C3DED /* addons */ = {
387 | isa = PBXGroup;
388 | children = (
389 | D8DD1043C333F6F63C8685E6 /* ofxDatGui */,
390 | E6ED21CCD1B2EFAC48715C87 /* ofxLedMapper */,
391 | 18240ECCE4076FB0833A8578 /* ofxNetwork */,
392 | 7F3C04577424427D348B1425 /* ofxSyphon */,
393 | 1F4FB5C423662B96ADFDCC0B /* ofxXmlSettings */,
394 | );
395 | name = addons;
396 | sourceTree = "";
397 | };
398 | D8DD1043C333F6F63C8685E6 /* ofxDatGui */ = {
399 | isa = PBXGroup;
400 | children = (
401 | E9B32C117486580389FAFF01 /* src */,
402 | );
403 | name = ofxDatGui;
404 | sourceTree = "";
405 | };
406 | E4328144138ABC890047C5CB /* Products */ = {
407 | isa = PBXGroup;
408 | children = (
409 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */,
410 | );
411 | name = Products;
412 | sourceTree = "";
413 | };
414 | E4B69B4A0A3A1720003C02F2 = {
415 | isa = PBXGroup;
416 | children = (
417 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */,
418 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */,
419 | E4B69E1C0A3A1BDC003C02F2 /* src */,
420 | E4EEC9E9138DF44700A80321 /* openFrameworks */,
421 | BB4B014C10F69532006C3DED /* addons */,
422 | 6948EE371B920CB800B5AC1A /* local_addons */,
423 | E4B69B5B0A3A1756003C02F2 /* ledMapperDebug.app */,
424 | );
425 | sourceTree = "";
426 | };
427 | E4B69E1C0A3A1BDC003C02F2 /* src */ = {
428 | isa = PBXGroup;
429 | children = (
430 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */,
431 | A7B46A3AD8E3B2B2B99C0D3D /* Player.cpp */,
432 | A837538A506CA52AF2214190 /* Player.h */,
433 | 946FF9210F175C3956CB16B6 /* ledMapperApp.h */,
434 | 7EBBFE8BF9D851CEAB1AF783 /* ledMapperApp.cpp */,
435 | );
436 | path = src;
437 | sourceTree = SOURCE_ROOT;
438 | };
439 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = {
440 | isa = PBXGroup;
441 | children = (
442 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */,
443 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */,
444 | );
445 | name = openFrameworks;
446 | sourceTree = "";
447 | };
448 | E6ED21CCD1B2EFAC48715C87 /* ofxLedMapper */ = {
449 | isa = PBXGroup;
450 | children = (
451 | F96A61D407ABA9E4437A6771 /* src */,
452 | );
453 | name = ofxLedMapper;
454 | sourceTree = "";
455 | };
456 | E9B32C117486580389FAFF01 /* src */ = {
457 | isa = PBXGroup;
458 | children = (
459 | 8870759BC9CAEA1E4E9EA3A8 /* core */,
460 | 9705D66270ED89ECA6E6FECE /* ofxDatGui.h */,
461 | 26490D7CC31EF7D6ED5F925A /* ofxDatGui.cpp */,
462 | 69146F0BA46E48E576618E5E /* libs */,
463 | 947FCD1248D8B0A16B53C1AA /* components */,
464 | 911FE1C75E520EE70A7B4830 /* themes */,
465 | );
466 | name = src;
467 | sourceTree = "";
468 | };
469 | F96A61D407ABA9E4437A6771 /* src */ = {
470 | isa = PBXGroup;
471 | children = (
472 | 09D35E9640961BEC4FAAFB0D /* output */,
473 | 9DB1266C68243123FFBAB6C1 /* json.hpp */,
474 | C1278B7557E7CD889064CEB8 /* ofJson.h */,
475 | DA137B8F97182895CF34D714 /* ofxLedController.h */,
476 | 4B30F06EFD0AC0041DC16B85 /* ofxLedController.cpp */,
477 | DF371044B637F86956E83B66 /* ofxLedPixelGrab.h */,
478 | D38F3868AA05BA46C75D3C42 /* ofxLedGrabObject.h */,
479 | 4A323001EC8050B5E3B8971F /* ofxLedGrabLine.h */,
480 | 4DEC3C2F68AAF4858A6FE2B9 /* ofxLedMapper.h */,
481 | 57A5AA75AAA997CD805B12E0 /* ofxLedMapper.cpp */,
482 | );
483 | name = src;
484 | sourceTree = "";
485 | };
486 | /* End PBXGroup section */
487 |
488 | /* Begin PBXNativeTarget section */
489 | E4B69B5A0A3A1756003C02F2 /* ledMapper */ = {
490 | isa = PBXNativeTarget;
491 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ledMapper" */;
492 | buildPhases = (
493 | E4B69B580A3A1756003C02F2 /* Sources */,
494 | E4B69B590A3A1756003C02F2 /* Frameworks */,
495 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */,
496 | E4C2427710CC5ABF004149E2 /* CopyFiles */,
497 | 8466F1851C04CA0E00918B1C /* ShellScript */,
498 | );
499 | buildRules = (
500 | );
501 | dependencies = (
502 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */,
503 | );
504 | name = ledMapper;
505 | productName = myOFApp;
506 | productReference = E4B69B5B0A3A1756003C02F2 /* ledMapperDebug.app */;
507 | productType = "com.apple.product-type.application";
508 | };
509 | /* End PBXNativeTarget section */
510 |
511 | /* Begin PBXProject section */
512 | E4B69B4C0A3A1720003C02F2 /* Project object */ = {
513 | isa = PBXProject;
514 | attributes = {
515 | LastUpgradeCheck = 0600;
516 | };
517 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ledMapper" */;
518 | compatibilityVersion = "Xcode 3.2";
519 | developmentRegion = English;
520 | hasScannedForEncodings = 0;
521 | knownRegions = (
522 | English,
523 | Japanese,
524 | French,
525 | German,
526 | );
527 | mainGroup = E4B69B4A0A3A1720003C02F2;
528 | productRefGroup = E4B69B4A0A3A1720003C02F2;
529 | projectDirPath = "";
530 | projectReferences = (
531 | {
532 | ProductGroup = E4328144138ABC890047C5CB /* Products */;
533 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
534 | },
535 | );
536 | projectRoot = "";
537 | targets = (
538 | E4B69B5A0A3A1756003C02F2 /* ledMapper */,
539 | );
540 | };
541 | /* End PBXProject section */
542 |
543 | /* Begin PBXReferenceProxy section */
544 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = {
545 | isa = PBXReferenceProxy;
546 | fileType = archive.ar;
547 | path = openFrameworksDebug.a;
548 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */;
549 | sourceTree = BUILT_PRODUCTS_DIR;
550 | };
551 | /* End PBXReferenceProxy section */
552 |
553 | /* Begin PBXShellScriptBuildPhase section */
554 | 8466F1851C04CA0E00918B1C /* ShellScript */ = {
555 | isa = PBXShellScriptBuildPhase;
556 | buildActionMask = 12;
557 | files = (
558 | );
559 | inputPaths = (
560 | );
561 | outputPaths = (
562 | );
563 | runOnlyForDeploymentPostprocessing = 0;
564 | shellPath = /bin/sh;
565 | shellScript = "echo \"$GCC_PREPROCESSOR_DEFINITIONS\";\nAPPSTORE=`expr \"$GCC_PREPROCESSOR_DEFINITIONS\" : \".*APPSTORE=\\([0-9]*\\)\"`\nif [ -z \"$APPSTORE\" ] ; then\necho \"Note: Not copying bin/data to App Package or doing App Code signing. Use AppStore target for AppStore distribution\";\nelse\n# Copy bin/data into App/Resources\nrsync -avz --exclude='.DS_Store' \"${SRCROOT}/bin/data/\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/\"\n\n# ---- Code Sign App Package ----\n\n# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY!\n\n# Verify that $CODE_SIGN_IDENTITY is set\nif [ -z \"${CODE_SIGN_IDENTITY}\" ] ; then\necho \"CODE_SIGN_IDENTITY needs to be set for framework code-signing\"\nexit 0\nfi\n\nif [ -z \"${CODE_SIGN_ENTITLEMENTS}\" ] ; then\necho \"CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!\"\n\nif [ \"${CONFIGURATION}\" = \"Release\" ] ; then\nexit 1\nelse\n# Code-signing is optional for non-release builds.\nexit 0\nfi\nfi\n\nITEMS=\"\"\n\nFRAMEWORKS_DIR=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\necho \"$FRAMEWORKS_DIR\"\nif [ -d \"$FRAMEWORKS_DIR\" ] ; then\nFRAMEWORKS=$(find \"${FRAMEWORKS_DIR}\" -depth -type d -name \"*.framework\" -or -name \"*.dylib\" -or -name \"*.bundle\" | sed -e \"s/\\(.*framework\\)/\\1\\/Versions\\/A\\//\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${FRAMEWORKS}\"\nfi\n\nLOGINITEMS_DIR=\"${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/\"\nif [ -d \"$LOGINITEMS_DIR\" ] ; then\nLOGINITEMS=$(find \"${LOGINITEMS_DIR}\" -depth -type d -name \"*.app\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${ITEMS}\"$'\\n'\"${LOGINITEMS}\"\nfi\n\n# Prefer the expanded name, if available.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\nif [ \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" = \"\" ] ; then\n# Fall back to old behavior.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${CODE_SIGN_IDENTITY}\"\nfi\n\necho \"Identity:\"\necho \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\"\n\necho \"Entitlements:\"\necho \"${CODE_SIGN_ENTITLEMENTS}\"\n\necho \"Found:\"\necho \"${ITEMS}\"\n\n# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.\nSAVED_IFS=$IFS\nIFS=$(echo -en \"\\n\\b\")\n\n# Loop through all items.\nfor ITEM in $ITEMS;\ndo\necho \"Signing '${ITEM}'\"\ncodesign --force --verbose --sign \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" \"${ITEM}\"\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\necho \"Failed to sign '${ITEM}'.\"\nIFS=$SAVED_IFS\nexit 1\nfi\ndone\n\n# Restore $IFS.\nIFS=$SAVED_IFS\n\nfi\n\n# Copy bin/data into App/Resources\nrsync -avz --exclude='.DS_Store' \"${SRCROOT}/bin/data/\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\"\n\n";
566 | };
567 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = {
568 | isa = PBXShellScriptBuildPhase;
569 | buildActionMask = 2147483647;
570 | files = (
571 | );
572 | inputPaths = (
573 | );
574 | outputPaths = (
575 | );
576 | runOnlyForDeploymentPostprocessing = 0;
577 | shellPath = /bin/sh;
578 | shellScript = "mkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy default icon file into App/Resources\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved \"$OF_PATH/libs/fmodex/lib/osx/libfmodex.dylib\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\";\ninstall_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\n\necho \"$GCC_PREPROCESSOR_DEFINITIONS\";\n";
579 | };
580 | /* End PBXShellScriptBuildPhase section */
581 |
582 | /* Begin PBXSourcesBuildPhase section */
583 | E4B69B580A3A1756003C02F2 /* Sources */ = {
584 | isa = PBXSourcesBuildPhase;
585 | buildActionMask = 2147483647;
586 | files = (
587 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */,
588 | CB70B178311B16CC26AC0B3E /* Player.cpp in Sources */,
589 | 2C0BFEEEA8FC74648567F8D0 /* ledMapperApp.cpp in Sources */,
590 | D3C1C48E59CAA2D68C0DD477 /* ofxDatGuiComponent.cpp in Sources */,
591 | C9466C434D1CF8AB968D298D /* ofxDatGui.cpp in Sources */,
592 | C1F59DBDF31035FEDBDE8018 /* readme.md in Sources */,
593 | E09536E345D4B6B8E303FAC3 /* ofxSmartFont.png in Sources */,
594 | 0294CC40A9B329B0BC2E56EA /* ofxSmartFont.cpp in Sources */,
595 | FBF33B1A4D323955BA965F7B /* ofxLedController.cpp in Sources */,
596 | F7A0454B4E90992C5F26200E /* ofxLedDmx.cpp in Sources */,
597 | 286029986107AE7D1E316D5F /* ofxLedRpi.cpp in Sources */,
598 | 3A68D60BBC83A9B2916DD444 /* ofxLedMapper.cpp in Sources */,
599 | E2564CF7DDB3713772BB682E /* ofxUDPManager.cpp in Sources */,
600 | 66CA411C5A9664E27326BF36 /* ofxTCPServer.cpp in Sources */,
601 | 125506CD3E5F428AAFE5CC65 /* ofxTCPManager.cpp in Sources */,
602 | 960D20B191346612D5C05A6A /* ofxTCPClient.cpp in Sources */,
603 | 661A1991F5CE4CCC2919D8E7 /* ofxNetworkUtils.cpp in Sources */,
604 | 8D60C222CBD3F869382832E9 /* ofxSyphonServer.mm in Sources */,
605 | 1F558B76FB3412843DDAA031 /* ofxSyphonClient.mm in Sources */,
606 | 11DF9AB1B4EAA63E3B190CA0 /* ofxSyphonServerDirectory.mm in Sources */,
607 | C9109422648B170B07A778CF /* SyphonNameboundClient.m in Sources */,
608 | 63B57AC5BF4EF088491E0317 /* ofxXmlSettings.cpp in Sources */,
609 | 5A4349E9754D6FA14C0F2A3A /* tinyxmlparser.cpp in Sources */,
610 | 9D44DC88EF9E7991B4A09951 /* tinyxmlerror.cpp in Sources */,
611 | 933A2227713C720CEFF80FD9 /* tinyxml.cpp in Sources */,
612 | );
613 | runOnlyForDeploymentPostprocessing = 0;
614 | };
615 | /* End PBXSourcesBuildPhase section */
616 |
617 | /* Begin PBXTargetDependency section */
618 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = {
619 | isa = PBXTargetDependency;
620 | name = openFrameworks;
621 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */;
622 | };
623 | /* End PBXTargetDependency section */
624 |
625 | /* Begin XCBuildConfiguration section */
626 | 99FA3DBB1C7456C400CFA0EE /* AppStore */ = {
627 | isa = XCBuildConfiguration;
628 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
629 | buildSettings = {
630 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
631 | COPY_PHASE_STRIP = YES;
632 | DEAD_CODE_STRIPPING = YES;
633 | GCC_AUTO_VECTORIZATION = YES;
634 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
635 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
636 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
637 | GCC_OPTIMIZATION_LEVEL = 3;
638 | "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "DISTRIBUTION=1";
639 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
640 | GCC_UNROLL_LOOPS = YES;
641 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
642 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
643 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
644 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
645 | GCC_WARN_UNUSED_VALUE = NO;
646 | GCC_WARN_UNUSED_VARIABLE = NO;
647 | HEADER_SEARCH_PATHS = (
648 | "$(OF_CORE_HEADERS)",
649 | src,
650 | ../../../addons/ofxDatGui/src,
651 | ../../../addons/ofxDatGui/src/components,
652 | ../../../addons/ofxDatGui/src/core,
653 | ../../../addons/ofxDatGui/src/libs,
654 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont,
655 | "../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme-img",
656 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src,
657 | ../../../addons/ofxDatGui/src/themes,
658 | ../../../addons/ofxLedMapper/src,
659 | ../../../addons/ofxLedMapper/src/grab,
660 | ../../../addons/ofxLedMapper/src/output,
661 | ../../../addons/ofxNetwork/src,
662 | ../../../addons/ofxSyphon/libs,
663 | ../../../addons/ofxSyphon/libs/Syphon,
664 | ../../../addons/ofxSyphon/libs/Syphon/lib,
665 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
666 | ../../../addons/ofxSyphon/libs/Syphon/src,
667 | ../../../addons/ofxSyphon/src,
668 | ../../../addons/ofxXmlSettings/libs,
669 | ../../../addons/ofxXmlSettings/src,
670 | );
671 | MACOSX_DEPLOYMENT_TARGET = 10.9;
672 | OTHER_CPLUSPLUSFLAGS = (
673 | "-D__MACOSX_CORE__",
674 | "-mtune=native",
675 | );
676 | SDKROOT = macosx;
677 | };
678 | name = AppStore;
679 | };
680 | 99FA3DBC1C7456C400CFA0EE /* AppStore */ = {
681 | isa = XCBuildConfiguration;
682 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
683 | buildSettings = {
684 | "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "c++14";
685 | "CLANG_CXX_LANGUAGE_STANDARD[arch=x86_64]" = "c++14";
686 | COMBINE_HIDPI_IMAGES = YES;
687 | COPY_PHASE_STRIP = YES;
688 | FRAMEWORK_SEARCH_PATHS = (
689 | "$(inherited)",
690 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
691 | );
692 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
693 | GCC_MODEL_TUNING = NONE;
694 | "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "APPSTORE=1";
695 | HEADER_SEARCH_PATHS = (
696 | "$(OF_CORE_HEADERS)",
697 | src,
698 | ../../../addons/ofxDatGui/src,
699 | ../../../addons/ofxDatGui/src/components,
700 | ../../../addons/ofxDatGui/src/core,
701 | ../../../addons/ofxDatGui/src/libs,
702 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont,
703 | "../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme-img",
704 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src,
705 | ../../../addons/ofxDatGui/src/themes,
706 | ../../../addons/ofxLedMapper/src,
707 | ../../../addons/ofxLedMapper/src/grab,
708 | ../../../addons/ofxLedMapper/src/output,
709 | ../../../addons/ofxNetwork/src,
710 | ../../../addons/ofxSyphon/libs,
711 | ../../../addons/ofxSyphon/libs/Syphon,
712 | ../../../addons/ofxSyphon/libs/Syphon/lib,
713 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
714 | ../../../addons/ofxSyphon/libs/Syphon/src,
715 | ../../../addons/ofxSyphon/src,
716 | ../../../addons/ofxXmlSettings/libs,
717 | ../../../addons/ofxXmlSettings/src,
718 | );
719 | ICON = "$(ICON_NAME_RELEASE)";
720 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
721 | INFOPLIST_FILE = "openFrameworks-Info.plist";
722 | INSTALL_PATH = /Applications;
723 | LIBRARY_SEARCH_PATHS = "$(inherited)";
724 | PRODUCT_NAME = "$(TARGET_NAME)";
725 | WRAPPER_EXTENSION = app;
726 | baseConfigurationReference = E4EB6923138AFD0F00A09F29;
727 | };
728 | name = AppStore;
729 | };
730 | E4B69B4E0A3A1720003C02F2 /* Debug */ = {
731 | isa = XCBuildConfiguration;
732 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
733 | buildSettings = {
734 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
735 | COPY_PHASE_STRIP = NO;
736 | DEAD_CODE_STRIPPING = YES;
737 | GCC_AUTO_VECTORIZATION = YES;
738 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
739 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
740 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
741 | GCC_OPTIMIZATION_LEVEL = 0;
742 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
743 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
744 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
745 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
746 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
747 | GCC_WARN_UNUSED_VALUE = NO;
748 | GCC_WARN_UNUSED_VARIABLE = NO;
749 | HEADER_SEARCH_PATHS = (
750 | "$(OF_CORE_HEADERS)",
751 | src,
752 | ../../../addons/ofxDatGui/src,
753 | ../../../addons/ofxDatGui/src/components,
754 | ../../../addons/ofxDatGui/src/core,
755 | ../../../addons/ofxDatGui/src/libs,
756 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont,
757 | "../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme-img",
758 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src,
759 | ../../../addons/ofxDatGui/src/themes,
760 | ../../../addons/ofxLedMapper/src,
761 | ../../../addons/ofxLedMapper/src/grab,
762 | ../../../addons/ofxLedMapper/src/output,
763 | ../../../addons/ofxNetwork/src,
764 | ../../../addons/ofxSyphon/libs,
765 | ../../../addons/ofxSyphon/libs/Syphon,
766 | ../../../addons/ofxSyphon/libs/Syphon/lib,
767 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
768 | ../../../addons/ofxSyphon/libs/Syphon/src,
769 | ../../../addons/ofxSyphon/src,
770 | ../../../addons/ofxXmlSettings/libs,
771 | ../../../addons/ofxXmlSettings/src,
772 | );
773 | MACOSX_DEPLOYMENT_TARGET = 10.9;
774 | ONLY_ACTIVE_ARCH = YES;
775 | OTHER_CPLUSPLUSFLAGS = (
776 | "-D__MACOSX_CORE__",
777 | "-mtune=native",
778 | );
779 | SDKROOT = macosx;
780 | };
781 | name = Debug;
782 | };
783 | E4B69B4F0A3A1720003C02F2 /* Release */ = {
784 | isa = XCBuildConfiguration;
785 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
786 | buildSettings = {
787 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
788 | COPY_PHASE_STRIP = YES;
789 | DEAD_CODE_STRIPPING = YES;
790 | GCC_AUTO_VECTORIZATION = YES;
791 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
792 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
793 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
794 | GCC_OPTIMIZATION_LEVEL = 3;
795 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
796 | GCC_UNROLL_LOOPS = YES;
797 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
798 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
799 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
800 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
801 | GCC_WARN_UNUSED_VALUE = NO;
802 | GCC_WARN_UNUSED_VARIABLE = NO;
803 | HEADER_SEARCH_PATHS = (
804 | "$(OF_CORE_HEADERS)",
805 | src,
806 | ../../../addons/ofxDatGui/src,
807 | ../../../addons/ofxDatGui/src/components,
808 | ../../../addons/ofxDatGui/src/core,
809 | ../../../addons/ofxDatGui/src/libs,
810 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont,
811 | "../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme-img",
812 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src,
813 | ../../../addons/ofxDatGui/src/themes,
814 | ../../../addons/ofxLedMapper/src,
815 | ../../../addons/ofxLedMapper/src/grab,
816 | ../../../addons/ofxLedMapper/src/output,
817 | ../../../addons/ofxNetwork/src,
818 | ../../../addons/ofxSyphon/libs,
819 | ../../../addons/ofxSyphon/libs/Syphon,
820 | ../../../addons/ofxSyphon/libs/Syphon/lib,
821 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
822 | ../../../addons/ofxSyphon/libs/Syphon/src,
823 | ../../../addons/ofxSyphon/src,
824 | ../../../addons/ofxXmlSettings/libs,
825 | ../../../addons/ofxXmlSettings/src,
826 | );
827 | MACOSX_DEPLOYMENT_TARGET = 10.9;
828 | OTHER_CPLUSPLUSFLAGS = (
829 | "-D__MACOSX_CORE__",
830 | "-mtune=native",
831 | );
832 | SDKROOT = macosx;
833 | };
834 | name = Release;
835 | };
836 | E4B69B600A3A1757003C02F2 /* Debug */ = {
837 | isa = XCBuildConfiguration;
838 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
839 | buildSettings = {
840 | CLANG_CXX_LANGUAGE_STANDARD = "c++14";
841 | COMBINE_HIDPI_IMAGES = YES;
842 | COPY_PHASE_STRIP = NO;
843 | FRAMEWORK_SEARCH_PATHS = (
844 | "$(inherited)",
845 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
846 | );
847 | GCC_DYNAMIC_NO_PIC = NO;
848 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
849 | GCC_MODEL_TUNING = NONE;
850 | HEADER_SEARCH_PATHS = (
851 | "$(OF_CORE_HEADERS)",
852 | src,
853 | ../../../addons/ofxDatGui/src,
854 | ../../../addons/ofxDatGui/src/components,
855 | ../../../addons/ofxDatGui/src/core,
856 | ../../../addons/ofxDatGui/src/libs,
857 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont,
858 | "../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme-img",
859 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src,
860 | ../../../addons/ofxDatGui/src/themes,
861 | ../../../addons/ofxLedMapper/src,
862 | ../../../addons/ofxLedMapper/src/grab,
863 | ../../../addons/ofxLedMapper/src/output,
864 | ../../../addons/ofxNetwork/src,
865 | ../../../addons/ofxSyphon/libs,
866 | ../../../addons/ofxSyphon/libs/Syphon,
867 | ../../../addons/ofxSyphon/libs/Syphon/lib,
868 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
869 | ../../../addons/ofxSyphon/libs/Syphon/src,
870 | ../../../addons/ofxSyphon/src,
871 | ../../../addons/ofxXmlSettings/libs,
872 | ../../../addons/ofxXmlSettings/src,
873 | );
874 | ICON = "$(ICON_NAME_DEBUG)";
875 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
876 | INFOPLIST_FILE = "openFrameworks-Info.plist";
877 | INSTALL_PATH = /Applications;
878 | LIBRARY_SEARCH_PATHS = "$(inherited)";
879 | PRODUCT_NAME = "$(TARGET_NAME)Debug";
880 | WRAPPER_EXTENSION = app;
881 | };
882 | name = Debug;
883 | };
884 | E4B69B610A3A1757003C02F2 /* Release */ = {
885 | isa = XCBuildConfiguration;
886 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
887 | buildSettings = {
888 | CLANG_CXX_LANGUAGE_STANDARD = "c++14";
889 | COMBINE_HIDPI_IMAGES = YES;
890 | COPY_PHASE_STRIP = YES;
891 | FRAMEWORK_SEARCH_PATHS = (
892 | "$(inherited)",
893 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
894 | );
895 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
896 | GCC_MODEL_TUNING = NONE;
897 | "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "NDEBUG=1";
898 | HEADER_SEARCH_PATHS = (
899 | "$(OF_CORE_HEADERS)",
900 | src,
901 | ../../../addons/ofxDatGui/src,
902 | ../../../addons/ofxDatGui/src/components,
903 | ../../../addons/ofxDatGui/src/core,
904 | ../../../addons/ofxDatGui/src/libs,
905 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont,
906 | "../../../addons/ofxDatGui/src/libs/ofxSmartFont/readme-img",
907 | ../../../addons/ofxDatGui/src/libs/ofxSmartFont/src,
908 | ../../../addons/ofxDatGui/src/themes,
909 | ../../../addons/ofxLedMapper/src,
910 | ../../../addons/ofxLedMapper/src/grab,
911 | ../../../addons/ofxLedMapper/src/output,
912 | ../../../addons/ofxNetwork/src,
913 | ../../../addons/ofxSyphon/libs,
914 | ../../../addons/ofxSyphon/libs/Syphon,
915 | ../../../addons/ofxSyphon/libs/Syphon/lib,
916 | ../../../addons/ofxSyphon/libs/Syphon/lib/osx,
917 | ../../../addons/ofxSyphon/libs/Syphon/src,
918 | ../../../addons/ofxSyphon/src,
919 | ../../../addons/ofxXmlSettings/libs,
920 | ../../../addons/ofxXmlSettings/src,
921 | );
922 | ICON = "$(ICON_NAME_RELEASE)";
923 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
924 | INFOPLIST_FILE = "openFrameworks-Info.plist";
925 | INSTALL_PATH = /Applications;
926 | LIBRARY_SEARCH_PATHS = "$(inherited)";
927 | PRODUCT_NAME = "$(TARGET_NAME)";
928 | WRAPPER_EXTENSION = app;
929 | baseConfigurationReference = E4EB6923138AFD0F00A09F29;
930 | };
931 | name = Release;
932 | };
933 | /* End XCBuildConfiguration section */
934 |
935 | /* Begin XCConfigurationList section */
936 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ledMapper" */ = {
937 | isa = XCConfigurationList;
938 | buildConfigurations = (
939 | E4B69B4E0A3A1720003C02F2 /* Debug */,
940 | E4B69B4F0A3A1720003C02F2 /* Release */,
941 | 99FA3DBB1C7456C400CFA0EE /* AppStore */,
942 | );
943 | defaultConfigurationIsVisible = 0;
944 | defaultConfigurationName = Release;
945 | };
946 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ledMapper" */ = {
947 | isa = XCConfigurationList;
948 | buildConfigurations = (
949 | E4B69B600A3A1757003C02F2 /* Debug */,
950 | E4B69B610A3A1757003C02F2 /* Release */,
951 | 99FA3DBC1C7456C400CFA0EE /* AppStore */,
952 | );
953 | defaultConfigurationIsVisible = 0;
954 | defaultConfigurationName = Release;
955 | };
956 | /* End XCConfigurationList section */
957 | };
958 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */;
959 | }
960 |
--------------------------------------------------------------------------------
/ledMapper.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ledMapper.xcodeproj/xcshareddata/xcschemes/ledMapper 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 |
--------------------------------------------------------------------------------
/ledMapper.xcodeproj/xcshareddata/xcschemes/ledMapper 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 |
--------------------------------------------------------------------------------
/ledmapper_icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/techtim/ledMapper/8e5733b3fc57302f28893e9111154bd79debaf52/ledmapper_icon.ico
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/Player.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Player.cpp
3 | // ledMapper
4 | //
5 | // Created by Tim Tvl on 7/15/18.
6 | //
7 | //
8 |
9 | #include "Player.h"
10 |
11 | static string s_playerConfName = "playerConf.json";
12 |
13 | ostream &operator<<(ostream &os, const Content &c)
14 | {
15 | os << "content id=" << c.id << ", " << c.path << ", durationMs=" << c.durationMs
16 | << ", startMs=" << c.startMs;
17 | return os;
18 | }
19 |
20 | Player::Player()
21 | : m_playing(true)
22 | , m_curContent("")
23 | , m_prevContent("")
24 | , m_fadeMs(3000)
25 | , m_configPath(LedMapper::LM_CONFIG_PATH)
26 | #ifndef LED_MAPPER_NO_GUI
27 | , m_gui(nullptr)
28 | , m_listVideos(nullptr)
29 | #endif
30 | {
31 | setupGui();
32 | }
33 |
34 | Player::~Player() { ; }
35 |
36 | void Player::setupGui()
37 | {
38 | #ifndef LED_MAPPER_NO_GUI
39 | m_gui = make_unique(ofxDatGuiAnchor::TOP_RIGHT);
40 | m_guiTheme = make_unique();
41 |
42 | m_gui->addHeader(LMGUIPlayer);
43 |
44 | auto togglePlay = m_gui->addToggle(LMGUITogglePlay, true);
45 | togglePlay->bind(m_playing);
46 | togglePlay->onButtonEvent(this, &Player::onButtonClick);
47 |
48 | auto slider = m_gui->addSlider(LMGUISliderFadeTime, 0, 10);
49 | slider->setPrecision(2);
50 | slider->onSliderEvent(this, &Player::onSliderEvent);
51 |
52 | auto button = m_gui->addButton(LMGUIButtonSave);
53 | button->onButtonEvent(this, &Player::onButtonClick);
54 | button->setLabelAlignment(ofxDatGuiAlignment::CENTER);
55 | button = m_gui->addButton(LMGUIButtonLoad);
56 | button->onButtonEvent(this, &Player::onButtonClick);
57 | button->setLabelAlignment(ofxDatGuiAlignment::CENTER);
58 |
59 | /// TODO fix for unique_ptr, need to move DatGui to smart ptrs for that
60 | m_listVideos = new ofxDatGuiScrollView(LMGUIListPlaylist, 10);
61 | m_listVideos->onScrollViewEvent(this, &Player::onScrollViewEvent);
62 | m_listVideos->setBackgroundColor(ofColor(10));
63 | m_listVideos->setTheme(m_guiTheme.get());
64 |
65 | button = m_gui->addButton(LMGUIListPlaylistDelete);
66 | button->onButtonEvent(this, &Player::onButtonClick);
67 | button->setLabelAlignment(ofxDatGuiAlignment::CENTER);
68 |
69 | auto folder = m_gui->addFolder(LMGUIListPlaylist);
70 | folder->attachItem(m_listVideos);
71 | folder->expand();
72 |
73 | m_gui->setTheme(m_guiTheme.get(), true);
74 | m_gui->setWidth(LM_GUI_WIDTH);
75 | m_gui->setAutoDraw(false);
76 | #endif
77 | }
78 |
79 | void Player::draw(float x, float y, float w, float h)
80 | {
81 | if (m_contentPlayers.empty() || !m_playing || m_curContent == "")
82 | return;
83 |
84 | auto nowMs = ofGetElapsedTimeMillis();
85 | auto &cur = m_contentPlayers[m_curContent];
86 | auto &prev = m_contentPlayers[m_prevContent];
87 |
88 | /// Duration and position return in seconds, check if it's time to show next video
89 | if (nowMs > cur.endMs - cur.fadeMs) {
90 | auto nextC = getNextContent(m_curContent);
91 | setCurrentContent(getNextContent(m_curContent));
92 | }
93 |
94 | ofSetColor(m_colorize);
95 | cur.draw(x, y, w, h);
96 |
97 | if (m_prevContent != "" && nowMs <= prev.endMs && nowMs > prev.endMs - prev.fadeMs) {
98 | float fadeColor = ofMap(prev.endMs - nowMs, prev.fadeMs, 0, 1.f, 0.f);
99 | ofSetColor(m_colorize.r, m_colorize.g, m_colorize.b, m_colorize.a * fadeColor);
100 | prev.draw(x, y, w, h);
101 | }
102 | }
103 |
104 | void Player::setGuiPosition(int x, int y) { m_gui->setPosition(x, y); }
105 |
106 | ofxDatGui *Player::getGui() { return m_gui.get(); };
107 |
108 | void Player::drawGui()
109 | {
110 | if (m_gui == nullptr)
111 | return;
112 |
113 | m_gui->update();
114 | m_listVideos->update();
115 | m_gui->draw();
116 | }
117 |
118 | #include
119 | template inline string checkUniqueName(const string _name, map &mapToCheck)
120 | {
121 | auto it = mapToCheck.lower_bound(_name);
122 | if (it == mapToCheck.end()) {
123 | ofLogVerbose() << "this name is unique=" << _name;
124 | return _name;
125 | }
126 |
127 | regex clean_from_num(" [0-9]+$");
128 |
129 | string newName = regex_replace(_name, clean_from_num, "");
130 | regex check_for_integer(newName + " ([0-9]+)");
131 |
132 | smatch base_match;
133 | string num = "0";
134 |
135 | while (it != mapToCheck.end() && regex_match(it->first, base_match, check_for_integer)) {
136 | if (base_match.size() > 1) {
137 | string tmp_num = base_match[1].str();
138 | if (ofToInt(tmp_num) > ofToInt(num))
139 | num = tmp_num; // find out how to sort right
140 | ofLogVerbose() << _name << " has a num " << num << '\n';
141 | }
142 | ++it;
143 | }
144 |
145 | newName += ofToString(ofToInt(num) + 1);
146 | ofLogVerbose("FINAL unique name=" + newName);
147 | return newName + " " + ofToString(ofToInt(num) + 1);
148 | }
149 |
150 | void Player::addContent(const string &path)
151 | {
152 | std::filesystem::path pth(path);
153 | if (!pth.has_filename())
154 | return;
155 |
156 | ofVideoPlayer newVideo;
157 | newVideo.setPixelFormat(OF_PIXELS_BGRA); // BGRA fix incorrect video texture on win
158 | newVideo.setLoopState(OF_LOOP_NONE);
159 |
160 | if (!newVideo.load(path))
161 | return;
162 |
163 | newVideo.setVolume(0.0f);
164 | string id = checkUniqueName(pth.filename().string(), m_contentPlayers);
165 | Content cont;
166 | cont.id = id;
167 | cont.path = path;
168 | cont.durationMs = newVideo.getDuration() * 1000;
169 | cont.type = "video";
170 | cont.video = move(newVideo);
171 | ofLogVerbose() << "Add " << cont;
172 |
173 | m_listVideos->add(cont.id);
174 | m_contentCue.push_back(cont.id);
175 | m_contentPlayers[cont.id] = move(cont);
176 |
177 | setCurrentContent(id);
178 | }
179 |
180 | void Player::deleteContent(const string &id)
181 | {
182 | auto it = find_if(begin(m_contentCue), end(m_contentCue),
183 | [&id](const string &cueId) { return cueId == id; });
184 | if (it == end(m_contentCue))
185 | return;
186 |
187 | /// if deleting current set next content
188 | m_listVideos->remove(it - begin(m_contentCue));
189 | m_contentCue.erase(it);
190 | m_contentPlayers.erase(id);
191 |
192 | ofLogVerbose(m_prevContent == id ? "m_prevContent=" + m_prevContent + " was Deleted" : "");
193 |
194 | /// if deleting last set empty current and prev videos
195 | if (m_contentCue.size() == 1) {
196 | ofLogVerbose() << "[Player] Removing last content id=" << id;
197 | m_curContent = "";
198 | m_prevContent = "";
199 | }
200 | else if (id == m_curContent)
201 | setCurrentContent(getNextContent(m_curContent));
202 |
203 | updateListView();
204 | }
205 |
206 | void Player::setCurrentContent(const string &id)
207 | {
208 | if (m_contentPlayers.empty() || m_contentPlayers.count(id) == 0)
209 | return;
210 |
211 | ofLogNotice() << "set current Content to id=" << id;
212 |
213 | auto nowMs = ofGetElapsedTimeMillis();
214 |
215 | if (m_contentPlayers.count(m_prevContent) && m_contentPlayers[m_prevContent].type == "video"
216 | && nowMs > m_contentPlayers[m_prevContent].endMs)
217 | m_contentPlayers[m_prevContent].video.stop();
218 |
219 | if (m_curContent == id) {
220 | m_contentPlayers[m_curContent].endMs = nowMs + m_contentPlayers[m_curContent].durationMs;
221 | if (m_contentPlayers[m_prevContent].type == "video") {
222 | m_contentPlayers[m_prevContent].video.play();
223 | }
224 | return;
225 | }
226 |
227 | /// if content deleted set prev content to empty
228 | m_prevContent = m_contentPlayers.count(m_curContent) ? m_curContent : "";
229 |
230 | ofLogVerbose(m_prevContent == id ? "m_prevContent=" + m_prevContent + " was Deleted" : "");
231 |
232 | m_curContent = id;
233 | m_contentPlayers[m_curContent].startMs = nowMs;
234 | m_contentPlayers[m_curContent].endMs = nowMs + m_contentPlayers[m_curContent].durationMs;
235 | /// fade longer than duration - set fade to duration/3
236 | m_contentPlayers[m_curContent].fadeMs = m_fadeMs > m_contentPlayers[m_curContent].durationMs
237 | ? m_contentPlayers[m_curContent].durationMs * 0.33
238 | : m_fadeMs;
239 |
240 | if (m_contentPlayers[m_curContent].type == "video")
241 | m_contentPlayers[m_curContent].video.play();
242 |
243 | updateListView();
244 | }
245 |
246 | const string Player::getNextContent(const string &id)
247 | {
248 | if (m_contentCue.empty())
249 | return "";
250 |
251 | auto it = find_if(begin(m_contentCue), end(m_contentCue),
252 | [&id](const string &cueId) { return cueId == id; });
253 | ofLogVerbose() << "[Player] getNextContent id=" << *it;
254 | /// if id not found or is last one return first in cue
255 | return (it == m_contentCue.end() || (it + 1) == m_contentCue.end()) ? m_contentCue.front()
256 | : *(it + 1);
257 | }
258 |
259 | void Player::setColorize(int r, int g, int b, int a) { m_colorize.set(r, g, b, a); }
260 |
261 | void Player::updateListView()
262 | {
263 | #ifndef LED_MAPPER_NO_GUI
264 | for (auto &id : m_contentCue) {
265 | assert(m_listVideos->get(id));
266 | if (m_listVideos->get(id) != nullptr)
267 | m_listVideos->get(id)->setBackgroundColor(ofColor(30));
268 | }
269 |
270 | if (m_curContent != "") {
271 | assert(m_listVideos->get(m_curContent));
272 | m_listVideos->get(m_curContent)
273 | ->setBackgroundColor(ofColor::fromHex(LedMapper::LM_COLOR_GREEN_DARK));
274 | }
275 | #endif
276 | }
277 |
278 | /// --------------------------- GUI EVENTS ----------------------------
279 | #ifndef LED_MAPPER_NO_GUI
280 | void Player::onScrollViewEvent(ofxDatGuiScrollViewEvent e)
281 | {
282 | if (e.parent->getName() == LMGUIListPlaylist) {
283 | // check if item from list selected
284 | ofLogNotice() << LMGUIListPlaylist << " clicked content id=" << e.target->getLabel();
285 | setCurrentContent(e.target->getLabel());
286 | }
287 | }
288 |
289 | void Player::onButtonClick(ofxDatGuiButtonEvent e)
290 | {
291 | if (e.target->getName() == LMGUIListPlaylistDelete) {
292 | deleteContent(m_curContent);
293 | return;
294 | }
295 | if (e.target->getName() == LMGUIButtonSave) {
296 | save(m_configPath);
297 | return;
298 | }
299 | if (e.target->getName() == LMGUIButtonLoad) {
300 | load(m_configPath);
301 | return;
302 | }
303 | }
304 |
305 | void Player::onSliderEvent(ofxDatGuiSliderEvent e)
306 | {
307 | if (e.target->getName() == LMGUISliderFadeTime)
308 | m_fadeMs = e.target->getValue() * 1000; /// slide sets fade in seconds
309 | }
310 |
311 | #endif
312 |
313 | /// --------------------------- LOAD / SAVE / RESET -----------------------
314 |
315 | void Player::save(const string &path)
316 | {
317 | m_configPath = path;
318 | ofJson conf;
319 | conf["isPlaying"] = m_playing;
320 | conf["fadeMs"] = m_fadeMs;
321 |
322 | /// Store contents in right order
323 | vector tmp;
324 | for (const auto &id : m_contentCue)
325 | tmp.push_back(m_contentPlayers[id]);
326 | conf["contents"] = tmp;
327 |
328 | ofSavePrettyJson(path + s_playerConfName, conf);
329 | }
330 |
331 | void Player::load(const string &path)
332 | {
333 | m_configPath = path;
334 | auto json = ofLoadJson(path + s_playerConfName);
335 |
336 | if (json.empty())
337 | return;
338 |
339 | if (json.count("contents")) {
340 | /// clear current content
341 | reset();
342 |
343 | try {
344 | vector contents = json.at("contents").get>();
345 | for (const auto &c : contents) {
346 | addContent(c.path);
347 | }
348 | }
349 | catch (...) {
350 | ofLogError() << "invalid json for Player";
351 | }
352 | }
353 |
354 | m_playing = json.at("isPlaying") ? json.at("isPlaying").get() : true;
355 | m_fadeMs = json.count("fadeMs") ? json.at("fadeMs").get() : 1000;
356 | }
357 |
358 | void Player::reset()
359 | {
360 | m_contentPlayers.clear();
361 | m_contentCue.clear();
362 | #ifndef LED_MAPPER_NO_GUI
363 | m_listVideos->clear();
364 | #endif
365 | }
366 |
--------------------------------------------------------------------------------
/src/Player.h:
--------------------------------------------------------------------------------
1 | //
2 | // Player.hpp
3 | // ledMapper
4 | //
5 | // Created by Tim Tvl on 7/15/18.
6 | //
7 | //
8 | #pragma once
9 |
10 | #include "Common.h"
11 | #include "ofMain.h"
12 | #include "ofxDatGui.h"
13 |
14 | struct Content {
15 | string id;
16 | string path;
17 | string type;
18 | uint64_t durationMs, startMs, endMs, fadeMs;
19 | ofVideoPlayer video;
20 | void draw(float x, float y, float w, float h)
21 | {
22 | video.update();
23 | video.draw(x, y, w, h);
24 | }
25 | };
26 |
27 | static void to_json(ofJson &j, const Content &c)
28 | {
29 | j = ofJson{ { "id", c.id }, { "path", c.path }, { "type", c.type } };
30 | }
31 |
32 | static void from_json(const ofJson &j, Content &c)
33 | {
34 | c.id = j.at("id").get();
35 | c.path = j.at("path").get();
36 | c.type = j.at("type").get();
37 | }
38 |
39 | class Player {
40 | std::map m_contentPlayers;
41 | std::vector m_contentCue;
42 | string m_curContent, m_prevContent;
43 | uint64_t m_fadeMs, m_fadeStart;
44 | long m_curVideoStart; /// hack aroung VideoPlayer.getPosition that don't work
45 | bool m_playing;
46 | string m_configPath;
47 | ofColor m_colorize;
48 | #ifndef LED_MAPPER_NO_GUI
49 | unique_ptr m_gui;
50 | ofxDatGuiScrollView *m_listVideos;
51 | unique_ptr m_guiTheme;
52 | #endif
53 |
54 | public:
55 | Player();
56 | ~Player();
57 |
58 | void load(const string &path);
59 | void save(const string &path);
60 | void reset();
61 | void setColorize(int r, int g, int b, int a);
62 | void setupGui();
63 |
64 | void setGuiPosition(int x, int y);
65 | void draw(float x, float y, float w, float h);
66 | void drawGui();
67 | ofxDatGui *getGui();
68 | void addContent(const string &path);
69 | void deleteContent(const string &id);
70 | void setCurrentContent(const string &id);
71 | const string getNextContent(const string &id);
72 |
73 | void updateListView();
74 |
75 | #ifndef LED_MAPPER_NO_GUI
76 | void onButtonClick(ofxDatGuiButtonEvent e);
77 | void onScrollViewEvent(ofxDatGuiScrollViewEvent e);
78 | void onSliderEvent(ofxDatGuiSliderEvent e);
79 | #endif
80 | };
81 |
--------------------------------------------------------------------------------
/src/ledMapperApp.cpp:
--------------------------------------------------------------------------------
1 | #include "ledMapperApp.h"
2 |
3 | #define SYPHON_W 1920
4 | #define SYPHON_H 1080
5 |
6 | static const string s_configName = "config" + LedMapper::LM_CONFIG_EXTENSION;
7 | static const string s_playerFolderPath = "Player";
8 |
9 | static const vector s_menuItems{ "Input", "Control", "Player" };
10 |
11 | using namespace LedMapper;
12 |
13 | //--------------------------------------------------------------
14 | void ledMapperApp::setup()
15 | {
16 |
17 | #ifndef NDEBUG
18 | ofSetLogLevel(OF_LOG_VERBOSE);
19 | #else
20 | ofSetLogLevel(OF_LOG_ERROR);
21 |
22 | #ifdef WIN32
23 | // no-op
24 | #elif defined(__APPLE__)
25 | ofSetDataPathRoot("../Resources/");
26 | #elif defined(TARGET_LINUX)
27 | // no-op
28 | #endif
29 |
30 | #endif
31 |
32 | ofSetFrameRate(60);
33 | ofSetEscapeQuitsApp(false);
34 | ofSetVerticalSync(true);
35 |
36 | ofEnableAntiAliasing();
37 | ofSetCircleResolution(60);
38 |
39 | syphonW = 600;
40 | syphonH = 400;
41 | syphonX = 310;
42 | syphonY = 210;
43 |
44 | m_configPath = LM_CONFIG_PATH;
45 | m_configName = s_configName;
46 |
47 | bMenuExpanded = true;
48 | bSetupGui = false;
49 | bTestImage = false;
50 | bTestImageAnimate = false;
51 | animateHue = 0.0;
52 |
53 | m_menuSelected = s_menuItems.front();
54 |
55 | /// Init ofxLedMapper and Player instances before load
56 | m_ledMapper = make_unique();
57 | m_player = make_unique();
58 |
59 | load(m_configPath);
60 |
61 | #ifdef TARGET_WIN32
62 | m_spoutIn.setup();
63 | #elif defined(TARGET_OSX)
64 | SyphonDir.setup();
65 | Syphon1.setup();
66 | #endif
67 |
68 | prev_dirIdx = -1;
69 | dirIdx = 0;
70 |
71 | m_fbo.allocate(SYPHON_W, SYPHON_H, GL_RGB);
72 | m_fbo.begin();
73 | ofClear(0, 0, 0);
74 | m_fbo.end();
75 |
76 | ofSetWindowTitle("ledMapper TVL");
77 |
78 | textHelp = " Hold '1' / '2' / '3' + Left Click - add 'line' / 'circle' / 'region' grab object "
79 | "in active controller \n Hold BKSPS + Left Click - on line edges to delete line \n "
80 | "UP/DOWN keys - switch between controllers \n 's' - save , 'l' - load \n When turn "
81 | "on 'Debug controller' you can switch between all controlles to solo each and map "
82 | "easily";
83 | }
84 |
85 | void ledMapperApp::setupGui()
86 | {
87 | m_guiTheme = make_unique();
88 |
89 | /// setup menu gui
90 | m_guiMenu
91 | = make_unique("Menu", ofColor::fromHex(LedMapper::LM_COLOR_GREEN_DARK));
92 | for (const auto &it : s_menuItems) {
93 | auto but = m_guiMenu->addButton(it);
94 | but->onButtonEvent(this, &ledMapperApp::onButtonClick);
95 | but->setLabelAlignment(ofxDatGuiAlignment::CENTER);
96 | }
97 | auto topTheme = make_unique();
98 | m_guiMenu->setTheme(topTheme.get());
99 | bMenuExpanded ? m_guiMenu->expand() : m_guiMenu->collapse();
100 | m_guiMenu->horizontal();
101 |
102 | /// setup gui responsible for video input
103 | m_guiInput->setAssetPath("");
104 | m_guiInput = make_unique(ofxDatGuiAnchor::TOP_RIGHT);
105 | m_guiInput->setTheme(m_guiTheme.get());
106 | m_guiInput->setWidth(LM_GUI_WIDTH);
107 | m_guiInput->setAutoDraw(false);
108 | m_guiInput->addHeader("Input");
109 |
110 | m_syphonList = m_guiInput->addDropdown("source", vector());
111 | m_syphonList->onDropdownEvent(this, &ledMapperApp::onDropdownEvent);
112 | updateVideoServers();
113 |
114 | m_guiInput->addSlider("width", 100, 1920)->bind(syphonW);
115 | m_guiInput->addSlider("height", 100, 1920)->bind(syphonH);
116 | m_guiInput->addSlider("X offset", 0, 1000)->bind(syphonX);
117 | m_guiInput->addSlider("Y offset", 0, 1000)->bind(syphonY);
118 |
119 | m_guiInput->addSlider("bright", 0, 255)->bind(filterA);
120 | m_guiInput->addSlider("red", 0, 255)->bind(filterR);
121 | m_guiInput->addSlider("green", 0, 255)->bind(filterG);
122 | m_guiInput->addSlider("blue", 0, 255)->bind(filterB);
123 |
124 | m_guiInput->addToggle("test image")->bind(bTestImage);
125 | m_guiInput->addToggle("animate image")->bind(bTestImageAnimate);
126 |
127 | bSetupGui = true;
128 | updateGuiPosition();
129 | }
130 |
131 | void ledMapperApp::updateGuiPosition()
132 | {
133 | if (!bSetupGui)
134 | return;
135 |
136 | m_guiMenu->setPosition(ofGetWidth() - m_guiMenu->getWidth(), 0);
137 | m_guiInput->setPosition(ofGetWidth() - LM_GUI_WIDTH, LM_GUI_TOP_BAR);
138 | m_ledMapper->setGuiPosition(ofGetWidth() - LM_GUI_WIDTH, LM_GUI_TOP_BAR);
139 | m_player->setGuiPosition(ofGetWidth() - LM_GUI_WIDTH, LM_GUI_TOP_BAR);
140 | }
141 |
142 | /// on menu item selection focus on needed gui and set needed lambda to draw items gui
143 | void ledMapperApp::selectMenuItem(const string &item)
144 | {
145 | /// because this guis are in one place first make invisible so they don't react when inavtive
146 | m_guiInput->setVisible(false);
147 | m_player->getGui()->setVisible(false);
148 | m_ledMapper->setGuiActive(false);
149 |
150 | if (m_menuSelected == "Control") {
151 | m_ledMapper->setGuiActive(true);
152 | m_drawMenuGuiFunc = [this]() { m_ledMapper->drawGui(); };
153 | }
154 | else if (m_menuSelected == "Input") {
155 | m_guiInput->setVisible(true);
156 | m_drawMenuGuiFunc = [this]() {
157 | m_guiInput->update();
158 | m_guiInput->draw();
159 | };
160 | }
161 | else if (m_menuSelected == "Player") {
162 | m_player->getGui()->setVisible(true);
163 | m_drawMenuGuiFunc = [this]() { m_player->drawGui(); };
164 | }
165 | }
166 |
167 | //--------------------------------------------------------------
168 | void ledMapperApp::update()
169 | {
170 | updateGuiPosition();
171 | m_guiMenu->update();
172 |
173 | updateVideoServers();
174 | #ifdef TARGET_WIN32
175 | // receive Spout texture
176 | m_spoutIn.updateTexture();
177 | #endif
178 |
179 | m_fbo.begin();
180 |
181 | ofClear(0, 0, 0);
182 |
183 | ofTranslate(syphonX, syphonY);
184 |
185 | ofFill();
186 | ofSetColor(filterR, filterG, filterB, filterA);
187 |
188 | /// Platform specific video stream input draw
189 | #ifdef TARGET_WIN32
190 | if (m_spoutIn.getTexture().isAllocated())
191 | m_spoutIn.getTexture().draw(-syphonW / 2, -syphonH / 2, syphonW, syphonH);
192 | #elif defined(TARGET_OSX)
193 | if (Syphon1.getApplicationName() != "") {
194 | Syphon1.draw(-syphonW / 2, -syphonH / 2, syphonW, syphonH);
195 | }
196 | #endif
197 |
198 | if (bTestImage) {
199 | if (bTestImageAnimate) {
200 | ofColor col;
201 | col.setHsb(animateHue++, 255, filterA);
202 | ofSetColor(col);
203 | if (animateHue > 255)
204 | animateHue = 0.0;
205 | }
206 | ofDrawRectangle(-syphonW / 2, -syphonH / 2, syphonW, syphonH);
207 | }
208 |
209 | /// update color filter settings and draw playing video if has one
210 | m_player->setColorize(filterR, filterG, filterB, filterA);
211 | m_player->draw(-syphonW / 2, -syphonH / 2, syphonW, syphonH);
212 |
213 | m_fbo.end();
214 |
215 | m_ledMapper->update();
216 | }
217 |
218 | //--------------------------------------------------------------
219 | void ledMapperApp::draw()
220 | {
221 | ofSetBackgroundColor(0);
222 |
223 | ofSetColor(255);
224 | m_fbo.draw(0, 0);
225 |
226 | /// update LM with grabbed pixels to send them
227 | m_ledMapper->send(m_fbo.getTexture());
228 | /// draw LM grab objects
229 | m_ledMapper->draw();
230 |
231 | /// GUI stuff
232 | if (bMenuExpanded != m_guiMenu->getIsExpanded()) {
233 | bMenuExpanded = m_guiMenu->getIsExpanded();
234 | ofLogVerbose() << "Toggle menu to " << bMenuExpanded;
235 | }
236 |
237 | m_guiMenu->draw();
238 |
239 | if (m_guiMenu->getIsExpanded() && bSetupGui) {
240 | m_drawMenuGuiFunc();
241 | }
242 |
243 | ofSetWindowTitle("ledMapper TVL (fps: " + ofToString(static_cast(ofGetFrameRate())) + ")");
244 | }
245 |
246 | void ledMapperApp::updateVideoServers()
247 | {
248 | #ifdef TARGET_WIN32
249 | /*if (bSetupGui && m_syphonList->size() != Spout.getSenderCount()) {
250 | vector list;
251 | for (int i = 0; i < Spout.getSenderCount(); i++) {
252 | list.push_back(Spout.getSenderName(i));
253 | }
254 | m_syphonList->setDropdownList(list);
255 | if (prev_dirIdx == -1 && !list.empty()) {
256 | dirIdx = prev_dirIdx = 0;
257 | }
258 |
259 | }*/
260 | #elif defined(TARGET_OSX)
261 |
262 | if (bSetupGui && m_syphonList->size() != SyphonDir.size()) {
263 | vector list;
264 | for (auto &serv : SyphonDir.getServerList()) {
265 | list.push_back(serv.serverName + ": " + serv.appName);
266 | }
267 | m_syphonList->setDropdownList(list);
268 | // -1 initial value
269 | if (Syphon1.getApplicationName() == "" && !list.empty()) {
270 | dirIdx = prev_dirIdx = 0;
271 | Syphon1.set(SyphonDir.getDescription(dirIdx));
272 | }
273 | }
274 |
275 | #endif
276 | }
277 |
278 | void ledMapperApp::save(const string &folderPath)
279 | {
280 | ofJson conf;
281 |
282 | XML.clear();
283 |
284 | conf["screenPosX"] = ofGetWindowPositionX();
285 | conf["screenPosY"] = ofGetWindowPositionY();
286 | conf["screenWidth"] = ofGetWidth();
287 | conf["screenHeight"] = ofGetHeight();
288 |
289 | conf["bMenuExpanded"] = bMenuExpanded;
290 | conf["menuSelected"] = m_menuSelected;
291 |
292 | conf["syphonW"] = syphonW;
293 | conf["syphonH"] = syphonH;
294 | conf["syphonX"] = syphonX;
295 | conf["syphonY"] = syphonY;
296 | conf["brightness"] = filterA;
297 | conf["filterR"] = filterR;
298 | conf["filterG"] = filterG;
299 | conf["filterB"] = filterB;
300 | conf["bTestImage"] = bTestImage;
301 | conf["bTestImageAnimate"] = bTestImageAnimate;
302 |
303 | ofSavePrettyJson(folderPath + s_configName, conf);
304 |
305 | m_ledMapper->save(folderPath);
306 | m_player->save(folderPath);
307 | }
308 |
309 | bool ledMapperApp::load(const string &folderPath)
310 | {
311 | /// if empty set default
312 | m_configPath = folderPath != "" ? folderPath : LM_CONFIG_PATH;
313 |
314 | auto conf = ofLoadJson(m_configPath + m_configName);
315 |
316 | /// if conf empty fill with defaults
317 | ofSetWindowPosition(conf.count("screenPosX") ? conf.at("screenPosX").get() : 100,
318 | conf.count("screenPosY") ? conf.at("screenPosY").get() : 100);
319 | ofSetWindowShape(conf.count("screenWidth") ? conf.at("screenWidth").get() : 1024,
320 | conf.count("screenHeight") ? conf.at("screenHeight").get() : 768);
321 |
322 | bMenuExpanded = conf.count("bMenuExpanded") ? conf.at("bMenuExpanded").get() : true;
323 | m_menuSelected
324 | = conf.count("menuSelected") ? conf.at("menuSelected").get() : s_menuItems.front();
325 |
326 | syphonW = conf.count("syphonW") ? conf.at("syphonW").get() : 600;
327 | syphonH = conf.count("syphonH") ? conf.at("syphonH").get() : 400;
328 | syphonX = conf.count("syphonX") ? conf.at("syphonX").get() : 300;
329 | syphonY = conf.count("syphonY") ? conf.at("syphonY").get() : 200;
330 | filterA = conf.count("brightness") ? conf.at("brightness").get() : 150;
331 | filterR = conf.count("filterR") ? conf.at("filterR").get() : 255;
332 | filterG = conf.count("filterG") ? conf.at("filterG").get() : 255;
333 | filterB = conf.count("filterB") ? conf.at("filterB").get() : 255;
334 | bTestImage = conf.count("bTestImage") ? conf.at("bTestImage").get() : true;
335 | bTestImageAnimate
336 | = conf.count("bTestImageAnimate") ? conf.at("bTestImageAnimate").get() : true;
337 |
338 | m_ledMapper->load(folderPath);
339 | m_player->load(folderPath);
340 |
341 | setupGui();
342 | selectMenuItem(m_menuSelected);
343 |
344 | return true;
345 | }
346 |
347 | //--------------------------------------------------------------
348 | void ledMapperApp::onDropdownEvent(ofxDatGuiDropdownEvent e)
349 | {
350 | #ifdef TARGET_OSX
351 | if (e.child >= SyphonDir.size())
352 | return;
353 | dirIdx = e.child;
354 | Syphon1.set(SyphonDir.getDescription(dirIdx));
355 | #endif
356 | }
357 |
358 | void ledMapperApp::onButtonClick(ofxDatGuiButtonEvent e)
359 | {
360 | string name = e.target->getName();
361 |
362 | /// check for Menu items click
363 | if (find_if(begin(s_menuItems), end(s_menuItems),
364 | [&name](const string &it) { return name == it; })
365 | != end(s_menuItems)) {
366 | ofLogVerbose() << "Switch Menu to " << e.target->getName();
367 | m_menuSelected = e.target->getName();
368 | selectMenuItem(m_menuSelected);
369 | }
370 | }
371 |
372 | //--------------------------------------------------------------
373 | void ledMapperApp::keyPressed(int key)
374 | {
375 |
376 | switch (key) {
377 | case 's':
378 | save(m_configPath);
379 | break;
380 | case 'l':
381 | load(m_configPath);
382 | break;
383 | case 'h':
384 | bHelp = !bHelp;
385 | break;
386 | #ifdef TARGET_WIN32
387 | case 'i':
388 | m_spoutIn.showSenders();
389 | break;
390 | #endif
391 | default:
392 | break;
393 | }
394 | }
395 |
396 | //--------------------------------------------------------------
397 | void ledMapperApp::keyReleased(int key) {}
398 | //--------------------------------------------------------------
399 | void ledMapperApp::mouseMoved(int x, int y) {}
400 | //--------------------------------------------------------------
401 | void ledMapperApp::mouseDragged(int x, int y, int button) {}
402 | //--------------------------------------------------------------
403 | void ledMapperApp::mousePressed(int x, int y, int button) {}
404 | //--------------------------------------------------------------
405 | void ledMapperApp::windowResized(int w, int h) { updateGuiPosition(); }
406 |
407 | void ledMapperApp::dragEvent(ofDragInfo info)
408 | {
409 | if (info.files.empty())
410 | return;
411 |
412 | auto dragPt = info.position;
413 |
414 | // draggedImages.assign( info.files.size(), ofImage() );
415 | for (const auto &filePath : info.files) {
416 |
417 | /// Check for config file in folder, if found load it and folder it contains
418 | if (filePath.compare(filePath.size() - LM_CONFIG_EXTENSION.size(),
419 | LM_CONFIG_EXTENSION.size(), LM_CONFIG_EXTENSION)
420 | == 0) {
421 | ofLogVerbose() << "!!!!!!! LedMapper CONFIG Path=" << filePath;
422 | std::filesystem::path pth(filePath);
423 |
424 | /// Update config name from default and load folder
425 | m_configName = pth.filename().string();
426 | string containingFolder = pth.parent_path().string();
427 | containingFolder.push_back(pth.preferred_separator);
428 | load(containingFolder);
429 | continue;
430 | }
431 |
432 | ofLogVerbose() << "DRAG FILE=" << filePath;
433 | /// Try import file to Player
434 | m_player->addContent(filePath);
435 | }
436 | }
437 |
438 | void ledMapperApp::exit()
439 | {
440 | #ifdef TARGET_WIN32
441 | m_spoutIn.exit();
442 | #endif
443 | }
444 |
--------------------------------------------------------------------------------
/src/ledMapperApp.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "ofMain.h"
4 | #include "ofxDatGui.h"
5 | #include "ofxLedMapper.h"
6 | #include "Player.h"
7 |
8 | #ifdef TARGET_WIN32
9 | #include "ofxSpout2Receiver.h"
10 | #elif defined(TARGET_OSX)
11 | #include "ofxSyphon.h"
12 | #endif
13 |
14 | class ledMapperApp : public ofBaseApp{
15 |
16 | public:
17 | void setup();
18 | void setupGui();
19 |
20 | void update();
21 | void updateGuiPosition();
22 | void selectMenuItem(const string &item);
23 | void updateVideoServers();
24 | void save(const string & folderPath = "");
25 | bool load(const string & folderPath = "");
26 |
27 | void draw();
28 | void exit();
29 |
30 | void onDropdownEvent(ofxDatGuiDropdownEvent e);
31 | void onButtonClick(ofxDatGuiButtonEvent e);
32 | void keyPressed(int key);
33 | void keyReleased(int key);
34 | void mouseMoved(int x, int y );
35 | void mouseDragged(int x, int y, int button);
36 | void mousePressed(int x, int y, int button);
37 | void windowResized(int w, int h);
38 | void dragEvent(ofDragInfo info);
39 |
40 | string m_configPath, m_configName;
41 |
42 | unique_ptr m_ledMapper;
43 | unique_ptr m_player;
44 | ofFbo m_fbo;
45 |
46 | ofPixels m_pixels;
47 | ofTexture tex;
48 |
49 | unique_ptr m_guiMenu;
50 | unique_ptr m_guiInput;
51 | unique_ptr m_guiTheme;
52 | ofxDatGuiDropdown* m_syphonList;
53 |
54 | std::function m_drawMenuGuiFunc;
55 | string m_menuSelected;
56 |
57 | #ifdef TARGET_WIN32
58 | //ofxSpout::Receiver Spout;
59 | ofxSpout2::Receiver m_spoutIn;
60 | #elif defined(TARGET_OSX)
61 | ofxSyphonClient Syphon1, Syphon2;
62 | ofxSyphonServerDirectory SyphonDir;
63 | #endif
64 | int prev_dirIdx, dirIdx;
65 |
66 | int idSyphonServer, syphonW, syphonH, syphonX, syphonY;
67 | int filterA, filterR, filterG, filterB;
68 | bool bRotate;
69 | float rotate;
70 | int rotatePos;
71 |
72 | ofxXmlSettings XML;
73 |
74 | bool bHelp = false, bSetupGui, bTestImage, bTestImageAnimate, bMenuExpanded;
75 | float animateHue;
76 | string textHelp;
77 | };
78 |
--------------------------------------------------------------------------------
/src/main.cpp:
--------------------------------------------------------------------------------
1 | #include "ofMain.h"
2 |
3 | #include "ledMapperApp.h"
4 |
5 | #ifdef WIN32
6 | #pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
7 | #endif
8 |
9 | //========================================================================
10 | int main()
11 | {
12 | ofGLWindowSettings settings;
13 | settings.setGLVersion(3, 2); // <--- GL Programmable Renderer
14 | settings.setSize(1024, 768);
15 | ofCreateWindow(settings); // <-------- setup the GL context
16 |
17 | // this kicks off the running of my app
18 | // can be OF_WINDOW or OF_FULLSCREEN
19 | // pass in width and height too:
20 | ofRunApp(new ledMapperApp());
21 | }
22 |
--------------------------------------------------------------------------------