From 9647ba5bdfea6a297a1804272e29ec4cb1486971 Mon Sep 17 00:00:00 2001 From: magdesign Date: Sun, 5 Nov 2017 12:46:56 +0100 Subject: [PATCH 001/103] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index b2d8902..d37ace3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +# This fork is made to integrate some important functions into PiMapper. +# 1. Slide show function (play all images from a folder) +# 2. Play all videos from a folder +# 3. Circular shapes for mapping (there are only sqaure and tringle) +# 4. Grid Warp, meshing of sqare shapes) + +This will be an opensource project and freely available for everyone. +Each function will be rewarded to the coder how realise it. + + # ofxPiMapper [![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From 6fce42b95d9da4265b1a0748f74337d229686c9c Mon Sep 17 00:00:00 2001 From: magdesign Date: Sun, 5 Nov 2017 12:47:37 +0100 Subject: [PATCH 002/103] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d37ace3..32c42e8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # This fork is made to integrate some important functions into PiMapper. -# 1. Slide show function (play all images from a folder) -# 2. Play all videos from a folder -# 3. Circular shapes for mapping (there are only sqaure and tringle) -# 4. Grid Warp, meshing of sqare shapes) +### 1. Slide show function (play all images from a folder) +### 2. Play all videos from a folder +### 3. Circular shapes for mapping (there are only sqaure and tringle) +### 4. Grid Warp, meshing of sqare shapes) This will be an opensource project and freely available for everyone. Each function will be rewarded to the coder how realise it. From 656bfbf64dd0516dd0bc56f9f7ecc27a7a6fd6f1 Mon Sep 17 00:00:00 2001 From: magdesign Date: Sun, 5 Nov 2017 12:49:00 +0100 Subject: [PATCH 003/103] Update README.md --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 32c42e8..e8b6dd0 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # This fork is made to integrate some important functions into PiMapper. ### 1. Slide show function (play all images from a folder) ### 2. Play all videos from a folder -### 3. Circular shapes for mapping (there are only sqaure and tringle) -### 4. Grid Warp, meshing of sqare shapes) +### 3. Circular shapes for mapping (there are only square and tringle) +### 4. Grid Warp, meshing of square shapes) This will be an opensource project and freely available for everyone. -Each function will be rewarded to the coder how realise it. + +Each function will be rewarded to the coder from a pot sponsered by pocketvj.com. # ofxPiMapper From dd20b798495601f7482a10a7926e7066211452f8 Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 6 Nov 2017 10:53:54 +0100 Subject: [PATCH 004/103] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e8b6dd0..7855a63 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -# This fork is made to integrate some important functions into PiMapper. +# This fork is made to integrate some important functions into PiMapper (RPi/Arm version only). ### 1. Slide show function (play all images from a folder) ### 2. Play all videos from a folder ### 3. Circular shapes for mapping (there are only square and tringle) ### 4. Grid Warp, meshing of square shapes) This will be an opensource project and freely available for everyone. - +Targeting OF_0.9.x on RaspberryPi. Each function will be rewarded to the coder from a pot sponsered by pocketvj.com. From 3ebf2920c6f773340682a22c0072f047501becd5 Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 6 Nov 2017 10:54:11 +0100 Subject: [PATCH 005/103] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7855a63..ccda122 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ### 1. Slide show function (play all images from a folder) ### 2. Play all videos from a folder ### 3. Circular shapes for mapping (there are only square and tringle) -### 4. Grid Warp, meshing of square shapes) +### 4. Grid Warp (meshing of square shapes) This will be an opensource project and freely available for everyone. Targeting OF_0.9.x on RaspberryPi. From 4d060f35f53a8f145710bebec760a983cb6bd9dd Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 6 Nov 2017 11:21:25 +0100 Subject: [PATCH 006/103] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ccda122..eaf6491 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,16 @@ # This fork is made to integrate some important functions into PiMapper (RPi/Arm version only). ### 1. Slide show function (play all images from a folder) +This should be selectable as an additional FBO source in PiMapper, looping all images in the /media/internal/images/* folder +Would be cool to adjust the speed with a simple flag, simple opacity transition welcome, but not necessary. Refresh state, so it checks if there are new images added during playback and play them as well. make all images fullscreen. +(if its not possible to handle various sizes as one, i will make an imagemagick script to convert all to 1920x1080) ### 2. Play all videos from a folder -### 3. Circular shapes for mapping (there are only square and tringle) +This should be a an additional FBO source in PiMapper, looping all videos in /media/internal/video/* +### 3. Circular shapes for mapping (there are only square and tringle shapes so far) +Circualr mapping shape ### 4. Grid Warp (meshing of square shapes) +https://forum.openframeworks.cc/t/grid-mesh-warping/12883 +### 5. SoftEdge +Image overlay to making adges transparent, could be achieved with overlaing a png with a black gradient. This will be an opensource project and freely available for everyone. Targeting OF_0.9.x on RaspberryPi. From 3c9b45b8d12172da584e69a4dc0f2d3823d11b44 Mon Sep 17 00:00:00 2001 From: magdesign Date: Tue, 7 Nov 2017 01:29:51 +0100 Subject: [PATCH 007/103] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index eaf6491..e38fa9b 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ This will be an opensource project and freely available for everyone. Targeting OF_0.9.x on RaspberryPi. Each function will be rewarded to the coder from a pot sponsered by pocketvj.com. +The keybindings will be changed to ones matching to PocketVJ CP and there will be an audio branch added. + + # ofxPiMapper From 830c57a71eb071c74a5f074196e7da4faed397d8 Mon Sep 17 00:00:00 2001 From: magdesign Date: Sat, 11 Nov 2017 12:54:39 +0100 Subject: [PATCH 008/103] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e38fa9b..85f6af1 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,9 @@ Would be cool to adjust the speed with a simple flag, simple opacity transition ### 2. Play all videos from a folder This should be a an additional FBO source in PiMapper, looping all videos in /media/internal/video/* ### 3. Circular shapes for mapping (there are only square and tringle shapes so far) -Circualr mapping shape +Circualr mapping shape (if possible with movable center distorsion) ### 4. Grid Warp (meshing of square shapes) +check out this http://www.hv-a.com/lpmt/sssm.pdf on page: 10 https://forum.openframeworks.cc/t/grid-mesh-warping/12883 ### 5. SoftEdge Image overlay to making adges transparent, could be achieved with overlaing a png with a black gradient. From 194d268e3d4d54798a84926742951dfc89a8650c Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 20 Nov 2017 12:24:52 +0100 Subject: [PATCH 009/103] changed keyboard shortcuts to PVJ 3.x --- .../Modes/ProjectionMappingMode.cpp | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 39d4f5b..6351f57 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -64,11 +64,11 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->createSurface(SurfaceType::GRID_WARP_SURFACE); break; - case 'h': + case 'x': app->createSurface(SurfaceType::HEXAGON_SURFACE); break; - case OF_KEY_BACKSPACE: + case 'd': app->eraseSurface(app->getSurfaceManager()->getSelectedSurfaceIndex()); break; @@ -76,19 +76,19 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->togglePerspective(); break; - case '}': + case 'n': app->addGridRow(); break; - case '{': + case 'm': app->removeGridRow(); break; - case ']': + case 'v': app->addGridColumn(); break; - case '[': + case 'b': app->removeGridColumn(); break; @@ -100,15 +100,15 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->selectPrevSurface(); break; - case '>': + case 'k': app->selectNextVertex(); break; - case '<': + case 'l': app->selectPrevVertex(); break; - case OF_KEY_UP: + case '8': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(0.0f, -10.0f)); }else{ @@ -116,7 +116,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case OF_KEY_DOWN: + case '9': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(0.0f, 10.0f)); }else{ @@ -124,7 +124,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case OF_KEY_LEFT: + case '7': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(-10.0f, 0.0f)); }else{ @@ -132,7 +132,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case OF_KEY_RIGHT: + case '0': if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(10.0f, 0.0f)); }else{ @@ -140,23 +140,23 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case ' ': + case 'w': app->togglePause(); break; - case OF_KEY_TAB: + case '5': app->setNextSource(); break; - case 'd': + case 'a': app->duplicateSurface(); break; - case '0': // Move selected surface up the layer stack + case 'h': // Move selected surface up the layer stack app->moveLayerUp(); break; - case '9': // Move selected surface down the layer stack + case 'j': // Move selected surface down the layer stack app->moveLayerDown(); break; @@ -168,7 +168,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->scaleDown(); break; - case 'l': + case 'y': _bDrawLayerPanel = !_bDrawLayerPanel; break; @@ -295,4 +295,4 @@ void ProjectionMappingMode::onGuiEvent(Application * app, GuiEvent & e){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx From 75b8c7f4129815cbb0b6ca359efbdb41f69af15e Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 20 Nov 2017 12:30:27 +0100 Subject: [PATCH 010/103] Updatet Keystrokes to PVJ 3.x --- src/Application/Application.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index 88aa30b..e38ae8c 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -121,7 +121,7 @@ void Application::onKeyPressed(ofKeyEventArgs & args){ setSourceMode(); break; - case 'i': + case 'c': toggleInfo(); break; @@ -133,7 +133,7 @@ void Application::onKeyPressed(ofKeyEventArgs & args){ undo(); break; - case 'n': + case 'f': setNextPreset(); break; From 5a3c678139f129903c8ad4e92a9af552d0b3ddd4 Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 20 Nov 2017 20:51:06 +0100 Subject: [PATCH 011/103] Update README.md --- README.md | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 85f6af1..7d5e2bb 100644 --- a/README.md +++ b/README.md @@ -185,33 +185,41 @@ Key | Function 2 | Texture editing mode 3 | Projection mapping mode, use this to select a surface first 4 | Source selection mode -i | Show info +c | Show info t | Add triangle surface q | Add quad surface +x | Add quad surface g | Add grid warp surface -d | duplicate selected surface -\+ | Scale surface up -\- | Scale surface down +a | duplicate selected surface ++ | Scale surface up +- | Scale surface down p | toggle perspective warping (quad surfaces only) -] | add columns to grid surface (grid warp surfaces only) -[ | remove columns from grid surface (grid warp surfaces only) -} | add rows to grid surface (grid warp surfaces only) -{ | remove rows from grid surface (grid warp surfaces only) +v | add columns to grid surface (grid warp surfaces only) +b | remove columns from grid surface (grid warp surfaces only) +n | add rows to grid surface (grid warp surfaces only) +m | remove rows from grid surface (grid warp surfaces only) . | select next surface (projection mapping mode only) , | select previous surface (projection mapping mode only) -\> | select next vertex -\< | select previous vertex -0 | Move selected surface one layer up -9 | Move selected surface one layer down +k | select next vertex +l | select previous vertex +h | Move selected surface one layer up +j | Move selected surface one layer down s | Save composition -l | Hide/show layer panel +y | Hide/show layer panel z | Undo rbt | Reboot (Raspberry Pi only) sdn | Shutdown (Raspberry Pi only) new | Clear composition (remove all surfaces) ext | Exit application and return to command line -BACKSPACE ('\' via SSH) | Delete surface. -SPACE | Toggle pause for video sources (texture and projection mapping modes) -TAB | Select next source (no need to use the source selection interface) -Arrow keys | Move selection. If no surface is selected in the projection mapping mode, all surfaces are moved. +d | Delete surface. +w | Toggle pause for video sources (texture and projection mapping modes) +5 | Select next source (no need to use the source selection interface) +8 | Move selection Up +9 | Move selection Down +7 | Move selection Left +0 | Move selection Right +If no surface is selected in the projection mapping mode, all surfaces are moved. + +Dont know if this works already: + \/ | Toggle 1px/10px steps for keyboard moves on Raspberry Pi From bf61d47cb26b6fd838a8124be56b6a760ded5aa9 Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 20 Nov 2017 20:51:50 +0100 Subject: [PATCH 012/103] Update README.md --- README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/README.md b/README.md index 7d5e2bb..968bdd7 100644 --- a/README.md +++ b/README.md @@ -48,15 +48,6 @@ You can use the example application of the addon for projection mapping projects ``` -## Compiling on Linux - -There might be issues with compiling because `ofxOMXPlayer` and `ofxRPiCameraVideoGrabber` addons do not exist on Linux and also other non-RPi platforms. To avoid the issues, do the following. - -1. Open `example/addons.make` and remove ofxOMXPlayer line. -2. Open `example-camera/addons.make` and remove ofxRPiCameraVideoGrabber line. -3. Compile one or both examples by using make. - - ## Problems with Audio If you are having problems with audio playback, here are two steps for you. Before you do these, make sure audio of your video file works. From 6aff63c316bf6e98c77b718c970419b8a9d737c2 Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 20 Nov 2017 20:55:01 +0100 Subject: [PATCH 013/103] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 968bdd7..a5215ce 100644 --- a/README.md +++ b/README.md @@ -182,8 +182,8 @@ q | Add quad surface x | Add quad surface g | Add grid warp surface a | duplicate selected surface -+ | Scale surface up -- | Scale surface down +\+ | Scale surface up +\- | Scale surface down p | toggle perspective warping (quad surfaces only) v | add columns to grid surface (grid warp surfaces only) b | remove columns from grid surface (grid warp surfaces only) From 6d0b641a26dd25f5432dceadabe8e2d4d0f5158b Mon Sep 17 00:00:00 2001 From: magdesign Date: Sat, 25 Nov 2017 17:22:41 +0100 Subject: [PATCH 014/103] Update ProjectionMappingMode.cpp --- src/Application/Modes/ProjectionMappingMode.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 6351f57..9495743 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -160,11 +160,11 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->moveLayerDown(); break; - case '+': // Scale surface up + case 'o': // Scale surface up app->scaleUp(); break; - case '-': // Scale surface down + case 'i': // Scale surface down app->scaleDown(); break; From 3ce53c1fecfb468868047ac1f85d9c491079b7d8 Mon Sep 17 00:00:00 2001 From: magdesign Date: Sat, 25 Nov 2017 17:40:01 +0100 Subject: [PATCH 015/103] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a5215ce..cc1feb4 100644 --- a/README.md +++ b/README.md @@ -182,8 +182,8 @@ q | Add quad surface x | Add quad surface g | Add grid warp surface a | duplicate selected surface -\+ | Scale surface up -\- | Scale surface down +o | Scale surface up +i | Scale surface down p | toggle perspective warping (quad surfaces only) v | add columns to grid surface (grid warp surfaces only) b | remove columns from grid surface (grid warp surfaces only) From ed71ea38b4871a69e477a22eedf097c11984c288 Mon Sep 17 00:00:00 2001 From: magdesign Date: Tue, 28 Nov 2017 21:30:37 +0100 Subject: [PATCH 016/103] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index cc1feb4..a673779 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,6 @@ This will be an opensource project and freely available for everyone. Targeting OF_0.9.x on RaspberryPi. Each function will be rewarded to the coder from a pot sponsered by pocketvj.com. -The keybindings will be changed to ones matching to PocketVJ CP and there will be an audio branch added. - # ofxPiMapper From 011a9f6c0a31ce0e9bf24d3ac49fdfd2df7494e9 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 28 Nov 2017 19:14:31 -0500 Subject: [PATCH 017/103] Basic slide show support. --- example/src/magSlide.cpp | 201 ++++++++++++++ example/src/magSlide.h | 227 ++++++++++++++++ example/src/magSlideShowSource.cpp | 415 +++++++++++++++++++++++++++++ example/src/magSlideShowSource.h | 160 +++++++++++ example/src/magSlideTransition.cpp | 60 +++++ example/src/magSlideTransition.h | 67 +++++ example/src/main.cpp | 2 +- example/src/ofApp.cpp | 22 ++ example/src/ofApp.h | 38 +-- 9 files changed, 1174 insertions(+), 18 deletions(-) create mode 100644 example/src/magSlide.cpp create mode 100644 example/src/magSlide.h create mode 100644 example/src/magSlideShowSource.cpp create mode 100644 example/src/magSlideShowSource.h create mode 100644 example/src/magSlideTransition.cpp create mode 100644 example/src/magSlideTransition.h diff --git a/example/src/magSlide.cpp b/example/src/magSlide.cpp new file mode 100644 index 0000000..7e38228 --- /dev/null +++ b/example/src/magSlide.cpp @@ -0,0 +1,201 @@ +// +// magSlide.cpp +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#include "magSlide.h" +#include "magSlideTransition.h" + +#pragma mark magSlide + +int magSlide::idCount = 0; + +magSlide::magSlide(std::string type) +{ + this->type = type; + position = ofPoint(0, 0); + id = magSlide::idCount; + magSlide::idCount++; +} + +void magSlide::update(u_int64_t deltaTime) +{ + runningTime += deltaTime; + + switch (slideState) + { + case SlideState::BuildIn: + if (runningTime >= buildInDuration) + { + setState(Normal); + activeTransition = nullptr; + } + break; + + case SlideState::Normal: + if (runningTime >= buildOutStartTime) + { + setState(BuildOut); + if (buildOut != nullptr) + { + activeTransition = buildOut; + activeTransition->start(); + } + } + break; + + case SlideState::BuildOut: + if (runningTime >= endTime) + { + setState(Complete); + activeTransition = nullptr; + } + break; + } + +} + +void magSlide::setSize(float w, float h) +{ + width = w; + height = h; +} + +void magSlide::setResizeOption(magSlide::ResizeOptions resizeOption) +{ + this->resizeOption = resizeOption; +} + +magSlide::ResizeOptions magSlide::getResizeOption() const +{ + return resizeOption; +} + +void magSlide::setDuration(u_int64_t duration) +{ + this->duration = duration; +} + +void magSlide::setState(SlideState state) +{ + // Don't do anything if the new state is the same + // as the current one: + if (slideState == state) return; + + slideState = state; + ofEventArgs args; + ofNotifyEvent(slideStateChangedEvent, args, this); + + if (slideState == Complete) + { + ofNotifyEvent(slideCompleteEvent, args, this); + } +} + +void magSlide::setTransitionDuration(u_int64_t tDuration) +{ + buildInDuration = buildOutDuration = tDuration; +} + +const std::string magSlide::getSlideStateName() +{ + switch (slideState) + { + case SlideState::BuildIn: + return "BuildIn"; + case SlideState::BuildOut: + return "BuildOut"; + case Normal: + return "Normal"; + case SlideState::Complete: + return "Complete"; + case SlideState::Off: + return "Off"; + } + + return "unknown"; +} + +void magSlide::start(u_int64_t startTime) +{ + this->startTime = startTime; + runningTime = 0; + endTime = duration + buildInDuration + buildOutDuration; + buildOutStartTime = endTime - buildOutDuration; + slideState = magSlide::SlideState::BuildIn; + if (buildIn != nullptr) + { + activeTransition = buildIn; + activeTransition->start(); + } + isComplete = false; +} + + +//////////////////////////////////////////////////////// +#pragma mark MAG_IMAGE_SLIDE +//////////////////////////////////////////////////////// + +magImageSlide::magImageSlide() : magSlide("magImageSlide") {} + +magImageSlide::~magImageSlide() {} + +void magImageSlide::setup(ofImage &image) +{ + // Make a copy of the image: + this->image = ofImage(image); + image.setAnchorPercent(0.5, 0.5); + width = image.getWidth(); + height = image.getHeight(); +} + +void magImageSlide::draw() +{ + image.draw(position, width, height); +} + +//////////////////////////////////////////////////////// +#pragma mark MAG_VIDEO_SLIDE +//////////////////////////////////////////////////////// + +magVideoSlide::magVideoSlide() : magSlide("magVideoSlide") +{} + +magVideoSlide::~magVideoSlide() +{ + videoPlayer.stop(); +} + +bool magVideoSlide::setup(ofFile &file, bool useVideoDuration) +{ + + bool success = videoPlayer.load(file.getAbsolutePath()); + + if (success) + { + videoPlayer.setAnchorPercent(0.5, 0.5); + if (useVideoDuration) + { + useVideoForDuration(); + } + } + + return success; +} + +void magVideoSlide::update() +{ + videoPlayer.update(); +} + +void magVideoSlide::draw() +{ + videoPlayer.draw(position.x, position.y, width, height); +} + +void magVideoSlide::useVideoForDuration() +{ + duration = u_int64_t((videoPlayer.getDuration()*1000)) - buildInDuration - buildOutDuration; +} + diff --git a/example/src/magSlide.h b/example/src/magSlide.h new file mode 100644 index 0000000..bff6d27 --- /dev/null +++ b/example/src/magSlide.h @@ -0,0 +1,227 @@ +// +// Created by Cristobal Mendoza on 11/9/17. +// + +#ifndef MAGSLIDE_H +#define MAGSLIDE_H + +#include "ofMain.h" + +class magSlideTransition; + +class magSlide +{ +public: + magSlide(std::string type); +// ~magSlide(); + virtual void update(u_int64_t deltaTime); + virtual void draw() = 0; + + /** + * Sets the slide up for playback. This method must be + * called before displaying the slide. + * @param startTime + */ + void start(u_int64_t startTime); + + enum ResizeOptions : short + { + /** + * No resizing applied, displays the slide in its native pixel dimensions. + * This is the default behavior. + */ + None = 0, + /** + * Explicitly set a slide to display in its native dimension. + * None and NoResize result in the same output, but if you specify + * a default resizing option in your slideshow and you want a particular + * slide not to resize, you must specify this option. Otherwise the + * slide show option will apply. + */ + NoResize, + + /** + * Sets width and height to match the source's. + * This will distort the slide if the aspect ratios + * don't match. + */ + Fit, + + /** + * Resizes the largest dimension to the source's max, + * the other dimension is resized proportionally. + * This is the default behavior. + */ + FitProportionally, + + /** + * Resizes the shortest dimensions to the source's max, + */ + FillProportionally, + }; + + enum SlideState : short + { + Off = 0, + BuildIn, + Normal, + BuildOut, + Complete + }; + + const std::string &getType() + { return type; } + + float getWidth() + { return width; } + + float getHeight() + { return height; } + + /** + * Change the display size of a slide. This will implicitly + * set resizeOptions to ResizeOption.NoResize. + * This method does not resize the pixel source of the slide. + * @param w The new width + * @param h The new height + */ + virtual void setSize(float w, float h); + + u_int64_t getDuration() + { + return duration; + } + + /** + * Sets the display time of the slide, excluding + * builds (in or out) + * @param duration in milliseconds. + */ + void setDuration(u_int64_t duration); + + /** + * Sets the duration of the buildIn and buildOut + * transitions. Transition times are added to the + * duration of the slide. + * @param tDuration in milliseconds. + */ + void setTransitionDuration(u_int64_t tDuration); + ResizeOptions getResizeOption() const; + void setResizeOption(ResizeOptions resizeOption); + + SlideState getSlideState() const + { + return slideState; + } + + bool isSlideComplete() + { return isComplete; } + + int getId() + { return id; } + + const std::string getSlideStateName(); + + ////////////////////////////// + /// Events + ////////////////////////////// + ofEvent slideCompleteEvent; + ofEvent slideStateChangedEvent; + + friend class magSlideShowSource; + +protected: + int id; + std::string type; + float width; + float height; + ofPoint position; + ResizeOptions resizeOption = None; + SlideState slideState = Off; + bool isComplete; + + std::shared_ptr buildIn = nullptr; + std::shared_ptr buildOut = nullptr; + std::shared_ptr activeTransition = nullptr; + /** + * The duration of the slide in millis, not counting builds + */ + u_int64_t duration; + + /** + * The start time of the slide in milliseconds, in "local time". + * In practice, this means that the start time is always 0. + */ + u_int64_t startTime; + + /** + * The end time of the slide in milliseconds, in "local time". + * The endTime is startTime + buildInDuration + duration + buildOutDuration. + */ + u_int64_t endTime; + + /** + * The duration of the build in transition or effect, in milliseconds. + */ + u_int64_t buildInDuration; + + /** + * The duration of the build out transition or effect, in milliseconds. + */ + u_int64_t buildOutDuration; + + /** + * The "local time" start of the build out transition. This time should also + * signal the enqueuing of the next slide, if applicable. + */ + u_int64_t buildOutStartTime; + + /** + * The amount of time the slide has been displayed, in milliseconds. + * This constitutes the "local time" of the slide. + */ + u_int64_t runningTime; + + void setState(SlideState state); + + static int idCount; +}; + +class magImageSlide : public magSlide +{ +public: + magImageSlide(); + ~ magImageSlide(); + /** + * Sets up an image slide. + * @param image is copied into the member magImageSlide::image and is + * not modified in any way. + */ + void setup(ofImage &image); + + void draw(); + +protected: + ofImage image; +}; + +class magVideoSlide : public magSlide +{ +public: + magVideoSlide(); + ~magVideoSlide(); + bool setup(ofFile &file, bool useVideoDuration = false); + void update(); + void draw(); + + /** + * Sets the slide duration to the duration of the video. + * magSlide::duration will be changed by this call, so if you later + * change your mind you'll have to use magSlide::setDuration. + */ + void useVideoForDuration(); +protected: + ofVideoPlayer videoPlayer; +}; + +#endif diff --git a/example/src/magSlideShowSource.cpp b/example/src/magSlideShowSource.cpp new file mode 100644 index 0000000..a417da4 --- /dev/null +++ b/example/src/magSlideShowSource.cpp @@ -0,0 +1,415 @@ +// +// magSlideShowSource.cpp +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + + +#include "magSlideShowSource.h" +#include "magSlide.h" +#include "magSlideTransition.h" + +magSlideShowSource::magSlideShowSource() +{ + name = "Slide Show Source"; + currentSlideIndex = 0; + isPlaying = false; +} + +bool magSlideShowSource::initialize(magSlideShowSource::Settings settings) +{ + this->settings = settings; + bool success = true; + + if (settings.width <= 0 || settings.height <= 0) + { + ofLogError("magSlideShowSource::initialize") << "Invalid value for width or height. Width and height " + "must be assigned in your Settings struct!"; + return false; + } + + // Allocate the FBO: + allocate(settings.width, settings.height); + + // If there is a path in slidesFolderPath, attempt + // to load the folder and any files in it: + if (!settings.slidesFolderPath.empty()) + { +// ofDirectory dir = ofDirectory(settings.slidesFolderPath); + success = createFromFolderContents(settings.slidesFolderPath); + + if (!success) + { + ofLogError("magSlideShowSource::initialize") << "Failed to create slide show from folder " + << settings.slidesFolderPath; + return success; + } + + } + else if (!settings.slideshowFilePath.empty()) + { + // try to load slide show from xml + success = false; + } + return success; +} + +void magSlideShowSource::setup() +{ + ofx::piMapper::FboSource::setup(); +} + +void magSlideShowSource::update() +{ + if (!isPlaying) return; + + auto nowTime = ofGetElapsedTimeMillis(); + deltaTime = nowTime-lastTime; + runningTime += deltaTime; + lastTime = nowTime; + +// ofLogVerbose() << "Delta: " << deltaTime << " running: " << runningTime; + + for (auto &slide : activeSlides) + { + slide->update(deltaTime); + } + + // Erase any complete slides: + auto iter = activeSlides.begin(); + for (; iter < activeSlides.end(); iter++) + { + if ((*iter)->isSlideComplete()) + { +// ofLogVerbose() << "Removing from active slides id: " << (*iter)->getId(); + activeSlides.erase(iter); + --iter; + } + } + + if (activeSlides.size() == 0 && isPlaying) + { + ofEventArgs args; + isPlaying = false; + ofNotifyEvent(slideshowCompleteEvent, args, this); + } +} + +void magSlideShowSource::draw() +{ + ofBackground(0, 0); + ofPushMatrix(); + ofTranslate(getWidth()/2.0f, getHeight()/2.0f); + ofSetRectMode(OF_RECTMODE_CENTER); + for (auto &slide : activeSlides) + { + ofSetColor(255); + ofFill(); + slide->draw(); + } + ofPopMatrix(); +} + +bool magSlideShowSource::createFromFolderContents(std::string path) +{ + ofDirectory dir = ofDirectory(path); + slides.clear(); + + if (!dir.isDirectory()) + { + ofLogError("magSlideShowSource::createFromFolderContents") << "Folder path " << dir.getAbsolutePath() + << " is not a directory"; + return false; + } + + auto sortedDir = dir.getSorted(); + auto files = sortedDir.getFiles(); + + if (files.size() < 1) + { + ofLogError("magSlideShowSource::createFromFolderContents") << "Folder " << dir.getAbsolutePath() << " is empty"; + return false; + } + + ofImage tempImage; + for (auto &file : files) + { + if (tempImage.load(file)) + { + // make a new image slide + auto slide = std::make_shared(); + slide->setup(tempImage); + slide->setDuration(static_cast(settings.slideDuration*1000)); + slide->setTransitionDuration(static_cast(settings.transitionDuration*1000)); +// if (settings.transitionName == "") + addSlide(slide); + } + else + { + auto ext = ofToLower(file.getExtension()); + + static std::vector movieExtensions = { + "mov", "qt", // Mac + "mp4", "m4p", "m4v", // MPEG + "mpg", "mp2", "mpeg", "mpe", "mpv", "m2v", // MPEG + "3gp", // Phones + "avi", "wmv", "asf", // Windows + "webm", "mkv", "flv", "vob", // Other containers + "ogv", "ogg", + "drc", "mxf" + }; + + // Check if the extension matches known movie formats: + if (ofContains(movieExtensions, ext)) + { + // Make a new video slide + auto slide = std::make_shared(); + if (slide->setup(file)) + { + slide->setDuration(settings.slideDuration*1000.0); + slide->setTransitionDuration(settings.transitionDuration*1000.0); + addSlide(slide); + } + else + { + ofLogError("magSlideShowSource") << "Failed loading video: " << file.getAbsolutePath(); + } + } + + } + } + + if (slides.size() > 0) + { + return true; + } + else + { + return false; + } +} + + +bool magSlideShowSource::loadSlideShow(std::string slideShowXmlPath) +{ + return false; +} + +void magSlideShowSource::addSlide(std::shared_ptr slide) +{ +// ofLogVerbose("addSlide") << slide->getId(); + slides.push_back(slide); + auto rOption = slide->getResizeOption(); + + // If the slide does not have a resize option assign + // the slide show's option + if (rOption == magSlide::ResizeOptions::None) + { + rOption = settings.resizeOption; + } + + // Resize the slide according to the resize option: + switch (rOption) + { + float sw, sh, ratio; + + case magSlide::ResizeOptions::FitProportionally: + sw = slide->getWidth(); + sh = slide->getHeight(); + + if (sw > sh) + { + ratio = (float) getWidth()/sw; + } + else + { + ratio = (float) getHeight()/sh; + } + + slide->setSize(sw*ratio, sh*ratio); + break; + + case magSlide::ResizeOptions::FillProportionally: + sw = slide->getWidth(); + sh = slide->getHeight(); + + if (sw > sh) + { + ratio = (float) getHeight()/sh; + } + else + { + ratio = (float) getWidth()/sw; + } + + slide->setSize(sw*ratio, sh*ratio); + break; + + case magSlide::Fit: + slide->setSize(getWidth(), getHeight()); + break; + } + + // Add transitions: + + if (!settings.transitionName.empty()) + { + static ofParameterGroup bogusParamGroup; // This is temporary so that things compile + slide->buildIn = magSlideTransition::createTransition(settings.transitionName, + slide, + bogusParamGroup, + slide->buildInDuration); + slide->buildOut = magSlideTransition::createTransition(settings.transitionName, + slide, + bogusParamGroup, + slide->buildOutDuration); + } + //// void method(const void * sender, ArgumentsType &args) + ofAddListener(slide->slideStateChangedEvent, this, &magSlideShowSource::slideStateChanged); + ofAddListener(slide->slideCompleteEvent, this, &magSlideShowSource::slideComplete); + +} + +void magSlideShowSource::play() +{ + if (!isPlaying) + { + runningTime = 0; + lastTime = ofGetElapsedTimeMillis(); + isPlaying = true; + auto currentSlide = slides[currentSlideIndex]; + enqueueSlide(currentSlide, ofGetElapsedTimeMillis()); + } +} + +void magSlideShowSource::pause() +{ + isPlaying = false; +} + +void magSlideShowSource::playNextSlide() +{ + //TODO + // I should check here to see if there are less than two slides. + // If so, we should probably return + + currentSlideIndex += direction; + ofEventArgs args; + + // This makes sure that we are doing a signed integer comparison, + // otherwise things get weird + int num = slides.size(); + switch (settings.loopType) + { + case LoopType::NONE: + if (currentSlideIndex >= slides.size() || currentSlideIndex < 0) + { + // If we are not looping and we are out of bounds, return + // without enqueueing a slide. This will cause the slide show + // to end once the last slide builds out. + return; + } + break; + case LoopType::NORMAL: + if (currentSlideIndex >= num) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + currentSlideIndex = 0; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + else if (currentSlideIndex < 0) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + currentSlideIndex = slides.size()-1; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + break; + case LoopType::PING_PONG: + + int num = slides.size(); + if (currentSlideIndex >= num) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + + direction = -1; + currentSlideIndex = slides.size()-2; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + else if (currentSlideIndex < 0) + { + loopCount++; + if (loopCount == settings.numLoops) + { + // Return without enqueueing a new slide if we have + // reached the max number of loops. + return; + } + + direction = 1; + currentSlideIndex = 1; + ofNotifyEvent(slideshowWillLoopEvent, args, this); + } + break; + } + + enqueueSlide(slides[currentSlideIndex], ofGetElapsedTimeMillis()); +} + +void magSlideShowSource::playPrevSlide() +{ + currentSlideIndex -= (direction*2); + playNextSlide(); +} + +void magSlideShowSource::playSlide(int slideIndex) +{ + currentSlideIndex = slideIndex-direction; + playNextSlide(); +} + +void magSlideShowSource::enqueueSlide(std::shared_ptr slide, u_int64_t startTime) +{ +// ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId(); + slide->start(startTime); + activeSlides.push_back(slide); +} + +void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args) +{ + magSlide *slide = (magSlide *) sender; + +// ofLogVerbose("slideStateChanged") << "Slide id: " << slide->getId() << " Slide state: " +// << slide->getSlideStateName(); + if (slide->getSlideState() == magSlide::SlideState::BuildOut) + { + playNextSlide(); + } + +} + +void magSlideShowSource::slideComplete(const void *sender, ofEventArgs &args) +{ + magSlide *slide = (magSlide *) sender; +// ofLogVerbose() << "Slide Complete. id: " << slide->getId(); + slide->isComplete = true; +} + + diff --git a/example/src/magSlideShowSource.h b/example/src/magSlideShowSource.h new file mode 100644 index 0000000..1e808ef --- /dev/null +++ b/example/src/magSlideShowSource.h @@ -0,0 +1,160 @@ +// +// magSlideShowSource.h +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#ifndef MAGSLIDESHOWSOURCE_H +#define MAGSLIDESHOWSOURCE_H + +#include "FboSource.h" +#include "magSlide.h" + +class magSlide; + + +class magSlideShowSource : public ofx::piMapper::FboSource +{ +public: + magSlideShowSource(); + struct Settings; // forward declaration + bool initialize(magSlideShowSource::Settings settings); + void setup() override; + void update() override; + void draw() override; + + /** + * Removes all slides and then attempts to create a new slide show + * based on the contents of the ofDirectory specified. The files may + * be images or videos, which will be transformed into the appropriate slide type. + * Any other file type in the directory is ignored (including other directories). + * The slide order is alphabetical according to filename. + * + * @param dir The ofDirectory to use as a source for a slide show. + * @return true if at least one slide was created. false is returned + * otherwise. Check the console for the specific error. + */ + bool createFromFolderContents(std::string path); + bool loadSlideShow(std::string slideShowXmlPath); + void addSlide(std::shared_ptr slide); + void play(); + void pause(); + void playNextSlide(); + void playPrevSlide(); + void playSlide(int slideIndex); + + enum LoopType + { + NONE = 0, + NORMAL, + PING_PONG + }; + + struct Settings + { + /** + * The pixel width of the FBO. This value must be provided. + */ + float width = 0; + + /** + * The pixel height of the FBO. This value must be provided. + */ + float height = 0; + /** + * An optional default slide duration, in seconds. + * If a slide specifies a duration this value is ignored. + */ + float slideDuration = 5; + + /** + * An optional default transition for the slide show. + */ + std::string transitionName = ""; + + /** + * An optional default transition duration. If no transition + * is specified, this value is ignored; + */ + float transitionDuration = 1; + + /** + * If specified, all applicable files in the folder will + * be used as slides in the slide show. They will be ordered + * alphabetically according to their file names. + * + * If path is relative, the root will likely be the Data folder. + */ + std::string slidesFolderPath; + + /** + * If specified, + */ + std::string slideshowFilePath; + + + /** + * Loop type for the slide show. See @code LoopType for options. + * The default is @code LoopType:None. + */ + LoopType loopType = LoopType::NONE; + + /** + * The number of loops to perform, if the loopType is not NONE. + * If the value is 0 or less than 0, the slide show loops forever. + */ + int numLoops = 0; + + /** + * The resizing option for the slide show. The default is None. If a slide + * already has a resizing option applied, that option will be respected and + * this resizeOption will not be used. + */ + magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::None; + }; + + //////////////////////////////////////////// + //// Event Listeners + //////////////////////////////////////////// + void slideStateChanged(const void* sender, ofEventArgs &args); + void slideComplete(const void* sender, ofEventArgs &args); + + + /** + * Fires when the slide show is done, which happens when + * the loop count is equal to Settings::numLoops, or when + * the last slide is played when @code LoopType::NONE is specified. + * Sender is this slide show. + */ + ofEvent slideshowCompleteEvent; + + + /** + * Fires when the slide show reaches the last slide + * and will perform a loop in the next call. + * Sender is this slide show. + */ + ofEvent slideshowWillLoopEvent; + +protected: + Settings settings; + std::vector> slides; + +private: +// std::shared_ptr currentSlide; + std::vector> activeSlides; + void enqueueSlide(std::shared_ptr slide, u_int64_t startTime); + + u_int64_t lastTime; + u_int64_t deltaTime; + u_int64_t runningTime; + + bool isInitialized = false; + bool isPlaying = false; + int currentSlideIndex = 0; + int direction = 1; + int loopCount = 0; +}; + + +#endif diff --git a/example/src/magSlideTransition.cpp b/example/src/magSlideTransition.cpp new file mode 100644 index 0000000..54ff0c8 --- /dev/null +++ b/example/src/magSlideTransition.cpp @@ -0,0 +1,60 @@ +// +// magSlideTransition.cpp +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#include "magSlideTransition.h" + +std::shared_ptr +magSlideTransition::createTransition(std::string transitionName, std::shared_ptr slide, + ofParameterGroup &settings, u_int64_t duration) +{ + auto transition = magSlideTransition::instantiateTransition(transitionName); + transition->slide = slide; + transition->duration = duration; + transition->loadSettings(settings); + return transition; +} + +void magSlideTransition::start() +{ + runningTime = 0; + isActive = true; +} + +void magSlideTransition::update(u_int64_t timeDelta) +{ + if (!isActive) return; + + runningTime += timeDelta; + if (runningTime >= duration) + { + ofEventArgs arghh; // arghhhh... + transitionCompleteEvent.notify(this, arghh); + isActive = false; + } + +} + +u_int64_t magSlideTransition::getRunningTime() +{ + return runningTime; +} + +float magSlideTransition::getNormalizedTime() +{ + return (double)runningTime / (double)duration; +} + +std::shared_ptr magSlideTransition::instantiateTransition(string transitionName) +{ + return std::make_shared(); +} + +//magDissolveTransition::magDissolveTransition() +//{} +void magVoidTransition::loadSettings(ofParameterGroup &settings) +{ + ofLogNotice("magVoidTransition") << "Void Transition is loading nothing"; +} diff --git a/example/src/magSlideTransition.h b/example/src/magSlideTransition.h new file mode 100644 index 0000000..2c2a15d --- /dev/null +++ b/example/src/magSlideTransition.h @@ -0,0 +1,67 @@ +// +// magSlideTransition.h +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com +// + +#ifndef MAGSLIDETRANSITION_H +#define MAGSLIDETRANSITION_H + + +#include "magSlide.h" + +class magSlideTransition +{ +public: + static std::shared_ptr createTransition(string transitionName, + shared_ptr ptr, + ofParameterGroup &group, + u_int64_t i); + /** + * Begins the transition. This must be called in order for the + * transition to actually do anything! + */ + void start(); + virtual void loadSettings(ofParameterGroup &settings) = 0; + virtual void setup(){} + virtual void update(u_int64_t timeDelta); + virtual void draw(){} + + /** + * Current running time in milliseconds. + * @return u_int64_t + */ + u_int64_t getRunningTime(); + + /** + * Returns the current time in normalized form. + * 0 = start, 1 = end. + * @return Float between 0 and 1. + */ + float getNormalizedTime(); + + ofEvent transitionCompleteEvent; + +protected: + magSlideTransition(){} + std::shared_ptr slide; + u_int64_t runningTime; + u_int64_t duration; + u_int64_t endTime; + bool isActive = false; + static shared_ptr instantiateTransition(string transitionName); +}; + +class magVoidTransition : public magSlideTransition +{ +public: + void loadSettings(ofParameterGroup &settings) override; +}; + +class magDissolveTransition : public magSlideTransition +{ +public: + +}; + +#endif diff --git a/example/src/main.cpp b/example/src/main.cpp index e5733f9..d743ec0 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -17,6 +17,6 @@ int main(int argc, char * argv[]){ Settings::instance()->setFullscreen(fullscreen); - ofSetupOpenGL(800, 450, OF_WINDOW); + ofSetupOpenGL(1024, 768, OF_WINDOW); ofRunApp(new ofApp()); } diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index 93a0d08..9c75f7b 100644 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -14,8 +14,27 @@ void ofApp::setup(){ // a surface in XML settings. crossSource = new CrossSource(); customSource = new CustomSource(); + + // Create the slide show source. + slideShowSource = new magSlideShowSource(); + + // Create the settings struct for the slide show. + magSlideShowSource::Settings settings; + settings.width = 1280; + settings.height = 720; + settings.slidesFolderPath = "sources/images"; + settings.transitionDuration = 0; + settings.slideDuration = 0.5; + settings.loopType = magSlideShowSource::LoopType::NORMAL; + settings.resizeOption = magSlide::ResizeOptions::FitProportionally; + + // Initialize the slide show with our settings. + slideShowSource->initialize(settings); + + // Register our sources: piMapper.registerFboSource(crossSource); piMapper.registerFboSource(customSource); + piMapper.registerFboSource(slideShowSource); piMapper.setup(); // The info layer is hidden by default, press to toggle @@ -23,6 +42,9 @@ void ofApp::setup(){ ofSetFullscreen(Settings::instance()->getFullscreen()); ofSetEscapeQuitsApp(false); + ofSetLogLevel(OF_LOG_VERBOSE); + + slideShowSource->play(); } void ofApp::update(){ diff --git a/example/src/ofApp.h b/example/src/ofApp.h index 8ca4b64..5718af7 100644 --- a/example/src/ofApp.h +++ b/example/src/ofApp.h @@ -6,24 +6,28 @@ #include "CustomSource.h" #include "CrossSource.h" #include "VideoSource.h" +#include "magSlideShowSource.h" -class ofApp : public ofBaseApp { - public: - void setup(); - void update(); - void draw(); - - void keyPressed(int key); - void keyReleased(int key); - - void mousePressed(int x, int y, int button); - void mouseReleased(int x, int y, int button); - void mouseDragged(int x, int y, int button); +class ofApp : public ofBaseApp +{ +public: + void setup(); + void update(); + void draw(); - ofxPiMapper piMapper; + void keyPressed(int key); + void keyReleased(int key); + + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseDragged(int x, int y, int button); + + ofxPiMapper piMapper; + + // By using a custom source that is derived from FboSource + // you will be able to see the source listed in sources editor + CustomSource *customSource; + CrossSource *crossSource; + magSlideShowSource *slideShowSource; - // By using a custom source that is derived from FboSource - // you will be able to see the source listed in sources editor - CustomSource * customSource; - CrossSource * crossSource; }; From e161a626c6b6035fffb0b1fa4bbac4e268e84c1d Mon Sep 17 00:00:00 2001 From: magdesign Date: Wed, 29 Nov 2017 23:30:04 +0100 Subject: [PATCH 018/103] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a673779..f9b3695 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ Key | Function c | Show info t | Add triangle surface q | Add quad surface -x | Add quad surface +x | Add hexagon surface g | Add grid warp surface a | duplicate selected surface o | Scale surface up From be6f2602c0bb529f894248164704da159128d797 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 30 Nov 2017 17:13:27 -0500 Subject: [PATCH 019/103] Rename ResizeOption enum item to play nice with GCC --- example/src/magSlide.h | 8 ++++---- example/src/magSlideShowSource.cpp | 2 +- example/src/magSlideShowSource.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/example/src/magSlide.h b/example/src/magSlide.h index bff6d27..c1889cb 100644 --- a/example/src/magSlide.h +++ b/example/src/magSlide.h @@ -30,7 +30,7 @@ public: * No resizing applied, displays the slide in its native pixel dimensions. * This is the default behavior. */ - None = 0, + NoResize = 0, /** * Explicitly set a slide to display in its native dimension. * None and NoResize result in the same output, but if you specify @@ -38,7 +38,7 @@ public: * slide not to resize, you must specify this option. Otherwise the * slide show option will apply. */ - NoResize, + Native, /** * Sets width and height to match the source's. @@ -136,9 +136,9 @@ protected: float width; float height; ofPoint position; - ResizeOptions resizeOption = None; + ResizeOptions resizeOption = NoResize; SlideState slideState = Off; - bool isComplete; + bool isComplete = false; std::shared_ptr buildIn = nullptr; std::shared_ptr buildOut = nullptr; diff --git a/example/src/magSlideShowSource.cpp b/example/src/magSlideShowSource.cpp index a417da4..5cc8a64 100644 --- a/example/src/magSlideShowSource.cpp +++ b/example/src/magSlideShowSource.cpp @@ -203,7 +203,7 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) // If the slide does not have a resize option assign // the slide show's option - if (rOption == magSlide::ResizeOptions::None) + if (rOption == magSlide::ResizeOptions::NoResize) { rOption = settings.resizeOption; } diff --git a/example/src/magSlideShowSource.h b/example/src/magSlideShowSource.h index 1e808ef..bfa6377 100644 --- a/example/src/magSlideShowSource.h +++ b/example/src/magSlideShowSource.h @@ -110,7 +110,7 @@ public: * already has a resizing option applied, that option will be respected and * this resizeOption will not be used. */ - magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::None; + magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::NoResize; }; //////////////////////////////////////////// From c3ac37a25113d09cd8ed3f4b25cd838b34b3d494 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 30 Nov 2017 17:15:04 -0500 Subject: [PATCH 020/103] Update example's ofxpimapper.xml to display a slide show --- example/bin/data/ofxpimapper.xml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 69a404b..0f1d1ff 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -2,16 +2,16 @@ - 250.000000000 - 138.187255859 + 244.000000000 + 151.187255859 - 403.625549316 - 291.812774658 + 397.625549316 + 304.812774658 - 96.374511719 - 291.812774658 + 90.374511719 + 304.812774658 @@ -36,20 +36,20 @@ - 425.565002441 - 144.782531738 + 542.498229980 + 298.375427246 - 718.434936523 - 144.782531738 + 865.982421875 + 286.925292969 - 718.434936523 - 291.217407227 + 956.157958984 + 659.075439453 - 425.565002441 - 291.217407227 + 498.842285156 + 590.370300293 @@ -72,7 +72,7 @@ fbo - Custom FBO Source + Slide Show Source 1 From 3ce2d8d25e6be9080961866383f0e7458eba164d Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Fri, 1 Dec 2017 16:36:55 -0500 Subject: [PATCH 021/103] Auto stash before merge of "magSlideShowSource" and "kr15h/master" --- .gitignore | 8 + example/CMakeLists.txt | 23 +- example/addons.make | 3 +- example/example.xcodeproj/project.pbxproj | 1545 ++++++++--------- .../xcschemes/example Debug.xcscheme | 19 +- .../xcschemes/example Release.xcscheme | 19 +- example/openFrameworks-Info.plist | 4 +- example/src/magSlideShowSource.cpp | 1 + 8 files changed, 733 insertions(+), 889 deletions(-) diff --git a/.gitignore b/.gitignore index 593962f..3b590fa 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,11 @@ Desktop.ini *.log *.sql *.sqlite + +example/cmake-build-debug/ + +example/\.idea/ + +example/cmake-build-release/ + +example/example\.xcodeproj/xcshareddata/xcschemes/ diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 34fa65e..3cf049a 100755 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -4,6 +4,7 @@ # ===================== CMake Settings =================== # ======================================================== cmake_minimum_required( VERSION 3.3 ) + project( openframeworks ) # ======================================================== @@ -17,21 +18,23 @@ set( APP_NAME example_ofxPiMapper ) set( OF_DIRECTORY_BY_USER "../../.." ) # --------------------- Source Files --------------------- + +file( GLOB_RECURSE + APP_SRC + "src/*.cpp" + ) + set( ${APP_NAME}_SOURCE_FILES - src/main.cpp - src/ofApp.cpp - src/CrossSource.cpp - src/CustomSource.cpp - src/Settings.cpp) + ${APP_SRC} ) # ------------------------ AddOns ----------------------- set( OFX_ADDONS_ACTIVE - ofxXmlSettings - ofxGui - ofxPiMapper - ofxIO - ) + ofxXmlSettings + ofxGui + ofxPiMapper +# ofxIO + ) # ========================================================================= # ============================== OpenFrameworks =========================== diff --git a/example/addons.make b/example/addons.make index aee7c01..e72d2dd 100644 --- a/example/addons.make +++ b/example/addons.make @@ -1,4 +1,3 @@ +ofxGui ofxPiMapper ofxXmlSettings -ofxGui -ofxOMXPlayer diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index 3eaea39..e2402e5 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -7,112 +7,97 @@ objects = { /* Begin PBXBuildFile section */ - 0115A67B1DBF93BA00C51732 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5D91DBF93BA00C51732 /* Application.cpp */; }; - 0115A67C1DBF93BA00C51732 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5DC1DBF93BA00C51732 /* ApplicationBaseMode.cpp */; }; - 0115A67D1DBF93BA00C51732 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5DE1DBF93BA00C51732 /* PresentationMode.cpp */; }; - 0115A67E1DBF93BA00C51732 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E01DBF93BA00C51732 /* ProjectionMappingMode.cpp */; }; - 0115A67F1DBF93BA00C51732 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E21DBF93BA00C51732 /* SourceSelectionMode.cpp */; }; - 0115A6801DBF93BA00C51732 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E41DBF93BA00C51732 /* TextureMappingMode.cpp */; }; - 0115A6811DBF93BA00C51732 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A5E61DBF93BA00C51732 /* SettingsLoader.cpp */; }; - 0115A6A51DBF93BA00C51732 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6311DBF93BA00C51732 /* Gui.cpp */; }; - 0115A6A61DBF93BA00C51732 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6351DBF93BA00C51732 /* LayerPanelWidget.cpp */; }; - 0115A6A71DBF93BA00C51732 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6371DBF93BA00C51732 /* ProjectionEditorWidget.cpp */; }; - 0115A6A81DBF93BA00C51732 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6391DBF93BA00C51732 /* ScaleWidget.cpp */; }; - 0115A6A91DBF93BA00C51732 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A63B1DBF93BA00C51732 /* SourcesEditorWidget.cpp */; }; - 0115A6AA1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A63D1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp */; }; - 0115A6AC1DBF93BA00C51732 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6411DBF93BA00C51732 /* TextureEditorWidget.cpp */; }; - 0115A6AD1DBF93BA00C51732 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6431DBF93BA00C51732 /* TextureHighlightWidget.cpp */; }; - 0115A6AE1DBF93BA00C51732 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6461DBF93BA00C51732 /* Info.cpp */; }; - 0115A6AF1DBF93BA00C51732 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6491DBF93BA00C51732 /* DirectoryWatcher.cpp */; }; - 0115A6B01DBF93BA00C51732 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A64B1DBF93BA00C51732 /* MediaServer.cpp */; }; - 0115A6B11DBF93BA00C51732 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A64D1DBF93BA00C51732 /* ofxPiMapper.cpp */; }; - 0115A6B21DBF93BA00C51732 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6501DBF93BA00C51732 /* BaseSource.cpp */; }; - 0115A6B31DBF93BA00C51732 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6521DBF93BA00C51732 /* FboSource.cpp */; }; - 0115A6B41DBF93BA00C51732 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6541DBF93BA00C51732 /* ImageSource.cpp */; }; - 0115A6B51DBF93BA00C51732 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6561DBF93BA00C51732 /* OMXPlayerCache.cpp */; }; - 0115A6B61DBF93BA00C51732 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6591DBF93BA00C51732 /* VideoSource.cpp */; }; - 0115A6B71DBF93BA00C51732 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A65C1DBF93BA00C51732 /* BaseSurface.cpp */; }; - 0115A6B81DBF93BA00C51732 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A65E1DBF93BA00C51732 /* GridWarpSurface.cpp */; }; - 0115A6B91DBF93BA00C51732 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6601DBF93BA00C51732 /* HexagonSurface.cpp */; }; - 0115A6BA1DBF93BA00C51732 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6621DBF93BA00C51732 /* QuadSurface.cpp */; }; - 0115A6BB1DBF93BA00C51732 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6641DBF93BA00C51732 /* SurfaceFactory.cpp */; }; - 0115A6BC1DBF93BA00C51732 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6661DBF93BA00C51732 /* SurfaceManager.cpp */; }; - 0115A6BD1DBF93BA00C51732 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6681DBF93BA00C51732 /* SurfaceStack.cpp */; }; - 0115A6BE1DBF93BA00C51732 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A66B1DBF93BA00C51732 /* TriangleSurface.cpp */; }; - 0115A6BF1DBF93BA00C51732 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A66E1DBF93BA00C51732 /* BaseJoint.cpp */; }; - 0115A6C01DBF93BA00C51732 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6701DBF93BA00C51732 /* CircleJoint.cpp */; }; - 0115A6C11DBF93BA00C51732 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6741DBF93BA00C51732 /* RadioList.cpp */; }; - 0115A6C21DBF93BA00C51732 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0115A6771DBF93BA00C51732 /* HomographyHelper.cpp */; }; - 016630881DC66DAB0081F28F /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166303D1DC66DAB0081F28F /* AddGridColCmd.cpp */; }; - 016630891DC66DAB0081F28F /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166303F1DC66DAB0081F28F /* AddGridRowCmd.cpp */; }; - 0166308A1DC66DAB0081F28F /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630411DC66DAB0081F28F /* AddSurfaceCmd.cpp */; }; - 0166308B1DC66DAB0081F28F /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630441DC66DAB0081F28F /* ClearSurfacesCmd.cpp */; }; - 0166308C1DC66DAB0081F28F /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630461DC66DAB0081F28F /* CmdManager.cpp */; }; - 0166308D1DC66DAB0081F28F /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630481DC66DAB0081F28F /* DeselectSurfaceCmd.cpp */; }; - 0166308E1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166304A1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp */; }; - 0166308F1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166304C1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp */; }; - 016630901DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166304E1DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp */; }; - 016630911DC66DAB0081F28F /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630501DC66DAB0081F28F /* MvLayerDnCmd.cpp */; }; - 016630921DC66DAB0081F28F /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630521DC66DAB0081F28F /* MvLayerUpCmd.cpp */; }; - 016630931DC66DAB0081F28F /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630541DC66DAB0081F28F /* MvSelectionCmd.cpp */; }; - 016630941DC66DAB0081F28F /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630561DC66DAB0081F28F /* MvSurfaceVertCmd.cpp */; }; - 016630951DC66DAB0081F28F /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630581DC66DAB0081F28F /* MvTexCoordCmd.cpp */; }; - 016630961DC66DAB0081F28F /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166305A1DC66DAB0081F28F /* RmGridColCmd.cpp */; }; - 016630971DC66DAB0081F28F /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166305C1DC66DAB0081F28F /* RmGridRowCmd.cpp */; }; - 016630981DC66DAB0081F28F /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166305E1DC66DAB0081F28F /* RmSurfaceCmd.cpp */; }; - 016630991DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630601DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp */; }; - 0166309A1DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630621DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp */; }; - 0166309B1DC66DAB0081F28F /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630641DC66DAB0081F28F /* SelNextSurfaceCmd.cpp */; }; - 0166309C1DC66DAB0081F28F /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630661DC66DAB0081F28F /* SelNextTexCoordCmd.cpp */; }; - 0166309D1DC66DAB0081F28F /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630681DC66DAB0081F28F /* SelNextVertexCmd.cpp */; }; - 0166309E1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166306A1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp */; }; - 0166309F1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166306C1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp */; }; - 016630A01DC66DAB0081F28F /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166306E1DC66DAB0081F28F /* SelPrevVertexCmd.cpp */; }; - 016630A11DC66DAB0081F28F /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630701DC66DAB0081F28F /* SelSurfaceCmd.cpp */; }; - 016630A21DC66DAB0081F28F /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630721DC66DAB0081F28F /* SelTexCoordCmd.cpp */; }; - 016630A31DC66DAB0081F28F /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630741DC66DAB0081F28F /* SelVertexCmd.cpp */; }; - 016630A41DC66DAB0081F28F /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630761DC66DAB0081F28F /* SetApplicationModeCmd.cpp */; }; - 016630A51DC66DAB0081F28F /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630781DC66DAB0081F28F /* SetNextSourceCmd.cpp */; }; - 016630A61DC66DAB0081F28F /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166307A1DC66DAB0081F28F /* SetPresetCmd.cpp */; }; - 016630A71DC66DAB0081F28F /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166307C1DC66DAB0081F28F /* SetSourceCmd.cpp */; }; - 016630A81DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166307E1DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp */; }; - 016630A91DC66DAB0081F28F /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630801DC66DAB0081F28F /* StartDragSurfaceCmd.cpp */; }; - 016630AA1DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630821DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp */; }; - 016630AB1DC66DAB0081F28F /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630841DC66DAB0081F28F /* TogglePerspectiveCmd.cpp */; }; - 016630AC1DC66DAB0081F28F /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630861DC66DAB0081F28F /* TranslateCanvasCmd.cpp */; }; - 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; - 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; - 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; - 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264840192224F90008A7F5 /* tinyxmlparser.cpp */; }; - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */; }; - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */; }; - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */; }; - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */; }; - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */; }; - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; - 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC801A09047C0009286E /* CustomSource.cpp */; }; - 3995C20A1C79069B00123352 /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3995C2091C79069B00123352 /* Settings.cpp */; }; - 399953691BD54FF600D5B1F1 /* CrossSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 399953671BD54FF600D5B1F1 /* CrossSource.cpp */; }; + 06765053D7BFBBEB43E77B23 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8DA47AF2B265F778E74D4DA /* StartDragSurfaceCmd.cpp */; }; + 14566DCD28D35A80428886C4 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27453C6FAE9B674FD694508D /* SelTexCoordCmd.cpp */; }; + 1CD33E884D9E3358252E82A1 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 907C5B5E104864A2D3A25745 /* ofxToggle.cpp */; }; + 1F4453EA1589AD79F4B34493 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4048CA09E6AAB5F673CBD2F0 /* RadioList.cpp */; }; + 21B18AC78EBFC1FD28C614D5 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B16277019B0C4B684E1B063E /* TextureMappingMode.cpp */; }; + 23963D6D8F0085D5DD2DF394 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 655142313A378162E3929785 /* TogglePerspectiveCmd.cpp */; }; + 25F5CD753AF35B53464E56AE /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0739F09627790055C959BBF4 /* MvTexCoordCmd.cpp */; }; + 274AEF0299D77E27C0C5B205 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18DA1B30717C876AA19CEEC0 /* ProjectionEditorWidget.cpp */; }; + 28F5415281F8D09BBC098355 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 03FCF5559C2A6AB79D947767 /* TranslateCanvasCmd.cpp */; }; + 2A9AFA74E0EF07E58AC11382 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9ECBF061BABECA9C2341372 /* QuadSurface.cpp */; }; + 2AB23B34A18E47DB0D742387 /* CrossSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DDA3608BED55BC67A9DAFF5 /* CrossSource.cpp */; }; + 2E9E05C9FFCE15172A701335 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33DD6E4350FD51C68B7E65F0 /* SettingsLoader.cpp */; }; + 36A98A331EAE1D0A19998A59 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 60F40691CD9DE4DEE1768FE9 /* SaveTexCoordPosCmd.cpp */; }; + 3B90107DB9BF4857E357FCA8 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 16DB3860ECC0D672B08DE71C /* ofxPiMapper.cpp */; }; + 401140F3B7FA4412935BB121 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B3B1807E9CFC3FFBA4DBBEF /* Application.cpp */; }; + 4280FE72330EE80A9929046F /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A0800123A129E9BC12ED207 /* Settings.cpp */; }; + 42AB7CD7DFB89209AB951942 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BCA96396113AAF56D66C844 /* ProjectionMappingMode.cpp */; }; + 42BCE929D520D8872171239A /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62F01592304CB7995200EF7B /* CircleJoint.cpp */; }; + 483908258D00B98B4BE69F07 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 78D67A00EB899FAC09430597 /* ofxLabel.cpp */; }; + 4A53BFBA57F4AD16FB9D2D24 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64156CB2D856E4CE0FBBED96 /* PresentationMode.cpp */; }; + 4BF21A290FA6FE26B87B8971 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FFBE499412CC8DD07163E91 /* SetNextSourceCmd.cpp */; }; + 4D2D4455339FC8C955091C88 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 413E846B881CCADC897A8A40 /* TextureEditorWidget.cpp */; }; + 580602DA874A9CF9E850DEEE /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 231337763726D333E0B3D56C /* AddGridColCmd.cpp */; }; + 5826FF4F63DC430E90AFDA5E /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3538B8AF69CAB7C215FA1EF /* RmGridRowCmd.cpp */; }; + 588E33B9B0BD6F5A2E4DF31D /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7B0806EEA8012D629BE363C /* OMXPlayerCache.cpp */; }; + 5A4349E9754D6FA14C0F2A3A /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */; }; + 5CBB2AB3A60F65431D7B555D /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C88333E71C9457E441C33474 /* ofxButton.cpp */; }; + 6056983B92E88B475FF04299 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D386994DF359F3BD1E66480 /* MvSelectionCmd.cpp */; }; + 60C8089351E49CF344577098 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 784FFEB8D108EC916343AB97 /* SelNextTexCoordCmd.cpp */; }; + 63B57AC5BF4EF088491E0317 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */; }; + 63DB0907B2ACDF9E6F2D9925 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D2400AC1A64EDE5E990C56C /* GridWarpSurface.cpp */; }; + 6438655B2AE4DDA2743241EC /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D020B9B28609D071E21BB76 /* ToggleAnimatedSourceCmd.cpp */; }; + 6500BFD07CA93EFD8A162B25 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7F58FFED7FBFC49573FF65E4 /* SetSourceCmd.cpp */; }; + 67FF225B68ECC1942C833BFE /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC98A68C64BFC941D0B31EE9 /* SelNextSurfaceCmd.cpp */; }; + 7002E598586957E5F20E69A7 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2282B1E05458C3B2BBCE568 /* SelVertexCmd.cpp */; }; + 7702233BBFB6E8D9E8B93CBC /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C61C1F4F1A1ED2660B1D6EDC /* FboSource.cpp */; }; + 7DAB7D546F81A93336034BF7 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DF54314CF2B45BF195B84C6 /* SelPrevSurfaceCmd.cpp */; }; + 800748EF057A284D9DA82F60 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7E88D3956480E0CBAA21641 /* SelPrevTexCoordCmd.cpp */; }; + 82643E358DF270B9EC939699 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A50F23D868C48DF9799BC788 /* RmGridColCmd.cpp */; }; + 837220E80EB56CD44AD27F2A /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15F2C6477A769C03A56D1401 /* ofxSlider.cpp */; }; + 83CACB24937919003F2F9B63 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E2333CF877EE99EBE86F4B0F /* HomographyHelper.cpp */; }; + 84172554824F6959BA431E33 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15C9B02F2CF08112845CD074 /* SetPresetCmd.cpp */; }; + 845DC872C79A75F7B5FABC02 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18041C8871E17DE3E60BFF95 /* MvSurfaceVertCmd.cpp */; }; + 85649EB44DE8F0A3BF8430F9 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836B103542A52C63B004410C /* SurfaceManager.cpp */; }; + 856AA354D08AB4B323081444 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9604B925D32EE39065747725 /* ofxBaseGui.cpp */; }; + 868F230C6074263277ED9B07 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E78D1B2A6DB0856BF8ED1FE /* BaseJoint.cpp */; }; + 892923A127FC7C57469FD078 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB4132974E14024E74E320F5 /* BaseSource.cpp */; }; + 8A3D6CE0A4338871766366B6 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69A4D26FC0AD01A86571540D /* SurfaceHighlightWidget.cpp */; }; + 8CA6C92E3D4F91750BC469FF /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBAFA0B7AFEA589CA5167204 /* MvAllTexCoordsCmd.cpp */; }; + 8E8F94DC506856A4E92FBA8A /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57990D37D728C5711AACBA9F /* LayerPanelWidget.cpp */; }; + 90DE06EA59944C1BEA539719 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8D3CB0B9A827AFA479349BBE /* SetApplicationModeCmd.cpp */; }; + 92527EF632E7EC0E96BC329C /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18385A4F4BC87806616D4F7F /* MediaServer.cpp */; }; + 933A2227713C720CEFF80FD9 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */; }; + 93760FE8B10EBD4081251E10 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDBE053980FA01FAD543D782 /* CmdManager.cpp */; }; + 95CB0A22296B3DB402835DCF /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61291E56B7882C9E9B8F119B /* ImageSource.cpp */; }; + 973F560586CB3735581265E7 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CE817DF3028A4345376E7D /* DeselectTexCoordCmd.cpp */; }; + 9C194C9F4ACD67CD61FBD30D /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCBB74B9531974E1D5DA019B /* HexagonSurface.cpp */; }; + 9CAA3B0DFD59840998C832DA /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 941AD8B39C28D08B9F31077A /* TextureHighlightWidget.cpp */; }; + 9D44DC88EF9E7991B4A09951 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */; }; + 9F968AD3A115328F4BFE5D71 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F2C0EE541190D47BF5911C0A /* BaseSurface.cpp */; }; + A0C1CAB7B9C59DDDC960EB62 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5407451FA68C27B2AAE644A6 /* VideoSource.cpp */; }; + A3E23EF00463364A9FE3860C /* CustomSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76B40246C8B90C1CA4074BB7 /* CustomSource.cpp */; }; + A6EE8D8F3CA590EF6D7FAFA6 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49BE2D8F2A2A57F4EBF83FF4 /* SetTexMapDrawModeCmd.cpp */; }; + A75658250711ADE2C05FC781 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EC481BAB32B250D3EA41AF9E /* MvLayerDnCmd.cpp */; }; + AA98F23DF9897F2241EF3968 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4245228145B1AA737F49CF14 /* SourceSelectionMode.cpp */; }; + B01F972DDDA5F21EF4C8B99D /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B7C308F8B76FCB909581A580 /* RmSurfaceCmd.cpp */; }; + B1EEE5A7EC1876072BF8F7FE /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B323D7489A7B26A63443444F /* AddSurfaceCmd.cpp */; }; + B266578FC55D23BFEBC042E7 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECF8674C7975F1063C5E30CA /* ofxGuiGroup.cpp */; }; + B27F2ADC894A4C463E892AFE /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 03FA94CA9F193C816DE4253F /* SurfaceFactory.cpp */; }; + B56FE57CC35806596D38118C /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 802251BAF1B35B1D67B32FD0 /* ofxSliderGroup.cpp */; }; + B9654D0EF43BCA228B330ED7 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B29C3846BA06080344C1D1E /* SelPrevVertexCmd.cpp */; }; + C0EB2D2E383BA9DE417ADB38 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DF2D82EA37D8C7A5F686EA5 /* TriangleSurface.cpp */; }; + C34B66987F4DA38C21AF325B /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E52D4207C299D5886C8FD2C7 /* MvLayerUpCmd.cpp */; }; + C3A616FB3A463C17E327F395 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C080561EC053F17BB86A668 /* SurfaceStack.cpp */; }; + C4D6DA9B890E612343FD059F /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9631F04A0875ADEB45970DE8 /* ApplicationBaseMode.cpp */; }; + C8D7FA44AA0565654A681157 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E80EE6FB0CC304A6CA287BB /* DeselectSurfaceCmd.cpp */; }; + D61A46C1800537BA43C7884F /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C656C28252AD5E9E09FA2162 /* DuplicateSurfaceCmd.cpp */; }; + D88BA6D139757ED4E1669796 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E4A0386460638A781A7AC84 /* AddGridRowCmd.cpp */; }; + DB8FC60C7512DB810C92625B /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20F9951441118A70E8D55E13 /* DirectoryWatcher.cpp */; }; + E327ACE85A208BAFACD1B7C7 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34B45EB44DED0A47FBAD30F4 /* ScaleSurfaceFromToCmd.cpp */; }; E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; - E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; - E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; - E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; }; - E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; }; - E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; }; - E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; }; - E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; }; - E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; }; E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; - E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; }; - E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; }; - E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; }; - E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; - E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; }; - E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; }; - E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; }; + E5D631612E039E04B1736E76 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B691BBAB665F94F09B2C276 /* SelSurfaceCmd.cpp */; }; + E6D82F5A7B22E9FB46DEEF15 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 140C0677F9F5A5D3B8A89AC4 /* SelNextVertexCmd.cpp */; }; + EA700B09626C8413C92EF860 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DCC24025AD26B4554B000385 /* Gui.cpp */; }; + F06AE014F869282B7F7CE84C /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4EDCDF597954EF25E7AD416 /* ScaleWidget.cpp */; }; + F285EB3169F1566CA3D93C20 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E112B3AEBEA2C091BF2B40AE /* ofxPanel.cpp */; }; + F3EACD31EE5E141FF66C48BD /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEF2CEBAFFABCFED915AFCE1 /* Info.cpp */; }; + F9A6B58165791682416A1685 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 962C349E8F4E59FF335AB2A6 /* ClearSurfacesCmd.cpp */; }; + FB03F0A6D7866DFC55F519EB /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36F59D2F886152DF4115A218 /* SourcesEditorWidget.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -145,211 +130,197 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0100D9401E33E667000D7FA5 /* Mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; - 0115A5D91DBF93BA00C51732 /* Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; - 0115A5DA1DBF93BA00C51732 /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; - 0115A5DC1DBF93BA00C51732 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; - 0115A5DD1DBF93BA00C51732 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; - 0115A5DE1DBF93BA00C51732 /* PresentationMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; - 0115A5DF1DBF93BA00C51732 /* PresentationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; - 0115A5E01DBF93BA00C51732 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; - 0115A5E11DBF93BA00C51732 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; - 0115A5E21DBF93BA00C51732 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; - 0115A5E31DBF93BA00C51732 /* SourceSelectionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; - 0115A5E41DBF93BA00C51732 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; - 0115A5E51DBF93BA00C51732 /* TextureMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; - 0115A5E61DBF93BA00C51732 /* SettingsLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; - 0115A5E71DBF93BA00C51732 /* SettingsLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; - 0115A6311DBF93BA00C51732 /* Gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; - 0115A6321DBF93BA00C51732 /* Gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; - 0115A6341DBF93BA00C51732 /* GuiBaseWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; - 0115A6351DBF93BA00C51732 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; - 0115A6361DBF93BA00C51732 /* LayerPanelWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; - 0115A6371DBF93BA00C51732 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; - 0115A6381DBF93BA00C51732 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; - 0115A6391DBF93BA00C51732 /* ScaleWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; - 0115A63A1DBF93BA00C51732 /* ScaleWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; - 0115A63B1DBF93BA00C51732 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; - 0115A63C1DBF93BA00C51732 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; - 0115A63D1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; - 0115A63E1DBF93BA00C51732 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; - 0115A6411DBF93BA00C51732 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; - 0115A6421DBF93BA00C51732 /* TextureEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; - 0115A6431DBF93BA00C51732 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; - 0115A6441DBF93BA00C51732 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; - 0115A6461DBF93BA00C51732 /* Info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; - 0115A6471DBF93BA00C51732 /* Info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; - 0115A6491DBF93BA00C51732 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; - 0115A64A1DBF93BA00C51732 /* DirectoryWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; - 0115A64B1DBF93BA00C51732 /* MediaServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; - 0115A64C1DBF93BA00C51732 /* MediaServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; - 0115A64D1DBF93BA00C51732 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; - 0115A64E1DBF93BA00C51732 /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; - 0115A6501DBF93BA00C51732 /* BaseSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; - 0115A6511DBF93BA00C51732 /* BaseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; - 0115A6521DBF93BA00C51732 /* FboSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; - 0115A6531DBF93BA00C51732 /* FboSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; - 0115A6541DBF93BA00C51732 /* ImageSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; - 0115A6551DBF93BA00C51732 /* ImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; - 0115A6561DBF93BA00C51732 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; - 0115A6571DBF93BA00C51732 /* OMXPlayerCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; - 0115A6581DBF93BA00C51732 /* SourceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; - 0115A6591DBF93BA00C51732 /* VideoSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; - 0115A65A1DBF93BA00C51732 /* VideoSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; - 0115A65C1DBF93BA00C51732 /* BaseSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; - 0115A65D1DBF93BA00C51732 /* BaseSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; - 0115A65E1DBF93BA00C51732 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; - 0115A65F1DBF93BA00C51732 /* GridWarpSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; - 0115A6601DBF93BA00C51732 /* HexagonSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; - 0115A6611DBF93BA00C51732 /* HexagonSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; - 0115A6621DBF93BA00C51732 /* QuadSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; - 0115A6631DBF93BA00C51732 /* QuadSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; - 0115A6641DBF93BA00C51732 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; - 0115A6651DBF93BA00C51732 /* SurfaceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; - 0115A6661DBF93BA00C51732 /* SurfaceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; - 0115A6671DBF93BA00C51732 /* SurfaceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; - 0115A6681DBF93BA00C51732 /* SurfaceStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; - 0115A6691DBF93BA00C51732 /* SurfaceStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; - 0115A66A1DBF93BA00C51732 /* SurfaceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; - 0115A66B1DBF93BA00C51732 /* TriangleSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; - 0115A66C1DBF93BA00C51732 /* TriangleSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; - 0115A66E1DBF93BA00C51732 /* BaseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; - 0115A66F1DBF93BA00C51732 /* BaseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; - 0115A6701DBF93BA00C51732 /* CircleJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; - 0115A6711DBF93BA00C51732 /* CircleJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; - 0115A6721DBF93BA00C51732 /* EditorType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; - 0115A6731DBF93BA00C51732 /* GuiMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; - 0115A6741DBF93BA00C51732 /* RadioList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; - 0115A6751DBF93BA00C51732 /* RadioList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; - 0115A6771DBF93BA00C51732 /* HomographyHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; - 0115A6781DBF93BA00C51732 /* HomographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; - 0166303D1DC66DAB0081F28F /* AddGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; - 0166303E1DC66DAB0081F28F /* AddGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; - 0166303F1DC66DAB0081F28F /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; - 016630401DC66DAB0081F28F /* AddGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; - 016630411DC66DAB0081F28F /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; - 016630421DC66DAB0081F28F /* AddSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; - 016630431DC66DAB0081F28F /* BaseCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; - 016630441DC66DAB0081F28F /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; - 016630451DC66DAB0081F28F /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; - 016630461DC66DAB0081F28F /* CmdManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; - 016630471DC66DAB0081F28F /* CmdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; - 016630481DC66DAB0081F28F /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; - 016630491DC66DAB0081F28F /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; - 0166304A1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; - 0166304B1DC66DAB0081F28F /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; - 0166304C1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; - 0166304D1DC66DAB0081F28F /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; - 0166304E1DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; - 0166304F1DC66DAB0081F28F /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; - 016630501DC66DAB0081F28F /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; - 016630511DC66DAB0081F28F /* MvLayerDnCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; - 016630521DC66DAB0081F28F /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; - 016630531DC66DAB0081F28F /* MvLayerUpCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; - 016630541DC66DAB0081F28F /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; - 016630551DC66DAB0081F28F /* MvSelectionCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; - 016630561DC66DAB0081F28F /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; - 016630571DC66DAB0081F28F /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; - 016630581DC66DAB0081F28F /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; - 016630591DC66DAB0081F28F /* MvTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; - 0166305A1DC66DAB0081F28F /* RmGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; - 0166305B1DC66DAB0081F28F /* RmGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; - 0166305C1DC66DAB0081F28F /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; - 0166305D1DC66DAB0081F28F /* RmGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; - 0166305E1DC66DAB0081F28F /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; - 0166305F1DC66DAB0081F28F /* RmSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; - 016630601DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; - 016630611DC66DAB0081F28F /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; - 016630621DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; - 016630631DC66DAB0081F28F /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; - 016630641DC66DAB0081F28F /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; - 016630651DC66DAB0081F28F /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; - 016630661DC66DAB0081F28F /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; - 016630671DC66DAB0081F28F /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; - 016630681DC66DAB0081F28F /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; - 016630691DC66DAB0081F28F /* SelNextVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; - 0166306A1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; - 0166306B1DC66DAB0081F28F /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; - 0166306C1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; - 0166306D1DC66DAB0081F28F /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; - 0166306E1DC66DAB0081F28F /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; - 0166306F1DC66DAB0081F28F /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; - 016630701DC66DAB0081F28F /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; - 016630711DC66DAB0081F28F /* SelSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; - 016630721DC66DAB0081F28F /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; - 016630731DC66DAB0081F28F /* SelTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; - 016630741DC66DAB0081F28F /* SelVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; - 016630751DC66DAB0081F28F /* SelVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; - 016630761DC66DAB0081F28F /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; - 016630771DC66DAB0081F28F /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; - 016630781DC66DAB0081F28F /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; - 016630791DC66DAB0081F28F /* SetNextSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; - 0166307A1DC66DAB0081F28F /* SetPresetCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; - 0166307B1DC66DAB0081F28F /* SetPresetCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; - 0166307C1DC66DAB0081F28F /* SetSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; - 0166307D1DC66DAB0081F28F /* SetSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; - 0166307E1DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; - 0166307F1DC66DAB0081F28F /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; - 016630801DC66DAB0081F28F /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; - 016630811DC66DAB0081F28F /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; - 016630821DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; - 016630831DC66DAB0081F28F /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; - 016630841DC66DAB0081F28F /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; - 016630851DC66DAB0081F28F /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; - 016630861DC66DAB0081F28F /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; - 016630871DC66DAB0081F28F /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; - 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofxXmlSettings.cpp; path = ../../ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = ""; }; - 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxXmlSettings.h; path = ../../ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = ""; }; - 3926483D192224F90008A7F5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; - 3926483E192224F90008A7F5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; - 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; - 39264840192224F90008A7F5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; - 3933D5C519BB87BD000ACA55 /* ofxButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; - 3933D5C619BB87BD000ACA55 /* ofxGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; - 397EFC801A09047C0009286E /* CustomSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CustomSource.cpp; sourceTree = ""; }; - 397EFC811A09047C0009286E /* CustomSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomSource.h; sourceTree = ""; }; - 3995C2081C79069B00123352 /* Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; - 3995C2091C79069B00123352 /* Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Settings.cpp; sourceTree = ""; }; - 399953671BD54FF600D5B1F1 /* CrossSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrossSource.cpp; sourceTree = ""; }; - 399953681BD54FF600D5B1F1 /* CrossSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossSource.h; sourceTree = ""; }; - BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; + 00756183A9E41665E637AC23 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = AddSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/AddSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + 01DCC0911400F9ACF5B65578 /* ofxXmlSettings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxXmlSettings.h; path = ../../../addons/ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = SOURCE_ROOT; }; + 03FA94CA9F193C816DE4253F /* SurfaceFactory.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceFactory.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceFactory.cpp; sourceTree = SOURCE_ROOT; }; + 03FCF5559C2A6AB79D947767 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TranslateCanvasCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/TranslateCanvasCmd.cpp; sourceTree = SOURCE_ROOT; }; + 0739F09627790055C959BBF4 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; + 0A1DAC09F322AE313A40706D /* ofxToggle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxToggle.h; path = ../../../addons/ofxGui/src/ofxToggle.h; sourceTree = SOURCE_ROOT; }; + 0B4D5D37A2AE7AB30D726C16 /* HexagonSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = HexagonSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/HexagonSurface.h; sourceTree = SOURCE_ROOT; }; + 0B691BBAB665F94F09B2C276 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + 140C0677F9F5A5D3B8A89AC4 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelNextVertexCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelNextVertexCmd.cpp; sourceTree = SOURCE_ROOT; }; + 15C9B02F2CF08112845CD074 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetPresetCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetPresetCmd.cpp; sourceTree = SOURCE_ROOT; }; + 15F2C6477A769C03A56D1401 /* ofxSlider.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSlider.cpp; path = ../../../addons/ofxGui/src/ofxSlider.cpp; sourceTree = SOURCE_ROOT; }; + 16DB3860ECC0D672B08DE71C /* ofxPiMapper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxPiMapper.cpp; path = ../../../addons/ofxPiMapper/src/ofxPiMapper.cpp; sourceTree = SOURCE_ROOT; }; + 17972C3384311464011667D9 /* BaseCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/BaseCmd.h; sourceTree = SOURCE_ROOT; }; + 17E65988300FBD9AAA2CD0CA /* ofxGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGui.h; path = ../../../addons/ofxGui/src/ofxGui.h; sourceTree = SOURCE_ROOT; }; + 18041C8871E17DE3E60BFF95 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvSurfaceVertCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvSurfaceVertCmd.cpp; sourceTree = SOURCE_ROOT; }; + 18385A4F4BC87806616D4F7F /* MediaServer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MediaServer.cpp; path = ../../../addons/ofxPiMapper/src/MediaServer/MediaServer.cpp; sourceTree = SOURCE_ROOT; }; + 18DA1B30717C876AA19CEEC0 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ProjectionEditorWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ProjectionEditorWidget.cpp; sourceTree = SOURCE_ROOT; }; + 1B3B1807E9CFC3FFBA4DBBEF /* Application.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Application.cpp; path = ../../../addons/ofxPiMapper/src/Application/Application.cpp; sourceTree = SOURCE_ROOT; }; + 1BCA96396113AAF56D66C844 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ProjectionMappingMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/ProjectionMappingMode.cpp; sourceTree = SOURCE_ROOT; }; + 1C080561EC053F17BB86A668 /* SurfaceStack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceStack.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceStack.cpp; sourceTree = SOURCE_ROOT; }; + 1C0DA2561397A7DE0246858B /* ofxGuiGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGuiGroup.h; path = ../../../addons/ofxGui/src/ofxGuiGroup.h; sourceTree = SOURCE_ROOT; }; + 1CE256C39E514ABD16FCCB87 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelPrevTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; + 1E73070DAC89F6A796BFF464 /* AddGridColCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = AddGridColCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/AddGridColCmd.h; sourceTree = SOURCE_ROOT; }; + 20F9951441118A70E8D55E13 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DirectoryWatcher.cpp; path = ../../../addons/ofxPiMapper/src/MediaServer/DirectoryWatcher.cpp; sourceTree = SOURCE_ROOT; }; + 21167F26AF957606289D4A4A /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ToggleAnimatedSourceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/ToggleAnimatedSourceCmd.h; sourceTree = SOURCE_ROOT; }; + 23118136CC7FFA920626B6C3 /* TriangleSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TriangleSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/TriangleSurface.h; sourceTree = SOURCE_ROOT; }; + 231337763726D333E0B3D56C /* AddGridColCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = AddGridColCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/AddGridColCmd.cpp; sourceTree = SOURCE_ROOT; }; + 23A4F0C9DE47BA73B3E49EDE /* ScaleWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ScaleWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ScaleWidget.h; sourceTree = SOURCE_ROOT; }; + 25322223D3976D5F33DCCBF6 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvAllTexCoordsCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvAllTexCoordsCmd.h; sourceTree = SOURCE_ROOT; }; + 27453C6FAE9B674FD694508D /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; + 2834D88A62CD23F3DE2C47D1 /* ofxButton.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxButton.h; path = ../../../addons/ofxGui/src/ofxButton.h; sourceTree = SOURCE_ROOT; }; + 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = tinyxml.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxml.cpp; sourceTree = SOURCE_ROOT; }; + 2D2400AC1A64EDE5E990C56C /* GridWarpSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = GridWarpSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/GridWarpSurface.cpp; sourceTree = SOURCE_ROOT; }; + 2DDA3608BED55BC67A9DAFF5 /* CrossSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CrossSource.cpp; path = src/CrossSource.cpp; sourceTree = SOURCE_ROOT; }; + 2F04FFB9BAC4575E214C0DED /* CmdManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CmdManager.h; path = ../../../addons/ofxPiMapper/src/Commands/CmdManager.h; sourceTree = SOURCE_ROOT; }; + 3074E4094F76555C299E5D8E /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ClearSurfacesCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/ClearSurfacesCmd.h; sourceTree = SOURCE_ROOT; }; + 30ED82F4A70B5B95CCEF7744 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelNextSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelNextSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + 3157007392BD114EAB99F470 /* TextureMappingMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TextureMappingMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/TextureMappingMode.h; sourceTree = SOURCE_ROOT; }; + 33DD6E4350FD51C68B7E65F0 /* SettingsLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SettingsLoader.cpp; path = ../../../addons/ofxPiMapper/src/Application/SettingsLoader.cpp; sourceTree = SOURCE_ROOT; }; + 34B45EB44DED0A47FBAD30F4 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ScaleSurfaceFromToCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/ScaleSurfaceFromToCmd.cpp; sourceTree = SOURCE_ROOT; }; + 36F59D2F886152DF4115A218 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SourcesEditorWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SourcesEditorWidget.cpp; sourceTree = SOURCE_ROOT; }; + 378C962CF2DB945F38DE674A /* ofxPiMapper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxPiMapper.h; path = ../../../addons/ofxPiMapper/src/ofxPiMapper.h; sourceTree = SOURCE_ROOT; }; + 37E7F66B151AB6A0AB6FC244 /* Info.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Info.h; path = ../../../addons/ofxPiMapper/src/Info/Info.h; sourceTree = SOURCE_ROOT; }; + 3B043509B19E37C383D7CA87 /* PresentationMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = PresentationMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/PresentationMode.h; sourceTree = SOURCE_ROOT; }; + 3B29C3846BA06080344C1D1E /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelPrevVertexCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevVertexCmd.cpp; sourceTree = SOURCE_ROOT; }; + 3BD72CBAFD427FC6E9F164D2 /* OMXPlayerCache.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OMXPlayerCache.h; path = ../../../addons/ofxPiMapper/src/Sources/OMXPlayerCache.h; sourceTree = SOURCE_ROOT; }; + 3BD822DBD11904D1D6E27E76 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TextureHighlightWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureHighlightWidget.h; sourceTree = SOURCE_ROOT; }; + 3DF2D82EA37D8C7A5F686EA5 /* TriangleSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TriangleSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/TriangleSurface.cpp; sourceTree = SOURCE_ROOT; }; + 3E4A0386460638A781A7AC84 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = AddGridRowCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/AddGridRowCmd.cpp; sourceTree = SOURCE_ROOT; }; + 4048CA09E6AAB5F673CBD2F0 /* RadioList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RadioList.cpp; path = ../../../addons/ofxPiMapper/src/UserInterface/RadioList.cpp; sourceTree = SOURCE_ROOT; }; + 4130052A043CF3D3C2BA943A /* EditorType.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = EditorType.h; path = ../../../addons/ofxPiMapper/src/UserInterface/EditorType.h; sourceTree = SOURCE_ROOT; }; + 413E846B881CCADC897A8A40 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TextureEditorWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureEditorWidget.cpp; sourceTree = SOURCE_ROOT; }; + 4244A1B9B55BD7BA7ED2F547 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TogglePerspectiveCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/TogglePerspectiveCmd.h; sourceTree = SOURCE_ROOT; }; + 4245228145B1AA737F49CF14 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SourceSelectionMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/SourceSelectionMode.cpp; sourceTree = SOURCE_ROOT; }; + 438B20A2C548E18384498186 /* LayerPanelWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = LayerPanelWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/LayerPanelWidget.h; sourceTree = SOURCE_ROOT; }; + 47AB6134D2AB2F3EB10096A3 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelPrevVertexCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevVertexCmd.h; sourceTree = SOURCE_ROOT; }; + 49BE2D8F2A2A57F4EBF83FF4 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetTexMapDrawModeCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetTexMapDrawModeCmd.cpp; sourceTree = SOURCE_ROOT; }; + 4A0800123A129E9BC12ED207 /* Settings.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Settings.cpp; path = src/Settings.cpp; sourceTree = SOURCE_ROOT; }; + 4FFBE499412CC8DD07163E91 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetNextSourceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetNextSourceCmd.cpp; sourceTree = SOURCE_ROOT; }; + 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxXmlSettings.cpp; path = ../../../addons/ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = SOURCE_ROOT; }; + 5235D939D249EAF47F9A5EB5 /* SettingsLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SettingsLoader.h; path = ../../../addons/ofxPiMapper/src/Application/SettingsLoader.h; sourceTree = SOURCE_ROOT; }; + 52AFA1F08C420992CAAAE648 /* ofxSlider.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSlider.h; path = ../../../addons/ofxGui/src/ofxSlider.h; sourceTree = SOURCE_ROOT; }; + 5407451FA68C27B2AAE644A6 /* VideoSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = VideoSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/VideoSource.cpp; sourceTree = SOURCE_ROOT; }; + 56A68D8E68FF141B5EB1ADF6 /* SetSourceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetSourceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetSourceCmd.h; sourceTree = SOURCE_ROOT; }; + 57990D37D728C5711AACBA9F /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = LayerPanelWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/LayerPanelWidget.cpp; sourceTree = SOURCE_ROOT; }; + 57D73BCD8A871590F140EFF6 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ApplicationBaseMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/ApplicationBaseMode.h; sourceTree = SOURCE_ROOT; }; + 5AB104FC7812B4F42B8E1540 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TranslateCanvasCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/TranslateCanvasCmd.h; sourceTree = SOURCE_ROOT; }; + 5D020B9B28609D071E21BB76 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ToggleAnimatedSourceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/ToggleAnimatedSourceCmd.cpp; sourceTree = SOURCE_ROOT; }; + 5EBDBF5E7887C574E1FCC1B5 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = StartDragSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/StartDragSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + 60F40691CD9DE4DEE1768FE9 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SaveTexCoordPosCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SaveTexCoordPosCmd.cpp; sourceTree = SOURCE_ROOT; }; + 61291E56B7882C9E9B8F119B /* ImageSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ImageSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/ImageSource.cpp; sourceTree = SOURCE_ROOT; }; + 61481FB831430E35A18ABD02 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvLayerDnCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerDnCmd.h; sourceTree = SOURCE_ROOT; }; + 62C9C3E62D4BEF04CF54C031 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ScaleSurfaceFromToCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/ScaleSurfaceFromToCmd.h; sourceTree = SOURCE_ROOT; }; + 62F01592304CB7995200EF7B /* CircleJoint.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CircleJoint.cpp; path = ../../../addons/ofxPiMapper/src/UserInterface/CircleJoint.cpp; sourceTree = SOURCE_ROOT; }; + 64156CB2D856E4CE0FBBED96 /* PresentationMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = PresentationMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/PresentationMode.cpp; sourceTree = SOURCE_ROOT; }; + 655142313A378162E3929785 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TogglePerspectiveCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/TogglePerspectiveCmd.cpp; sourceTree = SOURCE_ROOT; }; + 6592BB3592290B34832D7607 /* SurfaceStack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceStack.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceStack.h; sourceTree = SOURCE_ROOT; }; + 6595C215972AFFC7EE685F5A /* SourceType.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourceType.h; path = ../../../addons/ofxPiMapper/src/Sources/SourceType.h; sourceTree = SOURCE_ROOT; }; + 65DBA05D19177D2853D54196 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DeselectSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/DeselectSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + 69A4D26FC0AD01A86571540D /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceHighlightWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SurfaceHighlightWidget.cpp; sourceTree = SOURCE_ROOT; }; + 6DF54314CF2B45BF195B84C6 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelPrevSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + 6E80EE6FB0CC304A6CA287BB /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DeselectSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/DeselectSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + 718E523D4BDDCFAC394B3EA5 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DeselectTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/DeselectTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; + 7344B3B35CD0188D1283EC59 /* SurfaceManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceManager.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceManager.h; sourceTree = SOURCE_ROOT; }; + 74CA4C78136F233FB90B7D3E /* RmGridRowCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RmGridRowCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/RmGridRowCmd.h; sourceTree = SOURCE_ROOT; }; + 76B40246C8B90C1CA4074BB7 /* CustomSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CustomSource.cpp; path = src/CustomSource.cpp; sourceTree = SOURCE_ROOT; }; + 775FD891C1E381F87BF33C82 /* AddGridRowCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = AddGridRowCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/AddGridRowCmd.h; sourceTree = SOURCE_ROOT; }; + 784FFEB8D108EC916343AB97 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelNextTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelNextTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; + 78D67A00EB899FAC09430597 /* ofxLabel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxLabel.cpp; path = ../../../addons/ofxGui/src/ofxLabel.cpp; sourceTree = SOURCE_ROOT; }; + 79A9ED756DB70790A67E3EF8 /* SelVertexCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelVertexCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelVertexCmd.h; sourceTree = SOURCE_ROOT; }; + 7A3290FC65714D0C4D02B8BA /* Gui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Gui.h; path = ../../../addons/ofxPiMapper/src/Gui/Gui.h; sourceTree = SOURCE_ROOT; }; + 7C89C324499F9541394245C9 /* DirectoryWatcher.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DirectoryWatcher.h; path = ../../../addons/ofxPiMapper/src/MediaServer/DirectoryWatcher.h; sourceTree = SOURCE_ROOT; }; + 7D386994DF359F3BD1E66480 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvSelectionCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvSelectionCmd.cpp; sourceTree = SOURCE_ROOT; }; + 7E78D1B2A6DB0856BF8ED1FE /* BaseJoint.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = BaseJoint.cpp; path = ../../../addons/ofxPiMapper/src/UserInterface/BaseJoint.cpp; sourceTree = SOURCE_ROOT; }; + 7F58FFED7FBFC49573FF65E4 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetSourceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetSourceCmd.cpp; sourceTree = SOURCE_ROOT; }; + 7FD330C204479B5A5021D286 /* SourceSelectionMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourceSelectionMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/SourceSelectionMode.h; sourceTree = SOURCE_ROOT; }; + 802251BAF1B35B1D67B32FD0 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSliderGroup.cpp; path = ../../../addons/ofxGui/src/ofxSliderGroup.cpp; sourceTree = SOURCE_ROOT; }; + 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = tinyxmlerror.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxmlerror.cpp; sourceTree = SOURCE_ROOT; }; + 836B103542A52C63B004410C /* SurfaceManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceManager.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceManager.cpp; sourceTree = SOURCE_ROOT; }; + 851AF875A70187105CA91C1A /* BaseJoint.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseJoint.h; path = ../../../addons/ofxPiMapper/src/UserInterface/BaseJoint.h; sourceTree = SOURCE_ROOT; }; + 87F26B4B24CBD428AD9EEBAA /* ofxBaseGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxBaseGui.h; path = ../../../addons/ofxGui/src/ofxBaseGui.h; sourceTree = SOURCE_ROOT; }; + 89449E3044D456F7DE7BEA14 /* ofxPanel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxPanel.h; path = ../../../addons/ofxGui/src/ofxPanel.h; sourceTree = SOURCE_ROOT; }; + 8D3CB0B9A827AFA479349BBE /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetApplicationModeCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetApplicationModeCmd.cpp; sourceTree = SOURCE_ROOT; }; + 8F41EDB76644426680B2FA2B /* MvTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; + 906696B07A716E4057D32B1E /* QuadSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = QuadSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/QuadSurface.h; sourceTree = SOURCE_ROOT; }; + 907C5B5E104864A2D3A25745 /* ofxToggle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxToggle.cpp; path = ../../../addons/ofxGui/src/ofxToggle.cpp; sourceTree = SOURCE_ROOT; }; + 912C6A870E22496CEA43AC85 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetTexMapDrawModeCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetTexMapDrawModeCmd.h; sourceTree = SOURCE_ROOT; }; + 928068952444E81EF818B25C /* Application.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Application.h; path = ../../../addons/ofxPiMapper/src/Application/Application.h; sourceTree = SOURCE_ROOT; }; + 933CAE5B2DEC9DDABEA95E34 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvLayerUpCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerUpCmd.h; sourceTree = SOURCE_ROOT; }; + 941AD8B39C28D08B9F31077A /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TextureHighlightWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureHighlightWidget.cpp; sourceTree = SOURCE_ROOT; }; + 94DC897871B221F060A6A70F /* GuiBaseWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = GuiBaseWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/GuiBaseWidget.h; sourceTree = SOURCE_ROOT; }; + 9604B925D32EE39065747725 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxBaseGui.cpp; path = ../../../addons/ofxGui/src/ofxBaseGui.cpp; sourceTree = SOURCE_ROOT; }; + 962C349E8F4E59FF335AB2A6 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ClearSurfacesCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/ClearSurfacesCmd.cpp; sourceTree = SOURCE_ROOT; }; + 9631F04A0875ADEB45970DE8 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ApplicationBaseMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/ApplicationBaseMode.cpp; sourceTree = SOURCE_ROOT; }; + 9B4D98CCBAB57278C96169D4 /* CircleJoint.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CircleJoint.h; path = ../../../addons/ofxPiMapper/src/UserInterface/CircleJoint.h; sourceTree = SOURCE_ROOT; }; + 9F39733296358C3B0F85BB15 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceHighlightWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SurfaceHighlightWidget.h; sourceTree = SOURCE_ROOT; }; + A1A567FBAE494BF84E54E83C /* Settings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Settings.h; path = src/Settings.h; sourceTree = SOURCE_ROOT; }; + A2282B1E05458C3B2BBCE568 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelVertexCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelVertexCmd.cpp; sourceTree = SOURCE_ROOT; }; + A50F23D868C48DF9799BC788 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RmGridColCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/RmGridColCmd.cpp; sourceTree = SOURCE_ROOT; }; + A5CBAE57D2ADED1CAB6123AF /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelNextTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelNextTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; + AB4132974E14024E74E320F5 /* BaseSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = BaseSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/BaseSource.cpp; sourceTree = SOURCE_ROOT; }; + AB96773D1B378AE8018EA33E /* TextureEditorWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TextureEditorWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureEditorWidget.h; sourceTree = SOURCE_ROOT; }; + B0B66559E2F530AE989510C0 /* CustomSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CustomSource.h; path = src/CustomSource.h; sourceTree = SOURCE_ROOT; }; + B16277019B0C4B684E1B063E /* TextureMappingMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TextureMappingMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/TextureMappingMode.cpp; sourceTree = SOURCE_ROOT; }; + B178ED5CA7F76AAA6E49E191 /* SurfaceType.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceType.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceType.h; sourceTree = SOURCE_ROOT; }; + B21E7E5F548EEA92F368040B /* tinyxml.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = tinyxml.h; path = ../../../addons/ofxXmlSettings/libs/tinyxml.h; sourceTree = SOURCE_ROOT; }; + B323D7489A7B26A63443444F /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = AddSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/AddSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + B390802358C73D3757AC9B4E /* BaseSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseSource.h; path = ../../../addons/ofxPiMapper/src/Sources/BaseSource.h; sourceTree = SOURCE_ROOT; }; + B562DE1EEC28EE801EB4F483 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourcesEditorWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SourcesEditorWidget.h; sourceTree = SOURCE_ROOT; }; + B5C793F4FEA3AA065347B61C /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelPrevSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + B7C308F8B76FCB909581A580 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RmSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/RmSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + B7DD3DE526EF824DDAF42B09 /* GuiMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = GuiMode.h; path = ../../../addons/ofxPiMapper/src/UserInterface/GuiMode.h; sourceTree = SOURCE_ROOT; }; + B87C60311EC1FE841C1ECD89 /* ofxLabel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxLabel.h; path = ../../../addons/ofxGui/src/ofxLabel.h; sourceTree = SOURCE_ROOT; }; + B9ECBF061BABECA9C2341372 /* QuadSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = QuadSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/QuadSurface.cpp; sourceTree = SOURCE_ROOT; }; + BA5B6BB795E2A24B2DBA22BD /* SelNextVertexCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelNextVertexCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelNextVertexCmd.h; sourceTree = SOURCE_ROOT; }; + BA65337B3E631788AE2D018B /* RmGridColCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RmGridColCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/RmGridColCmd.h; sourceTree = SOURCE_ROOT; }; + BCB571865BB25BC586CF80EC /* SetPresetCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetPresetCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetPresetCmd.h; sourceTree = SOURCE_ROOT; }; + BCBB74B9531974E1D5DA019B /* HexagonSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = HexagonSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/HexagonSurface.cpp; sourceTree = SOURCE_ROOT; }; + BDBE053980FA01FAD543D782 /* CmdManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CmdManager.cpp; path = ../../../addons/ofxPiMapper/src/Commands/CmdManager.cpp; sourceTree = SOURCE_ROOT; }; + C27244405258CD6DF424D0F3 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ProjectionEditorWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ProjectionEditorWidget.h; sourceTree = SOURCE_ROOT; }; + C2D03F683EE589F55D47CFFD /* VideoSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = VideoSource.h; path = ../../../addons/ofxPiMapper/src/Sources/VideoSource.h; sourceTree = SOURCE_ROOT; }; + C2E5DC1692A11AF5D981F8FA /* Mode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Mode.h; path = ../../../addons/ofxPiMapper/src/Mode.h; sourceTree = SOURCE_ROOT; }; + C3E8D103B72D02E063B29082 /* GridWarpSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = GridWarpSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/GridWarpSurface.h; sourceTree = SOURCE_ROOT; }; + C61C1F4F1A1ED2660B1D6EDC /* FboSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = FboSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/FboSource.cpp; sourceTree = SOURCE_ROOT; }; + C656C28252AD5E9E09FA2162 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DuplicateSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/DuplicateSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + C70D8946940288799E82131E /* ofxSliderGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSliderGroup.h; path = ../../../addons/ofxGui/src/ofxSliderGroup.h; sourceTree = SOURCE_ROOT; }; + C88333E71C9457E441C33474 /* ofxButton.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxButton.cpp; path = ../../../addons/ofxGui/src/ofxButton.cpp; sourceTree = SOURCE_ROOT; }; + CB4461BD6FC059D946144727 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + D05D5FBB2B2779B022A5DD04 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; + D463EA9CC53D21A44CB9D6EF /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SaveTexCoordPosCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SaveTexCoordPosCmd.h; sourceTree = SOURCE_ROOT; }; + D4CFAEBB593AD070E04F106C /* MvSelectionCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvSelectionCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvSelectionCmd.h; sourceTree = SOURCE_ROOT; }; + D565A612B1DF2837C94A6081 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvSurfaceVertCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvSurfaceVertCmd.h; sourceTree = SOURCE_ROOT; }; + D58C36B60BB72C7336042FB9 /* SurfaceFactory.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceFactory.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceFactory.h; sourceTree = SOURCE_ROOT; }; + D627BF76B06B3FF4F1516C5E /* HomographyHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = HomographyHelper.h; path = ../../../addons/ofxPiMapper/src/Utils/HomographyHelper.h; sourceTree = SOURCE_ROOT; }; + D7287CBE5600FEE9EE1B1AEA /* RmSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RmSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/RmSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + DBAFA0B7AFEA589CA5167204 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvAllTexCoordsCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvAllTexCoordsCmd.cpp; sourceTree = SOURCE_ROOT; }; + DC69ACA83F14B8A2AE20197B /* RadioList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RadioList.h; path = ../../../addons/ofxPiMapper/src/UserInterface/RadioList.h; sourceTree = SOURCE_ROOT; }; + DC8107E8E56AFFB933FE8962 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ProjectionMappingMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/ProjectionMappingMode.h; sourceTree = SOURCE_ROOT; }; + DCC24025AD26B4554B000385 /* Gui.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Gui.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Gui.cpp; sourceTree = SOURCE_ROOT; }; + E112B3AEBEA2C091BF2B40AE /* ofxPanel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxPanel.cpp; path = ../../../addons/ofxGui/src/ofxPanel.cpp; sourceTree = SOURCE_ROOT; }; + E2333CF877EE99EBE86F4B0F /* HomographyHelper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = HomographyHelper.cpp; path = ../../../addons/ofxPiMapper/src/Utils/HomographyHelper.cpp; sourceTree = SOURCE_ROOT; }; E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; - E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; - E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; - E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = exampleDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; - E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; - E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; - E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; - E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; - E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; }; + E52D4207C299D5886C8FD2C7 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvLayerUpCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerUpCmd.cpp; sourceTree = SOURCE_ROOT; }; + E5949E35CC6642F2FDFFAAE5 /* ImageSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ImageSource.h; path = ../../../addons/ofxPiMapper/src/Sources/ImageSource.h; sourceTree = SOURCE_ROOT; }; + E8CE817DF3028A4345376E7D /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DeselectTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/DeselectTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; + E8DA47AF2B265F778E74D4DA /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = StartDragSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/StartDragSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + EC481BAB32B250D3EA41AF9E /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvLayerDnCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerDnCmd.cpp; sourceTree = SOURCE_ROOT; }; + ECF8674C7975F1063C5E30CA /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxGuiGroup.cpp; path = ../../../addons/ofxGui/src/ofxGuiGroup.cpp; sourceTree = SOURCE_ROOT; }; + EE95BF87E883491E7CC9B6EC /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DuplicateSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/DuplicateSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; + EEF2CEBAFFABCFED915AFCE1 /* Info.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Info.cpp; path = ../../../addons/ofxPiMapper/src/Info/Info.cpp; sourceTree = SOURCE_ROOT; }; + EFB1537A5DBC298C759BFC62 /* SourceTypeHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourceTypeHelper.h; path = ../../../addons/ofxPiMapper/src/Sources/SourceTypeHelper.h; sourceTree = SOURCE_ROOT; }; + F05CE9A6503C7CBCC46403C4 /* FboSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = FboSource.h; path = ../../../addons/ofxPiMapper/src/Sources/FboSource.h; sourceTree = SOURCE_ROOT; }; + F0A9FE4B6FB6C958B72B72CD /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetApplicationModeCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetApplicationModeCmd.h; sourceTree = SOURCE_ROOT; }; + F27EBFBACAC7B29B2B7CA500 /* BaseSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/BaseSurface.h; sourceTree = SOURCE_ROOT; }; + F2C0EE541190D47BF5911C0A /* BaseSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = BaseSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/BaseSurface.cpp; sourceTree = SOURCE_ROOT; }; + F3538B8AF69CAB7C215FA1EF /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RmGridRowCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/RmGridRowCmd.cpp; sourceTree = SOURCE_ROOT; }; + F3BC84F0441C01B0A760508D /* CrossSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CrossSource.h; path = src/CrossSource.h; sourceTree = SOURCE_ROOT; }; + F4EDCDF597954EF25E7AD416 /* ScaleWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ScaleWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ScaleWidget.cpp; sourceTree = SOURCE_ROOT; }; + F7B0806EEA8012D629BE363C /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OMXPlayerCache.cpp; path = ../../../addons/ofxPiMapper/src/Sources/OMXPlayerCache.cpp; sourceTree = SOURCE_ROOT; }; + F7E88D3956480E0CBAA21641 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelPrevTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; + FA2E4E947E8D358C28D903C0 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetNextSourceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetNextSourceCmd.h; sourceTree = SOURCE_ROOT; }; + FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = tinyxmlparser.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxmlparser.cpp; sourceTree = SOURCE_ROOT; }; + FC98A68C64BFC941D0B31EE9 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelNextSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelNextSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; + FCB5A622161B43A8154687F8 /* MediaServer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MediaServer.h; path = ../../../addons/ofxPiMapper/src/MediaServer/MediaServer.h; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -357,385 +328,264 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */, - E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */, - E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */, E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, - E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */, - E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */, - E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */, - E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */, - E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */, - E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */, - E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */, - E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */, - E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */, - E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */, - E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */, - E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0115A5D71DBF93BA00C51732 /* src */ = { + 0775EF7214A04F1C3C936CCE /* Widgets */ = { isa = PBXGroup; children = ( - 0115A5D81DBF93BA00C51732 /* Application */, - 0166303C1DC66DAB0081F28F /* Commands */, - 0115A6301DBF93BA00C51732 /* Gui */, - 0115A6451DBF93BA00C51732 /* Info */, - 0115A6481DBF93BA00C51732 /* MediaServer */, - 0115A64D1DBF93BA00C51732 /* ofxPiMapper.cpp */, - 0115A64E1DBF93BA00C51732 /* ofxPiMapper.h */, - 0100D9401E33E667000D7FA5 /* Mode.h */, - 0115A64F1DBF93BA00C51732 /* Sources */, - 0115A65B1DBF93BA00C51732 /* Surfaces */, - 0115A66D1DBF93BA00C51732 /* UserInterface */, - 0115A6761DBF93BA00C51732 /* Utils */, + 94DC897871B221F060A6A70F /* GuiBaseWidget.h */, + 57990D37D728C5711AACBA9F /* LayerPanelWidget.cpp */, + 438B20A2C548E18384498186 /* LayerPanelWidget.h */, + 18DA1B30717C876AA19CEEC0 /* ProjectionEditorWidget.cpp */, + C27244405258CD6DF424D0F3 /* ProjectionEditorWidget.h */, + F4EDCDF597954EF25E7AD416 /* ScaleWidget.cpp */, + 23A4F0C9DE47BA73B3E49EDE /* ScaleWidget.h */, + 36F59D2F886152DF4115A218 /* SourcesEditorWidget.cpp */, + B562DE1EEC28EE801EB4F483 /* SourcesEditorWidget.h */, + 69A4D26FC0AD01A86571540D /* SurfaceHighlightWidget.cpp */, + 9F39733296358C3B0F85BB15 /* SurfaceHighlightWidget.h */, + 413E846B881CCADC897A8A40 /* TextureEditorWidget.cpp */, + AB96773D1B378AE8018EA33E /* TextureEditorWidget.h */, + 941AD8B39C28D08B9F31077A /* TextureHighlightWidget.cpp */, + 3BD822DBD11904D1D6E27E76 /* TextureHighlightWidget.h */, ); - name = src; - path = ../src; + name = Widgets; sourceTree = ""; }; - 0115A5D81DBF93BA00C51732 /* Application */ = { + 1F4FB5C423662B96ADFDCC0B /* ofxXmlSettings */ = { isa = PBXGroup; children = ( - 0115A5D91DBF93BA00C51732 /* Application.cpp */, - 0115A5DA1DBF93BA00C51732 /* Application.h */, - 0115A5DB1DBF93BA00C51732 /* Modes */, - 0115A5E61DBF93BA00C51732 /* SettingsLoader.cpp */, - 0115A5E71DBF93BA00C51732 /* SettingsLoader.h */, + 6ECEF0D76BC33727823EADFF /* src */, + 6E54289412D2D94F45A05113 /* libs */, ); - path = Application; + name = ofxXmlSettings; sourceTree = ""; }; - 0115A5DB1DBF93BA00C51732 /* Modes */ = { + 3D6840E4DBCF2DED6C755B76 /* Utils */ = { isa = PBXGroup; children = ( - 0115A5DC1DBF93BA00C51732 /* ApplicationBaseMode.cpp */, - 0115A5DD1DBF93BA00C51732 /* ApplicationBaseMode.h */, - 0115A5DE1DBF93BA00C51732 /* PresentationMode.cpp */, - 0115A5DF1DBF93BA00C51732 /* PresentationMode.h */, - 0115A5E01DBF93BA00C51732 /* ProjectionMappingMode.cpp */, - 0115A5E11DBF93BA00C51732 /* ProjectionMappingMode.h */, - 0115A5E21DBF93BA00C51732 /* SourceSelectionMode.cpp */, - 0115A5E31DBF93BA00C51732 /* SourceSelectionMode.h */, - 0115A5E41DBF93BA00C51732 /* TextureMappingMode.cpp */, - 0115A5E51DBF93BA00C51732 /* TextureMappingMode.h */, + E2333CF877EE99EBE86F4B0F /* HomographyHelper.cpp */, + D627BF76B06B3FF4F1516C5E /* HomographyHelper.h */, ); - path = Modes; + name = Utils; sourceTree = ""; }; - 0115A6301DBF93BA00C51732 /* Gui */ = { + 43844FF975EC3DB9B9DDAD73 /* Application */ = { isa = PBXGroup; children = ( - 0115A6311DBF93BA00C51732 /* Gui.cpp */, - 0115A6321DBF93BA00C51732 /* Gui.h */, - 0115A6331DBF93BA00C51732 /* Widgets */, + 1B3B1807E9CFC3FFBA4DBBEF /* Application.cpp */, + 928068952444E81EF818B25C /* Application.h */, + 783422EB3B2FDA36D11DC9CF /* Modes */, + 33DD6E4350FD51C68B7E65F0 /* SettingsLoader.cpp */, + 5235D939D249EAF47F9A5EB5 /* SettingsLoader.h */, ); - path = Gui; + name = Application; sourceTree = ""; }; - 0115A6331DBF93BA00C51732 /* Widgets */ = { + 480A780D8D0308AE4A368801 /* ofxGui */ = { isa = PBXGroup; children = ( - 0115A6341DBF93BA00C51732 /* GuiBaseWidget.h */, - 0115A6351DBF93BA00C51732 /* LayerPanelWidget.cpp */, - 0115A6361DBF93BA00C51732 /* LayerPanelWidget.h */, - 0115A6371DBF93BA00C51732 /* ProjectionEditorWidget.cpp */, - 0115A6381DBF93BA00C51732 /* ProjectionEditorWidget.h */, - 0115A6391DBF93BA00C51732 /* ScaleWidget.cpp */, - 0115A63A1DBF93BA00C51732 /* ScaleWidget.h */, - 0115A63B1DBF93BA00C51732 /* SourcesEditorWidget.cpp */, - 0115A63C1DBF93BA00C51732 /* SourcesEditorWidget.h */, - 0115A63D1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp */, - 0115A63E1DBF93BA00C51732 /* SurfaceHighlightWidget.h */, - 0115A6411DBF93BA00C51732 /* TextureEditorWidget.cpp */, - 0115A6421DBF93BA00C51732 /* TextureEditorWidget.h */, - 0115A6431DBF93BA00C51732 /* TextureHighlightWidget.cpp */, - 0115A6441DBF93BA00C51732 /* TextureHighlightWidget.h */, + A763ED608B35AE3310251DEE /* src */, ); - path = Widgets; + name = ofxGui; sourceTree = ""; }; - 0115A6451DBF93BA00C51732 /* Info */ = { + 49237A8A4935FFC7A690CBD7 /* MediaServer */ = { isa = PBXGroup; children = ( - 0115A6461DBF93BA00C51732 /* Info.cpp */, - 0115A6471DBF93BA00C51732 /* Info.h */, + 20F9951441118A70E8D55E13 /* DirectoryWatcher.cpp */, + 7C89C324499F9541394245C9 /* DirectoryWatcher.h */, + 18385A4F4BC87806616D4F7F /* MediaServer.cpp */, + FCB5A622161B43A8154687F8 /* MediaServer.h */, ); - path = Info; + name = MediaServer; sourceTree = ""; }; - 0115A6481DBF93BA00C51732 /* MediaServer */ = { + 57113A603B123D17EBD5D0D1 /* src */ = { isa = PBXGroup; children = ( - 0115A6491DBF93BA00C51732 /* DirectoryWatcher.cpp */, - 0115A64A1DBF93BA00C51732 /* DirectoryWatcher.h */, - 0115A64B1DBF93BA00C51732 /* MediaServer.cpp */, - 0115A64C1DBF93BA00C51732 /* MediaServer.h */, + 43844FF975EC3DB9B9DDAD73 /* Application */, + F19689EE10A2EC1EC429FAC7 /* Commands */, + 783C34304FF450D0CB244879 /* Gui */, + 922DC4E8A53315BB0C983902 /* Info */, + 49237A8A4935FFC7A690CBD7 /* MediaServer */, + C2E5DC1692A11AF5D981F8FA /* Mode.h */, + 16DB3860ECC0D672B08DE71C /* ofxPiMapper.cpp */, + 378C962CF2DB945F38DE674A /* ofxPiMapper.h */, + 77B40894B404D46E0B9438E0 /* Sources */, + DA1ABA97EBE5173F815CB449 /* Surfaces */, + 925C888869704DBDF0BE6D0B /* UserInterface */, + 3D6840E4DBCF2DED6C755B76 /* Utils */, ); - path = MediaServer; + name = src; sourceTree = ""; }; - 0115A64F1DBF93BA00C51732 /* Sources */ = { + 6948EE371B920CB800B5AC1A /* local_addons */ = { isa = PBXGroup; children = ( - 0115A6501DBF93BA00C51732 /* BaseSource.cpp */, - 0115A6511DBF93BA00C51732 /* BaseSource.h */, - 0115A6521DBF93BA00C51732 /* FboSource.cpp */, - 0115A6531DBF93BA00C51732 /* FboSource.h */, - 0115A6541DBF93BA00C51732 /* ImageSource.cpp */, - 0115A6551DBF93BA00C51732 /* ImageSource.h */, - 0115A6561DBF93BA00C51732 /* OMXPlayerCache.cpp */, - 0115A6571DBF93BA00C51732 /* OMXPlayerCache.h */, - 0115A6581DBF93BA00C51732 /* SourceType.h */, - 0115A6591DBF93BA00C51732 /* VideoSource.cpp */, - 0115A65A1DBF93BA00C51732 /* VideoSource.h */, ); - path = Sources; + name = local_addons; sourceTree = ""; }; - 0115A65B1DBF93BA00C51732 /* Surfaces */ = { + 6E54289412D2D94F45A05113 /* libs */ = { isa = PBXGroup; children = ( - 0115A65C1DBF93BA00C51732 /* BaseSurface.cpp */, - 0115A65D1DBF93BA00C51732 /* BaseSurface.h */, - 0115A65E1DBF93BA00C51732 /* GridWarpSurface.cpp */, - 0115A65F1DBF93BA00C51732 /* GridWarpSurface.h */, - 0115A6601DBF93BA00C51732 /* HexagonSurface.cpp */, - 0115A6611DBF93BA00C51732 /* HexagonSurface.h */, - 0115A6621DBF93BA00C51732 /* QuadSurface.cpp */, - 0115A6631DBF93BA00C51732 /* QuadSurface.h */, - 0115A6641DBF93BA00C51732 /* SurfaceFactory.cpp */, - 0115A6651DBF93BA00C51732 /* SurfaceFactory.h */, - 0115A6661DBF93BA00C51732 /* SurfaceManager.cpp */, - 0115A6671DBF93BA00C51732 /* SurfaceManager.h */, - 0115A6681DBF93BA00C51732 /* SurfaceStack.cpp */, - 0115A6691DBF93BA00C51732 /* SurfaceStack.h */, - 0115A66A1DBF93BA00C51732 /* SurfaceType.h */, - 0115A66B1DBF93BA00C51732 /* TriangleSurface.cpp */, - 0115A66C1DBF93BA00C51732 /* TriangleSurface.h */, + 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */, + B21E7E5F548EEA92F368040B /* tinyxml.h */, + 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */, + FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */, ); - path = Surfaces; + name = libs; sourceTree = ""; }; - 0115A66D1DBF93BA00C51732 /* UserInterface */ = { + 6ECEF0D76BC33727823EADFF /* src */ = { isa = PBXGroup; children = ( - 0115A66E1DBF93BA00C51732 /* BaseJoint.cpp */, - 0115A66F1DBF93BA00C51732 /* BaseJoint.h */, - 0115A6701DBF93BA00C51732 /* CircleJoint.cpp */, - 0115A6711DBF93BA00C51732 /* CircleJoint.h */, - 0115A6721DBF93BA00C51732 /* EditorType.h */, - 0115A6731DBF93BA00C51732 /* GuiMode.h */, - 0115A6741DBF93BA00C51732 /* RadioList.cpp */, - 0115A6751DBF93BA00C51732 /* RadioList.h */, + 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */, + 01DCC0911400F9ACF5B65578 /* ofxXmlSettings.h */, ); - path = UserInterface; + name = src; sourceTree = ""; }; - 0115A6761DBF93BA00C51732 /* Utils */ = { + 77B40894B404D46E0B9438E0 /* Sources */ = { isa = PBXGroup; children = ( - 0115A6771DBF93BA00C51732 /* HomographyHelper.cpp */, - 0115A6781DBF93BA00C51732 /* HomographyHelper.h */, + AB4132974E14024E74E320F5 /* BaseSource.cpp */, + B390802358C73D3757AC9B4E /* BaseSource.h */, + C61C1F4F1A1ED2660B1D6EDC /* FboSource.cpp */, + F05CE9A6503C7CBCC46403C4 /* FboSource.h */, + 61291E56B7882C9E9B8F119B /* ImageSource.cpp */, + E5949E35CC6642F2FDFFAAE5 /* ImageSource.h */, + F7B0806EEA8012D629BE363C /* OMXPlayerCache.cpp */, + 3BD72CBAFD427FC6E9F164D2 /* OMXPlayerCache.h */, + 6595C215972AFFC7EE685F5A /* SourceType.h */, + EFB1537A5DBC298C759BFC62 /* SourceTypeHelper.h */, + 5407451FA68C27B2AAE644A6 /* VideoSource.cpp */, + C2D03F683EE589F55D47CFFD /* VideoSource.h */, ); - path = Utils; + name = Sources; sourceTree = ""; }; - 0166303C1DC66DAB0081F28F /* Commands */ = { + 783422EB3B2FDA36D11DC9CF /* Modes */ = { isa = PBXGroup; children = ( - 0166303D1DC66DAB0081F28F /* AddGridColCmd.cpp */, - 0166303E1DC66DAB0081F28F /* AddGridColCmd.h */, - 0166303F1DC66DAB0081F28F /* AddGridRowCmd.cpp */, - 016630401DC66DAB0081F28F /* AddGridRowCmd.h */, - 016630411DC66DAB0081F28F /* AddSurfaceCmd.cpp */, - 016630421DC66DAB0081F28F /* AddSurfaceCmd.h */, - 016630431DC66DAB0081F28F /* BaseCmd.h */, - 016630441DC66DAB0081F28F /* ClearSurfacesCmd.cpp */, - 016630451DC66DAB0081F28F /* ClearSurfacesCmd.h */, - 016630461DC66DAB0081F28F /* CmdManager.cpp */, - 016630471DC66DAB0081F28F /* CmdManager.h */, - 016630481DC66DAB0081F28F /* DeselectSurfaceCmd.cpp */, - 016630491DC66DAB0081F28F /* DeselectSurfaceCmd.h */, - 0166304A1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp */, - 0166304B1DC66DAB0081F28F /* DeselectTexCoordCmd.h */, - 0166304C1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp */, - 0166304D1DC66DAB0081F28F /* DuplicateSurfaceCmd.h */, - 0166304E1DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp */, - 0166304F1DC66DAB0081F28F /* MvAllTexCoordsCmd.h */, - 016630501DC66DAB0081F28F /* MvLayerDnCmd.cpp */, - 016630511DC66DAB0081F28F /* MvLayerDnCmd.h */, - 016630521DC66DAB0081F28F /* MvLayerUpCmd.cpp */, - 016630531DC66DAB0081F28F /* MvLayerUpCmd.h */, - 016630541DC66DAB0081F28F /* MvSelectionCmd.cpp */, - 016630551DC66DAB0081F28F /* MvSelectionCmd.h */, - 016630561DC66DAB0081F28F /* MvSurfaceVertCmd.cpp */, - 016630571DC66DAB0081F28F /* MvSurfaceVertCmd.h */, - 016630581DC66DAB0081F28F /* MvTexCoordCmd.cpp */, - 016630591DC66DAB0081F28F /* MvTexCoordCmd.h */, - 0166305A1DC66DAB0081F28F /* RmGridColCmd.cpp */, - 0166305B1DC66DAB0081F28F /* RmGridColCmd.h */, - 0166305C1DC66DAB0081F28F /* RmGridRowCmd.cpp */, - 0166305D1DC66DAB0081F28F /* RmGridRowCmd.h */, - 0166305E1DC66DAB0081F28F /* RmSurfaceCmd.cpp */, - 0166305F1DC66DAB0081F28F /* RmSurfaceCmd.h */, - 016630601DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp */, - 016630611DC66DAB0081F28F /* SaveTexCoordPosCmd.h */, - 016630621DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp */, - 016630631DC66DAB0081F28F /* ScaleSurfaceFromToCmd.h */, - 016630641DC66DAB0081F28F /* SelNextSurfaceCmd.cpp */, - 016630651DC66DAB0081F28F /* SelNextSurfaceCmd.h */, - 016630661DC66DAB0081F28F /* SelNextTexCoordCmd.cpp */, - 016630671DC66DAB0081F28F /* SelNextTexCoordCmd.h */, - 016630681DC66DAB0081F28F /* SelNextVertexCmd.cpp */, - 016630691DC66DAB0081F28F /* SelNextVertexCmd.h */, - 0166306A1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp */, - 0166306B1DC66DAB0081F28F /* SelPrevSurfaceCmd.h */, - 0166306C1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp */, - 0166306D1DC66DAB0081F28F /* SelPrevTexCoordCmd.h */, - 0166306E1DC66DAB0081F28F /* SelPrevVertexCmd.cpp */, - 0166306F1DC66DAB0081F28F /* SelPrevVertexCmd.h */, - 016630701DC66DAB0081F28F /* SelSurfaceCmd.cpp */, - 016630711DC66DAB0081F28F /* SelSurfaceCmd.h */, - 016630721DC66DAB0081F28F /* SelTexCoordCmd.cpp */, - 016630731DC66DAB0081F28F /* SelTexCoordCmd.h */, - 016630741DC66DAB0081F28F /* SelVertexCmd.cpp */, - 016630751DC66DAB0081F28F /* SelVertexCmd.h */, - 016630761DC66DAB0081F28F /* SetApplicationModeCmd.cpp */, - 016630771DC66DAB0081F28F /* SetApplicationModeCmd.h */, - 016630781DC66DAB0081F28F /* SetNextSourceCmd.cpp */, - 016630791DC66DAB0081F28F /* SetNextSourceCmd.h */, - 0166307A1DC66DAB0081F28F /* SetPresetCmd.cpp */, - 0166307B1DC66DAB0081F28F /* SetPresetCmd.h */, - 0166307C1DC66DAB0081F28F /* SetSourceCmd.cpp */, - 0166307D1DC66DAB0081F28F /* SetSourceCmd.h */, - 0166307E1DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp */, - 0166307F1DC66DAB0081F28F /* SetTexMapDrawModeCmd.h */, - 016630801DC66DAB0081F28F /* StartDragSurfaceCmd.cpp */, - 016630811DC66DAB0081F28F /* StartDragSurfaceCmd.h */, - 016630821DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp */, - 016630831DC66DAB0081F28F /* ToggleAnimatedSourceCmd.h */, - 016630841DC66DAB0081F28F /* TogglePerspectiveCmd.cpp */, - 016630851DC66DAB0081F28F /* TogglePerspectiveCmd.h */, - 016630861DC66DAB0081F28F /* TranslateCanvasCmd.cpp */, - 016630871DC66DAB0081F28F /* TranslateCanvasCmd.h */, + 9631F04A0875ADEB45970DE8 /* ApplicationBaseMode.cpp */, + 57D73BCD8A871590F140EFF6 /* ApplicationBaseMode.h */, + 64156CB2D856E4CE0FBBED96 /* PresentationMode.cpp */, + 3B043509B19E37C383D7CA87 /* PresentationMode.h */, + 1BCA96396113AAF56D66C844 /* ProjectionMappingMode.cpp */, + DC8107E8E56AFFB933FE8962 /* ProjectionMappingMode.h */, + 4245228145B1AA737F49CF14 /* SourceSelectionMode.cpp */, + 7FD330C204479B5A5021D286 /* SourceSelectionMode.h */, + B16277019B0C4B684E1B063E /* TextureMappingMode.cpp */, + 3157007392BD114EAB99F470 /* TextureMappingMode.h */, ); - path = Commands; + name = Modes; sourceTree = ""; }; - 39264837192224C20008A7F5 /* ofxXmlSettings */ = { + 783C34304FF450D0CB244879 /* Gui */ = { isa = PBXGroup; children = ( - 3926483C192224F90008A7F5 /* libs */, - 39264838192224CA0008A7F5 /* src */, + DCC24025AD26B4554B000385 /* Gui.cpp */, + 7A3290FC65714D0C4D02B8BA /* Gui.h */, + 0775EF7214A04F1C3C936CCE /* Widgets */, ); - name = ofxXmlSettings; + name = Gui; sourceTree = ""; }; - 39264838192224CA0008A7F5 /* src */ = { + 7CC2E9C572434BA3ED1C8079 /* ofxPiMapper */ = { isa = PBXGroup; children = ( - 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */, - 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */, + 57113A603B123D17EBD5D0D1 /* src */, ); - name = src; + name = ofxPiMapper; sourceTree = ""; }; - 3926483C192224F90008A7F5 /* libs */ = { + 922DC4E8A53315BB0C983902 /* Info */ = { isa = PBXGroup; children = ( - 3926483D192224F90008A7F5 /* tinyxml.cpp */, - 3926483E192224F90008A7F5 /* tinyxml.h */, - 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */, - 39264840192224F90008A7F5 /* tinyxmlparser.cpp */, + EEF2CEBAFFABCFED915AFCE1 /* Info.cpp */, + 37E7F66B151AB6A0AB6FC244 /* Info.h */, ); - name = libs; - path = ../../ofxXmlSettings/libs; + name = Info; sourceTree = ""; }; - 3933D5C019BB87A3000ACA55 /* ofxGui */ = { + 925C888869704DBDF0BE6D0B /* UserInterface */ = { isa = PBXGroup; children = ( - 3933D5C119BB87BD000ACA55 /* src */, + 7E78D1B2A6DB0856BF8ED1FE /* BaseJoint.cpp */, + 851AF875A70187105CA91C1A /* BaseJoint.h */, + 62F01592304CB7995200EF7B /* CircleJoint.cpp */, + 9B4D98CCBAB57278C96169D4 /* CircleJoint.h */, + 4130052A043CF3D3C2BA943A /* EditorType.h */, + B7DD3DE526EF824DDAF42B09 /* GuiMode.h */, + 4048CA09E6AAB5F673CBD2F0 /* RadioList.cpp */, + DC69ACA83F14B8A2AE20197B /* RadioList.h */, ); - name = ofxGui; + name = UserInterface; sourceTree = ""; }; - 3933D5C119BB87BD000ACA55 /* src */ = { + A763ED608B35AE3310251DEE /* src */ = { isa = PBXGroup; children = ( - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */, - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */, - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */, - 3933D5C519BB87BD000ACA55 /* ofxButton.h */, - 3933D5C619BB87BD000ACA55 /* ofxGui.h */, - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */, - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */, - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */, - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */, - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */, - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */, - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */, - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */, - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */, - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */, - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */, - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */, + 9604B925D32EE39065747725 /* ofxBaseGui.cpp */, + 87F26B4B24CBD428AD9EEBAA /* ofxBaseGui.h */, + C88333E71C9457E441C33474 /* ofxButton.cpp */, + 2834D88A62CD23F3DE2C47D1 /* ofxButton.h */, + 17E65988300FBD9AAA2CD0CA /* ofxGui.h */, + ECF8674C7975F1063C5E30CA /* ofxGuiGroup.cpp */, + 1C0DA2561397A7DE0246858B /* ofxGuiGroup.h */, + 78D67A00EB899FAC09430597 /* ofxLabel.cpp */, + B87C60311EC1FE841C1ECD89 /* ofxLabel.h */, + E112B3AEBEA2C091BF2B40AE /* ofxPanel.cpp */, + 89449E3044D456F7DE7BEA14 /* ofxPanel.h */, + 15F2C6477A769C03A56D1401 /* ofxSlider.cpp */, + 52AFA1F08C420992CAAAE648 /* ofxSlider.h */, + 802251BAF1B35B1D67B32FD0 /* ofxSliderGroup.cpp */, + C70D8946940288799E82131E /* ofxSliderGroup.h */, + 907C5B5E104864A2D3A25745 /* ofxToggle.cpp */, + 0A1DAC09F322AE313A40706D /* ofxToggle.h */, ); name = src; - path = ../../ofxGui/src; - sourceTree = ""; - }; - 396E8A34190FEDE500705899 /* ofxPiMapper */ = { - isa = PBXGroup; - children = ( - 0115A5D71DBF93BA00C51732 /* src */, - ); - name = ofxPiMapper; sourceTree = ""; }; BB4B014C10F69532006C3DED /* addons */ = { isa = PBXGroup; children = ( - 3933D5C019BB87A3000ACA55 /* ofxGui */, - 39264837192224C20008A7F5 /* ofxXmlSettings */, - 396E8A34190FEDE500705899 /* ofxPiMapper */, + 480A780D8D0308AE4A368801 /* ofxGui */, + 7CC2E9C572434BA3ED1C8079 /* ofxPiMapper */, + 1F4FB5C423662B96ADFDCC0B /* ofxXmlSettings */, ); name = addons; sourceTree = ""; }; - BBAB23C913894ECA00AA2426 /* system frameworks */ = { - isa = PBXGroup; - children = ( - E7F985F515E0DE99003869B5 /* Accelerate.framework */, - E4C2424410CC5A17004149E2 /* AppKit.framework */, - E4C2424510CC5A17004149E2 /* Cocoa.framework */, - E4C2424610CC5A17004149E2 /* IOKit.framework */, - E45BE9710E8CC7DD009D7055 /* AGL.framework */, - E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */, - E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */, - E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */, - E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */, - E45BE9770E8CC7DD009D7055 /* CoreServices.framework */, - E45BE9790E8CC7DD009D7055 /* OpenGL.framework */, - E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */, - E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */, - E7E077E715D3B6510020DFD4 /* QTKit.framework */, - ); - name = "system frameworks"; - sourceTree = ""; - }; - BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = { + DA1ABA97EBE5173F815CB449 /* Surfaces */ = { isa = PBXGroup; children = ( - BBAB23BE13894E4700AA2426 /* GLUT.framework */, + F2C0EE541190D47BF5911C0A /* BaseSurface.cpp */, + F27EBFBACAC7B29B2B7CA500 /* BaseSurface.h */, + 2D2400AC1A64EDE5E990C56C /* GridWarpSurface.cpp */, + C3E8D103B72D02E063B29082 /* GridWarpSurface.h */, + BCBB74B9531974E1D5DA019B /* HexagonSurface.cpp */, + 0B4D5D37A2AE7AB30D726C16 /* HexagonSurface.h */, + B9ECBF061BABECA9C2341372 /* QuadSurface.cpp */, + 906696B07A716E4057D32B1E /* QuadSurface.h */, + 03FA94CA9F193C816DE4253F /* SurfaceFactory.cpp */, + D58C36B60BB72C7336042FB9 /* SurfaceFactory.h */, + 836B103542A52C63B004410C /* SurfaceManager.cpp */, + 7344B3B35CD0188D1283EC59 /* SurfaceManager.h */, + 1C080561EC053F17BB86A668 /* SurfaceStack.cpp */, + 6592BB3592290B34832D7607 /* SurfaceStack.h */, + B178ED5CA7F76AAA6E49E191 /* SurfaceType.h */, + 3DF2D82EA37D8C7A5F686EA5 /* TriangleSurface.cpp */, + 23118136CC7FFA920626B6C3 /* TriangleSurface.h */, ); - name = "3rd party frameworks"; + name = Surfaces; sourceTree = ""; }; E4328144138ABC890047C5CB /* Products */ = { @@ -746,15 +596,6 @@ name = Products; sourceTree = ""; }; - E45BE5980E8CC70C009D7055 /* frameworks */ = { - isa = PBXGroup; - children = ( - BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */, - BBAB23C913894ECA00AA2426 /* system frameworks */, - ); - name = frameworks; - sourceTree = ""; - }; E4B69B4A0A3A1720003C02F2 = { isa = PBXGroup; children = ( @@ -763,7 +604,7 @@ E4B69E1C0A3A1BDC003C02F2 /* src */, E4EEC9E9138DF44700A80321 /* openFrameworks */, BB4B014C10F69532006C3DED /* addons */, - E45BE5980E8CC70C009D7055 /* frameworks */, + 6948EE371B920CB800B5AC1A /* local_addons */, E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */, ); sourceTree = ""; @@ -774,12 +615,12 @@ E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, - 397EFC811A09047C0009286E /* CustomSource.h */, - 397EFC801A09047C0009286E /* CustomSource.cpp */, - 399953681BD54FF600D5B1F1 /* CrossSource.h */, - 399953671BD54FF600D5B1F1 /* CrossSource.cpp */, - 3995C2081C79069B00123352 /* Settings.h */, - 3995C2091C79069B00123352 /* Settings.cpp */, + 2DDA3608BED55BC67A9DAFF5 /* CrossSource.cpp */, + F3BC84F0441C01B0A760508D /* CrossSource.h */, + 76B40246C8B90C1CA4074BB7 /* CustomSource.cpp */, + B0B66559E2F530AE989510C0 /* CustomSource.h */, + 4A0800123A129E9BC12ED207 /* Settings.cpp */, + A1A567FBAE494BF84E54E83C /* Settings.h */, ); path = src; sourceTree = SOURCE_ROOT; @@ -793,6 +634,88 @@ name = openFrameworks; sourceTree = ""; }; + F19689EE10A2EC1EC429FAC7 /* Commands */ = { + isa = PBXGroup; + children = ( + 231337763726D333E0B3D56C /* AddGridColCmd.cpp */, + 1E73070DAC89F6A796BFF464 /* AddGridColCmd.h */, + 3E4A0386460638A781A7AC84 /* AddGridRowCmd.cpp */, + 775FD891C1E381F87BF33C82 /* AddGridRowCmd.h */, + B323D7489A7B26A63443444F /* AddSurfaceCmd.cpp */, + 00756183A9E41665E637AC23 /* AddSurfaceCmd.h */, + 17972C3384311464011667D9 /* BaseCmd.h */, + 962C349E8F4E59FF335AB2A6 /* ClearSurfacesCmd.cpp */, + 3074E4094F76555C299E5D8E /* ClearSurfacesCmd.h */, + BDBE053980FA01FAD543D782 /* CmdManager.cpp */, + 2F04FFB9BAC4575E214C0DED /* CmdManager.h */, + 6E80EE6FB0CC304A6CA287BB /* DeselectSurfaceCmd.cpp */, + 65DBA05D19177D2853D54196 /* DeselectSurfaceCmd.h */, + E8CE817DF3028A4345376E7D /* DeselectTexCoordCmd.cpp */, + 718E523D4BDDCFAC394B3EA5 /* DeselectTexCoordCmd.h */, + C656C28252AD5E9E09FA2162 /* DuplicateSurfaceCmd.cpp */, + EE95BF87E883491E7CC9B6EC /* DuplicateSurfaceCmd.h */, + DBAFA0B7AFEA589CA5167204 /* MvAllTexCoordsCmd.cpp */, + 25322223D3976D5F33DCCBF6 /* MvAllTexCoordsCmd.h */, + EC481BAB32B250D3EA41AF9E /* MvLayerDnCmd.cpp */, + 61481FB831430E35A18ABD02 /* MvLayerDnCmd.h */, + E52D4207C299D5886C8FD2C7 /* MvLayerUpCmd.cpp */, + 933CAE5B2DEC9DDABEA95E34 /* MvLayerUpCmd.h */, + 7D386994DF359F3BD1E66480 /* MvSelectionCmd.cpp */, + D4CFAEBB593AD070E04F106C /* MvSelectionCmd.h */, + 18041C8871E17DE3E60BFF95 /* MvSurfaceVertCmd.cpp */, + D565A612B1DF2837C94A6081 /* MvSurfaceVertCmd.h */, + 0739F09627790055C959BBF4 /* MvTexCoordCmd.cpp */, + 8F41EDB76644426680B2FA2B /* MvTexCoordCmd.h */, + A50F23D868C48DF9799BC788 /* RmGridColCmd.cpp */, + BA65337B3E631788AE2D018B /* RmGridColCmd.h */, + F3538B8AF69CAB7C215FA1EF /* RmGridRowCmd.cpp */, + 74CA4C78136F233FB90B7D3E /* RmGridRowCmd.h */, + B7C308F8B76FCB909581A580 /* RmSurfaceCmd.cpp */, + D7287CBE5600FEE9EE1B1AEA /* RmSurfaceCmd.h */, + 60F40691CD9DE4DEE1768FE9 /* SaveTexCoordPosCmd.cpp */, + D463EA9CC53D21A44CB9D6EF /* SaveTexCoordPosCmd.h */, + 34B45EB44DED0A47FBAD30F4 /* ScaleSurfaceFromToCmd.cpp */, + 62C9C3E62D4BEF04CF54C031 /* ScaleSurfaceFromToCmd.h */, + FC98A68C64BFC941D0B31EE9 /* SelNextSurfaceCmd.cpp */, + 30ED82F4A70B5B95CCEF7744 /* SelNextSurfaceCmd.h */, + 784FFEB8D108EC916343AB97 /* SelNextTexCoordCmd.cpp */, + A5CBAE57D2ADED1CAB6123AF /* SelNextTexCoordCmd.h */, + 140C0677F9F5A5D3B8A89AC4 /* SelNextVertexCmd.cpp */, + BA5B6BB795E2A24B2DBA22BD /* SelNextVertexCmd.h */, + 6DF54314CF2B45BF195B84C6 /* SelPrevSurfaceCmd.cpp */, + B5C793F4FEA3AA065347B61C /* SelPrevSurfaceCmd.h */, + F7E88D3956480E0CBAA21641 /* SelPrevTexCoordCmd.cpp */, + 1CE256C39E514ABD16FCCB87 /* SelPrevTexCoordCmd.h */, + 3B29C3846BA06080344C1D1E /* SelPrevVertexCmd.cpp */, + 47AB6134D2AB2F3EB10096A3 /* SelPrevVertexCmd.h */, + 0B691BBAB665F94F09B2C276 /* SelSurfaceCmd.cpp */, + CB4461BD6FC059D946144727 /* SelSurfaceCmd.h */, + 27453C6FAE9B674FD694508D /* SelTexCoordCmd.cpp */, + D05D5FBB2B2779B022A5DD04 /* SelTexCoordCmd.h */, + A2282B1E05458C3B2BBCE568 /* SelVertexCmd.cpp */, + 79A9ED756DB70790A67E3EF8 /* SelVertexCmd.h */, + 8D3CB0B9A827AFA479349BBE /* SetApplicationModeCmd.cpp */, + F0A9FE4B6FB6C958B72B72CD /* SetApplicationModeCmd.h */, + 4FFBE499412CC8DD07163E91 /* SetNextSourceCmd.cpp */, + FA2E4E947E8D358C28D903C0 /* SetNextSourceCmd.h */, + 15C9B02F2CF08112845CD074 /* SetPresetCmd.cpp */, + BCB571865BB25BC586CF80EC /* SetPresetCmd.h */, + 7F58FFED7FBFC49573FF65E4 /* SetSourceCmd.cpp */, + 56A68D8E68FF141B5EB1ADF6 /* SetSourceCmd.h */, + 49BE2D8F2A2A57F4EBF83FF4 /* SetTexMapDrawModeCmd.cpp */, + 912C6A870E22496CEA43AC85 /* SetTexMapDrawModeCmd.h */, + E8DA47AF2B265F778E74D4DA /* StartDragSurfaceCmd.cpp */, + 5EBDBF5E7887C574E1FCC1B5 /* StartDragSurfaceCmd.h */, + 5D020B9B28609D071E21BB76 /* ToggleAnimatedSourceCmd.cpp */, + 21167F26AF957606289D4A4A /* ToggleAnimatedSourceCmd.h */, + 655142313A378162E3929785 /* TogglePerspectiveCmd.cpp */, + 4244A1B9B55BD7BA7ED2F547 /* TogglePerspectiveCmd.h */, + 03FCF5559C2A6AB79D947767 /* TranslateCanvasCmd.cpp */, + 5AB104FC7812B4F42B8E1540 /* TranslateCanvasCmd.h */, + ); + name = Commands; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -804,6 +727,7 @@ E4B69B590A3A1756003C02F2 /* Frameworks */, E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, E4C2427710CC5ABF004149E2 /* CopyFiles */, + 8466F1851C04CA0E00918B1C /* ShellScript */, ); buildRules = ( ); @@ -821,7 +745,7 @@ E4B69B4C0A3A1720003C02F2 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0720; + LastUpgradeCheck = 0600; }; buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example" */; compatibilityVersion = "Xcode 3.2"; @@ -860,6 +784,19 @@ /* End PBXReferenceProxy section */ /* Begin PBXShellScriptBuildPhase section */ + 8466F1851C04CA0E00918B1C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# ---- 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"; + }; E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -871,7 +808,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\""; + 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 bin/data into App/Resources\nrsync -avz --exclude='.DS_Store' \"${SRCROOT}/bin/data/\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved ../../../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# Copy GLUT framework (must remove for AppStore submissions)\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\"\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -880,96 +817,96 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, - 0115A6B71DBF93BA00C51732 /* BaseSurface.cpp in Sources */, - 0115A6A81DBF93BA00C51732 /* ScaleWidget.cpp in Sources */, - 016630A31DC66DAB0081F28F /* SelVertexCmd.cpp in Sources */, - 016630911DC66DAB0081F28F /* MvLayerDnCmd.cpp in Sources */, - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, - 0166308C1DC66DAB0081F28F /* CmdManager.cpp in Sources */, - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, - 0115A6B91DBF93BA00C51732 /* HexagonSurface.cpp in Sources */, - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, - 0115A6BB1DBF93BA00C51732 /* SurfaceFactory.cpp in Sources */, - 016630921DC66DAB0081F28F /* MvLayerUpCmd.cpp in Sources */, - 0166309C1DC66DAB0081F28F /* SelNextTexCoordCmd.cpp in Sources */, - 0115A6A71DBF93BA00C51732 /* ProjectionEditorWidget.cpp in Sources */, - 0115A67F1DBF93BA00C51732 /* SourceSelectionMode.cpp in Sources */, - 3995C20A1C79069B00123352 /* Settings.cpp in Sources */, - 0115A6B61DBF93BA00C51732 /* VideoSource.cpp in Sources */, - 016630891DC66DAB0081F28F /* AddGridRowCmd.cpp in Sources */, - 0115A6AD1DBF93BA00C51732 /* TextureHighlightWidget.cpp in Sources */, - 016630A81DC66DAB0081F28F /* SetTexMapDrawModeCmd.cpp in Sources */, - 0115A6AF1DBF93BA00C51732 /* DirectoryWatcher.cpp in Sources */, - 016630961DC66DAB0081F28F /* RmGridColCmd.cpp in Sources */, - 0115A6AE1DBF93BA00C51732 /* Info.cpp in Sources */, - 0166308F1DC66DAB0081F28F /* DuplicateSurfaceCmd.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, - 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, - 016630971DC66DAB0081F28F /* RmGridRowCmd.cpp in Sources */, - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, - 0115A6B51DBF93BA00C51732 /* OMXPlayerCache.cpp in Sources */, - 0166308E1DC66DAB0081F28F /* DeselectTexCoordCmd.cpp in Sources */, - 0115A67E1DBF93BA00C51732 /* ProjectionMappingMode.cpp in Sources */, - 0115A6B41DBF93BA00C51732 /* ImageSource.cpp in Sources */, - 0166309D1DC66DAB0081F28F /* SelNextVertexCmd.cpp in Sources */, - 016630AC1DC66DAB0081F28F /* TranslateCanvasCmd.cpp in Sources */, - 0166309F1DC66DAB0081F28F /* SelPrevTexCoordCmd.cpp in Sources */, - 016630A21DC66DAB0081F28F /* SelTexCoordCmd.cpp in Sources */, - 0115A6A91DBF93BA00C51732 /* SourcesEditorWidget.cpp in Sources */, - 016630981DC66DAB0081F28F /* RmSurfaceCmd.cpp in Sources */, - 016630A41DC66DAB0081F28F /* SetApplicationModeCmd.cpp in Sources */, - 016630901DC66DAB0081F28F /* MvAllTexCoordsCmd.cpp in Sources */, - 0115A67B1DBF93BA00C51732 /* Application.cpp in Sources */, - 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, - 0115A6B31DBF93BA00C51732 /* FboSource.cpp in Sources */, - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, - 0115A67D1DBF93BA00C51732 /* PresentationMode.cpp in Sources */, - 0166308B1DC66DAB0081F28F /* ClearSurfacesCmd.cpp in Sources */, - 399953691BD54FF600D5B1F1 /* CrossSource.cpp in Sources */, - 0115A6AA1DBF93BA00C51732 /* SurfaceHighlightWidget.cpp in Sources */, - 016630A61DC66DAB0081F28F /* SetPresetCmd.cpp in Sources */, - 0115A67C1DBF93BA00C51732 /* ApplicationBaseMode.cpp in Sources */, - 0166309B1DC66DAB0081F28F /* SelNextSurfaceCmd.cpp in Sources */, - 0115A6C01DBF93BA00C51732 /* CircleJoint.cpp in Sources */, - 0166309E1DC66DAB0081F28F /* SelPrevSurfaceCmd.cpp in Sources */, - 0115A6A51DBF93BA00C51732 /* Gui.cpp in Sources */, - 016630A11DC66DAB0081F28F /* SelSurfaceCmd.cpp in Sources */, - 0166308D1DC66DAB0081F28F /* DeselectSurfaceCmd.cpp in Sources */, - 0115A6B01DBF93BA00C51732 /* MediaServer.cpp in Sources */, - 0166308A1DC66DAB0081F28F /* AddSurfaceCmd.cpp in Sources */, - 0115A6AC1DBF93BA00C51732 /* TextureEditorWidget.cpp in Sources */, - 0115A6811DBF93BA00C51732 /* SettingsLoader.cpp in Sources */, - 016630A71DC66DAB0081F28F /* SetSourceCmd.cpp in Sources */, - 0115A6BA1DBF93BA00C51732 /* QuadSurface.cpp in Sources */, E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, - 016630A01DC66DAB0081F28F /* SelPrevVertexCmd.cpp in Sources */, - 016630A51DC66DAB0081F28F /* SetNextSourceCmd.cpp in Sources */, - 0115A6B21DBF93BA00C51732 /* BaseSource.cpp in Sources */, - 016630941DC66DAB0081F28F /* MvSurfaceVertCmd.cpp in Sources */, - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, - 0115A6BC1DBF93BA00C51732 /* SurfaceManager.cpp in Sources */, - 016630AA1DC66DAB0081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */, - 0166309A1DC66DAB0081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */, - 0115A6801DBF93BA00C51732 /* TextureMappingMode.cpp in Sources */, - 016630931DC66DAB0081F28F /* MvSelectionCmd.cpp in Sources */, - 0115A6B11DBF93BA00C51732 /* ofxPiMapper.cpp in Sources */, - 0115A6BD1DBF93BA00C51732 /* SurfaceStack.cpp in Sources */, - 0115A6A61DBF93BA00C51732 /* LayerPanelWidget.cpp in Sources */, - 016630951DC66DAB0081F28F /* MvTexCoordCmd.cpp in Sources */, - 0115A6BE1DBF93BA00C51732 /* TriangleSurface.cpp in Sources */, - 0115A6C21DBF93BA00C51732 /* HomographyHelper.cpp in Sources */, - 0115A6B81DBF93BA00C51732 /* GridWarpSurface.cpp in Sources */, - 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, - 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, - 016630881DC66DAB0081F28F /* AddGridColCmd.cpp in Sources */, - 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */, - 016630AB1DC66DAB0081F28F /* TogglePerspectiveCmd.cpp in Sources */, - 016630991DC66DAB0081F28F /* SaveTexCoordPosCmd.cpp in Sources */, - 016630A91DC66DAB0081F28F /* StartDragSurfaceCmd.cpp in Sources */, - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, - 0115A6C11DBF93BA00C51732 /* RadioList.cpp in Sources */, - 0115A6BF1DBF93BA00C51732 /* BaseJoint.cpp in Sources */, + 2AB23B34A18E47DB0D742387 /* CrossSource.cpp in Sources */, + A3E23EF00463364A9FE3860C /* CustomSource.cpp in Sources */, + 4280FE72330EE80A9929046F /* Settings.cpp in Sources */, + 856AA354D08AB4B323081444 /* ofxBaseGui.cpp in Sources */, + 5CBB2AB3A60F65431D7B555D /* ofxButton.cpp in Sources */, + B266578FC55D23BFEBC042E7 /* ofxGuiGroup.cpp in Sources */, + 483908258D00B98B4BE69F07 /* ofxLabel.cpp in Sources */, + F285EB3169F1566CA3D93C20 /* ofxPanel.cpp in Sources */, + 837220E80EB56CD44AD27F2A /* ofxSlider.cpp in Sources */, + B56FE57CC35806596D38118C /* ofxSliderGroup.cpp in Sources */, + 1CD33E884D9E3358252E82A1 /* ofxToggle.cpp in Sources */, + 401140F3B7FA4412935BB121 /* Application.cpp in Sources */, + C4D6DA9B890E612343FD059F /* ApplicationBaseMode.cpp in Sources */, + 4A53BFBA57F4AD16FB9D2D24 /* PresentationMode.cpp in Sources */, + 42AB7CD7DFB89209AB951942 /* ProjectionMappingMode.cpp in Sources */, + AA98F23DF9897F2241EF3968 /* SourceSelectionMode.cpp in Sources */, + 21B18AC78EBFC1FD28C614D5 /* TextureMappingMode.cpp in Sources */, + 2E9E05C9FFCE15172A701335 /* SettingsLoader.cpp in Sources */, + 580602DA874A9CF9E850DEEE /* AddGridColCmd.cpp in Sources */, + D88BA6D139757ED4E1669796 /* AddGridRowCmd.cpp in Sources */, + B1EEE5A7EC1876072BF8F7FE /* AddSurfaceCmd.cpp in Sources */, + F9A6B58165791682416A1685 /* ClearSurfacesCmd.cpp in Sources */, + 93760FE8B10EBD4081251E10 /* CmdManager.cpp in Sources */, + C8D7FA44AA0565654A681157 /* DeselectSurfaceCmd.cpp in Sources */, + 973F560586CB3735581265E7 /* DeselectTexCoordCmd.cpp in Sources */, + D61A46C1800537BA43C7884F /* DuplicateSurfaceCmd.cpp in Sources */, + 8CA6C92E3D4F91750BC469FF /* MvAllTexCoordsCmd.cpp in Sources */, + A75658250711ADE2C05FC781 /* MvLayerDnCmd.cpp in Sources */, + C34B66987F4DA38C21AF325B /* MvLayerUpCmd.cpp in Sources */, + 6056983B92E88B475FF04299 /* MvSelectionCmd.cpp in Sources */, + 845DC872C79A75F7B5FABC02 /* MvSurfaceVertCmd.cpp in Sources */, + 25F5CD753AF35B53464E56AE /* MvTexCoordCmd.cpp in Sources */, + 82643E358DF270B9EC939699 /* RmGridColCmd.cpp in Sources */, + 5826FF4F63DC430E90AFDA5E /* RmGridRowCmd.cpp in Sources */, + B01F972DDDA5F21EF4C8B99D /* RmSurfaceCmd.cpp in Sources */, + 36A98A331EAE1D0A19998A59 /* SaveTexCoordPosCmd.cpp in Sources */, + E327ACE85A208BAFACD1B7C7 /* ScaleSurfaceFromToCmd.cpp in Sources */, + 67FF225B68ECC1942C833BFE /* SelNextSurfaceCmd.cpp in Sources */, + 60C8089351E49CF344577098 /* SelNextTexCoordCmd.cpp in Sources */, + E6D82F5A7B22E9FB46DEEF15 /* SelNextVertexCmd.cpp in Sources */, + 7DAB7D546F81A93336034BF7 /* SelPrevSurfaceCmd.cpp in Sources */, + 800748EF057A284D9DA82F60 /* SelPrevTexCoordCmd.cpp in Sources */, + B9654D0EF43BCA228B330ED7 /* SelPrevVertexCmd.cpp in Sources */, + E5D631612E039E04B1736E76 /* SelSurfaceCmd.cpp in Sources */, + 14566DCD28D35A80428886C4 /* SelTexCoordCmd.cpp in Sources */, + 7002E598586957E5F20E69A7 /* SelVertexCmd.cpp in Sources */, + 90DE06EA59944C1BEA539719 /* SetApplicationModeCmd.cpp in Sources */, + 4BF21A290FA6FE26B87B8971 /* SetNextSourceCmd.cpp in Sources */, + 84172554824F6959BA431E33 /* SetPresetCmd.cpp in Sources */, + 6500BFD07CA93EFD8A162B25 /* SetSourceCmd.cpp in Sources */, + A6EE8D8F3CA590EF6D7FAFA6 /* SetTexMapDrawModeCmd.cpp in Sources */, + 06765053D7BFBBEB43E77B23 /* StartDragSurfaceCmd.cpp in Sources */, + 6438655B2AE4DDA2743241EC /* ToggleAnimatedSourceCmd.cpp in Sources */, + 23963D6D8F0085D5DD2DF394 /* TogglePerspectiveCmd.cpp in Sources */, + 28F5415281F8D09BBC098355 /* TranslateCanvasCmd.cpp in Sources */, + EA700B09626C8413C92EF860 /* Gui.cpp in Sources */, + 8E8F94DC506856A4E92FBA8A /* LayerPanelWidget.cpp in Sources */, + 274AEF0299D77E27C0C5B205 /* ProjectionEditorWidget.cpp in Sources */, + F06AE014F869282B7F7CE84C /* ScaleWidget.cpp in Sources */, + FB03F0A6D7866DFC55F519EB /* SourcesEditorWidget.cpp in Sources */, + 8A3D6CE0A4338871766366B6 /* SurfaceHighlightWidget.cpp in Sources */, + 4D2D4455339FC8C955091C88 /* TextureEditorWidget.cpp in Sources */, + 9CAA3B0DFD59840998C832DA /* TextureHighlightWidget.cpp in Sources */, + F3EACD31EE5E141FF66C48BD /* Info.cpp in Sources */, + DB8FC60C7512DB810C92625B /* DirectoryWatcher.cpp in Sources */, + 92527EF632E7EC0E96BC329C /* MediaServer.cpp in Sources */, + 3B90107DB9BF4857E357FCA8 /* ofxPiMapper.cpp in Sources */, + 892923A127FC7C57469FD078 /* BaseSource.cpp in Sources */, + 7702233BBFB6E8D9E8B93CBC /* FboSource.cpp in Sources */, + 95CB0A22296B3DB402835DCF /* ImageSource.cpp in Sources */, + 588E33B9B0BD6F5A2E4DF31D /* OMXPlayerCache.cpp in Sources */, + A0C1CAB7B9C59DDDC960EB62 /* VideoSource.cpp in Sources */, + 9F968AD3A115328F4BFE5D71 /* BaseSurface.cpp in Sources */, + 63DB0907B2ACDF9E6F2D9925 /* GridWarpSurface.cpp in Sources */, + 9C194C9F4ACD67CD61FBD30D /* HexagonSurface.cpp in Sources */, + 2A9AFA74E0EF07E58AC11382 /* QuadSurface.cpp in Sources */, + B27F2ADC894A4C463E892AFE /* SurfaceFactory.cpp in Sources */, + 85649EB44DE8F0A3BF8430F9 /* SurfaceManager.cpp in Sources */, + C3A616FB3A463C17E327F395 /* SurfaceStack.cpp in Sources */, + C0EB2D2E383BA9DE417ADB38 /* TriangleSurface.cpp in Sources */, + 868F230C6074263277ED9B07 /* BaseJoint.cpp in Sources */, + 42BCE929D520D8872171239A /* CircleJoint.cpp in Sources */, + 1F4453EA1589AD79F4B34493 /* RadioList.cpp in Sources */, + 83CACB24937919003F2F9B63 /* HomographyHelper.cpp in Sources */, + 63B57AC5BF4EF088491E0317 /* ofxXmlSettings.cpp in Sources */, + 933A2227713C720CEFF80FD9 /* tinyxml.cpp in Sources */, + 9D44DC88EF9E7991B4A09951 /* tinyxmlerror.cpp in Sources */, + 5A4349E9754D6FA14C0F2A3A /* tinyxmlparser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -988,11 +925,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; + ARCHS = "$(ARCHS_STANDARD)"; CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; COPY_PHASE_STRIP = NO; DEAD_CODE_STRIPPING = YES; - ENABLE_TESTABILITY = YES; GCC_AUTO_VECTORIZATION = YES; GCC_ENABLE_SSE3_EXTENSIONS = YES; GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; @@ -1008,22 +944,29 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, + ../../../addons/ofxGui/src, + ../../../addons/ofxPiMapper/src, + ../../../addons/ofxPiMapper/src/Application, + ../../../addons/ofxPiMapper/src/Application/Modes, + ../../../addons/ofxPiMapper/src/Commands, + ../../../addons/ofxPiMapper/src/Gui, + ../../../addons/ofxPiMapper/src/Gui/Widgets, + ../../../addons/ofxPiMapper/src/Info, + ../../../addons/ofxPiMapper/src/MediaServer, + ../../../addons/ofxPiMapper/src/Sources, + ../../../addons/ofxPiMapper/src/Surfaces, + ../../../addons/ofxPiMapper/src/UserInterface, + ../../../addons/ofxPiMapper/src/Utils, + ../../../addons/ofxXmlSettings/libs, + ../../../addons/ofxXmlSettings/src, ); - INFOPLIST_FILE = "openFrameworks-Info.plist"; - MACH_O_TYPE = mh_execute; - MACOSX_DEPLOYMENT_TARGET = 10.7; + MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "-D__MACOSX_CORE__", - "-lpthread", "-mtune=native", ); - OTHER_LDFLAGS = ( - "$(OF_CORE_LIBS)", - "$(OF_CORE_FRAMEWORKS)", - ); - PRIVATE_HEADERS_FOLDER_PATH = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = macosx; + SDKROOT = macosx10.11; }; name = Debug; }; @@ -1031,7 +974,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { - COMBINE_HIDPI_IMAGES = YES; + ARCHS = "$(ARCHS_STANDARD)"; CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; COPY_PHASE_STRIP = YES; DEAD_CODE_STRIPPING = YES; @@ -1051,26 +994,34 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, + ../../../addons/ofxGui/src, + ../../../addons/ofxPiMapper/src, + ../../../addons/ofxPiMapper/src/Application, + ../../../addons/ofxPiMapper/src/Application/Modes, + ../../../addons/ofxPiMapper/src/Commands, + ../../../addons/ofxPiMapper/src/Gui, + ../../../addons/ofxPiMapper/src/Gui/Widgets, + ../../../addons/ofxPiMapper/src/Info, + ../../../addons/ofxPiMapper/src/MediaServer, + ../../../addons/ofxPiMapper/src/Sources, + ../../../addons/ofxPiMapper/src/Surfaces, + ../../../addons/ofxPiMapper/src/UserInterface, + ../../../addons/ofxPiMapper/src/Utils, + ../../../addons/ofxXmlSettings/libs, + ../../../addons/ofxXmlSettings/src, ); - INFOPLIST_FILE = "openFrameworks-Info.plist"; - MACH_O_TYPE = mh_execute; - MACOSX_DEPLOYMENT_TARGET = 10.7; + MACOSX_DEPLOYMENT_TARGET = 10.8; OTHER_CPLUSPLUSFLAGS = ( "-D__MACOSX_CORE__", - "-lpthread", "-mtune=native", ); - OTHER_LDFLAGS = ( - "$(OF_CORE_LIBS)", - "$(OF_CORE_FRAMEWORKS)", - ); - PRIVATE_HEADERS_FOLDER_PATH = "$(PRODUCT_NAME:c99extidentifier)"; - SDKROOT = macosx; + SDKROOT = macosx10.11; }; name = Release; }; E4B69B600A3A1757003C02F2 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; @@ -1085,89 +1036,35 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, + ../../../addons/ofxGui/src, + ../../../addons/ofxPiMapper/src, + ../../../addons/ofxPiMapper/src/Application, + ../../../addons/ofxPiMapper/src/Application/Modes, + ../../../addons/ofxPiMapper/src/Commands, + ../../../addons/ofxPiMapper/src/Gui, + ../../../addons/ofxPiMapper/src/Gui/Widgets, + ../../../addons/ofxPiMapper/src/Info, + ../../../addons/ofxPiMapper/src/MediaServer, + ../../../addons/ofxPiMapper/src/Sources, + ../../../addons/ofxPiMapper/src/Surfaces, + ../../../addons/ofxPiMapper/src/UserInterface, + ../../../addons/ofxPiMapper/src/Utils, + ../../../addons/ofxXmlSettings/libs, + ../../../addons/ofxXmlSettings/src, ); ICON = "$(ICON_NAME_DEBUG)"; ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; INFOPLIST_FILE = "openFrameworks-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)", - ); - MACOSX_DEPLOYMENT_TARGET = 10.11; - OTHER_LDFLAGS = ( - "$(OF_CORE_LIBS)", - "$(OF_CORE_FRAMEWORKS)", - ); - PRODUCT_BUNDLE_IDENTIFIER = cc.openFrameworks.ofapp; - PRODUCT_NAME = exampleDebug; - SDKROOT = macosx; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)Debug"; WRAPPER_EXTENSION = app; }; name = Debug; }; E4B69B610A3A1757003C02F2 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; @@ -1181,84 +1078,30 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, + ../../../addons/ofxGui/src, + ../../../addons/ofxPiMapper/src, + ../../../addons/ofxPiMapper/src/Application, + ../../../addons/ofxPiMapper/src/Application/Modes, + ../../../addons/ofxPiMapper/src/Commands, + ../../../addons/ofxPiMapper/src/Gui, + ../../../addons/ofxPiMapper/src/Gui/Widgets, + ../../../addons/ofxPiMapper/src/Info, + ../../../addons/ofxPiMapper/src/MediaServer, + ../../../addons/ofxPiMapper/src/Sources, + ../../../addons/ofxPiMapper/src/Surfaces, + ../../../addons/ofxPiMapper/src/UserInterface, + ../../../addons/ofxPiMapper/src/Utils, + ../../../addons/ofxXmlSettings/libs, + ../../../addons/ofxXmlSettings/src, ); ICON = "$(ICON_NAME_RELEASE)"; ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; INFOPLIST_FILE = "openFrameworks-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", - ); - MACOSX_DEPLOYMENT_TARGET = 10.11; - OTHER_LDFLAGS = ( - "$(OF_CORE_LIBS)", - "$(OF_CORE_FRAMEWORKS)", - ); - PRODUCT_BUNDLE_IDENTIFIER = cc.openFrameworks.ofapp; - PRODUCT_NAME = example; - SDKROOT = macosx; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; + baseConfigurationReference = E4EB6923138AFD0F00A09F29; }; name = Release; }; diff --git a/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme b/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme index b040463..a637354 100644 --- a/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme +++ b/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme @@ -1,6 +1,6 @@ + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> @@ -38,21 +38,17 @@ ReferencedContainer = "container:example.xcodeproj"> - - - + - + + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Release"> @@ -38,21 +38,17 @@ ReferencedContainer = "container:example.xcodeproj"> - - - + - + English CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleIconFile - ${ICON} CFBundleIdentifier cc.openFrameworks.ofapp CFBundleInfoDictionaryVersion @@ -18,5 +16,7 @@ ???? CFBundleVersion 1.0 + CFBundleIconFile + ${ICON} diff --git a/example/src/magSlideShowSource.cpp b/example/src/magSlideShowSource.cpp index 5cc8a64..7c1d625 100644 --- a/example/src/magSlideShowSource.cpp +++ b/example/src/magSlideShowSource.cpp @@ -192,6 +192,7 @@ bool magSlideShowSource::createFromFolderContents(std::string path) bool magSlideShowSource::loadSlideShow(std::string slideShowXmlPath) { + return false; } From 8c283d96f47a1fead46b6d8dd452a915246b9ffc Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Sat, 2 Dec 2017 17:58:31 -0500 Subject: [PATCH 022/103] Slide show XML loading --- example/bin/data/ofxpimapper.xml | 10 ++++ example/src/magSlide.h | 1 - example/src/magSlideShowSource.cpp | 76 ++++++++++++++++++++++++++++-- example/src/magSlideShowSource.h | 29 ++++++------ example/src/ofApp.cpp | 21 +++++---- 5 files changed, 108 insertions(+), 29 deletions(-) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 0f1d1ff..84bd5b4 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -78,4 +78,14 @@ 1 + + 1920 + 1080 + 0.5 + + PING-PONG + + + FitProportionally + diff --git a/example/src/magSlide.h b/example/src/magSlide.h index c1889cb..f216203 100644 --- a/example/src/magSlide.h +++ b/example/src/magSlide.h @@ -50,7 +50,6 @@ public: /** * Resizes the largest dimension to the source's max, * the other dimension is resized proportionally. - * This is the default behavior. */ FitProportionally, diff --git a/example/src/magSlideShowSource.cpp b/example/src/magSlideShowSource.cpp index 7c1d625..02f335e 100644 --- a/example/src/magSlideShowSource.cpp +++ b/example/src/magSlideShowSource.cpp @@ -6,8 +6,8 @@ #include "magSlideShowSource.h" -#include "magSlide.h" #include "magSlideTransition.h" +#include "SettingsLoader.h" magSlideShowSource::magSlideShowSource() { @@ -189,11 +189,79 @@ bool magSlideShowSource::createFromFolderContents(std::string path) } } - -bool magSlideShowSource::loadSlideShow(std::string slideShowXmlPath) +bool magSlideShowSource::loadFromXml() { + auto *loader = ofx::piMapper::SettingsLoader::instance(); + auto xml = ofxXmlSettings(); + Settings settings; + + if (!xml.load(loader->getLastLoadedFilename())) + { + ofLogError("magSlideShowSource") << "Could not load settings file " << loader->getLastLoadedFilename(); + return false; + } + + xml.pushTag("surfaces"); + if (!xml.pushTag("magSlideShow")) + { + ofLogError("magSlideShowSource") << "Slide show settings not found in " << loader->getLastLoadedFilename(); + return false; + } + + settings.width = xml.getValue("Width", settings.width); + settings.height = xml.getValue("Height", settings.height); + + // Default slide duration: + settings.slideDuration = xml.getValue("SlideDuration", settings.slideDuration); + + // Default loop: + if (xml.pushTag("Loop")) + { + auto type = xml.getValue("Type", ""); + if (type == "NONE") + { + settings.loopType = LoopType::NONE; + } + else if (type == "NORMAL") + { + settings.loopType = LoopType::NORMAL; + } + else if (type == "PING-PONG") + { + settings.loopType = LoopType::PING_PONG; + } + + settings.numLoops = xml.getValue("Count", settings.numLoops); + xml.popTag(); + } + + // Default resize options: + auto ropts = xml.getValue("ResizeOption", ""); + if (ropts == "NoResize") + { + settings.resizeOption = magSlide::NoResize; + } + else if (ropts == "Native") + { + settings.resizeOption = magSlide::Native; + } + else if (ropts == "Fit") + { + settings.resizeOption = magSlide::Fit; + } + else if (ropts == "FitProportionally") + { + settings.resizeOption = magSlide::FitProportionally; + } + else if (ropts == "FillProportionally") + { + settings.resizeOption = magSlide::FillProportionally; + } + + initialize(settings); + + return true; - return false; } void magSlideShowSource::addSlide(std::shared_ptr slide) diff --git a/example/src/magSlideShowSource.h b/example/src/magSlideShowSource.h index bfa6377..5284b23 100644 --- a/example/src/magSlideShowSource.h +++ b/example/src/magSlideShowSource.h @@ -35,7 +35,8 @@ public: * otherwise. Check the console for the specific error. */ bool createFromFolderContents(std::string path); - bool loadSlideShow(std::string slideShowXmlPath); + + bool loadFromXml(); void addSlide(std::shared_ptr slide); void play(); void pause(); @@ -43,7 +44,7 @@ public: void playPrevSlide(); void playSlide(int slideIndex); - enum LoopType + enum LoopType : int { NONE = 0, NORMAL, @@ -53,14 +54,14 @@ public: struct Settings { /** - * The pixel width of the FBO. This value must be provided. + * The pixel width of the FBO. */ - float width = 0; + float width = 1280; /** - * The pixel height of the FBO. This value must be provided. + * The pixel height of the FBO. */ - float height = 0; + float height = 720; /** * An optional default slide duration, in seconds. * If a slide specifies a duration this value is ignored. @@ -76,7 +77,7 @@ public: * An optional default transition duration. If no transition * is specified, this value is ignored; */ - float transitionDuration = 1; + float transitionDuration = 0; /** * If specified, all applicable files in the folder will @@ -85,7 +86,7 @@ public: * * If path is relative, the root will likely be the Data folder. */ - std::string slidesFolderPath; + std::string slidesFolderPath = "sources/images"; /** * If specified, @@ -105,12 +106,12 @@ public: */ int numLoops = 0; - /** - * The resizing option for the slide show. The default is None. If a slide - * already has a resizing option applied, that option will be respected and - * this resizeOption will not be used. - */ - magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::NoResize; + /** + * The resizing option for the slide show. The default is FitProportionally. + * If a slide already has a resizing option applied, that option will be + * respected and this resizeOption will not be used. + */ + magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::FitProportionally; }; //////////////////////////////////////////// diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index 9c75f7b..e691269 100644 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -19,17 +19,10 @@ void ofApp::setup(){ slideShowSource = new magSlideShowSource(); // Create the settings struct for the slide show. - magSlideShowSource::Settings settings; - settings.width = 1280; - settings.height = 720; - settings.slidesFolderPath = "sources/images"; - settings.transitionDuration = 0; - settings.slideDuration = 0.5; - settings.loopType = magSlideShowSource::LoopType::NORMAL; - settings.resizeOption = magSlide::ResizeOptions::FitProportionally; // Initialize the slide show with our settings. - slideShowSource->initialize(settings); + // If it fails, initialize from default settings + // Register our sources: piMapper.registerFboSource(crossSource); @@ -37,9 +30,17 @@ void ofApp::setup(){ piMapper.registerFboSource(slideShowSource); piMapper.setup(); + // Slide show needs to be loaded after piMapper is set up: + if (!slideShowSource->loadFromXml()) + { + ofLogNotice("setup") << "loading magSlideShowSource XML settings failed. Initializing from default values"; + magSlideShowSource::Settings sets; + slideShowSource->initialize(sets); + } + // The info layer is hidden by default, press to toggle // piMapper.showInfo(); - + ofSetFullscreen(Settings::instance()->getFullscreen()); ofSetEscapeQuitsApp(false); ofSetLogLevel(OF_LOG_VERBOSE); From bc9dd8e06e55465691b6c30a6fcc72cb65e3d6fe Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 4 Dec 2017 14:19:05 +0100 Subject: [PATCH 023/103] Update README.md --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f9b3695..ab9c5d4 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,20 @@ This should be selectable as an additional FBO source in PiMapper, looping all images in the /media/internal/images/* folder Would be cool to adjust the speed with a simple flag, simple opacity transition welcome, but not necessary. Refresh state, so it checks if there are new images added during playback and play them as well. make all images fullscreen. (if its not possible to handle various sizes as one, i will make an imagemagick script to convert all to 1920x1080) -### 2. Play all videos from a folder -This should be a an additional FBO source in PiMapper, looping all videos in /media/internal/video/* -### 3. Circular shapes for mapping (there are only square and tringle shapes so far) +### 2. Circular shapes for mapping (there are only square and tringle shapes so far) Circualr mapping shape (if possible with movable center distorsion) -### 4. Grid Warp (meshing of square shapes) +### 3. Bezier handles +Adding bezier handles to masks for better aligment: https://github.com/TsubokuLab/ofxBezierWarpManager +### 4. Play all videos from a folder +This should be a an additional FBO source in PiMapper, looping all videos in /media/internal/video/* +### 5. Grid Warp (meshing of square shapes) check out this http://www.hv-a.com/lpmt/sssm.pdf on page: 10 https://forum.openframeworks.cc/t/grid-mesh-warping/12883 -### 5. SoftEdge +### 6. SoftEdge Image overlay to making adges transparent, could be achieved with overlaing a png with a black gradient. +Finalize the mapping converter: https://github.com/magdesign/mapping-converter + This will be an opensource project and freely available for everyone. Targeting OF_0.9.x on RaspberryPi. Each function will be rewarded to the coder from a pot sponsered by pocketvj.com. From a9f9fcab64744ab4ecbb49616b195df00732c2a5 Mon Sep 17 00:00:00 2001 From: magdesign Date: Mon, 4 Dec 2017 14:19:32 +0100 Subject: [PATCH 024/103] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ab9c5d4..2b3f6e2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This should be selectable as an additional FBO source in PiMapper, looping all i Would be cool to adjust the speed with a simple flag, simple opacity transition welcome, but not necessary. Refresh state, so it checks if there are new images added during playback and play them as well. make all images fullscreen. (if its not possible to handle various sizes as one, i will make an imagemagick script to convert all to 1920x1080) ### 2. Circular shapes for mapping (there are only square and tringle shapes so far) -Circualr mapping shape (if possible with movable center distorsion) +Circular mapping shape (if possible with movable center distorsion) ### 3. Bezier handles Adding bezier handles to masks for better aligment: https://github.com/TsubokuLab/ofxBezierWarpManager ### 4. Play all videos from a folder From 98fcb469b5a3caad28eddf4c46c5fca7382bdafc Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Mon, 4 Dec 2017 10:19:44 -0500 Subject: [PATCH 025/103] Slide Transition Factory --- example/src/magSlideShowSource.cpp | 25 ++++++-- example/src/magSlideTransition.cpp | 25 ++------ example/src/magSlideTransition.h | 38 +++++++----- example/src/magSlideTransitionFactory.cpp | 76 +++++++++++++++++++++++ example/src/magSlideTransitionFactory.h | 41 ++++++++++++ 5 files changed, 164 insertions(+), 41 deletions(-) create mode 100644 example/src/magSlideTransitionFactory.cpp create mode 100644 example/src/magSlideTransitionFactory.h diff --git a/example/src/magSlideShowSource.cpp b/example/src/magSlideShowSource.cpp index 02f335e..20d3bbc 100644 --- a/example/src/magSlideShowSource.cpp +++ b/example/src/magSlideShowSource.cpp @@ -8,6 +8,7 @@ #include "magSlideShowSource.h" #include "magSlideTransition.h" #include "SettingsLoader.h" +#include "magSlideTransitionFactory.h" magSlideShowSource::magSlideShowSource() { @@ -72,6 +73,10 @@ void magSlideShowSource::update() for (auto &slide : activeSlides) { + if (slide->activeTransition) + { + slide->activeTransition->update(deltaTime); + } slide->update(deltaTime); } @@ -99,15 +104,23 @@ void magSlideShowSource::draw() { ofBackground(0, 0); ofPushMatrix(); + ofPushStyle(); ofTranslate(getWidth()/2.0f, getHeight()/2.0f); + ofEnableAlphaBlending(); ofSetRectMode(OF_RECTMODE_CENTER); + ofFill(); + ofSetColor(255, 255); for (auto &slide : activeSlides) { - ofSetColor(255); - ofFill(); + if (slide->activeTransition) + { + slide->activeTransition->draw(); + } slide->draw(); } + ofPopStyle(); ofPopMatrix(); + ofDisableAlphaBlending(); } bool magSlideShowSource::createFromFolderContents(std::string path) @@ -258,6 +271,8 @@ bool magSlideShowSource::loadFromXml() settings.resizeOption = magSlide::FillProportionally; } + settings.transitionName = "FadeIn"; + settings.transitionDuration = 1.0; initialize(settings); return true; @@ -324,11 +339,13 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) if (!settings.transitionName.empty()) { static ofParameterGroup bogusParamGroup; // This is temporary so that things compile - slide->buildIn = magSlideTransition::createTransition(settings.transitionName, + + auto tf = magSlideTransitionFactory::instance(); + slide->buildIn = tf->createTransition(settings.transitionName, slide, bogusParamGroup, slide->buildInDuration); - slide->buildOut = magSlideTransition::createTransition(settings.transitionName, + slide->buildOut = tf->createTransition(settings.transitionName, slide, bogusParamGroup, slide->buildOutDuration); diff --git a/example/src/magSlideTransition.cpp b/example/src/magSlideTransition.cpp index 54ff0c8..efa8bba 100644 --- a/example/src/magSlideTransition.cpp +++ b/example/src/magSlideTransition.cpp @@ -6,17 +6,6 @@ #include "magSlideTransition.h" -std::shared_ptr -magSlideTransition::createTransition(std::string transitionName, std::shared_ptr slide, - ofParameterGroup &settings, u_int64_t duration) -{ - auto transition = magSlideTransition::instantiateTransition(transitionName); - transition->slide = slide; - transition->duration = duration; - transition->loadSettings(settings); - return transition; -} - void magSlideTransition::start() { runningTime = 0; @@ -47,14 +36,8 @@ float magSlideTransition::getNormalizedTime() return (double)runningTime / (double)duration; } -std::shared_ptr magSlideTransition::instantiateTransition(string transitionName) +void magFadeInTransition::draw() { - return std::make_shared(); -} - -//magDissolveTransition::magDissolveTransition() -//{} -void magVoidTransition::loadSettings(ofParameterGroup &settings) -{ - ofLogNotice("magVoidTransition") << "Void Transition is loading nothing"; -} + ofLogVerbose() << "fade in draw"; + ofSetColor(255, getNormalizedTime() * 255); +} \ No newline at end of file diff --git a/example/src/magSlideTransition.h b/example/src/magSlideTransition.h index 2c2a15d..fa7960d 100644 --- a/example/src/magSlideTransition.h +++ b/example/src/magSlideTransition.h @@ -7,25 +7,24 @@ #ifndef MAGSLIDETRANSITION_H #define MAGSLIDETRANSITION_H - #include "magSlide.h" +class magSlideTransitionFactory; + class magSlideTransition { public: - static std::shared_ptr createTransition(string transitionName, - shared_ptr ptr, - ofParameterGroup &group, - u_int64_t i); + magSlideTransition() {} /** * Begins the transition. This must be called in order for the * transition to actually do anything! */ void start(); - virtual void loadSettings(ofParameterGroup &settings) = 0; - virtual void setup(){} + virtual void loadSettings(ofParameterGroup &settings){} virtual void update(u_int64_t timeDelta); - virtual void draw(){} + virtual void draw(){ + ofLogVerbose() << "transiwiton draw " << getNormalizedTime(); + } /** * Current running time in milliseconds. @@ -40,28 +39,35 @@ public: */ float getNormalizedTime(); + string const &getName() const + { + return name; + } + ofEvent transitionCompleteEvent; protected: - magSlideTransition(){} + std::string name = "Void"; std::shared_ptr slide; u_int64_t runningTime; u_int64_t duration; u_int64_t endTime; bool isActive = false; - static shared_ptr instantiateTransition(string transitionName); -}; -class magVoidTransition : public magSlideTransition -{ -public: - void loadSettings(ofParameterGroup &settings) override; + friend class magSlideTransitionFactory; }; -class magDissolveTransition : public magSlideTransition +class magFadeInTransition : public magSlideTransition { public: + magFadeInTransition() + { + name = "FadeIn"; + } + void draw() override ; }; + + #endif diff --git a/example/src/magSlideTransitionFactory.cpp b/example/src/magSlideTransitionFactory.cpp new file mode 100644 index 0000000..c3e82ea --- /dev/null +++ b/example/src/magSlideTransitionFactory.cpp @@ -0,0 +1,76 @@ +// +// Created by Cristobal Mendoza on 12/3/17. +// + +#include "magSlideTransitionFactory.h" + +/* + * + * + * +class Base {}; + +class DerivedA : public Base {}; +class DerivedB : public Base {}; +class DerivedC : public Base {}; + +Base* create(const std::string& type) +{ + static std::map> type_creator_map = + { + {"DerivedA", [](){return new DerivedA();}}, + {"DerivedB", [](){return new DerivedB();}}, + {"DerivedC", [](){return new DerivedC();}} + }; + + auto it = type_creator_map.find(type); + if(it != type_creator_map.end()) + { + return it->second(); + } + + return nullptr; +} + */ + +magSlideTransitionFactory* magSlideTransitionFactory::_instance = 0; + +magSlideTransitionFactory::magSlideTransitionFactory() +{ + magSlideTransition voidTransition; + magFadeInTransition fadeIn; + + registerTransition(voidTransition); + registerTransition(fadeIn); +} + +magSlideTransitionFactory* magSlideTransitionFactory::instance() +{ + if (_instance == 0) + { + _instance = new magSlideTransitionFactory(); + } + + return _instance; +} + +std::shared_ptr +magSlideTransitionFactory::createTransition(std::string transitionName, std::shared_ptr slide, + ofParameterGroup &settings, u_int64_t duration) +{ + std::shared_ptr transition; + + if (transitionsMap.count(transitionName) > 0) + { + transition = transitionsMap[transitionName](); + } + else + { + transition = transitionsMap[transition->getName()](); + } + + transition->slide = slide; + transition->duration = duration; + transition->loadSettings(settings); + return transition; +} diff --git a/example/src/magSlideTransitionFactory.h b/example/src/magSlideTransitionFactory.h new file mode 100644 index 0000000..cb998b0 --- /dev/null +++ b/example/src/magSlideTransitionFactory.h @@ -0,0 +1,41 @@ +// +// Created by Cristobal Mendoza on 12/3/17. +// + +#ifndef MAGSLIDETRANSITIONFACTORY_H +#define MAGSLIDETRANSITIONFACTORY_H + +#include "magSlide.h" +#include "magSlideTransition.h" + +/** + * Factory class to register and instantiate transitions. + */ +class magSlideTransitionFactory +{ +public: + static magSlideTransitionFactory* instance(); + + std::shared_ptr createTransition(string transitionName, + std::shared_ptr slide, + ofParameterGroup &group, + u_int64_t duration); + template + void registerTransition(T transition) + { + if (transitionsMap.count(transition.getName()) == 0) + { + transitionsMap[transition.getName()] = [](){ + return std::make_shared(); + }; + } + } + +protected: + std::unordered_map()>> transitionsMap; +private: + static magSlideTransitionFactory* _instance; + magSlideTransitionFactory(); +}; + +#endif //MAGSLIDETRANSITIONFACTORY_H From 2c8567573d985f1acf50f098ea9104a67585ae9c Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Mon, 4 Dec 2017 10:19:57 -0500 Subject: [PATCH 026/103] Adding opacity property to magSlide --- example/src/magSlide.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/example/src/magSlide.h b/example/src/magSlide.h index f216203..1320fe0 100644 --- a/example/src/magSlide.h +++ b/example/src/magSlide.h @@ -77,6 +77,16 @@ public: float getHeight() { return height; } + float getOpacity() const + { + return opacity; + } + + void setOpacity(float opacity) + { + magSlide::opacity = opacity; + } + /** * Change the display size of a slide. This will implicitly * set resizeOptions to ResizeOption.NoResize. @@ -135,6 +145,7 @@ protected: float width; float height; ofPoint position; + float opacity = 1.0; ResizeOptions resizeOption = NoResize; SlideState slideState = Off; bool isComplete = false; From f2809b64a18a9c9645d64e57d57a46a019c92b5d Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Mon, 4 Dec 2017 12:29:59 -0500 Subject: [PATCH 027/103] Refactoring of transitions. No buildIn, just buildOut There is still work to be done here, this is just an initial commit for this feature. --- example/src/magSlide.cpp | 45 ++++++++++++++--------- example/src/magSlide.h | 10 ++--- example/src/magSlideShowSource.cpp | 19 ++++++---- example/src/magSlideTransition.cpp | 14 ++++++- example/src/magSlideTransition.h | 21 +++++++++++ example/src/magSlideTransitionFactory.cpp | 4 +- 6 files changed, 79 insertions(+), 34 deletions(-) diff --git a/example/src/magSlide.cpp b/example/src/magSlide.cpp index 7e38228..95e94c9 100644 --- a/example/src/magSlide.cpp +++ b/example/src/magSlide.cpp @@ -25,13 +25,13 @@ void magSlide::update(u_int64_t deltaTime) switch (slideState) { - case SlideState::BuildIn: - if (runningTime >= buildInDuration) - { - setState(Normal); - activeTransition = nullptr; - } - break; +// case SlideState::BuildIn: +// if (runningTime >= buildInDuration) +// { +// setState(Normal); +// activeTransition = nullptr; +// } +// break; case SlideState::Normal: if (runningTime >= buildOutStartTime) @@ -95,15 +95,15 @@ void magSlide::setState(SlideState state) void magSlide::setTransitionDuration(u_int64_t tDuration) { - buildInDuration = buildOutDuration = tDuration; + buildOutDuration = tDuration; } const std::string magSlide::getSlideStateName() { switch (slideState) { - case SlideState::BuildIn: - return "BuildIn"; +// case SlideState::BuildIn: +// return "BuildIn"; case SlideState::BuildOut: return "BuildOut"; case Normal: @@ -121,17 +121,24 @@ void magSlide::start(u_int64_t startTime) { this->startTime = startTime; runningTime = 0; - endTime = duration + buildInDuration + buildOutDuration; + endTime = duration + buildOutDuration; buildOutStartTime = endTime - buildOutDuration; - slideState = magSlide::SlideState::BuildIn; - if (buildIn != nullptr) - { - activeTransition = buildIn; - activeTransition->start(); - } + slideState = magSlide::SlideState::Normal; +// if (buildIn != nullptr) +// { +// activeTransition = buildIn; +// activeTransition->start(); +// } + position.set(0, 0); + opacity = 255; isComplete = false; } +void magSlide::draw() +{ + ofSetColor(255, opacity); +} + //////////////////////////////////////////////////////// #pragma mark MAG_IMAGE_SLIDE @@ -152,6 +159,7 @@ void magImageSlide::setup(ofImage &image) void magImageSlide::draw() { + magSlide::draw(); image.draw(position, width, height); } @@ -191,11 +199,12 @@ void magVideoSlide::update() void magVideoSlide::draw() { + magSlide::draw(); videoPlayer.draw(position.x, position.y, width, height); } void magVideoSlide::useVideoForDuration() { - duration = u_int64_t((videoPlayer.getDuration()*1000)) - buildInDuration - buildOutDuration; + duration = u_int64_t((videoPlayer.getDuration()*1000)) - buildOutDuration; } diff --git a/example/src/magSlide.h b/example/src/magSlide.h index 1320fe0..c0aafb5 100644 --- a/example/src/magSlide.h +++ b/example/src/magSlide.h @@ -15,7 +15,7 @@ public: magSlide(std::string type); // ~magSlide(); virtual void update(u_int64_t deltaTime); - virtual void draw() = 0; + virtual void draw(); /** * Sets the slide up for playback. This method must be @@ -62,7 +62,7 @@ public: enum SlideState : short { Off = 0, - BuildIn, +// BuildIn, Normal, BuildOut, Complete @@ -145,12 +145,12 @@ protected: float width; float height; ofPoint position; - float opacity = 1.0; + float opacity = 255; ResizeOptions resizeOption = NoResize; SlideState slideState = Off; bool isComplete = false; - std::shared_ptr buildIn = nullptr; +// std::shared_ptr buildIn = nullptr; std::shared_ptr buildOut = nullptr; std::shared_ptr activeTransition = nullptr; /** @@ -173,7 +173,7 @@ protected: /** * The duration of the build in transition or effect, in milliseconds. */ - u_int64_t buildInDuration; +// u_int64_t buildInDuration; /** * The duration of the build out transition or effect, in milliseconds. diff --git a/example/src/magSlideShowSource.cpp b/example/src/magSlideShowSource.cpp index 20d3bbc..6d1bd52 100644 --- a/example/src/magSlideShowSource.cpp +++ b/example/src/magSlideShowSource.cpp @@ -271,8 +271,8 @@ bool magSlideShowSource::loadFromXml() settings.resizeOption = magSlide::FillProportionally; } - settings.transitionName = "FadeIn"; - settings.transitionDuration = 1.0; + settings.transitionName = "Dissolve"; + settings.transitionDuration = 0.5; initialize(settings); return true; @@ -282,7 +282,7 @@ bool magSlideShowSource::loadFromXml() void magSlideShowSource::addSlide(std::shared_ptr slide) { // ofLogVerbose("addSlide") << slide->getId(); - slides.push_back(slide); + slides.insert(slides.begin(), slide); auto rOption = slide->getResizeOption(); // If the slide does not have a resize option assign @@ -341,10 +341,10 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) static ofParameterGroup bogusParamGroup; // This is temporary so that things compile auto tf = magSlideTransitionFactory::instance(); - slide->buildIn = tf->createTransition(settings.transitionName, - slide, - bogusParamGroup, - slide->buildInDuration); +// slide->buildIn = tf->createTransition(settings.transitionName, +// slide, +// bogusParamGroup, +// slide->buildInDuration); slide->buildOut = tf->createTransition(settings.transitionName, slide, bogusParamGroup, @@ -475,7 +475,10 @@ void magSlideShowSource::enqueueSlide(std::shared_ptr slide, u_int64_t { // ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId(); slide->start(startTime); - activeSlides.push_back(slide); + if (activeSlides.size() > 1) + { + } + activeSlides.insert(activeSlides.begin(), slide); } void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args) diff --git a/example/src/magSlideTransition.cpp b/example/src/magSlideTransition.cpp index efa8bba..1a2d992 100644 --- a/example/src/magSlideTransition.cpp +++ b/example/src/magSlideTransition.cpp @@ -40,4 +40,16 @@ void magFadeInTransition::draw() { ofLogVerbose() << "fade in draw"; ofSetColor(255, getNormalizedTime() * 255); -} \ No newline at end of file +} + +void magFadeOutTransition::draw() +{ + magSlideTransition::draw(); + +} + +void magDissolveTransition::draw() +{ + slide->setOpacity(255 - (getNormalizedTime() * 255)); + ofLogVerbose("opacity") << slide->getId() << " " << slide->getOpacity(); +} diff --git a/example/src/magSlideTransition.h b/example/src/magSlideTransition.h index fa7960d..896b267 100644 --- a/example/src/magSlideTransition.h +++ b/example/src/magSlideTransition.h @@ -49,6 +49,7 @@ public: protected: std::string name = "Void"; std::shared_ptr slide; + std::shared_ptr nextSlide; u_int64_t runningTime; u_int64_t duration; u_int64_t endTime; @@ -68,6 +69,26 @@ public: void draw() override ; }; +class magFadeOutTransition : public magSlideTransition +{ +public: + magFadeOutTransition() + { + name = "FadeOut"; + } + + void draw() override ; +}; +class magDissolveTransition : public magSlideTransition +{ +public: + magDissolveTransition() + { + name = "Dissolve"; + } + + void draw() override; +}; #endif diff --git a/example/src/magSlideTransitionFactory.cpp b/example/src/magSlideTransitionFactory.cpp index c3e82ea..1c03a57 100644 --- a/example/src/magSlideTransitionFactory.cpp +++ b/example/src/magSlideTransitionFactory.cpp @@ -38,10 +38,10 @@ magSlideTransitionFactory* magSlideTransitionFactory::_instance = 0; magSlideTransitionFactory::magSlideTransitionFactory() { magSlideTransition voidTransition; - magFadeInTransition fadeIn; + magDissolveTransition dissolve; registerTransition(voidTransition); - registerTransition(fadeIn); + registerTransition(dissolve); } magSlideTransitionFactory* magSlideTransitionFactory::instance() From 5e90127386277a0ce986cd0728e220190828b4e2 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Mon, 4 Dec 2017 16:30:32 -0500 Subject: [PATCH 028/103] Transitions working. Added Dissolve transition --- example/bin/data/ofxpimapper.xml | 3 +- example/src/magSlide.cpp | 11 +++---- example/src/magSlide.h | 30 ++++++++++++++++-- example/src/magSlideShowSource.cpp | 20 +++++------- example/src/magSlideTransition.cpp | 31 +++++++++++-------- example/src/magSlideTransition.h | 49 +++++++++++++++--------------- 6 files changed, 85 insertions(+), 59 deletions(-) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 84bd5b4..05362c2 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -81,10 +81,11 @@ 1920 1080 - 0.5 + 1 PING-PONG + FitProportionally diff --git a/example/src/magSlide.cpp b/example/src/magSlide.cpp index 95e94c9..1e50653 100644 --- a/example/src/magSlide.cpp +++ b/example/src/magSlide.cpp @@ -21,6 +21,7 @@ magSlide::magSlide(std::string type) void magSlide::update(u_int64_t deltaTime) { + transition->update(deltaTime); runningTime += deltaTime; switch (slideState) @@ -37,11 +38,6 @@ void magSlide::update(u_int64_t deltaTime) if (runningTime >= buildOutStartTime) { setState(BuildOut); - if (buildOut != nullptr) - { - activeTransition = buildOut; - activeTransition->start(); - } } break; @@ -49,7 +45,6 @@ void magSlide::update(u_int64_t deltaTime) if (runningTime >= endTime) { setState(Complete); - activeTransition = nullptr; } break; } @@ -137,6 +132,10 @@ void magSlide::start(u_int64_t startTime) void magSlide::draw() { ofSetColor(255, opacity); + if(transition->isActive()) + { + transition->draw(); + } } diff --git a/example/src/magSlide.h b/example/src/magSlide.h index c0aafb5..74e1b2c 100644 --- a/example/src/magSlide.h +++ b/example/src/magSlide.h @@ -115,6 +115,7 @@ public: * @param tDuration in milliseconds. */ void setTransitionDuration(u_int64_t tDuration); + ResizeOptions getResizeOption() const; void setResizeOption(ResizeOptions resizeOption); @@ -145,14 +146,39 @@ protected: float width; float height; ofPoint position; +public: + const ofPoint &getPosition() const + { + return position; + } + + void setPosition(const ofPoint &position) + { + magSlide::position = position; + } + + void setPosition(float x, float y) + { + position.set(x, y); + } + + +protected: float opacity = 255; ResizeOptions resizeOption = NoResize; SlideState slideState = Off; bool isComplete = false; // std::shared_ptr buildIn = nullptr; - std::shared_ptr buildOut = nullptr; - std::shared_ptr activeTransition = nullptr; +// std::shared_ptr buildOut = nullptr; + std::shared_ptr transition = nullptr; +public: + const shared_ptr &getTransition() const + { + return transition; + } + +protected: /** * The duration of the slide in millis, not counting builds */ diff --git a/example/src/magSlideShowSource.cpp b/example/src/magSlideShowSource.cpp index 6d1bd52..1856f6a 100644 --- a/example/src/magSlideShowSource.cpp +++ b/example/src/magSlideShowSource.cpp @@ -73,10 +73,6 @@ void magSlideShowSource::update() for (auto &slide : activeSlides) { - if (slide->activeTransition) - { - slide->activeTransition->update(deltaTime); - } slide->update(deltaTime); } @@ -112,10 +108,6 @@ void magSlideShowSource::draw() ofSetColor(255, 255); for (auto &slide : activeSlides) { - if (slide->activeTransition) - { - slide->activeTransition->draw(); - } slide->draw(); } ofPopStyle(); @@ -276,7 +268,6 @@ bool magSlideShowSource::loadFromXml() initialize(settings); return true; - } void magSlideShowSource::addSlide(std::shared_ptr slide) @@ -345,7 +336,7 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) // slide, // bogusParamGroup, // slide->buildInDuration); - slide->buildOut = tf->createTransition(settings.transitionName, + slide->transition = tf->createTransition(settings.transitionName, slide, bogusParamGroup, slide->buildOutDuration); @@ -475,9 +466,6 @@ void magSlideShowSource::enqueueSlide(std::shared_ptr slide, u_int64_t { // ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId(); slide->start(startTime); - if (activeSlides.size() > 1) - { - } activeSlides.insert(activeSlides.begin(), slide); } @@ -489,7 +477,13 @@ void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args // << slide->getSlideStateName(); if (slide->getSlideState() == magSlide::SlideState::BuildOut) { +// slide->transition->start(); +// ofLogVerbose() << "BuildOut " << slide->getId(); playNextSlide(); + if (activeSlides.size() > 1) + { + activeSlides[1]->transition->start(activeSlides[0]); + } } } diff --git a/example/src/magSlideTransition.cpp b/example/src/magSlideTransition.cpp index 1a2d992..6c4c9ac 100644 --- a/example/src/magSlideTransition.cpp +++ b/example/src/magSlideTransition.cpp @@ -6,22 +6,26 @@ #include "magSlideTransition.h" -void magSlideTransition::start() +void magSlideTransition::start(std::shared_ptr nextSlide) { runningTime = 0; - isActive = true; + active = true; + this->nextSlide = nextSlide; } void magSlideTransition::update(u_int64_t timeDelta) { - if (!isActive) return; + if (!active) return; runningTime += timeDelta; if (runningTime >= duration) { ofEventArgs arghh; // arghhhh... + nextSlide->setOpacity(255); + nextSlide->setPosition(0, 0); + end(); transitionCompleteEvent.notify(this, arghh); - isActive = false; + active = false; } } @@ -36,20 +40,21 @@ float magSlideTransition::getNormalizedTime() return (double)runningTime / (double)duration; } -void magFadeInTransition::draw() + +void magDissolveTransition::draw() { - ofLogVerbose() << "fade in draw"; - ofSetColor(255, getNormalizedTime() * 255); + slide->setOpacity(255 - (getNormalizedTime() * 255)); + nextSlide->setOpacity(getNormalizedTime()*255); } -void magFadeOutTransition::draw() +void magDissolveTransition::start(std::shared_ptr nextSlide) { - magSlideTransition::draw(); - + magSlideTransition::start(nextSlide); + nextSlide->setOpacity(0); } -void magDissolveTransition::draw() +void magDissolveTransition::end() { - slide->setOpacity(255 - (getNormalizedTime() * 255)); - ofLogVerbose("opacity") << slide->getId() << " " << slide->getOpacity(); + nextSlide->setOpacity(255); + slide->setOpacity(0); } diff --git a/example/src/magSlideTransition.h b/example/src/magSlideTransition.h index 896b267..13ba424 100644 --- a/example/src/magSlideTransition.h +++ b/example/src/magSlideTransition.h @@ -19,11 +19,12 @@ public: * Begins the transition. This must be called in order for the * transition to actually do anything! */ - void start(); + virtual void start(std::shared_ptr nextSlide); + virtual void end(){} virtual void loadSettings(ofParameterGroup &settings){} virtual void update(u_int64_t timeDelta); virtual void draw(){ - ofLogVerbose() << "transiwiton draw " << getNormalizedTime(); + ofLogNotice("magSlideTransition") << "transition draw - this should be overriden " << getNormalizedTime(); } /** @@ -44,40 +45,37 @@ public: return name; } + const shared_ptr &getNextSlide() const + { + return nextSlide; + } + + void setNextSlide(shared_ptr nextSlide) + { + magSlideTransition::nextSlide = nextSlide; + } + + bool isActive() const + { + return active; + } + ofEvent transitionCompleteEvent; protected: std::string name = "Void"; std::shared_ptr slide; std::shared_ptr nextSlide; + u_int64_t runningTime; u_int64_t duration; u_int64_t endTime; - bool isActive = false; - - friend class magSlideTransitionFactory; -}; + bool active = false; -class magFadeInTransition : public magSlideTransition -{ -public: - magFadeInTransition() - { - name = "FadeIn"; - } - void draw() override ; -}; - -class magFadeOutTransition : public magSlideTransition -{ -public: - magFadeOutTransition() - { - name = "FadeOut"; - } +protected: - void draw() override ; + friend class magSlideTransitionFactory; }; class magDissolveTransition : public magSlideTransition @@ -88,7 +86,10 @@ public: name = "Dissolve"; } + void start(std::shared_ptr nextSlide) override; + void draw() override; + void end() override; }; #endif From 1659f69b04b124a9eb7c16b23ef3fe79b168b506 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Mon, 4 Dec 2017 18:00:35 -0500 Subject: [PATCH 029/103] magSlideTransition documentation updates --- example/src/magSlideTransition.h | 52 ++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/example/src/magSlideTransition.h b/example/src/magSlideTransition.h index 13ba424..ecb491b 100644 --- a/example/src/magSlideTransition.h +++ b/example/src/magSlideTransition.h @@ -14,15 +14,51 @@ class magSlideTransitionFactory; class magSlideTransition { public: - magSlideTransition() {} /** - * Begins the transition. This must be called in order for the - * transition to actually do anything! + * Subclassing notes: Make sure to provide a value for name in your + * magSlideTransition subclass. + */ + magSlideTransition() { name = "Void"; } + /** + * Begins the transition. This needs to be called in order for the + * transition to do anything. + * @param nextSlide The subsequent slide in the slide show needs to be + * passed here. + * + * You can override this call to set any initial conditions to the transition, + * but make sure to call this method in your override. */ virtual void start(std::shared_ptr nextSlide); + + /** + * Called automatically when the transition is complete. Useful to set + * end states for the parameters of the slide and nextSlide. Default implementation + * does nothing. + */ virtual void end(){} + + /** + * NOTE: The transition settings system is not yet implemented. + * Called when the transition is created. Loads settings for magSlideTransition + * subclasses. The default implementation does nothing. + * @param settings ofParameterGroup with settings for your custom magSlideTransition + * subclass. + */ virtual void loadSettings(ofParameterGroup &settings){} + + /** + * Updates the transition. + * @param timeDelta The elapsed time (in ms.) between the last call to update() and + * this one (i.e. the frame time). + * + * If you need to override update, make sure to call this implementation + * in your subclass. + */ virtual void update(u_int64_t timeDelta); + + /** + * Draws the transition. Default implementation does nothing. + */ virtual void draw(){ ofLogNotice("magSlideTransition") << "transition draw - this should be overriden " << getNormalizedTime(); } @@ -50,20 +86,18 @@ public: return nextSlide; } - void setNextSlide(shared_ptr nextSlide) - { - magSlideTransition::nextSlide = nextSlide; - } - bool isActive() const { return active; } + /** + * Sender is a raw pointer to this magSlideTransition + */ ofEvent transitionCompleteEvent; protected: - std::string name = "Void"; + std::string name; std::shared_ptr slide; std::shared_ptr nextSlide; From 2f9dd70d4378242883865504c95c387f057fd9f7 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Mon, 4 Dec 2017 20:16:27 -0500 Subject: [PATCH 030/103] Moving magSlideShow to ofxPiMapper/Sources --- {example/src => src/Sources}/magSlide.cpp | 0 {example/src => src/Sources}/magSlide.h | 0 {example/src => src/Sources}/magSlideShowSource.cpp | 0 {example/src => src/Sources}/magSlideShowSource.h | 0 {example/src => src/Sources}/magSlideTransition.cpp | 0 {example/src => src/Sources}/magSlideTransition.h | 0 {example/src => src/Sources}/magSlideTransitionFactory.cpp | 0 {example/src => src/Sources}/magSlideTransitionFactory.h | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename {example/src => src/Sources}/magSlide.cpp (100%) rename {example/src => src/Sources}/magSlide.h (100%) rename {example/src => src/Sources}/magSlideShowSource.cpp (100%) rename {example/src => src/Sources}/magSlideShowSource.h (100%) rename {example/src => src/Sources}/magSlideTransition.cpp (100%) rename {example/src => src/Sources}/magSlideTransition.h (100%) rename {example/src => src/Sources}/magSlideTransitionFactory.cpp (100%) rename {example/src => src/Sources}/magSlideTransitionFactory.h (100%) diff --git a/example/src/magSlide.cpp b/src/Sources/magSlide.cpp similarity index 100% rename from example/src/magSlide.cpp rename to src/Sources/magSlide.cpp diff --git a/example/src/magSlide.h b/src/Sources/magSlide.h similarity index 100% rename from example/src/magSlide.h rename to src/Sources/magSlide.h diff --git a/example/src/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp similarity index 100% rename from example/src/magSlideShowSource.cpp rename to src/Sources/magSlideShowSource.cpp diff --git a/example/src/magSlideShowSource.h b/src/Sources/magSlideShowSource.h similarity index 100% rename from example/src/magSlideShowSource.h rename to src/Sources/magSlideShowSource.h diff --git a/example/src/magSlideTransition.cpp b/src/Sources/magSlideTransition.cpp similarity index 100% rename from example/src/magSlideTransition.cpp rename to src/Sources/magSlideTransition.cpp diff --git a/example/src/magSlideTransition.h b/src/Sources/magSlideTransition.h similarity index 100% rename from example/src/magSlideTransition.h rename to src/Sources/magSlideTransition.h diff --git a/example/src/magSlideTransitionFactory.cpp b/src/Sources/magSlideTransitionFactory.cpp similarity index 100% rename from example/src/magSlideTransitionFactory.cpp rename to src/Sources/magSlideTransitionFactory.cpp diff --git a/example/src/magSlideTransitionFactory.h b/src/Sources/magSlideTransitionFactory.h similarity index 100% rename from example/src/magSlideTransitionFactory.h rename to src/Sources/magSlideTransitionFactory.h From 7948ebd4352c12d0d2e21aa8ffee6b6751d723ff Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Mon, 4 Dec 2017 20:16:56 -0500 Subject: [PATCH 031/103] Updating example with slide show source --- example/bin/data/ofxpimapper.xml | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 05362c2..b9b1861 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -36,20 +36,20 @@ - 542.498229980 - 298.375427246 + 305.332824707 + 158.923416138 - 865.982421875 - 286.925292969 + 823.889770508 + 135.275909424 - 956.157958984 - 659.075439453 + 883.853393555 + 670.724243164 - 498.842285156 - 590.370300293 + 241.146575928 + 656.366699219 @@ -78,15 +78,4 @@ 1 - - 1920 - 1080 - 1 - - PING-PONG - - - - FitProportionally - From 4a03b564c21a0e4d1797e8e9b7c0e7cc81bd5cab Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 5 Dec 2017 11:59:02 -0500 Subject: [PATCH 032/103] Adding the right example xml file (oops!) --- example/bin/data/ofxpimapper.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index b9b1861..5d1937e 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -73,6 +73,17 @@ fbo Slide Show Source + + 1920 + 1080 + 1 + + PING-PONG + + + + FitProportionally + 1 From d81292101ee2012e930acd5399ec357bc32ef8d8 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 5 Dec 2017 16:48:16 -0500 Subject: [PATCH 033/103] Fix example XML file --- example/bin/data/ofxpimapper.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index b9b1861..553ca20 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -78,4 +78,15 @@ 1 + + 1920 + 1080 + 1 + + PING-PONG + + + + FitProportionally + From 03f39f4621e5b35d4c41e1cba9ce1177f63b133e Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 5 Dec 2017 11:59:02 -0500 Subject: [PATCH 034/103] Adding the right example xml file (oops!) --- example/bin/data/ofxpimapper.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 553ca20..46b5816 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -73,6 +73,17 @@ fbo Slide Show Source + + 1920 + 1080 + 1 + + PING-PONG + + + + FitProportionally + 1 From 5a58e8824dc928575971365b761f2137b3241924 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 5 Dec 2017 12:10:42 -0500 Subject: [PATCH 035/103] Again fixing example XML file --- example/bin/data/ofxpimapper.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 46b5816..553ca20 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -73,17 +73,6 @@ fbo Slide Show Source - - 1920 - 1080 - 1 - - PING-PONG - - - - FitProportionally - 1 From 1d2864befcfaf4ac5e760e6d2ac36a753b18c994 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 5 Dec 2017 19:14:22 -0500 Subject: [PATCH 036/103] DirectoryWatcher now notifies if file count has changed in a directory --- src/MediaServer/DirectoryWatcher.cpp | 45 +++++++++++++++++++++++----- src/MediaServer/DirectoryWatcher.h | 18 ++++++++++- src/MediaServer/MediaServer.cpp | 19 +++++++----- 3 files changed, 66 insertions(+), 16 deletions(-) diff --git a/src/MediaServer/DirectoryWatcher.cpp b/src/MediaServer/DirectoryWatcher.cpp index 3c86543..14f697d 100644 --- a/src/MediaServer/DirectoryWatcher.cpp +++ b/src/MediaServer/DirectoryWatcher.cpp @@ -4,8 +4,9 @@ namespace ofx { namespace piMapper { DirectoryWatcher::DirectoryWatcher(string path, int watcherMediaType){ + directoryPath = path; _mediaType = watcherMediaType; - + if(_mediaType == SourceType::SOURCE_TYPE_VIDEO){ _directory.allowExt("mp4"); _directory.allowExt("h264"); @@ -21,20 +22,27 @@ DirectoryWatcher::DirectoryWatcher(string path, int watcherMediaType){ ofLogFatalError("DirectoryWatcher::DirectoryWatcher", "Unkonwn media type"); exit(EXIT_FAILURE); } - - _directory.listDir(path); + + _directory.listDir(directoryPath); _directory.sort(); - + for(int i = 0; i < _directory.size(); ++i){ - _filePaths.push_back(path + _directory.getName(i)); - - ofFile file(path + _directory.getName(i)); + _filePaths.push_back(directoryPath + _directory.getName(i)); + + ofFile file(directoryPath + _directory.getName(i)); if(_mediaType == SourceType::SOURCE_TYPE_VIDEO){ file.copyTo("sources/videos/" + _directory.getName(i)); }else if(_mediaType == SourceType::SOURCE_TYPE_IMAGE){ file.copyTo("sources/images/" + _directory.getName(i)); } } + + dirSize = _directory.size(); +} + +DirectoryWatcher::~DirectoryWatcher() { + endWatch(); +// waitForThread(false); } vector & DirectoryWatcher::getFilePaths(){ @@ -45,5 +53,28 @@ int DirectoryWatcher::getMediaType(){ return _mediaType; } +void DirectoryWatcher::beginWatch(int intervalInMillis) { + watchInterval = intervalInMillis; + startThread(); +} + +void DirectoryWatcher::endWatch() { + stopThread(); +} + +void DirectoryWatcher::threadedFunction() { + + while (isThreadRunning()) { + + int newSize = _directory.listDir(); + if (newSize != dirSize) { + ofLogVerbose("DirectoryWatcher") << "Directory changed"; + ofNotifyEvent(directoryFileCountChangedEvent, this); + } + + sleep(watchInterval); + } +} + } // namespace piMapper } // namespace ofx diff --git a/src/MediaServer/DirectoryWatcher.h b/src/MediaServer/DirectoryWatcher.h index 717bbde..bcd3879 100644 --- a/src/MediaServer/DirectoryWatcher.h +++ b/src/MediaServer/DirectoryWatcher.h @@ -6,16 +6,32 @@ namespace ofx { namespace piMapper { -class DirectoryWatcher { +class DirectoryWatcher : public ofThread { public: DirectoryWatcher(string path, int watcherMediaType); + virtual ~DirectoryWatcher(); vector & getFilePaths(); int getMediaType(); + void beginWatch(int intervalInMillis = 5000); + void endWatch(); + void threadedFunction(); + + /** + * Triggered when the file count of a directory increases + * or decreases. + * + * Sender is a pointer to this DirectoryWatcher + */ + ofEvent directoryFileCountChangedEvent; private: ofDirectory _directory; vector _filePaths; + std::string directoryPath; int _mediaType; + + int dirSize; + long watchInterval; // in millis. }; } // namespace piMapper diff --git a/src/MediaServer/MediaServer.cpp b/src/MediaServer/MediaServer.cpp index 78d1af8..41b1747 100644 --- a/src/MediaServer/MediaServer.cpp +++ b/src/MediaServer/MediaServer.cpp @@ -19,14 +19,17 @@ MediaServer::MediaServer(): { // By initialising all above we also copy files from external media // to the ofxPiMapper storage. - - imageWatcher = DirectoryWatcher( - ofToDataPath(DEFAULT_IMAGES_DIR, true), - SourceType::SOURCE_TYPE_IMAGE); - - videoWatcher = DirectoryWatcher( - ofToDataPath(DEFAULT_VIDEOS_DIR, true), - SourceType::SOURCE_TYPE_VIDEO); + imageWatcher.beginWatch(); + + +// imageWatcher = DirectoryWatcher( +// ofToDataPath(DEFAULT_IMAGES_DIR, true), +// SourceType::SOURCE_TYPE_IMAGE); +// imageWatcher.beginWatch(); +// +// videoWatcher = DirectoryWatcher( +// ofToDataPath(DEFAULT_VIDEOS_DIR, true), +// SourceType::SOURCE_TYPE_VIDEO); } void MediaServer::setup(){ From 272e0eb409fef27cd785160b03b578c7625c67df Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 5 Dec 2017 19:17:31 -0500 Subject: [PATCH 037/103] update gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 3b590fa..8cd07bf 100644 --- a/.gitignore +++ b/.gitignore @@ -113,3 +113,9 @@ example/\.idea/ example/cmake-build-release/ example/example\.xcodeproj/xcshareddata/xcschemes/ + +.idea/ + +cmake-build-debug/ + +CMakeLists\.txt From e231300b84b556bfbac081bf0dcddaa26a45c6af Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Tue, 5 Dec 2017 22:32:50 -0500 Subject: [PATCH 038/103] DirectoryWatcher: file added and file removed events --- src/MediaServer/DirectoryWatcher.cpp | 10 ++++++++-- src/MediaServer/DirectoryWatcher.h | 14 +++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/MediaServer/DirectoryWatcher.cpp b/src/MediaServer/DirectoryWatcher.cpp index 14f697d..104abcf 100644 --- a/src/MediaServer/DirectoryWatcher.cpp +++ b/src/MediaServer/DirectoryWatcher.cpp @@ -67,11 +67,17 @@ void DirectoryWatcher::threadedFunction() { while (isThreadRunning()) { int newSize = _directory.listDir(); - if (newSize != dirSize) { + if (newSize > dirSize) { ofLogVerbose("DirectoryWatcher") << "Directory changed"; - ofNotifyEvent(directoryFileCountChangedEvent, this); + dirSize = newSize; + ofNotifyEvent(directoryFileAddedEvent, this); + } else if (newSize < dirSize) { + dirSize = newSize; + ofNotifyEvent(directoryFileRemovedEvent, this); } + + sleep(watchInterval); } } diff --git a/src/MediaServer/DirectoryWatcher.h b/src/MediaServer/DirectoryWatcher.h index bcd3879..8ef7ede 100644 --- a/src/MediaServer/DirectoryWatcher.h +++ b/src/MediaServer/DirectoryWatcher.h @@ -10,7 +10,7 @@ class DirectoryWatcher : public ofThread { public: DirectoryWatcher(string path, int watcherMediaType); virtual ~DirectoryWatcher(); - vector & getFilePaths(); + vector &getFilePaths(); int getMediaType(); void beginWatch(int intervalInMillis = 5000); @@ -18,12 +18,16 @@ class DirectoryWatcher : public ofThread { void threadedFunction(); /** - * Triggered when the file count of a directory increases - * or decreases. - * + * Notifies when files are added to this directory. * Sender is a pointer to this DirectoryWatcher */ - ofEvent directoryFileCountChangedEvent; + ofEvent directoryFileAddedEvent; + /** + * Notifies when files are removed from this directory. + * Sender is a pointer to this DirectoryWatcher + */ + ofEvent directoryFileRemovedEvent; + private: ofDirectory _directory; vector _filePaths; From b6a47bbb286593103fc9460edae62a8253f6db5a Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Wed, 6 Dec 2017 15:03:29 -0500 Subject: [PATCH 039/103] Added a DirectoryWatcher to magSlideShowSource --- src/Sources/magSlideShowSource.cpp | 94 ++++++---- src/Sources/magSlideShowSource.h | 267 +++++++++++++++-------------- 2 files changed, 193 insertions(+), 168 deletions(-) diff --git a/src/Sources/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp index 1856f6a..437047f 100644 --- a/src/Sources/magSlideShowSource.cpp +++ b/src/Sources/magSlideShowSource.cpp @@ -10,15 +10,20 @@ #include "SettingsLoader.h" #include "magSlideTransitionFactory.h" -magSlideShowSource::magSlideShowSource() -{ +magSlideShowSource::magSlideShowSource() { name = "Slide Show Source"; currentSlideIndex = 0; isPlaying = false; + directoryWatcher = 0; + doInit = false; } -bool magSlideShowSource::initialize(magSlideShowSource::Settings settings) -{ +magSlideShowSource::~magSlideShowSource() { + directoryWatcher->endWatch(); + delete directoryWatcher; +} + +bool magSlideShowSource::initialize(magSlideShowSource::Settings settings) { this->settings = settings; bool success = true; @@ -45,23 +50,44 @@ bool magSlideShowSource::initialize(magSlideShowSource::Settings settings) << settings.slidesFolderPath; return success; } + { + if (directoryWatcher == 0) + { + + using namespace ofx::piMapper; + directoryWatcher = new DirectoryWatcher(settings.slidesFolderPath, + SourceTypeHelper::GetSourceTypeHelperEnum( + SOURCE_TYPE_NAME_IMAGE)); + ofAddListener(directoryWatcher->directoryFileAddedEvent, this, &magSlideShowSource::fileAddedListener); + ofAddListener(directoryWatcher->directoryFileRemovedEvent, this, + &magSlideShowSource::fileRemovedListener); + directoryWatcher->beginWatch(); + } + } } else if (!settings.slideshowFilePath.empty()) { - // try to load slide show from xml success = false; } + return success; } -void magSlideShowSource::setup() -{ +void magSlideShowSource::setup() { ofx::piMapper::FboSource::setup(); } -void magSlideShowSource::update() -{ +void magSlideShowSource::update() { + + // Perform re-initialization if the DirectoryWatcher + // detects file changes: + if (doInit) + { + initialize(settings); + doInit = false; + } + if (!isPlaying) return; auto nowTime = ofGetElapsedTimeMillis(); @@ -96,8 +122,7 @@ void magSlideShowSource::update() } } -void magSlideShowSource::draw() -{ +void magSlideShowSource::draw() { ofBackground(0, 0); ofPushMatrix(); ofPushStyle(); @@ -115,8 +140,7 @@ void magSlideShowSource::draw() ofDisableAlphaBlending(); } -bool magSlideShowSource::createFromFolderContents(std::string path) -{ +bool magSlideShowSource::createFromFolderContents(std::string path) { ofDirectory dir = ofDirectory(path); slides.clear(); @@ -194,8 +218,7 @@ bool magSlideShowSource::createFromFolderContents(std::string path) } } -bool magSlideShowSource::loadFromXml() -{ +bool magSlideShowSource::loadFromXml() { auto *loader = ofx::piMapper::SettingsLoader::instance(); auto xml = ofxXmlSettings(); Settings settings; @@ -270,8 +293,7 @@ bool magSlideShowSource::loadFromXml() return true; } -void magSlideShowSource::addSlide(std::shared_ptr slide) -{ +void magSlideShowSource::addSlide(std::shared_ptr slide) { // ofLogVerbose("addSlide") << slide->getId(); slides.insert(slides.begin(), slide); auto rOption = slide->getResizeOption(); @@ -337,9 +359,9 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) // bogusParamGroup, // slide->buildInDuration); slide->transition = tf->createTransition(settings.transitionName, - slide, - bogusParamGroup, - slide->buildOutDuration); + slide, + bogusParamGroup, + slide->buildOutDuration); } //// void method(const void * sender, ArgumentsType &args) ofAddListener(slide->slideStateChangedEvent, this, &magSlideShowSource::slideStateChanged); @@ -347,8 +369,7 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) } -void magSlideShowSource::play() -{ +void magSlideShowSource::play() { if (!isPlaying) { runningTime = 0; @@ -359,13 +380,11 @@ void magSlideShowSource::play() } } -void magSlideShowSource::pause() -{ +void magSlideShowSource::pause() { isPlaying = false; } -void magSlideShowSource::playNextSlide() -{ +void magSlideShowSource::playNextSlide() { //TODO // I should check here to see if there are less than two slides. // If so, we should probably return @@ -450,27 +469,23 @@ void magSlideShowSource::playNextSlide() enqueueSlide(slides[currentSlideIndex], ofGetElapsedTimeMillis()); } -void magSlideShowSource::playPrevSlide() -{ +void magSlideShowSource::playPrevSlide() { currentSlideIndex -= (direction*2); playNextSlide(); } -void magSlideShowSource::playSlide(int slideIndex) -{ +void magSlideShowSource::playSlide(int slideIndex) { currentSlideIndex = slideIndex-direction; playNextSlide(); } -void magSlideShowSource::enqueueSlide(std::shared_ptr slide, u_int64_t startTime) -{ +void magSlideShowSource::enqueueSlide(std::shared_ptr slide, u_int64_t startTime) { // ofLogVerbose() << "Enqueuing slide " << currentSlideIndex << " slide id: " << slide->getId(); slide->start(startTime); activeSlides.insert(activeSlides.begin(), slide); } -void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args) -{ +void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args) { magSlide *slide = (magSlide *) sender; // ofLogVerbose("slideStateChanged") << "Slide id: " << slide->getId() << " Slide state: " @@ -488,11 +503,18 @@ void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args } -void magSlideShowSource::slideComplete(const void *sender, ofEventArgs &args) -{ +void magSlideShowSource::slideComplete(const void *sender, ofEventArgs &args) { magSlide *slide = (magSlide *) sender; // ofLogVerbose() << "Slide Complete. id: " << slide->getId(); slide->isComplete = true; } +void magSlideShowSource::fileAddedListener(const void *sender) { + doInit = true; +} + +void magSlideShowSource::fileRemovedListener(const void *sender) { + doInit = true; +} + diff --git a/src/Sources/magSlideShowSource.h b/src/Sources/magSlideShowSource.h index 5284b23..3f58a2f 100644 --- a/src/Sources/magSlideShowSource.h +++ b/src/Sources/magSlideShowSource.h @@ -9,152 +9,155 @@ #include "FboSource.h" #include "magSlide.h" +#include "DirectoryWatcher.h" class magSlide; -class magSlideShowSource : public ofx::piMapper::FboSource -{ -public: - magSlideShowSource(); - struct Settings; // forward declaration - bool initialize(magSlideShowSource::Settings settings); - void setup() override; - void update() override; - void draw() override; - - /** - * Removes all slides and then attempts to create a new slide show - * based on the contents of the ofDirectory specified. The files may - * be images or videos, which will be transformed into the appropriate slide type. - * Any other file type in the directory is ignored (including other directories). - * The slide order is alphabetical according to filename. - * - * @param dir The ofDirectory to use as a source for a slide show. - * @return true if at least one slide was created. false is returned - * otherwise. Check the console for the specific error. - */ - bool createFromFolderContents(std::string path); - - bool loadFromXml(); - void addSlide(std::shared_ptr slide); - void play(); - void pause(); - void playNextSlide(); - void playPrevSlide(); - void playSlide(int slideIndex); - - enum LoopType : int - { - NONE = 0, - NORMAL, - PING_PONG - }; - - struct Settings - { - /** - * The pixel width of the FBO. - */ - float width = 1280; - - /** - * The pixel height of the FBO. - */ - float height = 720; - /** - * An optional default slide duration, in seconds. - * If a slide specifies a duration this value is ignored. - */ - float slideDuration = 5; - - /** - * An optional default transition for the slide show. - */ - std::string transitionName = ""; - - /** - * An optional default transition duration. If no transition - * is specified, this value is ignored; - */ - float transitionDuration = 0; - - /** - * If specified, all applicable files in the folder will - * be used as slides in the slide show. They will be ordered - * alphabetically according to their file names. - * - * If path is relative, the root will likely be the Data folder. - */ - std::string slidesFolderPath = "sources/images"; - - /** - * If specified, - */ - std::string slideshowFilePath; - - - /** - * Loop type for the slide show. See @code LoopType for options. - * The default is @code LoopType:None. - */ - LoopType loopType = LoopType::NONE; - - /** - * The number of loops to perform, if the loopType is not NONE. - * If the value is 0 or less than 0, the slide show loops forever. - */ - int numLoops = 0; +class magSlideShowSource : public ofx::piMapper::FboSource { + public: + magSlideShowSource(); + struct Settings; // forward declaration + bool initialize(magSlideShowSource::Settings settings); + void setup() override; + void update() override; + void draw() override; /** - * The resizing option for the slide show. The default is FitProportionally. - * If a slide already has a resizing option applied, that option will be - * respected and this resizeOption will not be used. + * Removes all slides and then attempts to create a new slide show + * based on the contents of the ofDirectory specified. The files may + * be images or videos, which will be transformed into the appropriate slide type. + * Any other file type in the directory is ignored (including other directories). + * The slide order is alphabetical according to filename. + * + * @param dir The ofDirectory to use as a source for a slide show. + * @return true if at least one slide was created. false is returned + * otherwise. Check the console for the specific error. */ - magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::FitProportionally; - }; + bool createFromFolderContents(std::string path); + + bool loadFromXml(); + void addSlide(std::shared_ptr slide); + void play(); + void pause(); + void playNextSlide(); + void playPrevSlide(); + void playSlide(int slideIndex); + + enum LoopType : int { + NONE = 0, + NORMAL, + PING_PONG + }; + + struct Settings { + /** + * The pixel width of the FBO. + */ + float width = 1280; + + /** + * The pixel height of the FBO. + */ + float height = 720; + /** + * An optional default slide duration, in seconds. + * If a slide specifies a duration this value is ignored. + */ + float slideDuration = 5; + + /** + * An optional default transition for the slide show. + */ + std::string transitionName = ""; + + /** + * An optional default transition duration. If no transition + * is specified, this value is ignored; + */ + float transitionDuration = 0; + + /** + * If specified, all applicable files in the folder will + * be used as slides in the slide show. They will be ordered + * alphabetically according to their file names. + * + * If path is relative, the root will likely be the Data folder. + */ + std::string slidesFolderPath = "sources/images"; + + /** + * If specified, + */ + std::string slideshowFilePath; + + + /** + * Loop type for the slide show. See @code LoopType for options. + * The default is @code LoopType:None. + */ + LoopType loopType = LoopType::NONE; + + /** + * The number of loops to perform, if the loopType is not NONE. + * If the value is 0 or less than 0, the slide show loops forever. + */ + int numLoops = 0; + + /** + * The resizing option for the slide show. The default is FitProportionally. + * If a slide already has a resizing option applied, that option will be + * respected and this resizeOption will not be used. + */ + magSlide::ResizeOptions resizeOption = magSlide::ResizeOptions::FitProportionally; + }; + + //////////////////////////////////////////// + //// Event Listeners + //////////////////////////////////////////// + void slideStateChanged(const void *sender, ofEventArgs &args); + void slideComplete(const void *sender, ofEventArgs &args); + virtual ~magSlideShowSource(); - //////////////////////////////////////////// - //// Event Listeners - //////////////////////////////////////////// - void slideStateChanged(const void* sender, ofEventArgs &args); - void slideComplete(const void* sender, ofEventArgs &args); - - /** - * Fires when the slide show is done, which happens when - * the loop count is equal to Settings::numLoops, or when - * the last slide is played when @code LoopType::NONE is specified. - * Sender is this slide show. - */ - ofEvent slideshowCompleteEvent; + /** + * Fires when the slide show is done, which happens when + * the loop count is equal to Settings::numLoops, or when + * the last slide is played when @code LoopType::NONE is specified. + * Sender is this slide show. + */ + ofEvent slideshowCompleteEvent; - /** - * Fires when the slide show reaches the last slide - * and will perform a loop in the next call. - * Sender is this slide show. - */ - ofEvent slideshowWillLoopEvent; + /** + * Fires when the slide show reaches the last slide + * and will perform a loop in the next call. + * Sender is this slide show. + */ + ofEvent slideshowWillLoopEvent; -protected: - Settings settings; - std::vector> slides; + protected: + Settings settings; + std::vector> slides; -private: + private: // std::shared_ptr currentSlide; - std::vector> activeSlides; - void enqueueSlide(std::shared_ptr slide, u_int64_t startTime); - - u_int64_t lastTime; - u_int64_t deltaTime; - u_int64_t runningTime; - - bool isInitialized = false; - bool isPlaying = false; - int currentSlideIndex = 0; - int direction = 1; - int loopCount = 0; + std::vector> activeSlides; + void enqueueSlide(std::shared_ptr slide, u_int64_t startTime); + + u_int64_t lastTime; + u_int64_t deltaTime; + u_int64_t runningTime; + + bool isInitialized = false; + bool isPlaying = false; + int currentSlideIndex = 0; + int direction = 1; + int loopCount = 0; + ofx::piMapper::DirectoryWatcher* directoryWatcher; + void fileAddedListener(const void *sender); + void fileRemovedListener(const void *sender); + bool doInit; }; From dad64e384aef4e41b1a9c16f3dba3517ff3c1490 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Wed, 6 Dec 2017 18:00:11 -0500 Subject: [PATCH 040/103] magSlideShow loads its own xml file. Also added path so that if an xml file is not specified for the slide show, there are useful defaults that can still create one. Updated the example app to reflect these changes. Updated the example's xml file. Added an xml file for the slide show in the example. --- example/bin/data/magslideshow_settings.xml | 11 +++++++ example/bin/data/ofxpimapper.xml | 22 -------------- example/src/ofApp.cpp | 14 --------- src/Sources/magSlideShowSource.cpp | 35 ++++++++++++---------- src/Sources/magSlideShowSource.h | 17 ++++++----- 5 files changed, 41 insertions(+), 58 deletions(-) create mode 100644 example/bin/data/magslideshow_settings.xml diff --git a/example/bin/data/magslideshow_settings.xml b/example/bin/data/magslideshow_settings.xml new file mode 100644 index 0000000..e16b25b --- /dev/null +++ b/example/bin/data/magslideshow_settings.xml @@ -0,0 +1,11 @@ + + 1920 + 1080 + 1 + + PING-PONG + + + + FitProportionally + \ No newline at end of file diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 46b5816..b9b1861 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -73,31 +73,9 @@ fbo Slide Show Source - - 1920 - 1080 - 1 - - PING-PONG - - - - FitProportionally - 1 - - 1920 - 1080 - 1 - - PING-PONG - - - - FitProportionally - diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index e691269..d4d9395 100644 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -18,26 +18,12 @@ void ofApp::setup(){ // Create the slide show source. slideShowSource = new magSlideShowSource(); - // Create the settings struct for the slide show. - - // Initialize the slide show with our settings. - // If it fails, initialize from default settings - - // Register our sources: piMapper.registerFboSource(crossSource); piMapper.registerFboSource(customSource); piMapper.registerFboSource(slideShowSource); piMapper.setup(); - // Slide show needs to be loaded after piMapper is set up: - if (!slideShowSource->loadFromXml()) - { - ofLogNotice("setup") << "loading magSlideShowSource XML settings failed. Initializing from default values"; - magSlideShowSource::Settings sets; - slideShowSource->initialize(sets); - } - // The info layer is hidden by default, press to toggle // piMapper.showInfo(); diff --git a/src/Sources/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp index 437047f..a3367a1 100644 --- a/src/Sources/magSlideShowSource.cpp +++ b/src/Sources/magSlideShowSource.cpp @@ -10,12 +10,20 @@ #include "SettingsLoader.h" #include "magSlideTransitionFactory.h" +const std::string magSlideShowSource::SettingsFileName = "magslideshow_settings.xml"; + magSlideShowSource::magSlideShowSource() { name = "Slide Show Source"; currentSlideIndex = 0; isPlaying = false; directoryWatcher = 0; doInit = false; + if (!loadFromXml(SettingsFileName)) + { + ofLogError("magSlideShowSource") << "Could not find slide show settings file " << SettingsFileName; + Settings sets; + initialize(sets); + } } magSlideShowSource::~magSlideShowSource() { @@ -218,21 +226,20 @@ bool magSlideShowSource::createFromFolderContents(std::string path) { } } -bool magSlideShowSource::loadFromXml() { - auto *loader = ofx::piMapper::SettingsLoader::instance(); +bool magSlideShowSource::loadFromXml(std::string path) { auto xml = ofxXmlSettings(); Settings settings; - if (!xml.load(loader->getLastLoadedFilename())) + if (!xml.load(path)) { - ofLogError("magSlideShowSource") << "Could not load settings file " << loader->getLastLoadedFilename(); + ofLogError("magSlideShowSource") << "Could not load settings file " << path; return false; } - xml.pushTag("surfaces"); +// xml.pushTag("surfaces"); if (!xml.pushTag("magSlideShow")) { - ofLogError("magSlideShowSource") << "Slide show settings not found in " << loader->getLastLoadedFilename(); + ofLogError("magSlideShowSource") << "Slide show settings not found in " << path; return false; } @@ -349,20 +356,18 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) { // Add transitions: - if (!settings.transitionName.empty()) - { - static ofParameterGroup bogusParamGroup; // This is temporary so that things compile + static ofParameterGroup bogusParamGroup; // This is temporary so that things compile - auto tf = magSlideTransitionFactory::instance(); + auto tf = magSlideTransitionFactory::instance(); // slide->buildIn = tf->createTransition(settings.transitionName, // slide, // bogusParamGroup, // slide->buildInDuration); - slide->transition = tf->createTransition(settings.transitionName, - slide, - bogusParamGroup, - slide->buildOutDuration); - } + slide->transition = tf->createTransition(settings.transitionName, + slide, + bogusParamGroup, + slide->buildOutDuration); + //// void method(const void * sender, ArgumentsType &args) ofAddListener(slide->slideStateChangedEvent, this, &magSlideShowSource::slideStateChanged); ofAddListener(slide->slideCompleteEvent, this, &magSlideShowSource::slideComplete); diff --git a/src/Sources/magSlideShowSource.h b/src/Sources/magSlideShowSource.h index 3f58a2f..e82b158 100644 --- a/src/Sources/magSlideShowSource.h +++ b/src/Sources/magSlideShowSource.h @@ -17,6 +17,11 @@ class magSlide; class magSlideShowSource : public ofx::piMapper::FboSource { public: magSlideShowSource(); + + /** + * Default settings file name. + */ + static const std::string SettingsFileName; struct Settings; // forward declaration bool initialize(magSlideShowSource::Settings settings); void setup() override; @@ -35,8 +40,7 @@ class magSlideShowSource : public ofx::piMapper::FboSource { * otherwise. Check the console for the specific error. */ bool createFromFolderContents(std::string path); - - bool loadFromXml(); + bool loadFromXml(std::string path); void addSlide(std::shared_ptr slide); void play(); void pause(); @@ -67,15 +71,14 @@ class magSlideShowSource : public ofx::piMapper::FboSource { float slideDuration = 5; /** - * An optional default transition for the slide show. + * The default transition for the slide show. */ - std::string transitionName = ""; + std::string transitionName = "Dissolve"; /** - * An optional default transition duration. If no transition - * is specified, this value is ignored; + * Default transition duration. */ - float transitionDuration = 0; + float transitionDuration = 1; /** * If specified, all applicable files in the folder will From b1c87be7dbba4d3093f070459d8c334961d36395 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 7 Dec 2017 10:58:08 -0500 Subject: [PATCH 041/103] Fixing addons.make for RPi --- example/addons.make | 1 + 1 file changed, 1 insertion(+) diff --git a/example/addons.make b/example/addons.make index e72d2dd..963941c 100644 --- a/example/addons.make +++ b/example/addons.make @@ -1,3 +1,4 @@ ofxGui ofxPiMapper ofxXmlSettings +ofxOMXPlayer From 08976e40477b46e90176f46a71528ee0dbeefff2 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 7 Dec 2017 14:46:57 -0500 Subject: [PATCH 042/103] Fixed a logic error in the way slides were being queued. The activeSlides vector was being modified by enqueueSlide while it was being iterated in update(). enqueueSlide now raises a flag, and it is update() that now modifies the activeSlides vector. --- src/Sources/magSlideShowSource.cpp | 24 ++++++++++++++---------- src/Sources/magSlideShowSource.h | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/Sources/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp index a3367a1..f88babf 100644 --- a/src/Sources/magSlideShowSource.cpp +++ b/src/Sources/magSlideShowSource.cpp @@ -102,14 +102,23 @@ void magSlideShowSource::update() { deltaTime = nowTime-lastTime; runningTime += deltaTime; lastTime = nowTime; - -// ofLogVerbose() << "Delta: " << deltaTime << " running: " << runningTime; - + for (auto &slide : activeSlides) { slide->update(deltaTime); } + // Queue the next slide if it is time + if (doPlayNextSlide) + { + playNextSlide(); + if (activeSlides.size() > 1) + { + activeSlides[1]->transition->start(activeSlides[0]); + } + doPlayNextSlide = false; + } + // Erase any complete slides: auto iter = activeSlides.begin(); for (; iter < activeSlides.end(); iter++) @@ -497,13 +506,8 @@ void magSlideShowSource::slideStateChanged(const void *sender, ofEventArgs &args // << slide->getSlideStateName(); if (slide->getSlideState() == magSlide::SlideState::BuildOut) { -// slide->transition->start(); -// ofLogVerbose() << "BuildOut " << slide->getId(); - playNextSlide(); - if (activeSlides.size() > 1) - { - activeSlides[1]->transition->start(activeSlides[0]); - } + // Flag that we need to load the next slide: + doPlayNextSlide = true; } } diff --git a/src/Sources/magSlideShowSource.h b/src/Sources/magSlideShowSource.h index e82b158..60d541d 100644 --- a/src/Sources/magSlideShowSource.h +++ b/src/Sources/magSlideShowSource.h @@ -161,6 +161,7 @@ class magSlideShowSource : public ofx::piMapper::FboSource { void fileAddedListener(const void *sender); void fileRemovedListener(const void *sender); bool doInit; + bool doPlayNextSlide = false; }; From 177d7636b106197f76fcb1cbb2992b1104fd48ec Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 7 Dec 2017 23:21:51 -0500 Subject: [PATCH 043/103] Add xml loading features --- src/Sources/magSlideShowSource.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Sources/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp index f88babf..e3d6a74 100644 --- a/src/Sources/magSlideShowSource.cpp +++ b/src/Sources/magSlideShowSource.cpp @@ -102,7 +102,7 @@ void magSlideShowSource::update() { deltaTime = nowTime-lastTime; runningTime += deltaTime; lastTime = nowTime; - + for (auto &slide : activeSlides) { slide->update(deltaTime); @@ -279,6 +279,13 @@ bool magSlideShowSource::loadFromXml(std::string path) { xml.popTag(); } + if (xml.pushTag("Transition")) + { + settings.transitionName = xml.getValue("Type", settings.transitionName); + settings.transitionDuration = xml.getValue("Duration", settings.transitionDuration); + xml.popTag(); + } + // Default resize options: auto ropts = xml.getValue("ResizeOption", ""); if (ropts == "NoResize") @@ -302,10 +309,7 @@ bool magSlideShowSource::loadFromXml(std::string path) { settings.resizeOption = magSlide::FillProportionally; } - settings.transitionName = "Dissolve"; - settings.transitionDuration = 0.5; initialize(settings); - return true; } From e2ba47de0b0f0576433515a473ea2e42310e5afa Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 7 Dec 2017 23:22:31 -0500 Subject: [PATCH 044/103] Fixes transition length bug --- src/Sources/magSlide.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Sources/magSlide.cpp b/src/Sources/magSlide.cpp index 1e50653..c334cbe 100644 --- a/src/Sources/magSlide.cpp +++ b/src/Sources/magSlide.cpp @@ -116,14 +116,9 @@ void magSlide::start(u_int64_t startTime) { this->startTime = startTime; runningTime = 0; - endTime = duration + buildOutDuration; - buildOutStartTime = endTime - buildOutDuration; + endTime = duration + (buildOutDuration*2); // *2 because we take into account transition in and out + buildOutStartTime = duration + buildOutDuration; slideState = magSlide::SlideState::Normal; -// if (buildIn != nullptr) -// { -// activeTransition = buildIn; -// activeTransition->start(); -// } position.set(0, 0); opacity = 255; isComplete = false; From f0f46be406cdfce25b3380148230a1e829747b3e Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 7 Dec 2017 23:22:55 -0500 Subject: [PATCH 045/103] Update example magslideshow_settings.xml file --- example/bin/data/magslideshow_settings.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/example/bin/data/magslideshow_settings.xml b/example/bin/data/magslideshow_settings.xml index e16b25b..58c00da 100644 --- a/example/bin/data/magslideshow_settings.xml +++ b/example/bin/data/magslideshow_settings.xml @@ -1,11 +1,15 @@ 1920 1080 - 1 + 2 PING-PONG + 0 - + + Dissolve + 2 + FitProportionally - \ No newline at end of file + From d684992386013ffe1ab200016956f27f36955b8a Mon Sep 17 00:00:00 2001 From: magdesign Date: Sun, 10 Dec 2017 12:23:57 +0100 Subject: [PATCH 046/103] Update README.md --- README.md | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 2b3f6e2..115133f 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,28 @@ -# This fork is made to integrate some important functions into PiMapper (RPi/Arm version only). -### 1. Slide show function (play all images from a folder) -This should be selectable as an additional FBO source in PiMapper, looping all images in the /media/internal/images/* folder -Would be cool to adjust the speed with a simple flag, simple opacity transition welcome, but not necessary. Refresh state, so it checks if there are new images added during playback and play them as well. make all images fullscreen. -(if its not possible to handle various sizes as one, i will make an imagemagick script to convert all to 1920x1080) -### 2. Circular shapes for mapping (there are only square and tringle shapes so far) -Circular mapping shape (if possible with movable center distorsion) -### 3. Bezier handles +# This fork adds some important functions to PiMapper. +### 1. Slide show function (implemented in master branch): +PiMapper has now a slideshow and plays all images in a folder. There is an integrated directory watcher für updating new added images. Transition and slidetime can be edited via .xml file. + +### 2. Circular shapes for mapping (there are only square and tringle shapes so far): +Simple Circular mapping shape (more complex version with movable center might come later) + +### 3. Mapping converter: +Finalize the mapping converter, to convert exported .svg from Mapio and Madmapper to ofxPiMapper: https://github.com/magdesign/mapping-converter + +### 4. Bezier handles: Adding bezier handles to masks for better aligment: https://github.com/TsubokuLab/ofxBezierWarpManager -### 4. Play all videos from a folder +### 5. Play all videos from a folder: This should be a an additional FBO source in PiMapper, looping all videos in /media/internal/video/* -### 5. Grid Warp (meshing of square shapes) +### 6. Grid Warp (meshing of square shapes): check out this http://www.hv-a.com/lpmt/sssm.pdf on page: 10 https://forum.openframeworks.cc/t/grid-mesh-warping/12883 -### 6. SoftEdge +### 7. SoftEdge: Image overlay to making adges transparent, could be achieved with overlaing a png with a black gradient. -Finalize the mapping converter: https://github.com/magdesign/mapping-converter - -This will be an opensource project and freely available for everyone. -Targeting OF_0.9.x on RaspberryPi. -Each function will be rewarded to the coder from a pot sponsered by pocketvj.com. +## Targeting OF_0.9.x on RaspberryPi. +Each function will be rewarded to the coder from a pot sponsered by http://pocketvj.com +Keybindings are edited to match the CP of PocketVJ. # ofxPiMapper From e98cae857d1d6dd0ef904933687cb27c5117a0fc Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Thu, 14 Dec 2017 13:35:04 -0500 Subject: [PATCH 047/103] CircleSurface + changes in various files to support the new surface --- src/Application/SettingsLoader.cpp | 85 +++---- src/Gui/Widgets/TextureEditorWidget.cpp | 3 +- src/Surfaces/CircleSurface.cpp | 299 ++++++++++++++++++++++++ src/Surfaces/CircleSurface.h | 63 +++++ src/Surfaces/SurfaceFactory.cpp | 7 + src/Surfaces/SurfaceFactory.h | 2 + src/Surfaces/SurfaceType.h | 3 +- 7 files changed, 421 insertions(+), 41 deletions(-) create mode 100644 src/Surfaces/CircleSurface.cpp create mode 100644 src/Surfaces/CircleSurface.h diff --git a/src/Application/SettingsLoader.cpp b/src/Application/SettingsLoader.cpp index 9f8d5fd..8f294e6 100644 --- a/src/Application/SettingsLoader.cpp +++ b/src/Application/SettingsLoader.cpp @@ -20,46 +20,46 @@ bool SettingsLoader::load( SurfaceManager & surfaceManager, MediaServer & mediaServer, string fileName){ - + ofxXmlSettings * xmlSettings = new ofxXmlSettings(); string sourceType = ""; string sourceName = ""; - + BaseSource * source = 0; - + if(!xmlSettings->loadFile(fileName)){ ofLogWarning("SettingsLoader::load()") << "Could not load XML settings"; return false; } - + if(!xmlSettings->tagExists("surfaces")){ xmlSettings->addTag("surfaces"); } - + // Count tags. unsigned int numPresets = xmlSettings->getNumTags("surfaces"); cout << "numPresets: " << numPresets << endl; - + // Clear previous presets and surfaces first. surfaceManager.clearPresets(); - + // Loop through tags in the XML. for(unsigned int i = 0; i < numPresets; ++i){ - + xmlSettings->pushTag("surfaces", i); - + SurfaceStack * surfaces = surfaceManager.createPreset(); int numSurfaces = xmlSettings->getNumTags("surface"); for(int i = 0; i < numSurfaces; i++){ if(xmlSettings->tagExists("surface", i)){ - + SurfaceType type = SurfaceType::NONE; if(xmlSettings->attributeExists("surface", "type")){ type = static_cast( xmlSettings->getAttribute("surface", "type", 0, i)); } - + xmlSettings->pushTag("surface", i); // attempt to load surface source @@ -122,6 +122,13 @@ bool SettingsLoader::load( quadSurface->setSource(source); } surfaces->push_back(quadSurface); + }else if(type == SurfaceType::CIRCLE_SURFACE){ + QuadSurface * base = (QuadSurface*)getQuadSurface(xmlSettings); + CircleSurface * circleSurface = new CircleSurface(*base); + if(sourceName != "none" && source != 0){ + circleSurface->setSource(source); + } + surfaces->push_back(circleSurface); }else if(type == SurfaceType::GRID_WARP_SURFACE){ BaseSurface * gridWarpSurface = getGridWarpSurface(xmlSettings); if(sourceName != "none" && source != 0){ @@ -227,13 +234,13 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->addValue("gridRows", gws->getGridRows()); xmlSettings->popTag(); } - + xmlSettings->popTag(); // surface } xmlSettings->popTag(); // surfaces - + } // for - + xmlSettings->save(fileName); } @@ -245,17 +252,17 @@ bool SettingsLoader::create(string fileName){ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ vector vertices; - + if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); - + if(xmlSettings->tagExists("vertex", 0)){ xmlSettings->pushTag("vertex", 0); vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } - + if(xmlSettings->tagExists("vertex", 1)){ xmlSettings->pushTag("vertex", 1); vertices.push_back(ofVec2f(xmlSettings->getValue("x", 100.0f), @@ -277,14 +284,14 @@ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); - + if(xmlSettings->tagExists("texCoord", 0)){ xmlSettings->pushTag("texCoord", 0); texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } - + if(xmlSettings->tagExists("texCoord", 1)){ xmlSettings->pushTag("texCoord", 1); texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 1.0f), @@ -308,16 +315,16 @@ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ SurfaceType::TRIANGLE_SURFACE); triangleSurface->setVertices(vertices); triangleSurface->setTexCoords(texCoords); - + return triangleSurface; } BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ vector vertices; - + if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); - + if(xmlSettings->tagExists("vertex", 0)){ xmlSettings->pushTag("vertex", 0); vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), @@ -348,7 +355,7 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - + vector texCoords; if(xmlSettings->tagExists("texCoords")){ @@ -360,7 +367,7 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } - + if(xmlSettings->tagExists("texCoord", 1)){ xmlSettings->pushTag("texCoord", 1); texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 1.0f), @@ -384,14 +391,14 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // texCoords } - + // Create and add quad surface BaseSurface * quadSurface = SurfaceFactory::instance()->createSurface( SurfaceType::QUAD_SURFACE); quadSurface->setVertices(vertices); quadSurface->setTexCoords(texCoords); - + // Read properties // Only perspective warping for now bool perspectiveWarping = false; @@ -402,18 +409,18 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ } QuadSurface * qs = (QuadSurface *)quadSurface; qs->setPerspectiveWarping(perspectiveWarping); - + return quadSurface; } BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ vector vertices; - + if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); - + int iv = 0; - + while(xmlSettings->tagExists("vertex", iv)){ xmlSettings->pushTag("vertex", iv); vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), @@ -424,14 +431,14 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - + vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); int it = 0; - + while(xmlSettings->tagExists("texCoord", it)){ xmlSettings->pushTag("texCoord", it); texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), @@ -442,7 +449,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // texCoords } - + // Read properties // Only perspective warping for now int gridCols = 0; @@ -453,7 +460,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ gridRows = xmlSettings->getValue("gridRows", 0); xmlSettings->popTag(); // properties } - + // Create and add quad surface BaseSurface * gridWarpSurface = SurfaceFactory::instance()->createSurface( @@ -463,16 +470,16 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ ((GridWarpSurface *)gridWarpSurface)->createGridMesh(); gridWarpSurface->setVertices(vertices); gridWarpSurface->setTexCoords(texCoords); - + return gridWarpSurface; } BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ vector vertices; - + if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); - + unsigned int v = 0; while(xmlSettings->tagExists("vertex", v)){ xmlSettings->pushTag("vertex", v); @@ -489,7 +496,7 @@ BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); - + unsigned int t = 0; while(xmlSettings->tagExists("texCoord", t)){ xmlSettings->pushTag("texCoord", t); @@ -508,7 +515,7 @@ BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ SurfaceType::HEXAGON_SURFACE); hexagonSurface->setVertices(vertices); hexagonSurface->setTexCoords(texCoords); - + return hexagonSurface; } diff --git a/src/Gui/Widgets/TextureEditorWidget.cpp b/src/Gui/Widgets/TextureEditorWidget.cpp index 6ce0a88..617c0a6 100644 --- a/src/Gui/Widgets/TextureEditorWidget.cpp +++ b/src/Gui/Widgets/TextureEditorWidget.cpp @@ -149,7 +149,8 @@ void TextureEditorWidget::createJoints(){ if(surface->getType() == SurfaceType::TRIANGLE_SURFACE){ tc = texCoords; - }else if(surface->getType() == SurfaceType::QUAD_SURFACE){ + }else if(surface->getType() == SurfaceType::QUAD_SURFACE || + surface->getType() == SurfaceType::CIRCLE_SURFACE){ tc = texCoords; }else if(surface->getType() == SurfaceType::HEXAGON_SURFACE){ tc = texCoords; diff --git a/src/Surfaces/CircleSurface.cpp b/src/Surfaces/CircleSurface.cpp new file mode 100644 index 0000000..95af0b2 --- /dev/null +++ b/src/Surfaces/CircleSurface.cpp @@ -0,0 +1,299 @@ +// +// CircleSurface.cpp +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com + +#include "CircleSurface.h" + +namespace ofx { +namespace piMapper { + +CircleSurface::CircleSurface() : QuadSurface() { + setup(); +} + +CircleSurface::CircleSurface(QuadSurface &surface) { + setup(); + setVertices(surface.getVertices()); + setTexCoords(surface.getTexCoords()); + setPerspectiveWarping(surface.getPerspectiveWarping()); +} + +CircleSurface::~CircleSurface() {} + +void CircleSurface::setup() { + + setPerspectiveWarping(true); + QuadSurface::setup(); + + updateMask = true; +// maskIsReady = false; + + glESVertexShader = STRINGIFY( + attribute vec4 position; + attribute vec4 color; + attribute vec4 normal; + attribute vec2 texcoord; + + uniform mat4 modelViewMatrix; + uniform mat4 projectionMatrix; + uniform sampler2D maskTex; + + varying vec4 colorVarying; + varying vec2 texCoordVarying; + + void main() { + + //get our current vertex position so we can modify it + vec4 pos = projectionMatrix*modelViewMatrix*position; + + gl_Position = pos; + colorVarying = color; + texCoordVarying = texcoord; + } + ); + + glESFragmentShader = STRINGIFY( +//#ifdef GL_ES +// define default precision for float, vec, mat. + precision highp float; +//#endif + + uniform sampler2D tex0; + uniform sampler2D maskTex; + uniform vec4 globalColor; + + varying vec2 texCoordVarying; + + void main (void) + { + vec2 pos = texCoordVarying; + vec3 src = texture2D(tex0, pos).rgb; + float mask = texture2D(maskTex, pos).r; + gl_FragColor = vec4( src , mask); + } + ); + + gl2FragmentShader = "#version 120\n #extension GL_ARB_texture_rectangle : enable\n"; + gl2FragmentShader += STRINGIFY( + uniform sampler2DRect tex0; + uniform sampler2DRect maskTex; + + void main (void) { + vec2 pos = gl_TexCoord[0].st; + + vec3 src = texture2DRect(tex0, pos).rgb; + float mask = texture2DRect(maskTex, pos).r; + + gl_FragColor = vec4(src, mask); + } + ); + +#ifdef TARGET_OPENGLES + maskShader.setupShaderFromSource(GL_VERTEX_SHADER, glESVertexShader); + maskShader.setupShaderFromSource(GL_FRAGMENT_SHADER, glESFragmentShader); + maskShader.bindDefaults(); + maskShader.linkProgram(); +#else + if (ofIsGLProgrammableRenderer()) { + + } else { + maskShader.setupShaderFromSource(GL_FRAGMENT_SHADER, gl2FragmentShader); + maskShader.linkProgram(); + } +#endif + + ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 0.0f)); + ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 0.0f)); + ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 1.0f)); + ofVec2f t4 = ofVec2f(ofVec2f(0.0f, 1.0f)); + + defaultTexCoords.push_back(t1); + defaultTexCoords.push_back(t2); + defaultTexCoords.push_back(t3); + defaultTexCoords.push_back(t4); +} + +void CircleSurface::draw() { + + ofEnableAlphaBlending(); + if (source->getTexture() == 0) + { + return; + } + if (!source->getTexture()->isAllocated()){ + return; + } + + if (source != currentSource) { // Pointer comparison + // Create the mask here + setupTextures(); + currentSource = source; + } + + + // Save Normie state: + auto isNorm = ofGetUsingNormalizedTexCoords(); + + // If we get to this part of the function, the mask fbo + // should already be allocated and the mask texture created. + + ofEnableNormalizedTexCoords(); + // Get the texture from the source an store a copy + // of the source texture's id: + auto sourceTex = ofTexture(*(source->getTexture())); + auto sourceTexId = sourceTex.getTextureData().textureID; + + // Get the quad surface's mesh texture coordinates: + auto quadTexCoords = getMesh().getTexCoords(); + + maskMesh.clearTexCoords(); + + // Set the mesh's texture coords to the quads. + // This gets us the coordinates set in the TextureEditor + maskMesh.addTexCoords(quadTexCoords); + + float w = outputFbo.getWidth(); + float h = outputFbo.getHeight(); + + // Draw the scaled texture into an FBO + scaledSourceFbo.begin(true); + { + ofClear(0, 0, 0, 255); + ofSetupScreenOrtho(w, h, -1, 1); + ofEnableNormalizedTexCoords(); + ofFill(); + ofSetColor(255); + sourceTex.bind(); + maskMesh.draw(); + sourceTex.unbind(); + } + scaledSourceFbo.end(); + + // Now draw the texture, masked, into the outputFbo. + // This enables us to use the TextureEditor to determine + // what part of the source will be masked: + maskMesh.clearTexCoords(); + + // Set default normalized texCoords + maskMesh.addTexCoords(defaultTexCoords); + + outputFbo.begin(true); + { + ofClear(0, 0, 0, 0); + ofSetupScreenOrtho(w, h, -1, 1); + ofEnableNormalizedTexCoords(); + maskShader.begin(); + maskShader.setUniformTexture("maskTex", maskFbo.getTexture(), 1); + ofSetColor(255); + ofFill(); + ofSetRectMode(OF_RECTMODE_CORNER); + scaledSourceFbo.getTexture().bind(); + maskMesh.draw(); + scaledSourceFbo.getTexture().unbind(); + maskShader.end(); + } + outputFbo.end(); + + getMesh().clearTexCoords(); + getMesh().addTexCoords(defaultTexCoords); + + // Swap the texture id of the source with the one of our + // newly drawn outputFbo: + source->getTexture()->getTextureData().textureID = outputFbo.getTexture().getTextureData().textureID; + + // Draw the Quad: + QuadSurface::draw(); + + // Reset the texture id of the source + source->getTexture()->getTextureData().textureID = sourceTexId; + + // Reset the texture coords of the QuadSurface mesh: + getMesh().clearTexCoords(); + getMesh().addTexCoords(quadTexCoords); + + if (!isNorm) ofDisableNormalizedTexCoords(); +} + +void CircleSurface::setFeathering(float f) { + feathering = f; + updateMask = true; +} + +void CircleSurface::setupTextures() { + float w = source->getTexture()->getWidth(); + float h = source->getTexture()->getHeight(); + float dia = 0; + if (w > h) { + dia = h; + } else { + dia = w; + } + + float padding = 10; + + maskFbo.allocate(w, h); + maskFbo.begin(false); + ofPushStyle(); + ofSetupScreenOrtho(w, h, -1, 1); + ofClear(0, 0, 0, 255); + ofFill(); + ofSetColor(255); + ofSetCircleResolution(300); + ofDrawEllipse(w/2, h/2, w-padding, h-padding); + ofPopStyle(); + maskFbo.end(); + + outputFbo.allocate(w, h); + outputFbo.begin(); + ofClear(0, 0, 0, 255); + outputFbo.end(); + + scaledSourceFbo.allocate(w, h); + scaledSourceFbo.begin(); + ofClear(0, 0, 0, 255); + scaledSourceFbo.end(); + + // This is lifted from QuadSurface::setup to ensure that the two + // meshes are similar: + + // Create 4 points for the 2 triangles + ofVec2f p1 = ofVec2f(0, 0); + ofVec2f p2 = ofVec2f(0, h); + ofVec2f p3 = ofVec2f(w, h); + ofVec2f p4 = ofVec2f(w, 0); + + // Create 4 point for the texture coordinates + ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 0.0f)); + ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 0.0f)); + ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 1.0f)); + ofVec2f t4 = ofVec2f(ofVec2f(0.0f, 1.0f)); + + // Clear maskMesh + maskMesh.clear(); + + // Create a surface with the points + maskMesh.addVertex(p1); + maskMesh.addVertex(p2); + maskMesh.addVertex(p3); + maskMesh.addVertex(p4); + + // Add 2 triangles + maskMesh.addTriangle(0, 2, 3); + maskMesh.addTriangle(0, 1, 2); + + // Add texture coordinates + maskMesh.addTexCoord(t1); + maskMesh.addTexCoord(t2); + maskMesh.addTexCoord(t3); + maskMesh.addTexCoord(t4); +} + + + +int CircleSurface::getType() { + return SurfaceType::CIRCLE_SURFACE; +} + +} +} \ No newline at end of file diff --git a/src/Surfaces/CircleSurface.h b/src/Surfaces/CircleSurface.h new file mode 100644 index 0000000..262736d --- /dev/null +++ b/src/Surfaces/CircleSurface.h @@ -0,0 +1,63 @@ +// +// CircleSurface.h +// Copyright (c) 2017 Cristobal Mendoza +// http://cuppetellimendoza.com + +#ifndef OFXPIMAPPER_CIRCLESURFACE_H +#define OFXPIMAPPER_CIRCLESURFACE_H + +#include "QuadSurface.h" + +#define STRINGIFY(A) #A + +namespace ofx { +namespace piMapper { + +class CircleSurface : public QuadSurface { + public: + CircleSurface(); + CircleSurface(QuadSurface &surface); + int getType() override; + ~CircleSurface(); + void draw() override; + void setup() override; + + // TODO: Feathering + void setFeathering(float f); + + protected: + void setupTextures(); + ofFbo maskFbo; + ofFbo scaledSourceFbo; + ofFbo outputFbo; + ofShader maskShader; + ofShader gradientShader; + float feathering = 0.0f; + bool updateMask; + bool maskIsReady; + + string glESFragmentShader; + string glESVertexShader; + + string gl2FragmentShader; + string gl2VertexShader; + + ofMesh maskMesh; + + // TODO: gl3 Shaders +// string gl3VertexShader; +// string gl3FragmentShader; + + private: + std::vector defaultTexCoords; + // We will use this pointer to determine if the source has changed. + // This is a total kludge, but it keeps me from messing with the + // upstream source. + BaseSource* currentSource = 0; +}; + +} +} + + +#endif //OFXPIMAPPER_CIRCLESURFACE_H diff --git a/src/Surfaces/SurfaceFactory.cpp b/src/Surfaces/SurfaceFactory.cpp index 1adbba2..b85ae01 100644 --- a/src/Surfaces/SurfaceFactory.cpp +++ b/src/Surfaces/SurfaceFactory.cpp @@ -21,6 +21,8 @@ BaseSurface * SurfaceFactory::createSurface(SurfaceType type){ return createGridWarpSurface(); }else if(type == SurfaceType::HEXAGON_SURFACE){ return createHexagonSurface(); + }else if(type == SurfaceType::CIRCLE_SURFACE){ + return createCircleSurface(); }else{ throw runtime_error("Undefined surface type"); } @@ -83,5 +85,10 @@ HexagonSurface * SurfaceFactory::createHexagonSurface(){ return hexagonSurface; } +CircleSurface * SurfaceFactory::createCircleSurface() { + CircleSurface * circleSurface = new CircleSurface(); + return circleSurface; +} + } // namespace piMapper } // namespace ofx diff --git a/src/Surfaces/SurfaceFactory.h b/src/Surfaces/SurfaceFactory.h index 90b2827..14cd012 100644 --- a/src/Surfaces/SurfaceFactory.h +++ b/src/Surfaces/SurfaceFactory.h @@ -7,6 +7,7 @@ #include "QuadSurface.h" #include "GridWarpSurface.h" #include "HexagonSurface.h" +#include "CircleSurface.h" namespace ofx { namespace piMapper { @@ -26,6 +27,7 @@ class SurfaceFactory { QuadSurface * createQuadSurface(); GridWarpSurface * createGridWarpSurface(); HexagonSurface * createHexagonSurface(); + CircleSurface* createCircleSurface(); }; } // namespace piMapper diff --git a/src/Surfaces/SurfaceType.h b/src/Surfaces/SurfaceType.h index ae52270..b039427 100644 --- a/src/Surfaces/SurfaceType.h +++ b/src/Surfaces/SurfaceType.h @@ -8,7 +8,8 @@ enum SurfaceType{ QUAD_SURFACE, GRID_WARP_SURFACE, HEXAGON_SURFACE, - NONE + NONE, + CIRCLE_SURFACE }; } // namespace piMapper From b3d9fb3a3177818003012aaf8651477e435e97c4 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Fri, 15 Dec 2017 18:24:37 -0500 Subject: [PATCH 048/103] Update example xml file to display a CircleSurface --- example/bin/data/magslideshow_settings.xml | 4 +- example/bin/data/ofxpimapper.xml | 81 +++++++++++++++++----- 2 files changed, 65 insertions(+), 20 deletions(-) diff --git a/example/bin/data/magslideshow_settings.xml b/example/bin/data/magslideshow_settings.xml index 58c00da..42b8b02 100644 --- a/example/bin/data/magslideshow_settings.xml +++ b/example/bin/data/magslideshow_settings.xml @@ -1,6 +1,6 @@ - 1920 - 1080 + 1280 + 720 2 PING-PONG diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index b9b1861..2390ae8 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -2,8 +2,8 @@ - 244.000000000 - 151.187255859 + 140.000000000 + 65.000000000 397.625549316 @@ -33,46 +33,91 @@ image4.jpg + + + + 183.000000000 + 70.000000000 + + + 862.290893555 + 79.031463623 + + + 830.286376953 + 652.968627930 + + + 195.000000000 + 711.000000000 + + + + + 0.224322945 + 0.023645690 + + + 0.774270892 + 0.023645690 + + + 0.774270892 + 0.973813117 + + + 0.224322945 + 0.973813117 + + + + fbo + Slide Show Source + + + 1 + + - 305.332824707 - 158.923416138 + 219.956512451 + 481.153137207 - 823.889770508 - 135.275909424 + 742.043579102 + 481.153137207 - 883.853393555 - 670.724243164 + 742.043579102 + 792.846923828 - 241.146575928 - 656.366699219 + 219.956512451 + 792.846923828 - 0.000000000 + 0.106250003 0.000000000 - 1.000000000 + 0.918749988 0.000000000 - 1.000000000 - 1.000000000 + 0.918749988 + 0.994444430 - 0.000000000 - 1.000000000 + 0.106250003 + 0.994444430 - fbo - Slide Show Source + video + earth-and-technicians.mp4 1 From a8821686cc9c318710096c823f7c450bbfc9b2e2 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Fri, 15 Dec 2017 18:40:23 -0500 Subject: [PATCH 049/103] Update Key Bindings to support CircleSurface Bound to 'r' Update Info.cpp to show the new key binding in the help screen. --- src/Application/Modes/ProjectionMappingMode.cpp | 8 ++++++-- src/Info/Info.cpp | 11 ++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 9495743..9344fa3 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -58,8 +58,12 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg case 'q': app->createSurface(SurfaceType::QUAD_SURFACE); - break; - + break; + + case 'r': + app->createSurface(SurfaceType::CIRCLE_SURFACE); + break; + case 'g': app->createSurface(SurfaceType::GRID_WARP_SURFACE); break; diff --git a/src/Info/Info.cpp b/src/Info/Info.cpp index 9d9f489..7823ee0 100644 --- a/src/Info/Info.cpp +++ b/src/Info/Info.cpp @@ -13,15 +13,16 @@ Info::Info(){ " 3. Projection mapping mode\n" " - Press <,> and <.> to select previous or next surface\n" " - Press \"<\" and \">\" to select previous or next vertex\n" - " - Press to add new triangle surface\n" - " - Press to add new quad surface\n" - " - Press

to toggle perspective warping while quad surface selected\n" - " - Press to add new grid surface\n" + " - Press to add new Triangle surface\n" + " - Press to add new Quad surface\n" + " - Press to add a new ciRcle surface\n" + " - Press

to toggle Perspective warping while quad surface selected\n" + " - Press to add new Grid surface\n" " - Press <[> and <]> to remove or add columns to selected grid surface\n" " - Press <{> and <}> to remove or add rows to selected grid surface\n" " - Press <+> and <-> to scale surface up and down\n" " - Press <9> and <0> to move selected surface one layer up or down\n" - " - Press to hide/show layer panel\n" + " - Press to hide/show Layer panel\n" " - Press to delete selection\n" " - Press to play/pause the video\n" " - Type to clear composition\n" From 2a9e451e12d3edf660754baf94719934daafa52d Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Fri, 15 Dec 2017 21:17:25 -0500 Subject: [PATCH 050/103] Fix for SettingsLoader to support CircleSurface --- src/Application/SettingsLoader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Application/SettingsLoader.cpp b/src/Application/SettingsLoader.cpp index 8f294e6..9582c4c 100644 --- a/src/Application/SettingsLoader.cpp +++ b/src/Application/SettingsLoader.cpp @@ -216,7 +216,8 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ // Save surface options // For now only if quad surface - if(surface->getType() == SurfaceType::QUAD_SURFACE){ + if (surface->getType() == SurfaceType::QUAD_SURFACE || + surface->getType() == SurfaceType::CIRCLE_SURFACE) { QuadSurface * qs = (QuadSurface *)surface; if(!xmlSettings->tagExists("properties")){ xmlSettings->addTag("properties"); From 7f29c755ab1eacc081f5373e64b3ee70b4c47439 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Fri, 15 Dec 2017 21:17:55 -0500 Subject: [PATCH 051/103] Small fix to CircleSurface --- src/Surfaces/CircleSurface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Surfaces/CircleSurface.cpp b/src/Surfaces/CircleSurface.cpp index 95af0b2..6183084 100644 --- a/src/Surfaces/CircleSurface.cpp +++ b/src/Surfaces/CircleSurface.cpp @@ -23,8 +23,8 @@ CircleSurface::~CircleSurface() {} void CircleSurface::setup() { - setPerspectiveWarping(true); QuadSurface::setup(); + setPerspectiveWarping(true); updateMask = true; // maskIsReady = false; From 6f298161c6046ac41378ab67e7b57d2a8b4e965f Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Fri, 15 Dec 2017 22:58:09 -0500 Subject: [PATCH 052/103] Example update for RPi Example update for RPi --- example/bin/data/ofxpimapper.xml | 97 +++++++++++++++++++++++--------- example/src/main.cpp | 24 ++++++-- 2 files changed, 91 insertions(+), 30 deletions(-) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 2390ae8..99a1ecc 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -2,16 +2,16 @@ - 140.000000000 - 65.000000000 + 119.000000000 + 379.000000000 - 397.625549316 - 304.812774658 + 387.000000000 + 96.000000000 - 90.374511719 - 304.812774658 + 405.000000000 + 657.000000000 @@ -36,8 +36,8 @@ - 183.000000000 - 70.000000000 + 387.000000000 + 96.000000000 862.290893555 @@ -48,8 +48,8 @@ 652.968627930 - 195.000000000 - 711.000000000 + 405.000000000 + 657.000000000 @@ -78,46 +78,91 @@ 1 - + + + + 860.523620605 + 46.077301025 + + + 860.523620605 + 247.922729492 + + + 1379.000000000 + 533.000000000 + + + 1183.476318359 + 46.077301025 + + + + + 0.000000000 + 0.000000000 + + + 1.000000000 + 0.000000000 + + + 1.000000000 + 1.000000000 + + + 0.000000000 + 1.000000000 + + + + image + image2.jpg + + + 1 + + + - 219.956512451 - 481.153137207 + 1276.000000000 + 204.000000000 - 742.043579102 - 481.153137207 + 724.000000000 + 387.000000000 - 742.043579102 - 792.846923828 + 707.000000000 + 809.000000000 - 219.956512451 - 792.846923828 + 1284.000000000 + 708.000000000 - 0.106250003 + 0.101562500 0.000000000 - 0.918749988 + 0.884374976 0.000000000 - 0.918749988 - 0.994444430 + 0.884374976 + 1.002777815 - 0.106250003 - 0.994444430 + 0.101562500 + 1.002777815 video - earth-and-technicians.mp4 + control-panel-and-operation.mp4 1 diff --git a/example/src/main.cpp b/example/src/main.cpp index d743ec0..9bdae84 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -14,9 +14,25 @@ int main(int argc, char * argv[]){ break; } } - - Settings::instance()->setFullscreen(fullscreen); - ofSetupOpenGL(1024, 768, OF_WINDOW); - ofRunApp(new ofApp()); + shared_ptr window; +#ifdef TARGET_OPENGLES + ofGLESWindowSettings esSettings; + esSettings.glesVersion = 2; + esSettings.width = 1440; + esSettings.height = 900; + window = ofCreateWindow(esSettings); +#else + ofGLWindowSettings glSettings; + glSettings.glVersionMajor = 2; + glSettings.glVersionMinor = 1; + glSettings.width = 1440; + glSettings.height = 900; + window = ofCreateWindow(glSettings); +#endif + + auto app = std::make_shared(); + ofRunApp(window, app); + Settings::instance()->setFullscreen(fullscreen); + ofRunMainLoop(); } From 345b1b5be10fa993bb4d1362ba4bb670b9b745b0 Mon Sep 17 00:00:00 2001 From: magdesign Date: Sat, 16 Dec 2017 14:04:48 +0100 Subject: [PATCH 053/103] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 115133f..d848bda 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ check out this http://www.hv-a.com/lpmt/sssm.pdf on page: 10 https://forum.openframeworks.cc/t/grid-mesh-warping/12883 ### 7. SoftEdge: Image overlay to making adges transparent, could be achieved with overlaing a png with a black gradient. - +### 7. Color Adjustment: +Adjust brightness and contrast. ## Targeting OF_0.9.x on RaspberryPi. From 71dfeae8bd92958add53d6eca47155c2e9fd7f6a Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Sat, 16 Dec 2017 10:14:25 -0500 Subject: [PATCH 054/103] Fix for full screen --- example/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/src/main.cpp b/example/src/main.cpp index 9bdae84..ad3c2af 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -32,7 +32,7 @@ int main(int argc, char * argv[]){ #endif auto app = std::make_shared(); - ofRunApp(window, app); Settings::instance()->setFullscreen(fullscreen); + ofRunApp(window, app); ofRunMainLoop(); } From d3270674d2b6d4ec8908e033d0520e0f0b76abfc Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Sat, 16 Dec 2017 10:15:06 -0500 Subject: [PATCH 055/103] Renamed stringify macro to avoid a naming conflict --- src/Surfaces/CircleSurface.cpp | 6 +++--- src/Surfaces/CircleSurface.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Surfaces/CircleSurface.cpp b/src/Surfaces/CircleSurface.cpp index 6183084..a636dc8 100644 --- a/src/Surfaces/CircleSurface.cpp +++ b/src/Surfaces/CircleSurface.cpp @@ -29,7 +29,7 @@ void CircleSurface::setup() { updateMask = true; // maskIsReady = false; - glESVertexShader = STRINGIFY( + glESVertexShader = CIRCLE_SURFACE_STRINGIFY( attribute vec4 position; attribute vec4 color; attribute vec4 normal; @@ -53,7 +53,7 @@ void CircleSurface::setup() { } ); - glESFragmentShader = STRINGIFY( + glESFragmentShader = CIRCLE_SURFACE_STRINGIFY( //#ifdef GL_ES // define default precision for float, vec, mat. precision highp float; @@ -75,7 +75,7 @@ void CircleSurface::setup() { ); gl2FragmentShader = "#version 120\n #extension GL_ARB_texture_rectangle : enable\n"; - gl2FragmentShader += STRINGIFY( + gl2FragmentShader += CIRCLE_SURFACE_STRINGIFY( uniform sampler2DRect tex0; uniform sampler2DRect maskTex; diff --git a/src/Surfaces/CircleSurface.h b/src/Surfaces/CircleSurface.h index 262736d..6a21020 100644 --- a/src/Surfaces/CircleSurface.h +++ b/src/Surfaces/CircleSurface.h @@ -8,7 +8,7 @@ #include "QuadSurface.h" -#define STRINGIFY(A) #A +#define CIRCLE_SURFACE_STRINGIFY(A) #A namespace ofx { namespace piMapper { From e73f8624d0c0345506d2836c0fc3a1829a1a68ef Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Sat, 16 Dec 2017 15:21:56 -0500 Subject: [PATCH 056/103] Alpha masking without shaders for RPi --- example/src/main.cpp | 22 +++------------------- src/Surfaces/CircleSurface.cpp | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/example/src/main.cpp b/example/src/main.cpp index ad3c2af..2c8ec5b 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -15,24 +15,8 @@ int main(int argc, char * argv[]){ } } - shared_ptr window; -#ifdef TARGET_OPENGLES - ofGLESWindowSettings esSettings; - esSettings.glesVersion = 2; - esSettings.width = 1440; - esSettings.height = 900; - window = ofCreateWindow(esSettings); -#else - ofGLWindowSettings glSettings; - glSettings.glVersionMajor = 2; - glSettings.glVersionMinor = 1; - glSettings.width = 1440; - glSettings.height = 900; - window = ofCreateWindow(glSettings); -#endif - - auto app = std::make_shared(); Settings::instance()->setFullscreen(fullscreen); - ofRunApp(window, app); - ofRunMainLoop(); + + ofSetupOpenGL(1024, 768, OF_WINDOW); + ofRunApp(new ofApp()); } diff --git a/src/Surfaces/CircleSurface.cpp b/src/Surfaces/CircleSurface.cpp index a636dc8..4d7f9ec 100644 --- a/src/Surfaces/CircleSurface.cpp +++ b/src/Surfaces/CircleSurface.cpp @@ -183,6 +183,23 @@ void CircleSurface::draw() { ofClear(0, 0, 0, 0); ofSetupScreenOrtho(w, h, -1, 1); ofEnableNormalizedTexCoords(); + ofSetColor(255); + ofFill(); + ofSetRectMode(OF_RECTMODE_CORNER); +#ifdef TARGET_RASPBERRY_PI + scaledSourceFbo.getTexture().bind(); + maskMesh.draw(); + scaledSourceFbo.getTexture().unbind(); + + // Masking without shaders... + ofPushStyle(); + ofEnableBlendMode(OF_BLENDMODE_MULTIPLY); + ofSetColor(255); + ofFill(); + ofDisableNormalizedTexCoords(); + maskFbo.draw(0, 0); + ofPopStyle(); +#else maskShader.begin(); maskShader.setUniformTexture("maskTex", maskFbo.getTexture(), 1); ofSetColor(255); @@ -192,6 +209,8 @@ void CircleSurface::draw() { maskMesh.draw(); scaledSourceFbo.getTexture().unbind(); maskShader.end(); +#endif + } outputFbo.end(); From 2122f4bc8a7ceccb776be8785058176b464962b2 Mon Sep 17 00:00:00 2001 From: c-mendoza Date: Sun, 17 Dec 2017 19:28:04 -0500 Subject: [PATCH 057/103] CircleSurface: refactoring for performance, wip --- example/bin/data/magslideshow_settings.xml | 8 +- example/bin/data/ofxpimapper.xml | 89 +++++-- src/Surfaces/CircleSurface.cpp | 279 ++++++++++----------- src/Surfaces/CircleSurface.h | 17 +- 4 files changed, 213 insertions(+), 180 deletions(-) diff --git a/example/bin/data/magslideshow_settings.xml b/example/bin/data/magslideshow_settings.xml index 42b8b02..3e12c23 100644 --- a/example/bin/data/magslideshow_settings.xml +++ b/example/bin/data/magslideshow_settings.xml @@ -1,14 +1,14 @@ - 1280 - 720 + 800 + 600 2 - PING-PONG + NORMAL 0 Dissolve - 2 + 3 FitProportionally diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 99a1ecc..73dc26f 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -36,38 +36,38 @@ - 387.000000000 + 162.000000000 96.000000000 - 862.290893555 + 637.290893555 79.031463623 - 830.286376953 + 605.286376953 652.968627930 - 405.000000000 + 180.000000000 657.000000000 - 0.224322945 - 0.023645690 + 0.159322947 + 0.055312362 - 0.774270892 - 0.023645690 + 0.830520868 + 0.055312362 - 0.774270892 - 0.973813117 + 0.830520868 + 0.938813090 - 0.224322945 - 0.973813117 + 0.159322947 + 0.938813090 @@ -85,8 +85,8 @@ 46.077301025 - 860.523620605 - 247.922729492 + 887.000000000 + 402.000000000 1379.000000000 @@ -126,20 +126,20 @@ - 1276.000000000 - 204.000000000 + 1364.000000000 + 252.000000000 - 724.000000000 - 387.000000000 + 742.000000000 + 392.000000000 - 707.000000000 - 809.000000000 + 795.000000000 + 857.000000000 - 1284.000000000 - 708.000000000 + 1372.000000000 + 756.000000000 @@ -168,4 +168,49 @@ 1 + + + + 341.000000000 + 222.000000000 + + + 341.000000000 + 990.000000000 + + + 1365.000000000 + 990.000000000 + + + 1365.000000000 + 222.000000000 + + + + + 0.016666668 + 0.006666641 + + + 0.536666691 + 0.006666641 + + + 0.536666691 + 0.526666641 + + + 0.016666668 + 0.526666641 + + + + image + image2.jpg + + + 1 + + diff --git a/src/Surfaces/CircleSurface.cpp b/src/Surfaces/CircleSurface.cpp index 4d7f9ec..2f73354 100644 --- a/src/Surfaces/CircleSurface.cpp +++ b/src/Surfaces/CircleSurface.cpp @@ -26,83 +26,84 @@ void CircleSurface::setup() { QuadSurface::setup(); setPerspectiveWarping(true); + lastSourceTextureId = UINT_MAX; updateMask = true; // maskIsReady = false; - glESVertexShader = CIRCLE_SURFACE_STRINGIFY( - attribute vec4 position; - attribute vec4 color; - attribute vec4 normal; - attribute vec2 texcoord; - - uniform mat4 modelViewMatrix; - uniform mat4 projectionMatrix; - uniform sampler2D maskTex; - - varying vec4 colorVarying; - varying vec2 texCoordVarying; - - void main() { - - //get our current vertex position so we can modify it - vec4 pos = projectionMatrix*modelViewMatrix*position; - - gl_Position = pos; - colorVarying = color; - texCoordVarying = texcoord; - } - ); - - glESFragmentShader = CIRCLE_SURFACE_STRINGIFY( -//#ifdef GL_ES -// define default precision for float, vec, mat. - precision highp float; +// glESVertexShader = CIRCLE_SURFACE_STRINGIFY( +// attribute vec4 position; +// attribute vec4 color; +// attribute vec4 normal; +// attribute vec2 texcoord; +// +// uniform mat4 modelViewMatrix; +// uniform mat4 projectionMatrix; +// uniform sampler2D maskTex; +// +// varying vec4 colorVarying; +// varying vec2 texCoordVarying; +// +// void main() { +// +// //get our current vertex position so we can modify it +// vec4 pos = projectionMatrix*modelViewMatrix*position; +// +// gl_Position = pos; +// colorVarying = color; +// texCoordVarying = texcoord; +// } +// ); +// +// glESFragmentShader = CIRCLE_SURFACE_STRINGIFY( +////#ifdef GL_ES +//// define default precision for float, vec, mat. +// precision highp float; +////#endif +// +// uniform sampler2D tex0; +// uniform sampler2D maskTex; +// uniform vec4 globalColor; +// +// varying vec2 texCoordVarying; +// +// void main (void) +// { +// vec2 pos = texCoordVarying; +// vec3 src = texture2D(tex0, pos).rgb; +// float mask = texture2D(maskTex, pos).r; +// gl_FragColor = vec4( src , mask); +// } +// ); +// +// gl2FragmentShader = "#version 120\n #extension GL_ARB_texture_rectangle : enable\n"; +// gl2FragmentShader += CIRCLE_SURFACE_STRINGIFY( +// uniform sampler2DRect tex0; +// uniform sampler2DRect maskTex; +// +// void main (void) { +// vec2 pos = gl_TexCoord[0].st; +// +// vec3 src = texture2DRect(tex0, pos).rgb; +// float mask = texture2DRect(maskTex, pos).r; +// +// gl_FragColor = vec4(src, mask); +// } +// ); +// +//#ifdef TARGET_OPENGLES +// maskShader.setupShaderFromSource(GL_VERTEX_SHADER, glESVertexShader); +// maskShader.setupShaderFromSource(GL_FRAGMENT_SHADER, glESFragmentShader); +// maskShader.bindDefaults(); +// maskShader.linkProgram(); +//#else +// if (ofIsGLProgrammableRenderer()) { +// +// } else { +// maskShader.setupShaderFromSource(GL_FRAGMENT_SHADER, gl2FragmentShader); +// maskShader.linkProgram(); +// } //#endif - uniform sampler2D tex0; - uniform sampler2D maskTex; - uniform vec4 globalColor; - - varying vec2 texCoordVarying; - - void main (void) - { - vec2 pos = texCoordVarying; - vec3 src = texture2D(tex0, pos).rgb; - float mask = texture2D(maskTex, pos).r; - gl_FragColor = vec4( src , mask); - } - ); - - gl2FragmentShader = "#version 120\n #extension GL_ARB_texture_rectangle : enable\n"; - gl2FragmentShader += CIRCLE_SURFACE_STRINGIFY( - uniform sampler2DRect tex0; - uniform sampler2DRect maskTex; - - void main (void) { - vec2 pos = gl_TexCoord[0].st; - - vec3 src = texture2DRect(tex0, pos).rgb; - float mask = texture2DRect(maskTex, pos).r; - - gl_FragColor = vec4(src, mask); - } - ); - -#ifdef TARGET_OPENGLES - maskShader.setupShaderFromSource(GL_VERTEX_SHADER, glESVertexShader); - maskShader.setupShaderFromSource(GL_FRAGMENT_SHADER, glESFragmentShader); - maskShader.bindDefaults(); - maskShader.linkProgram(); -#else - if (ofIsGLProgrammableRenderer()) { - - } else { - maskShader.setupShaderFromSource(GL_FRAGMENT_SHADER, gl2FragmentShader); - maskShader.linkProgram(); - } -#endif - ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 0.0f)); ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 0.0f)); ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 1.0f)); @@ -128,6 +129,7 @@ void CircleSurface::draw() { if (source != currentSource) { // Pointer comparison // Create the mask here setupTextures(); + lastSourceTextureId = UINT_MAX; currentSource = source; } @@ -144,53 +146,61 @@ void CircleSurface::draw() { auto sourceTex = ofTexture(*(source->getTexture())); auto sourceTexId = sourceTex.getTextureData().textureID; - // Get the quad surface's mesh texture coordinates: - auto quadTexCoords = getMesh().getTexCoords(); + // Draw the mask only if the sources are FBO's, videos, + // or if the last texture id was UINT_MAX (which means that + // the mask has not yet been draw). +// if (source->getType() == SOURCE_TYPE_FBO || +// source->getType() == SOURCE_TYPE_VIDEO || +// lastSourceTextureId == UINT_MAX) { + if (true) { + lastSourceTextureId = sourceTexId; + drawMaskForSource(sourceTex); + } - maskMesh.clearTexCoords(); + // Swap the texture id of the source with the one of our + // newly drawn outputFbo: + source->getTexture()->getTextureData().textureID = outputFbo.getTexture().getTextureData().textureID; + auto texCoords = getMesh().getTexCoords(); + getMesh().clearTexCoords(); + getMesh().addTexCoords(defaultTexCoords); + // Draw the Quad: + QuadSurface::draw(); - // Set the mesh's texture coords to the quads. - // This gets us the coordinates set in the TextureEditor - maskMesh.addTexCoords(quadTexCoords); + // Reset the texture id of the source + source->getTexture()->getTextureData().textureID = lastSourceTextureId; - float w = outputFbo.getWidth(); - float h = outputFbo.getHeight(); + // Reset the texture coords of the QuadSurface mesh: + getMesh().clearTexCoords(); + getMesh().addTexCoords(texCoords); - // Draw the scaled texture into an FBO - scaledSourceFbo.begin(true); - { - ofClear(0, 0, 0, 255); - ofSetupScreenOrtho(w, h, -1, 1); - ofEnableNormalizedTexCoords(); - ofFill(); - ofSetColor(255); - sourceTex.bind(); - maskMesh.draw(); - sourceTex.unbind(); - } - scaledSourceFbo.end(); + if (!isNorm) ofDisableNormalizedTexCoords(); +} - // Now draw the texture, masked, into the outputFbo. - // This enables us to use the TextureEditor to determine - // what part of the source will be masked: - maskMesh.clearTexCoords(); +void CircleSurface::setFeathering(float f) { + feathering = f; + updateMask = true; +} + + +void CircleSurface::drawMaskForSource(ofTexture &sourceTex) { + auto quadTexCoords = getMesh().getTexCoords(); - // Set default normalized texCoords - maskMesh.addTexCoords(defaultTexCoords); + maskMesh.clearTexCoords(); + // Set the mesh's texture coords to the quads. + // This gets us the coordinates set in the TextureEditor + maskMesh.addTexCoords(quadTexCoords); outputFbo.begin(true); { ofClear(0, 0, 0, 0); - ofSetupScreenOrtho(w, h, -1, 1); ofEnableNormalizedTexCoords(); ofSetColor(255); ofFill(); ofSetRectMode(OF_RECTMODE_CORNER); -#ifdef TARGET_RASPBERRY_PI - scaledSourceFbo.getTexture().bind(); +//#ifdef TARGET_RASPBERRY_PI + sourceTex.bind(); maskMesh.draw(); - scaledSourceFbo.getTexture().unbind(); - + sourceTex.unbind(); // Masking without shaders... ofPushStyle(); ofEnableBlendMode(OF_BLENDMODE_MULTIPLY); @@ -199,44 +209,21 @@ void CircleSurface::draw() { ofDisableNormalizedTexCoords(); maskFbo.draw(0, 0); ofPopStyle(); -#else - maskShader.begin(); - maskShader.setUniformTexture("maskTex", maskFbo.getTexture(), 1); - ofSetColor(255); - ofFill(); - ofSetRectMode(OF_RECTMODE_CORNER); - scaledSourceFbo.getTexture().bind(); - maskMesh.draw(); - scaledSourceFbo.getTexture().unbind(); - maskShader.end(); -#endif +//#else +// maskShader.begin(); +// maskShader.setUniformTexture("maskTex", maskFbo.getTexture(), 1); +// ofSetColor(255); +// ofFill(); +// ofSetRectMode(OF_RECTMODE_CORNER); +// scaledSourceFbo.getTexture().bind(); +// maskMesh.draw(); +// scaledSourceFbo.getTexture().unbind(); +// maskShader.end(); +//#endif } outputFbo.end(); - getMesh().clearTexCoords(); - getMesh().addTexCoords(defaultTexCoords); - - // Swap the texture id of the source with the one of our - // newly drawn outputFbo: - source->getTexture()->getTextureData().textureID = outputFbo.getTexture().getTextureData().textureID; - - // Draw the Quad: - QuadSurface::draw(); - - // Reset the texture id of the source - source->getTexture()->getTextureData().textureID = sourceTexId; - - // Reset the texture coords of the QuadSurface mesh: - getMesh().clearTexCoords(); - getMesh().addTexCoords(quadTexCoords); - - if (!isNorm) ofDisableNormalizedTexCoords(); -} - -void CircleSurface::setFeathering(float f) { - feathering = f; - updateMask = true; } void CircleSurface::setupTextures() { @@ -268,10 +255,10 @@ void CircleSurface::setupTextures() { ofClear(0, 0, 0, 255); outputFbo.end(); - scaledSourceFbo.allocate(w, h); - scaledSourceFbo.begin(); - ofClear(0, 0, 0, 255); - scaledSourceFbo.end(); +// scaledSourceFbo.allocate(w, h); +// scaledSourceFbo.begin(); +// ofClear(0, 0, 0, 255); +// scaledSourceFbo.end(); // This is lifted from QuadSurface::setup to ensure that the two // meshes are similar: @@ -283,10 +270,10 @@ void CircleSurface::setupTextures() { ofVec2f p4 = ofVec2f(w, 0); // Create 4 point for the texture coordinates - ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 0.0f)); - ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 0.0f)); - ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 1.0f)); - ofVec2f t4 = ofVec2f(ofVec2f(0.0f, 1.0f)); + ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 1.0f)); + ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 1.0f)); + ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 0.0f)); + ofVec2f t4 = ofVec2f(ofVec2f(0.0f, 0.0f)); // Clear maskMesh maskMesh.clear(); diff --git a/src/Surfaces/CircleSurface.h b/src/Surfaces/CircleSurface.h index 6a21020..ddbfe33 100644 --- a/src/Surfaces/CircleSurface.h +++ b/src/Surfaces/CircleSurface.h @@ -27,20 +27,20 @@ class CircleSurface : public QuadSurface { protected: void setupTextures(); + void drawMaskForSource(ofTexture &sourceTexture); ofFbo maskFbo; - ofFbo scaledSourceFbo; +// ofFbo scaledSourceFbo; ofFbo outputFbo; - ofShader maskShader; - ofShader gradientShader; +// ofShader maskShader; float feathering = 0.0f; bool updateMask; bool maskIsReady; - string glESFragmentShader; - string glESVertexShader; - - string gl2FragmentShader; - string gl2VertexShader; +// string glESFragmentShader; +// string glESVertexShader; +// +// string gl2FragmentShader; +// string gl2VertexShader; ofMesh maskMesh; @@ -54,6 +54,7 @@ class CircleSurface : public QuadSurface { // This is a total kludge, but it keeps me from messing with the // upstream source. BaseSource* currentSource = 0; + unsigned int lastSourceTextureId; }; } From 343e0b507c86216854a8dd852ccd3f88309e5154 Mon Sep 17 00:00:00 2001 From: magdesign Date: Sat, 16 Dec 2017 14:04:48 +0100 Subject: [PATCH 058/103] Update README.md --- README.md | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/README.md b/README.md index 115133f..cd8032d 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,3 @@ -# This fork adds some important functions to PiMapper. -### 1. Slide show function (implemented in master branch): -PiMapper has now a slideshow and plays all images in a folder. There is an integrated directory watcher für updating new added images. Transition and slidetime can be edited via .xml file. - -### 2. Circular shapes for mapping (there are only square and tringle shapes so far): -Simple Circular mapping shape (more complex version with movable center might come later) - -### 3. Mapping converter: -Finalize the mapping converter, to convert exported .svg from Mapio and Madmapper to ofxPiMapper: https://github.com/magdesign/mapping-converter - -### 4. Bezier handles: -Adding bezier handles to masks for better aligment: https://github.com/TsubokuLab/ofxBezierWarpManager -### 5. Play all videos from a folder: -This should be a an additional FBO source in PiMapper, looping all videos in /media/internal/video/* -### 6. Grid Warp (meshing of square shapes): -check out this http://www.hv-a.com/lpmt/sssm.pdf on page: 10 -https://forum.openframeworks.cc/t/grid-mesh-warping/12883 -### 7. SoftEdge: -Image overlay to making adges transparent, could be achieved with overlaing a png with a black gradient. - - - -## Targeting OF_0.9.x on RaspberryPi. -Each function will be rewarded to the coder from a pot sponsered by http://pocketvj.com -Keybindings are edited to match the CP of PocketVJ. - # ofxPiMapper [![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From 58c052878c28d03ef89ff2ed0e42a20734d8074a Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Mon, 18 Dec 2017 11:55:11 +0100 Subject: [PATCH 059/103] Fix xcodeproj of the example --- example/example.xcodeproj/project.pbxproj | 1571 +++++++++-------- .../xcschemes/example Debug.xcscheme | 19 +- .../xcschemes/example Release.xcscheme | 19 +- 3 files changed, 901 insertions(+), 708 deletions(-) diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index e2402e5..0815d40 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -7,97 +7,116 @@ objects = { /* Begin PBXBuildFile section */ - 06765053D7BFBBEB43E77B23 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8DA47AF2B265F778E74D4DA /* StartDragSurfaceCmd.cpp */; }; - 14566DCD28D35A80428886C4 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27453C6FAE9B674FD694508D /* SelTexCoordCmd.cpp */; }; - 1CD33E884D9E3358252E82A1 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 907C5B5E104864A2D3A25745 /* ofxToggle.cpp */; }; - 1F4453EA1589AD79F4B34493 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4048CA09E6AAB5F673CBD2F0 /* RadioList.cpp */; }; - 21B18AC78EBFC1FD28C614D5 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B16277019B0C4B684E1B063E /* TextureMappingMode.cpp */; }; - 23963D6D8F0085D5DD2DF394 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 655142313A378162E3929785 /* TogglePerspectiveCmd.cpp */; }; - 25F5CD753AF35B53464E56AE /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0739F09627790055C959BBF4 /* MvTexCoordCmd.cpp */; }; - 274AEF0299D77E27C0C5B205 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18DA1B30717C876AA19CEEC0 /* ProjectionEditorWidget.cpp */; }; - 28F5415281F8D09BBC098355 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 03FCF5559C2A6AB79D947767 /* TranslateCanvasCmd.cpp */; }; - 2A9AFA74E0EF07E58AC11382 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9ECBF061BABECA9C2341372 /* QuadSurface.cpp */; }; - 2AB23B34A18E47DB0D742387 /* CrossSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DDA3608BED55BC67A9DAFF5 /* CrossSource.cpp */; }; - 2E9E05C9FFCE15172A701335 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33DD6E4350FD51C68B7E65F0 /* SettingsLoader.cpp */; }; - 36A98A331EAE1D0A19998A59 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 60F40691CD9DE4DEE1768FE9 /* SaveTexCoordPosCmd.cpp */; }; - 3B90107DB9BF4857E357FCA8 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 16DB3860ECC0D672B08DE71C /* ofxPiMapper.cpp */; }; - 401140F3B7FA4412935BB121 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B3B1807E9CFC3FFBA4DBBEF /* Application.cpp */; }; - 4280FE72330EE80A9929046F /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A0800123A129E9BC12ED207 /* Settings.cpp */; }; - 42AB7CD7DFB89209AB951942 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BCA96396113AAF56D66C844 /* ProjectionMappingMode.cpp */; }; - 42BCE929D520D8872171239A /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62F01592304CB7995200EF7B /* CircleJoint.cpp */; }; - 483908258D00B98B4BE69F07 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 78D67A00EB899FAC09430597 /* ofxLabel.cpp */; }; - 4A53BFBA57F4AD16FB9D2D24 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64156CB2D856E4CE0FBBED96 /* PresentationMode.cpp */; }; - 4BF21A290FA6FE26B87B8971 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FFBE499412CC8DD07163E91 /* SetNextSourceCmd.cpp */; }; - 4D2D4455339FC8C955091C88 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 413E846B881CCADC897A8A40 /* TextureEditorWidget.cpp */; }; - 580602DA874A9CF9E850DEEE /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 231337763726D333E0B3D56C /* AddGridColCmd.cpp */; }; - 5826FF4F63DC430E90AFDA5E /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3538B8AF69CAB7C215FA1EF /* RmGridRowCmd.cpp */; }; - 588E33B9B0BD6F5A2E4DF31D /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7B0806EEA8012D629BE363C /* OMXPlayerCache.cpp */; }; - 5A4349E9754D6FA14C0F2A3A /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */; }; - 5CBB2AB3A60F65431D7B555D /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C88333E71C9457E441C33474 /* ofxButton.cpp */; }; - 6056983B92E88B475FF04299 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D386994DF359F3BD1E66480 /* MvSelectionCmd.cpp */; }; - 60C8089351E49CF344577098 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 784FFEB8D108EC916343AB97 /* SelNextTexCoordCmd.cpp */; }; - 63B57AC5BF4EF088491E0317 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */; }; - 63DB0907B2ACDF9E6F2D9925 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D2400AC1A64EDE5E990C56C /* GridWarpSurface.cpp */; }; - 6438655B2AE4DDA2743241EC /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D020B9B28609D071E21BB76 /* ToggleAnimatedSourceCmd.cpp */; }; - 6500BFD07CA93EFD8A162B25 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7F58FFED7FBFC49573FF65E4 /* SetSourceCmd.cpp */; }; - 67FF225B68ECC1942C833BFE /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC98A68C64BFC941D0B31EE9 /* SelNextSurfaceCmd.cpp */; }; - 7002E598586957E5F20E69A7 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2282B1E05458C3B2BBCE568 /* SelVertexCmd.cpp */; }; - 7702233BBFB6E8D9E8B93CBC /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C61C1F4F1A1ED2660B1D6EDC /* FboSource.cpp */; }; - 7DAB7D546F81A93336034BF7 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DF54314CF2B45BF195B84C6 /* SelPrevSurfaceCmd.cpp */; }; - 800748EF057A284D9DA82F60 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7E88D3956480E0CBAA21641 /* SelPrevTexCoordCmd.cpp */; }; - 82643E358DF270B9EC939699 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A50F23D868C48DF9799BC788 /* RmGridColCmd.cpp */; }; - 837220E80EB56CD44AD27F2A /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15F2C6477A769C03A56D1401 /* ofxSlider.cpp */; }; - 83CACB24937919003F2F9B63 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E2333CF877EE99EBE86F4B0F /* HomographyHelper.cpp */; }; - 84172554824F6959BA431E33 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 15C9B02F2CF08112845CD074 /* SetPresetCmd.cpp */; }; - 845DC872C79A75F7B5FABC02 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18041C8871E17DE3E60BFF95 /* MvSurfaceVertCmd.cpp */; }; - 85649EB44DE8F0A3BF8430F9 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 836B103542A52C63B004410C /* SurfaceManager.cpp */; }; - 856AA354D08AB4B323081444 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9604B925D32EE39065747725 /* ofxBaseGui.cpp */; }; - 868F230C6074263277ED9B07 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E78D1B2A6DB0856BF8ED1FE /* BaseJoint.cpp */; }; - 892923A127FC7C57469FD078 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB4132974E14024E74E320F5 /* BaseSource.cpp */; }; - 8A3D6CE0A4338871766366B6 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69A4D26FC0AD01A86571540D /* SurfaceHighlightWidget.cpp */; }; - 8CA6C92E3D4F91750BC469FF /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBAFA0B7AFEA589CA5167204 /* MvAllTexCoordsCmd.cpp */; }; - 8E8F94DC506856A4E92FBA8A /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57990D37D728C5711AACBA9F /* LayerPanelWidget.cpp */; }; - 90DE06EA59944C1BEA539719 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8D3CB0B9A827AFA479349BBE /* SetApplicationModeCmd.cpp */; }; - 92527EF632E7EC0E96BC329C /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18385A4F4BC87806616D4F7F /* MediaServer.cpp */; }; - 933A2227713C720CEFF80FD9 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */; }; - 93760FE8B10EBD4081251E10 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDBE053980FA01FAD543D782 /* CmdManager.cpp */; }; - 95CB0A22296B3DB402835DCF /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61291E56B7882C9E9B8F119B /* ImageSource.cpp */; }; - 973F560586CB3735581265E7 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E8CE817DF3028A4345376E7D /* DeselectTexCoordCmd.cpp */; }; - 9C194C9F4ACD67CD61FBD30D /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCBB74B9531974E1D5DA019B /* HexagonSurface.cpp */; }; - 9CAA3B0DFD59840998C832DA /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 941AD8B39C28D08B9F31077A /* TextureHighlightWidget.cpp */; }; - 9D44DC88EF9E7991B4A09951 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */; }; - 9F968AD3A115328F4BFE5D71 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F2C0EE541190D47BF5911C0A /* BaseSurface.cpp */; }; - A0C1CAB7B9C59DDDC960EB62 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5407451FA68C27B2AAE644A6 /* VideoSource.cpp */; }; - A3E23EF00463364A9FE3860C /* CustomSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76B40246C8B90C1CA4074BB7 /* CustomSource.cpp */; }; - A6EE8D8F3CA590EF6D7FAFA6 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49BE2D8F2A2A57F4EBF83FF4 /* SetTexMapDrawModeCmd.cpp */; }; - A75658250711ADE2C05FC781 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EC481BAB32B250D3EA41AF9E /* MvLayerDnCmd.cpp */; }; - AA98F23DF9897F2241EF3968 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4245228145B1AA737F49CF14 /* SourceSelectionMode.cpp */; }; - B01F972DDDA5F21EF4C8B99D /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B7C308F8B76FCB909581A580 /* RmSurfaceCmd.cpp */; }; - B1EEE5A7EC1876072BF8F7FE /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B323D7489A7B26A63443444F /* AddSurfaceCmd.cpp */; }; - B266578FC55D23BFEBC042E7 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECF8674C7975F1063C5E30CA /* ofxGuiGroup.cpp */; }; - B27F2ADC894A4C463E892AFE /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 03FA94CA9F193C816DE4253F /* SurfaceFactory.cpp */; }; - B56FE57CC35806596D38118C /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 802251BAF1B35B1D67B32FD0 /* ofxSliderGroup.cpp */; }; - B9654D0EF43BCA228B330ED7 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B29C3846BA06080344C1D1E /* SelPrevVertexCmd.cpp */; }; - C0EB2D2E383BA9DE417ADB38 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DF2D82EA37D8C7A5F686EA5 /* TriangleSurface.cpp */; }; - C34B66987F4DA38C21AF325B /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E52D4207C299D5886C8FD2C7 /* MvLayerUpCmd.cpp */; }; - C3A616FB3A463C17E327F395 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C080561EC053F17BB86A668 /* SurfaceStack.cpp */; }; - C4D6DA9B890E612343FD059F /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9631F04A0875ADEB45970DE8 /* ApplicationBaseMode.cpp */; }; - C8D7FA44AA0565654A681157 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E80EE6FB0CC304A6CA287BB /* DeselectSurfaceCmd.cpp */; }; - D61A46C1800537BA43C7884F /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C656C28252AD5E9E09FA2162 /* DuplicateSurfaceCmd.cpp */; }; - D88BA6D139757ED4E1669796 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E4A0386460638A781A7AC84 /* AddGridRowCmd.cpp */; }; - DB8FC60C7512DB810C92625B /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20F9951441118A70E8D55E13 /* DirectoryWatcher.cpp */; }; - E327ACE85A208BAFACD1B7C7 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34B45EB44DED0A47FBAD30F4 /* ScaleSurfaceFromToCmd.cpp */; }; + 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE01FE7D53700C35E93 /* Application.cpp */; }; + 01815E8D1FE7D59200C35E93 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */; }; + 01815E8E1FE7D59200C35E93 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */; }; + 01815E8F1FE7D59200C35E93 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE71FE7D53700C35E93 /* ProjectionMappingMode.cpp */; }; + 01815E901FE7D59200C35E93 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE91FE7D53700C35E93 /* SourceSelectionMode.cpp */; }; + 01815E911FE7D59200C35E93 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DEB1FE7D53700C35E93 /* TextureMappingMode.cpp */; }; + 01815E921FE7D59200C35E93 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DED1FE7D53700C35E93 /* SettingsLoader.cpp */; }; + 01815E931FE7D59200C35E93 /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF01FE7D53700C35E93 /* AddGridColCmd.cpp */; }; + 01815E941FE7D59200C35E93 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF21FE7D53700C35E93 /* AddGridRowCmd.cpp */; }; + 01815E951FE7D59200C35E93 /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF41FE7D53700C35E93 /* AddSurfaceCmd.cpp */; }; + 01815E961FE7D59200C35E93 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF71FE7D53700C35E93 /* ClearSurfacesCmd.cpp */; }; + 01815E971FE7D59200C35E93 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DF91FE7D53700C35E93 /* CmdManager.cpp */; }; + 01815E981FE7D59200C35E93 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DFB1FE7D53700C35E93 /* DeselectSurfaceCmd.cpp */; }; + 01815E991FE7D59200C35E93 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DFD1FE7D53700C35E93 /* DeselectTexCoordCmd.cpp */; }; + 01815E9A1FE7D59200C35E93 /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DFF1FE7D53700C35E93 /* DuplicateSurfaceCmd.cpp */; }; + 01815E9B1FE7D59200C35E93 /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E011FE7D53700C35E93 /* MvAllTexCoordsCmd.cpp */; }; + 01815E9C1FE7D59200C35E93 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E031FE7D53700C35E93 /* MvLayerDnCmd.cpp */; }; + 01815E9D1FE7D59200C35E93 /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E051FE7D53700C35E93 /* MvLayerUpCmd.cpp */; }; + 01815E9E1FE7D59200C35E93 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E071FE7D53700C35E93 /* MvSelectionCmd.cpp */; }; + 01815E9F1FE7D59200C35E93 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E091FE7D53700C35E93 /* MvSurfaceVertCmd.cpp */; }; + 01815EA01FE7D59200C35E93 /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E0B1FE7D53700C35E93 /* MvTexCoordCmd.cpp */; }; + 01815EA11FE7D59200C35E93 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E0D1FE7D53700C35E93 /* RmGridColCmd.cpp */; }; + 01815EA21FE7D59200C35E93 /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E0F1FE7D53700C35E93 /* RmGridRowCmd.cpp */; }; + 01815EA31FE7D59200C35E93 /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E111FE7D53700C35E93 /* RmSurfaceCmd.cpp */; }; + 01815EA41FE7D59200C35E93 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E131FE7D53700C35E93 /* SaveTexCoordPosCmd.cpp */; }; + 01815EA51FE7D59200C35E93 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E151FE7D53700C35E93 /* ScaleSurfaceFromToCmd.cpp */; }; + 01815EA61FE7D59200C35E93 /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E171FE7D53700C35E93 /* SelNextSurfaceCmd.cpp */; }; + 01815EA71FE7D59200C35E93 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E191FE7D53700C35E93 /* SelNextTexCoordCmd.cpp */; }; + 01815EA81FE7D59200C35E93 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E1B1FE7D53700C35E93 /* SelNextVertexCmd.cpp */; }; + 01815EA91FE7D59200C35E93 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E1D1FE7D53700C35E93 /* SelPrevSurfaceCmd.cpp */; }; + 01815EAA1FE7D59200C35E93 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E1F1FE7D53700C35E93 /* SelPrevTexCoordCmd.cpp */; }; + 01815EAB1FE7D59200C35E93 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E211FE7D53700C35E93 /* SelPrevVertexCmd.cpp */; }; + 01815EAC1FE7D59200C35E93 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E231FE7D53700C35E93 /* SelSurfaceCmd.cpp */; }; + 01815EAD1FE7D59200C35E93 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E251FE7D53700C35E93 /* SelTexCoordCmd.cpp */; }; + 01815EAE1FE7D59200C35E93 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E271FE7D53700C35E93 /* SelVertexCmd.cpp */; }; + 01815EAF1FE7D59200C35E93 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E291FE7D53700C35E93 /* SetApplicationModeCmd.cpp */; }; + 01815EB01FE7D59200C35E93 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E2B1FE7D53700C35E93 /* SetNextSourceCmd.cpp */; }; + 01815EB11FE7D59200C35E93 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E2D1FE7D53700C35E93 /* SetPresetCmd.cpp */; }; + 01815EB21FE7D59200C35E93 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E2F1FE7D53700C35E93 /* SetSourceCmd.cpp */; }; + 01815EB31FE7D59200C35E93 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E311FE7D53700C35E93 /* SetTexMapDrawModeCmd.cpp */; }; + 01815EB41FE7D59200C35E93 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E331FE7D53700C35E93 /* StartDragSurfaceCmd.cpp */; }; + 01815EB51FE7D59200C35E93 /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E351FE7D53700C35E93 /* ToggleAnimatedSourceCmd.cpp */; }; + 01815EB61FE7D59200C35E93 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E371FE7D53700C35E93 /* TogglePerspectiveCmd.cpp */; }; + 01815EB71FE7D59200C35E93 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E391FE7D53700C35E93 /* TranslateCanvasCmd.cpp */; }; + 01815EB81FE7D59200C35E93 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E3C1FE7D53700C35E93 /* Gui.cpp */; }; + 01815EB91FE7D59200C35E93 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E401FE7D53700C35E93 /* LayerPanelWidget.cpp */; }; + 01815EBA1FE7D59200C35E93 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E421FE7D53700C35E93 /* ProjectionEditorWidget.cpp */; }; + 01815EBB1FE7D59200C35E93 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E441FE7D53700C35E93 /* ScaleWidget.cpp */; }; + 01815EBC1FE7D59200C35E93 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E461FE7D53700C35E93 /* SourcesEditorWidget.cpp */; }; + 01815EBD1FE7D59200C35E93 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E481FE7D53700C35E93 /* SurfaceHighlightWidget.cpp */; }; + 01815EBE1FE7D59200C35E93 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E4A1FE7D53700C35E93 /* TextureEditorWidget.cpp */; }; + 01815EBF1FE7D59200C35E93 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E4C1FE7D53700C35E93 /* TextureHighlightWidget.cpp */; }; + 01815EC01FE7D59200C35E93 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E4F1FE7D53700C35E93 /* Info.cpp */; }; + 01815EC11FE7D59200C35E93 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E521FE7D53700C35E93 /* DirectoryWatcher.cpp */; }; + 01815EC21FE7D59200C35E93 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E541FE7D53700C35E93 /* MediaServer.cpp */; }; + 01815EC31FE7D59200C35E93 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E571FE7D53700C35E93 /* ofxPiMapper.cpp */; }; + 01815EC41FE7D59200C35E93 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E5A1FE7D53700C35E93 /* BaseSource.cpp */; }; + 01815EC51FE7D59200C35E93 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E5C1FE7D53700C35E93 /* FboSource.cpp */; }; + 01815EC61FE7D59200C35E93 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E5E1FE7D53700C35E93 /* ImageSource.cpp */; }; + 01815EC71FE7D59200C35E93 /* magSlide.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E601FE7D53700C35E93 /* magSlide.cpp */; }; + 01815EC81FE7D59200C35E93 /* magSlideShowSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E621FE7D53700C35E93 /* magSlideShowSource.cpp */; }; + 01815EC91FE7D59200C35E93 /* magSlideTransition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E641FE7D53700C35E93 /* magSlideTransition.cpp */; }; + 01815ECA1FE7D59200C35E93 /* magSlideTransitionFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E661FE7D53700C35E93 /* magSlideTransitionFactory.cpp */; }; + 01815ECB1FE7D59200C35E93 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E681FE7D53700C35E93 /* OMXPlayerCache.cpp */; }; + 01815ECC1FE7D59200C35E93 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E6C1FE7D53700C35E93 /* VideoSource.cpp */; }; + 01815ECD1FE7D59200C35E93 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E6F1FE7D53700C35E93 /* BaseSurface.cpp */; }; + 01815ECE1FE7D59200C35E93 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E711FE7D53700C35E93 /* GridWarpSurface.cpp */; }; + 01815ECF1FE7D59200C35E93 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E731FE7D53700C35E93 /* HexagonSurface.cpp */; }; + 01815ED01FE7D59200C35E93 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E751FE7D53700C35E93 /* QuadSurface.cpp */; }; + 01815ED11FE7D59200C35E93 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E771FE7D53700C35E93 /* SurfaceFactory.cpp */; }; + 01815ED21FE7D59200C35E93 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E791FE7D53700C35E93 /* SurfaceManager.cpp */; }; + 01815ED31FE7D59200C35E93 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E7B1FE7D53700C35E93 /* SurfaceStack.cpp */; }; + 01815ED41FE7D59200C35E93 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E7E1FE7D53700C35E93 /* TriangleSurface.cpp */; }; + 01815ED51FE7D59200C35E93 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E811FE7D53700C35E93 /* BaseJoint.cpp */; }; + 01815ED61FE7D59200C35E93 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E831FE7D53700C35E93 /* CircleJoint.cpp */; }; + 01815ED71FE7D59200C35E93 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E871FE7D53700C35E93 /* RadioList.cpp */; }; + 01815ED81FE7D59200C35E93 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */; }; + 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; + 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; + 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; + 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264840192224F90008A7F5 /* tinyxmlparser.cpp */; }; + 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */; }; + 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */; }; + 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */; }; + 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */; }; + 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */; }; + 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; + 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; + 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; + 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC801A09047C0009286E /* CustomSource.cpp */; }; + 3995C20A1C79069B00123352 /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3995C2091C79069B00123352 /* Settings.cpp */; }; + 399953691BD54FF600D5B1F1 /* CrossSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 399953671BD54FF600D5B1F1 /* CrossSource.cpp */; }; E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; + E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; + E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; + E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; }; + E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; }; + E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; }; + E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; }; + E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; }; + E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; }; E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; - E5D631612E039E04B1736E76 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B691BBAB665F94F09B2C276 /* SelSurfaceCmd.cpp */; }; - E6D82F5A7B22E9FB46DEEF15 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 140C0677F9F5A5D3B8A89AC4 /* SelNextVertexCmd.cpp */; }; - EA700B09626C8413C92EF860 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DCC24025AD26B4554B000385 /* Gui.cpp */; }; - F06AE014F869282B7F7CE84C /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4EDCDF597954EF25E7AD416 /* ScaleWidget.cpp */; }; - F285EB3169F1566CA3D93C20 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E112B3AEBEA2C091BF2B40AE /* ofxPanel.cpp */; }; - F3EACD31EE5E141FF66C48BD /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEF2CEBAFFABCFED915AFCE1 /* Info.cpp */; }; - F9A6B58165791682416A1685 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 962C349E8F4E59FF335AB2A6 /* ClearSurfacesCmd.cpp */; }; - FB03F0A6D7866DFC55F519EB /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36F59D2F886152DF4115A218 /* SourcesEditorWidget.cpp */; }; + E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; }; + E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; }; + E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; }; + E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; + E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; }; + E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; }; + E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -130,197 +149,220 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 00756183A9E41665E637AC23 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = AddSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/AddSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - 01DCC0911400F9ACF5B65578 /* ofxXmlSettings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxXmlSettings.h; path = ../../../addons/ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = SOURCE_ROOT; }; - 03FA94CA9F193C816DE4253F /* SurfaceFactory.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceFactory.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceFactory.cpp; sourceTree = SOURCE_ROOT; }; - 03FCF5559C2A6AB79D947767 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TranslateCanvasCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/TranslateCanvasCmd.cpp; sourceTree = SOURCE_ROOT; }; - 0739F09627790055C959BBF4 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; - 0A1DAC09F322AE313A40706D /* ofxToggle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxToggle.h; path = ../../../addons/ofxGui/src/ofxToggle.h; sourceTree = SOURCE_ROOT; }; - 0B4D5D37A2AE7AB30D726C16 /* HexagonSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = HexagonSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/HexagonSurface.h; sourceTree = SOURCE_ROOT; }; - 0B691BBAB665F94F09B2C276 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - 140C0677F9F5A5D3B8A89AC4 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelNextVertexCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelNextVertexCmd.cpp; sourceTree = SOURCE_ROOT; }; - 15C9B02F2CF08112845CD074 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetPresetCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetPresetCmd.cpp; sourceTree = SOURCE_ROOT; }; - 15F2C6477A769C03A56D1401 /* ofxSlider.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSlider.cpp; path = ../../../addons/ofxGui/src/ofxSlider.cpp; sourceTree = SOURCE_ROOT; }; - 16DB3860ECC0D672B08DE71C /* ofxPiMapper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxPiMapper.cpp; path = ../../../addons/ofxPiMapper/src/ofxPiMapper.cpp; sourceTree = SOURCE_ROOT; }; - 17972C3384311464011667D9 /* BaseCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/BaseCmd.h; sourceTree = SOURCE_ROOT; }; - 17E65988300FBD9AAA2CD0CA /* ofxGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGui.h; path = ../../../addons/ofxGui/src/ofxGui.h; sourceTree = SOURCE_ROOT; }; - 18041C8871E17DE3E60BFF95 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvSurfaceVertCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvSurfaceVertCmd.cpp; sourceTree = SOURCE_ROOT; }; - 18385A4F4BC87806616D4F7F /* MediaServer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MediaServer.cpp; path = ../../../addons/ofxPiMapper/src/MediaServer/MediaServer.cpp; sourceTree = SOURCE_ROOT; }; - 18DA1B30717C876AA19CEEC0 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ProjectionEditorWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ProjectionEditorWidget.cpp; sourceTree = SOURCE_ROOT; }; - 1B3B1807E9CFC3FFBA4DBBEF /* Application.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Application.cpp; path = ../../../addons/ofxPiMapper/src/Application/Application.cpp; sourceTree = SOURCE_ROOT; }; - 1BCA96396113AAF56D66C844 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ProjectionMappingMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/ProjectionMappingMode.cpp; sourceTree = SOURCE_ROOT; }; - 1C080561EC053F17BB86A668 /* SurfaceStack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceStack.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceStack.cpp; sourceTree = SOURCE_ROOT; }; - 1C0DA2561397A7DE0246858B /* ofxGuiGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGuiGroup.h; path = ../../../addons/ofxGui/src/ofxGuiGroup.h; sourceTree = SOURCE_ROOT; }; - 1CE256C39E514ABD16FCCB87 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelPrevTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; - 1E73070DAC89F6A796BFF464 /* AddGridColCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = AddGridColCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/AddGridColCmd.h; sourceTree = SOURCE_ROOT; }; - 20F9951441118A70E8D55E13 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DirectoryWatcher.cpp; path = ../../../addons/ofxPiMapper/src/MediaServer/DirectoryWatcher.cpp; sourceTree = SOURCE_ROOT; }; - 21167F26AF957606289D4A4A /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ToggleAnimatedSourceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/ToggleAnimatedSourceCmd.h; sourceTree = SOURCE_ROOT; }; - 23118136CC7FFA920626B6C3 /* TriangleSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TriangleSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/TriangleSurface.h; sourceTree = SOURCE_ROOT; }; - 231337763726D333E0B3D56C /* AddGridColCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = AddGridColCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/AddGridColCmd.cpp; sourceTree = SOURCE_ROOT; }; - 23A4F0C9DE47BA73B3E49EDE /* ScaleWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ScaleWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ScaleWidget.h; sourceTree = SOURCE_ROOT; }; - 25322223D3976D5F33DCCBF6 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvAllTexCoordsCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvAllTexCoordsCmd.h; sourceTree = SOURCE_ROOT; }; - 27453C6FAE9B674FD694508D /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; - 2834D88A62CD23F3DE2C47D1 /* ofxButton.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxButton.h; path = ../../../addons/ofxGui/src/ofxButton.h; sourceTree = SOURCE_ROOT; }; - 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = tinyxml.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxml.cpp; sourceTree = SOURCE_ROOT; }; - 2D2400AC1A64EDE5E990C56C /* GridWarpSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = GridWarpSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/GridWarpSurface.cpp; sourceTree = SOURCE_ROOT; }; - 2DDA3608BED55BC67A9DAFF5 /* CrossSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CrossSource.cpp; path = src/CrossSource.cpp; sourceTree = SOURCE_ROOT; }; - 2F04FFB9BAC4575E214C0DED /* CmdManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CmdManager.h; path = ../../../addons/ofxPiMapper/src/Commands/CmdManager.h; sourceTree = SOURCE_ROOT; }; - 3074E4094F76555C299E5D8E /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ClearSurfacesCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/ClearSurfacesCmd.h; sourceTree = SOURCE_ROOT; }; - 30ED82F4A70B5B95CCEF7744 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelNextSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelNextSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - 3157007392BD114EAB99F470 /* TextureMappingMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TextureMappingMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/TextureMappingMode.h; sourceTree = SOURCE_ROOT; }; - 33DD6E4350FD51C68B7E65F0 /* SettingsLoader.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SettingsLoader.cpp; path = ../../../addons/ofxPiMapper/src/Application/SettingsLoader.cpp; sourceTree = SOURCE_ROOT; }; - 34B45EB44DED0A47FBAD30F4 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ScaleSurfaceFromToCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/ScaleSurfaceFromToCmd.cpp; sourceTree = SOURCE_ROOT; }; - 36F59D2F886152DF4115A218 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SourcesEditorWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SourcesEditorWidget.cpp; sourceTree = SOURCE_ROOT; }; - 378C962CF2DB945F38DE674A /* ofxPiMapper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxPiMapper.h; path = ../../../addons/ofxPiMapper/src/ofxPiMapper.h; sourceTree = SOURCE_ROOT; }; - 37E7F66B151AB6A0AB6FC244 /* Info.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Info.h; path = ../../../addons/ofxPiMapper/src/Info/Info.h; sourceTree = SOURCE_ROOT; }; - 3B043509B19E37C383D7CA87 /* PresentationMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = PresentationMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/PresentationMode.h; sourceTree = SOURCE_ROOT; }; - 3B29C3846BA06080344C1D1E /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelPrevVertexCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevVertexCmd.cpp; sourceTree = SOURCE_ROOT; }; - 3BD72CBAFD427FC6E9F164D2 /* OMXPlayerCache.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OMXPlayerCache.h; path = ../../../addons/ofxPiMapper/src/Sources/OMXPlayerCache.h; sourceTree = SOURCE_ROOT; }; - 3BD822DBD11904D1D6E27E76 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TextureHighlightWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureHighlightWidget.h; sourceTree = SOURCE_ROOT; }; - 3DF2D82EA37D8C7A5F686EA5 /* TriangleSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TriangleSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/TriangleSurface.cpp; sourceTree = SOURCE_ROOT; }; - 3E4A0386460638A781A7AC84 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = AddGridRowCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/AddGridRowCmd.cpp; sourceTree = SOURCE_ROOT; }; - 4048CA09E6AAB5F673CBD2F0 /* RadioList.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RadioList.cpp; path = ../../../addons/ofxPiMapper/src/UserInterface/RadioList.cpp; sourceTree = SOURCE_ROOT; }; - 4130052A043CF3D3C2BA943A /* EditorType.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = EditorType.h; path = ../../../addons/ofxPiMapper/src/UserInterface/EditorType.h; sourceTree = SOURCE_ROOT; }; - 413E846B881CCADC897A8A40 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TextureEditorWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureEditorWidget.cpp; sourceTree = SOURCE_ROOT; }; - 4244A1B9B55BD7BA7ED2F547 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TogglePerspectiveCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/TogglePerspectiveCmd.h; sourceTree = SOURCE_ROOT; }; - 4245228145B1AA737F49CF14 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SourceSelectionMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/SourceSelectionMode.cpp; sourceTree = SOURCE_ROOT; }; - 438B20A2C548E18384498186 /* LayerPanelWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = LayerPanelWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/LayerPanelWidget.h; sourceTree = SOURCE_ROOT; }; - 47AB6134D2AB2F3EB10096A3 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelPrevVertexCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevVertexCmd.h; sourceTree = SOURCE_ROOT; }; - 49BE2D8F2A2A57F4EBF83FF4 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetTexMapDrawModeCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetTexMapDrawModeCmd.cpp; sourceTree = SOURCE_ROOT; }; - 4A0800123A129E9BC12ED207 /* Settings.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Settings.cpp; path = src/Settings.cpp; sourceTree = SOURCE_ROOT; }; - 4FFBE499412CC8DD07163E91 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetNextSourceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetNextSourceCmd.cpp; sourceTree = SOURCE_ROOT; }; - 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxXmlSettings.cpp; path = ../../../addons/ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = SOURCE_ROOT; }; - 5235D939D249EAF47F9A5EB5 /* SettingsLoader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SettingsLoader.h; path = ../../../addons/ofxPiMapper/src/Application/SettingsLoader.h; sourceTree = SOURCE_ROOT; }; - 52AFA1F08C420992CAAAE648 /* ofxSlider.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSlider.h; path = ../../../addons/ofxGui/src/ofxSlider.h; sourceTree = SOURCE_ROOT; }; - 5407451FA68C27B2AAE644A6 /* VideoSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = VideoSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/VideoSource.cpp; sourceTree = SOURCE_ROOT; }; - 56A68D8E68FF141B5EB1ADF6 /* SetSourceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetSourceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetSourceCmd.h; sourceTree = SOURCE_ROOT; }; - 57990D37D728C5711AACBA9F /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = LayerPanelWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/LayerPanelWidget.cpp; sourceTree = SOURCE_ROOT; }; - 57D73BCD8A871590F140EFF6 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ApplicationBaseMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/ApplicationBaseMode.h; sourceTree = SOURCE_ROOT; }; - 5AB104FC7812B4F42B8E1540 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TranslateCanvasCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/TranslateCanvasCmd.h; sourceTree = SOURCE_ROOT; }; - 5D020B9B28609D071E21BB76 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ToggleAnimatedSourceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/ToggleAnimatedSourceCmd.cpp; sourceTree = SOURCE_ROOT; }; - 5EBDBF5E7887C574E1FCC1B5 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = StartDragSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/StartDragSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - 60F40691CD9DE4DEE1768FE9 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SaveTexCoordPosCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SaveTexCoordPosCmd.cpp; sourceTree = SOURCE_ROOT; }; - 61291E56B7882C9E9B8F119B /* ImageSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ImageSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/ImageSource.cpp; sourceTree = SOURCE_ROOT; }; - 61481FB831430E35A18ABD02 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvLayerDnCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerDnCmd.h; sourceTree = SOURCE_ROOT; }; - 62C9C3E62D4BEF04CF54C031 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ScaleSurfaceFromToCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/ScaleSurfaceFromToCmd.h; sourceTree = SOURCE_ROOT; }; - 62F01592304CB7995200EF7B /* CircleJoint.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CircleJoint.cpp; path = ../../../addons/ofxPiMapper/src/UserInterface/CircleJoint.cpp; sourceTree = SOURCE_ROOT; }; - 64156CB2D856E4CE0FBBED96 /* PresentationMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = PresentationMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/PresentationMode.cpp; sourceTree = SOURCE_ROOT; }; - 655142313A378162E3929785 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TogglePerspectiveCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/TogglePerspectiveCmd.cpp; sourceTree = SOURCE_ROOT; }; - 6592BB3592290B34832D7607 /* SurfaceStack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceStack.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceStack.h; sourceTree = SOURCE_ROOT; }; - 6595C215972AFFC7EE685F5A /* SourceType.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourceType.h; path = ../../../addons/ofxPiMapper/src/Sources/SourceType.h; sourceTree = SOURCE_ROOT; }; - 65DBA05D19177D2853D54196 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DeselectSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/DeselectSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - 69A4D26FC0AD01A86571540D /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceHighlightWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SurfaceHighlightWidget.cpp; sourceTree = SOURCE_ROOT; }; - 6DF54314CF2B45BF195B84C6 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelPrevSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - 6E80EE6FB0CC304A6CA287BB /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DeselectSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/DeselectSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - 718E523D4BDDCFAC394B3EA5 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DeselectTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/DeselectTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; - 7344B3B35CD0188D1283EC59 /* SurfaceManager.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceManager.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceManager.h; sourceTree = SOURCE_ROOT; }; - 74CA4C78136F233FB90B7D3E /* RmGridRowCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RmGridRowCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/RmGridRowCmd.h; sourceTree = SOURCE_ROOT; }; - 76B40246C8B90C1CA4074BB7 /* CustomSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CustomSource.cpp; path = src/CustomSource.cpp; sourceTree = SOURCE_ROOT; }; - 775FD891C1E381F87BF33C82 /* AddGridRowCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = AddGridRowCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/AddGridRowCmd.h; sourceTree = SOURCE_ROOT; }; - 784FFEB8D108EC916343AB97 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelNextTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelNextTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; - 78D67A00EB899FAC09430597 /* ofxLabel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxLabel.cpp; path = ../../../addons/ofxGui/src/ofxLabel.cpp; sourceTree = SOURCE_ROOT; }; - 79A9ED756DB70790A67E3EF8 /* SelVertexCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelVertexCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelVertexCmd.h; sourceTree = SOURCE_ROOT; }; - 7A3290FC65714D0C4D02B8BA /* Gui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Gui.h; path = ../../../addons/ofxPiMapper/src/Gui/Gui.h; sourceTree = SOURCE_ROOT; }; - 7C89C324499F9541394245C9 /* DirectoryWatcher.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DirectoryWatcher.h; path = ../../../addons/ofxPiMapper/src/MediaServer/DirectoryWatcher.h; sourceTree = SOURCE_ROOT; }; - 7D386994DF359F3BD1E66480 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvSelectionCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvSelectionCmd.cpp; sourceTree = SOURCE_ROOT; }; - 7E78D1B2A6DB0856BF8ED1FE /* BaseJoint.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = BaseJoint.cpp; path = ../../../addons/ofxPiMapper/src/UserInterface/BaseJoint.cpp; sourceTree = SOURCE_ROOT; }; - 7F58FFED7FBFC49573FF65E4 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetSourceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetSourceCmd.cpp; sourceTree = SOURCE_ROOT; }; - 7FD330C204479B5A5021D286 /* SourceSelectionMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourceSelectionMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/SourceSelectionMode.h; sourceTree = SOURCE_ROOT; }; - 802251BAF1B35B1D67B32FD0 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSliderGroup.cpp; path = ../../../addons/ofxGui/src/ofxSliderGroup.cpp; sourceTree = SOURCE_ROOT; }; - 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = tinyxmlerror.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxmlerror.cpp; sourceTree = SOURCE_ROOT; }; - 836B103542A52C63B004410C /* SurfaceManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SurfaceManager.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceManager.cpp; sourceTree = SOURCE_ROOT; }; - 851AF875A70187105CA91C1A /* BaseJoint.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseJoint.h; path = ../../../addons/ofxPiMapper/src/UserInterface/BaseJoint.h; sourceTree = SOURCE_ROOT; }; - 87F26B4B24CBD428AD9EEBAA /* ofxBaseGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxBaseGui.h; path = ../../../addons/ofxGui/src/ofxBaseGui.h; sourceTree = SOURCE_ROOT; }; - 89449E3044D456F7DE7BEA14 /* ofxPanel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxPanel.h; path = ../../../addons/ofxGui/src/ofxPanel.h; sourceTree = SOURCE_ROOT; }; - 8D3CB0B9A827AFA479349BBE /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SetApplicationModeCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SetApplicationModeCmd.cpp; sourceTree = SOURCE_ROOT; }; - 8F41EDB76644426680B2FA2B /* MvTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; - 906696B07A716E4057D32B1E /* QuadSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = QuadSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/QuadSurface.h; sourceTree = SOURCE_ROOT; }; - 907C5B5E104864A2D3A25745 /* ofxToggle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxToggle.cpp; path = ../../../addons/ofxGui/src/ofxToggle.cpp; sourceTree = SOURCE_ROOT; }; - 912C6A870E22496CEA43AC85 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetTexMapDrawModeCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetTexMapDrawModeCmd.h; sourceTree = SOURCE_ROOT; }; - 928068952444E81EF818B25C /* Application.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Application.h; path = ../../../addons/ofxPiMapper/src/Application/Application.h; sourceTree = SOURCE_ROOT; }; - 933CAE5B2DEC9DDABEA95E34 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvLayerUpCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerUpCmd.h; sourceTree = SOURCE_ROOT; }; - 941AD8B39C28D08B9F31077A /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TextureHighlightWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureHighlightWidget.cpp; sourceTree = SOURCE_ROOT; }; - 94DC897871B221F060A6A70F /* GuiBaseWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = GuiBaseWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/GuiBaseWidget.h; sourceTree = SOURCE_ROOT; }; - 9604B925D32EE39065747725 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxBaseGui.cpp; path = ../../../addons/ofxGui/src/ofxBaseGui.cpp; sourceTree = SOURCE_ROOT; }; - 962C349E8F4E59FF335AB2A6 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ClearSurfacesCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/ClearSurfacesCmd.cpp; sourceTree = SOURCE_ROOT; }; - 9631F04A0875ADEB45970DE8 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ApplicationBaseMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/ApplicationBaseMode.cpp; sourceTree = SOURCE_ROOT; }; - 9B4D98CCBAB57278C96169D4 /* CircleJoint.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CircleJoint.h; path = ../../../addons/ofxPiMapper/src/UserInterface/CircleJoint.h; sourceTree = SOURCE_ROOT; }; - 9F39733296358C3B0F85BB15 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceHighlightWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SurfaceHighlightWidget.h; sourceTree = SOURCE_ROOT; }; - A1A567FBAE494BF84E54E83C /* Settings.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Settings.h; path = src/Settings.h; sourceTree = SOURCE_ROOT; }; - A2282B1E05458C3B2BBCE568 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelVertexCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelVertexCmd.cpp; sourceTree = SOURCE_ROOT; }; - A50F23D868C48DF9799BC788 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RmGridColCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/RmGridColCmd.cpp; sourceTree = SOURCE_ROOT; }; - A5CBAE57D2ADED1CAB6123AF /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelNextTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelNextTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; - AB4132974E14024E74E320F5 /* BaseSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = BaseSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/BaseSource.cpp; sourceTree = SOURCE_ROOT; }; - AB96773D1B378AE8018EA33E /* TextureEditorWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TextureEditorWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureEditorWidget.h; sourceTree = SOURCE_ROOT; }; - B0B66559E2F530AE989510C0 /* CustomSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CustomSource.h; path = src/CustomSource.h; sourceTree = SOURCE_ROOT; }; - B16277019B0C4B684E1B063E /* TextureMappingMode.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = TextureMappingMode.cpp; path = ../../../addons/ofxPiMapper/src/Application/Modes/TextureMappingMode.cpp; sourceTree = SOURCE_ROOT; }; - B178ED5CA7F76AAA6E49E191 /* SurfaceType.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceType.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceType.h; sourceTree = SOURCE_ROOT; }; - B21E7E5F548EEA92F368040B /* tinyxml.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = tinyxml.h; path = ../../../addons/ofxXmlSettings/libs/tinyxml.h; sourceTree = SOURCE_ROOT; }; - B323D7489A7B26A63443444F /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = AddSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/AddSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - B390802358C73D3757AC9B4E /* BaseSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseSource.h; path = ../../../addons/ofxPiMapper/src/Sources/BaseSource.h; sourceTree = SOURCE_ROOT; }; - B562DE1EEC28EE801EB4F483 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourcesEditorWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/SourcesEditorWidget.h; sourceTree = SOURCE_ROOT; }; - B5C793F4FEA3AA065347B61C /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelPrevSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - B7C308F8B76FCB909581A580 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RmSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/RmSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - B7DD3DE526EF824DDAF42B09 /* GuiMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = GuiMode.h; path = ../../../addons/ofxPiMapper/src/UserInterface/GuiMode.h; sourceTree = SOURCE_ROOT; }; - B87C60311EC1FE841C1ECD89 /* ofxLabel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxLabel.h; path = ../../../addons/ofxGui/src/ofxLabel.h; sourceTree = SOURCE_ROOT; }; - B9ECBF061BABECA9C2341372 /* QuadSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = QuadSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/QuadSurface.cpp; sourceTree = SOURCE_ROOT; }; - BA5B6BB795E2A24B2DBA22BD /* SelNextVertexCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelNextVertexCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelNextVertexCmd.h; sourceTree = SOURCE_ROOT; }; - BA65337B3E631788AE2D018B /* RmGridColCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RmGridColCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/RmGridColCmd.h; sourceTree = SOURCE_ROOT; }; - BCB571865BB25BC586CF80EC /* SetPresetCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetPresetCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetPresetCmd.h; sourceTree = SOURCE_ROOT; }; - BCBB74B9531974E1D5DA019B /* HexagonSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = HexagonSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/HexagonSurface.cpp; sourceTree = SOURCE_ROOT; }; - BDBE053980FA01FAD543D782 /* CmdManager.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = CmdManager.cpp; path = ../../../addons/ofxPiMapper/src/Commands/CmdManager.cpp; sourceTree = SOURCE_ROOT; }; - C27244405258CD6DF424D0F3 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ProjectionEditorWidget.h; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ProjectionEditorWidget.h; sourceTree = SOURCE_ROOT; }; - C2D03F683EE589F55D47CFFD /* VideoSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = VideoSource.h; path = ../../../addons/ofxPiMapper/src/Sources/VideoSource.h; sourceTree = SOURCE_ROOT; }; - C2E5DC1692A11AF5D981F8FA /* Mode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = Mode.h; path = ../../../addons/ofxPiMapper/src/Mode.h; sourceTree = SOURCE_ROOT; }; - C3E8D103B72D02E063B29082 /* GridWarpSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = GridWarpSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/GridWarpSurface.h; sourceTree = SOURCE_ROOT; }; - C61C1F4F1A1ED2660B1D6EDC /* FboSource.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = FboSource.cpp; path = ../../../addons/ofxPiMapper/src/Sources/FboSource.cpp; sourceTree = SOURCE_ROOT; }; - C656C28252AD5E9E09FA2162 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DuplicateSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/DuplicateSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - C70D8946940288799E82131E /* ofxSliderGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSliderGroup.h; path = ../../../addons/ofxGui/src/ofxSliderGroup.h; sourceTree = SOURCE_ROOT; }; - C88333E71C9457E441C33474 /* ofxButton.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxButton.cpp; path = ../../../addons/ofxGui/src/ofxButton.cpp; sourceTree = SOURCE_ROOT; }; - CB4461BD6FC059D946144727 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - D05D5FBB2B2779B022A5DD04 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SelTexCoordCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SelTexCoordCmd.h; sourceTree = SOURCE_ROOT; }; - D463EA9CC53D21A44CB9D6EF /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SaveTexCoordPosCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SaveTexCoordPosCmd.h; sourceTree = SOURCE_ROOT; }; - D4CFAEBB593AD070E04F106C /* MvSelectionCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvSelectionCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvSelectionCmd.h; sourceTree = SOURCE_ROOT; }; - D565A612B1DF2837C94A6081 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MvSurfaceVertCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/MvSurfaceVertCmd.h; sourceTree = SOURCE_ROOT; }; - D58C36B60BB72C7336042FB9 /* SurfaceFactory.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SurfaceFactory.h; path = ../../../addons/ofxPiMapper/src/Surfaces/SurfaceFactory.h; sourceTree = SOURCE_ROOT; }; - D627BF76B06B3FF4F1516C5E /* HomographyHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = HomographyHelper.h; path = ../../../addons/ofxPiMapper/src/Utils/HomographyHelper.h; sourceTree = SOURCE_ROOT; }; - D7287CBE5600FEE9EE1B1AEA /* RmSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RmSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/RmSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - DBAFA0B7AFEA589CA5167204 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvAllTexCoordsCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvAllTexCoordsCmd.cpp; sourceTree = SOURCE_ROOT; }; - DC69ACA83F14B8A2AE20197B /* RadioList.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = RadioList.h; path = ../../../addons/ofxPiMapper/src/UserInterface/RadioList.h; sourceTree = SOURCE_ROOT; }; - DC8107E8E56AFFB933FE8962 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ProjectionMappingMode.h; path = ../../../addons/ofxPiMapper/src/Application/Modes/ProjectionMappingMode.h; sourceTree = SOURCE_ROOT; }; - DCC24025AD26B4554B000385 /* Gui.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Gui.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Gui.cpp; sourceTree = SOURCE_ROOT; }; - E112B3AEBEA2C091BF2B40AE /* ofxPanel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxPanel.cpp; path = ../../../addons/ofxGui/src/ofxPanel.cpp; sourceTree = SOURCE_ROOT; }; - E2333CF877EE99EBE86F4B0F /* HomographyHelper.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = HomographyHelper.cpp; path = ../../../addons/ofxPiMapper/src/Utils/HomographyHelper.cpp; sourceTree = SOURCE_ROOT; }; + 01815DE01FE7D53700C35E93 /* Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; + 01815DE11FE7D53700C35E93 /* Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; + 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; + 01815DE41FE7D53700C35E93 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; + 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; + 01815DE61FE7D53700C35E93 /* PresentationMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; + 01815DE71FE7D53700C35E93 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; + 01815DE81FE7D53700C35E93 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; + 01815DE91FE7D53700C35E93 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; + 01815DEA1FE7D53700C35E93 /* SourceSelectionMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; + 01815DEB1FE7D53700C35E93 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; + 01815DEC1FE7D53700C35E93 /* TextureMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; + 01815DED1FE7D53700C35E93 /* SettingsLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; + 01815DEE1FE7D53700C35E93 /* SettingsLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; + 01815DF01FE7D53700C35E93 /* AddGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; + 01815DF11FE7D53700C35E93 /* AddGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; + 01815DF21FE7D53700C35E93 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; + 01815DF31FE7D53700C35E93 /* AddGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; + 01815DF41FE7D53700C35E93 /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; + 01815DF51FE7D53700C35E93 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; + 01815DF61FE7D53700C35E93 /* BaseCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; + 01815DF71FE7D53700C35E93 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; + 01815DF81FE7D53700C35E93 /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; + 01815DF91FE7D53700C35E93 /* CmdManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; + 01815DFA1FE7D53700C35E93 /* CmdManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; + 01815DFB1FE7D53700C35E93 /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; + 01815DFC1FE7D53700C35E93 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; + 01815DFD1FE7D53700C35E93 /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; + 01815DFE1FE7D53700C35E93 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; + 01815DFF1FE7D53700C35E93 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; + 01815E001FE7D53700C35E93 /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; + 01815E011FE7D53700C35E93 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; + 01815E021FE7D53700C35E93 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; + 01815E031FE7D53700C35E93 /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; + 01815E041FE7D53700C35E93 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; + 01815E051FE7D53700C35E93 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; + 01815E061FE7D53700C35E93 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; + 01815E071FE7D53700C35E93 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; + 01815E081FE7D53700C35E93 /* MvSelectionCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; + 01815E091FE7D53700C35E93 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; + 01815E0A1FE7D53700C35E93 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; + 01815E0B1FE7D53700C35E93 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; + 01815E0C1FE7D53700C35E93 /* MvTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; + 01815E0D1FE7D53700C35E93 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; + 01815E0E1FE7D53700C35E93 /* RmGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; + 01815E0F1FE7D53700C35E93 /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; + 01815E101FE7D53700C35E93 /* RmGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; + 01815E111FE7D53700C35E93 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; + 01815E121FE7D53700C35E93 /* RmSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; + 01815E131FE7D53700C35E93 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; + 01815E141FE7D53700C35E93 /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; + 01815E151FE7D53700C35E93 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; + 01815E161FE7D53700C35E93 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; + 01815E171FE7D53700C35E93 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; + 01815E181FE7D53700C35E93 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; + 01815E191FE7D53700C35E93 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; + 01815E1A1FE7D53700C35E93 /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; + 01815E1B1FE7D53700C35E93 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; + 01815E1C1FE7D53700C35E93 /* SelNextVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; + 01815E1D1FE7D53700C35E93 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; + 01815E1E1FE7D53700C35E93 /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; + 01815E1F1FE7D53700C35E93 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; + 01815E201FE7D53700C35E93 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; + 01815E211FE7D53700C35E93 /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; + 01815E221FE7D53700C35E93 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; + 01815E231FE7D53700C35E93 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; + 01815E241FE7D53700C35E93 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; + 01815E251FE7D53700C35E93 /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; + 01815E261FE7D53700C35E93 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; + 01815E271FE7D53700C35E93 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; + 01815E281FE7D53700C35E93 /* SelVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; + 01815E291FE7D53700C35E93 /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; + 01815E2A1FE7D53700C35E93 /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; + 01815E2B1FE7D53700C35E93 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; + 01815E2C1FE7D53700C35E93 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; + 01815E2D1FE7D53700C35E93 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; + 01815E2E1FE7D53700C35E93 /* SetPresetCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; + 01815E2F1FE7D53700C35E93 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; + 01815E301FE7D53700C35E93 /* SetSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; + 01815E311FE7D53700C35E93 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; + 01815E321FE7D53700C35E93 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; + 01815E331FE7D53700C35E93 /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; + 01815E341FE7D53700C35E93 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; + 01815E351FE7D53700C35E93 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; + 01815E361FE7D53700C35E93 /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; + 01815E371FE7D53700C35E93 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; + 01815E381FE7D53700C35E93 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; + 01815E391FE7D53700C35E93 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; + 01815E3A1FE7D53700C35E93 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; + 01815E3C1FE7D53700C35E93 /* Gui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; + 01815E3D1FE7D53700C35E93 /* Gui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; + 01815E3F1FE7D53700C35E93 /* GuiBaseWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; + 01815E401FE7D53700C35E93 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; + 01815E411FE7D53700C35E93 /* LayerPanelWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; + 01815E421FE7D53700C35E93 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; + 01815E431FE7D53700C35E93 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; + 01815E441FE7D53700C35E93 /* ScaleWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; + 01815E451FE7D53700C35E93 /* ScaleWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; + 01815E461FE7D53700C35E93 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; + 01815E471FE7D53700C35E93 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; + 01815E481FE7D53700C35E93 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; + 01815E491FE7D53700C35E93 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; + 01815E4A1FE7D53700C35E93 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; + 01815E4B1FE7D53700C35E93 /* TextureEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; + 01815E4C1FE7D53700C35E93 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; + 01815E4D1FE7D53700C35E93 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; + 01815E4F1FE7D53700C35E93 /* Info.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; + 01815E501FE7D53700C35E93 /* Info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; + 01815E521FE7D53700C35E93 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; + 01815E531FE7D53700C35E93 /* DirectoryWatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; + 01815E541FE7D53700C35E93 /* MediaServer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; + 01815E551FE7D53700C35E93 /* MediaServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; + 01815E561FE7D53700C35E93 /* Mode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; + 01815E571FE7D53700C35E93 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; + 01815E581FE7D53700C35E93 /* ofxPiMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; + 01815E5A1FE7D53700C35E93 /* BaseSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; + 01815E5B1FE7D53700C35E93 /* BaseSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; + 01815E5C1FE7D53700C35E93 /* FboSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; + 01815E5D1FE7D53700C35E93 /* FboSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; + 01815E5E1FE7D53700C35E93 /* ImageSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; + 01815E5F1FE7D53700C35E93 /* ImageSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; + 01815E601FE7D53700C35E93 /* magSlide.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlide.cpp; sourceTree = ""; }; + 01815E611FE7D53700C35E93 /* magSlide.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlide.h; sourceTree = ""; }; + 01815E621FE7D53700C35E93 /* magSlideShowSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideShowSource.cpp; sourceTree = ""; }; + 01815E631FE7D53700C35E93 /* magSlideShowSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideShowSource.h; sourceTree = ""; }; + 01815E641FE7D53700C35E93 /* magSlideTransition.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransition.cpp; sourceTree = ""; }; + 01815E651FE7D53700C35E93 /* magSlideTransition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransition.h; sourceTree = ""; }; + 01815E661FE7D53700C35E93 /* magSlideTransitionFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransitionFactory.cpp; sourceTree = ""; }; + 01815E671FE7D53700C35E93 /* magSlideTransitionFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransitionFactory.h; sourceTree = ""; }; + 01815E681FE7D53700C35E93 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; + 01815E691FE7D53700C35E93 /* OMXPlayerCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; + 01815E6A1FE7D53700C35E93 /* SourceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; + 01815E6B1FE7D53700C35E93 /* SourceTypeHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceTypeHelper.h; sourceTree = ""; }; + 01815E6C1FE7D53700C35E93 /* VideoSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; + 01815E6D1FE7D53700C35E93 /* VideoSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; + 01815E6F1FE7D53700C35E93 /* BaseSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; + 01815E701FE7D53700C35E93 /* BaseSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; + 01815E711FE7D53700C35E93 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; + 01815E721FE7D53700C35E93 /* GridWarpSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; + 01815E731FE7D53700C35E93 /* HexagonSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; + 01815E741FE7D53700C35E93 /* HexagonSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; + 01815E751FE7D53700C35E93 /* QuadSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; + 01815E761FE7D53700C35E93 /* QuadSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; + 01815E771FE7D53700C35E93 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; + 01815E781FE7D53700C35E93 /* SurfaceFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; + 01815E791FE7D53700C35E93 /* SurfaceManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; + 01815E7A1FE7D53700C35E93 /* SurfaceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; + 01815E7B1FE7D53700C35E93 /* SurfaceStack.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; + 01815E7C1FE7D53700C35E93 /* SurfaceStack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; + 01815E7D1FE7D53700C35E93 /* SurfaceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; + 01815E7E1FE7D53700C35E93 /* TriangleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; + 01815E7F1FE7D53700C35E93 /* TriangleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; + 01815E811FE7D53700C35E93 /* BaseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; + 01815E821FE7D53700C35E93 /* BaseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; + 01815E831FE7D53700C35E93 /* CircleJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; + 01815E841FE7D53700C35E93 /* CircleJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; + 01815E851FE7D53700C35E93 /* EditorType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; + 01815E861FE7D53700C35E93 /* GuiMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; + 01815E871FE7D53700C35E93 /* RadioList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; + 01815E881FE7D53700C35E93 /* RadioList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; + 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; + 01815E8B1FE7D53700C35E93 /* HomographyHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; + 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofxXmlSettings.cpp; path = ../../ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = ""; }; + 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxXmlSettings.h; path = ../../ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = ""; }; + 3926483D192224F90008A7F5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; + 3926483E192224F90008A7F5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; + 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; + 39264840192224F90008A7F5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; + 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; + 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; + 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; + 3933D5C519BB87BD000ACA55 /* ofxButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; + 3933D5C619BB87BD000ACA55 /* ofxGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; + 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; + 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; + 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; + 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; + 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; + 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; + 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; + 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; + 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; + 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; + 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; + 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; + 397EFC801A09047C0009286E /* CustomSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CustomSource.cpp; sourceTree = ""; }; + 397EFC811A09047C0009286E /* CustomSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomSource.h; sourceTree = ""; }; + 3995C2081C79069B00123352 /* Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; + 3995C2091C79069B00123352 /* Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Settings.cpp; sourceTree = ""; }; + 399953671BD54FF600D5B1F1 /* CrossSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrossSource.cpp; sourceTree = ""; }; + 399953681BD54FF600D5B1F1 /* CrossSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossSource.h; sourceTree = ""; }; + BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; + E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = exampleDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; + E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; - E52D4207C299D5886C8FD2C7 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvLayerUpCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerUpCmd.cpp; sourceTree = SOURCE_ROOT; }; - E5949E35CC6642F2FDFFAAE5 /* ImageSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ImageSource.h; path = ../../../addons/ofxPiMapper/src/Sources/ImageSource.h; sourceTree = SOURCE_ROOT; }; - E8CE817DF3028A4345376E7D /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = DeselectTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/DeselectTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; - E8DA47AF2B265F778E74D4DA /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = StartDragSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/StartDragSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - EC481BAB32B250D3EA41AF9E /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = MvLayerDnCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/MvLayerDnCmd.cpp; sourceTree = SOURCE_ROOT; }; - ECF8674C7975F1063C5E30CA /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxGuiGroup.cpp; path = ../../../addons/ofxGui/src/ofxGuiGroup.cpp; sourceTree = SOURCE_ROOT; }; - EE95BF87E883491E7CC9B6EC /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = DuplicateSurfaceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/DuplicateSurfaceCmd.h; sourceTree = SOURCE_ROOT; }; - EEF2CEBAFFABCFED915AFCE1 /* Info.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = Info.cpp; path = ../../../addons/ofxPiMapper/src/Info/Info.cpp; sourceTree = SOURCE_ROOT; }; - EFB1537A5DBC298C759BFC62 /* SourceTypeHelper.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SourceTypeHelper.h; path = ../../../addons/ofxPiMapper/src/Sources/SourceTypeHelper.h; sourceTree = SOURCE_ROOT; }; - F05CE9A6503C7CBCC46403C4 /* FboSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = FboSource.h; path = ../../../addons/ofxPiMapper/src/Sources/FboSource.h; sourceTree = SOURCE_ROOT; }; - F0A9FE4B6FB6C958B72B72CD /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetApplicationModeCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetApplicationModeCmd.h; sourceTree = SOURCE_ROOT; }; - F27EBFBACAC7B29B2B7CA500 /* BaseSurface.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = BaseSurface.h; path = ../../../addons/ofxPiMapper/src/Surfaces/BaseSurface.h; sourceTree = SOURCE_ROOT; }; - F2C0EE541190D47BF5911C0A /* BaseSurface.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = BaseSurface.cpp; path = ../../../addons/ofxPiMapper/src/Surfaces/BaseSurface.cpp; sourceTree = SOURCE_ROOT; }; - F3538B8AF69CAB7C215FA1EF /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = RmGridRowCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/RmGridRowCmd.cpp; sourceTree = SOURCE_ROOT; }; - F3BC84F0441C01B0A760508D /* CrossSource.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = CrossSource.h; path = src/CrossSource.h; sourceTree = SOURCE_ROOT; }; - F4EDCDF597954EF25E7AD416 /* ScaleWidget.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ScaleWidget.cpp; path = ../../../addons/ofxPiMapper/src/Gui/Widgets/ScaleWidget.cpp; sourceTree = SOURCE_ROOT; }; - F7B0806EEA8012D629BE363C /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OMXPlayerCache.cpp; path = ../../../addons/ofxPiMapper/src/Sources/OMXPlayerCache.cpp; sourceTree = SOURCE_ROOT; }; - F7E88D3956480E0CBAA21641 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelPrevTexCoordCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelPrevTexCoordCmd.cpp; sourceTree = SOURCE_ROOT; }; - FA2E4E947E8D358C28D903C0 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = SetNextSourceCmd.h; path = ../../../addons/ofxPiMapper/src/Commands/SetNextSourceCmd.h; sourceTree = SOURCE_ROOT; }; - FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = tinyxmlparser.cpp; path = ../../../addons/ofxXmlSettings/libs/tinyxmlparser.cpp; sourceTree = SOURCE_ROOT; }; - FC98A68C64BFC941D0B31EE9 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = SelNextSurfaceCmd.cpp; path = ../../../addons/ofxPiMapper/src/Commands/SelNextSurfaceCmd.cpp; sourceTree = SOURCE_ROOT; }; - FCB5A622161B43A8154687F8 /* MediaServer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MediaServer.h; path = ../../../addons/ofxPiMapper/src/MediaServer/MediaServer.h; sourceTree = SOURCE_ROOT; }; + E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; + E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; + E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -328,264 +370,394 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */, + E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */, + E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */, E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, + E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */, + E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */, + E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */, + E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */, + E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */, + E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */, + E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */, + E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */, + E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */, + E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */, + E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */, + E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0775EF7214A04F1C3C936CCE /* Widgets */ = { + 01815DDE1FE7D53700C35E93 /* src */ = { isa = PBXGroup; children = ( - 94DC897871B221F060A6A70F /* GuiBaseWidget.h */, - 57990D37D728C5711AACBA9F /* LayerPanelWidget.cpp */, - 438B20A2C548E18384498186 /* LayerPanelWidget.h */, - 18DA1B30717C876AA19CEEC0 /* ProjectionEditorWidget.cpp */, - C27244405258CD6DF424D0F3 /* ProjectionEditorWidget.h */, - F4EDCDF597954EF25E7AD416 /* ScaleWidget.cpp */, - 23A4F0C9DE47BA73B3E49EDE /* ScaleWidget.h */, - 36F59D2F886152DF4115A218 /* SourcesEditorWidget.cpp */, - B562DE1EEC28EE801EB4F483 /* SourcesEditorWidget.h */, - 69A4D26FC0AD01A86571540D /* SurfaceHighlightWidget.cpp */, - 9F39733296358C3B0F85BB15 /* SurfaceHighlightWidget.h */, - 413E846B881CCADC897A8A40 /* TextureEditorWidget.cpp */, - AB96773D1B378AE8018EA33E /* TextureEditorWidget.h */, - 941AD8B39C28D08B9F31077A /* TextureHighlightWidget.cpp */, - 3BD822DBD11904D1D6E27E76 /* TextureHighlightWidget.h */, + 01815DDF1FE7D53700C35E93 /* Application */, + 01815DEF1FE7D53700C35E93 /* Commands */, + 01815E3B1FE7D53700C35E93 /* Gui */, + 01815E4E1FE7D53700C35E93 /* Info */, + 01815E511FE7D53700C35E93 /* MediaServer */, + 01815E561FE7D53700C35E93 /* Mode.h */, + 01815E571FE7D53700C35E93 /* ofxPiMapper.cpp */, + 01815E581FE7D53700C35E93 /* ofxPiMapper.h */, + 01815E591FE7D53700C35E93 /* Sources */, + 01815E6E1FE7D53700C35E93 /* Surfaces */, + 01815E801FE7D53700C35E93 /* UserInterface */, + 01815E891FE7D53700C35E93 /* Utils */, ); - name = Widgets; + name = src; + path = ../src; sourceTree = ""; }; - 1F4FB5C423662B96ADFDCC0B /* ofxXmlSettings */ = { + 01815DDF1FE7D53700C35E93 /* Application */ = { isa = PBXGroup; children = ( - 6ECEF0D76BC33727823EADFF /* src */, - 6E54289412D2D94F45A05113 /* libs */, + 01815DE01FE7D53700C35E93 /* Application.cpp */, + 01815DE11FE7D53700C35E93 /* Application.h */, + 01815DE21FE7D53700C35E93 /* Modes */, + 01815DED1FE7D53700C35E93 /* SettingsLoader.cpp */, + 01815DEE1FE7D53700C35E93 /* SettingsLoader.h */, ); - name = ofxXmlSettings; + path = Application; sourceTree = ""; }; - 3D6840E4DBCF2DED6C755B76 /* Utils */ = { + 01815DE21FE7D53700C35E93 /* Modes */ = { isa = PBXGroup; children = ( - E2333CF877EE99EBE86F4B0F /* HomographyHelper.cpp */, - D627BF76B06B3FF4F1516C5E /* HomographyHelper.h */, + 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */, + 01815DE41FE7D53700C35E93 /* ApplicationBaseMode.h */, + 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */, + 01815DE61FE7D53700C35E93 /* PresentationMode.h */, + 01815DE71FE7D53700C35E93 /* ProjectionMappingMode.cpp */, + 01815DE81FE7D53700C35E93 /* ProjectionMappingMode.h */, + 01815DE91FE7D53700C35E93 /* SourceSelectionMode.cpp */, + 01815DEA1FE7D53700C35E93 /* SourceSelectionMode.h */, + 01815DEB1FE7D53700C35E93 /* TextureMappingMode.cpp */, + 01815DEC1FE7D53700C35E93 /* TextureMappingMode.h */, ); - name = Utils; + path = Modes; sourceTree = ""; }; - 43844FF975EC3DB9B9DDAD73 /* Application */ = { + 01815DEF1FE7D53700C35E93 /* Commands */ = { isa = PBXGroup; children = ( - 1B3B1807E9CFC3FFBA4DBBEF /* Application.cpp */, - 928068952444E81EF818B25C /* Application.h */, - 783422EB3B2FDA36D11DC9CF /* Modes */, - 33DD6E4350FD51C68B7E65F0 /* SettingsLoader.cpp */, - 5235D939D249EAF47F9A5EB5 /* SettingsLoader.h */, + 01815DF01FE7D53700C35E93 /* AddGridColCmd.cpp */, + 01815DF11FE7D53700C35E93 /* AddGridColCmd.h */, + 01815DF21FE7D53700C35E93 /* AddGridRowCmd.cpp */, + 01815DF31FE7D53700C35E93 /* AddGridRowCmd.h */, + 01815DF41FE7D53700C35E93 /* AddSurfaceCmd.cpp */, + 01815DF51FE7D53700C35E93 /* AddSurfaceCmd.h */, + 01815DF61FE7D53700C35E93 /* BaseCmd.h */, + 01815DF71FE7D53700C35E93 /* ClearSurfacesCmd.cpp */, + 01815DF81FE7D53700C35E93 /* ClearSurfacesCmd.h */, + 01815DF91FE7D53700C35E93 /* CmdManager.cpp */, + 01815DFA1FE7D53700C35E93 /* CmdManager.h */, + 01815DFB1FE7D53700C35E93 /* DeselectSurfaceCmd.cpp */, + 01815DFC1FE7D53700C35E93 /* DeselectSurfaceCmd.h */, + 01815DFD1FE7D53700C35E93 /* DeselectTexCoordCmd.cpp */, + 01815DFE1FE7D53700C35E93 /* DeselectTexCoordCmd.h */, + 01815DFF1FE7D53700C35E93 /* DuplicateSurfaceCmd.cpp */, + 01815E001FE7D53700C35E93 /* DuplicateSurfaceCmd.h */, + 01815E011FE7D53700C35E93 /* MvAllTexCoordsCmd.cpp */, + 01815E021FE7D53700C35E93 /* MvAllTexCoordsCmd.h */, + 01815E031FE7D53700C35E93 /* MvLayerDnCmd.cpp */, + 01815E041FE7D53700C35E93 /* MvLayerDnCmd.h */, + 01815E051FE7D53700C35E93 /* MvLayerUpCmd.cpp */, + 01815E061FE7D53700C35E93 /* MvLayerUpCmd.h */, + 01815E071FE7D53700C35E93 /* MvSelectionCmd.cpp */, + 01815E081FE7D53700C35E93 /* MvSelectionCmd.h */, + 01815E091FE7D53700C35E93 /* MvSurfaceVertCmd.cpp */, + 01815E0A1FE7D53700C35E93 /* MvSurfaceVertCmd.h */, + 01815E0B1FE7D53700C35E93 /* MvTexCoordCmd.cpp */, + 01815E0C1FE7D53700C35E93 /* MvTexCoordCmd.h */, + 01815E0D1FE7D53700C35E93 /* RmGridColCmd.cpp */, + 01815E0E1FE7D53700C35E93 /* RmGridColCmd.h */, + 01815E0F1FE7D53700C35E93 /* RmGridRowCmd.cpp */, + 01815E101FE7D53700C35E93 /* RmGridRowCmd.h */, + 01815E111FE7D53700C35E93 /* RmSurfaceCmd.cpp */, + 01815E121FE7D53700C35E93 /* RmSurfaceCmd.h */, + 01815E131FE7D53700C35E93 /* SaveTexCoordPosCmd.cpp */, + 01815E141FE7D53700C35E93 /* SaveTexCoordPosCmd.h */, + 01815E151FE7D53700C35E93 /* ScaleSurfaceFromToCmd.cpp */, + 01815E161FE7D53700C35E93 /* ScaleSurfaceFromToCmd.h */, + 01815E171FE7D53700C35E93 /* SelNextSurfaceCmd.cpp */, + 01815E181FE7D53700C35E93 /* SelNextSurfaceCmd.h */, + 01815E191FE7D53700C35E93 /* SelNextTexCoordCmd.cpp */, + 01815E1A1FE7D53700C35E93 /* SelNextTexCoordCmd.h */, + 01815E1B1FE7D53700C35E93 /* SelNextVertexCmd.cpp */, + 01815E1C1FE7D53700C35E93 /* SelNextVertexCmd.h */, + 01815E1D1FE7D53700C35E93 /* SelPrevSurfaceCmd.cpp */, + 01815E1E1FE7D53700C35E93 /* SelPrevSurfaceCmd.h */, + 01815E1F1FE7D53700C35E93 /* SelPrevTexCoordCmd.cpp */, + 01815E201FE7D53700C35E93 /* SelPrevTexCoordCmd.h */, + 01815E211FE7D53700C35E93 /* SelPrevVertexCmd.cpp */, + 01815E221FE7D53700C35E93 /* SelPrevVertexCmd.h */, + 01815E231FE7D53700C35E93 /* SelSurfaceCmd.cpp */, + 01815E241FE7D53700C35E93 /* SelSurfaceCmd.h */, + 01815E251FE7D53700C35E93 /* SelTexCoordCmd.cpp */, + 01815E261FE7D53700C35E93 /* SelTexCoordCmd.h */, + 01815E271FE7D53700C35E93 /* SelVertexCmd.cpp */, + 01815E281FE7D53700C35E93 /* SelVertexCmd.h */, + 01815E291FE7D53700C35E93 /* SetApplicationModeCmd.cpp */, + 01815E2A1FE7D53700C35E93 /* SetApplicationModeCmd.h */, + 01815E2B1FE7D53700C35E93 /* SetNextSourceCmd.cpp */, + 01815E2C1FE7D53700C35E93 /* SetNextSourceCmd.h */, + 01815E2D1FE7D53700C35E93 /* SetPresetCmd.cpp */, + 01815E2E1FE7D53700C35E93 /* SetPresetCmd.h */, + 01815E2F1FE7D53700C35E93 /* SetSourceCmd.cpp */, + 01815E301FE7D53700C35E93 /* SetSourceCmd.h */, + 01815E311FE7D53700C35E93 /* SetTexMapDrawModeCmd.cpp */, + 01815E321FE7D53700C35E93 /* SetTexMapDrawModeCmd.h */, + 01815E331FE7D53700C35E93 /* StartDragSurfaceCmd.cpp */, + 01815E341FE7D53700C35E93 /* StartDragSurfaceCmd.h */, + 01815E351FE7D53700C35E93 /* ToggleAnimatedSourceCmd.cpp */, + 01815E361FE7D53700C35E93 /* ToggleAnimatedSourceCmd.h */, + 01815E371FE7D53700C35E93 /* TogglePerspectiveCmd.cpp */, + 01815E381FE7D53700C35E93 /* TogglePerspectiveCmd.h */, + 01815E391FE7D53700C35E93 /* TranslateCanvasCmd.cpp */, + 01815E3A1FE7D53700C35E93 /* TranslateCanvasCmd.h */, ); - name = Application; + path = Commands; sourceTree = ""; }; - 480A780D8D0308AE4A368801 /* ofxGui */ = { + 01815E3B1FE7D53700C35E93 /* Gui */ = { isa = PBXGroup; children = ( - A763ED608B35AE3310251DEE /* src */, + 01815E3C1FE7D53700C35E93 /* Gui.cpp */, + 01815E3D1FE7D53700C35E93 /* Gui.h */, + 01815E3E1FE7D53700C35E93 /* Widgets */, ); - name = ofxGui; + path = Gui; sourceTree = ""; }; - 49237A8A4935FFC7A690CBD7 /* MediaServer */ = { + 01815E3E1FE7D53700C35E93 /* Widgets */ = { isa = PBXGroup; children = ( - 20F9951441118A70E8D55E13 /* DirectoryWatcher.cpp */, - 7C89C324499F9541394245C9 /* DirectoryWatcher.h */, - 18385A4F4BC87806616D4F7F /* MediaServer.cpp */, - FCB5A622161B43A8154687F8 /* MediaServer.h */, + 01815E3F1FE7D53700C35E93 /* GuiBaseWidget.h */, + 01815E401FE7D53700C35E93 /* LayerPanelWidget.cpp */, + 01815E411FE7D53700C35E93 /* LayerPanelWidget.h */, + 01815E421FE7D53700C35E93 /* ProjectionEditorWidget.cpp */, + 01815E431FE7D53700C35E93 /* ProjectionEditorWidget.h */, + 01815E441FE7D53700C35E93 /* ScaleWidget.cpp */, + 01815E451FE7D53700C35E93 /* ScaleWidget.h */, + 01815E461FE7D53700C35E93 /* SourcesEditorWidget.cpp */, + 01815E471FE7D53700C35E93 /* SourcesEditorWidget.h */, + 01815E481FE7D53700C35E93 /* SurfaceHighlightWidget.cpp */, + 01815E491FE7D53700C35E93 /* SurfaceHighlightWidget.h */, + 01815E4A1FE7D53700C35E93 /* TextureEditorWidget.cpp */, + 01815E4B1FE7D53700C35E93 /* TextureEditorWidget.h */, + 01815E4C1FE7D53700C35E93 /* TextureHighlightWidget.cpp */, + 01815E4D1FE7D53700C35E93 /* TextureHighlightWidget.h */, ); - name = MediaServer; + path = Widgets; sourceTree = ""; }; - 57113A603B123D17EBD5D0D1 /* src */ = { + 01815E4E1FE7D53700C35E93 /* Info */ = { isa = PBXGroup; children = ( - 43844FF975EC3DB9B9DDAD73 /* Application */, - F19689EE10A2EC1EC429FAC7 /* Commands */, - 783C34304FF450D0CB244879 /* Gui */, - 922DC4E8A53315BB0C983902 /* Info */, - 49237A8A4935FFC7A690CBD7 /* MediaServer */, - C2E5DC1692A11AF5D981F8FA /* Mode.h */, - 16DB3860ECC0D672B08DE71C /* ofxPiMapper.cpp */, - 378C962CF2DB945F38DE674A /* ofxPiMapper.h */, - 77B40894B404D46E0B9438E0 /* Sources */, - DA1ABA97EBE5173F815CB449 /* Surfaces */, - 925C888869704DBDF0BE6D0B /* UserInterface */, - 3D6840E4DBCF2DED6C755B76 /* Utils */, + 01815E4F1FE7D53700C35E93 /* Info.cpp */, + 01815E501FE7D53700C35E93 /* Info.h */, ); - name = src; + path = Info; sourceTree = ""; }; - 6948EE371B920CB800B5AC1A /* local_addons */ = { + 01815E511FE7D53700C35E93 /* MediaServer */ = { isa = PBXGroup; children = ( + 01815E521FE7D53700C35E93 /* DirectoryWatcher.cpp */, + 01815E531FE7D53700C35E93 /* DirectoryWatcher.h */, + 01815E541FE7D53700C35E93 /* MediaServer.cpp */, + 01815E551FE7D53700C35E93 /* MediaServer.h */, ); - name = local_addons; + path = MediaServer; sourceTree = ""; }; - 6E54289412D2D94F45A05113 /* libs */ = { + 01815E591FE7D53700C35E93 /* Sources */ = { isa = PBXGroup; children = ( - 2B40EDA85BEB63E46785BC29 /* tinyxml.cpp */, - B21E7E5F548EEA92F368040B /* tinyxml.h */, - 832BDC407620CDBA568B713D /* tinyxmlerror.cpp */, - FC5DA1C87211D4F6377DA719 /* tinyxmlparser.cpp */, + 01815E5A1FE7D53700C35E93 /* BaseSource.cpp */, + 01815E5B1FE7D53700C35E93 /* BaseSource.h */, + 01815E5C1FE7D53700C35E93 /* FboSource.cpp */, + 01815E5D1FE7D53700C35E93 /* FboSource.h */, + 01815E5E1FE7D53700C35E93 /* ImageSource.cpp */, + 01815E5F1FE7D53700C35E93 /* ImageSource.h */, + 01815E601FE7D53700C35E93 /* magSlide.cpp */, + 01815E611FE7D53700C35E93 /* magSlide.h */, + 01815E621FE7D53700C35E93 /* magSlideShowSource.cpp */, + 01815E631FE7D53700C35E93 /* magSlideShowSource.h */, + 01815E641FE7D53700C35E93 /* magSlideTransition.cpp */, + 01815E651FE7D53700C35E93 /* magSlideTransition.h */, + 01815E661FE7D53700C35E93 /* magSlideTransitionFactory.cpp */, + 01815E671FE7D53700C35E93 /* magSlideTransitionFactory.h */, + 01815E681FE7D53700C35E93 /* OMXPlayerCache.cpp */, + 01815E691FE7D53700C35E93 /* OMXPlayerCache.h */, + 01815E6A1FE7D53700C35E93 /* SourceType.h */, + 01815E6B1FE7D53700C35E93 /* SourceTypeHelper.h */, + 01815E6C1FE7D53700C35E93 /* VideoSource.cpp */, + 01815E6D1FE7D53700C35E93 /* VideoSource.h */, ); - name = libs; + path = Sources; sourceTree = ""; }; - 6ECEF0D76BC33727823EADFF /* src */ = { + 01815E6E1FE7D53700C35E93 /* Surfaces */ = { isa = PBXGroup; children = ( - 50DF87D612C5AAE17AAFA6C0 /* ofxXmlSettings.cpp */, - 01DCC0911400F9ACF5B65578 /* ofxXmlSettings.h */, + 01815E6F1FE7D53700C35E93 /* BaseSurface.cpp */, + 01815E701FE7D53700C35E93 /* BaseSurface.h */, + 01815E711FE7D53700C35E93 /* GridWarpSurface.cpp */, + 01815E721FE7D53700C35E93 /* GridWarpSurface.h */, + 01815E731FE7D53700C35E93 /* HexagonSurface.cpp */, + 01815E741FE7D53700C35E93 /* HexagonSurface.h */, + 01815E751FE7D53700C35E93 /* QuadSurface.cpp */, + 01815E761FE7D53700C35E93 /* QuadSurface.h */, + 01815E771FE7D53700C35E93 /* SurfaceFactory.cpp */, + 01815E781FE7D53700C35E93 /* SurfaceFactory.h */, + 01815E791FE7D53700C35E93 /* SurfaceManager.cpp */, + 01815E7A1FE7D53700C35E93 /* SurfaceManager.h */, + 01815E7B1FE7D53700C35E93 /* SurfaceStack.cpp */, + 01815E7C1FE7D53700C35E93 /* SurfaceStack.h */, + 01815E7D1FE7D53700C35E93 /* SurfaceType.h */, + 01815E7E1FE7D53700C35E93 /* TriangleSurface.cpp */, + 01815E7F1FE7D53700C35E93 /* TriangleSurface.h */, ); - name = src; + path = Surfaces; sourceTree = ""; }; - 77B40894B404D46E0B9438E0 /* Sources */ = { + 01815E801FE7D53700C35E93 /* UserInterface */ = { isa = PBXGroup; children = ( - AB4132974E14024E74E320F5 /* BaseSource.cpp */, - B390802358C73D3757AC9B4E /* BaseSource.h */, - C61C1F4F1A1ED2660B1D6EDC /* FboSource.cpp */, - F05CE9A6503C7CBCC46403C4 /* FboSource.h */, - 61291E56B7882C9E9B8F119B /* ImageSource.cpp */, - E5949E35CC6642F2FDFFAAE5 /* ImageSource.h */, - F7B0806EEA8012D629BE363C /* OMXPlayerCache.cpp */, - 3BD72CBAFD427FC6E9F164D2 /* OMXPlayerCache.h */, - 6595C215972AFFC7EE685F5A /* SourceType.h */, - EFB1537A5DBC298C759BFC62 /* SourceTypeHelper.h */, - 5407451FA68C27B2AAE644A6 /* VideoSource.cpp */, - C2D03F683EE589F55D47CFFD /* VideoSource.h */, + 01815E811FE7D53700C35E93 /* BaseJoint.cpp */, + 01815E821FE7D53700C35E93 /* BaseJoint.h */, + 01815E831FE7D53700C35E93 /* CircleJoint.cpp */, + 01815E841FE7D53700C35E93 /* CircleJoint.h */, + 01815E851FE7D53700C35E93 /* EditorType.h */, + 01815E861FE7D53700C35E93 /* GuiMode.h */, + 01815E871FE7D53700C35E93 /* RadioList.cpp */, + 01815E881FE7D53700C35E93 /* RadioList.h */, ); - name = Sources; + path = UserInterface; sourceTree = ""; }; - 783422EB3B2FDA36D11DC9CF /* Modes */ = { + 01815E891FE7D53700C35E93 /* Utils */ = { isa = PBXGroup; children = ( - 9631F04A0875ADEB45970DE8 /* ApplicationBaseMode.cpp */, - 57D73BCD8A871590F140EFF6 /* ApplicationBaseMode.h */, - 64156CB2D856E4CE0FBBED96 /* PresentationMode.cpp */, - 3B043509B19E37C383D7CA87 /* PresentationMode.h */, - 1BCA96396113AAF56D66C844 /* ProjectionMappingMode.cpp */, - DC8107E8E56AFFB933FE8962 /* ProjectionMappingMode.h */, - 4245228145B1AA737F49CF14 /* SourceSelectionMode.cpp */, - 7FD330C204479B5A5021D286 /* SourceSelectionMode.h */, - B16277019B0C4B684E1B063E /* TextureMappingMode.cpp */, - 3157007392BD114EAB99F470 /* TextureMappingMode.h */, + 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */, + 01815E8B1FE7D53700C35E93 /* HomographyHelper.h */, ); - name = Modes; + path = Utils; sourceTree = ""; }; - 783C34304FF450D0CB244879 /* Gui */ = { + 39264837192224C20008A7F5 /* ofxXmlSettings */ = { isa = PBXGroup; children = ( - DCC24025AD26B4554B000385 /* Gui.cpp */, - 7A3290FC65714D0C4D02B8BA /* Gui.h */, - 0775EF7214A04F1C3C936CCE /* Widgets */, + 3926483C192224F90008A7F5 /* libs */, + 39264838192224CA0008A7F5 /* src */, ); - name = Gui; + name = ofxXmlSettings; sourceTree = ""; }; - 7CC2E9C572434BA3ED1C8079 /* ofxPiMapper */ = { + 39264838192224CA0008A7F5 /* src */ = { isa = PBXGroup; children = ( - 57113A603B123D17EBD5D0D1 /* src */, + 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */, + 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */, ); - name = ofxPiMapper; + name = src; sourceTree = ""; }; - 922DC4E8A53315BB0C983902 /* Info */ = { + 3926483C192224F90008A7F5 /* libs */ = { isa = PBXGroup; children = ( - EEF2CEBAFFABCFED915AFCE1 /* Info.cpp */, - 37E7F66B151AB6A0AB6FC244 /* Info.h */, + 3926483D192224F90008A7F5 /* tinyxml.cpp */, + 3926483E192224F90008A7F5 /* tinyxml.h */, + 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */, + 39264840192224F90008A7F5 /* tinyxmlparser.cpp */, ); - name = Info; + name = libs; + path = ../../ofxXmlSettings/libs; sourceTree = ""; }; - 925C888869704DBDF0BE6D0B /* UserInterface */ = { + 3933D5C019BB87A3000ACA55 /* ofxGui */ = { isa = PBXGroup; children = ( - 7E78D1B2A6DB0856BF8ED1FE /* BaseJoint.cpp */, - 851AF875A70187105CA91C1A /* BaseJoint.h */, - 62F01592304CB7995200EF7B /* CircleJoint.cpp */, - 9B4D98CCBAB57278C96169D4 /* CircleJoint.h */, - 4130052A043CF3D3C2BA943A /* EditorType.h */, - B7DD3DE526EF824DDAF42B09 /* GuiMode.h */, - 4048CA09E6AAB5F673CBD2F0 /* RadioList.cpp */, - DC69ACA83F14B8A2AE20197B /* RadioList.h */, + 3933D5C119BB87BD000ACA55 /* src */, ); - name = UserInterface; + name = ofxGui; sourceTree = ""; }; - A763ED608B35AE3310251DEE /* src */ = { + 3933D5C119BB87BD000ACA55 /* src */ = { isa = PBXGroup; children = ( - 9604B925D32EE39065747725 /* ofxBaseGui.cpp */, - 87F26B4B24CBD428AD9EEBAA /* ofxBaseGui.h */, - C88333E71C9457E441C33474 /* ofxButton.cpp */, - 2834D88A62CD23F3DE2C47D1 /* ofxButton.h */, - 17E65988300FBD9AAA2CD0CA /* ofxGui.h */, - ECF8674C7975F1063C5E30CA /* ofxGuiGroup.cpp */, - 1C0DA2561397A7DE0246858B /* ofxGuiGroup.h */, - 78D67A00EB899FAC09430597 /* ofxLabel.cpp */, - B87C60311EC1FE841C1ECD89 /* ofxLabel.h */, - E112B3AEBEA2C091BF2B40AE /* ofxPanel.cpp */, - 89449E3044D456F7DE7BEA14 /* ofxPanel.h */, - 15F2C6477A769C03A56D1401 /* ofxSlider.cpp */, - 52AFA1F08C420992CAAAE648 /* ofxSlider.h */, - 802251BAF1B35B1D67B32FD0 /* ofxSliderGroup.cpp */, - C70D8946940288799E82131E /* ofxSliderGroup.h */, - 907C5B5E104864A2D3A25745 /* ofxToggle.cpp */, - 0A1DAC09F322AE313A40706D /* ofxToggle.h */, + 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */, + 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */, + 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */, + 3933D5C519BB87BD000ACA55 /* ofxButton.h */, + 3933D5C619BB87BD000ACA55 /* ofxGui.h */, + 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */, + 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */, + 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */, + 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */, + 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */, + 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */, + 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */, + 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */, + 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */, + 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */, + 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */, + 3933D5D219BB87BD000ACA55 /* ofxToggle.h */, ); name = src; + path = ../../ofxGui/src; + sourceTree = ""; + }; + 396E8A34190FEDE500705899 /* ofxPiMapper */ = { + isa = PBXGroup; + children = ( + 01815DDE1FE7D53700C35E93 /* src */, + ); + name = ofxPiMapper; sourceTree = ""; }; BB4B014C10F69532006C3DED /* addons */ = { isa = PBXGroup; children = ( - 480A780D8D0308AE4A368801 /* ofxGui */, - 7CC2E9C572434BA3ED1C8079 /* ofxPiMapper */, - 1F4FB5C423662B96ADFDCC0B /* ofxXmlSettings */, + 3933D5C019BB87A3000ACA55 /* ofxGui */, + 39264837192224C20008A7F5 /* ofxXmlSettings */, + 396E8A34190FEDE500705899 /* ofxPiMapper */, ); name = addons; sourceTree = ""; }; - DA1ABA97EBE5173F815CB449 /* Surfaces */ = { + BBAB23C913894ECA00AA2426 /* system frameworks */ = { + isa = PBXGroup; + children = ( + E7F985F515E0DE99003869B5 /* Accelerate.framework */, + E4C2424410CC5A17004149E2 /* AppKit.framework */, + E4C2424510CC5A17004149E2 /* Cocoa.framework */, + E4C2424610CC5A17004149E2 /* IOKit.framework */, + E45BE9710E8CC7DD009D7055 /* AGL.framework */, + E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */, + E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */, + E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */, + E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */, + E45BE9770E8CC7DD009D7055 /* CoreServices.framework */, + E45BE9790E8CC7DD009D7055 /* OpenGL.framework */, + E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */, + E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */, + E7E077E715D3B6510020DFD4 /* QTKit.framework */, + ); + name = "system frameworks"; + sourceTree = ""; + }; + BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = { isa = PBXGroup; children = ( - F2C0EE541190D47BF5911C0A /* BaseSurface.cpp */, - F27EBFBACAC7B29B2B7CA500 /* BaseSurface.h */, - 2D2400AC1A64EDE5E990C56C /* GridWarpSurface.cpp */, - C3E8D103B72D02E063B29082 /* GridWarpSurface.h */, - BCBB74B9531974E1D5DA019B /* HexagonSurface.cpp */, - 0B4D5D37A2AE7AB30D726C16 /* HexagonSurface.h */, - B9ECBF061BABECA9C2341372 /* QuadSurface.cpp */, - 906696B07A716E4057D32B1E /* QuadSurface.h */, - 03FA94CA9F193C816DE4253F /* SurfaceFactory.cpp */, - D58C36B60BB72C7336042FB9 /* SurfaceFactory.h */, - 836B103542A52C63B004410C /* SurfaceManager.cpp */, - 7344B3B35CD0188D1283EC59 /* SurfaceManager.h */, - 1C080561EC053F17BB86A668 /* SurfaceStack.cpp */, - 6592BB3592290B34832D7607 /* SurfaceStack.h */, - B178ED5CA7F76AAA6E49E191 /* SurfaceType.h */, - 3DF2D82EA37D8C7A5F686EA5 /* TriangleSurface.cpp */, - 23118136CC7FFA920626B6C3 /* TriangleSurface.h */, + BBAB23BE13894E4700AA2426 /* GLUT.framework */, ); - name = Surfaces; + name = "3rd party frameworks"; sourceTree = ""; }; E4328144138ABC890047C5CB /* Products */ = { @@ -596,6 +768,15 @@ name = Products; sourceTree = ""; }; + E45BE5980E8CC70C009D7055 /* frameworks */ = { + isa = PBXGroup; + children = ( + BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */, + BBAB23C913894ECA00AA2426 /* system frameworks */, + ); + name = frameworks; + sourceTree = ""; + }; E4B69B4A0A3A1720003C02F2 = { isa = PBXGroup; children = ( @@ -604,7 +785,7 @@ E4B69E1C0A3A1BDC003C02F2 /* src */, E4EEC9E9138DF44700A80321 /* openFrameworks */, BB4B014C10F69532006C3DED /* addons */, - 6948EE371B920CB800B5AC1A /* local_addons */, + E45BE5980E8CC70C009D7055 /* frameworks */, E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */, ); sourceTree = ""; @@ -615,12 +796,12 @@ E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, - 2DDA3608BED55BC67A9DAFF5 /* CrossSource.cpp */, - F3BC84F0441C01B0A760508D /* CrossSource.h */, - 76B40246C8B90C1CA4074BB7 /* CustomSource.cpp */, - B0B66559E2F530AE989510C0 /* CustomSource.h */, - 4A0800123A129E9BC12ED207 /* Settings.cpp */, - A1A567FBAE494BF84E54E83C /* Settings.h */, + 397EFC811A09047C0009286E /* CustomSource.h */, + 397EFC801A09047C0009286E /* CustomSource.cpp */, + 399953681BD54FF600D5B1F1 /* CrossSource.h */, + 399953671BD54FF600D5B1F1 /* CrossSource.cpp */, + 3995C2081C79069B00123352 /* Settings.h */, + 3995C2091C79069B00123352 /* Settings.cpp */, ); path = src; sourceTree = SOURCE_ROOT; @@ -634,88 +815,6 @@ name = openFrameworks; sourceTree = ""; }; - F19689EE10A2EC1EC429FAC7 /* Commands */ = { - isa = PBXGroup; - children = ( - 231337763726D333E0B3D56C /* AddGridColCmd.cpp */, - 1E73070DAC89F6A796BFF464 /* AddGridColCmd.h */, - 3E4A0386460638A781A7AC84 /* AddGridRowCmd.cpp */, - 775FD891C1E381F87BF33C82 /* AddGridRowCmd.h */, - B323D7489A7B26A63443444F /* AddSurfaceCmd.cpp */, - 00756183A9E41665E637AC23 /* AddSurfaceCmd.h */, - 17972C3384311464011667D9 /* BaseCmd.h */, - 962C349E8F4E59FF335AB2A6 /* ClearSurfacesCmd.cpp */, - 3074E4094F76555C299E5D8E /* ClearSurfacesCmd.h */, - BDBE053980FA01FAD543D782 /* CmdManager.cpp */, - 2F04FFB9BAC4575E214C0DED /* CmdManager.h */, - 6E80EE6FB0CC304A6CA287BB /* DeselectSurfaceCmd.cpp */, - 65DBA05D19177D2853D54196 /* DeselectSurfaceCmd.h */, - E8CE817DF3028A4345376E7D /* DeselectTexCoordCmd.cpp */, - 718E523D4BDDCFAC394B3EA5 /* DeselectTexCoordCmd.h */, - C656C28252AD5E9E09FA2162 /* DuplicateSurfaceCmd.cpp */, - EE95BF87E883491E7CC9B6EC /* DuplicateSurfaceCmd.h */, - DBAFA0B7AFEA589CA5167204 /* MvAllTexCoordsCmd.cpp */, - 25322223D3976D5F33DCCBF6 /* MvAllTexCoordsCmd.h */, - EC481BAB32B250D3EA41AF9E /* MvLayerDnCmd.cpp */, - 61481FB831430E35A18ABD02 /* MvLayerDnCmd.h */, - E52D4207C299D5886C8FD2C7 /* MvLayerUpCmd.cpp */, - 933CAE5B2DEC9DDABEA95E34 /* MvLayerUpCmd.h */, - 7D386994DF359F3BD1E66480 /* MvSelectionCmd.cpp */, - D4CFAEBB593AD070E04F106C /* MvSelectionCmd.h */, - 18041C8871E17DE3E60BFF95 /* MvSurfaceVertCmd.cpp */, - D565A612B1DF2837C94A6081 /* MvSurfaceVertCmd.h */, - 0739F09627790055C959BBF4 /* MvTexCoordCmd.cpp */, - 8F41EDB76644426680B2FA2B /* MvTexCoordCmd.h */, - A50F23D868C48DF9799BC788 /* RmGridColCmd.cpp */, - BA65337B3E631788AE2D018B /* RmGridColCmd.h */, - F3538B8AF69CAB7C215FA1EF /* RmGridRowCmd.cpp */, - 74CA4C78136F233FB90B7D3E /* RmGridRowCmd.h */, - B7C308F8B76FCB909581A580 /* RmSurfaceCmd.cpp */, - D7287CBE5600FEE9EE1B1AEA /* RmSurfaceCmd.h */, - 60F40691CD9DE4DEE1768FE9 /* SaveTexCoordPosCmd.cpp */, - D463EA9CC53D21A44CB9D6EF /* SaveTexCoordPosCmd.h */, - 34B45EB44DED0A47FBAD30F4 /* ScaleSurfaceFromToCmd.cpp */, - 62C9C3E62D4BEF04CF54C031 /* ScaleSurfaceFromToCmd.h */, - FC98A68C64BFC941D0B31EE9 /* SelNextSurfaceCmd.cpp */, - 30ED82F4A70B5B95CCEF7744 /* SelNextSurfaceCmd.h */, - 784FFEB8D108EC916343AB97 /* SelNextTexCoordCmd.cpp */, - A5CBAE57D2ADED1CAB6123AF /* SelNextTexCoordCmd.h */, - 140C0677F9F5A5D3B8A89AC4 /* SelNextVertexCmd.cpp */, - BA5B6BB795E2A24B2DBA22BD /* SelNextVertexCmd.h */, - 6DF54314CF2B45BF195B84C6 /* SelPrevSurfaceCmd.cpp */, - B5C793F4FEA3AA065347B61C /* SelPrevSurfaceCmd.h */, - F7E88D3956480E0CBAA21641 /* SelPrevTexCoordCmd.cpp */, - 1CE256C39E514ABD16FCCB87 /* SelPrevTexCoordCmd.h */, - 3B29C3846BA06080344C1D1E /* SelPrevVertexCmd.cpp */, - 47AB6134D2AB2F3EB10096A3 /* SelPrevVertexCmd.h */, - 0B691BBAB665F94F09B2C276 /* SelSurfaceCmd.cpp */, - CB4461BD6FC059D946144727 /* SelSurfaceCmd.h */, - 27453C6FAE9B674FD694508D /* SelTexCoordCmd.cpp */, - D05D5FBB2B2779B022A5DD04 /* SelTexCoordCmd.h */, - A2282B1E05458C3B2BBCE568 /* SelVertexCmd.cpp */, - 79A9ED756DB70790A67E3EF8 /* SelVertexCmd.h */, - 8D3CB0B9A827AFA479349BBE /* SetApplicationModeCmd.cpp */, - F0A9FE4B6FB6C958B72B72CD /* SetApplicationModeCmd.h */, - 4FFBE499412CC8DD07163E91 /* SetNextSourceCmd.cpp */, - FA2E4E947E8D358C28D903C0 /* SetNextSourceCmd.h */, - 15C9B02F2CF08112845CD074 /* SetPresetCmd.cpp */, - BCB571865BB25BC586CF80EC /* SetPresetCmd.h */, - 7F58FFED7FBFC49573FF65E4 /* SetSourceCmd.cpp */, - 56A68D8E68FF141B5EB1ADF6 /* SetSourceCmd.h */, - 49BE2D8F2A2A57F4EBF83FF4 /* SetTexMapDrawModeCmd.cpp */, - 912C6A870E22496CEA43AC85 /* SetTexMapDrawModeCmd.h */, - E8DA47AF2B265F778E74D4DA /* StartDragSurfaceCmd.cpp */, - 5EBDBF5E7887C574E1FCC1B5 /* StartDragSurfaceCmd.h */, - 5D020B9B28609D071E21BB76 /* ToggleAnimatedSourceCmd.cpp */, - 21167F26AF957606289D4A4A /* ToggleAnimatedSourceCmd.h */, - 655142313A378162E3929785 /* TogglePerspectiveCmd.cpp */, - 4244A1B9B55BD7BA7ED2F547 /* TogglePerspectiveCmd.h */, - 03FCF5559C2A6AB79D947767 /* TranslateCanvasCmd.cpp */, - 5AB104FC7812B4F42B8E1540 /* TranslateCanvasCmd.h */, - ); - name = Commands; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -727,7 +826,6 @@ E4B69B590A3A1756003C02F2 /* Frameworks */, E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, E4C2427710CC5ABF004149E2 /* CopyFiles */, - 8466F1851C04CA0E00918B1C /* ShellScript */, ); buildRules = ( ); @@ -745,7 +843,7 @@ E4B69B4C0A3A1720003C02F2 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0600; + LastUpgradeCheck = 0720; }; buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example" */; compatibilityVersion = "Xcode 3.2"; @@ -784,19 +882,6 @@ /* End PBXReferenceProxy section */ /* Begin PBXShellScriptBuildPhase section */ - 8466F1851C04CA0E00918B1C /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 12; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# ---- 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"; - }; E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -808,7 +893,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - 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 bin/data into App/Resources\nrsync -avz --exclude='.DS_Store' \"${SRCROOT}/bin/data/\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved ../../../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# Copy GLUT framework (must remove for AppStore submissions)\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\"\n"; + shellScript = "rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\""; }; /* End PBXShellScriptBuildPhase section */ @@ -817,96 +902,100 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */, + 01815E8D1FE7D59200C35E93 /* ApplicationBaseMode.cpp in Sources */, + 01815E8E1FE7D59200C35E93 /* PresentationMode.cpp in Sources */, + 01815E8F1FE7D59200C35E93 /* ProjectionMappingMode.cpp in Sources */, + 01815E901FE7D59200C35E93 /* SourceSelectionMode.cpp in Sources */, + 01815E911FE7D59200C35E93 /* TextureMappingMode.cpp in Sources */, + 01815E921FE7D59200C35E93 /* SettingsLoader.cpp in Sources */, + 01815E931FE7D59200C35E93 /* AddGridColCmd.cpp in Sources */, + 01815E941FE7D59200C35E93 /* AddGridRowCmd.cpp in Sources */, + 01815E951FE7D59200C35E93 /* AddSurfaceCmd.cpp in Sources */, + 01815E961FE7D59200C35E93 /* ClearSurfacesCmd.cpp in Sources */, + 01815E971FE7D59200C35E93 /* CmdManager.cpp in Sources */, + 01815E981FE7D59200C35E93 /* DeselectSurfaceCmd.cpp in Sources */, + 01815E991FE7D59200C35E93 /* DeselectTexCoordCmd.cpp in Sources */, + 01815E9A1FE7D59200C35E93 /* DuplicateSurfaceCmd.cpp in Sources */, + 01815E9B1FE7D59200C35E93 /* MvAllTexCoordsCmd.cpp in Sources */, + 01815E9C1FE7D59200C35E93 /* MvLayerDnCmd.cpp in Sources */, + 01815E9D1FE7D59200C35E93 /* MvLayerUpCmd.cpp in Sources */, + 01815E9E1FE7D59200C35E93 /* MvSelectionCmd.cpp in Sources */, + 01815E9F1FE7D59200C35E93 /* MvSurfaceVertCmd.cpp in Sources */, + 01815EA01FE7D59200C35E93 /* MvTexCoordCmd.cpp in Sources */, + 01815EA11FE7D59200C35E93 /* RmGridColCmd.cpp in Sources */, + 01815EA21FE7D59200C35E93 /* RmGridRowCmd.cpp in Sources */, + 01815EA31FE7D59200C35E93 /* RmSurfaceCmd.cpp in Sources */, + 01815EA41FE7D59200C35E93 /* SaveTexCoordPosCmd.cpp in Sources */, + 01815EA51FE7D59200C35E93 /* ScaleSurfaceFromToCmd.cpp in Sources */, + 01815EA61FE7D59200C35E93 /* SelNextSurfaceCmd.cpp in Sources */, + 01815EA71FE7D59200C35E93 /* SelNextTexCoordCmd.cpp in Sources */, + 01815EA81FE7D59200C35E93 /* SelNextVertexCmd.cpp in Sources */, + 01815EA91FE7D59200C35E93 /* SelPrevSurfaceCmd.cpp in Sources */, + 01815EAA1FE7D59200C35E93 /* SelPrevTexCoordCmd.cpp in Sources */, + 01815EAB1FE7D59200C35E93 /* SelPrevVertexCmd.cpp in Sources */, + 01815EAC1FE7D59200C35E93 /* SelSurfaceCmd.cpp in Sources */, + 01815EAD1FE7D59200C35E93 /* SelTexCoordCmd.cpp in Sources */, + 01815EAE1FE7D59200C35E93 /* SelVertexCmd.cpp in Sources */, + 01815EAF1FE7D59200C35E93 /* SetApplicationModeCmd.cpp in Sources */, + 01815EB01FE7D59200C35E93 /* SetNextSourceCmd.cpp in Sources */, + 01815EB11FE7D59200C35E93 /* SetPresetCmd.cpp in Sources */, + 01815EB21FE7D59200C35E93 /* SetSourceCmd.cpp in Sources */, + 01815EB31FE7D59200C35E93 /* SetTexMapDrawModeCmd.cpp in Sources */, + 01815EB41FE7D59200C35E93 /* StartDragSurfaceCmd.cpp in Sources */, + 01815EB51FE7D59200C35E93 /* ToggleAnimatedSourceCmd.cpp in Sources */, + 01815EB61FE7D59200C35E93 /* TogglePerspectiveCmd.cpp in Sources */, + 01815EB71FE7D59200C35E93 /* TranslateCanvasCmd.cpp in Sources */, + 01815EB81FE7D59200C35E93 /* Gui.cpp in Sources */, + 01815EB91FE7D59200C35E93 /* LayerPanelWidget.cpp in Sources */, + 01815EBA1FE7D59200C35E93 /* ProjectionEditorWidget.cpp in Sources */, + 01815EBB1FE7D59200C35E93 /* ScaleWidget.cpp in Sources */, + 01815EBC1FE7D59200C35E93 /* SourcesEditorWidget.cpp in Sources */, + 01815EBD1FE7D59200C35E93 /* SurfaceHighlightWidget.cpp in Sources */, + 01815EBE1FE7D59200C35E93 /* TextureEditorWidget.cpp in Sources */, + 01815EBF1FE7D59200C35E93 /* TextureHighlightWidget.cpp in Sources */, + 01815EC01FE7D59200C35E93 /* Info.cpp in Sources */, + 01815EC11FE7D59200C35E93 /* DirectoryWatcher.cpp in Sources */, + 01815EC21FE7D59200C35E93 /* MediaServer.cpp in Sources */, + 01815EC31FE7D59200C35E93 /* ofxPiMapper.cpp in Sources */, + 01815EC41FE7D59200C35E93 /* BaseSource.cpp in Sources */, + 01815EC51FE7D59200C35E93 /* FboSource.cpp in Sources */, + 01815EC61FE7D59200C35E93 /* ImageSource.cpp in Sources */, + 01815EC71FE7D59200C35E93 /* magSlide.cpp in Sources */, + 01815EC81FE7D59200C35E93 /* magSlideShowSource.cpp in Sources */, + 01815EC91FE7D59200C35E93 /* magSlideTransition.cpp in Sources */, + 01815ECA1FE7D59200C35E93 /* magSlideTransitionFactory.cpp in Sources */, + 01815ECB1FE7D59200C35E93 /* OMXPlayerCache.cpp in Sources */, + 01815ECC1FE7D59200C35E93 /* VideoSource.cpp in Sources */, + 01815ECD1FE7D59200C35E93 /* BaseSurface.cpp in Sources */, + 01815ECE1FE7D59200C35E93 /* GridWarpSurface.cpp in Sources */, + 01815ECF1FE7D59200C35E93 /* HexagonSurface.cpp in Sources */, + 01815ED01FE7D59200C35E93 /* QuadSurface.cpp in Sources */, + 01815ED11FE7D59200C35E93 /* SurfaceFactory.cpp in Sources */, + 01815ED21FE7D59200C35E93 /* SurfaceManager.cpp in Sources */, + 01815ED31FE7D59200C35E93 /* SurfaceStack.cpp in Sources */, + 01815ED41FE7D59200C35E93 /* TriangleSurface.cpp in Sources */, + 01815ED51FE7D59200C35E93 /* BaseJoint.cpp in Sources */, + 01815ED61FE7D59200C35E93 /* CircleJoint.cpp in Sources */, + 01815ED71FE7D59200C35E93 /* RadioList.cpp in Sources */, + 01815ED81FE7D59200C35E93 /* HomographyHelper.cpp in Sources */, + 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, + 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, + 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, + 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, + 3995C20A1C79069B00123352 /* Settings.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, + 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, + 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, + 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, + 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, + 399953691BD54FF600D5B1F1 /* CrossSource.cpp in Sources */, E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, - 2AB23B34A18E47DB0D742387 /* CrossSource.cpp in Sources */, - A3E23EF00463364A9FE3860C /* CustomSource.cpp in Sources */, - 4280FE72330EE80A9929046F /* Settings.cpp in Sources */, - 856AA354D08AB4B323081444 /* ofxBaseGui.cpp in Sources */, - 5CBB2AB3A60F65431D7B555D /* ofxButton.cpp in Sources */, - B266578FC55D23BFEBC042E7 /* ofxGuiGroup.cpp in Sources */, - 483908258D00B98B4BE69F07 /* ofxLabel.cpp in Sources */, - F285EB3169F1566CA3D93C20 /* ofxPanel.cpp in Sources */, - 837220E80EB56CD44AD27F2A /* ofxSlider.cpp in Sources */, - B56FE57CC35806596D38118C /* ofxSliderGroup.cpp in Sources */, - 1CD33E884D9E3358252E82A1 /* ofxToggle.cpp in Sources */, - 401140F3B7FA4412935BB121 /* Application.cpp in Sources */, - C4D6DA9B890E612343FD059F /* ApplicationBaseMode.cpp in Sources */, - 4A53BFBA57F4AD16FB9D2D24 /* PresentationMode.cpp in Sources */, - 42AB7CD7DFB89209AB951942 /* ProjectionMappingMode.cpp in Sources */, - AA98F23DF9897F2241EF3968 /* SourceSelectionMode.cpp in Sources */, - 21B18AC78EBFC1FD28C614D5 /* TextureMappingMode.cpp in Sources */, - 2E9E05C9FFCE15172A701335 /* SettingsLoader.cpp in Sources */, - 580602DA874A9CF9E850DEEE /* AddGridColCmd.cpp in Sources */, - D88BA6D139757ED4E1669796 /* AddGridRowCmd.cpp in Sources */, - B1EEE5A7EC1876072BF8F7FE /* AddSurfaceCmd.cpp in Sources */, - F9A6B58165791682416A1685 /* ClearSurfacesCmd.cpp in Sources */, - 93760FE8B10EBD4081251E10 /* CmdManager.cpp in Sources */, - C8D7FA44AA0565654A681157 /* DeselectSurfaceCmd.cpp in Sources */, - 973F560586CB3735581265E7 /* DeselectTexCoordCmd.cpp in Sources */, - D61A46C1800537BA43C7884F /* DuplicateSurfaceCmd.cpp in Sources */, - 8CA6C92E3D4F91750BC469FF /* MvAllTexCoordsCmd.cpp in Sources */, - A75658250711ADE2C05FC781 /* MvLayerDnCmd.cpp in Sources */, - C34B66987F4DA38C21AF325B /* MvLayerUpCmd.cpp in Sources */, - 6056983B92E88B475FF04299 /* MvSelectionCmd.cpp in Sources */, - 845DC872C79A75F7B5FABC02 /* MvSurfaceVertCmd.cpp in Sources */, - 25F5CD753AF35B53464E56AE /* MvTexCoordCmd.cpp in Sources */, - 82643E358DF270B9EC939699 /* RmGridColCmd.cpp in Sources */, - 5826FF4F63DC430E90AFDA5E /* RmGridRowCmd.cpp in Sources */, - B01F972DDDA5F21EF4C8B99D /* RmSurfaceCmd.cpp in Sources */, - 36A98A331EAE1D0A19998A59 /* SaveTexCoordPosCmd.cpp in Sources */, - E327ACE85A208BAFACD1B7C7 /* ScaleSurfaceFromToCmd.cpp in Sources */, - 67FF225B68ECC1942C833BFE /* SelNextSurfaceCmd.cpp in Sources */, - 60C8089351E49CF344577098 /* SelNextTexCoordCmd.cpp in Sources */, - E6D82F5A7B22E9FB46DEEF15 /* SelNextVertexCmd.cpp in Sources */, - 7DAB7D546F81A93336034BF7 /* SelPrevSurfaceCmd.cpp in Sources */, - 800748EF057A284D9DA82F60 /* SelPrevTexCoordCmd.cpp in Sources */, - B9654D0EF43BCA228B330ED7 /* SelPrevVertexCmd.cpp in Sources */, - E5D631612E039E04B1736E76 /* SelSurfaceCmd.cpp in Sources */, - 14566DCD28D35A80428886C4 /* SelTexCoordCmd.cpp in Sources */, - 7002E598586957E5F20E69A7 /* SelVertexCmd.cpp in Sources */, - 90DE06EA59944C1BEA539719 /* SetApplicationModeCmd.cpp in Sources */, - 4BF21A290FA6FE26B87B8971 /* SetNextSourceCmd.cpp in Sources */, - 84172554824F6959BA431E33 /* SetPresetCmd.cpp in Sources */, - 6500BFD07CA93EFD8A162B25 /* SetSourceCmd.cpp in Sources */, - A6EE8D8F3CA590EF6D7FAFA6 /* SetTexMapDrawModeCmd.cpp in Sources */, - 06765053D7BFBBEB43E77B23 /* StartDragSurfaceCmd.cpp in Sources */, - 6438655B2AE4DDA2743241EC /* ToggleAnimatedSourceCmd.cpp in Sources */, - 23963D6D8F0085D5DD2DF394 /* TogglePerspectiveCmd.cpp in Sources */, - 28F5415281F8D09BBC098355 /* TranslateCanvasCmd.cpp in Sources */, - EA700B09626C8413C92EF860 /* Gui.cpp in Sources */, - 8E8F94DC506856A4E92FBA8A /* LayerPanelWidget.cpp in Sources */, - 274AEF0299D77E27C0C5B205 /* ProjectionEditorWidget.cpp in Sources */, - F06AE014F869282B7F7CE84C /* ScaleWidget.cpp in Sources */, - FB03F0A6D7866DFC55F519EB /* SourcesEditorWidget.cpp in Sources */, - 8A3D6CE0A4338871766366B6 /* SurfaceHighlightWidget.cpp in Sources */, - 4D2D4455339FC8C955091C88 /* TextureEditorWidget.cpp in Sources */, - 9CAA3B0DFD59840998C832DA /* TextureHighlightWidget.cpp in Sources */, - F3EACD31EE5E141FF66C48BD /* Info.cpp in Sources */, - DB8FC60C7512DB810C92625B /* DirectoryWatcher.cpp in Sources */, - 92527EF632E7EC0E96BC329C /* MediaServer.cpp in Sources */, - 3B90107DB9BF4857E357FCA8 /* ofxPiMapper.cpp in Sources */, - 892923A127FC7C57469FD078 /* BaseSource.cpp in Sources */, - 7702233BBFB6E8D9E8B93CBC /* FboSource.cpp in Sources */, - 95CB0A22296B3DB402835DCF /* ImageSource.cpp in Sources */, - 588E33B9B0BD6F5A2E4DF31D /* OMXPlayerCache.cpp in Sources */, - A0C1CAB7B9C59DDDC960EB62 /* VideoSource.cpp in Sources */, - 9F968AD3A115328F4BFE5D71 /* BaseSurface.cpp in Sources */, - 63DB0907B2ACDF9E6F2D9925 /* GridWarpSurface.cpp in Sources */, - 9C194C9F4ACD67CD61FBD30D /* HexagonSurface.cpp in Sources */, - 2A9AFA74E0EF07E58AC11382 /* QuadSurface.cpp in Sources */, - B27F2ADC894A4C463E892AFE /* SurfaceFactory.cpp in Sources */, - 85649EB44DE8F0A3BF8430F9 /* SurfaceManager.cpp in Sources */, - C3A616FB3A463C17E327F395 /* SurfaceStack.cpp in Sources */, - C0EB2D2E383BA9DE417ADB38 /* TriangleSurface.cpp in Sources */, - 868F230C6074263277ED9B07 /* BaseJoint.cpp in Sources */, - 42BCE929D520D8872171239A /* CircleJoint.cpp in Sources */, - 1F4453EA1589AD79F4B34493 /* RadioList.cpp in Sources */, - 83CACB24937919003F2F9B63 /* HomographyHelper.cpp in Sources */, - 63B57AC5BF4EF088491E0317 /* ofxXmlSettings.cpp in Sources */, - 933A2227713C720CEFF80FD9 /* tinyxml.cpp in Sources */, - 9D44DC88EF9E7991B4A09951 /* tinyxmlerror.cpp in Sources */, - 5A4349E9754D6FA14C0F2A3A /* tinyxmlparser.cpp in Sources */, + 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, + 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, + 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, + 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */, + 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -925,10 +1014,11 @@ isa = XCBuildConfiguration; baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; + COMBINE_HIDPI_IMAGES = YES; CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; COPY_PHASE_STRIP = NO; DEAD_CODE_STRIPPING = YES; + ENABLE_TESTABILITY = YES; GCC_AUTO_VECTORIZATION = YES; GCC_ENABLE_SSE3_EXTENSIONS = YES; GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; @@ -944,29 +1034,22 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, - ../../../addons/ofxGui/src, - ../../../addons/ofxPiMapper/src, - ../../../addons/ofxPiMapper/src/Application, - ../../../addons/ofxPiMapper/src/Application/Modes, - ../../../addons/ofxPiMapper/src/Commands, - ../../../addons/ofxPiMapper/src/Gui, - ../../../addons/ofxPiMapper/src/Gui/Widgets, - ../../../addons/ofxPiMapper/src/Info, - ../../../addons/ofxPiMapper/src/MediaServer, - ../../../addons/ofxPiMapper/src/Sources, - ../../../addons/ofxPiMapper/src/Surfaces, - ../../../addons/ofxPiMapper/src/UserInterface, - ../../../addons/ofxPiMapper/src/Utils, - ../../../addons/ofxXmlSettings/libs, - ../../../addons/ofxXmlSettings/src, ); - MACOSX_DEPLOYMENT_TARGET = 10.8; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + MACH_O_TYPE = mh_execute; + MACOSX_DEPLOYMENT_TARGET = 10.7; ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "-D__MACOSX_CORE__", + "-lpthread", "-mtune=native", ); - SDKROOT = macosx10.11; + OTHER_LDFLAGS = ( + "$(OF_CORE_LIBS)", + "$(OF_CORE_FRAMEWORKS)", + ); + PRIVATE_HEADERS_FOLDER_PATH = "$(PRODUCT_NAME:c99extidentifier)"; + SDKROOT = macosx; }; name = Debug; }; @@ -974,7 +1057,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; + COMBINE_HIDPI_IMAGES = YES; CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; COPY_PHASE_STRIP = YES; DEAD_CODE_STRIPPING = YES; @@ -994,34 +1077,26 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, - ../../../addons/ofxGui/src, - ../../../addons/ofxPiMapper/src, - ../../../addons/ofxPiMapper/src/Application, - ../../../addons/ofxPiMapper/src/Application/Modes, - ../../../addons/ofxPiMapper/src/Commands, - ../../../addons/ofxPiMapper/src/Gui, - ../../../addons/ofxPiMapper/src/Gui/Widgets, - ../../../addons/ofxPiMapper/src/Info, - ../../../addons/ofxPiMapper/src/MediaServer, - ../../../addons/ofxPiMapper/src/Sources, - ../../../addons/ofxPiMapper/src/Surfaces, - ../../../addons/ofxPiMapper/src/UserInterface, - ../../../addons/ofxPiMapper/src/Utils, - ../../../addons/ofxXmlSettings/libs, - ../../../addons/ofxXmlSettings/src, ); - MACOSX_DEPLOYMENT_TARGET = 10.8; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + MACH_O_TYPE = mh_execute; + MACOSX_DEPLOYMENT_TARGET = 10.7; OTHER_CPLUSPLUSFLAGS = ( "-D__MACOSX_CORE__", + "-lpthread", "-mtune=native", ); - SDKROOT = macosx10.11; + OTHER_LDFLAGS = ( + "$(OF_CORE_LIBS)", + "$(OF_CORE_FRAMEWORKS)", + ); + PRIVATE_HEADERS_FOLDER_PATH = "$(PRODUCT_NAME:c99extidentifier)"; + SDKROOT = macosx; }; name = Release; }; E4B69B600A3A1757003C02F2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; @@ -1036,35 +1111,89 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, - ../../../addons/ofxGui/src, - ../../../addons/ofxPiMapper/src, - ../../../addons/ofxPiMapper/src/Application, - ../../../addons/ofxPiMapper/src/Application/Modes, - ../../../addons/ofxPiMapper/src/Commands, - ../../../addons/ofxPiMapper/src/Gui, - ../../../addons/ofxPiMapper/src/Gui/Widgets, - ../../../addons/ofxPiMapper/src/Info, - ../../../addons/ofxPiMapper/src/MediaServer, - ../../../addons/ofxPiMapper/src/Sources, - ../../../addons/ofxPiMapper/src/Surfaces, - ../../../addons/ofxPiMapper/src/UserInterface, - ../../../addons/ofxPiMapper/src/Utils, - ../../../addons/ofxXmlSettings/libs, - ../../../addons/ofxXmlSettings/src, ); ICON = "$(ICON_NAME_DEBUG)"; ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; INFOPLIST_FILE = "openFrameworks-Info.plist"; - INSTALL_PATH = /Applications; - LIBRARY_SEARCH_PATHS = "$(inherited)"; - PRODUCT_NAME = "$(TARGET_NAME)Debug"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)", + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + OTHER_LDFLAGS = ( + "$(OF_CORE_LIBS)", + "$(OF_CORE_FRAMEWORKS)", + ); + PRODUCT_BUNDLE_IDENTIFIER = cc.openFrameworks.ofapp; + PRODUCT_NAME = exampleDebug; + SDKROOT = macosx; WRAPPER_EXTENSION = app; }; name = Debug; }; E4B69B610A3A1757003C02F2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; buildSettings = { COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; @@ -1078,30 +1207,84 @@ HEADER_SEARCH_PATHS = ( "$(OF_CORE_HEADERS)", src, - ../../../addons/ofxGui/src, - ../../../addons/ofxPiMapper/src, - ../../../addons/ofxPiMapper/src/Application, - ../../../addons/ofxPiMapper/src/Application/Modes, - ../../../addons/ofxPiMapper/src/Commands, - ../../../addons/ofxPiMapper/src/Gui, - ../../../addons/ofxPiMapper/src/Gui/Widgets, - ../../../addons/ofxPiMapper/src/Info, - ../../../addons/ofxPiMapper/src/MediaServer, - ../../../addons/ofxPiMapper/src/Sources, - ../../../addons/ofxPiMapper/src/Surfaces, - ../../../addons/ofxPiMapper/src/UserInterface, - ../../../addons/ofxPiMapper/src/Utils, - ../../../addons/ofxXmlSettings/libs, - ../../../addons/ofxXmlSettings/src, ); ICON = "$(ICON_NAME_RELEASE)"; ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; INFOPLIST_FILE = "openFrameworks-Info.plist"; - INSTALL_PATH = /Applications; - LIBRARY_SEARCH_PATHS = "$(inherited)"; - PRODUCT_NAME = "$(TARGET_NAME)"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + OTHER_LDFLAGS = ( + "$(OF_CORE_LIBS)", + "$(OF_CORE_FRAMEWORKS)", + ); + PRODUCT_BUNDLE_IDENTIFIER = cc.openFrameworks.ofapp; + PRODUCT_NAME = example; + SDKROOT = macosx; WRAPPER_EXTENSION = app; - baseConfigurationReference = E4EB6923138AFD0F00A09F29; }; name = Release; }; diff --git a/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme b/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme index a637354..b040463 100644 --- a/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme +++ b/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme @@ -1,6 +1,6 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -38,17 +38,21 @@ ReferencedContainer = "container:example.xcodeproj"> + + - + - + + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -38,17 +38,21 @@ ReferencedContainer = "container:example.xcodeproj"> + + - + - + Date: Wed, 20 Dec 2017 23:07:10 +0100 Subject: [PATCH 060/103] Change back keyboard shortcuts to the ones before --- README.md | 53 ++++++------- .../Modes/ProjectionMappingMode.cpp | 78 +++++++++---------- src/Application/Modes/SourceSelectionMode.cpp | 3 +- src/Application/Modes/TextureMappingMode.cpp | 8 +- 4 files changed, 70 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index cd8032d..8bf5db7 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,15 @@ You can use the example application of the addon for projection mapping projects ``` +## Compiling on Linux + +There might be issues with compiling because `ofxOMXPlayer` and `ofxRPiCameraVideoGrabber` addons do not exist on Linux and also other non-RPi platforms. To avoid the issues, do the following. + +1. Open `example/addons.make` and remove ofxOMXPlayer line. +2. Open `example-camera/addons.make` and remove ofxRPiCameraVideoGrabber line. +3. Compile one or both examples by using make. + + ## Problems with Audio If you are having problems with audio playback, here are two steps for you. Before you do these, make sure audio of your video file works. @@ -153,41 +162,33 @@ Key | Function 2 | Texture editing mode 3 | Projection mapping mode, use this to select a surface first 4 | Source selection mode -c | Show info +i | Show info t | Add triangle surface q | Add quad surface -x | Add hexagon surface g | Add grid warp surface -a | duplicate selected surface -o | Scale surface up -i | Scale surface down +d | duplicate selected surface +\+ | Scale surface up +\- | Scale surface down p | toggle perspective warping (quad surfaces only) -v | add columns to grid surface (grid warp surfaces only) -b | remove columns from grid surface (grid warp surfaces only) -n | add rows to grid surface (grid warp surfaces only) -m | remove rows from grid surface (grid warp surfaces only) +] | add columns to grid surface (grid warp surfaces only) +[ | remove columns from grid surface (grid warp surfaces only) +} | add rows to grid surface (grid warp surfaces only) +{ | remove rows from grid surface (grid warp surfaces only) . | select next surface (projection mapping mode only) , | select previous surface (projection mapping mode only) -k | select next vertex -l | select previous vertex -h | Move selected surface one layer up -j | Move selected surface one layer down +\> | select next vertex +\< | select previous vertex +0 | Move selected surface one layer up +9 | Move selected surface one layer down s | Save composition -y | Hide/show layer panel +l | Hide/show layer panel z | Undo rbt | Reboot (Raspberry Pi only) sdn | Shutdown (Raspberry Pi only) new | Clear composition (remove all surfaces) ext | Exit application and return to command line -d | Delete surface. -w | Toggle pause for video sources (texture and projection mapping modes) -5 | Select next source (no need to use the source selection interface) -8 | Move selection Up -9 | Move selection Down -7 | Move selection Left -0 | Move selection Right -If no surface is selected in the projection mapping mode, all surfaces are moved. - -Dont know if this works already: - -\/ | Toggle 1px/10px steps for keyboard moves on Raspberry Pi +BACKSPACE ('\' via SSH) | Delete surface. +SPACE | Toggle pause for video sources (texture and projection mapping modes) +TAB | Select next source (no need to use the source selection interface) +Arrow keys | Move selection. If no surface is selected in the projection mapping mode, all surfaces are moved. +\/ | Toggle 1px/10px steps for keyboard moves on Raspberry Pi \ No newline at end of file diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 9344fa3..898e67f 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -51,28 +51,24 @@ void ProjectionMappingMode::draw(Application * app){ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & args){ switch(args.key){ - + case 't': app->createSurface(SurfaceType::TRIANGLE_SURFACE); break; case 'q': app->createSurface(SurfaceType::QUAD_SURFACE); - break; - - case 'r': - app->createSurface(SurfaceType::CIRCLE_SURFACE); - break; - + break; + case 'g': app->createSurface(SurfaceType::GRID_WARP_SURFACE); break; - case 'x': + case 'h': app->createSurface(SurfaceType::HEXAGON_SURFACE); break; - case 'd': + case OF_KEY_BACKSPACE: app->eraseSurface(app->getSurfaceManager()->getSelectedSurfaceIndex()); break; @@ -80,55 +76,55 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->togglePerspective(); break; - case 'n': + case '}': app->addGridRow(); break; - case 'm': + case '{': app->removeGridRow(); break; - case 'v': + case ']': app->addGridColumn(); break; - - case 'b': + + case '[': app->removeGridColumn(); break; - + case '.': app->selectNextSurface(); break; - + case ',': app->selectPrevSurface(); break; - - case 'k': + + case '>': app->selectNextVertex(); break; - case 'l': + case '<': app->selectPrevVertex(); break; - case '8': + case OF_KEY_UP: if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(0.0f, -10.0f)); }else{ app->moveSelection(ofVec2f(0.0f, -1.0f)); } break; - - case '9': + + case OF_KEY_DOWN: if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(0.0f, 10.0f)); }else{ app->moveSelection(ofVec2f(0.0f, 1.0f)); } break; - - case '7': + + case OF_KEY_LEFT: if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(-10.0f, 0.0f)); }else{ @@ -136,43 +132,43 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg } break; - case '0': + case OF_KEY_RIGHT: if(app->isShiftKeyDown()){ app->moveSelection(ofVec2f(10.0f, 0.0f)); }else{ app->moveSelection(ofVec2f(1.0f, 0.0f)); } break; - - case 'w': + + case ' ': app->togglePause(); break; - - case '5': + + case OF_KEY_TAB: app->setNextSource(); break; - case 'a': + case 'd': app->duplicateSurface(); break; - - case 'h': // Move selected surface up the layer stack + + case '0': // Move selected surface up the layer stack app->moveLayerUp(); break; - case 'j': // Move selected surface down the layer stack + case '9': // Move selected surface down the layer stack app->moveLayerDown(); break; - - case 'o': // Scale surface up + + case '+': // Scale surface up app->scaleUp(); break; - case 'i': // Scale surface down + case '-': // Scale surface down app->scaleDown(); break; - case 'y': + case 'l': _bDrawLayerPanel = !_bDrawLayerPanel; break; @@ -181,7 +177,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg app->getSurfaceManager()->setNextPreset(); break; */ - + default: break; } @@ -195,7 +191,7 @@ void ProjectionMappingMode::onMousePressed(Application * app, ofMouseEventArgs & BaseSurface * hitSurface = 0; hitJoint = Gui::instance()->getProjectionEditorWidget().hitTestJoints(ofVec2f(args.x, args.y)); - + if(hitJoint){ for(int i = Gui::instance()->getProjectionEditorWidget().getJoints()->size() - 1; i >= 0 ; --i){ if((*Gui::instance()->getProjectionEditorWidget().getJoints())[i] == hitJoint){ @@ -211,7 +207,7 @@ void ProjectionMappingMode::onMousePressed(Application * app, ofMouseEventArgs & } } } - + if(Gui::instance()->getScaleWidget().inside(args.x, args.y)){ // }else if(hitJoint){ @@ -234,7 +230,7 @@ void ProjectionMappingMode::onMouseReleased(Application * app, ofMouseEventArgs Gui::instance()->getProjectionEditorWidget().stopDragJoints(); } -void ProjectionMappingMode::onMouseDragged(Application * app, ofMouseEventArgs & args){ +void ProjectionMappingMode::onMouseDragged(Application * app, ofMouseEventArgs & args){ Gui::instance()->onMouseDragged(args); Gui::instance()->getProjectionEditorWidget().mouseDragged(args); diff --git a/src/Application/Modes/SourceSelectionMode.cpp b/src/Application/Modes/SourceSelectionMode.cpp index 7c8f916..fb7d512 100644 --- a/src/Application/Modes/SourceSelectionMode.cpp +++ b/src/Application/Modes/SourceSelectionMode.cpp @@ -33,4 +33,5 @@ void SourceSelectionMode::draw(Application * app){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx + diff --git a/src/Application/Modes/TextureMappingMode.cpp b/src/Application/Modes/TextureMappingMode.cpp index 874caba..38551dc 100644 --- a/src/Application/Modes/TextureMappingMode.cpp +++ b/src/Application/Modes/TextureMappingMode.cpp @@ -103,7 +103,7 @@ void TextureMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & args){ case '>': app->selectNextTexCoord(); break; - + case '<': app->selectPrevTexCoord(); break; @@ -111,7 +111,7 @@ void TextureMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & args){ case ' ': app->togglePause(); break; - + case OF_KEY_TAB: app->setNextSource(); break; @@ -123,7 +123,7 @@ void TextureMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & args){ case '9': // Prew draw mode app->getCmdManager()->exec(new SetTexMapDrawModeCmd( this, getPrevDrawMode() )); break; - + } } @@ -316,4 +316,4 @@ int TextureMappingMode::getPrevDrawMode(){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx From ad71b6bed1f19cd6a369b0ff9bb3efc2baa80ff3 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 20 Dec 2017 23:11:50 +0100 Subject: [PATCH 061/103] Add possibility to add circle surface --- README.md | 1 + src/Application/Application.cpp | 2 +- src/Application/Modes/ProjectionMappingMode.cpp | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8bf5db7..d497058 100644 --- a/README.md +++ b/README.md @@ -166,6 +166,7 @@ i | Show info t | Add triangle surface q | Add quad surface g | Add grid warp surface +c | Add circle surface d | duplicate selected surface \+ | Scale surface up \- | Scale surface down diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index d77596e..c9ad4c8 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -121,7 +121,7 @@ void Application::onKeyPressed(ofKeyEventArgs & args){ setSourceMode(); break; - case 'c': + case 'i': toggleInfo(); break; diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 898e67f..05a5c0a 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -67,6 +67,10 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg case 'h': app->createSurface(SurfaceType::HEXAGON_SURFACE); break; + + case 'c': + app->createSurface(SurfaceType::CIRCLE_SURFACE); + break; case OF_KEY_BACKSPACE: app->eraseSurface(app->getSurfaceManager()->getSelectedSurfaceIndex()); From 1f98a0968597a4237e117a94fd02d0897c953b16 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 20 Dec 2017 23:12:13 +0100 Subject: [PATCH 062/103] Update example data file --- example/bin/data/ofxpimapper.xml | 168 +++++++------------------------ 1 file changed, 39 insertions(+), 129 deletions(-) diff --git a/example/bin/data/ofxpimapper.xml b/example/bin/data/ofxpimapper.xml index 73dc26f..fcea673 100644 --- a/example/bin/data/ofxpimapper.xml +++ b/example/bin/data/ofxpimapper.xml @@ -1,100 +1,21 @@ - - - - 119.000000000 - 379.000000000 - - - 387.000000000 - 96.000000000 - - - 405.000000000 - 657.000000000 - - - - - 0.500000000 - 0.000000000 - - - 1.000000000 - 1.000000000 - - - 0.000000000 - 1.000000000 - - - - image - image4.jpg - - - 162.000000000 - 96.000000000 + 337.195068359 + 362.146270752 - 637.290893555 - 79.031463623 + 337.195068359 + 595.853759766 - 605.286376953 - 652.968627930 + 648.804992676 + 595.853759766 - 180.000000000 - 657.000000000 - - - - - 0.159322947 - 0.055312362 - - - 0.830520868 - 0.055312362 - - - 0.830520868 - 0.938813090 - - - 0.159322947 - 0.938813090 - - - - fbo - Slide Show Source - - - 1 - - - - - - 860.523620605 - 46.077301025 - - - 887.000000000 - 402.000000000 - - - 1379.000000000 - 533.000000000 - - - 1183.476318359 - 46.077301025 + 648.804992676 + 362.146270752 @@ -117,100 +38,89 @@ image - image2.jpg + image4.jpg 1 - + - 1364.000000000 - 252.000000000 + 522.590332031 + 188.924621582 - 742.000000000 - 392.000000000 + 835.409606934 + 188.924621582 - 795.000000000 - 857.000000000 + 835.409606934 + 415.075378418 - 1372.000000000 - 756.000000000 + 522.590332031 + 415.075378418 - 0.101562500 + 0.000000000 0.000000000 - 0.884374976 + 1.000000000 0.000000000 - 0.884374976 - 1.002777815 + 1.000000000 + 1.000000000 - 0.101562500 - 1.002777815 + 0.000000000 + 1.000000000 - video - control-panel-and-operation.mp4 + fbo + Slide Show Source 1 - + - 341.000000000 - 222.000000000 + 325.000000000 + 196.999847412 - 341.000000000 - 990.000000000 + 479.922424316 + 421.000091553 - 1365.000000000 - 990.000000000 - - - 1365.000000000 - 222.000000000 + 170.077636719 + 421.000091553 - 0.016666668 - 0.006666641 - - - 0.536666691 - 0.006666641 + 0.500000000 + 0.000000000 - 0.536666691 - 0.526666641 + 1.000000000 + 1.000000000 - 0.016666668 - 0.526666641 + 0.000000000 + 1.000000000 image image2.jpg - - 1 - From 4642506db8694cc2f7202f202ee39550b1e0bf4f Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 20 Dec 2017 23:12:31 +0100 Subject: [PATCH 063/103] Update example xcodeproj --- example/example.xcodeproj/project.pbxproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index 0815d40..6b11447 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -84,6 +84,7 @@ 01815ED61FE7D59200C35E93 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E831FE7D53700C35E93 /* CircleJoint.cpp */; }; 01815ED71FE7D59200C35E93 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E871FE7D53700C35E93 /* RadioList.cpp */; }; 01815ED81FE7D59200C35E93 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */; }; + 01B8217B1FEB138A000100F2 /* CircleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01B821791FEB138A000100F2 /* CircleSurface.cpp */; }; 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; @@ -311,6 +312,8 @@ 01815E881FE7D53700C35E93 /* RadioList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; 01815E8A1FE7D53700C35E93 /* HomographyHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; 01815E8B1FE7D53700C35E93 /* HomographyHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; + 01B821791FEB138A000100F2 /* CircleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleSurface.cpp; sourceTree = ""; }; + 01B8217A1FEB138A000100F2 /* CircleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleSurface.h; sourceTree = ""; }; 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofxXmlSettings.cpp; path = ../../ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = ""; }; 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxXmlSettings.h; path = ../../ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = ""; }; 3926483D192224F90008A7F5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; @@ -622,6 +625,8 @@ 01815E7D1FE7D53700C35E93 /* SurfaceType.h */, 01815E7E1FE7D53700C35E93 /* TriangleSurface.cpp */, 01815E7F1FE7D53700C35E93 /* TriangleSurface.h */, + 01B821791FEB138A000100F2 /* CircleSurface.cpp */, + 01B8217A1FEB138A000100F2 /* CircleSurface.h */, ); path = Surfaces; sourceTree = ""; @@ -941,6 +946,7 @@ 01815EB01FE7D59200C35E93 /* SetNextSourceCmd.cpp in Sources */, 01815EB11FE7D59200C35E93 /* SetPresetCmd.cpp in Sources */, 01815EB21FE7D59200C35E93 /* SetSourceCmd.cpp in Sources */, + 01B8217B1FEB138A000100F2 /* CircleSurface.cpp in Sources */, 01815EB31FE7D59200C35E93 /* SetTexMapDrawModeCmd.cpp in Sources */, 01815EB41FE7D59200C35E93 /* StartDragSurfaceCmd.cpp in Sources */, 01815EB51FE7D59200C35E93 /* ToggleAnimatedSourceCmd.cpp in Sources */, From 5e23b21eb2e1fa93bb723d86bd9a4cf66e9f3c1e Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sat, 23 Dec 2017 20:57:12 +0100 Subject: [PATCH 064/103] Add Vec2 adapter class, Vec3 still to finish --- src/Application/Application.cpp | 4 +- src/Application/Application.h | 5 +- .../Modes/ProjectionMappingMode.cpp | 26 +- src/Application/Modes/ProjectionMappingMode.h | 3 +- src/Application/Modes/TextureMappingMode.cpp | 19 +- src/Application/Modes/TextureMappingMode.h | 5 +- src/Application/SettingsLoader.cpp | 56 +- src/Application/SettingsLoader.h | 1 + src/Commands/AddGridColCmd.cpp | 4 +- src/Commands/AddGridColCmd.h | 3 +- src/Commands/AddGridRowCmd.cpp | 4 +- src/Commands/AddGridRowCmd.h | 3 +- src/Commands/DuplicateSurfaceCmd.cpp | 2 +- src/Commands/DuplicateSurfaceCmd.h | 1 + src/Commands/MvAllTexCoordsCmd.cpp | 2 +- src/Commands/MvAllTexCoordsCmd.h | 3 +- src/Commands/MvSelectionCmd.cpp | 2 +- src/Commands/MvSelectionCmd.h | 5 +- src/Commands/MvSurfaceVertCmd.h | 3 +- src/Commands/MvTexCoordCmd.cpp | 2 +- src/Commands/MvTexCoordCmd.h | 7 +- src/Commands/RmGridColCmd.cpp | 4 +- src/Commands/RmGridColCmd.h | 3 +- src/Commands/RmGridRowCmd.cpp | 4 +- src/Commands/RmGridRowCmd.h | 3 +- src/Commands/SaveTexCoordPosCmd.cpp | 2 +- src/Commands/SaveTexCoordPosCmd.h | 5 +- src/Commands/StartDragSurfaceCmd.cpp | 3 +- src/Commands/StartDragSurfaceCmd.h | 1 + src/Gui/Widgets/ProjectionEditorWidget.cpp | 19 +- src/Gui/Widgets/ProjectionEditorWidget.h | 7 +- src/Gui/Widgets/TextureEditorWidget.cpp | 54 +- src/Gui/Widgets/TextureEditorWidget.h | 11 +- src/Surfaces/BaseSurface.cpp | 30 +- src/Surfaces/BaseSurface.h | 21 +- src/Surfaces/CircleSurface.cpp | 44 +- src/Surfaces/CircleSurface.h | 4 +- src/Surfaces/GridWarpSurface.cpp | 54 +- src/Surfaces/GridWarpSurface.h | 19 +- src/Surfaces/HexagonSurface.cpp | 92 +-- src/Surfaces/HexagonSurface.h | 25 +- src/Surfaces/QuadSurface.cpp | 653 +++++++++--------- src/Surfaces/QuadSurface.h | 111 +-- src/Surfaces/SurfaceFactory.cpp | 36 +- src/Surfaces/SurfaceManager.cpp | 6 +- src/Surfaces/SurfaceManager.h | 7 +- src/Surfaces/TriangleSurface.cpp | 77 ++- src/Surfaces/TriangleSurface.h | 25 +- src/Types/Vec2.cpp | 95 +++ src/Types/Vec2.h | 49 ++ src/Types/Vec3.cpp | 82 +++ src/Types/Vec3.h | 43 ++ src/UserInterface/BaseJoint.cpp | 15 +- src/UserInterface/BaseJoint.h | 9 +- src/UserInterface/CircleJoint.cpp | 2 +- src/UserInterface/CircleJoint.h | 5 +- src/ofxPiMapper.cpp | 2 +- src/ofxPiMapper.h | 3 +- 58 files changed, 1059 insertions(+), 726 deletions(-) create mode 100644 src/Types/Vec2.cpp create mode 100644 src/Types/Vec2.h create mode 100644 src/Types/Vec3.cpp create mode 100644 src/Types/Vec3.h diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index c9ad4c8..b4a9ded 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -356,7 +356,7 @@ void Application::selectPrevTexCoord(){ } } -void Application::moveSelection(ofVec2f by){ +void Application::moveSelection(Vec2 by){ if(_state == ProjectionMappingMode::instance()){ getCmdManager()->exec(new MvSelectionCmd(getSurfaceManager(), by)); }else if(_state == TextureMappingMode::instance()){ @@ -541,7 +541,7 @@ void Application::togglePause(){ } } -void Application::moveTexCoord(int texCoordIndex, ofVec2f by){ +void Application::moveTexCoord(int texCoordIndex, Vec2 by){ if(texCoordIndex >= 0){ getCmdManager()->exec(new MvTexCoordCmd(texCoordIndex, by)); }else{ diff --git a/src/Application/Application.h b/src/Application/Application.h index fd455da..e6ad6d0 100644 --- a/src/Application/Application.h +++ b/src/Application/Application.h @@ -9,6 +9,7 @@ #include "Info.h" #include "SurfaceStack.h" #include "Gui.h" +#include "Vec2.h" // Commands #include "SetApplicationModeCmd.h" @@ -113,7 +114,7 @@ class Application { Moves vertex when in projection mapping mode. Moves texture coordinate when in texture mapping mode. */ - void moveSelection(ofVec2f by); + void moveSelection(Vec2 by); void setPresentationMode(); void setTextureMode(); @@ -131,7 +132,7 @@ class Application { void removeGridRow(); void removeGridColumn(); void togglePause(); - void moveTexCoord(int texCoordIndex, ofVec2f by); + void moveTexCoord(int texCoordIndex, Vec2 by); // TODO: Add moveVertex. // Make it so that other parts of the application react to the change. void undo(); diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 05a5c0a..134dabc 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -114,33 +114,33 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg case OF_KEY_UP: if(app->isShiftKeyDown()){ - app->moveSelection(ofVec2f(0.0f, -10.0f)); + app->moveSelection(Vec2(0.0f, -10.0f)); }else{ - app->moveSelection(ofVec2f(0.0f, -1.0f)); + app->moveSelection(Vec2(0.0f, -1.0f)); } break; case OF_KEY_DOWN: if(app->isShiftKeyDown()){ - app->moveSelection(ofVec2f(0.0f, 10.0f)); + app->moveSelection(Vec2(0.0f, 10.0f)); }else{ - app->moveSelection(ofVec2f(0.0f, 1.0f)); + app->moveSelection(Vec2(0.0f, 1.0f)); } break; case OF_KEY_LEFT: if(app->isShiftKeyDown()){ - app->moveSelection(ofVec2f(-10.0f, 0.0f)); + app->moveSelection(Vec2(-10.0f, 0.0f)); }else{ - app->moveSelection(ofVec2f(-1.0f, 0.0f)); + app->moveSelection(Vec2(-1.0f, 0.0f)); } break; case OF_KEY_RIGHT: if(app->isShiftKeyDown()){ - app->moveSelection(ofVec2f(10.0f, 0.0f)); + app->moveSelection(Vec2(10.0f, 0.0f)); }else{ - app->moveSelection(ofVec2f(1.0f, 0.0f)); + app->moveSelection(Vec2(1.0f, 0.0f)); } break; @@ -194,7 +194,7 @@ void ProjectionMappingMode::onMousePressed(Application * app, ofMouseEventArgs & int hitJointIndex = -1; BaseSurface * hitSurface = 0; - hitJoint = Gui::instance()->getProjectionEditorWidget().hitTestJoints(ofVec2f(args.x, args.y)); + hitJoint = Gui::instance()->getProjectionEditorWidget().hitTestJoints(Vec2(args.x, args.y)); if(hitJoint){ for(int i = Gui::instance()->getProjectionEditorWidget().getJoints()->size() - 1; i >= 0 ; --i){ @@ -205,7 +205,7 @@ void ProjectionMappingMode::onMousePressed(Application * app, ofMouseEventArgs & } }else{ for(int i = app->getSurfaceManager()->size() - 1; i >= 0; --i){ - if(app->getSurfaceManager()->getSurface(i)->hitTest(ofVec2f(args.x, args.y))){ + if(app->getSurfaceManager()->getSurface(i)->hitTest(Vec2(args.x, args.y))){ hitSurface = app->getSurfaceManager()->getSurface(i); break; } @@ -219,7 +219,7 @@ void ProjectionMappingMode::onMousePressed(Application * app, ofMouseEventArgs & hitJoint->startDrag(); Gui::instance()->notifyJointPressed(args, hitJointIndex); }else if(hitSurface){ - _clickPosition = ofVec2f(args.x, args.y); // TODO: redesign this so we can use a kind of + _clickPosition = Vec2(args.x, args.y); // TODO: redesign this so we can use a kind of // display stack. _bSurfaceDrag = true; // TODO: Should be something like `hitSurface->startDrag()` Gui::instance()->notifySurfacePressed(args, hitSurface); @@ -240,8 +240,8 @@ void ProjectionMappingMode::onMouseDragged(Application * app, ofMouseEventArgs & // TODO: Handle app->getGui()->clickPosition and app->getGui()->bDrag locally. if(_bSurfaceDrag){ - ofVec2f mousePosition = ofVec2f(args.x, args.y); - ofVec2f distance = mousePosition - _clickPosition; + Vec2 mousePosition = Vec2(args.x, args.y); + Vec2 distance = mousePosition - _clickPosition; Gui::instance()->getProjectionEditorWidget().moveSelectedSurface(distance); _clickPosition = mousePosition; } diff --git a/src/Application/Modes/ProjectionMappingMode.h b/src/Application/Modes/ProjectionMappingMode.h index 1e10ca0..ea0b000 100644 --- a/src/Application/Modes/ProjectionMappingMode.h +++ b/src/Application/Modes/ProjectionMappingMode.h @@ -9,6 +9,7 @@ #include "SurfaceType.h" #include "Gui.h" #include "ScaleWidget.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -38,7 +39,7 @@ class ProjectionMappingMode : public ApplicationBaseMode { float _surfaceScaleBeforeTransform; - ofVec2f _clickPosition; + Vec2 _clickPosition; bool _bSurfaceDrag; bool _bDrawLayerPanel; diff --git a/src/Application/Modes/TextureMappingMode.cpp b/src/Application/Modes/TextureMappingMode.cpp index 38551dc..e79b80f 100644 --- a/src/Application/Modes/TextureMappingMode.cpp +++ b/src/Application/Modes/TextureMappingMode.cpp @@ -85,19 +85,19 @@ void TextureMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & args){ switch(args.key){ case OF_KEY_LEFT: - moveSelectedTexCoord(app, ofVec2f(-moveStep, 0.0f)); + moveSelectedTexCoord(app, Vec2(-moveStep, 0.0f)); break; case OF_KEY_RIGHT: - moveSelectedTexCoord(app, ofVec2f(moveStep, 0.0f)); + moveSelectedTexCoord(app, Vec2(moveStep, 0.0f)); break; case OF_KEY_UP: - moveSelectedTexCoord(app, ofVec2f(0.0f, -moveStep)); + moveSelectedTexCoord(app, Vec2(0.0f, -moveStep)); break; case OF_KEY_DOWN: - moveSelectedTexCoord(app, ofVec2f(0.0f, moveStep)); + moveSelectedTexCoord(app, Vec2(0.0f, moveStep)); break; case '>': @@ -159,7 +159,7 @@ void TextureMappingMode::onMousePressed(Application * app, ofMouseEventArgs & ar CircleJoint * hitJoint = Gui::instance()->getTextureEditorWidget().hitTestJoints( - ofVec2f(args.x, args.y)); + Vec2(args.x, args.y)); if(hitJoint != 0){ hitJoint->mousePressed(args); @@ -220,7 +220,7 @@ void TextureMappingMode::onMouseReleased(Application * app, ofMouseEventArgs & a // create an undoable move tex coord command. int selectedTexCoord = Gui::instance()->getTextureEditorWidget().getSelectedTexCoord(); if(selectedTexCoord >= 0){ - ofVec2f texCoordCurrent = + Vec2 texCoordCurrent = app->getSurfaceManager()->getSelectedSurface()->getTexCoords()[selectedTexCoord]; if(texCoordCurrent != _texCoordOnClick){ @@ -247,7 +247,8 @@ void TextureMappingMode::onMouseDragged(Application * app, ofMouseEventArgs & ar if(_bCropAreaDrag){ ofPoint mousePosition = ofPoint(args.x, args.y); ofPoint distance = mousePosition - _clickPosition; - Gui::instance()->getTextureEditorWidget().moveTexCoords(distance); + Vec2 d = Vec2(distance.x, distance.y); + Gui::instance()->getTextureEditorWidget().moveTexCoords(d); _clickPosition = mousePosition; } }else{ @@ -263,7 +264,7 @@ void TextureMappingMode::drawTexture(Application * app){ ofEnableNormalizedTexCoords(); ofSetColor(255, 255, 255, 255); - app->getSurfaceManager()->getSelectedSurface()->drawTexture(ofVec2f(0, 0)); + app->getSurfaceManager()->getSelectedSurface()->drawTexture(Vec2(0, 0)); if(!normalizedTexCoords){ ofDisableNormalizedTexCoords(); @@ -271,7 +272,7 @@ void TextureMappingMode::drawTexture(Application * app){ } } -void TextureMappingMode::moveSelectedTexCoord(Application * app, ofVec2f by){ +void TextureMappingMode::moveSelectedTexCoord(Application * app, Vec2 by){ if(app->getSurfaceManager()->getSelectedSurface() != 0){ int selectedTexCoord = Gui::instance()->getTextureEditorWidget().getSelectedTexCoord(); app->moveTexCoord(selectedTexCoord, by); diff --git a/src/Application/Modes/TextureMappingMode.h b/src/Application/Modes/TextureMappingMode.h index ac3e5af..ae6eba1 100644 --- a/src/Application/Modes/TextureMappingMode.h +++ b/src/Application/Modes/TextureMappingMode.h @@ -13,6 +13,7 @@ #include "SaveTexCoordPosCmd.h" #include "SelTexCoordCmd.h" #include "Gui.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -34,7 +35,7 @@ class TextureMappingMode : public ApplicationBaseMode { void onGuiEvent(Application * app, GuiEvent & e){} void drawTexture(Application * app); - void moveSelectedTexCoord(Application * app, ofVec2f by); + void moveSelectedTexCoord(Application * app, Vec2 by); void selectNextVertex(Application * app); void selectPrevVertex(Application * app); @@ -62,7 +63,7 @@ class TextureMappingMode : public ApplicationBaseMode { ofPoint _prevCanvasTranslate; ofPoint _clickCanvasTranslate; - ofVec2f _texCoordOnClick; + Vec2 _texCoordOnClick; }; diff --git a/src/Application/SettingsLoader.cpp b/src/Application/SettingsLoader.cpp index 9582c4c..0ea597c 100644 --- a/src/Application/SettingsLoader.cpp +++ b/src/Application/SettingsLoader.cpp @@ -194,11 +194,11 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->addTag("texCoords"); xmlSettings->pushTag("texCoords"); - vector * texCoords = &surface->getTexCoords(); + vector * texCoords = &surface->getTexCoords(); for(int j = 0; j < texCoords->size(); j++){ xmlSettings->addTag("texCoord"); xmlSettings->pushTag("texCoord", j); - ofVec2f * texCoord = &(*texCoords)[j]; + Vec2 * texCoord = &(*texCoords)[j]; xmlSettings->addValue("x", texCoord->x); xmlSettings->addValue("y", texCoord->y); xmlSettings->popTag(); // texCoord @@ -252,28 +252,28 @@ bool SettingsLoader::create(string fileName){ } BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); if(xmlSettings->tagExists("vertex", 0)){ xmlSettings->pushTag("vertex", 0); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 1)){ xmlSettings->pushTag("vertex", 1); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 100.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 100.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 2)){ xmlSettings->pushTag("vertex", 2); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 100.0f))); xmlSettings->popTag(); } @@ -281,28 +281,28 @@ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); if(xmlSettings->tagExists("texCoord", 0)){ xmlSettings->pushTag("texCoord", 0); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("texCoord", 1)){ xmlSettings->pushTag("texCoord", 1); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 1.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 1.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("texCoord", 2)){ xmlSettings->pushTag("texCoord", 2); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 1.0f))); xmlSettings->popTag(); } @@ -321,35 +321,35 @@ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); if(xmlSettings->tagExists("vertex", 0)){ xmlSettings->pushTag("vertex", 0); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 1)){ xmlSettings->pushTag("vertex", 1); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 100.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 100.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 2)){ xmlSettings->pushTag("vertex", 2); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 100.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 100.0f), xmlSettings->getValue("y", 100.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 3)){ xmlSettings->pushTag("vertex", 3); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 100.0f))); xmlSettings->popTag(); } @@ -357,35 +357,35 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); if(xmlSettings->tagExists("texCoord", 0)){ xmlSettings->pushTag("texCoord", 0); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("texCoord", 1)){ xmlSettings->pushTag("texCoord", 1); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 1.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 1.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("texCoord", 2)){ xmlSettings->pushTag("texCoord", 2); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 1.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 1.0f), xmlSettings->getValue("y", 1.0f))); xmlSettings->popTag(); } if(xmlSettings->tagExists("texCoord", 3)){ xmlSettings->pushTag("texCoord", 3); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 1.0f))); xmlSettings->popTag(); } @@ -415,7 +415,7 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -424,7 +424,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ while(xmlSettings->tagExists("vertex", iv)){ xmlSettings->pushTag("vertex", iv); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); ++iv; @@ -433,7 +433,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); @@ -442,7 +442,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ while(xmlSettings->tagExists("texCoord", it)){ xmlSettings->pushTag("texCoord", it); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); ++it; @@ -476,7 +476,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -484,7 +484,7 @@ BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ unsigned int v = 0; while(xmlSettings->tagExists("vertex", v)){ xmlSettings->pushTag("vertex", v); - vertices.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); // vertex v += 1; @@ -493,7 +493,7 @@ BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); @@ -501,7 +501,7 @@ BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ unsigned int t = 0; while(xmlSettings->tagExists("texCoord", t)){ xmlSettings->pushTag("texCoord", t); - texCoords.push_back(ofVec2f(xmlSettings->getValue("x", 0.0f), + texCoords.push_back(Vec2(xmlSettings->getValue("x", 0.0f), xmlSettings->getValue("y", 0.0f))); xmlSettings->popTag(); // texCoord t += 1; diff --git a/src/Application/SettingsLoader.h b/src/Application/SettingsLoader.h index 060728a..1b5ba9d 100644 --- a/src/Application/SettingsLoader.h +++ b/src/Application/SettingsLoader.h @@ -8,6 +8,7 @@ #include "SurfaceFactory.h" #include "SurfaceType.h" #include "SourceTypeHelper.h" +#include "Vec2.h" namespace ofx { namespace piMapper { diff --git a/src/Commands/AddGridColCmd.cpp b/src/Commands/AddGridColCmd.cpp index 7011b18..226da21 100644 --- a/src/Commands/AddGridColCmd.cpp +++ b/src/Commands/AddGridColCmd.cpp @@ -18,9 +18,9 @@ void AddGridColCmd::exec(){ void AddGridColCmd::undo(){ ofLogNotice("AddGridColCmd", "undo"); _surface->setGridCols(_surface->getGridCols() - 1); - vector v; + vector v; for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( ofVec2f(_vertices[i].x, _vertices[i].y) ); + v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); } _surface->setVertices(v); _surface->setTexCoords(_texCoords); diff --git a/src/Commands/AddGridColCmd.h b/src/Commands/AddGridColCmd.h index 24b298b..53575f4 100644 --- a/src/Commands/AddGridColCmd.h +++ b/src/Commands/AddGridColCmd.h @@ -4,6 +4,7 @@ #include "BaseCmd.h" #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" +#include "Vec2.h" class ofxPiMapper; @@ -19,7 +20,7 @@ class AddGridColCmd : public BaseUndoCmd { private: vector _vertices; - vector _texCoords; + vector _texCoords; GridWarpSurface * _surface; }; diff --git a/src/Commands/AddGridRowCmd.cpp b/src/Commands/AddGridRowCmd.cpp index ba35c8d..46355f7 100644 --- a/src/Commands/AddGridRowCmd.cpp +++ b/src/Commands/AddGridRowCmd.cpp @@ -18,9 +18,9 @@ void AddGridRowCmd::exec(){ void AddGridRowCmd::undo(){ ofLogNotice("AddGridRowCmd", "undo"); _surface->setGridRows(_surface->getGridRows() - 1); - vector v; + vector v; for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( ofVec2f(_vertices[i].x, _vertices[i].y) ); + v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); } _surface->setVertices(v); _surface->setTexCoords(_texCoords); diff --git a/src/Commands/AddGridRowCmd.h b/src/Commands/AddGridRowCmd.h index cd4b31c..cdb4e95 100644 --- a/src/Commands/AddGridRowCmd.h +++ b/src/Commands/AddGridRowCmd.h @@ -4,6 +4,7 @@ #include "BaseCmd.h" #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" +#include "Vec2.h" class ofxPiMapper; @@ -19,7 +20,7 @@ class AddGridRowCmd : public BaseUndoCmd { private: vector _vertices; - vector _texCoords; + vector _texCoords; GridWarpSurface * _surface; }; diff --git a/src/Commands/DuplicateSurfaceCmd.cpp b/src/Commands/DuplicateSurfaceCmd.cpp index c907ac5..f2c7157 100644 --- a/src/Commands/DuplicateSurfaceCmd.cpp +++ b/src/Commands/DuplicateSurfaceCmd.cpp @@ -12,7 +12,7 @@ void DuplicateSurfaceCmd::exec(){ ofLogNotice("DuplicateSurfaceCmd", "exec"); _duplicate = _surface->clone(); _surfaceManager->addSurface(_duplicate); - _duplicate->moveBy(ofVec2f(10.0f, 10.0f)); + _duplicate->moveBy(Vec2(10.0f, 10.0f)); _surfaceManager->selectSurface(_duplicate); } diff --git a/src/Commands/DuplicateSurfaceCmd.h b/src/Commands/DuplicateSurfaceCmd.h index 9e5c927..1809d92 100644 --- a/src/Commands/DuplicateSurfaceCmd.h +++ b/src/Commands/DuplicateSurfaceCmd.h @@ -7,6 +7,7 @@ #include "BaseCmd.h" #include "BaseSurface.h" #include "SurfaceManager.h" +#include "Vec2.h" namespace ofx { namespace piMapper { diff --git a/src/Commands/MvAllTexCoordsCmd.cpp b/src/Commands/MvAllTexCoordsCmd.cpp index cef0d19..121dbdb 100644 --- a/src/Commands/MvAllTexCoordsCmd.cpp +++ b/src/Commands/MvAllTexCoordsCmd.cpp @@ -15,7 +15,7 @@ void MvAllTexCoordsCmd::exec(){ void MvAllTexCoordsCmd::undo(){ ofLogNotice("MvAllTexCoordsCmd", "undo"); - ofVec2f dist = _texCoords[0] - _surface->getTexCoords()[0]; + Vec2 dist = _texCoords[0] - _surface->getTexCoords()[0]; dist.x = _surface->getSource()->getTexture()->getWidth() * dist.x; dist.y = _surface->getSource()->getTexture()->getHeight() * dist.y; _texEditor->moveTexCoords(dist); diff --git a/src/Commands/MvAllTexCoordsCmd.h b/src/Commands/MvAllTexCoordsCmd.h index f8d0ec2..3253f09 100644 --- a/src/Commands/MvAllTexCoordsCmd.h +++ b/src/Commands/MvAllTexCoordsCmd.h @@ -7,6 +7,7 @@ #include "BaseCmd.h" #include "BaseSurface.h" #include "TextureEditorWidget.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -19,7 +20,7 @@ class MvAllTexCoordsCmd : public BaseUndoCmd { void undo(); private: - vector _texCoords; + vector _texCoords; BaseSurface * _surface; TextureEditorWidget * _texEditor; diff --git a/src/Commands/MvSelectionCmd.cpp b/src/Commands/MvSelectionCmd.cpp index c9624a1..299362a 100644 --- a/src/Commands/MvSelectionCmd.cpp +++ b/src/Commands/MvSelectionCmd.cpp @@ -3,7 +3,7 @@ namespace ofx { namespace piMapper { -MvSelectionCmd::MvSelectionCmd(SurfaceManager * sm, ofVec2f moveBy){ +MvSelectionCmd::MvSelectionCmd(SurfaceManager * sm, Vec2 moveBy){ _surfaceManager = sm; _movedBy = moveBy; } diff --git a/src/Commands/MvSelectionCmd.h b/src/Commands/MvSelectionCmd.h index 8772d58..d72b1ab 100644 --- a/src/Commands/MvSelectionCmd.h +++ b/src/Commands/MvSelectionCmd.h @@ -2,6 +2,7 @@ #include "BaseCmd.h" #include "SurfaceManager.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -9,13 +10,13 @@ namespace piMapper { class MvSelectionCmd : public BaseUndoCmd { public: - MvSelectionCmd(SurfaceManager * sm, ofVec2f moveBy); + MvSelectionCmd(SurfaceManager * sm, Vec2 moveBy); void exec(); void undo(); private: SurfaceManager * _surfaceManager; - ofVec2f _movedBy; + Vec2 _movedBy; }; diff --git a/src/Commands/MvSurfaceVertCmd.h b/src/Commands/MvSurfaceVertCmd.h index 7695728..903184f 100644 --- a/src/Commands/MvSurfaceVertCmd.h +++ b/src/Commands/MvSurfaceVertCmd.h @@ -8,6 +8,7 @@ #include "BaseSurface.h" #include "ProjectionEditorWidget.h" #include "BaseJoint.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -21,7 +22,7 @@ class MvSurfaceVertCmd : public BaseUndoCmd { private: int _vertIndex; - ofVec2f _prevVertPos; + Vec2 _prevVertPos; BaseSurface * _surface; }; diff --git a/src/Commands/MvTexCoordCmd.cpp b/src/Commands/MvTexCoordCmd.cpp index 762a09d..53b9450 100644 --- a/src/Commands/MvTexCoordCmd.cpp +++ b/src/Commands/MvTexCoordCmd.cpp @@ -3,7 +3,7 @@ namespace ofx { namespace piMapper { -MvTexCoordCmd::MvTexCoordCmd(int texCoordIndex, ofVec2f by){ +MvTexCoordCmd::MvTexCoordCmd(int texCoordIndex, Vec2 by){ _texCoordIndex = texCoordIndex; _moveBy = by; } diff --git a/src/Commands/MvTexCoordCmd.h b/src/Commands/MvTexCoordCmd.h index beb046f..950ebf0 100644 --- a/src/Commands/MvTexCoordCmd.h +++ b/src/Commands/MvTexCoordCmd.h @@ -7,6 +7,7 @@ #include "BaseCmd.h" #include "CircleJoint.h" #include "Gui.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -14,14 +15,14 @@ namespace piMapper { class MvTexCoordCmd : public BaseUndoCmd { public: - MvTexCoordCmd(int texCoordIndex, ofVec2f by); + MvTexCoordCmd(int texCoordIndex, Vec2 by); void exec(); void undo(); private: int _texCoordIndex; - ofVec2f _moveBy; - ofVec2f _positionBefore; + Vec2 _moveBy; + Vec2 _positionBefore; }; diff --git a/src/Commands/RmGridColCmd.cpp b/src/Commands/RmGridColCmd.cpp index a8af6fc..a874067 100644 --- a/src/Commands/RmGridColCmd.cpp +++ b/src/Commands/RmGridColCmd.cpp @@ -30,10 +30,10 @@ void RmGridColCmd::undo(){ } _surface->setGridCols(_surface->getGridCols() + 1); - vector v; + vector v; for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( ofVec2f(_vertices[i].x, _vertices[i].y) ); + v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); } _surface->setVertices(v); diff --git a/src/Commands/RmGridColCmd.h b/src/Commands/RmGridColCmd.h index 83b0871..6026224 100644 --- a/src/Commands/RmGridColCmd.h +++ b/src/Commands/RmGridColCmd.h @@ -4,6 +4,7 @@ #include "BaseCmd.h" #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" +#include "Vec2.h" class ofxPiMapper; @@ -19,7 +20,7 @@ class RmGridColCmd : public BaseUndoCmd { private: vector _vertices; - vector _texCoords; + vector _texCoords; GridWarpSurface * _surface; bool _doNotUndo; diff --git a/src/Commands/RmGridRowCmd.cpp b/src/Commands/RmGridRowCmd.cpp index 3420d8b..fcd6ba5 100644 --- a/src/Commands/RmGridRowCmd.cpp +++ b/src/Commands/RmGridRowCmd.cpp @@ -30,10 +30,10 @@ void RmGridRowCmd::undo(){ } _surface->setGridRows(_surface->getGridRows() + 1); - vector v; + vector v; for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( ofVec2f(_vertices[i].x, _vertices[i].y) ); + v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); } _surface->setVertices(v); diff --git a/src/Commands/RmGridRowCmd.h b/src/Commands/RmGridRowCmd.h index 1abe401..1fa9d0d 100644 --- a/src/Commands/RmGridRowCmd.h +++ b/src/Commands/RmGridRowCmd.h @@ -4,6 +4,7 @@ #include "BaseCmd.h" #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" +#include "Vec2.h" class ofxPiMapper; @@ -19,7 +20,7 @@ class RmGridRowCmd : public BaseUndoCmd { private: vector _vertices; - vector _texCoords; + vector _texCoords; GridWarpSurface * _surface; bool _doNotUndo; diff --git a/src/Commands/SaveTexCoordPosCmd.cpp b/src/Commands/SaveTexCoordPosCmd.cpp index 0c255e6..323cc2e 100644 --- a/src/Commands/SaveTexCoordPosCmd.cpp +++ b/src/Commands/SaveTexCoordPosCmd.cpp @@ -3,7 +3,7 @@ namespace ofx { namespace piMapper { -SaveTexCoordPosCmd::SaveTexCoordPosCmd(int texCoordIndex, ofVec2f position){ +SaveTexCoordPosCmd::SaveTexCoordPosCmd(int texCoordIndex, Vec2 position){ _texCoordIndex = texCoordIndex; _position = position; } diff --git a/src/Commands/SaveTexCoordPosCmd.h b/src/Commands/SaveTexCoordPosCmd.h index 4b9ed5f..aec4af8 100644 --- a/src/Commands/SaveTexCoordPosCmd.h +++ b/src/Commands/SaveTexCoordPosCmd.h @@ -7,6 +7,7 @@ #include "BaseCmd.h" #include "CircleJoint.h" #include "Gui.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -14,13 +15,13 @@ namespace piMapper { class SaveTexCoordPosCmd : public BaseUndoCmd { public: - SaveTexCoordPosCmd(int texCoordIndex, ofVec2f position); + SaveTexCoordPosCmd(int texCoordIndex, Vec2 position); void exec(); void undo(); private: int _texCoordIndex; - ofVec2f _position; + Vec2 _position; }; diff --git a/src/Commands/StartDragSurfaceCmd.cpp b/src/Commands/StartDragSurfaceCmd.cpp index 8adb2ed..9ea7bff 100644 --- a/src/Commands/StartDragSurfaceCmd.cpp +++ b/src/Commands/StartDragSurfaceCmd.cpp @@ -15,7 +15,8 @@ void StartDragSurfaceCmd::exec(){ void StartDragSurfaceCmd::undo(){ ofLogNotice("StartDragSurfaceCmd", "undo"); - _surface->moveBy(_previousVertices[0] - _surface->getVertices()[0]); + ofVec3f step = _previousVertices[0] - _surface->getVertices()[0]; + _surface->moveBy(Vec2(step)); } } // namespace piMapper diff --git a/src/Commands/StartDragSurfaceCmd.h b/src/Commands/StartDragSurfaceCmd.h index 7bee80d..d8d7757 100644 --- a/src/Commands/StartDragSurfaceCmd.h +++ b/src/Commands/StartDragSurfaceCmd.h @@ -2,6 +2,7 @@ #include "BaseCmd.h" #include "BaseSurface.h" +#include "Vec2.h" namespace ofx { namespace piMapper { diff --git a/src/Gui/Widgets/ProjectionEditorWidget.cpp b/src/Gui/Widgets/ProjectionEditorWidget.cpp index 716018f..91016de 100644 --- a/src/Gui/Widgets/ProjectionEditorWidget.cpp +++ b/src/Gui/Widgets/ProjectionEditorWidget.cpp @@ -47,7 +47,7 @@ void ProjectionEditorWidget::mouseDragged(ofMouseEventArgs & args){ joints[i]->mouseDragged(args); } - ofVec2f mousePosition = ofVec2f(args.x, args.y); + Vec2 mousePosition = Vec2(args.x, args.y); // Collect all vertices of the projection surfaces vector allVertices; @@ -65,10 +65,13 @@ void ProjectionEditorWidget::mouseDragged(ofMouseEventArgs & args){ for(int i = 0; i < joints.size(); i++){ if(joints[i]->isDragged()){ for(int j = 0; j < allVertices.size(); j++){ - float distance = mousePosition.distance(*allVertices[j]); + Vec2 v(*allVertices[j]); + float distance = mousePosition.distance(v); if(distance < fSnapDistance){ joints[i]->position = *allVertices[j]; - ofVec2f clickDistance = joints[i]->position - ofVec2f(args.x, args.y); + Vec2 jointPosition(joints[i]->position); + Vec2 clickPosition(args.x, args.y); + Vec2 clickDistance = jointPosition - clickPosition; joints[i]->setClickDistance(clickDistance); break; } @@ -135,7 +138,7 @@ void ProjectionEditorWidget::createJoints(){ for(int i = 0; i < vertices.size(); i++){ joints.push_back(new CircleJoint()); - joints.back()->position = ofVec2f(vertices[i].x, vertices[i].y); + joints.back()->position = Vec2(vertices[i].x, vertices[i].y); } } @@ -144,7 +147,7 @@ void ProjectionEditorWidget::updateJoints(){ vector & vertices = surfaceManager->getSelectedSurface()->getVertices(); for(int i = 0; i < vertices.size(); i++){ - joints[i]->position = ofVec2f(vertices[i].x, vertices[i].y); + joints[i]->position = Vec2(vertices[i].x, vertices[i].y); } } @@ -156,7 +159,7 @@ void ProjectionEditorWidget::unselectAllJoints(){ } } -void ProjectionEditorWidget::moveSelectedSurface(ofVec2f by){ +void ProjectionEditorWidget::moveSelectedSurface(Vec2 by){ if(surfaceManager == 0){ return; } @@ -177,7 +180,7 @@ void ProjectionEditorWidget::setSnapDistance(float newSnapDistance){ fSnapDistance = newSnapDistance; } -CircleJoint * ProjectionEditorWidget::hitTestJoints(ofVec2f pos){ +CircleJoint * ProjectionEditorWidget::hitTestJoints(Vec2 pos){ if(surfaceManager->getSelectedSurface() == 0){ return 0; } @@ -236,4 +239,4 @@ void ProjectionEditorWidget::drawJoints(){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Gui/Widgets/ProjectionEditorWidget.h b/src/Gui/Widgets/ProjectionEditorWidget.h index 28aed7e..23d6e10 100644 --- a/src/Gui/Widgets/ProjectionEditorWidget.h +++ b/src/Gui/Widgets/ProjectionEditorWidget.h @@ -2,6 +2,7 @@ #include "SurfaceManager.h" #include "CircleJoint.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -22,11 +23,11 @@ class ProjectionEditorWidget { void createJoints(); void updateJoints(); void unselectAllJoints(); - void moveSelectedSurface(ofVec2f by); + void moveSelectedSurface(Vec2 by); void stopDragJoints(); void updateVertices(); void setSnapDistance(float newSnapDistance); - CircleJoint * hitTestJoints(ofVec2f pos); + CircleJoint * hitTestJoints(Vec2 pos); vector * getJoints(); void onVertexChanged(int & i); @@ -46,4 +47,4 @@ class ProjectionEditorWidget { }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Gui/Widgets/TextureEditorWidget.cpp b/src/Gui/Widgets/TextureEditorWidget.cpp index 617c0a6..da21b01 100644 --- a/src/Gui/Widgets/TextureEditorWidget.cpp +++ b/src/Gui/Widgets/TextureEditorWidget.cpp @@ -23,7 +23,7 @@ void TextureEditorWidget::update(){ } // update surface if one of the joints is being dragged - ofVec2f textureSize = ofVec2f(surface->getSource()->getTexture()->getWidth(), + Vec2 textureSize = Vec2(surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); // Get selected joint index @@ -44,8 +44,8 @@ void TextureEditorWidget::update(){ if(surface->getType() == SurfaceType::GRID_WARP_SURFACE){ GridWarpSurface * s = (GridWarpSurface *)surface; - vector & texCoords = surface->getTexCoords(); - ofVec2f textureSize = ofVec2f(surface->getSource()->getTexture()->getWidth(), + vector & texCoords = surface->getTexCoords(); + Vec2 textureSize = Vec2(surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); int rows = s->getGridRows(); @@ -65,7 +65,7 @@ void TextureEditorWidget::update(){ int i = 0; for(int iy = 0; iy <= rows; ++iy){ for(int ix = 0; ix <= cols; ++ix){ - ofVec2f t; + Vec2 t; t.x = sx + dx * ix; t.y = sy + dy * iy; surface->setTexCoord(i, t); @@ -132,7 +132,7 @@ void TextureEditorWidget::createJoints(){ return; } clearJoints(); - vector & texCoords = surface->getTexCoords(); + vector & texCoords = surface->getTexCoords(); if(surface->getSource()->getTexture()->isAllocated()){ _pollCreateJoints = false; @@ -141,11 +141,11 @@ void TextureEditorWidget::createJoints(){ return; } - ofVec2f textureSize = ofVec2f(surface->getSource()->getTexture()->getWidth(), + Vec2 textureSize = Vec2(surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); // Select joints depending on the surface type - vector tc; + vector tc; if(surface->getType() == SurfaceType::TRIANGLE_SURFACE){ tc = texCoords; @@ -274,13 +274,13 @@ void TextureEditorWidget::selectPrevTexCoord(){ selectTexCoord(joints.size() - 1); } -void TextureEditorWidget::moveTexCoords(ofVec2f by){ +void TextureEditorWidget::moveTexCoords(Vec2 by){ if(surface == 0){ return; } - vector & texCoords = surface->getTexCoords(); - ofVec2f textureSize = ofVec2f(surface->getSource()->getTexture()->getWidth(), + vector & texCoords = surface->getTexCoords(); + Vec2 textureSize = Vec2(surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); for(int i = 0; i < joints.size(); i++){ @@ -313,7 +313,7 @@ void TextureEditorWidget::moveTexCoords(ofVec2f by){ int i = 0; for(int iy = 0; iy <= rows; ++iy){ for(int ix = 0; ix <= cols; ++ix){ - ofVec2f t; + Vec2 t; t.x = sx + dx * ix; t.y = sy + dy * iy; surface->setTexCoord(i, t); @@ -327,7 +327,7 @@ void TextureEditorWidget::moveTexCoords(ofVec2f by){ } } -void TextureEditorWidget::moveTexCoordTo(int texCoordIndex, ofVec2f position){ +void TextureEditorWidget::moveTexCoordTo(int texCoordIndex, Vec2 position){ if(surface == 0){ return; } @@ -335,7 +335,7 @@ void TextureEditorWidget::moveTexCoordTo(int texCoordIndex, ofVec2f position){ ofLogNotice("TextureEditorWidget::moveTexCoordTo") << texCoordIndex << ", " << position.x << ", " << position.y; surface->setTexCoord(texCoordIndex, position); - ofVec2f textureSize = ofVec2f( + Vec2 textureSize = Vec2( surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); joints[texCoordIndex]->position = position * textureSize; @@ -347,7 +347,7 @@ void TextureEditorWidget::stopDragJoints(){ } } -void TextureEditorWidget::moveSelection(ofVec2f by){ +void TextureEditorWidget::moveSelection(Vec2 by){ // check if joints selected bool bJointSelected = false; BaseJoint * selectedJoint; @@ -369,32 +369,32 @@ void TextureEditorWidget::moveSelection(ofVec2f by){ void TextureEditorWidget::constrainJointsToQuad(int selectedJointIndex){ switch(selectedJointIndex){ case 0: - joints[1]->position = ofVec2f(joints[1]->position.x, joints[0]->position.y); - joints[2]->position = ofVec2f(joints[1]->position.x, joints[3]->position.y); - joints[3]->position = ofVec2f(joints[0]->position.x, joints[3]->position.y); + joints[1]->position = Vec2(joints[1]->position.x, joints[0]->position.y); + joints[2]->position = Vec2(joints[1]->position.x, joints[3]->position.y); + joints[3]->position = Vec2(joints[0]->position.x, joints[3]->position.y); break; case 1: - joints[0]->position = ofVec2f(joints[0]->position.x, joints[1]->position.y); - joints[2]->position = ofVec2f(joints[1]->position.x, joints[2]->position.y); - joints[3]->position = ofVec2f(joints[0]->position.x, joints[2]->position.y); + joints[0]->position = Vec2(joints[0]->position.x, joints[1]->position.y); + joints[2]->position = Vec2(joints[1]->position.x, joints[2]->position.y); + joints[3]->position = Vec2(joints[0]->position.x, joints[2]->position.y); break; case 2: - joints[1]->position = ofVec2f(joints[2]->position.x, joints[1]->position.y); - joints[3]->position = ofVec2f(joints[3]->position.x, joints[2]->position.y); - joints[0]->position = ofVec2f(joints[3]->position.x, joints[1]->position.y); + joints[1]->position = Vec2(joints[2]->position.x, joints[1]->position.y); + joints[3]->position = Vec2(joints[3]->position.x, joints[2]->position.y); + joints[0]->position = Vec2(joints[3]->position.x, joints[1]->position.y); break; case 3: - joints[0]->position = ofVec2f(joints[3]->position.x, joints[0]->position.y); - joints[2]->position = ofVec2f(joints[2]->position.x, joints[3]->position.y); - joints[1]->position = ofVec2f(joints[2]->position.x, joints[0]->position.y); + joints[0]->position = Vec2(joints[3]->position.x, joints[0]->position.y); + joints[2]->position = Vec2(joints[2]->position.x, joints[3]->position.y); + joints[1]->position = Vec2(joints[2]->position.x, joints[0]->position.y); break; } // switch } -CircleJoint * TextureEditorWidget::hitTestJoints(ofVec2f pos){ +CircleJoint * TextureEditorWidget::hitTestJoints(Vec2 pos){ for(int i = 0; i < joints.size(); i++){ if(joints[i]->hitTest(pos)){ return joints[i]; diff --git a/src/Gui/Widgets/TextureEditorWidget.h b/src/Gui/Widgets/TextureEditorWidget.h index ded19a8..dfb2a6e 100644 --- a/src/Gui/Widgets/TextureEditorWidget.h +++ b/src/Gui/Widgets/TextureEditorWidget.h @@ -7,6 +7,7 @@ #include "CircleJoint.h" #include "SurfaceType.h" #include "GuiBaseWidget.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -38,13 +39,13 @@ class TextureEditorWidget : public GuiBaseWidget { void selectNextTexCoord(); void selectPrevTexCoord(); - void moveTexCoords(ofVec2f by); - void moveTexCoordTo(int texCoordIndex, ofVec2f position); + void moveTexCoords(Vec2 by); + void moveTexCoordTo(int texCoordIndex, Vec2 position); void stopDragJoints(); - void moveSelection(ofVec2f by); + void moveSelection(Vec2 by); void constrainJointsToQuad(int selectedJointIndex); - CircleJoint * hitTestJoints(ofVec2f pos); + CircleJoint * hitTestJoints(Vec2 pos); vector & getJoints(); private: @@ -57,4 +58,4 @@ class TextureEditorWidget : public GuiBaseWidget { }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/BaseSurface.cpp b/src/Surfaces/BaseSurface.cpp index 5e84657..6675055 100644 --- a/src/Surfaces/BaseSurface.cpp +++ b/src/Surfaces/BaseSurface.cpp @@ -51,24 +51,32 @@ void BaseSurface::createDefaultTexture(){ source = defaultSource; } -void BaseSurface::drawTexture(ofVec2f position){ +void BaseSurface::drawTexture(Vec2 position){ if(source->getTexture() == 0){ ofLogWarning("BaseSurface") << "Source texture empty. Not drawing."; return; } ofMesh texMesh; - texMesh.addVertex(position); - texMesh.addVertex(position + ofVec2f(source->getTexture()->getWidth(), 0.0f)); - texMesh.addVertex(position - + ofVec2f(source->getTexture()->getWidth(), source->getTexture()->getHeight())); - texMesh.addVertex(position + ofVec2f(0.0f, source->getTexture()->getHeight())); + texMesh.addVertex(position.toOf()); + + Vec2 topRight(source->getTexture()->getWidth(), 0.0f); + texMesh.addVertex((position + topRight).toOf()); + + Vec2 bottomRight(source->getTexture()->getWidth(), source->getTexture()->getHeight()); + texMesh.addVertex((position + bottomRight).toOf()); + + Vec2 bottomLeft(0.0f, source->getTexture()->getHeight()); + texMesh.addVertex((position + bottomLeft).toOf()); + texMesh.addTriangle(0, 2, 3); texMesh.addTriangle(0, 1, 2); - texMesh.addTexCoord(ofVec2f(0.0f, 0.0f)); - texMesh.addTexCoord(ofVec2f(1.0f, 0.0f)); - texMesh.addTexCoord(ofVec2f(1.0f, 1.0f)); - texMesh.addTexCoord(ofVec2f(0.0f, 1.0f)); + + texMesh.addTexCoord(Vec2(0.0f, 0.0f).toOf()); + texMesh.addTexCoord(Vec2(1.0f, 0.0f).toOf()); + texMesh.addTexCoord(Vec2(1.0f, 1.0f).toOf()); + texMesh.addTexCoord(Vec2(0.0f, 1.0f).toOf()); + source->getTexture()->bind(); texMesh.draw(); source->getTexture()->unbind(); @@ -150,4 +158,4 @@ ofRectangle & BaseSurface::getBoundingBox(){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/BaseSurface.h b/src/Surfaces/BaseSurface.h index c8c680d..1dfa6e9 100644 --- a/src/Surfaces/BaseSurface.h +++ b/src/Surfaces/BaseSurface.h @@ -3,6 +3,7 @@ #include "ofMain.h" #include #include "BaseSource.h" +#include "Vec2.h" using namespace std; @@ -17,25 +18,25 @@ class BaseSurface { virtual void setup() = 0; virtual void draw() = 0; - virtual void setVertex(int index, ofVec2f p) = 0; - virtual void setVertices(vector v) = 0; - virtual void setTexCoord(int index, ofVec2f t) = 0; - virtual void setTexCoords(vector t) = 0; - virtual void moveBy(ofVec2f v) = 0; + virtual void setVertex(int index, Vec2 p) = 0; + virtual void setVertices(vector v) = 0; + virtual void setTexCoord(int index, Vec2 t) = 0; + virtual void setTexCoords(vector t) = 0; + virtual void moveBy(Vec2 v) = 0; virtual int getType() = 0; - virtual bool hitTest(ofVec2f p) = 0; + virtual bool hitTest(Vec2 p) = 0; virtual ofPolyline getHitArea() = 0; virtual ofPolyline getTextureHitArea() = 0; virtual vector & getVertices() = 0; - virtual vector & getTexCoords() = 0; + virtual vector & getTexCoords() = 0; virtual BaseSurface * clone() = 0; - void drawTexture(ofVec2f position); + void drawTexture(Vec2 position); void setSource(BaseSource * newSource); void setMoved(bool moved); void scaleTo(float scale); @@ -67,7 +68,9 @@ class BaseSurface { bool _moved; float _scale; + + vector _texCoords; }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/CircleSurface.cpp b/src/Surfaces/CircleSurface.cpp index 2f73354..c2eda67 100644 --- a/src/Surfaces/CircleSurface.cpp +++ b/src/Surfaces/CircleSurface.cpp @@ -104,10 +104,10 @@ void CircleSurface::setup() { // } //#endif - ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 0.0f)); - ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 0.0f)); - ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 1.0f)); - ofVec2f t4 = ofVec2f(ofVec2f(0.0f, 1.0f)); + Vec2 t1 = Vec2(0.0f, 0.0f); + Vec2 t2 = Vec2(1.0f, 0.0f); + Vec2 t3 = Vec2(1.0f, 1.0f); + Vec2 t4 = Vec2(0.0f, 1.0f); defaultTexCoords.push_back(t1); defaultTexCoords.push_back(t2); @@ -162,7 +162,7 @@ void CircleSurface::draw() { source->getTexture()->getTextureData().textureID = outputFbo.getTexture().getTextureData().textureID; auto texCoords = getMesh().getTexCoords(); getMesh().clearTexCoords(); - getMesh().addTexCoords(defaultTexCoords); + getMesh().addTexCoords(Vec2::toOf(defaultTexCoords)); // Draw the Quad: QuadSurface::draw(); @@ -264,35 +264,35 @@ void CircleSurface::setupTextures() { // meshes are similar: // Create 4 points for the 2 triangles - ofVec2f p1 = ofVec2f(0, 0); - ofVec2f p2 = ofVec2f(0, h); - ofVec2f p3 = ofVec2f(w, h); - ofVec2f p4 = ofVec2f(w, 0); + Vec3 p1 = Vec3(0, 0, 0); + Vec3 p2 = Vec3(0, h, 0); + Vec3 p3 = Vec3(w, h, 0); + Vec3 p4 = Vec3(w, 0, 0); // Create 4 point for the texture coordinates - ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 1.0f)); - ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 1.0f)); - ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 0.0f)); - ofVec2f t4 = ofVec2f(ofVec2f(0.0f, 0.0f)); + Vec2 t1 = Vec2(Vec2(0.0f, 1.0f)); + Vec2 t2 = Vec2(Vec2(1.0f, 1.0f)); + Vec2 t3 = Vec2(Vec2(1.0f, 0.0f)); + Vec2 t4 = Vec2(Vec2(0.0f, 0.0f)); // Clear maskMesh maskMesh.clear(); // Create a surface with the points - maskMesh.addVertex(p1); - maskMesh.addVertex(p2); - maskMesh.addVertex(p3); - maskMesh.addVertex(p4); + maskMesh.addVertex(p1.toOf()); + maskMesh.addVertex(p2.toOf()); + maskMesh.addVertex(p3.toOf()); + maskMesh.addVertex(p4.toOf()); // Add 2 triangles maskMesh.addTriangle(0, 2, 3); maskMesh.addTriangle(0, 1, 2); // Add texture coordinates - maskMesh.addTexCoord(t1); - maskMesh.addTexCoord(t2); - maskMesh.addTexCoord(t3); - maskMesh.addTexCoord(t4); + maskMesh.addTexCoord(t1.toOf()); + maskMesh.addTexCoord(t2.toOf()); + maskMesh.addTexCoord(t3.toOf()); + maskMesh.addTexCoord(t4.toOf()); } @@ -302,4 +302,4 @@ int CircleSurface::getType() { } } -} \ No newline at end of file +} diff --git a/src/Surfaces/CircleSurface.h b/src/Surfaces/CircleSurface.h index ddbfe33..b269adf 100644 --- a/src/Surfaces/CircleSurface.h +++ b/src/Surfaces/CircleSurface.h @@ -7,6 +7,8 @@ #define OFXPIMAPPER_CIRCLESURFACE_H #include "QuadSurface.h" +#include "Vec2.h" +#include "Vec3.h" #define CIRCLE_SURFACE_STRINGIFY(A) #A @@ -49,7 +51,7 @@ class CircleSurface : public QuadSurface { // string gl3FragmentShader; private: - std::vector defaultTexCoords; + std::vector defaultTexCoords; // We will use this pointer to determine if the source has changed. // This is a total kludge, but it keeps me from messing with the // upstream source. diff --git a/src/Surfaces/GridWarpSurface.cpp b/src/Surfaces/GridWarpSurface.cpp index b43f0de..6fd5927 100644 --- a/src/Surfaces/GridWarpSurface.cpp +++ b/src/Surfaces/GridWarpSurface.cpp @@ -34,11 +34,11 @@ void GridWarpSurface::draw(){ } } -void GridWarpSurface::moveBy(ofVec2f v){ +void GridWarpSurface::moveBy(Vec2 v){ vector & vertices = getVertices(); for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v; + vertices[i] += v.toOf(); } setMoved(true); @@ -67,7 +67,7 @@ int GridWarpSurface::setGridCols(int c){ createGridMesh(); } -bool GridWarpSurface::hitTest(ofVec2f p){ +bool GridWarpSurface::hitTest(Vec2 p){ ofPolyline pl; int vertsPerRow = _gridCols + 1; @@ -85,7 +85,7 @@ bool GridWarpSurface::hitTest(ofVec2f p){ pl.addVertex(mesh.getVertex(d)); pl.close(); - if(pl.inside(p)){ + if(pl.inside(p.toOf())){ return true; } } @@ -127,8 +127,7 @@ ofPolyline GridWarpSurface::getHitArea(){ ofPolyline GridWarpSurface::getTextureHitArea(){ ofPolyline line; - vector & texCoords = mesh.getTexCoords(); - ofVec2f textureSize = ofVec2f(source->getTexture()->getWidth(), source->getTexture()->getHeight()); + Vec2 textureSize = Vec2(source->getTexture()->getWidth(), source->getTexture()->getHeight()); int vertsPerRow = _gridCols + 1; int vertsPerCol = _gridRows + 1; @@ -138,32 +137,32 @@ ofPolyline GridWarpSurface::getTextureHitArea(){ int c = (_gridRows * vertsPerRow) + (vertsPerRow - 1); int d = (_gridRows * vertsPerRow); - line.addVertex(ofPoint(texCoords[a] * textureSize)); - line.addVertex(ofPoint(texCoords[b] * textureSize)); - line.addVertex(ofPoint(texCoords[c] * textureSize)); - line.addVertex(ofPoint(texCoords[d] * textureSize)); + line.addVertex(ofPoint(mesh.getTexCoords()[a] * textureSize.toOf())); + line.addVertex(ofPoint(mesh.getTexCoords()[b] * textureSize.toOf())); + line.addVertex(ofPoint(mesh.getTexCoords()[c] * textureSize.toOf())); + line.addVertex(ofPoint(mesh.getTexCoords()[d] * textureSize.toOf())); line.close(); return line; } -void GridWarpSurface::setVertex(int index, ofVec2f p){ +void GridWarpSurface::setVertex(int index, Vec2 p){ if(index >= mesh.getVertices().size()){ throw runtime_error("Vertex with provided index does not exist"); } - mesh.setVertex(index, p); + mesh.setVertex(index, p.toOf()); ofVec3f v = mesh.getVertex(index); ofNotifyEvent(vertexChangedEvent, index, this); } -void GridWarpSurface::setVertices(vector v){ +void GridWarpSurface::setVertices(vector v){ if(v.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of vertices"); } for(int i = 0; i < v.size(); ++i){ - mesh.setVertex(i, v[i]); + mesh.setVertex(i, v[i].toOf()); } ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); @@ -181,19 +180,19 @@ void GridWarpSurface::setVertices(vector v){ ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); } -void GridWarpSurface::setTexCoord(int index, ofVec2f t){ +void GridWarpSurface::setTexCoord(int index, Vec2 t){ if(index >= mesh.getVertices().size()){ throw runtime_error("Texture coordinate with provided index does not exist"); } - mesh.setTexCoord(index, t); + mesh.setTexCoord(index, t.toOf()); } -void GridWarpSurface::setTexCoords(vector t){ +void GridWarpSurface::setTexCoords(vector t){ if(t.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of texture coordinates"); } for(int i = 0; i < t.size(); ++i){ - mesh.setTexCoord(i, t[i]); + mesh.setTexCoord(i, t[i].toOf()); } } @@ -202,8 +201,12 @@ vector & GridWarpSurface::getVertices(){ return mesh.getVertices(); } -vector & GridWarpSurface::getTexCoords(){ - return mesh.getTexCoords(); +vector & GridWarpSurface::getTexCoords(){ + _texCoords.clear(); + for(auto c : mesh.getTexCoords()){ + _texCoords.push_back(Vec2(c)); + } + return _texCoords; } void GridWarpSurface::createGridMesh(){ @@ -218,10 +221,9 @@ void GridWarpSurface::createGridMesh(){ // Add vertices for each col and row for(int iy = 0; iy <= _gridRows; ++iy){ for(int ix = 0; ix <= _gridCols; ++ix){ - mesh.addVertex( - ofVec2f( - margin + (vertexDistanceX * (float)ix), - margin + (vertexDistanceY * (float)iy) )); + mesh.addVertex(Vec2( + margin + (vertexDistanceX * (float)ix), + margin + (vertexDistanceY * (float)iy)).toOf()); } } @@ -245,7 +247,7 @@ void GridWarpSurface::createGridMesh(){ for(int ix = 0; ix <= _gridCols; ++ix){ float xc = (ix == 0) ? 0.0f : (float)ix / (float)_gridCols; float yc = (iy == 0) ? 0.0f : (float)iy / (float)_gridRows; - mesh.addTexCoord(ofVec2f(xc, yc)); + mesh.addTexCoord(Vec2(xc, yc).toOf()); } } @@ -263,4 +265,4 @@ BaseSurface * GridWarpSurface::clone(){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/GridWarpSurface.h b/src/Surfaces/GridWarpSurface.h index 122405c..370e618 100644 --- a/src/Surfaces/GridWarpSurface.h +++ b/src/Surfaces/GridWarpSurface.h @@ -4,6 +4,7 @@ #include "BaseSurface.h" #include "SurfaceType.h" #include "HomographyHelper.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -14,7 +15,7 @@ class GridWarpSurface : public BaseSurface { void setup(); void draw(); - void moveBy(ofVec2f v); + void moveBy(Vec2 v); int getType(); int getGridRows(); @@ -22,18 +23,18 @@ class GridWarpSurface : public BaseSurface { int setGridRows(int r); int setGridCols(int c); - bool hitTest(ofVec2f p); + bool hitTest(Vec2 p); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - void setVertex(int index, ofVec2f p); - void setVertices(vector v); + void setVertex(int index, Vec2 p); + void setVertices(vector v); void setVertices(vector v); - void setTexCoord(int index, ofVec2f t); - void setTexCoords(vector t); + void setTexCoord(int index, Vec2 t); + void setTexCoords(vector t); vector & getVertices(); - vector & getTexCoords(); + vector & getTexCoords(); void createGridMesh(); @@ -42,7 +43,9 @@ class GridWarpSurface : public BaseSurface { private: int _gridCols; int _gridRows; + + vector _texCoords; }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/HexagonSurface.cpp b/src/Surfaces/HexagonSurface.cpp index b02123c..5fa16a2 100644 --- a/src/Surfaces/HexagonSurface.cpp +++ b/src/Surfaces/HexagonSurface.cpp @@ -11,42 +11,42 @@ void HexagonSurface::setup(){ // Create 6 + 1 points for the hexagon surface. - vector verts; + vector verts; verts.resize(7); // Start with the center. - verts[0] = ofVec2f((float)ofGetWidth() / 2.0f, (float)ofGetHeight() / 2.0f); + verts[0] = Vec2((float)ofGetWidth() / 2.0f, (float)ofGetHeight() / 2.0f); // Then from top left clockwise. - verts[1] = ofVec2f((float)ofGetWidth() / 3.0f, 0); - verts[2] = ofVec2f((float)ofGetWidth() / 3.0f * 2.0f, 0); - verts[3] = ofVec2f(ofGetWidth(), (float)ofGetHeight() / 2.0f); - verts[4] = ofVec2f((float)ofGetWidth() / 3.0f * 2.0f, ofGetHeight()); - verts[5] = ofVec2f((float)ofGetWidth() / 3.0f, ofGetHeight()); - verts[6] = ofVec2f(0, (float)ofGetHeight() / 2.0f); + verts[1] = Vec2((float)ofGetWidth() / 3.0f, 0); + verts[2] = Vec2((float)ofGetWidth() / 3.0f * 2.0f, 0); + verts[3] = Vec2(ofGetWidth(), (float)ofGetHeight() / 2.0f); + verts[4] = Vec2((float)ofGetWidth() / 3.0f * 2.0f, ofGetHeight()); + verts[5] = Vec2((float)ofGetWidth() / 3.0f, ofGetHeight()); + verts[6] = Vec2(0, (float)ofGetHeight() / 2.0f); // No create the texture coordinates. - vector coords; + vector coords; coords.resize(7); // Start with center. - coords[0] = ofVec2f(0.5f, 0.5f); + coords[0] = Vec2(0.5f, 0.5f); // Then from top left and go clockwise. - coords[1] = ofVec2f(1.0f / 3.0f, 0.0f); - coords[2] = ofVec2f(1.0f / 3.0f * 2.0f, 0.0f); - coords[3] = ofVec2f(1.0f, 0.5f); - coords[4] = ofVec2f(1.0f / 3.0f * 2.0f, 1.0f); - coords[5] = ofVec2f(1.0f / 3.0f, 1.0f); - coords[6] = ofVec2f(0.0f, 0.5f); + coords[1] = Vec2(1.0f / 3.0f, 0.0f); + coords[2] = Vec2(1.0f / 3.0f * 2.0f, 0.0f); + coords[3] = Vec2(1.0f, 0.5f); + coords[4] = Vec2(1.0f / 3.0f * 2.0f, 1.0f); + coords[5] = Vec2(1.0f / 3.0f, 1.0f); + coords[6] = Vec2(0.0f, 0.5f); // And finally setup setup(verts, coords, source); } void HexagonSurface::setup( - vector & verts, - vector & coords, + vector & verts, + vector & coords, BaseSource * newSource){ // Assign texture @@ -57,7 +57,7 @@ void HexagonSurface::setup( // Add vertices to the mesh for(unsigned int i = 0; i < verts.size(); ++i){ - mesh.addVertex(verts[i]); + mesh.addVertex(verts[i].toOf()); } // Form triangles @@ -78,7 +78,7 @@ void HexagonSurface::setup( // Add texture coords for(unsigned int i = 0; i < coords.size(); ++i){ - mesh.addTexCoord(coords[i]); + mesh.addTexCoord(coords[i].toOf()); } } @@ -103,24 +103,24 @@ void HexagonSurface::draw(){ } } -void HexagonSurface::setVertex(int index, ofVec2f p){ +void HexagonSurface::setVertex(int index, Vec2 p){ if(index >= mesh.getVertices().size()){ ofLog() << "Vertex with this index does not exist: " << index << endl; return; } - mesh.setVertex(index, p); + mesh.setVertex(index, p.toOf()); ofVec3f v = mesh.getVertex(index); ofNotifyEvent(vertexChangedEvent, index, this); } -void HexagonSurface::setVertices(vector v){ +void HexagonSurface::setVertices(vector v){ if(v.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of vertices"); } for(int i = 0; i < v.size(); ++i){ - mesh.setVertex(i, v[i]); + mesh.setVertex(i, v[i].toOf()); } ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); @@ -138,30 +138,30 @@ void HexagonSurface::setVertices(vector v){ ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); } -void HexagonSurface::setTexCoord(int index, ofVec2f t){ +void HexagonSurface::setTexCoord(int index, Vec2 t){ if(index >= mesh.getTexCoords().size()){ ofLog() << "Texture coordinate with this index does not exist: " << index << endl; return; } - mesh.setTexCoord(index, t); + mesh.setTexCoord(index, t.toOf()); } -void HexagonSurface::setTexCoords(vector t){ +void HexagonSurface::setTexCoords(vector t){ if(t.size() != mesh.getTexCoords().size()){ throw runtime_error("Wrong number of texture coordinates"); } for(int i = 0; i < t.size(); ++i){ - mesh.setTexCoord(i, t[i]); + mesh.setTexCoord(i, t[i].toOf()); } } -void HexagonSurface::moveBy(ofVec2f v){ +void HexagonSurface::moveBy(Vec2 v){ vector & vertices = getVertices(); for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v; + vertices[i] += v.toOf(); } setMoved(true); @@ -172,7 +172,7 @@ int HexagonSurface::getType(){ return SurfaceType::HEXAGON_SURFACE; } -bool HexagonSurface::hitTest(ofVec2f p){ +bool HexagonSurface::hitTest(Vec2 p){ // Construct ofPolyline from vertices ofPolyline line = getHitArea(); @@ -183,22 +183,24 @@ bool HexagonSurface::hitTest(ofVec2f p){ } } -ofVec2f HexagonSurface::getVertex(int index){ +Vec2 HexagonSurface::getVertex(int index){ if(index > 2){ ofLog() << "Vertex with this index does not exist: " << index << endl; throw runtime_error("Vertex index out of bounds."); } ofVec3f vert = mesh.getVertex(index); - return ofVec2f(vert.x, vert.y); + return Vec2(vert.x, vert.y); } -ofVec2f HexagonSurface::getTexCoord(int index){ +Vec2 HexagonSurface::getTexCoord(int index){ if(index > 2){ throw runtime_error("Texture coordinate index out of bounds."); } - - return mesh.getTexCoord(index); + + return Vec2( + mesh.getTexCoord(index).x, + mesh.getTexCoord(index).y); } ofPolyline HexagonSurface::getHitArea(){ @@ -215,17 +217,15 @@ ofPolyline HexagonSurface::getHitArea(){ ofPolyline HexagonSurface::getTextureHitArea(){ ofPolyline line; - vector & texCoords = mesh.getTexCoords(); - ofVec2f textureSize = ofVec2f( + Vec2 textureSize = Vec2( source->getTexture()->getWidth(), source->getTexture()->getHeight()); - for(int i = 1; i < texCoords.size(); i++){ - line.addVertex(ofPoint(texCoords[i] * textureSize)); + for(int i = 1; i < mesh.getTexCoords().size(); i++){ + line.addVertex(ofPoint(mesh.getTexCoords()[i] * textureSize.toOf())); } line.close(); - return line; } @@ -234,8 +234,12 @@ vector & HexagonSurface::getVertices(){ return mesh.getVertices(); } -vector & HexagonSurface::getTexCoords(){ - return mesh.getTexCoords(); +vector & HexagonSurface::getTexCoords(){ + _texCoords.clear(); + for(auto tc : mesh.getTexCoords()){ + _texCoords.push_back(tc); + } + return _texCoords; } BaseSurface * HexagonSurface::clone(){ @@ -249,4 +253,4 @@ BaseSurface * HexagonSurface::clone(){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/HexagonSurface.h b/src/Surfaces/HexagonSurface.h index a22896f..051bdd6 100644 --- a/src/Surfaces/HexagonSurface.h +++ b/src/Surfaces/HexagonSurface.h @@ -3,6 +3,7 @@ #include "ofMain.h" #include "BaseSurface.h" #include "SurfaceType.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -15,31 +16,31 @@ class HexagonSurface : public BaseSurface { void setup(); void setup( - vector & verts, - vector & coords, + vector & verts, + vector & coords, BaseSource * newSource); void draw(); - void setVertex(int index, ofVec2f p); - void setVertices(vector v); + void setVertex(int index, Vec2 p); + void setVertices(vector v); void setVertices(vector v); - void setTexCoord(int index, ofVec2f t); - void setTexCoords(vector t); + void setTexCoord(int index, Vec2 t); + void setTexCoords(vector t); - void moveBy(ofVec2f v); + void moveBy(Vec2 v); int getType(); - bool hitTest(ofVec2f p); - ofVec2f getVertex(int index); - ofVec2f getTexCoord(int index); + bool hitTest(Vec2 p); + Vec2 getVertex(int index); + Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); vector & getVertices(); - vector & getTexCoords(); + vector & getTexCoords(); BaseSurface * clone(); }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/QuadSurface.cpp b/src/Surfaces/QuadSurface.cpp index 92db8cb..7b83c3e 100644 --- a/src/Surfaces/QuadSurface.cpp +++ b/src/Surfaces/QuadSurface.cpp @@ -1,323 +1,330 @@ -#include "QuadSurface.h" - -namespace ofx { -namespace piMapper { - -QuadSurface::QuadSurface(){ - _perspectiveWarping = false; - setup(); -} - -QuadSurface::~QuadSurface(){ - cout << "QuadSurface destructor." << endl; -} - -void QuadSurface::setup(){ - // Create 4 points for the 2 triangles - ofVec2f p1 = ofVec2f(0, 0); - ofVec2f p2 = ofVec2f(0, ofGetHeight()); - ofVec2f p3 = ofVec2f(ofGetWidth(), ofGetHeight()); - ofVec2f p4 = ofVec2f(ofGetWidth(), 0); - - // Create 4 point for the texture coordinates - ofVec2f t1 = ofVec2f(ofVec2f(0.0f, 0.0f)); - ofVec2f t2 = ofVec2f(ofVec2f(1.0f, 0.0f)); - ofVec2f t3 = ofVec2f(ofVec2f(1.0f, 1.0f)); - ofVec2f t4 = ofVec2f(ofVec2f(0.0f, 1.0f)); - - setup(p1, p2, p3, p4, t1, t2, t3, t4, source); -} - -void QuadSurface::setup(ofVec2f p1, ofVec2f p2, ofVec2f p3, ofVec2f p4, - ofVec2f t1, ofVec2f t2, ofVec2f t3, ofVec2f t4, - BaseSource * newSource){ - // Assign texture - source = newSource; - - // Clear mesh - mesh.clear(); - - // Create a surface with the points - mesh.addVertex(p1); - mesh.addVertex(p2); - mesh.addVertex(p3); - mesh.addVertex(p4); - - // Add 2 triangles - mesh.addTriangle(0, 2, 3); - mesh.addTriangle(0, 1, 2); - - // Add texture coordinates - mesh.addTexCoord(t1); - mesh.addTexCoord(t2); - mesh.addTexCoord(t3); - mesh.addTexCoord(t4); -} - -void QuadSurface::draw(){ - if(source->getTexture() == 0){ - return; - } - - if(!source->getTexture()->isAllocated()){ - return; - } - - if(_perspectiveWarping){ - if(mesh.haveVertsChanged() || mesh.haveTexCoordsChanged()){ - calculateHomography(); - } - - ofRectangle box = getMeshBoundingBox(); - ofMesh m = mesh; - - m.setVertex(0, ofVec3f(0, 0, 0)); - m.setVertex(1, ofVec3f(box.width, 0, 0)); - m.setVertex(2, ofVec3f(box.width, box.height, 0)); - m.setVertex(3, ofVec3f(0, box.height, 0)); - - ofPushMatrix(); - if(true){ - bool normalizedTexCoords = ofGetUsingNormalizedTexCoords(); - ofEnableNormalizedTexCoords(); - - glMultMatrixf(_matrix); - source->getTexture()->bind(); - m.draw(); - source->getTexture()->unbind(); - - if(!normalizedTexCoords){ - ofDisableNormalizedTexCoords(); - } - } - ofPopMatrix(); - }else{ - bool normalizedTexCoords = ofGetUsingNormalizedTexCoords(); - ofEnableNormalizedTexCoords(); - - ofPushStyle(); - ofSetColor(255, 255, 255); - - source->getTexture()->bind(); - mesh.draw(); - source->getTexture()->unbind(); - - ofPopStyle(); - - if(!normalizedTexCoords){ - ofDisableNormalizedTexCoords(); - } - } -} - -void QuadSurface::setVertex(int index, ofVec2f p){ - if(index > 3){ - ofLog() << "Vertex with this index does not exist: " << index << endl; - return; - } - - mesh.setVertex(index, p); - ofVec3f v = mesh.getVertex(index); - ofNotifyEvent(vertexChangedEvent, index, this); -} - -void QuadSurface::setVertices(vector v){ - if(v.size() != 4){ - throw runtime_error("Wrong number of vertices"); - } - - for(int i = 0; i < 4; ++i){ - mesh.setVertex(i, v[i]); - } - - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); -} - -void QuadSurface::setVertices(vector v){ - if(v.size() != 4){ - throw runtime_error("Wrong number of vertices"); - } - - for(int i = 0; i < 4; ++i){ - mesh.setVertex(i, v[i]); - } - - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); -} - -void QuadSurface::setTexCoord(int index, ofVec2f t){ - if(index > 3){ - ofLog() << "Texture coordinate with this index does not exist: " << index - << endl; - return; - } - - mesh.setTexCoord(index, t); -} - -void QuadSurface::setTexCoords(vector t){ - if(t.size() != 4){ - throw runtime_error("Wrong number of vertices"); - } - for(int i = 0; i < 4; ++i){ - mesh.setTexCoord(i, t[i]); - } -} - -void QuadSurface::moveBy(ofVec2f v){ - vector & vertices = getVertices(); - - for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v; - } - - setMoved(true); - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); -} - -int QuadSurface::getType(){ - return SurfaceType::QUAD_SURFACE; -} - -bool QuadSurface::hitTest(ofVec2f p){ - // Construct ofPolyline from vertices - ofPolyline line = getHitArea(); - - if(line.inside(p.x, p.y)){ - return true; - }else{ - return false; - } -} - -ofVec2f QuadSurface::getVertex(int index){ - if(index > 3){ - ofLog() << "Vertex with this index does not exist: " << index << endl; - throw runtime_error("Vertex index out of bounds."); - } - - ofVec3f vert = mesh.getVertex(index); - return ofVec2f(vert.x, vert.y); -} - -ofVec2f QuadSurface::getTexCoord(int index){ - if(index > 3){ - throw runtime_error("Texture coordinate index out of bounds."); - } - - return mesh.getTexCoord(index); -} - -ofPolyline QuadSurface::getHitArea(){ - ofPolyline line; - line.addVertex(ofPoint(mesh.getVertex(0).x, mesh.getVertex(0).y)); - line.addVertex(ofPoint(mesh.getVertex(1).x, mesh.getVertex(1).y)); - line.addVertex(ofPoint(mesh.getVertex(2).x, mesh.getVertex(2).y)); - line.addVertex(ofPoint(mesh.getVertex(3).x, mesh.getVertex(3).y)); - line.close(); - - return line; -} - -ofPolyline QuadSurface::getTextureHitArea(){ - ofPolyline line; - vector & texCoords = mesh.getTexCoords(); - ofVec2f textureSize = ofVec2f(source->getTexture()->getWidth(), source->getTexture()->getHeight()); - for(int i = 0; i < texCoords.size(); i++){ - line.addVertex(ofPoint(texCoords[i] * textureSize)); - } - line.close(); - - return line; -} - -vector & QuadSurface::getVertices(){ - // return only joint vertices - return mesh.getVertices(); -} - -vector & QuadSurface::getTexCoords(){ - return mesh.getTexCoords(); -} - -void QuadSurface::calculateHomography(){ - float src[4][2]; - float dst[4][2]; - - ofRectangle box = getMeshBoundingBox(); - - src[0][0] = 0; - src[0][1] = 0; - src[1][0] = box.width; - src[1][1] = 0; - src[2][0] = box.width; - src[2][1] = box.height; - src[3][0] = 0; - src[3][1] = box.height; - - ofVec3f p0 = mesh.getVertex(0); - ofVec3f p1 = mesh.getVertex(1); - ofVec3f p2 = mesh.getVertex(2); - ofVec3f p3 = mesh.getVertex(3); - - dst[0][0] = p0.x; - dst[0][1] = p0.y; - dst[1][0] = p1.x; - dst[1][1] = p1.y; - dst[2][0] = p2.x; - dst[2][1] = p2.y; - dst[3][0] = p3.x; - dst[3][1] = p3.y; - - HomographyHelper::findHomography(src, dst, _matrix); -} - -void QuadSurface::setPerspectiveWarping(bool b){ - _perspectiveWarping = b; -} - -bool QuadSurface::getPerspectiveWarping(){ - return _perspectiveWarping; -} - -ofRectangle QuadSurface::getMeshBoundingBox(){ - float minX = 10000.0f; - float minY = 10000.0f; - float maxX = 0.0f; - float maxY = 0.0f; - - for(int i = 0; i < mesh.getVertices().size(); ++i){ - if(mesh.getVertices()[i].x < minX){ - minX = mesh.getVertices()[i].x; - } - - if(mesh.getVertices()[i].y < minY){ - minY = mesh.getVertices()[i].y; - } - - if(mesh.getVertices()[i].x > maxX){ - maxX = mesh.getVertices()[i].x; - } - - if(mesh.getVertices()[i].y > maxY){ - maxY = mesh.getVertices()[i].y; - } - } - - ofRectangle boundingBox = ofRectangle(ofPoint(minX, minY), ofPoint(maxX, maxY)); - return boundingBox; -} - -BaseSurface * QuadSurface::clone(){ - QuadSurface * s = new QuadSurface(); - s->setVertices(getVertices()); - s->setTexCoords(getTexCoords()); - s->setPerspectiveWarping(getPerspectiveWarping()); - BaseSource * src = getSource(); - src->referenceCount++; - s->setSource(src); - return s; -} - -} // namespace piMapper -} // namespace ofx \ No newline at end of file +#include "QuadSurface.h" + +namespace ofx { +namespace piMapper { + +QuadSurface::QuadSurface(){ + _perspectiveWarping = false; + setup(); +} + +QuadSurface::~QuadSurface(){ + cout << "QuadSurface destructor." << endl; +} + +void QuadSurface::setup(){ + // Create 4 points for the 2 triangles + Vec2 p1 = Vec2(0, 0); + Vec2 p2 = Vec2(0, ofGetHeight()); + Vec2 p3 = Vec2(ofGetWidth(), ofGetHeight()); + Vec2 p4 = Vec2(ofGetWidth(), 0); + + // Create 4 point for the texture coordinates + Vec2 t1 = Vec2(Vec2(0.0f, 0.0f)); + Vec2 t2 = Vec2(Vec2(1.0f, 0.0f)); + Vec2 t3 = Vec2(Vec2(1.0f, 1.0f)); + Vec2 t4 = Vec2(Vec2(0.0f, 1.0f)); + + setup(p1, p2, p3, p4, t1, t2, t3, t4, source); +} + +void QuadSurface::setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 p4, + Vec2 t1, Vec2 t2, Vec2 t3, Vec2 t4, + BaseSource * newSource){ + // Assign texture + source = newSource; + + // Clear mesh + mesh.clear(); + + // Create a surface with the points + mesh.addVertex(p1.toOf()); + mesh.addVertex(p2.toOf()); + mesh.addVertex(p3.toOf()); + mesh.addVertex(p4.toOf()); + + // Add 2 triangles + mesh.addTriangle(0, 2, 3); + mesh.addTriangle(0, 1, 2); + + // Add texture coordinates + mesh.addTexCoord(t1.toOf()); + mesh.addTexCoord(t2.toOf()); + mesh.addTexCoord(t3.toOf()); + mesh.addTexCoord(t4.toOf()); +} + +void QuadSurface::draw(){ + if(source->getTexture() == 0){ + return; + } + + if(!source->getTexture()->isAllocated()){ + return; + } + + if(_perspectiveWarping){ + if(mesh.haveVertsChanged() || mesh.haveTexCoordsChanged()){ + calculateHomography(); + } + + ofRectangle box = getMeshBoundingBox(); + ofMesh m = mesh; + + m.setVertex(0, ofVec3f(0, 0, 0)); + m.setVertex(1, ofVec3f(box.width, 0, 0)); + m.setVertex(2, ofVec3f(box.width, box.height, 0)); + m.setVertex(3, ofVec3f(0, box.height, 0)); + + ofPushMatrix(); + if(true){ + bool normalizedTexCoords = ofGetUsingNormalizedTexCoords(); + ofEnableNormalizedTexCoords(); + + glMultMatrixf(_matrix); + source->getTexture()->bind(); + m.draw(); + source->getTexture()->unbind(); + + if(!normalizedTexCoords){ + ofDisableNormalizedTexCoords(); + } + } + ofPopMatrix(); + }else{ + bool normalizedTexCoords = ofGetUsingNormalizedTexCoords(); + ofEnableNormalizedTexCoords(); + + ofPushStyle(); + ofSetColor(255, 255, 255); + + source->getTexture()->bind(); + mesh.draw(); + source->getTexture()->unbind(); + + ofPopStyle(); + + if(!normalizedTexCoords){ + ofDisableNormalizedTexCoords(); + } + } +} + +void QuadSurface::setVertex(int index, Vec2 p){ + if(index > 3){ + ofLog() << "Vertex with this index does not exist: " << index << endl; + return; + } + + mesh.setVertex(index, p.toOf()); + ofVec3f v = mesh.getVertex(index); + ofNotifyEvent(vertexChangedEvent, index, this); +} + +void QuadSurface::setVertices(vector v){ + if(v.size() != 4){ + throw runtime_error("Wrong number of vertices"); + } + + for(int i = 0; i < 4; ++i){ + mesh.setVertex(i, v[i].toOf()); + } + + ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); +} + +void QuadSurface::setVertices(vector v){ + if(v.size() != 4){ + throw runtime_error("Wrong number of vertices"); + } + + for(int i = 0; i < 4; ++i){ + mesh.setVertex(i, v[i]); + } + + ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); +} + +void QuadSurface::setTexCoord(int index, Vec2 t){ + if(index > 3){ + ofLog() << "Texture coordinate with this index does not exist: " << index + << endl; + return; + } + + mesh.setTexCoord(index, t.toOf()); +} + +void QuadSurface::setTexCoords(vector t){ + if(t.size() != 4){ + throw runtime_error("Wrong number of vertices"); + } + for(int i = 0; i < 4; ++i){ + mesh.setTexCoord(i, t[i].toOf()); + } +} + +void QuadSurface::moveBy(Vec2 v){ + vector & vertices = getVertices(); + + for(int i = 0; i < vertices.size(); i++){ + vertices[i] += v.toOf(); + } + + setMoved(true); + ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); +} + +int QuadSurface::getType(){ + return SurfaceType::QUAD_SURFACE; +} + +bool QuadSurface::hitTest(Vec2 p){ + // Construct ofPolyline from vertices + ofPolyline line = getHitArea(); + + if(line.inside(p.x, p.y)){ + return true; + }else{ + return false; + } +} + +Vec2 QuadSurface::getVertex(int index){ + if(index > 3){ + ofLog() << "Vertex with this index does not exist: " << index << endl; + throw runtime_error("Vertex index out of bounds."); + } + + ofVec3f vert = mesh.getVertex(index); + return Vec2(vert.x, vert.y); +} + +Vec2 QuadSurface::getTexCoord(int index){ + if(index > 3){ + throw runtime_error("Texture coordinate index out of bounds."); + } + + return Vec2( + mesh.getTexCoord(index).x, + mesh.getTexCoord(index).y); +} + +ofPolyline QuadSurface::getHitArea(){ + ofPolyline line; + line.addVertex(ofPoint(mesh.getVertex(0).x, mesh.getVertex(0).y)); + line.addVertex(ofPoint(mesh.getVertex(1).x, mesh.getVertex(1).y)); + line.addVertex(ofPoint(mesh.getVertex(2).x, mesh.getVertex(2).y)); + line.addVertex(ofPoint(mesh.getVertex(3).x, mesh.getVertex(3).y)); + line.close(); + + return line; +} + +ofPolyline QuadSurface::getTextureHitArea(){ + ofPolyline line; + Vec2 textureSize = + Vec2(source->getTexture()->getWidth(), + source->getTexture()->getHeight()); + for(int i = 0; i < mesh.getTexCoords().size(); i++){ + line.addVertex(ofPoint(mesh.getTexCoords()[i] * textureSize.toOf())); + } + line.close(); + + return line; +} + +vector & QuadSurface::getVertices(){ + // return only joint vertices + return mesh.getVertices(); +} + +vector & QuadSurface::getTexCoords(){ + _texCoords.clear(); + for(auto tc : mesh.getTexCoords()){ + _texCoords.push_back(tc); + } + return _texCoords; +} + +void QuadSurface::calculateHomography(){ + float src[4][2]; + float dst[4][2]; + + ofRectangle box = getMeshBoundingBox(); + + src[0][0] = 0; + src[0][1] = 0; + src[1][0] = box.width; + src[1][1] = 0; + src[2][0] = box.width; + src[2][1] = box.height; + src[3][0] = 0; + src[3][1] = box.height; + + ofVec3f p0 = mesh.getVertex(0); + ofVec3f p1 = mesh.getVertex(1); + ofVec3f p2 = mesh.getVertex(2); + ofVec3f p3 = mesh.getVertex(3); + + dst[0][0] = p0.x; + dst[0][1] = p0.y; + dst[1][0] = p1.x; + dst[1][1] = p1.y; + dst[2][0] = p2.x; + dst[2][1] = p2.y; + dst[3][0] = p3.x; + dst[3][1] = p3.y; + + HomographyHelper::findHomography(src, dst, _matrix); +} + +void QuadSurface::setPerspectiveWarping(bool b){ + _perspectiveWarping = b; +} + +bool QuadSurface::getPerspectiveWarping(){ + return _perspectiveWarping; +} + +ofRectangle QuadSurface::getMeshBoundingBox(){ + float minX = 10000.0f; + float minY = 10000.0f; + float maxX = 0.0f; + float maxY = 0.0f; + + for(int i = 0; i < mesh.getVertices().size(); ++i){ + if(mesh.getVertices()[i].x < minX){ + minX = mesh.getVertices()[i].x; + } + + if(mesh.getVertices()[i].y < minY){ + minY = mesh.getVertices()[i].y; + } + + if(mesh.getVertices()[i].x > maxX){ + maxX = mesh.getVertices()[i].x; + } + + if(mesh.getVertices()[i].y > maxY){ + maxY = mesh.getVertices()[i].y; + } + } + + ofRectangle boundingBox = ofRectangle(ofPoint(minX, minY), ofPoint(maxX, maxY)); + return boundingBox; +} + +BaseSurface * QuadSurface::clone(){ + QuadSurface * s = new QuadSurface(); + s->setVertices(getVertices()); + s->setTexCoords(getTexCoords()); + s->setPerspectiveWarping(getPerspectiveWarping()); + BaseSource * src = getSource(); + src->referenceCount++; + s->setSource(src); + return s; +} + +} // namespace piMapper +} // namespace ofx diff --git a/src/Surfaces/QuadSurface.h b/src/Surfaces/QuadSurface.h index 4c6642b..a0c3bc2 100644 --- a/src/Surfaces/QuadSurface.h +++ b/src/Surfaces/QuadSurface.h @@ -1,55 +1,56 @@ -#pragma once - -#include "ofMain.h" -#include "BaseSurface.h" -#include "SurfaceType.h" -#include "HomographyHelper.h" - -namespace ofx { -namespace piMapper { - -class QuadSurface : public BaseSurface { - public: - QuadSurface(); - ~QuadSurface(); - - void setup(); - void setup(ofVec2f p1, ofVec2f p2, ofVec2f p3, ofVec2f p4, ofVec2f t1, - ofVec2f t2, ofVec2f t3, ofVec2f t4, BaseSource * newSource); - - void draw(); - - void setVertex(int index, ofVec2f p); - void setVertices(vector v); - void setVertices(vector v); - - void setTexCoord(int index, ofVec2f t); - void setTexCoords(vector t); - - void moveBy(ofVec2f v); - - int getType(); - bool hitTest(ofVec2f p); - ofVec2f getVertex(int index); - ofVec2f getTexCoord(int index); - ofPolyline getHitArea(); - ofPolyline getTextureHitArea(); - vector & getVertices(); - vector & getTexCoords(); - - void setPerspectiveWarping(bool b); - bool getPerspectiveWarping(); - - ofRectangle getMeshBoundingBox(); - - BaseSurface * clone(); - - private: - void calculateHomography(); - - float _matrix[16]; - bool _perspectiveWarping; -}; - -} // namespace piMapper -} // namespace ofx \ No newline at end of file +#pragma once + +#include "ofMain.h" +#include "BaseSurface.h" +#include "SurfaceType.h" +#include "HomographyHelper.h" +#include "Vec2.h" + +namespace ofx { +namespace piMapper { + +class QuadSurface : public BaseSurface { + public: + QuadSurface(); + ~QuadSurface(); + + void setup(); + void setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 p4, Vec2 t1, + Vec2 t2, Vec2 t3, Vec2 t4, BaseSource * newSource); + + void draw(); + + void setVertex(int index, Vec2 p); + void setVertices(vector v); + void setVertices(vector v); + + void setTexCoord(int index, Vec2 t); + void setTexCoords(vector t); + + void moveBy(Vec2 v); + + int getType(); + bool hitTest(Vec2 p); + Vec2 getVertex(int index); + Vec2 getTexCoord(int index); + ofPolyline getHitArea(); + ofPolyline getTextureHitArea(); + vector & getVertices(); + vector & getTexCoords(); + + void setPerspectiveWarping(bool b); + bool getPerspectiveWarping(); + + ofRectangle getMeshBoundingBox(); + + BaseSurface * clone(); + + private: + void calculateHomography(); + + float _matrix[16]; + bool _perspectiveWarping; +}; + +} // namespace piMapper +} // namespace ofx diff --git a/src/Surfaces/SurfaceFactory.cpp b/src/Surfaces/SurfaceFactory.cpp index b85ae01..9544e53 100644 --- a/src/Surfaces/SurfaceFactory.cpp +++ b/src/Surfaces/SurfaceFactory.cpp @@ -29,16 +29,16 @@ BaseSurface * SurfaceFactory::createSurface(SurfaceType type){ } TriangleSurface * SurfaceFactory::createTriangleSurface(){ - vector vertices; + vector vertices; float margin = 50.0f; - vertices.push_back(ofVec2f((float)ofGetWidth() / 2.0f, margin)); - vertices.push_back(ofVec2f((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); - vertices.push_back(ofVec2f(margin, (float)ofGetHeight() - margin)); + vertices.push_back(Vec2((float)ofGetWidth() / 2.0f, margin)); + vertices.push_back(Vec2((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); + vertices.push_back(Vec2(margin, (float)ofGetHeight() - margin)); - vector texCoords; - texCoords.push_back(ofVec2f(0.5f, 0.0f)); - texCoords.push_back(ofVec2f(1.0f, 1.0f)); - texCoords.push_back(ofVec2f(0.0f, 1.0f)); + vector texCoords; + texCoords.push_back(Vec2(0.5f, 0.0f)); + texCoords.push_back(Vec2(1.0f, 1.0f)); + texCoords.push_back(Vec2(0.0f, 1.0f)); TriangleSurface * triangleSurface = new TriangleSurface(); @@ -51,18 +51,18 @@ TriangleSurface * SurfaceFactory::createTriangleSurface(){ } QuadSurface * SurfaceFactory::createQuadSurface(){ - vector vertices; + vector vertices; float margin = 50.0f; - vertices.push_back(ofVec2f(margin, margin)); - vertices.push_back(ofVec2f((float)ofGetWidth() - margin, margin)); - vertices.push_back(ofVec2f((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); - vertices.push_back(ofVec2f(margin, (float)ofGetHeight() - margin)); + vertices.push_back(Vec2(margin, margin)); + vertices.push_back(Vec2((float)ofGetWidth() - margin, margin)); + vertices.push_back(Vec2((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); + vertices.push_back(Vec2(margin, (float)ofGetHeight() - margin)); - vector texCoords; - texCoords.push_back(ofVec2f(ofVec2f(0.0f, 0.0f))); - texCoords.push_back(ofVec2f(ofVec2f(1.0f, 0.0f))); - texCoords.push_back(ofVec2f(ofVec2f(1.0f, 1.0f))); - texCoords.push_back(ofVec2f(ofVec2f(0.0f, 1.0f))); + vector texCoords; + texCoords.push_back(Vec2(Vec2(0.0f, 0.0f))); + texCoords.push_back(Vec2(Vec2(1.0f, 0.0f))); + texCoords.push_back(Vec2(Vec2(1.0f, 1.0f))); + texCoords.push_back(Vec2(Vec2(0.0f, 1.0f))); QuadSurface * quadSurface = new QuadSurface(); quadSurface->setPerspectiveWarping(true); diff --git a/src/Surfaces/SurfaceManager.cpp b/src/Surfaces/SurfaceManager.cpp index 35d6e31..399a914 100644 --- a/src/Surfaces/SurfaceManager.cpp +++ b/src/Surfaces/SurfaceManager.cpp @@ -303,14 +303,14 @@ void SurfaceManager::selectVertex(int i){ ofNotifyEvent(vertexSelectedEvent, _selectedVertexIndex, this); } -void SurfaceManager::moveSelectionBy(ofVec2f v){ +void SurfaceManager::moveSelectionBy(Vec2 v){ if(selectedSurface == 0){ moveAllSurfacesBy(v); return; } if(_selectedVertexIndex != -1){ - selectedSurface->getVertices()[_selectedVertexIndex] += v; + selectedSurface->getVertices()[_selectedVertexIndex] += v.toOf(); ofNotifyEvent(vertexChangedEvent, _selectedVertexIndex, this); }else{ selectedSurface->moveBy(v); @@ -321,7 +321,7 @@ void SurfaceManager::moveSelectionBy(ofVec2f v){ // it could be implemented as vector here. } -void SurfaceManager::moveAllSurfacesBy(ofVec2f v){ +void SurfaceManager::moveAllSurfacesBy(Vec2 v){ if(_activePresetIndex < 0){ ofLogWarning( "SurfaceManager::moveAllSurfacesBy", diff --git a/src/Surfaces/SurfaceManager.h b/src/Surfaces/SurfaceManager.h index 7a296b4..fe39001 100644 --- a/src/Surfaces/SurfaceManager.h +++ b/src/Surfaces/SurfaceManager.h @@ -9,6 +9,7 @@ #include "SourceType.h" #include "SurfaceStack.h" #include "SurfaceFactory.h" +#include "Vec2.h" #include "ofEvents.h" #include "ofxXmlSettings.h" @@ -50,8 +51,8 @@ class SurfaceManager { void selectPrevVertex(); void selectVertex(int i); - void moveSelectionBy(ofVec2f v); - void moveAllSurfacesBy(ofVec2f v); + void moveSelectionBy(Vec2 v); + void moveAllSurfacesBy(Vec2 v); int size(); int getSelectedVertexIndex(); @@ -90,4 +91,4 @@ class SurfaceManager { }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/TriangleSurface.cpp b/src/Surfaces/TriangleSurface.cpp index ca6b03c..eb7afe2 100644 --- a/src/Surfaces/TriangleSurface.cpp +++ b/src/Surfaces/TriangleSurface.cpp @@ -11,20 +11,20 @@ TriangleSurface::~TriangleSurface(){} void TriangleSurface::setup(){ // Create 3 points for the triangle - ofVec2f p1 = ofVec2f(ofGetWidth() / 2.0f, 0); - ofVec2f p2 = ofVec2f(ofVec2f(0, ofGetHeight())); - ofVec2f p3 = ofVec2f(ofGetWidth(), ofGetHeight()); + Vec2 p1 = Vec2(ofGetWidth() / 2.0f, 0); + Vec2 p2 = Vec2(Vec2(0, ofGetHeight())); + Vec2 p3 = Vec2(ofGetWidth(), ofGetHeight()); // Create 3 point for the texture coordinates - ofVec2f t1 = ofVec2f(0.5f, 0); - ofVec2f t2 = ofVec2f(0, 1.0f); - ofVec2f t3 = ofVec2f(1, 1.0f); + Vec2 t1 = Vec2(0.5f, 0); + Vec2 t2 = Vec2(0, 1.0f); + Vec2 t3 = Vec2(1, 1.0f); setup(p1, p2, p3, t1, t2, t3, source); } -void TriangleSurface::setup(ofVec2f p1, ofVec2f p2, ofVec2f p3, ofVec2f t1, - ofVec2f t2, ofVec2f t3, BaseSource * newSource){ +void TriangleSurface::setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 t1, + Vec2 t2, Vec2 t3, BaseSource * newSource){ // Assign texture source = newSource; @@ -32,14 +32,14 @@ void TriangleSurface::setup(ofVec2f p1, ofVec2f p2, ofVec2f p3, ofVec2f t1, mesh.clear(); // Create a surface with the points - mesh.addVertex(p1); - mesh.addVertex(p2); - mesh.addVertex(p3); + mesh.addVertex(p1.toOf()); + mesh.addVertex(p2.toOf()); + mesh.addVertex(p3.toOf()); // Add texture coordinates - mesh.addTexCoord(t1); - mesh.addTexCoord(t2); - mesh.addTexCoord(t3); + mesh.addTexCoord(t1.toOf()); + mesh.addTexCoord(t2.toOf()); + mesh.addTexCoord(t3.toOf()); } void TriangleSurface::draw(){ @@ -63,24 +63,24 @@ void TriangleSurface::draw(){ } } -void TriangleSurface::setVertex(int index, ofVec2f p){ +void TriangleSurface::setVertex(int index, Vec2 p){ if(index > 2){ ofLog() << "Vertex with this index does not exist: " << index << endl; return; } - mesh.setVertex(index, p); + mesh.setVertex(index, p.toOf()); ofVec3f v = mesh.getVertex(index); ofNotifyEvent(vertexChangedEvent, index, this); } -void TriangleSurface::setVertices(vector v){ +void TriangleSurface::setVertices(vector v){ if(v.size() != 3){ throw runtime_error("Wrong number of vertices"); } for(int i = 0; i < 3; ++i){ - mesh.setVertex(i, v[i]); + mesh.setVertex(i, v[i].toOf()); } ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); @@ -98,30 +98,30 @@ void TriangleSurface::setVertices(vector v){ ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); } -void TriangleSurface::setTexCoord(int index, ofVec2f t){ +void TriangleSurface::setTexCoord(int index, Vec2 t){ if(index > 2){ ofLog() << "Texture coordinate with this index does not exist: " << index << endl; return; } - mesh.setTexCoord(index, t); + mesh.setTexCoord(index, t.toOf()); } -void TriangleSurface::setTexCoords(vector t){ +void TriangleSurface::setTexCoords(vector t){ if(t.size() != 3){ throw runtime_error("Wrong number of texture coordinates"); } for(int i = 0; i < 3; ++i){ - mesh.setTexCoord(i, t[i]); + mesh.setTexCoord(i, t[i].toOf()); } } -void TriangleSurface::moveBy(ofVec2f v){ +void TriangleSurface::moveBy(Vec2 v){ vector & vertices = getVertices(); for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v; + vertices[i] += v.toOf(); } setMoved(true); @@ -132,7 +132,7 @@ int TriangleSurface::getType(){ return SurfaceType::TRIANGLE_SURFACE; } -bool TriangleSurface::hitTest(ofVec2f p){ +bool TriangleSurface::hitTest(Vec2 p){ // Construct ofPolyline from vertices ofPolyline line = getHitArea(); @@ -143,22 +143,24 @@ bool TriangleSurface::hitTest(ofVec2f p){ } } -ofVec2f TriangleSurface::getVertex(int index){ +Vec2 TriangleSurface::getVertex(int index){ if(index > 2){ ofLog() << "Vertex with this index does not exist: " << index << endl; throw runtime_error("Vertex index out of bounds."); } ofVec3f vert = mesh.getVertex(index); - return ofVec2f(vert.x, vert.y); + return Vec2(vert.x, vert.y); } -ofVec2f TriangleSurface::getTexCoord(int index){ +Vec2 TriangleSurface::getTexCoord(int index){ if(index > 2){ throw runtime_error("Texture coordinate index out of bounds."); } - return mesh.getTexCoord(index); + return Vec2( + mesh.getTexCoord(index).x, + mesh.getTexCoord(index).y); } ofPolyline TriangleSurface::getHitArea(){ @@ -173,10 +175,9 @@ ofPolyline TriangleSurface::getHitArea(){ ofPolyline TriangleSurface::getTextureHitArea(){ ofPolyline line; - vector & texCoords = mesh.getTexCoords(); - ofVec2f textureSize = ofVec2f(source->getTexture()->getWidth(), source->getTexture()->getHeight()); - for(int i = 0; i < texCoords.size(); i++){ - line.addVertex(ofPoint(texCoords[i] * textureSize)); + Vec2 textureSize = Vec2(source->getTexture()->getWidth(), source->getTexture()->getHeight()); + for(int i = 0; i < mesh.getTexCoords().size(); i++){ + line.addVertex(ofPoint(mesh.getTexCoords()[i] * textureSize.toOf())); } line.close(); @@ -188,8 +189,12 @@ vector & TriangleSurface::getVertices(){ return mesh.getVertices(); } -vector & TriangleSurface::getTexCoords(){ - return mesh.getTexCoords(); +vector & TriangleSurface::getTexCoords(){ + _texCoords.clear(); + for(auto tc : mesh.getTexCoords()){ + _texCoords.push_back(tc); + } + return _texCoords; } BaseSurface * TriangleSurface::clone(){ @@ -203,4 +208,4 @@ BaseSurface * TriangleSurface::clone(){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/TriangleSurface.h b/src/Surfaces/TriangleSurface.h index f3797e9..a358b66 100644 --- a/src/Surfaces/TriangleSurface.h +++ b/src/Surfaces/TriangleSurface.h @@ -3,6 +3,7 @@ #include "ofMain.h" #include "BaseSurface.h" #include "SurfaceType.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -13,30 +14,30 @@ class TriangleSurface : public BaseSurface { ~TriangleSurface(); void setup(); - void setup(ofVec2f p1, ofVec2f p2, ofVec2f p3, ofVec2f t1, ofVec2f t2, - ofVec2f t3, BaseSource * newSource); + void setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 t1, Vec2 t2, + Vec2 t3, BaseSource * newSource); void draw(); - void setVertex(int index, ofVec2f p); - void setVertices(vector v); + void setVertex(int index, Vec2 p); + void setVertices(vector v); void setVertices(vector v); - void setTexCoord(int index, ofVec2f t); - void setTexCoords(vector t); + void setTexCoord(int index, Vec2 t); + void setTexCoords(vector t); - void moveBy(ofVec2f v); + void moveBy(Vec2 v); int getType(); - bool hitTest(ofVec2f p); - ofVec2f getVertex(int index); - ofVec2f getTexCoord(int index); + bool hitTest(Vec2 p); + Vec2 getVertex(int index); + Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); vector & getVertices(); - vector & getTexCoords(); + vector & getTexCoords(); BaseSurface * clone(); }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Types/Vec2.cpp b/src/Types/Vec2.cpp new file mode 100644 index 0000000..ee22e0c --- /dev/null +++ b/src/Types/Vec2.cpp @@ -0,0 +1,95 @@ +#include "Vec2.h" + +namespace ofx { +namespace piMapper { + +Vec2::Vec2(){ + x = 0.0f; + y = 0.0f; +} + +Vec2::Vec2(float $x, float $y){ + x = $x; + y = $y; +} + +#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 + Vec2::Vec2(ofVec2f & src){ + x = src.x; + y = src.y; + } + + Vec2::Vec2(ofVec3f & src){ + x = src.x; + y = src.y; + } + + ofVec2f Vec2::toOf(){ + return ofVec2f(x, y); + } + + ofVec2f Vec2::toOf(Vec2 & src){ + return ofVec2f(src.x, src.y); + } + + vector Vec2::toOf(vector & src){ + vector dst; + for(auto v : src){ + dst.push_back(ofVec2f(v.x, v.y)); + } + return dst; + } + + float Vec2::distance(Vec2 & other){ + ofVec2f v1(x, y); + ofVec2f v2(other.x, other.y); + return v1.distance(v2); + } +#else + // TODO: The same for glm::vec2 +#endif + +void Vec2::operator=(const Vec2 & other){ + x = other.x; + y = other.y; +} + +void Vec2::operator=(const ofVec3f & other){ + x = other.x; + y = other.y; +} + +void Vec2::operator+=(Vec2 & other){ + x += other.x; + y += other.y; +} + +Vec2 Vec2::operator+(Vec2 & other){ + return Vec2(x + other.x, y + other.y); +} + +Vec2 Vec2::operator/(Vec2 & other){ + return Vec2(x / other.x, y / other.y); +} + +Vec2 Vec2::operator*(Vec2 & other){ + return Vec2(x * other.x, y * other.y); +} + +Vec2 Vec2::operator-(){ + return Vec2(-x, -y); +} + +Vec2 Vec2::operator-(Vec2 & other){ + return Vec2(x - other.x, y - other.y); +} + +bool Vec2::operator!=(Vec2 & other){ + if(x == other.x && y == other.y){ + return false; + } + return true; +} + +} // namespace piMapper +} // namespace ofx diff --git a/src/Types/Vec2.h b/src/Types/Vec2.h new file mode 100644 index 0000000..e5c732c --- /dev/null +++ b/src/Types/Vec2.h @@ -0,0 +1,49 @@ +#pragma once + +#include "ofMain.h" + +#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 +// ... +#else +// TODO: include glm +#endif + +namespace ofx { +namespace piMapper { + +//#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 +class Vec2{ +public: + Vec2(); + Vec2(float $x, float $y); + + #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 + Vec2(ofVec2f & src); + Vec2(ofVec3f & src); + ofVec2f toOf(); + static ofVec2f toOf(Vec2 & src); + static vector toOf(vector & src); + float distance(Vec2 & other); + #else + // TODO: The same for glm::vec2 + // static vector toOf(vector & src); + #endif + + void operator=(const Vec2 & other); + void operator=(const ofVec3f & other); + void operator+=(Vec2 & other); + + Vec2 operator+(Vec2 & other); + Vec2 operator/(Vec2 & other); + Vec2 operator*(Vec2 & other); + Vec2 operator-(); + Vec2 operator-(Vec2 & other); + + bool operator!=(Vec2 & other); + + float x; + float y; +}; + +} // namespace piMapper +} // namespace ofx diff --git a/src/Types/Vec3.cpp b/src/Types/Vec3.cpp new file mode 100644 index 0000000..400b918 --- /dev/null +++ b/src/Types/Vec3.cpp @@ -0,0 +1,82 @@ +#include "Vec3.h" + +namespace ofx { +namespace piMapper { + +Vec3::Vec3(){ + x = 0.0f; + y = 0.0f; + z = 0.0f; +} + +Vec3::Vec3(float $x, float $y, float $z){ + x = $x; + y = $y; + z = $z; +} + +#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 + Vec3::Vec3(ofVec3f & src){ + x = src.x; + y = src.y; + z = src.z; + } + + ofVec3f Vec3::toOf(){ + ofVec3f(x, y, z); + } + + ofVec3f toOf(Vec3 & src){ + return ofVec3f(src.x, src.y, src.z); + } + + vector toOf(vector & src){ + vector dst; + for(auto v : src){ + dst.push_back(ofVec3f(v.x, v.y, v.z)); + } + return dst; + } +#else + // TODO: The same for glm::vec2 +#endif + +void Vec3::operator=(const Vec3 & other){ + x = other.x; + y = other.y; + z = other.z; +} + +void Vec3::operator=(const ofVec3f & other){ + x = other.x; + y = other.y; + z = other.z; +} + +Vec3 Vec3::operator+(Vec3 & other){ + return Vec3( + x + other.x, + y + other.y, + z + other.z); +} + +Vec3 Vec3::operator-(){ + return Vec3(-x, -y, -z); +} + +Vec3 Vec3::operator-(Vec3 & other){ + return Vec3( + x - other.x, + y - other.y, + z - other.z); +} + +bool Vec3::operator!=(Vec3 & other){ + if(x == other.x && y == other.y && z == other.z){ + return false; + } + return true; +} + +} // namespace piMapper +} // namespace ofx diff --git a/src/Types/Vec3.h b/src/Types/Vec3.h new file mode 100644 index 0000000..f9fcda6 --- /dev/null +++ b/src/Types/Vec3.h @@ -0,0 +1,43 @@ +#pragma once + +#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 +#include "ofMain.h" +#else +// TODO: include glm +#endif + +namespace ofx { +namespace piMapper { + +class Vec3{ +public: + Vec3(); + Vec3(float $x, float $y, float $z); + + #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 + Vec3(ofVec3f & src); + ofVec3f toOf(); + static ofVec3f toOf(Vec3 & src); + static vector toOf(vector & src); + #else + // TODO: The same for glm::vec2 + // static vector toOf(vector & src); + #endif + + void operator=(const Vec3 & other); + void operator=(const ofVec3f & other); + + Vec3 operator+(Vec3 & other); + + Vec3 operator-(); + Vec3 operator-(Vec3 & other); + + bool operator!=(Vec3 & other); + + float x; + float y; + float z; +}; + +} // namespace piMapper +} // namespace ofx diff --git a/src/UserInterface/BaseJoint.cpp b/src/UserInterface/BaseJoint.cpp index 4fd890b..ea81453 100644 --- a/src/UserInterface/BaseJoint.cpp +++ b/src/UserInterface/BaseJoint.cpp @@ -9,8 +9,9 @@ BaseJoint::BaseJoint(){ } void BaseJoint::mousePressed(ofMouseEventArgs & args){ - if(hitTest(ofVec2f(args.x, args.y))){ - clickDistance = position - ofVec2f(args.x, args.y); + if(hitTest(Vec2(args.x, args.y))){ + Vec2 clickPosition(args.x, args.y); + clickDistance = position - clickPosition; } } @@ -22,7 +23,7 @@ void BaseJoint::mouseDragged(ofMouseEventArgs & args){ if(!bDrag){ return; } - position = ofVec2f(args.x, args.y) + clickDistance; + position = Vec2(args.x, args.y) + clickDistance; } void BaseJoint::startDrag(){ @@ -41,7 +42,7 @@ void BaseJoint::unselect(){ selected = false; } -void BaseJoint::setClickDistance(ofVec2f newClickDistance){ +void BaseJoint::setClickDistance(Vec2 newClickDistance){ clickDistance = newClickDistance; } @@ -63,12 +64,12 @@ void BaseJoint::setDefaultColors(){ void BaseJoint::setDefaultProperties(){ enabled = true; visible = true; - position = ofVec2f(20.0f, 20.0f); - clickDistance = ofVec2f(0.0f, 0.0f); + position = Vec2(20.0f, 20.0f); + clickDistance = Vec2(0.0f, 0.0f); bDrag = false; selected = false; strokeWidth = 1.5f; } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/UserInterface/BaseJoint.h b/src/UserInterface/BaseJoint.h index be75299..ddae2a8 100644 --- a/src/UserInterface/BaseJoint.h +++ b/src/UserInterface/BaseJoint.h @@ -1,6 +1,7 @@ #pragma once #include "ofMain.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -10,7 +11,7 @@ class BaseJoint { public: BaseJoint(); - ofVec2f position; + Vec2 position; bool enabled; bool visible; bool selected; @@ -22,13 +23,13 @@ class BaseJoint { void stopDrag(); void select(); void unselect(); - void setClickDistance(ofVec2f newClickDistance); + void setClickDistance(Vec2 newClickDistance); bool isDragged(); bool isSelected(); virtual void update(){} virtual void draw(){} - virtual bool hitTest(ofVec2f position){ return false; } + virtual bool hitTest(Vec2 position){ return false; } protected: ofColor fillColor; @@ -36,7 +37,7 @@ class BaseJoint { ofColor fillColorSelected; ofColor strokeColorSelected; float strokeWidth; - ofVec2f clickDistance; // How far from the center of the joint the user has + Vec2 clickDistance; // How far from the center of the joint the user has // clicked? bool bDrag; diff --git a/src/UserInterface/CircleJoint.cpp b/src/UserInterface/CircleJoint.cpp index 47cd8b9..193d5b1 100644 --- a/src/UserInterface/CircleJoint.cpp +++ b/src/UserInterface/CircleJoint.cpp @@ -59,7 +59,7 @@ void CircleJoint::setDefaultProperties(){ radius = 10.0f; } -bool CircleJoint::hitTest(ofVec2f pos){ +bool CircleJoint::hitTest(Vec2 pos){ float distance = position.distance(pos); if(distance < radius){ return true; diff --git a/src/UserInterface/CircleJoint.h b/src/UserInterface/CircleJoint.h index 9b4ef2b..070412d 100644 --- a/src/UserInterface/CircleJoint.h +++ b/src/UserInterface/CircleJoint.h @@ -2,6 +2,7 @@ #include "ofMain.h" #include "BaseJoint.h" +#include "Vec2.h" namespace ofx { namespace piMapper { @@ -12,7 +13,7 @@ class CircleJoint : public BaseJoint { void update(); void draw(); - bool hitTest(ofVec2f position); + bool hitTest(Vec2 position); private: float radius; @@ -22,4 +23,4 @@ class CircleJoint : public BaseJoint { }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index 43d40da..fa0dba1 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -147,7 +147,7 @@ void ofxPiMapper::togglePause(){ _application.togglePause(); } -void ofxPiMapper::moveSelection(ofVec2f by){ +void ofxPiMapper::moveSelection(ofx::piMapper::Vec2 by){ _application.moveSelection(by); } diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index f85643b..dd5ec43 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -6,6 +6,7 @@ #include "Application.h" #include "SurfaceType.h" #include "Mode.h" +#include "Vec2.h" class ofxPiMapper { public: @@ -66,7 +67,7 @@ class ofxPiMapper { void scaleDown(); void togglePauseForSurface(unsigned int i); void togglePause(); - void moveSelection(ofVec2f by); + void moveSelection(ofx::piMapper::Vec2 by); void createSurface(ofx::piMapper::SurfaceType type); void eraseSurface(int i); From 9966ecf83a666a0b40f041427f7a5e811b676482 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 26 Dec 2017 17:10:53 +0100 Subject: [PATCH 065/103] Update code to use Vec3 and Vec2 everywhere --- src/Application/Application.cpp | 5 +- src/Application/Application.h | 2 +- .../Modes/ProjectionMappingMode.cpp | 21 ++-- src/Application/Modes/ProjectionMappingMode.h | 1 + src/Application/Modes/TextureMappingMode.cpp | 2 +- src/Application/SettingsLoader.cpp | 74 +++++++----- src/Application/SettingsLoader.h | 1 + src/Commands/AddGridColCmd.cpp | 6 +- src/Commands/AddGridColCmd.h | 5 +- src/Commands/AddGridRowCmd.cpp | 6 +- src/Commands/AddGridRowCmd.h | 3 +- src/Commands/DuplicateSurfaceCmd.cpp | 2 +- src/Commands/DuplicateSurfaceCmd.h | 2 +- src/Commands/MvSelectionCmd.cpp | 2 +- src/Commands/MvSelectionCmd.h | 6 +- src/Commands/MvSurfaceVertCmd.h | 4 +- src/Commands/RmGridColCmd.cpp | 8 +- src/Commands/RmGridColCmd.h | 3 +- src/Commands/RmGridRowCmd.cpp | 8 +- src/Commands/RmGridRowCmd.h | 3 +- src/Commands/StartDragSurfaceCmd.cpp | 4 +- src/Commands/StartDragSurfaceCmd.h | 4 +- src/Gui/Widgets/ProjectionEditorWidget.cpp | 35 +++--- src/Gui/Widgets/ProjectionEditorWidget.h | 5 +- src/Gui/Widgets/TextureEditorWidget.cpp | 26 ++-- src/Surfaces/BaseSurface.cpp | 38 +++--- src/Surfaces/BaseSurface.h | 29 ++--- src/Surfaces/CircleSurface.cpp | 11 +- src/Surfaces/CircleSurface.h | 2 +- src/Surfaces/GridWarpSurface.cpp | 52 +++----- src/Surfaces/GridWarpSurface.h | 16 ++- src/Surfaces/HexagonSurface.cpp | 75 +++++------- src/Surfaces/HexagonSurface.h | 19 ++- src/Surfaces/QuadSurface.cpp | 90 ++++++-------- src/Surfaces/QuadSurface.h | 26 ++-- src/Surfaces/SurfaceFactory.cpp | 18 +-- src/Surfaces/SurfaceManager.cpp | 8 +- src/Surfaces/SurfaceManager.h | 8 +- src/Surfaces/SurfaceStack.cpp | 2 +- src/Surfaces/SurfaceStack.h | 4 +- src/Surfaces/TriangleSurface.cpp | 80 ++++++------- src/Surfaces/TriangleSurface.h | 22 ++-- src/Types/Vec2.cpp | 74 ++++++------ src/Types/Vec2.h | 35 +++--- src/Types/Vec3.cpp | 111 ++++++++++++------ src/Types/Vec3.h | 34 +++--- src/ofxPiMapper.cpp | 2 +- src/ofxPiMapper.h | 3 +- 48 files changed, 490 insertions(+), 507 deletions(-) diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index b4a9ded..12569a1 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -356,13 +356,14 @@ void Application::selectPrevTexCoord(){ } } -void Application::moveSelection(Vec2 by){ +void Application::moveSelection(Vec3 by){ if(_state == ProjectionMappingMode::instance()){ getCmdManager()->exec(new MvSelectionCmd(getSurfaceManager(), by)); }else if(_state == TextureMappingMode::instance()){ + Vec2 tcBy(by.x, by.y); int selectedTexCoord = Gui::instance()->getTextureEditorWidget().getSelectedTexCoord(); if(selectedTexCoord >= 0){ - moveTexCoord(selectedTexCoord, by); + moveTexCoord(selectedTexCoord, tcBy); } } } diff --git a/src/Application/Application.h b/src/Application/Application.h index e6ad6d0..b3cfc0f 100644 --- a/src/Application/Application.h +++ b/src/Application/Application.h @@ -114,7 +114,7 @@ class Application { Moves vertex when in projection mapping mode. Moves texture coordinate when in texture mapping mode. */ - void moveSelection(Vec2 by); + void moveSelection(Vec3 by); void setPresentationMode(); void setTextureMode(); diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 134dabc..2ca7b8d 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -114,33 +114,33 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg case OF_KEY_UP: if(app->isShiftKeyDown()){ - app->moveSelection(Vec2(0.0f, -10.0f)); + app->moveSelection(Vec3(0.0f, -10.0f, 0.0f)); }else{ - app->moveSelection(Vec2(0.0f, -1.0f)); + app->moveSelection(Vec3(0.0f, -1.0f, 0.0f)); } break; case OF_KEY_DOWN: if(app->isShiftKeyDown()){ - app->moveSelection(Vec2(0.0f, 10.0f)); + app->moveSelection(Vec3(0.0f, 10.0f, 0.0f)); }else{ - app->moveSelection(Vec2(0.0f, 1.0f)); + app->moveSelection(Vec3(0.0f, 1.0f, 0.0f)); } break; case OF_KEY_LEFT: if(app->isShiftKeyDown()){ - app->moveSelection(Vec2(-10.0f, 0.0f)); + app->moveSelection(Vec3(-10.0f, 0.0f, 0.0f)); }else{ - app->moveSelection(Vec2(-1.0f, 0.0f)); + app->moveSelection(Vec3(-1.0f, 0.0f, 0.0f)); } break; case OF_KEY_RIGHT: if(app->isShiftKeyDown()){ - app->moveSelection(Vec2(10.0f, 0.0f)); + app->moveSelection(Vec3(10.0f, 0.0f, 0.0f)); }else{ - app->moveSelection(Vec2(1.0f, 0.0f)); + app->moveSelection(Vec3(1.0f, 0.0f, 0.0f)); } break; @@ -242,7 +242,10 @@ void ProjectionMappingMode::onMouseDragged(Application * app, ofMouseEventArgs & if(_bSurfaceDrag){ Vec2 mousePosition = Vec2(args.x, args.y); Vec2 distance = mousePosition - _clickPosition; - Gui::instance()->getProjectionEditorWidget().moveSelectedSurface(distance); + Gui::instance()->getProjectionEditorWidget().moveSelectedSurface(Vec3( + distance.x, + distance.y, + 0.0f)); _clickPosition = mousePosition; } } diff --git a/src/Application/Modes/ProjectionMappingMode.h b/src/Application/Modes/ProjectionMappingMode.h index ea0b000..6567061 100644 --- a/src/Application/Modes/ProjectionMappingMode.h +++ b/src/Application/Modes/ProjectionMappingMode.h @@ -10,6 +10,7 @@ #include "Gui.h" #include "ScaleWidget.h" #include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { diff --git a/src/Application/Modes/TextureMappingMode.cpp b/src/Application/Modes/TextureMappingMode.cpp index e79b80f..e7a15ec 100644 --- a/src/Application/Modes/TextureMappingMode.cpp +++ b/src/Application/Modes/TextureMappingMode.cpp @@ -264,7 +264,7 @@ void TextureMappingMode::drawTexture(Application * app){ ofEnableNormalizedTexCoords(); ofSetColor(255, 255, 255, 255); - app->getSurfaceManager()->getSelectedSurface()->drawTexture(Vec2(0, 0)); + app->getSurfaceManager()->getSelectedSurface()->drawTexture(Vec3(0.0f, 0.0f, 0.0f)); if(!normalizedTexCoords){ ofDisableNormalizedTexCoords(); diff --git a/src/Application/SettingsLoader.cpp b/src/Application/SettingsLoader.cpp index 0ea597c..c916555 100644 --- a/src/Application/SettingsLoader.cpp +++ b/src/Application/SettingsLoader.cpp @@ -178,11 +178,11 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->pushTag("surface", i); xmlSettings->addTag("vertices"); xmlSettings->pushTag("vertices"); - vector * vertices = &surface->getVertices(); - for(int j = 0; j < vertices->size(); j++){ + vector vertices = surface->getVertices(); + for(int j = 0; j < vertices.size(); j++){ xmlSettings->addTag("vertex"); xmlSettings->pushTag("vertex", j); - ofVec3f * vertex = &(*vertices)[j]; + Vec3 * vertex = &vertices[j]; xmlSettings->addValue("x", vertex->x); xmlSettings->addValue("y", vertex->y); @@ -194,11 +194,11 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->addTag("texCoords"); xmlSettings->pushTag("texCoords"); - vector * texCoords = &surface->getTexCoords(); - for(int j = 0; j < texCoords->size(); j++){ + vector texCoords = surface->getTexCoords(); + for(int j = 0; j < texCoords.size(); j++){ xmlSettings->addTag("texCoord"); xmlSettings->pushTag("texCoord", j); - Vec2 * texCoord = &(*texCoords)[j]; + Vec2 * texCoord = &texCoords[j]; xmlSettings->addValue("x", texCoord->x); xmlSettings->addValue("y", texCoord->y); xmlSettings->popTag(); // texCoord @@ -252,29 +252,35 @@ bool SettingsLoader::create(string fileName){ } BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); if(xmlSettings->tagExists("vertex", 0)){ xmlSettings->pushTag("vertex", 0); - vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), - xmlSettings->getValue("y", 0.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 0.0f), + xmlSettings->getValue("y", 0.0f), + 0.0f)); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 1)){ xmlSettings->pushTag("vertex", 1); - vertices.push_back(Vec2(xmlSettings->getValue("x", 100.0f), - xmlSettings->getValue("y", 0.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 100.0f), + xmlSettings->getValue("y", 0.0f), + 0.0f)); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 2)){ xmlSettings->pushTag("vertex", 2); - vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), - xmlSettings->getValue("y", 100.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 0.0f), + xmlSettings->getValue("y", 100.0f), + 0.0f)); xmlSettings->popTag(); } @@ -321,36 +327,44 @@ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); if(xmlSettings->tagExists("vertex", 0)){ xmlSettings->pushTag("vertex", 0); - vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), - xmlSettings->getValue("y", 0.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 0.0f), + xmlSettings->getValue("y", 0.0f), + 0.0f)); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 1)){ xmlSettings->pushTag("vertex", 1); - vertices.push_back(Vec2(xmlSettings->getValue("x", 100.0f), - xmlSettings->getValue("y", 0.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 100.0f), + xmlSettings->getValue("y", 0.0f), + 0.0f)); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 2)){ xmlSettings->pushTag("vertex", 2); - vertices.push_back(Vec2(xmlSettings->getValue("x", 100.0f), - xmlSettings->getValue("y", 100.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 100.0f), + xmlSettings->getValue("y", 100.0f), + 0.0f)); xmlSettings->popTag(); } if(xmlSettings->tagExists("vertex", 3)){ xmlSettings->pushTag("vertex", 3); - vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), - xmlSettings->getValue("y", 100.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 0.0f), + xmlSettings->getValue("y", 100.0f), + 0.0f)); xmlSettings->popTag(); } @@ -415,7 +429,7 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -424,8 +438,10 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ while(xmlSettings->tagExists("vertex", iv)){ xmlSettings->pushTag("vertex", iv); - vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), - xmlSettings->getValue("y", 0.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 0.0f), + xmlSettings->getValue("y", 0.0f), + 0.0f)); xmlSettings->popTag(); ++iv; } @@ -476,7 +492,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -484,8 +500,10 @@ BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ unsigned int v = 0; while(xmlSettings->tagExists("vertex", v)){ xmlSettings->pushTag("vertex", v); - vertices.push_back(Vec2(xmlSettings->getValue("x", 0.0f), - xmlSettings->getValue("y", 0.0f))); + vertices.push_back(Vec3( + xmlSettings->getValue("x", 0.0f), + xmlSettings->getValue("y", 0.0f), + 0.0f)); xmlSettings->popTag(); // vertex v += 1; } diff --git a/src/Application/SettingsLoader.h b/src/Application/SettingsLoader.h index 1b5ba9d..fab1626 100644 --- a/src/Application/SettingsLoader.h +++ b/src/Application/SettingsLoader.h @@ -9,6 +9,7 @@ #include "SurfaceType.h" #include "SourceTypeHelper.h" #include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { diff --git a/src/Commands/AddGridColCmd.cpp b/src/Commands/AddGridColCmd.cpp index 226da21..f6931d6 100644 --- a/src/Commands/AddGridColCmd.cpp +++ b/src/Commands/AddGridColCmd.cpp @@ -18,11 +18,7 @@ void AddGridColCmd::exec(){ void AddGridColCmd::undo(){ ofLogNotice("AddGridColCmd", "undo"); _surface->setGridCols(_surface->getGridCols() - 1); - vector v; - for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); - } - _surface->setVertices(v); + _surface->setVertices(_vertices); _surface->setTexCoords(_texCoords); } diff --git a/src/Commands/AddGridColCmd.h b/src/Commands/AddGridColCmd.h index 53575f4..0e37ad8 100644 --- a/src/Commands/AddGridColCmd.h +++ b/src/Commands/AddGridColCmd.h @@ -5,6 +5,7 @@ #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" #include "Vec2.h" +#include "Vec3.h" class ofxPiMapper; @@ -19,8 +20,8 @@ class AddGridColCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; - vector _texCoords; + vector _vertices; + vector _texCoords; GridWarpSurface * _surface; }; diff --git a/src/Commands/AddGridRowCmd.cpp b/src/Commands/AddGridRowCmd.cpp index 46355f7..a54817a 100644 --- a/src/Commands/AddGridRowCmd.cpp +++ b/src/Commands/AddGridRowCmd.cpp @@ -18,11 +18,7 @@ void AddGridRowCmd::exec(){ void AddGridRowCmd::undo(){ ofLogNotice("AddGridRowCmd", "undo"); _surface->setGridRows(_surface->getGridRows() - 1); - vector v; - for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); - } - _surface->setVertices(v); + _surface->setVertices(_vertices); _surface->setTexCoords(_texCoords); } diff --git a/src/Commands/AddGridRowCmd.h b/src/Commands/AddGridRowCmd.h index cdb4e95..6b324ce 100644 --- a/src/Commands/AddGridRowCmd.h +++ b/src/Commands/AddGridRowCmd.h @@ -5,6 +5,7 @@ #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" #include "Vec2.h" +#include "Vec3.h" class ofxPiMapper; @@ -19,7 +20,7 @@ class AddGridRowCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; + vector _vertices; vector _texCoords; GridWarpSurface * _surface; diff --git a/src/Commands/DuplicateSurfaceCmd.cpp b/src/Commands/DuplicateSurfaceCmd.cpp index f2c7157..5e050c7 100644 --- a/src/Commands/DuplicateSurfaceCmd.cpp +++ b/src/Commands/DuplicateSurfaceCmd.cpp @@ -12,7 +12,7 @@ void DuplicateSurfaceCmd::exec(){ ofLogNotice("DuplicateSurfaceCmd", "exec"); _duplicate = _surface->clone(); _surfaceManager->addSurface(_duplicate); - _duplicate->moveBy(Vec2(10.0f, 10.0f)); + _duplicate->moveBy(Vec3(10.0f, 10.0f, 0.0f)); _surfaceManager->selectSurface(_duplicate); } diff --git a/src/Commands/DuplicateSurfaceCmd.h b/src/Commands/DuplicateSurfaceCmd.h index 1809d92..801a1e1 100644 --- a/src/Commands/DuplicateSurfaceCmd.h +++ b/src/Commands/DuplicateSurfaceCmd.h @@ -7,7 +7,7 @@ #include "BaseCmd.h" #include "BaseSurface.h" #include "SurfaceManager.h" -#include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { diff --git a/src/Commands/MvSelectionCmd.cpp b/src/Commands/MvSelectionCmd.cpp index 299362a..ff346c8 100644 --- a/src/Commands/MvSelectionCmd.cpp +++ b/src/Commands/MvSelectionCmd.cpp @@ -3,7 +3,7 @@ namespace ofx { namespace piMapper { -MvSelectionCmd::MvSelectionCmd(SurfaceManager * sm, Vec2 moveBy){ +MvSelectionCmd::MvSelectionCmd(SurfaceManager * sm, Vec3 moveBy){ _surfaceManager = sm; _movedBy = moveBy; } diff --git a/src/Commands/MvSelectionCmd.h b/src/Commands/MvSelectionCmd.h index d72b1ab..0881429 100644 --- a/src/Commands/MvSelectionCmd.h +++ b/src/Commands/MvSelectionCmd.h @@ -2,7 +2,7 @@ #include "BaseCmd.h" #include "SurfaceManager.h" -#include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -10,13 +10,13 @@ namespace piMapper { class MvSelectionCmd : public BaseUndoCmd { public: - MvSelectionCmd(SurfaceManager * sm, Vec2 moveBy); + MvSelectionCmd(SurfaceManager * sm, Vec3 moveBy); void exec(); void undo(); private: SurfaceManager * _surfaceManager; - Vec2 _movedBy; + Vec3 _movedBy; }; diff --git a/src/Commands/MvSurfaceVertCmd.h b/src/Commands/MvSurfaceVertCmd.h index 903184f..c3abd9f 100644 --- a/src/Commands/MvSurfaceVertCmd.h +++ b/src/Commands/MvSurfaceVertCmd.h @@ -8,7 +8,7 @@ #include "BaseSurface.h" #include "ProjectionEditorWidget.h" #include "BaseJoint.h" -#include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -22,7 +22,7 @@ class MvSurfaceVertCmd : public BaseUndoCmd { private: int _vertIndex; - Vec2 _prevVertPos; + Vec3 _prevVertPos; BaseSurface * _surface; }; diff --git a/src/Commands/RmGridColCmd.cpp b/src/Commands/RmGridColCmd.cpp index a874067..6f2e567 100644 --- a/src/Commands/RmGridColCmd.cpp +++ b/src/Commands/RmGridColCmd.cpp @@ -30,13 +30,7 @@ void RmGridColCmd::undo(){ } _surface->setGridCols(_surface->getGridCols() + 1); - vector v; - - for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); - } - - _surface->setVertices(v); + _surface->setVertices(_vertices); _surface->setTexCoords(_texCoords); } diff --git a/src/Commands/RmGridColCmd.h b/src/Commands/RmGridColCmd.h index 6026224..f79a46b 100644 --- a/src/Commands/RmGridColCmd.h +++ b/src/Commands/RmGridColCmd.h @@ -5,6 +5,7 @@ #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" #include "Vec2.h" +#include "Vec3.h" class ofxPiMapper; @@ -19,7 +20,7 @@ class RmGridColCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; + vector _vertices; vector _texCoords; GridWarpSurface * _surface; bool _doNotUndo; diff --git a/src/Commands/RmGridRowCmd.cpp b/src/Commands/RmGridRowCmd.cpp index fcd6ba5..36de4ee 100644 --- a/src/Commands/RmGridRowCmd.cpp +++ b/src/Commands/RmGridRowCmd.cpp @@ -30,13 +30,7 @@ void RmGridRowCmd::undo(){ } _surface->setGridRows(_surface->getGridRows() + 1); - vector v; - - for(int i = 0; i < _vertices.size(); ++i){ - v.push_back( Vec2(_vertices[i].x, _vertices[i].y) ); - } - - _surface->setVertices(v); + _surface->setVertices(_vertices); _surface->setTexCoords(_texCoords); } diff --git a/src/Commands/RmGridRowCmd.h b/src/Commands/RmGridRowCmd.h index 1fa9d0d..c1973e0 100644 --- a/src/Commands/RmGridRowCmd.h +++ b/src/Commands/RmGridRowCmd.h @@ -5,6 +5,7 @@ #include "GridWarpSurface.h" #include "ProjectionEditorWidget.h" #include "Vec2.h" +#include "Vec3.h" class ofxPiMapper; @@ -19,7 +20,7 @@ class RmGridRowCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; + vector _vertices; vector _texCoords; GridWarpSurface * _surface; bool _doNotUndo; diff --git a/src/Commands/StartDragSurfaceCmd.cpp b/src/Commands/StartDragSurfaceCmd.cpp index 9ea7bff..2f133eb 100644 --- a/src/Commands/StartDragSurfaceCmd.cpp +++ b/src/Commands/StartDragSurfaceCmd.cpp @@ -15,8 +15,8 @@ void StartDragSurfaceCmd::exec(){ void StartDragSurfaceCmd::undo(){ ofLogNotice("StartDragSurfaceCmd", "undo"); - ofVec3f step = _previousVertices[0] - _surface->getVertices()[0]; - _surface->moveBy(Vec2(step)); + Vec3 step = _previousVertices[0] - _surface->getVertices()[0]; + _surface->moveBy(step); } } // namespace piMapper diff --git a/src/Commands/StartDragSurfaceCmd.h b/src/Commands/StartDragSurfaceCmd.h index d8d7757..e28b878 100644 --- a/src/Commands/StartDragSurfaceCmd.h +++ b/src/Commands/StartDragSurfaceCmd.h @@ -2,7 +2,7 @@ #include "BaseCmd.h" #include "BaseSurface.h" -#include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -16,7 +16,7 @@ class StartDragSurfaceCmd : public BaseUndoCmd { private: BaseSurface * _surface; - vector _previousVertices; + vector _previousVertices; }; diff --git a/src/Gui/Widgets/ProjectionEditorWidget.cpp b/src/Gui/Widgets/ProjectionEditorWidget.cpp index 91016de..8d860f7 100644 --- a/src/Gui/Widgets/ProjectionEditorWidget.cpp +++ b/src/Gui/Widgets/ProjectionEditorWidget.cpp @@ -15,7 +15,10 @@ void ProjectionEditorWidget::update(){ if(joints[i]->isDragged() || joints[i]->isSelected()){ if(surfaceManager->getSelectedSurface() != 0){ // update vertex to new location - surfaceManager->getSelectedSurface()->setVertex(i, joints[i]->position); + surfaceManager->getSelectedSurface()->setVertex(i, Vec3( + joints[i]->position.x, + joints[i]->position.y, + 0.0f)); }else{ // clear joints if there is no surface selected // as the remove selected surface in the surface manager @@ -50,14 +53,16 @@ void ProjectionEditorWidget::mouseDragged(ofMouseEventArgs & args){ Vec2 mousePosition = Vec2(args.x, args.y); // Collect all vertices of the projection surfaces - vector allVertices; + vector allVertices; for(int i = 0; i < surfaceManager->size(); i++){ BaseSurface * surface = surfaceManager->getSurface(i); + if(surface == surfaceManager->getSelectedSurface()){ - continue; // Don't add vertices of selected surface + continue; // Don't add vertices of the selected surface } + for(int j = 0; j < surface->getVertices().size(); j++){ - allVertices.push_back(&surface->getVertices()[j]); + allVertices.push_back(surface->getVertices()[j]); } } @@ -65,13 +70,12 @@ void ProjectionEditorWidget::mouseDragged(ofMouseEventArgs & args){ for(int i = 0; i < joints.size(); i++){ if(joints[i]->isDragged()){ for(int j = 0; j < allVertices.size(); j++){ - Vec2 v(*allVertices[j]); + Vec2 v(allVertices[j].x, allVertices[j].y); float distance = mousePosition.distance(v); + if(distance < fSnapDistance){ - joints[i]->position = *allVertices[j]; - Vec2 jointPosition(joints[i]->position); - Vec2 clickPosition(args.x, args.y); - Vec2 clickDistance = jointPosition - clickPosition; + joints[i]->position = v; + Vec2 clickDistance = joints[i]->position - Vec2(args.x, args.y); joints[i]->setClickDistance(clickDistance); break; } @@ -133,8 +137,7 @@ void ProjectionEditorWidget::createJoints(){ return; } - vector & vertices = - surfaceManager->getSelectedSurface()->getVertices(); + vector vertices = surfaceManager->getSelectedSurface()->getVertices(); for(int i = 0; i < vertices.size(); i++){ joints.push_back(new CircleJoint()); @@ -144,8 +147,8 @@ void ProjectionEditorWidget::createJoints(){ void ProjectionEditorWidget::updateJoints(){ if(surfaceManager->getSelectedSurface()){ - vector & vertices = - surfaceManager->getSelectedSurface()->getVertices(); + vector vertices = surfaceManager->getSelectedSurface()->getVertices(); + for(int i = 0; i < vertices.size(); i++){ joints[i]->position = Vec2(vertices[i].x, vertices[i].y); } @@ -159,13 +162,15 @@ void ProjectionEditorWidget::unselectAllJoints(){ } } -void ProjectionEditorWidget::moveSelectedSurface(Vec2 by){ +void ProjectionEditorWidget::moveSelectedSurface(Vec3 by){ if(surfaceManager == 0){ return; } + if(surfaceManager->getSelectedSurface() == 0){ return; } + surfaceManager->getSelectedSurface()->moveBy(by); updateJoints(); } @@ -207,7 +212,7 @@ void ProjectionEditorWidget::onVertexChanged(int & i){ } } -void ProjectionEditorWidget::onVerticesChanged(vector & vertices){ +void ProjectionEditorWidget::onVerticesChanged(vector & vertices){ createJoints(); } diff --git a/src/Gui/Widgets/ProjectionEditorWidget.h b/src/Gui/Widgets/ProjectionEditorWidget.h index 23d6e10..032c642 100644 --- a/src/Gui/Widgets/ProjectionEditorWidget.h +++ b/src/Gui/Widgets/ProjectionEditorWidget.h @@ -3,6 +3,7 @@ #include "SurfaceManager.h" #include "CircleJoint.h" #include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -23,7 +24,7 @@ class ProjectionEditorWidget { void createJoints(); void updateJoints(); void unselectAllJoints(); - void moveSelectedSurface(Vec2 by); + void moveSelectedSurface(Vec3 by); void stopDragJoints(); void updateVertices(); void setSnapDistance(float newSnapDistance); @@ -31,7 +32,7 @@ class ProjectionEditorWidget { vector * getJoints(); void onVertexChanged(int & i); - void onVerticesChanged(vector & vertices); + void onVerticesChanged(vector & vertices); void onSurfaceSelected(int & surfaceIndex); void onVertexSelected(int & vertexIndex); void onVertexUnselected(int & vertexIndex); diff --git a/src/Gui/Widgets/TextureEditorWidget.cpp b/src/Gui/Widgets/TextureEditorWidget.cpp index da21b01..d4da08e 100644 --- a/src/Gui/Widgets/TextureEditorWidget.cpp +++ b/src/Gui/Widgets/TextureEditorWidget.cpp @@ -44,9 +44,10 @@ void TextureEditorWidget::update(){ if(surface->getType() == SurfaceType::GRID_WARP_SURFACE){ GridWarpSurface * s = (GridWarpSurface *)surface; - vector & texCoords = surface->getTexCoords(); - Vec2 textureSize = Vec2(surface->getSource()->getTexture()->getWidth(), - surface->getSource()->getTexture()->getHeight()); + vector texCoords = surface->getTexCoords(); + Vec2 textureSize = Vec2( + surface->getSource()->getTexture()->getWidth(), + surface->getSource()->getTexture()->getHeight()); int rows = s->getGridRows(); int cols = s->getGridCols(); @@ -131,8 +132,9 @@ void TextureEditorWidget::createJoints(){ if(surface == 0){ return; } + clearJoints(); - vector & texCoords = surface->getTexCoords(); + vector texCoords = surface->getTexCoords(); if(surface->getSource()->getTexture()->isAllocated()){ _pollCreateJoints = false; @@ -141,11 +143,12 @@ void TextureEditorWidget::createJoints(){ return; } - Vec2 textureSize = Vec2(surface->getSource()->getTexture()->getWidth(), - surface->getSource()->getTexture()->getHeight()); + Vec2 textureSize = Vec2( + surface->getSource()->getTexture()->getWidth(), + surface->getSource()->getTexture()->getHeight()); // Select joints depending on the surface type - vector tc; + vector tc; if(surface->getType() == SurfaceType::TRIANGLE_SURFACE){ tc = texCoords; @@ -279,9 +282,10 @@ void TextureEditorWidget::moveTexCoords(Vec2 by){ return; } - vector & texCoords = surface->getTexCoords(); - Vec2 textureSize = Vec2(surface->getSource()->getTexture()->getWidth(), - surface->getSource()->getTexture()->getHeight()); + vector texCoords = surface->getTexCoords(); + Vec2 textureSize = Vec2( + surface->getSource()->getTexture()->getWidth(), + surface->getSource()->getTexture()->getHeight()); for(int i = 0; i < joints.size(); i++){ joints[i]->position += by; @@ -408,4 +412,4 @@ vector & TextureEditorWidget::getJoints(){ } } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Surfaces/BaseSurface.cpp b/src/Surfaces/BaseSurface.cpp index 6675055..c309abd 100644 --- a/src/Surfaces/BaseSurface.cpp +++ b/src/Surfaces/BaseSurface.cpp @@ -21,7 +21,10 @@ void BaseSurface::createDefaultTexture(){ for(int i = 0; i < pixels.size(); i++){ pixels[i] = 255; } - int squareSize = 10; // size of each test pattern square + + // size of each test pattern square + int squareSize = 10; + bool sy = false; for(int y = 0; y < pixels.getWidth(); y += squareSize){ bool sx = false; @@ -46,53 +49,54 @@ void BaseSurface::createDefaultTexture(){ // load pixels into texture defaultTexture.loadData(pixels); + // Create new source to be the default defaultSource = new BaseSource(&defaultTexture); source = defaultSource; } -void BaseSurface::drawTexture(Vec2 position){ +void BaseSurface::drawTexture(Vec3 position){ if(source->getTexture() == 0){ ofLogWarning("BaseSurface") << "Source texture empty. Not drawing."; return; } + // TODO: Do not recreate this in each draw loop ofMesh texMesh; - texMesh.addVertex(position.toOf()); - Vec2 topRight(source->getTexture()->getWidth(), 0.0f); + // Add vertices to the mesh + texMesh.addVertex(position.toOf()); + Vec3 topRight(source->getTexture()->getWidth(), 0.0f, 0.0f); texMesh.addVertex((position + topRight).toOf()); - - Vec2 bottomRight(source->getTexture()->getWidth(), source->getTexture()->getHeight()); + Vec3 bottomRight(source->getTexture()->getWidth(), source->getTexture()->getHeight(), 0.0f); texMesh.addVertex((position + bottomRight).toOf()); - - Vec2 bottomLeft(0.0f, source->getTexture()->getHeight()); + Vec3 bottomLeft(0.0f, source->getTexture()->getHeight(), 0.0f); texMesh.addVertex((position + bottomLeft).toOf()); + // Make triangles out of added vertices texMesh.addTriangle(0, 2, 3); texMesh.addTriangle(0, 1, 2); + // Add texture coordinates for the added vertices texMesh.addTexCoord(Vec2(0.0f, 0.0f).toOf()); texMesh.addTexCoord(Vec2(1.0f, 0.0f).toOf()); texMesh.addTexCoord(Vec2(1.0f, 1.0f).toOf()); texMesh.addTexCoord(Vec2(0.0f, 1.0f).toOf()); + // Draw mesh source->getTexture()->bind(); texMesh.draw(); source->getTexture()->unbind(); } -//void BaseSurface::setTexture(ofTexture* texturePtr) { texture = texturePtr; } void BaseSurface::setSource(BaseSource * newSource){ source = newSource; } -//ofTexture* BaseSurface::getTexture() { return texture; } BaseSource * BaseSurface::getSource(){ return source; } -//ofTexture* BaseSurface::getDefaultTexture() { return &defaultTexture; } BaseSource * BaseSurface::getDefaultSource(){ return defaultSource; } @@ -102,16 +106,20 @@ void BaseSurface::setMoved(bool moved){ } void BaseSurface::scaleTo(float scale){ - ofPoint centroid = getBoundingBox().getCenter(); + Vec3 centroid( + getBoundingBox().getCenter().x, + getBoundingBox().getCenter().y, + getBoundingBox().getCenter().z); for(unsigned int i = 0; i < mesh.getVertices().size(); ++i){ - ofVec3f d = (mesh.getVertices()[i] - centroid) / _scale; + Vec3 d = (Vec3(mesh.getVertices()[i]) - centroid) / _scale; d *= scale; - mesh.getVertices()[i] = centroid + d; + mesh.getVertices()[i] = (centroid + d).toOf(); } _scale = scale; - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } bool BaseSurface::getMoved(){ diff --git a/src/Surfaces/BaseSurface.h b/src/Surfaces/BaseSurface.h index 1dfa6e9..5ab86e5 100644 --- a/src/Surfaces/BaseSurface.h +++ b/src/Surfaces/BaseSurface.h @@ -4,6 +4,7 @@ #include #include "BaseSource.h" #include "Vec2.h" +#include "Vec3.h" using namespace std; @@ -18,25 +19,20 @@ class BaseSurface { virtual void setup() = 0; virtual void draw() = 0; - virtual void setVertex(int index, Vec2 p) = 0; - virtual void setVertices(vector v) = 0; + virtual void setVertex(int index, Vec3 p) = 0; + virtual void setVertices(vector v) = 0; virtual void setTexCoord(int index, Vec2 t) = 0; virtual void setTexCoords(vector t) = 0; - virtual void moveBy(Vec2 v) = 0; - + virtual void moveBy(Vec3 v) = 0; virtual int getType() = 0; - virtual bool hitTest(Vec2 p) = 0; - virtual ofPolyline getHitArea() = 0; virtual ofPolyline getTextureHitArea() = 0; - - virtual vector & getVertices() = 0; - virtual vector & getTexCoords() = 0; - + virtual vector getVertices() = 0; + virtual vector getTexCoords() = 0; virtual BaseSurface * clone() = 0; - void drawTexture(Vec2 position); + void drawTexture(Vec3 position); void setSource(BaseSource * newSource); void setMoved(bool moved); void scaleTo(float scale); @@ -50,26 +46,19 @@ class BaseSurface { ofMesh & getMesh(); ofRectangle & getBoundingBox(); - ofEvent > verticesChangedEvent; - ofEvent vertexChangedEvent; + ofEvent> verticesChangedEvent; + ofEvent vertexChangedEvent; protected: ofMesh mesh; - ofRectangle _boundingBox; - ofTexture defaultTexture; - BaseSource * source; BaseSource * defaultSource; void createDefaultTexture(); - bool _moved; - float _scale; - - vector _texCoords; }; } // namespace piMapper diff --git a/src/Surfaces/CircleSurface.cpp b/src/Surfaces/CircleSurface.cpp index c2eda67..b0801fb 100644 --- a/src/Surfaces/CircleSurface.cpp +++ b/src/Surfaces/CircleSurface.cpp @@ -1,6 +1,7 @@ // // CircleSurface.cpp // Copyright (c) 2017 Cristobal Mendoza +// With modifications by Krisjanis Rijnieks (c) 2017 // http://cuppetellimendoza.com #include "CircleSurface.h" @@ -19,8 +20,6 @@ CircleSurface::CircleSurface(QuadSurface &surface) { setPerspectiveWarping(surface.getPerspectiveWarping()); } -CircleSurface::~CircleSurface() {} - void CircleSurface::setup() { QuadSurface::setup(); @@ -264,10 +263,10 @@ void CircleSurface::setupTextures() { // meshes are similar: // Create 4 points for the 2 triangles - Vec3 p1 = Vec3(0, 0, 0); - Vec3 p2 = Vec3(0, h, 0); - Vec3 p3 = Vec3(w, h, 0); - Vec3 p4 = Vec3(w, 0, 0); + Vec3 p1 = Vec3(0.0f, 0.0f, 0.0f); + Vec3 p2 = Vec3(0.0f, h, 0.0f); + Vec3 p3 = Vec3(w, h, 0.0f); + Vec3 p4 = Vec3(w, 0.0f, 0.0f); // Create 4 point for the texture coordinates Vec2 t1 = Vec2(Vec2(0.0f, 1.0f)); diff --git a/src/Surfaces/CircleSurface.h b/src/Surfaces/CircleSurface.h index b269adf..5f23395 100644 --- a/src/Surfaces/CircleSurface.h +++ b/src/Surfaces/CircleSurface.h @@ -1,6 +1,7 @@ // // CircleSurface.h // Copyright (c) 2017 Cristobal Mendoza +// With modifications by Krisjanis Rijnieks (c) 2017 // http://cuppetellimendoza.com #ifndef OFXPIMAPPER_CIRCLESURFACE_H @@ -20,7 +21,6 @@ class CircleSurface : public QuadSurface { CircleSurface(); CircleSurface(QuadSurface &surface); int getType() override; - ~CircleSurface(); void draw() override; void setup() override; diff --git a/src/Surfaces/GridWarpSurface.cpp b/src/Surfaces/GridWarpSurface.cpp index 6fd5927..b48ad2c 100644 --- a/src/Surfaces/GridWarpSurface.cpp +++ b/src/Surfaces/GridWarpSurface.cpp @@ -9,10 +9,6 @@ GridWarpSurface::GridWarpSurface(){ createGridMesh(); } -void GridWarpSurface::setup(){ - // Nothing here yet -} - void GridWarpSurface::draw(){ if(source->getTexture() == 0){ return; @@ -34,15 +30,14 @@ void GridWarpSurface::draw(){ } } -void GridWarpSurface::moveBy(Vec2 v){ - vector & vertices = getVertices(); - - for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v.toOf(); +void GridWarpSurface::moveBy(Vec3 v){ + for(int i = 0; i < mesh.getVertices().size(); i++){ + mesh.getVertices()[i] += v.toOf(); } setMoved(true); - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } int GridWarpSurface::getType(){ @@ -146,17 +141,16 @@ ofPolyline GridWarpSurface::getTextureHitArea(){ return line; } -void GridWarpSurface::setVertex(int index, Vec2 p){ +void GridWarpSurface::setVertex(int index, Vec3 vert){ if(index >= mesh.getVertices().size()){ throw runtime_error("Vertex with provided index does not exist"); } - mesh.setVertex(index, p.toOf()); - ofVec3f v = mesh.getVertex(index); + mesh.setVertex(index, vert.toOf()); ofNotifyEvent(vertexChangedEvent, index, this); } -void GridWarpSurface::setVertices(vector v){ +void GridWarpSurface::setVertices(vector v){ if(v.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of vertices"); } @@ -165,19 +159,8 @@ void GridWarpSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); -} - -void GridWarpSurface::setVertices(vector v){ - if(v.size() != mesh.getVertices().size()){ - throw runtime_error("Wrong number of vertices"); - } - - for(int i = 0; i < v.size(); ++i){ - mesh.setVertex(i, v[i]); - } - - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } void GridWarpSurface::setTexCoord(int index, Vec2 t){ @@ -197,16 +180,12 @@ void GridWarpSurface::setTexCoords(vector t){ } -vector & GridWarpSurface::getVertices(){ - return mesh.getVertices(); +vector GridWarpSurface::getVertices(){ + return Vec3::fromOf(mesh.getVertices()); } -vector & GridWarpSurface::getTexCoords(){ - _texCoords.clear(); - for(auto c : mesh.getTexCoords()){ - _texCoords.push_back(Vec2(c)); - } - return _texCoords; +vector GridWarpSurface::getTexCoords(){ + return Vec2::fromOf(mesh.getTexCoords()); } void GridWarpSurface::createGridMesh(){ @@ -251,7 +230,8 @@ void GridWarpSurface::createGridMesh(){ } } - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } BaseSurface * GridWarpSurface::clone(){ diff --git a/src/Surfaces/GridWarpSurface.h b/src/Surfaces/GridWarpSurface.h index 370e618..9f997f6 100644 --- a/src/Surfaces/GridWarpSurface.h +++ b/src/Surfaces/GridWarpSurface.h @@ -5,6 +5,7 @@ #include "SurfaceType.h" #include "HomographyHelper.h" #include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -13,9 +14,9 @@ class GridWarpSurface : public BaseSurface { public: GridWarpSurface(); - void setup(); + void setup(){}; void draw(); - void moveBy(Vec2 v); + void moveBy(Vec3 v); int getType(); int getGridRows(); @@ -28,13 +29,12 @@ class GridWarpSurface : public BaseSurface { ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - void setVertex(int index, Vec2 p); - void setVertices(vector v); - void setVertices(vector v); + void setVertex(int index, Vec3 p); + void setVertices(vector v); void setTexCoord(int index, Vec2 t); void setTexCoords(vector t); - vector & getVertices(); - vector & getTexCoords(); + vector getVertices(); + vector getTexCoords(); void createGridMesh(); @@ -43,8 +43,6 @@ class GridWarpSurface : public BaseSurface { private: int _gridCols; int _gridRows; - - vector _texCoords; }; } // namespace piMapper diff --git a/src/Surfaces/HexagonSurface.cpp b/src/Surfaces/HexagonSurface.cpp index 5fa16a2..99df1d2 100644 --- a/src/Surfaces/HexagonSurface.cpp +++ b/src/Surfaces/HexagonSurface.cpp @@ -11,19 +11,19 @@ void HexagonSurface::setup(){ // Create 6 + 1 points for the hexagon surface. - vector verts; + vector verts; verts.resize(7); // Start with the center. - verts[0] = Vec2((float)ofGetWidth() / 2.0f, (float)ofGetHeight() / 2.0f); + verts[0] = Vec3((float)ofGetWidth() / 2.0f, (float)ofGetHeight() / 2.0f, 0.0f); // Then from top left clockwise. - verts[1] = Vec2((float)ofGetWidth() / 3.0f, 0); - verts[2] = Vec2((float)ofGetWidth() / 3.0f * 2.0f, 0); - verts[3] = Vec2(ofGetWidth(), (float)ofGetHeight() / 2.0f); - verts[4] = Vec2((float)ofGetWidth() / 3.0f * 2.0f, ofGetHeight()); - verts[5] = Vec2((float)ofGetWidth() / 3.0f, ofGetHeight()); - verts[6] = Vec2(0, (float)ofGetHeight() / 2.0f); + verts[1] = Vec3((float)ofGetWidth() / 3.0f, 0.0f, 0.0f); + verts[2] = Vec3((float)ofGetWidth() / 3.0f * 2.0f, 0.0f, 0.0f); + verts[3] = Vec3(ofGetWidth(), (float)ofGetHeight() / 2.0f, 0.0f); + verts[4] = Vec3((float)ofGetWidth() / 3.0f * 2.0f, ofGetHeight(), 0.0f); + verts[5] = Vec3((float)ofGetWidth() / 3.0f, ofGetHeight(), 0.0f); + verts[6] = Vec3(0, (float)ofGetHeight() / 2.0f, 0.0f); // No create the texture coordinates. vector coords; @@ -45,7 +45,7 @@ void HexagonSurface::setup(){ } void HexagonSurface::setup( - vector & verts, + vector & verts, vector & coords, BaseSource * newSource){ @@ -103,18 +103,17 @@ void HexagonSurface::draw(){ } } -void HexagonSurface::setVertex(int index, Vec2 p){ +void HexagonSurface::setVertex(int index, Vec3 p){ if(index >= mesh.getVertices().size()){ ofLog() << "Vertex with this index does not exist: " << index << endl; return; } mesh.setVertex(index, p.toOf()); - ofVec3f v = mesh.getVertex(index); ofNotifyEvent(vertexChangedEvent, index, this); } -void HexagonSurface::setVertices(vector v){ +void HexagonSurface::setVertices(vector v){ if(v.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of vertices"); } @@ -123,19 +122,8 @@ void HexagonSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); -} - -void HexagonSurface::setVertices(vector v){ - if(v.size() != mesh.getVertices().size()){ - throw runtime_error("Wrong number of vertices"); - } - - for(int i = 0; i < v.size(); ++i){ - mesh.setVertex(i, v[i]); - } - - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } void HexagonSurface::setTexCoord(int index, Vec2 t){ @@ -152,20 +140,20 @@ void HexagonSurface::setTexCoords(vector t){ if(t.size() != mesh.getTexCoords().size()){ throw runtime_error("Wrong number of texture coordinates"); } + for(int i = 0; i < t.size(); ++i){ mesh.setTexCoord(i, t[i].toOf()); } } -void HexagonSurface::moveBy(Vec2 v){ - vector & vertices = getVertices(); - - for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v.toOf(); +void HexagonSurface::moveBy(Vec3 v){ + for(int i = 0; i < mesh.getVertices().size(); i++){ + mesh.getVertices()[i] += v.toOf(); } setMoved(true); - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } int HexagonSurface::getType(){ @@ -173,7 +161,6 @@ int HexagonSurface::getType(){ } bool HexagonSurface::hitTest(Vec2 p){ - // Construct ofPolyline from vertices ofPolyline line = getHitArea(); if(line.inside(p.x, p.y)){ @@ -183,18 +170,20 @@ bool HexagonSurface::hitTest(Vec2 p){ } } -Vec2 HexagonSurface::getVertex(int index){ +Vec3 HexagonSurface::getVertex(int index){ if(index > 2){ ofLog() << "Vertex with this index does not exist: " << index << endl; throw runtime_error("Vertex index out of bounds."); } - ofVec3f vert = mesh.getVertex(index); - return Vec2(vert.x, vert.y); + return Vec3( + mesh.getVertex(index).x, + mesh.getVertex(index).y, + mesh.getVertex(index).z); } Vec2 HexagonSurface::getTexCoord(int index){ - if(index > 2){ + if(index > 1){ throw runtime_error("Texture coordinate index out of bounds."); } @@ -211,7 +200,6 @@ ofPolyline HexagonSurface::getHitArea(){ } line.close(); - return line; } @@ -229,17 +217,12 @@ ofPolyline HexagonSurface::getTextureHitArea(){ return line; } -vector & HexagonSurface::getVertices(){ - // return only joint vertices - return mesh.getVertices(); +vector HexagonSurface::getVertices(){ + return Vec3::fromOf(mesh.getVertices()); } -vector & HexagonSurface::getTexCoords(){ - _texCoords.clear(); - for(auto tc : mesh.getTexCoords()){ - _texCoords.push_back(tc); - } - return _texCoords; +vector HexagonSurface::getTexCoords(){ + return Vec2::fromOf(mesh.getTexCoords()); } BaseSurface * HexagonSurface::clone(){ diff --git a/src/Surfaces/HexagonSurface.h b/src/Surfaces/HexagonSurface.h index 051bdd6..11277ec 100644 --- a/src/Surfaces/HexagonSurface.h +++ b/src/Surfaces/HexagonSurface.h @@ -4,6 +4,7 @@ #include "BaseSurface.h" #include "SurfaceType.h" #include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -16,28 +17,24 @@ class HexagonSurface : public BaseSurface { void setup(); void setup( - vector & verts, + vector & verts, vector & coords, BaseSource * newSource); void draw(); - - void setVertex(int index, Vec2 p); - void setVertices(vector v); - void setVertices(vector v); - + void setVertex(int index, Vec3 p); + void setVertices(vector v); void setTexCoord(int index, Vec2 t); void setTexCoords(vector t); - - void moveBy(Vec2 v); + void moveBy(Vec3 v); int getType(); bool hitTest(Vec2 p); - Vec2 getVertex(int index); + Vec3 getVertex(int index); Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - vector & getVertices(); - vector & getTexCoords(); + vector getVertices(); + vector getTexCoords(); BaseSurface * clone(); }; diff --git a/src/Surfaces/QuadSurface.cpp b/src/Surfaces/QuadSurface.cpp index 7b83c3e..74c6c8a 100644 --- a/src/Surfaces/QuadSurface.cpp +++ b/src/Surfaces/QuadSurface.cpp @@ -14,21 +14,21 @@ QuadSurface::~QuadSurface(){ void QuadSurface::setup(){ // Create 4 points for the 2 triangles - Vec2 p1 = Vec2(0, 0); - Vec2 p2 = Vec2(0, ofGetHeight()); - Vec2 p3 = Vec2(ofGetWidth(), ofGetHeight()); - Vec2 p4 = Vec2(ofGetWidth(), 0); + Vec3 p1 = Vec3(0.0f, 0.0f, 0.0f); + Vec3 p2 = Vec3(0.0f, ofGetHeight(), 0.0f); + Vec3 p3 = Vec3(ofGetWidth(), ofGetHeight(), 0.0f); + Vec3 p4 = Vec3(ofGetWidth(), 0.0f, 0.0f); // Create 4 point for the texture coordinates - Vec2 t1 = Vec2(Vec2(0.0f, 0.0f)); - Vec2 t2 = Vec2(Vec2(1.0f, 0.0f)); - Vec2 t3 = Vec2(Vec2(1.0f, 1.0f)); - Vec2 t4 = Vec2(Vec2(0.0f, 1.0f)); + Vec2 t1 = Vec2(0.0f, 0.0f); + Vec2 t2 = Vec2(1.0f, 0.0f); + Vec2 t3 = Vec2(1.0f, 1.0f); + Vec2 t4 = Vec2(0.0f, 1.0f); setup(p1, p2, p3, p4, t1, t2, t3, t4, source); } -void QuadSurface::setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 p4, +void QuadSurface::setup(Vec3 p1, Vec3 p2, Vec3 p3, Vec3 p4, Vec2 t1, Vec2 t2, Vec2 t3, Vec2 t4, BaseSource * newSource){ // Assign texture @@ -71,10 +71,10 @@ void QuadSurface::draw(){ ofRectangle box = getMeshBoundingBox(); ofMesh m = mesh; - m.setVertex(0, ofVec3f(0, 0, 0)); - m.setVertex(1, ofVec3f(box.width, 0, 0)); - m.setVertex(2, ofVec3f(box.width, box.height, 0)); - m.setVertex(3, ofVec3f(0, box.height, 0)); + m.setVertex(0, Vec3(0, 0, 0).toOf()); + m.setVertex(1, Vec3(box.width, 0, 0).toOf()); + m.setVertex(2, Vec3(box.width, box.height, 0).toOf()); + m.setVertex(3, Vec3(0, box.height, 0).toOf()); ofPushMatrix(); if(true){ @@ -110,18 +110,17 @@ void QuadSurface::draw(){ } } -void QuadSurface::setVertex(int index, Vec2 p){ +void QuadSurface::setVertex(int index, Vec3 p){ if(index > 3){ ofLog() << "Vertex with this index does not exist: " << index << endl; return; } mesh.setVertex(index, p.toOf()); - ofVec3f v = mesh.getVertex(index); ofNotifyEvent(vertexChangedEvent, index, this); } -void QuadSurface::setVertices(vector v){ +void QuadSurface::setVertices(vector v){ if(v.size() != 4){ throw runtime_error("Wrong number of vertices"); } @@ -130,19 +129,8 @@ void QuadSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); -} - -void QuadSurface::setVertices(vector v){ - if(v.size() != 4){ - throw runtime_error("Wrong number of vertices"); - } - - for(int i = 0; i < 4; ++i){ - mesh.setVertex(i, v[i]); - } - - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } void QuadSurface::setTexCoord(int index, Vec2 t){ @@ -164,15 +152,14 @@ void QuadSurface::setTexCoords(vector t){ } } -void QuadSurface::moveBy(Vec2 v){ - vector & vertices = getVertices(); - - for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v.toOf(); +void QuadSurface::moveBy(Vec3 v){ + for(int i = 0; i < mesh.getVertices().size(); i++){ + mesh.getVertices()[i] += v.toOf(); } setMoved(true); - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } int QuadSurface::getType(){ @@ -180,7 +167,6 @@ int QuadSurface::getType(){ } bool QuadSurface::hitTest(Vec2 p){ - // Construct ofPolyline from vertices ofPolyline line = getHitArea(); if(line.inside(p.x, p.y)){ @@ -190,14 +176,16 @@ bool QuadSurface::hitTest(Vec2 p){ } } -Vec2 QuadSurface::getVertex(int index){ +Vec3 QuadSurface::getVertex(int index){ if(index > 3){ ofLog() << "Vertex with this index does not exist: " << index << endl; throw runtime_error("Vertex index out of bounds."); } - - ofVec3f vert = mesh.getVertex(index); - return Vec2(vert.x, vert.y); + + return Vec3( + mesh.getVertex(index).x, + mesh.getVertex(index).y, + mesh.getVertex(index).z); } Vec2 QuadSurface::getTexCoord(int index){ @@ -212,6 +200,7 @@ Vec2 QuadSurface::getTexCoord(int index){ ofPolyline QuadSurface::getHitArea(){ ofPolyline line; + line.addVertex(ofPoint(mesh.getVertex(0).x, mesh.getVertex(0).y)); line.addVertex(ofPoint(mesh.getVertex(1).x, mesh.getVertex(1).y)); line.addVertex(ofPoint(mesh.getVertex(2).x, mesh.getVertex(2).y)); @@ -234,17 +223,12 @@ ofPolyline QuadSurface::getTextureHitArea(){ return line; } -vector & QuadSurface::getVertices(){ - // return only joint vertices - return mesh.getVertices(); +vector QuadSurface::getVertices(){ + return Vec3::fromOf(mesh.getVertices()); } -vector & QuadSurface::getTexCoords(){ - _texCoords.clear(); - for(auto tc : mesh.getTexCoords()){ - _texCoords.push_back(tc); - } - return _texCoords; +vector QuadSurface::getTexCoords(){ + return Vec2::fromOf(mesh.getTexCoords()); } void QuadSurface::calculateHomography(){ @@ -262,10 +246,10 @@ void QuadSurface::calculateHomography(){ src[3][0] = 0; src[3][1] = box.height; - ofVec3f p0 = mesh.getVertex(0); - ofVec3f p1 = mesh.getVertex(1); - ofVec3f p2 = mesh.getVertex(2); - ofVec3f p3 = mesh.getVertex(3); + Vec3 p0(mesh.getVertex(0).x, mesh.getVertex(0).y, mesh.getVertex(0).z); + Vec3 p1(mesh.getVertex(1).x, mesh.getVertex(1).y, mesh.getVertex(1).z); + Vec3 p2(mesh.getVertex(2).x, mesh.getVertex(2).y, mesh.getVertex(2).z); + Vec3 p3(mesh.getVertex(3).x, mesh.getVertex(3).y, mesh.getVertex(3).z); dst[0][0] = p0.x; dst[0][1] = p0.y; diff --git a/src/Surfaces/QuadSurface.h b/src/Surfaces/QuadSurface.h index a0c3bc2..8a48b56 100644 --- a/src/Surfaces/QuadSurface.h +++ b/src/Surfaces/QuadSurface.h @@ -5,6 +5,7 @@ #include "SurfaceType.h" #include "HomographyHelper.h" #include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -15,39 +16,34 @@ class QuadSurface : public BaseSurface { ~QuadSurface(); void setup(); - void setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 p4, Vec2 t1, - Vec2 t2, Vec2 t3, Vec2 t4, BaseSource * newSource); - + void setup( + Vec3 p1, Vec3 p2, Vec3 p3, Vec3 p4, + Vec2 t1, Vec2 t2, Vec2 t3, Vec2 t4, + BaseSource * newSource); void draw(); - - void setVertex(int index, Vec2 p); - void setVertices(vector v); - void setVertices(vector v); - + void setVertex(int index, Vec3 p); + void setVertices(vector v); void setTexCoord(int index, Vec2 t); void setTexCoords(vector t); - - void moveBy(Vec2 v); + void moveBy(Vec3 v); int getType(); bool hitTest(Vec2 p); - Vec2 getVertex(int index); + Vec3 getVertex(int index); Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - vector & getVertices(); - vector & getTexCoords(); + vector getVertices(); + vector getTexCoords(); void setPerspectiveWarping(bool b); bool getPerspectiveWarping(); ofRectangle getMeshBoundingBox(); - BaseSurface * clone(); private: void calculateHomography(); - float _matrix[16]; bool _perspectiveWarping; }; diff --git a/src/Surfaces/SurfaceFactory.cpp b/src/Surfaces/SurfaceFactory.cpp index 9544e53..c6d02ed 100644 --- a/src/Surfaces/SurfaceFactory.cpp +++ b/src/Surfaces/SurfaceFactory.cpp @@ -29,11 +29,11 @@ BaseSurface * SurfaceFactory::createSurface(SurfaceType type){ } TriangleSurface * SurfaceFactory::createTriangleSurface(){ - vector vertices; + vector vertices; float margin = 50.0f; - vertices.push_back(Vec2((float)ofGetWidth() / 2.0f, margin)); - vertices.push_back(Vec2((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); - vertices.push_back(Vec2(margin, (float)ofGetHeight() - margin)); + vertices.push_back(Vec3((float)ofGetWidth() / 2.0f, margin, 0.0f)); + vertices.push_back(Vec3((float)ofGetWidth() - margin, (float)ofGetHeight() - margin, 0.0f)); + vertices.push_back(Vec3(margin, (float)ofGetHeight() - margin, 0.0f)); vector texCoords; texCoords.push_back(Vec2(0.5f, 0.0f)); @@ -51,12 +51,12 @@ TriangleSurface * SurfaceFactory::createTriangleSurface(){ } QuadSurface * SurfaceFactory::createQuadSurface(){ - vector vertices; + vector vertices; float margin = 50.0f; - vertices.push_back(Vec2(margin, margin)); - vertices.push_back(Vec2((float)ofGetWidth() - margin, margin)); - vertices.push_back(Vec2((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); - vertices.push_back(Vec2(margin, (float)ofGetHeight() - margin)); + vertices.push_back(Vec3(margin, margin, 0.0f)); + vertices.push_back(Vec3((float)ofGetWidth() - margin, margin, 0.0f)); + vertices.push_back(Vec3((float)ofGetWidth() - margin, (float)ofGetHeight() - margin, 0.0f)); + vertices.push_back(Vec3(margin, (float)ofGetHeight() - margin, 0.0f)); vector texCoords; texCoords.push_back(Vec2(Vec2(0.0f, 0.0f))); diff --git a/src/Surfaces/SurfaceManager.cpp b/src/Surfaces/SurfaceManager.cpp index 399a914..e991efb 100644 --- a/src/Surfaces/SurfaceManager.cpp +++ b/src/Surfaces/SurfaceManager.cpp @@ -303,14 +303,14 @@ void SurfaceManager::selectVertex(int i){ ofNotifyEvent(vertexSelectedEvent, _selectedVertexIndex, this); } -void SurfaceManager::moveSelectionBy(Vec2 v){ +void SurfaceManager::moveSelectionBy(Vec3 v){ if(selectedSurface == 0){ moveAllSurfacesBy(v); return; } if(_selectedVertexIndex != -1){ - selectedSurface->getVertices()[_selectedVertexIndex] += v.toOf(); + selectedSurface->getMesh().getVertices()[_selectedVertexIndex] += v.toOf(); ofNotifyEvent(vertexChangedEvent, _selectedVertexIndex, this); }else{ selectedSurface->moveBy(v); @@ -321,7 +321,7 @@ void SurfaceManager::moveSelectionBy(Vec2 v){ // it could be implemented as vector here. } -void SurfaceManager::moveAllSurfacesBy(Vec2 v){ +void SurfaceManager::moveAllSurfacesBy(Vec3 v){ if(_activePresetIndex < 0){ ofLogWarning( "SurfaceManager::moveAllSurfacesBy", @@ -393,7 +393,7 @@ void SurfaceManager::onVertexChanged(int & i){ ofNotifyEvent(vertexChangedEvent, i, this); } -void SurfaceManager::onVerticesChanged(vector & vertices){ +void SurfaceManager::onVerticesChanged(vector & vertices){ ofNotifyEvent(verticesChangedEvent, vertices, this); } diff --git a/src/Surfaces/SurfaceManager.h b/src/Surfaces/SurfaceManager.h index fe39001..b33cd07 100644 --- a/src/Surfaces/SurfaceManager.h +++ b/src/Surfaces/SurfaceManager.h @@ -51,8 +51,8 @@ class SurfaceManager { void selectPrevVertex(); void selectVertex(int i); - void moveSelectionBy(Vec2 v); - void moveAllSurfacesBy(Vec2 v); + void moveSelectionBy(Vec3 v); + void moveAllSurfacesBy(Vec3 v); int size(); int getSelectedVertexIndex(); @@ -61,13 +61,13 @@ class SurfaceManager { unsigned int getNumPresets(); ofEvent vertexChangedEvent; - ofEvent > verticesChangedEvent; + ofEvent > verticesChangedEvent; ofEvent surfaceSelectedEvent; ofEvent vertexSelectedEvent; ofEvent vertexUnselectedEvent; void onVertexChanged(int & i); - void onVerticesChanged(vector & vertices); + void onVerticesChanged(vector & vertices); SurfaceStack * getActivePreset(); SurfaceStack * createPreset(); diff --git a/src/Surfaces/SurfaceStack.cpp b/src/Surfaces/SurfaceStack.cpp index 89651a6..22605be 100644 --- a/src/Surfaces/SurfaceStack.cpp +++ b/src/Surfaces/SurfaceStack.cpp @@ -65,7 +65,7 @@ BaseSurface * SurfaceStack::back(){ return _surfaces.back(); } -void SurfaceStack::onVerticesChanged(vector & vertices){ +void SurfaceStack::onVerticesChanged(vector & vertices){ ofNotifyEvent(verticesChangedEvent, vertices, this); } diff --git a/src/Surfaces/SurfaceStack.h b/src/Surfaces/SurfaceStack.h index 843dbcc..7607167 100644 --- a/src/Surfaces/SurfaceStack.h +++ b/src/Surfaces/SurfaceStack.h @@ -21,10 +21,10 @@ class SurfaceStack { BaseSurface * at(int i); BaseSurface * back(); - ofEvent > verticesChangedEvent; + ofEvent > verticesChangedEvent; ofEvent vertexChangedEvent; - void onVerticesChanged(vector & vertices); + void onVerticesChanged(vector & vertices); void onVertexChanged(int & i); vector & getSurfaces(){ return _surfaces; }; diff --git a/src/Surfaces/TriangleSurface.cpp b/src/Surfaces/TriangleSurface.cpp index eb7afe2..bf1c0a1 100644 --- a/src/Surfaces/TriangleSurface.cpp +++ b/src/Surfaces/TriangleSurface.cpp @@ -7,23 +7,22 @@ TriangleSurface::TriangleSurface(){ setup(); } -TriangleSurface::~TriangleSurface(){} - void TriangleSurface::setup(){ + // Create 3 points for the triangle - Vec2 p1 = Vec2(ofGetWidth() / 2.0f, 0); - Vec2 p2 = Vec2(Vec2(0, ofGetHeight())); - Vec2 p3 = Vec2(ofGetWidth(), ofGetHeight()); + Vec3 p1 = Vec3((float)ofGetWidth() / 2.0f, 0.0f, 0.0f); + Vec3 p2 = Vec3(0.0f, (float)ofGetHeight(), 0.0f); + Vec3 p3 = Vec3((float)ofGetWidth(), (float)ofGetHeight(), 0.0f); // Create 3 point for the texture coordinates - Vec2 t1 = Vec2(0.5f, 0); - Vec2 t2 = Vec2(0, 1.0f); - Vec2 t3 = Vec2(1, 1.0f); + Vec2 t1 = Vec2(0.5f, 0.0f); + Vec2 t2 = Vec2(0.0f, 1.0f); + Vec2 t3 = Vec2(1.0f, 1.0f); setup(p1, p2, p3, t1, t2, t3, source); } -void TriangleSurface::setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 t1, +void TriangleSurface::setup(Vec3 p1, Vec3 p2, Vec3 p3, Vec2 t1, Vec2 t2, Vec2 t3, BaseSource * newSource){ // Assign texture source = newSource; @@ -63,18 +62,17 @@ void TriangleSurface::draw(){ } } -void TriangleSurface::setVertex(int index, Vec2 p){ +void TriangleSurface::setVertex(int index, Vec3 p){ if(index > 2){ ofLog() << "Vertex with this index does not exist: " << index << endl; return; } mesh.setVertex(index, p.toOf()); - ofVec3f v = mesh.getVertex(index); ofNotifyEvent(vertexChangedEvent, index, this); } -void TriangleSurface::setVertices(vector v){ +void TriangleSurface::setVertices(vector v){ if(v.size() != 3){ throw runtime_error("Wrong number of vertices"); } @@ -83,19 +81,8 @@ void TriangleSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); -} - -void TriangleSurface::setVertices(vector v){ - if(v.size() != 3){ - throw runtime_error("Wrong number of vertices"); - } - - for(int i = 0; i < 3; ++i){ - mesh.setVertex(i, v[i]); - } - - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } void TriangleSurface::setTexCoord(int index, Vec2 t){ @@ -112,20 +99,20 @@ void TriangleSurface::setTexCoords(vector t){ if(t.size() != 3){ throw runtime_error("Wrong number of texture coordinates"); } + for(int i = 0; i < 3; ++i){ mesh.setTexCoord(i, t[i].toOf()); } } -void TriangleSurface::moveBy(Vec2 v){ - vector & vertices = getVertices(); - - for(int i = 0; i < vertices.size(); i++){ - vertices[i] += v.toOf(); +void TriangleSurface::moveBy(Vec3 v){ + for(auto i = 0; i < mesh.getVertices().size(); ++i){ + mesh.getVertices()[i] += v.toOf(); } setMoved(true); - ofNotifyEvent(verticesChangedEvent, mesh.getVertices(), this); + vector vertices = Vec3::fromOf(mesh.getVertices()); + ofNotifyEvent(verticesChangedEvent, vertices, this); } int TriangleSurface::getType(){ @@ -133,9 +120,8 @@ int TriangleSurface::getType(){ } bool TriangleSurface::hitTest(Vec2 p){ - // Construct ofPolyline from vertices ofPolyline line = getHitArea(); - + if(line.inside(p.x, p.y)){ return true; }else{ @@ -149,12 +135,14 @@ Vec2 TriangleSurface::getVertex(int index){ throw runtime_error("Vertex index out of bounds."); } - ofVec3f vert = mesh.getVertex(index); - return Vec2(vert.x, vert.y); + return Vec2( + mesh.getVertex(index).x, + mesh.getVertex(index).y); } Vec2 TriangleSurface::getTexCoord(int index){ if(index > 2){ + ofLog() << "Texture coordinate with this index does not exist: " << index << endl; throw runtime_error("Texture coordinate index out of bounds."); } @@ -165,6 +153,7 @@ Vec2 TriangleSurface::getTexCoord(int index){ ofPolyline TriangleSurface::getHitArea(){ ofPolyline line; + line.addVertex(ofPoint(mesh.getVertex(0).x, mesh.getVertex(0).y)); line.addVertex(ofPoint(mesh.getVertex(1).x, mesh.getVertex(1).y)); line.addVertex(ofPoint(mesh.getVertex(2).x, mesh.getVertex(2).y)); @@ -175,26 +164,25 @@ ofPolyline TriangleSurface::getHitArea(){ ofPolyline TriangleSurface::getTextureHitArea(){ ofPolyline line; - Vec2 textureSize = Vec2(source->getTexture()->getWidth(), source->getTexture()->getHeight()); + + Vec2 textureSize = Vec2( + source->getTexture()->getWidth(), + source->getTexture()->getHeight()); + for(int i = 0; i < mesh.getTexCoords().size(); i++){ line.addVertex(ofPoint(mesh.getTexCoords()[i] * textureSize.toOf())); } + line.close(); - return line; } -vector & TriangleSurface::getVertices(){ - // return only joint vertices - return mesh.getVertices(); +vector TriangleSurface::getVertices(){ + return Vec3::fromOf(mesh.getVertices()); } -vector & TriangleSurface::getTexCoords(){ - _texCoords.clear(); - for(auto tc : mesh.getTexCoords()){ - _texCoords.push_back(tc); - } - return _texCoords; +vector TriangleSurface::getTexCoords(){ + return Vec2::fromOf(mesh.getTexCoords()); } BaseSurface * TriangleSurface::clone(){ diff --git a/src/Surfaces/TriangleSurface.h b/src/Surfaces/TriangleSurface.h index a358b66..9546e08 100644 --- a/src/Surfaces/TriangleSurface.h +++ b/src/Surfaces/TriangleSurface.h @@ -4,6 +4,7 @@ #include "BaseSurface.h" #include "SurfaceType.h" #include "Vec2.h" +#include "Vec3.h" namespace ofx { namespace piMapper { @@ -11,21 +12,18 @@ namespace piMapper { class TriangleSurface : public BaseSurface { public: TriangleSurface(); - ~TriangleSurface(); void setup(); - void setup(Vec2 p1, Vec2 p2, Vec2 p3, Vec2 t1, Vec2 t2, - Vec2 t3, BaseSource * newSource); + void setup( + Vec3 p1, Vec3 p2, Vec3 p3, + Vec2 t1, Vec2 t2, Vec2 t3, + BaseSource * newSource); void draw(); - - void setVertex(int index, Vec2 p); - void setVertices(vector v); - void setVertices(vector v); - + void setVertex(int index, Vec3 p); + void setVertices(vector v); void setTexCoord(int index, Vec2 t); void setTexCoords(vector t); - - void moveBy(Vec2 v); + void moveBy(Vec3 v); int getType(); bool hitTest(Vec2 p); @@ -33,8 +31,8 @@ class TriangleSurface : public BaseSurface { Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - vector & getVertices(); - vector & getTexCoords(); + vector getVertices(); + vector getTexCoords(); BaseSurface * clone(); }; diff --git a/src/Types/Vec2.cpp b/src/Types/Vec2.cpp index ee22e0c..35fb3da 100644 --- a/src/Types/Vec2.cpp +++ b/src/Types/Vec2.cpp @@ -4,13 +4,12 @@ namespace ofx { namespace piMapper { Vec2::Vec2(){ - x = 0.0f; - y = 0.0f; + Vec2(0.0f, 0.0f); } -Vec2::Vec2(float $x, float $y){ - x = $x; - y = $y; +Vec2::Vec2(float ix, float iy){ + x = ix; + y = iy; } #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 @@ -19,28 +18,27 @@ Vec2::Vec2(float $x, float $y){ y = src.y; } - Vec2::Vec2(ofVec3f & src){ - x = src.x; - y = src.y; - } - ofVec2f Vec2::toOf(){ return ofVec2f(x, y); } - - ofVec2f Vec2::toOf(Vec2 & src){ - return ofVec2f(src.x, src.y); - } vector Vec2::toOf(vector & src){ - vector dst; - for(auto v : src){ - dst.push_back(ofVec2f(v.x, v.y)); + vector retVal; + for(auto itm : src){ + retVal.push_back(itm.toOf()); } - return dst; + return retVal; } - float Vec2::distance(Vec2 & other){ + vector Vec2::fromOf(vector & src){ + vector retVal; + for(auto itm : src){ + retVal.push_back(Vec2(itm)); + } + return retVal; + } + + float Vec2::distance(const Vec2 & other){ ofVec2f v1(x, y); ofVec2f v2(other.x, other.y); return v1.distance(v2); @@ -54,41 +52,43 @@ void Vec2::operator=(const Vec2 & other){ y = other.y; } -void Vec2::operator=(const ofVec3f & other){ - x = other.x; - y = other.y; -} - -void Vec2::operator+=(Vec2 & other){ +void Vec2::operator+=(const Vec2 & other){ x += other.x; y += other.y; } -Vec2 Vec2::operator+(Vec2 & other){ +Vec2 Vec2::operator+(const Vec2 & other){ return Vec2(x + other.x, y + other.y); } -Vec2 Vec2::operator/(Vec2 & other){ - return Vec2(x / other.x, y / other.y); +Vec2 Vec2::operator-(){ + return Vec2(-x, -y); } -Vec2 Vec2::operator*(Vec2 & other){ - return Vec2(x * other.x, y * other.y); +Vec2 Vec2::operator-(const Vec2 & other){ + return Vec2(x - other.x, y - other.y); } -Vec2 Vec2::operator-(){ - return Vec2(-x, -y); +Vec2 Vec2::operator*(const Vec2 & other){ + return Vec2(x * other.x, y * other.y); } -Vec2 Vec2::operator-(Vec2 & other){ - return Vec2(x - other.x, y - other.y); +Vec2 Vec2::operator/(const Vec2 & other){ + return Vec2(x / other.x, y / other.y); } -bool Vec2::operator!=(Vec2 & other){ +bool Vec2::operator==(const Vec2 & other){ if(x == other.x && y == other.y){ - return false; + return true; + } + return false; +} + +bool Vec2::operator!=(const Vec2 & other){ + if(x != other.x && y != other.y){ + return true; } - return true; + return false; } } // namespace piMapper diff --git a/src/Types/Vec2.h b/src/Types/Vec2.h index e5c732c..e0414f6 100644 --- a/src/Types/Vec2.h +++ b/src/Types/Vec2.h @@ -1,45 +1,40 @@ #pragma once -#include "ofMain.h" - #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 -// ... + #include "ofVec2f.h" #else -// TODO: include glm + // TODO: include glm #endif namespace ofx { namespace piMapper { -//#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 class Vec2{ public: Vec2(); - Vec2(float $x, float $y); + Vec2(float ix, float iy); + // TODO: Achieve this with templates #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 Vec2(ofVec2f & src); - Vec2(ofVec3f & src); ofVec2f toOf(); - static ofVec2f toOf(Vec2 & src); static vector toOf(vector & src); - float distance(Vec2 & other); + static vector fromOf(vector & src); #else - // TODO: The same for glm::vec2 - // static vector toOf(vector & src); + // TODO: glm #endif - void operator=(const Vec2 & other); - void operator=(const ofVec3f & other); - void operator+=(Vec2 & other); + float distance(const Vec2 & other); - Vec2 operator+(Vec2 & other); - Vec2 operator/(Vec2 & other); - Vec2 operator*(Vec2 & other); + void operator=(const Vec2 & other); + void operator+=(const Vec2 & other); + Vec2 operator+(const Vec2 & other); Vec2 operator-(); - Vec2 operator-(Vec2 & other); - - bool operator!=(Vec2 & other); + Vec2 operator-(const Vec2 & other); + Vec2 operator*(const Vec2 & other); + Vec2 operator/(const Vec2 & other); + bool operator==(const Vec2 & other); + bool operator!=(const Vec2 & other); float x; float y; diff --git a/src/Types/Vec3.cpp b/src/Types/Vec3.cpp index 400b918..e3304b7 100644 --- a/src/Types/Vec3.cpp +++ b/src/Types/Vec3.cpp @@ -4,15 +4,13 @@ namespace ofx { namespace piMapper { Vec3::Vec3(){ - x = 0.0f; - y = 0.0f; - z = 0.0f; + Vec3(0.0f, 0.0f, 0.0f); } -Vec3::Vec3(float $x, float $y, float $z){ - x = $x; - y = $y; - z = $z; +Vec3::Vec3(float ix, float iy, float iz){ + x = ix; + y = iy; + z = iz; } #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 @@ -23,22 +21,26 @@ Vec3::Vec3(float $x, float $y, float $z){ } ofVec3f Vec3::toOf(){ - ofVec3f(x, y, z); + return ofVec3f(x, y, z); } - ofVec3f toOf(Vec3 & src){ - return ofVec3f(src.x, src.y, src.z); + vector Vec3::toOf(vector & src){ + vector retVal; + for(auto itm : src){ + retVal.push_back(itm.toOf()); + } + return retVal; } - - vector toOf(vector & src){ - vector dst; - for(auto v : src){ - dst.push_back(ofVec3f(v.x, v.y, v.z)); + + vector Vec3::fromOf(vector & src){ + vector retVal; + for(auto itm : src){ + retVal.push_back(Vec3(itm)); } - return dst; + return retVal; } #else - // TODO: The same for glm::vec2 + // TODO: Vec3::Vec3(glm::vec3 & src){...} #endif void Vec3::operator=(const Vec3 & other){ @@ -47,35 +49,76 @@ void Vec3::operator=(const Vec3 & other){ z = other.z; } -void Vec3::operator=(const ofVec3f & other){ - x = other.x; - y = other.y; - z = other.z; +void Vec3::operator+=(const Vec3 & other){ + x += other.x; + y += other.y; + z += other.z; } -Vec3 Vec3::operator+(Vec3 & other){ - return Vec3( - x + other.x, - y + other.y, - z + other.z); +void Vec3::operator*=(const Vec3 & other){ + x *= other.x; + y *= other.y; + z *= other.z; +} + +void Vec3::operator*=(float n){ + x *= n; + y *= n; + z *= n; +} + +void Vec3::operator/=(const Vec3 & other){ + x /= other.x; + y /= other.y; + z /= other.z; +} + +void Vec3::operator/=(float n){ + x /= n; + y /= n; + z /= n; +} + +Vec3 Vec3::operator+(const Vec3 & other){ + return Vec3(x + other.x, y + other.y, z + other.z); } Vec3 Vec3::operator-(){ return Vec3(-x, -y, -z); } -Vec3 Vec3::operator-(Vec3 & other){ - return Vec3( - x - other.x, - y - other.y, - z - other.z); +Vec3 Vec3::operator-(const Vec3 & other){ + return Vec3(x - other.x, y - other.y, z - other.z); +} + +Vec3 Vec3::operator*(const Vec3 & other){ + return Vec3(x * other.x, y * other.y, z * other.z); +} + +Vec3 Vec3::operator*(float n){ + return Vec3(x * n, y * n, z * n); +} + +Vec3 Vec3::operator/(const Vec3 & other){ + return Vec3(x / other.x, y / other.y, z / other.z); +} + +Vec3 Vec3::operator/(float n){ + return Vec3(x / n, y / n, z / n); } -bool Vec3::operator!=(Vec3 & other){ +bool Vec3::operator==(const Vec3 & other){ if(x == other.x && y == other.y && z == other.z){ - return false; + return true; + } + return false; +} + +bool Vec3::operator!=(const Vec3 & other){ + if(x != other.x && y != other.y && z != other.z){ + return true; } - return true; + return false; } } // namespace piMapper diff --git a/src/Types/Vec3.h b/src/Types/Vec3.h index f9fcda6..c9df2d7 100644 --- a/src/Types/Vec3.h +++ b/src/Types/Vec3.h @@ -1,9 +1,9 @@ #pragma once #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 -#include "ofMain.h" + #include "ofVec3f.h" #else -// TODO: include glm + // TODO: include glm #endif namespace ofx { @@ -12,27 +12,33 @@ namespace piMapper { class Vec3{ public: Vec3(); - Vec3(float $x, float $y, float $z); - + Vec3(float ix, float iy, float iz); + + // TODO: achieve this with templates #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 Vec3(ofVec3f & src); ofVec3f toOf(); - static ofVec3f toOf(Vec3 & src); static vector toOf(vector & src); + static vector fromOf(vector & src); #else - // TODO: The same for glm::vec2 - // static vector toOf(vector & src); + // TODO: Vec3(glm::vec3 & src); #endif void operator=(const Vec3 & other); - void operator=(const ofVec3f & other); - - Vec3 operator+(Vec3 & other); - + void operator+=(const Vec3 & other); + void operator*=(const Vec3 & other); + void operator*=(float n); + void operator/=(const Vec3 & other); + void operator/=(float n); + Vec3 operator+(const Vec3 & other); Vec3 operator-(); - Vec3 operator-(Vec3 & other); - - bool operator!=(Vec3 & other); + Vec3 operator-(const Vec3 & other); + Vec3 operator*(const Vec3 & other); + Vec3 operator*(float n); + Vec3 operator/(const Vec3 & other); + Vec3 operator/(float n); + bool operator==(const Vec3 & other); + bool operator!=(const Vec3 & other); float x; float y; diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index fa0dba1..dfe47dc 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -147,7 +147,7 @@ void ofxPiMapper::togglePause(){ _application.togglePause(); } -void ofxPiMapper::moveSelection(ofx::piMapper::Vec2 by){ +void ofxPiMapper::moveSelection(ofx::piMapper::Vec3 by){ _application.moveSelection(by); } diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index dd5ec43..1b036d1 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -7,6 +7,7 @@ #include "SurfaceType.h" #include "Mode.h" #include "Vec2.h" +#include "Vec3.h" class ofxPiMapper { public: @@ -67,7 +68,7 @@ class ofxPiMapper { void scaleDown(); void togglePauseForSurface(unsigned int i); void togglePause(); - void moveSelection(ofx::piMapper::Vec2 by); + void moveSelection(ofx::piMapper::Vec3 by); void createSurface(ofx::piMapper::SurfaceType type); void eraseSurface(int i); From d917570c76ff26f704bf71dfe5da0abb9d5a48da Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 26 Dec 2017 17:11:49 +0100 Subject: [PATCH 066/103] Update example.xcodeproj --- example/example.xcodeproj/project.pbxproj | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index 6b11447..46b4907 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 010E92E21FEEEE9D0015B02B /* Vec2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 010E92DE1FEEEE8D0015B02B /* Vec2.cpp */; }; + 010E92E31FEEEE9D0015B02B /* Vec3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 010E92E01FEEEE8D0015B02B /* Vec3.cpp */; }; 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE01FE7D53700C35E93 /* Application.cpp */; }; 01815E8D1FE7D59200C35E93 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */; }; 01815E8E1FE7D59200C35E93 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */; }; @@ -150,6 +152,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 010E92DE1FEEEE8D0015B02B /* Vec2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec2.cpp; sourceTree = ""; }; + 010E92DF1FEEEE8D0015B02B /* Vec2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec2.h; sourceTree = ""; }; + 010E92E01FEEEE8D0015B02B /* Vec3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec3.cpp; sourceTree = ""; }; + 010E92E11FEEEE8D0015B02B /* Vec3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec3.h; sourceTree = ""; }; 01815DE01FE7D53700C35E93 /* Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; 01815DE11FE7D53700C35E93 /* Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; @@ -395,6 +401,17 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 010E92DD1FEEEE8D0015B02B /* Types */ = { + isa = PBXGroup; + children = ( + 010E92DE1FEEEE8D0015B02B /* Vec2.cpp */, + 010E92DF1FEEEE8D0015B02B /* Vec2.h */, + 010E92E01FEEEE8D0015B02B /* Vec3.cpp */, + 010E92E11FEEEE8D0015B02B /* Vec3.h */, + ); + path = Types; + sourceTree = ""; + }; 01815DDE1FE7D53700C35E93 /* src */ = { isa = PBXGroup; children = ( @@ -408,6 +425,7 @@ 01815E581FE7D53700C35E93 /* ofxPiMapper.h */, 01815E591FE7D53700C35E93 /* Sources */, 01815E6E1FE7D53700C35E93 /* Surfaces */, + 010E92DD1FEEEE8D0015B02B /* Types */, 01815E801FE7D53700C35E93 /* UserInterface */, 01815E891FE7D53700C35E93 /* Utils */, ); @@ -907,6 +925,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 010E92E21FEEEE9D0015B02B /* Vec2.cpp in Sources */, + 010E92E31FEEEE9D0015B02B /* Vec3.cpp in Sources */, 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */, 01815E8D1FE7D59200C35E93 /* ApplicationBaseMode.cpp in Sources */, 01815E8E1FE7D59200C35E93 /* PresentationMode.cpp in Sources */, From 26326733ccc273747ecc4b7154ca04d9b1db2d9d Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 26 Dec 2017 21:43:59 +0100 Subject: [PATCH 067/103] Make it work with openFrameworks master branch --- example/src/CustomSource.h | 4 +- example/src/main.cpp | 2 +- example/src/ofApp.h | 3 +- example_camera/src/CameraSource.cpp | 2 +- example_camera/src/main.cpp | 2 +- example_gamepad/src/InputHandler.h | 2 +- example_gamepad/src/main.cpp | 2 +- example_shortcuts/src/ofApp.cpp | 2 +- example_simpler/src/CustomSource.h | 4 +- example_simpler/src/main.cpp | 2 +- src/Application/Application.cpp | 8 +- src/Application/Application.h | 10 ++- src/Application/SettingsLoader.cpp | 42 +++++----- src/Application/SettingsLoader.h | 10 +-- src/Commands/AddGridColCmd.h | 4 +- src/Commands/AddGridRowCmd.h | 4 +- src/Commands/ClearSurfacesCmd.h | 2 +- src/Commands/CmdManager.h | 4 +- src/Commands/DeselectTexCoordCmd.cpp | 2 +- src/Commands/MvAllTexCoordsCmd.h | 2 +- src/Commands/RmGridColCmd.h | 4 +- src/Commands/RmGridRowCmd.h | 4 +- src/Commands/SetNextSourceCmd.cpp | 2 +- src/Commands/SetNextSourceCmd.h | 4 +- src/Commands/SetSourceCmd.cpp | 2 +- src/Commands/SetSourceCmd.h | 6 +- src/Commands/StartDragSurfaceCmd.h | 2 +- src/Gui/Widgets/LayerPanelWidget.cpp | 2 +- src/Gui/Widgets/ProjectionEditorWidget.cpp | 10 +-- src/Gui/Widgets/ProjectionEditorWidget.h | 6 +- src/Gui/Widgets/ScaleWidget.cpp | 19 ++++- src/Gui/Widgets/SourcesEditorWidget.cpp | 40 +++++----- src/Gui/Widgets/SourcesEditorWidget.h | 38 ++++----- src/Gui/Widgets/TextureEditorWidget.cpp | 10 +-- src/Gui/Widgets/TextureEditorWidget.h | 4 +- src/Gui/Widgets/TextureHighlightWidget.h | 2 +- src/Info/Info.cpp | 2 +- src/Info/Info.h | 4 +- src/MediaServer/DirectoryWatcher.cpp | 13 ++-- src/MediaServer/DirectoryWatcher.h | 9 +-- src/MediaServer/MediaServer.cpp | 90 +++++++++++----------- src/MediaServer/MediaServer.h | 68 ++++++++-------- src/Sources/BaseSource.cpp | 14 ++-- src/Sources/BaseSource.h | 10 +-- src/Sources/ImageSource.cpp | 2 +- src/Sources/ImageSource.h | 4 +- src/Sources/OMXPlayerCache.cpp | 4 +- src/Sources/OMXPlayerCache.h | 6 +- src/Sources/SourceTypeHelper.h | 8 +- src/Sources/VideoSource.cpp | 2 +- src/Sources/VideoSource.h | 4 +- src/Sources/magSlideShowSource.cpp | 28 +++---- src/Sources/magSlideShowSource.h | 7 +- src/Sources/magSlideTransition.h | 2 +- src/Sources/magSlideTransitionFactory.h | 2 +- src/Surfaces/BaseSurface.cpp | 2 +- src/Surfaces/BaseSurface.h | 10 +-- src/Surfaces/CircleSurface.h | 12 +-- src/Surfaces/GridWarpSurface.cpp | 21 ++--- src/Surfaces/GridWarpSurface.h | 8 +- src/Surfaces/HexagonSurface.cpp | 26 +++---- src/Surfaces/HexagonSurface.h | 12 +-- src/Surfaces/QuadSurface.cpp | 20 ++--- src/Surfaces/QuadSurface.h | 8 +- src/Surfaces/SurfaceFactory.cpp | 8 +- src/Surfaces/SurfaceManager.cpp | 8 +- src/Surfaces/SurfaceManager.h | 10 +-- src/Surfaces/SurfaceStack.cpp | 2 +- src/Surfaces/SurfaceStack.h | 8 +- src/Surfaces/TriangleSurface.cpp | 20 ++--- src/Surfaces/TriangleSurface.h | 8 +- src/Types/Vec2.cpp | 44 +++++++++-- src/Types/Vec2.h | 13 +++- src/Types/Vec3.cpp | 34 ++++++-- src/Types/Vec3.h | 13 +++- src/UserInterface/RadioList.cpp | 22 +++--- src/UserInterface/RadioList.h | 26 +++---- src/ofxPiMapper.cpp | 8 +- src/ofxPiMapper.h | 6 +- 79 files changed, 484 insertions(+), 412 deletions(-) diff --git a/example/src/CustomSource.h b/example/src/CustomSource.h index 9a3ce04..a473d73 100644 --- a/example/src/CustomSource.h +++ b/example/src/CustomSource.h @@ -9,6 +9,6 @@ class CustomSource : public ofx::piMapper::FboSource { void update(); void draw(); - vector rects; - vector rectSpeeds; + std::vector rects; + std::vector rectSpeeds; }; \ No newline at end of file diff --git a/example/src/main.cpp b/example/src/main.cpp index 2c8ec5b..64e63d1 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -7,7 +7,7 @@ int main(int argc, char * argv[]){ bool fullscreen = false; - vector arguments = vector(argv, argv + argc); + std::vector arguments = std::vector(argv, argv + argc); for(int i = 0; i < arguments.size(); ++i){ if(arguments.at(i) == "-f"){ fullscreen = true; diff --git a/example/src/ofApp.h b/example/src/ofApp.h index 5718af7..aa07e98 100644 --- a/example/src/ofApp.h +++ b/example/src/ofApp.h @@ -8,8 +8,7 @@ #include "VideoSource.h" #include "magSlideShowSource.h" -class ofApp : public ofBaseApp -{ +class ofApp : public ofBaseApp{ public: void setup(); void update(); diff --git a/example_camera/src/CameraSource.cpp b/example_camera/src/CameraSource.cpp index 29f64e3..2513475 100644 --- a/example_camera/src/CameraSource.cpp +++ b/example_camera/src/CameraSource.cpp @@ -15,7 +15,7 @@ CameraSource::CameraSource(){ _videoGrabber.setup(_omxCameraSettings); #else - vector devices = _videoGrabber.listDevices(); + std::vector devices = _videoGrabber.listDevices(); _cameraFound = false; for(int i = 0; i < devices.size(); i++){ diff --git a/example_camera/src/main.cpp b/example_camera/src/main.cpp index d1b6467..602382f 100644 --- a/example_camera/src/main.cpp +++ b/example_camera/src/main.cpp @@ -6,7 +6,7 @@ int main(int argc, char * argv[]){ bool fullscreen = false; - vector arguments = vector(argv, argv + argc); + std::vector arguments = std::vector(argv, argv + argc); for(int i = 0; i < arguments.size(); ++i){ if(arguments.at(i) == "-f"){ fullscreen = true; diff --git a/example_gamepad/src/InputHandler.h b/example_gamepad/src/InputHandler.h index 9b7ff15..949a64d 100644 --- a/example_gamepad/src/InputHandler.h +++ b/example_gamepad/src/InputHandler.h @@ -1,6 +1,6 @@ #pragma once -// These are the strings reported by SDL2's SDL_JoystickGetGUIDString: +// These are the std::strings reported by SDL2's SDL_JoystickGetGUIDString: // https://wiki.libsdl.org/SDL_JoystickGetGUIDString #include diff --git a/example_gamepad/src/main.cpp b/example_gamepad/src/main.cpp index d1b6467..602382f 100644 --- a/example_gamepad/src/main.cpp +++ b/example_gamepad/src/main.cpp @@ -6,7 +6,7 @@ int main(int argc, char * argv[]){ bool fullscreen = false; - vector arguments = vector(argv, argv + argc); + std::vector arguments = std::vector(argv, argv + argc); for(int i = 0; i < arguments.size(); ++i){ if(arguments.at(i) == "-f"){ fullscreen = true; diff --git a/example_shortcuts/src/ofApp.cpp b/example_shortcuts/src/ofApp.cpp index 6d3155e..c696003 100644 --- a/example_shortcuts/src/ofApp.cpp +++ b/example_shortcuts/src/ofApp.cpp @@ -73,7 +73,7 @@ void ofApp::keyPressed(int key){ }else if(key == '\\'){ mapper.togglePause(); }else if(key == 'n'){ - string multilineInfoText = + std::string multilineInfoText = "Custom ofxPiMapper shortcuts\n\n" "Good day user.\n" "Shortcuts have been customized.\n" diff --git a/example_simpler/src/CustomSource.h b/example_simpler/src/CustomSource.h index 9a3ce04..a473d73 100644 --- a/example_simpler/src/CustomSource.h +++ b/example_simpler/src/CustomSource.h @@ -9,6 +9,6 @@ class CustomSource : public ofx::piMapper::FboSource { void update(); void draw(); - vector rects; - vector rectSpeeds; + std::vector rects; + std::vector rectSpeeds; }; \ No newline at end of file diff --git a/example_simpler/src/main.cpp b/example_simpler/src/main.cpp index e5733f9..764dcff 100644 --- a/example_simpler/src/main.cpp +++ b/example_simpler/src/main.cpp @@ -7,7 +7,7 @@ int main(int argc, char * argv[]){ bool fullscreen = false; - vector arguments = vector(argv, argv + argc); + std::vector arguments = std::vector(argv, argv + argc); for(int i = 0; i < arguments.size(); ++i){ if(arguments.at(i) == "-f"){ fullscreen = true; diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index 12569a1..bdc0a77 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -199,7 +199,7 @@ void Application::eraseSurface(int i){ } } -void Application::setInfoText(string text){ +void Application::setInfoText(std::string text){ _info.setText(text); } @@ -265,13 +265,13 @@ void Application::shutdown(){ #endif } -bool Application::loadXmlSettings(string fileName){ +bool Application::loadXmlSettings(std::string fileName){ if(!ofFile::doesFileExist(fileName)){ ofLogError("Application::loadXmlSettings()") << fileName << " does not exist"; return false; } if(!_surfaceManager.loadXmlSettings(fileName)){ - ofLogError("Application::loadXmlSettings()") << "Failed to load " << fileName << endl; + ofLogError("Application::loadXmlSettings()") << "Failed to load " << fileName << std::endl; return false; } return true; @@ -464,7 +464,7 @@ void Application::setNextSource(){ } } -void Application::setFboSource(string sourceId){ +void Application::setFboSource(std::string sourceId){ if(getSurfaceManager()->getSelectedSurface() != 0){ getCmdManager()->exec( new SetSourceCmd( diff --git a/src/Application/Application.h b/src/Application/Application.h index b3cfc0f..fd89275 100644 --- a/src/Application/Application.h +++ b/src/Application/Application.h @@ -1,5 +1,7 @@ #pragma once +#include + // OpenFrameworks components #include "ofEvents.h" #include "ofLog.h" @@ -87,11 +89,11 @@ class Application { void addFboSource(FboSource * fboSource); void createSurface(SurfaceType type); void eraseSurface(int i); - void setInfoText(string text); + void setInfoText(std::string text); void toggleInfo(); void togglePerspective(); void saveProject(); - bool loadXmlSettings(string fileName); + bool loadXmlSettings(std::string fileName); bool isShiftKeyDown(); @@ -126,7 +128,7 @@ class Application { void scaleDown(); void duplicateSurface(); void setNextSource(); - void setFboSource(string sourceId); + void setFboSource(std::string sourceId); void addGridRow(); void addGridColumn(); void removeGridRow(); @@ -164,7 +166,7 @@ class Application { float _lastSaveTime; float _autoSaveInterval; - string _keySequence; + std::string _keySequence; }; diff --git a/src/Application/SettingsLoader.cpp b/src/Application/SettingsLoader.cpp index c916555..4937709 100644 --- a/src/Application/SettingsLoader.cpp +++ b/src/Application/SettingsLoader.cpp @@ -19,11 +19,11 @@ SettingsLoader::SettingsLoader(){ bool SettingsLoader::load( SurfaceManager & surfaceManager, MediaServer & mediaServer, - string fileName){ + std::string fileName){ ofxXmlSettings * xmlSettings = new ofxXmlSettings(); - string sourceType = ""; - string sourceName = ""; + std::string sourceType = ""; + std::string sourceName = ""; BaseSource * source = 0; @@ -38,7 +38,7 @@ bool SettingsLoader::load( // Count tags. unsigned int numPresets = xmlSettings->getNumTags("surfaces"); - cout << "numPresets: " << numPresets << endl; + std::cout << "numPresets: " << numPresets << std::endl; // Clear previous presets and surfaces first. surfaceManager.clearPresets(); @@ -79,10 +79,10 @@ bool SettingsLoader::load( }else{ // Construct full path - string dir = mediaServer.getDefaultMediaDir(typeEnum); - stringstream pathss; + std::string dir = mediaServer.getDefaultMediaDir(typeEnum); + std::stringstream pathss; pathss << ofToDataPath(dir, true) << sourceName; - string sourcePath = pathss.str(); + std::string sourcePath = pathss.str(); // Load media by using full path source = mediaServer.loadMedia(sourcePath, typeEnum); @@ -157,7 +157,7 @@ bool SettingsLoader::load( } // TODO: Save all presets, not just the active one. -bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ +bool SettingsLoader::save(SurfaceManager & surfaceManager, std::string fileName){ ofxXmlSettings * xmlSettings = new ofxXmlSettings(); @@ -178,7 +178,7 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->pushTag("surface", i); xmlSettings->addTag("vertices"); xmlSettings->pushTag("vertices"); - vector vertices = surface->getVertices(); + std::vector vertices = surface->getVertices(); for(int j = 0; j < vertices.size(); j++){ xmlSettings->addTag("vertex"); xmlSettings->pushTag("vertex", j); @@ -194,7 +194,7 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->addTag("texCoords"); xmlSettings->pushTag("texCoords"); - vector texCoords = surface->getTexCoords(); + std::vector texCoords = surface->getTexCoords(); for(int j = 0; j < texCoords.size(); j++){ xmlSettings->addTag("texCoord"); xmlSettings->pushTag("texCoord", j); @@ -207,10 +207,10 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->addTag("source"); xmlSettings->pushTag("source"); - string sourceTypeName = SourceTypeHelper::GetSourceTypeHelperName(surface->getSource()->getType()); + std::string sourceTypeName = SourceTypeHelper::GetSourceTypeHelperName(surface->getSource()->getType()); xmlSettings->addValue("source-type", sourceTypeName); - string sourceName = surface->getSource()->getName(); + std::string sourceName = surface->getSource()->getName(); xmlSettings->addValue("source-name", (sourceName == "") ? "none" : sourceName); xmlSettings->popTag(); // source @@ -245,14 +245,14 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, string fileName){ xmlSettings->save(fileName); } -bool SettingsLoader::create(string fileName){ +bool SettingsLoader::create(std::string fileName){ ofxXmlSettings xml; xml.addTag("surfaces"); return xml.save(fileName); } BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + std::vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -287,7 +287,7 @@ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + std::vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); @@ -327,7 +327,7 @@ BaseSurface * SettingsLoader::getTriangleSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + std::vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -371,7 +371,7 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + std::vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); @@ -429,7 +429,7 @@ BaseSurface * SettingsLoader::getQuadSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + std::vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -449,7 +449,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + std::vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); @@ -492,7 +492,7 @@ BaseSurface * SettingsLoader::getGridWarpSurface(ofxXmlSettings * xmlSettings){ } BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ - vector vertices; + std::vector vertices; if(xmlSettings->tagExists("vertices")){ xmlSettings->pushTag("vertices"); @@ -511,7 +511,7 @@ BaseSurface * SettingsLoader::getHexagonSurface(ofxXmlSettings * xmlSettings){ xmlSettings->popTag(); // vertices } - vector texCoords; + std::vector texCoords; if(xmlSettings->tagExists("texCoords")){ xmlSettings->pushTag("texCoords"); diff --git a/src/Application/SettingsLoader.h b/src/Application/SettingsLoader.h index fab1626..3e1f2e6 100644 --- a/src/Application/SettingsLoader.h +++ b/src/Application/SettingsLoader.h @@ -20,11 +20,11 @@ class SettingsLoader { public: static SettingsLoader * instance(); - bool load(SurfaceManager & surfaceManager, MediaServer & mediaServer, string fileName); - bool save(SurfaceManager & surfaceManager, string fileName); - bool create(string fileName); + bool load(SurfaceManager & surfaceManager, MediaServer & mediaServer, std::string fileName); + bool save(SurfaceManager & surfaceManager, std::string fileName); + bool create(std::string fileName); - string getLastLoadedFilename(){ return _lastLoadedFilename; }; + std::string getLastLoadedFilename(){ return _lastLoadedFilename; }; private: static SettingsLoader * _instance; @@ -36,7 +36,7 @@ class SettingsLoader { BaseSurface * getGridWarpSurface(ofxXmlSettings * xmlSettings); BaseSurface * getHexagonSurface(ofxXmlSettings * xmlSettings); - string _lastLoadedFilename; + std::string _lastLoadedFilename; }; } // namespace piMapper diff --git a/src/Commands/AddGridColCmd.h b/src/Commands/AddGridColCmd.h index 0e37ad8..f8a6b84 100644 --- a/src/Commands/AddGridColCmd.h +++ b/src/Commands/AddGridColCmd.h @@ -20,8 +20,8 @@ class AddGridColCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; - vector _texCoords; + std::vector _vertices; + std::vector _texCoords; GridWarpSurface * _surface; }; diff --git a/src/Commands/AddGridRowCmd.h b/src/Commands/AddGridRowCmd.h index 6b324ce..0cc3c10 100644 --- a/src/Commands/AddGridRowCmd.h +++ b/src/Commands/AddGridRowCmd.h @@ -20,8 +20,8 @@ class AddGridRowCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; - vector _texCoords; + std::vector _vertices; + std::vector _texCoords; GridWarpSurface * _surface; }; diff --git a/src/Commands/ClearSurfacesCmd.h b/src/Commands/ClearSurfacesCmd.h index c24f603..a29b119 100644 --- a/src/Commands/ClearSurfacesCmd.h +++ b/src/Commands/ClearSurfacesCmd.h @@ -22,7 +22,7 @@ class ClearSurfacesCmd : public BaseUndoCmd { private: // Here it would make sense to have another instance of SurfaceStack - vector _surfaces; + std::vector _surfaces; SurfaceManager * _surfaceManager; BaseSurface * _selectedSurface; diff --git a/src/Commands/CmdManager.h b/src/Commands/CmdManager.h index a09f7d3..9628c33 100644 --- a/src/Commands/CmdManager.h +++ b/src/Commands/CmdManager.h @@ -14,9 +14,9 @@ class CmdManager { void undo(); private: - vector cmdStack; + std::vector cmdStack; }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/Commands/DeselectTexCoordCmd.cpp b/src/Commands/DeselectTexCoordCmd.cpp index 9e1c8ee..6a12984 100644 --- a/src/Commands/DeselectTexCoordCmd.cpp +++ b/src/Commands/DeselectTexCoordCmd.cpp @@ -11,7 +11,7 @@ void DeselectTexCoordCmd::exec(){ ofLogNotice("DeselectTexCoordCmd", "exec"); _selectedTexCoord = -1; - vector joints = _textureEditor->getJoints(); + std::vector joints = _textureEditor->getJoints(); for(unsigned int i = 0; i < joints.size(); ++i){ if(joints[i]->isSelected()){ _selectedTexCoord = i; diff --git a/src/Commands/MvAllTexCoordsCmd.h b/src/Commands/MvAllTexCoordsCmd.h index 3253f09..b6601e5 100644 --- a/src/Commands/MvAllTexCoordsCmd.h +++ b/src/Commands/MvAllTexCoordsCmd.h @@ -20,7 +20,7 @@ class MvAllTexCoordsCmd : public BaseUndoCmd { void undo(); private: - vector _texCoords; + std::vector _texCoords; BaseSurface * _surface; TextureEditorWidget * _texEditor; diff --git a/src/Commands/RmGridColCmd.h b/src/Commands/RmGridColCmd.h index f79a46b..ced88d6 100644 --- a/src/Commands/RmGridColCmd.h +++ b/src/Commands/RmGridColCmd.h @@ -20,8 +20,8 @@ class RmGridColCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; - vector _texCoords; + std::vector _vertices; + std::vector _texCoords; GridWarpSurface * _surface; bool _doNotUndo; diff --git a/src/Commands/RmGridRowCmd.h b/src/Commands/RmGridRowCmd.h index c1973e0..32d2c3e 100644 --- a/src/Commands/RmGridRowCmd.h +++ b/src/Commands/RmGridRowCmd.h @@ -20,8 +20,8 @@ class RmGridRowCmd : public BaseUndoCmd { void undo(); private: - vector _vertices; - vector _texCoords; + std::vector _vertices; + std::vector _texCoords; GridWarpSurface * _surface; bool _doNotUndo; diff --git a/src/Commands/SetNextSourceCmd.cpp b/src/Commands/SetNextSourceCmd.cpp index d55d5d7..775bcc3 100644 --- a/src/Commands/SetNextSourceCmd.cpp +++ b/src/Commands/SetNextSourceCmd.cpp @@ -15,7 +15,7 @@ void SetNextSourceCmd::exec(){ BaseSource * source = _surface->getSource(); int sourceType = source->getType(); - string sourceId; + std::string sourceId; if(source->isLoadable()){ sourceId = source->getPath(); }else{ diff --git a/src/Commands/SetNextSourceCmd.h b/src/Commands/SetNextSourceCmd.h index f31c028..b0dada9 100644 --- a/src/Commands/SetNextSourceCmd.h +++ b/src/Commands/SetNextSourceCmd.h @@ -11,7 +11,7 @@ namespace piMapper { struct SourceData { int type; - string id; + std::string id; }; class SourcesEditorWidget; @@ -26,7 +26,7 @@ class SetNextSourceCmd : public BaseUndoCmd { private: BaseSurface * _surface; SourcesEditorWidget * _sourcesEditor; - vector _sources; + std::vector _sources; int _sourceIndex; // Previous source index int _nextSourceIndex; diff --git a/src/Commands/SetSourceCmd.cpp b/src/Commands/SetSourceCmd.cpp index 984155b..9871a31 100644 --- a/src/Commands/SetSourceCmd.cpp +++ b/src/Commands/SetSourceCmd.cpp @@ -4,7 +4,7 @@ namespace ofx { namespace piMapper { SetSourceCmd::SetSourceCmd(int sourceType, - string sourceId, + std::string sourceId, BaseSurface * surface, SourcesEditorWidget * sourcesEditor){ diff --git a/src/Commands/SetSourceCmd.h b/src/Commands/SetSourceCmd.h index ac639c8..fb818fe 100644 --- a/src/Commands/SetSourceCmd.h +++ b/src/Commands/SetSourceCmd.h @@ -17,7 +17,7 @@ class SetSourceCmd : public BaseUndoCmd { public: SetSourceCmd(int sourceType, - string sourceId, + std::string sourceId, BaseSurface * surface, SourcesEditorWidget * sourcesEditor); void exec(); @@ -25,12 +25,12 @@ class SetSourceCmd : public BaseUndoCmd { private: int _sourceType; - string _sourceId; + std::string _sourceId; BaseSurface * _surface; SourcesEditorWidget * _sourcesEditor; int _oldSourceTypeHelper; - string _oldSourceId; + std::string _oldSourceId; }; diff --git a/src/Commands/StartDragSurfaceCmd.h b/src/Commands/StartDragSurfaceCmd.h index e28b878..e46ddda 100644 --- a/src/Commands/StartDragSurfaceCmd.h +++ b/src/Commands/StartDragSurfaceCmd.h @@ -16,7 +16,7 @@ class StartDragSurfaceCmd : public BaseUndoCmd { private: BaseSurface * _surface; - vector _previousVertices; + std::vector _previousVertices; }; diff --git a/src/Gui/Widgets/LayerPanelWidget.cpp b/src/Gui/Widgets/LayerPanelWidget.cpp index f9cb2ec..bb59b78 100644 --- a/src/Gui/Widgets/LayerPanelWidget.cpp +++ b/src/Gui/Widgets/LayerPanelWidget.cpp @@ -35,7 +35,7 @@ void LayerPanelWidget::draw(){ int layerIconX = ofGetWidth() - offsetRight - layerIconWidth; int layerIconY = offsetTop + ((layerIconHeight + verticalSpacing) * (numSurfaces - i - 1)); - string label = "Layers"; + std::string label = "Layers"; ofDrawBitmapString(label, ofGetWidth() - 66, 30); ofRectangle layerIcon = ofRectangle( diff --git a/src/Gui/Widgets/ProjectionEditorWidget.cpp b/src/Gui/Widgets/ProjectionEditorWidget.cpp index 8d860f7..5693a9a 100644 --- a/src/Gui/Widgets/ProjectionEditorWidget.cpp +++ b/src/Gui/Widgets/ProjectionEditorWidget.cpp @@ -53,7 +53,7 @@ void ProjectionEditorWidget::mouseDragged(ofMouseEventArgs & args){ Vec2 mousePosition = Vec2(args.x, args.y); // Collect all vertices of the projection surfaces - vector allVertices; + std::vector allVertices; for(int i = 0; i < surfaceManager->size(); i++){ BaseSurface * surface = surfaceManager->getSurface(i); @@ -137,7 +137,7 @@ void ProjectionEditorWidget::createJoints(){ return; } - vector vertices = surfaceManager->getSelectedSurface()->getVertices(); + std::vector vertices = surfaceManager->getSelectedSurface()->getVertices(); for(int i = 0; i < vertices.size(); i++){ joints.push_back(new CircleJoint()); @@ -147,7 +147,7 @@ void ProjectionEditorWidget::createJoints(){ void ProjectionEditorWidget::updateJoints(){ if(surfaceManager->getSelectedSurface()){ - vector vertices = surfaceManager->getSelectedSurface()->getVertices(); + std::vector vertices = surfaceManager->getSelectedSurface()->getVertices(); for(int i = 0; i < vertices.size(); i++){ joints[i]->position = Vec2(vertices[i].x, vertices[i].y); @@ -197,7 +197,7 @@ CircleJoint * ProjectionEditorWidget::hitTestJoints(Vec2 pos){ return 0; } -vector * ProjectionEditorWidget::getJoints(){ +std::vector * ProjectionEditorWidget::getJoints(){ return &joints; } @@ -212,7 +212,7 @@ void ProjectionEditorWidget::onVertexChanged(int & i){ } } -void ProjectionEditorWidget::onVerticesChanged(vector & vertices){ +void ProjectionEditorWidget::onVerticesChanged(std::vector & vertices){ createJoints(); } diff --git a/src/Gui/Widgets/ProjectionEditorWidget.h b/src/Gui/Widgets/ProjectionEditorWidget.h index 032c642..58037e9 100644 --- a/src/Gui/Widgets/ProjectionEditorWidget.h +++ b/src/Gui/Widgets/ProjectionEditorWidget.h @@ -29,17 +29,17 @@ class ProjectionEditorWidget { void updateVertices(); void setSnapDistance(float newSnapDistance); CircleJoint * hitTestJoints(Vec2 pos); - vector * getJoints(); + std::vector * getJoints(); void onVertexChanged(int & i); - void onVerticesChanged(vector & vertices); + void onVerticesChanged(std::vector & vertices); void onSurfaceSelected(int & surfaceIndex); void onVertexSelected(int & vertexIndex); void onVertexUnselected(int & vertexIndex); private: SurfaceManager * surfaceManager; - vector joints; + std::vector joints; bool bShiftKeyDown; float fSnapDistance; diff --git a/src/Gui/Widgets/ScaleWidget.cpp b/src/Gui/Widgets/ScaleWidget.cpp index 2c1367e..a4e192f 100644 --- a/src/Gui/Widgets/ScaleWidget.cpp +++ b/src/Gui/Widgets/ScaleWidget.cpp @@ -1,4 +1,5 @@ #include "ScaleWidget.h" +#include "glm/geometric.hpp" namespace ofx { namespace piMapper { @@ -57,7 +58,11 @@ void ScaleWidget::draw(){ _line[1].y -= dy; // Continue - float scale = lineLength / _line[0].distance(_line[1]); + #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 + float scale = lineLength / _line[0].distance(_line[1]); + #else + float scale = lineLength / glm::distance(_line[0], _line[1]); + #endif _line[1].x = _line[0].x + (_line[1].x - _line[0].x) * scale; _line[1].y = _line[0].y + (_line[1].y - _line[0].y) * scale; @@ -128,9 +133,15 @@ void ScaleWidget::onMouseDragged(ofMouseEventArgs & args){ newLine[1].x = args.x; newLine[1].y = args.y; - _scale = _surfaceManager->getSelectedSurface()->getScale() / - _line[0].distance(_line[1]) * - newLine[0].distance(newLine[1]); + #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 + _scale = _surfaceManager->getSelectedSurface()->getScale() / + _line[0].distance(_line[1]) * + newLine[0].distance(newLine[1]); + #else + _scale = _surfaceManager->getSelectedSurface()->getScale() / + glm::distance(_line[0], _line[1]) * + glm::distance(newLine[0], newLine[1]); + #endif _line = newLine; diff --git a/src/Gui/Widgets/SourcesEditorWidget.cpp b/src/Gui/Widgets/SourcesEditorWidget.cpp index 5dd7517..7af2134 100644 --- a/src/Gui/Widgets/SourcesEditorWidget.cpp +++ b/src/Gui/Widgets/SourcesEditorWidget.cpp @@ -23,17 +23,17 @@ void SourcesEditorWidget::createSelectors(){ // Depending on media count, decide what to load and initialize if(numImages){ // Get image names from media server - vector imageNames = mediaServer->getImageNames(); + std::vector imageNames = mediaServer->getImageNames(); imageSelector->setup("Images", imageNames, mediaServer->getImagePaths()); ofAddListener(imageSelector->onRadioSelected, this, &SourcesEditorWidget::handleImageSelected); } if(numVideos){ - vector videoNames = mediaServer->getVideoNames(); + std::vector videoNames = mediaServer->getVideoNames(); videoSelector->setup("Videos", videoNames, mediaServer->getVideoPaths()); ofAddListener(videoSelector->onRadioSelected, this, &SourcesEditorWidget::handleVideoSelected); } if(numFbos){ - vector fboNames = mediaServer->getFboSourceNames(); + std::vector fboNames = mediaServer->getFboSourceNames(); fboSelector->setup("FBOs", fboNames, fboNames); ofAddListener(fboSelector->onRadioSelected, this, &SourcesEditorWidget::handleFboSelected); } @@ -135,7 +135,7 @@ MediaServer * SourcesEditorWidget::getMediaServer(){ return mediaServer; } -void SourcesEditorWidget::selectSourceRadioButton(string & sourcePath){ +void SourcesEditorWidget::selectSourceRadioButton(std::string & sourcePath){ if(sourcePath == ""){ ofLogNotice("SourcesEditorWidget") << "Path is empty"; if(imageSelector->size()){ @@ -210,14 +210,14 @@ void SourcesEditorWidget::removeMediaServerListeners(){ ofRemoveListener(mediaServer->onFboSourceUnloaded, this, &SourcesEditorWidget::handleFboSourceUnloaded); } -void SourcesEditorWidget::handleImageSelected(string & imagePath){ +void SourcesEditorWidget::handleImageSelected(std::string & imagePath){ _cmdManager->exec(new SetSourceCmd(SourceType::SOURCE_TYPE_IMAGE, imagePath, surfaceManager->getSelectedSurface(), (SourcesEditorWidget *)this)); } -void SourcesEditorWidget::setImageSource(string & imagePath){ +void SourcesEditorWidget::setImageSource(std::string & imagePath){ // Unselect selected items videoSelector->unselectAll(); fboSelector->unselectAll(); @@ -240,14 +240,14 @@ void SourcesEditorWidget::setImageSource(string & imagePath){ surface->setSource(mediaServer->loadImage(imagePath)); } -void SourcesEditorWidget::handleVideoSelected(string & videoPath){ +void SourcesEditorWidget::handleVideoSelected(std::string & videoPath){ _cmdManager->exec(new SetSourceCmd(SourceType::SOURCE_TYPE_VIDEO, videoPath, surfaceManager->getSelectedSurface(), (SourcesEditorWidget *)this)); } -void SourcesEditorWidget::setVideoSource(string & videoPath){ +void SourcesEditorWidget::setVideoSource(std::string & videoPath){ // Unselect any selected items fboSelector->unselectAll(); imageSelector->unselectAll(); @@ -270,14 +270,14 @@ void SourcesEditorWidget::setVideoSource(string & videoPath){ surface->setSource(mediaServer->loadVideo(videoPath)); } -void SourcesEditorWidget::handleFboSelected(string & fboName){ +void SourcesEditorWidget::handleFboSelected(std::string & fboName){ _cmdManager->exec(new SetSourceCmd(SourceType::SOURCE_TYPE_FBO, fboName, surfaceManager->getSelectedSurface(), (SourcesEditorWidget *)this)); } -void SourcesEditorWidget::setFboSource(string & fboName){ +void SourcesEditorWidget::setFboSource(std::string & fboName){ videoSelector->unselectAll(); imageSelector->unselectAll(); @@ -325,21 +325,21 @@ void SourcesEditorWidget::clearMediaServer(){ } // TODO: There is no need for those at the moment. They add too much overhead. -void SourcesEditorWidget::handleImageAdded(string & path){ +void SourcesEditorWidget::handleImageAdded(std::string & path){ ofLogNotice("SourcesEditorWidget::handleImageAdded") << "Image path: " << path; } -void SourcesEditorWidget::handleImageRemoved(string & path){} -void SourcesEditorWidget::handleVideoAdded(string & path){} -void SourcesEditorWidget::handleVideoRemoved(string & path){} -void SourcesEditorWidget::handleImageLoaded(string & path){} -void SourcesEditorWidget::handleImageUnloaded(string & path){} -void SourcesEditorWidget::handleFboSourceAdded(string & name){} -void SourcesEditorWidget::handleFboSourceRemoved(string & name){} -void SourcesEditorWidget::handleFboSourceLoaded(string & name){} -void SourcesEditorWidget::handleFboSourceUnloaded(string & name){} +void SourcesEditorWidget::handleImageRemoved(std::string & path){} +void SourcesEditorWidget::handleVideoAdded(std::string & path){} +void SourcesEditorWidget::handleVideoRemoved(std::string & path){} +void SourcesEditorWidget::handleImageLoaded(std::string & path){} +void SourcesEditorWidget::handleImageUnloaded(std::string & path){} +void SourcesEditorWidget::handleFboSourceAdded(std::string & name){} +void SourcesEditorWidget::handleFboSourceRemoved(std::string & name){} +void SourcesEditorWidget::handleFboSourceLoaded(std::string & name){} +void SourcesEditorWidget::handleFboSourceUnloaded(std::string & name){} } // namespace piMapper } // namespace ofx \ No newline at end of file diff --git a/src/Gui/Widgets/SourcesEditorWidget.h b/src/Gui/Widgets/SourcesEditorWidget.h index b5dbaea..59c6278 100644 --- a/src/Gui/Widgets/SourcesEditorWidget.h +++ b/src/Gui/Widgets/SourcesEditorWidget.h @@ -17,7 +17,7 @@ class SourcesEditorWidget { void setup(); void draw(); - void loadImage(string name, string path); + void loadImage(std::string name, std::string path); void disable(); void enable(); void setSurfaceManager(SurfaceManager * newSurfaceManager); @@ -26,15 +26,15 @@ class SourcesEditorWidget { // Sets external MediaServer void setMediaServer(MediaServer * newMediaServer); MediaServer * getMediaServer(); - //void selectImageSourceRadioButton(string name); - void selectSourceRadioButton(string & sourcePath); + //void selectImageSourceRadioButton(std::string name); + void selectSourceRadioButton(std::string & sourcePath); int getLoadedTexCount(); ofTexture * getTexture(int index); - void setImageSource(string & imagePath); - void setVideoSource(string & videoPath); - void setFboSource(string & fboName); + void setImageSource(std::string & imagePath); + void setVideoSource(std::string & videoPath); + void setFboSource(std::string & fboName); void clearSource(); private: @@ -53,25 +53,25 @@ class SourcesEditorWidget { void removeMediaServerListeners(); // Handles GUI event, whenever someone has clicked on a radio button - void handleImageSelected(string & imagePath); - void handleVideoSelected(string & videoPath); - void handleFboSelected(string & fboName); + void handleImageSelected(std::string & imagePath); + void handleVideoSelected(std::string & videoPath); + void handleFboSelected(std::string & fboName); // Careful clearing of the media server, // clears only if the media server has been initialized locally void clearMediaServer(); // MediaServer event handlers - void handleImageAdded(string & path); - void handleImageRemoved(string & path); - void handleVideoAdded(string & path); - void handleVideoRemoved(string & path); - void handleImageLoaded(string & path); - void handleImageUnloaded(string & path); - void handleFboSourceAdded(string & name); - void handleFboSourceRemoved(string & name); - void handleFboSourceLoaded(string & name); - void handleFboSourceUnloaded(string & name); + void handleImageAdded(std::string & path); + void handleImageRemoved(std::string & path); + void handleVideoAdded(std::string & path); + void handleVideoRemoved(std::string & path); + void handleImageLoaded(std::string & path); + void handleImageUnloaded(std::string & path); + void handleFboSourceAdded(std::string & name); + void handleFboSourceRemoved(std::string & name); + void handleFboSourceLoaded(std::string & name); + void handleFboSourceUnloaded(std::string & name); }; diff --git a/src/Gui/Widgets/TextureEditorWidget.cpp b/src/Gui/Widgets/TextureEditorWidget.cpp index d4da08e..b84d7fc 100644 --- a/src/Gui/Widgets/TextureEditorWidget.cpp +++ b/src/Gui/Widgets/TextureEditorWidget.cpp @@ -44,7 +44,7 @@ void TextureEditorWidget::update(){ if(surface->getType() == SurfaceType::GRID_WARP_SURFACE){ GridWarpSurface * s = (GridWarpSurface *)surface; - vector texCoords = surface->getTexCoords(); + std::vector texCoords = surface->getTexCoords(); Vec2 textureSize = Vec2( surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); @@ -134,7 +134,7 @@ void TextureEditorWidget::createJoints(){ } clearJoints(); - vector texCoords = surface->getTexCoords(); + std::vector texCoords = surface->getTexCoords(); if(surface->getSource()->getTexture()->isAllocated()){ _pollCreateJoints = false; @@ -148,7 +148,7 @@ void TextureEditorWidget::createJoints(){ surface->getSource()->getTexture()->getHeight()); // Select joints depending on the surface type - vector tc; + std::vector tc; if(surface->getType() == SurfaceType::TRIANGLE_SURFACE){ tc = texCoords; @@ -282,7 +282,7 @@ void TextureEditorWidget::moveTexCoords(Vec2 by){ return; } - vector texCoords = surface->getTexCoords(); + std::vector texCoords = surface->getTexCoords(); Vec2 textureSize = Vec2( surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); @@ -407,7 +407,7 @@ CircleJoint * TextureEditorWidget::hitTestJoints(Vec2 pos){ return 0; } -vector & TextureEditorWidget::getJoints(){ +std::vector & TextureEditorWidget::getJoints(){ return joints; } diff --git a/src/Gui/Widgets/TextureEditorWidget.h b/src/Gui/Widgets/TextureEditorWidget.h index dfb2a6e..6bd3ee5 100644 --- a/src/Gui/Widgets/TextureEditorWidget.h +++ b/src/Gui/Widgets/TextureEditorWidget.h @@ -46,11 +46,11 @@ class TextureEditorWidget : public GuiBaseWidget { void moveSelection(Vec2 by); void constrainJointsToQuad(int selectedJointIndex); CircleJoint * hitTestJoints(Vec2 pos); - vector & getJoints(); + std::vector & getJoints(); private: BaseSurface * surface; - vector joints; + std::vector joints; bool bShiftKeyDown; bool _pollCreateJoints; diff --git a/src/Gui/Widgets/TextureHighlightWidget.h b/src/Gui/Widgets/TextureHighlightWidget.h index 9ea51ae..27353d9 100644 --- a/src/Gui/Widgets/TextureHighlightWidget.h +++ b/src/Gui/Widgets/TextureHighlightWidget.h @@ -27,7 +27,7 @@ class TextureHighlightWidget : public GuiBaseWidget { private: SurfaceManager * _sm; - vector _consumerSurfaces; + std::vector _consumerSurfaces; }; } // namespace piMapper diff --git a/src/Info/Info.cpp b/src/Info/Info.cpp index 7823ee0..82de484 100644 --- a/src/Info/Info.cpp +++ b/src/Info/Info.cpp @@ -51,7 +51,7 @@ void Info::toggle(){ _visible = !_visible; } -void Info::setText(string text){ +void Info::setText(std::string text){ _text = text; } diff --git a/src/Info/Info.h b/src/Info/Info.h index 3fa0dde..adc4616 100644 --- a/src/Info/Info.h +++ b/src/Info/Info.h @@ -11,11 +11,11 @@ class Info { void draw(); void toggle(); - void setText(string text); + void setText(std::string text); private: bool _visible; - string _text; + std::string _text; }; } // namespace piMapper diff --git a/src/MediaServer/DirectoryWatcher.cpp b/src/MediaServer/DirectoryWatcher.cpp index 104abcf..9c55e21 100644 --- a/src/MediaServer/DirectoryWatcher.cpp +++ b/src/MediaServer/DirectoryWatcher.cpp @@ -3,7 +3,7 @@ namespace ofx { namespace piMapper { -DirectoryWatcher::DirectoryWatcher(string path, int watcherMediaType){ +DirectoryWatcher::DirectoryWatcher(std::string path, int watcherMediaType){ directoryPath = path; _mediaType = watcherMediaType; @@ -41,11 +41,12 @@ DirectoryWatcher::DirectoryWatcher(string path, int watcherMediaType){ } DirectoryWatcher::~DirectoryWatcher() { - endWatch(); -// waitForThread(false); + if(isThreadRunning()){ + stopThread(); + } } -vector & DirectoryWatcher::getFilePaths(){ +std::vector & DirectoryWatcher::getFilePaths(){ return _filePaths; } @@ -58,10 +59,6 @@ void DirectoryWatcher::beginWatch(int intervalInMillis) { startThread(); } -void DirectoryWatcher::endWatch() { - stopThread(); -} - void DirectoryWatcher::threadedFunction() { while (isThreadRunning()) { diff --git a/src/MediaServer/DirectoryWatcher.h b/src/MediaServer/DirectoryWatcher.h index 8ef7ede..35ae34b 100644 --- a/src/MediaServer/DirectoryWatcher.h +++ b/src/MediaServer/DirectoryWatcher.h @@ -8,13 +8,12 @@ namespace piMapper { class DirectoryWatcher : public ofThread { public: - DirectoryWatcher(string path, int watcherMediaType); + DirectoryWatcher(std::string path, int watcherMediaType); virtual ~DirectoryWatcher(); - vector &getFilePaths(); + std::vector &getFilePaths(); int getMediaType(); void beginWatch(int intervalInMillis = 5000); - void endWatch(); void threadedFunction(); /** @@ -30,7 +29,7 @@ class DirectoryWatcher : public ofThread { private: ofDirectory _directory; - vector _filePaths; + std::vector _filePaths; std::string directoryPath; int _mediaType; @@ -39,4 +38,4 @@ class DirectoryWatcher : public ofThread { }; } // namespace piMapper -} // namespace ofx \ No newline at end of file +} // namespace ofx diff --git a/src/MediaServer/MediaServer.cpp b/src/MediaServer/MediaServer.cpp index 41b1747..01a6aeb 100644 --- a/src/MediaServer/MediaServer.cpp +++ b/src/MediaServer/MediaServer.cpp @@ -61,47 +61,47 @@ int MediaServer::getNumFboSources(){ return fboSources.size(); } -vector & MediaServer::getImagePaths(){ +std::vector & MediaServer::getImagePaths(){ return imageWatcher.getFilePaths(); } -vector MediaServer::getImageNames(){ - vector imageNames; +std::vector MediaServer::getImageNames(){ + std::vector imageNames; for(int i = 0; i < getNumImages(); i++){ // Split image path - vector pathParts = ofSplitString(getImagePaths()[i], "/"); + std::vector pathParts = ofSplitString(getImagePaths()[i], "/"); // And get only the last piece - string name = pathParts[pathParts.size() - 1]; + std::string name = pathParts[pathParts.size() - 1]; imageNames.push_back(name); } return imageNames; } -vector MediaServer::getFboSourceNames(){ - vector fboSourceNames; +std::vector MediaServer::getFboSourceNames(){ + std::vector fboSourceNames; for(int i = 0; i < fboSources.size(); i++){ fboSourceNames.push_back(fboSources[i]->getName()); } return fboSourceNames; } -vector & MediaServer::getVideoPaths(){ +std::vector & MediaServer::getVideoPaths(){ return videoWatcher.getFilePaths(); } -vector MediaServer::getVideoNames(){ - vector videoNames; +std::vector MediaServer::getVideoNames(){ + std::vector videoNames; for(int i = 0; i < getNumVideos(); i++){ // Split video path - vector pathParts = ofSplitString(getVideoPaths()[i], "/"); + std::vector pathParts = ofSplitString(getVideoPaths()[i], "/"); // And get only the last piece - string name = pathParts[pathParts.size() - 1]; + std::string name = pathParts[pathParts.size() - 1]; videoNames.push_back(name); } return videoNames; } -BaseSource * MediaServer::loadMedia(string & path, int mediaType){ +BaseSource * MediaServer::loadMedia(std::string & path, int mediaType){ // Chose load method depending on type if(mediaType == SourceType::SOURCE_TYPE_IMAGE){ return loadImage(path); @@ -110,7 +110,7 @@ BaseSource * MediaServer::loadMedia(string & path, int mediaType){ }else if(mediaType == SourceType::SOURCE_TYPE_FBO){ return loadFboSource(path); }else{ - stringstream ss; + std::stringstream ss; ss << "Can not load media of unknown type: " << mediaType; ofLogFatalError("MediaServer") << ss.str(); std::exit(EXIT_FAILURE); @@ -118,7 +118,7 @@ BaseSource * MediaServer::loadMedia(string & path, int mediaType){ return 0; } -BaseSource * MediaServer::loadImage(string & path){ +BaseSource * MediaServer::loadImage(std::string & path){ ImageSource * imageSource = 0; // Check if this image is already loaded bool isImageLoaded = false; @@ -131,11 +131,11 @@ BaseSource * MediaServer::loadImage(string & path){ // Increase reference count of this source //referenceCount[path]++; imageSource->referenceCount++; - stringstream refss; + std::stringstream refss; refss << "Current reference count for " << path << " = " << imageSource->referenceCount; ofLogNotice("MediaServer") << refss.str(); // Notify objects registered to onImageLoaded event - stringstream ss; + std::stringstream ss; ss << "Image " << path << " already loaded"; ofLogNotice("MediaServer") << ss.str(); ofNotifyEvent(onImageLoaded, path, this); @@ -147,7 +147,7 @@ BaseSource * MediaServer::loadImage(string & path){ loadedSources[path] = imageSource; // Set reference count of this image path to 1 //referenceCount[path] = 1; - stringstream refss; + std::stringstream refss; refss << "Initialized reference count of " << path << " to " << imageSource->referenceCount; ofLogNotice("MediaServer") << refss.str(); // Notify objects registered to onImageLoaded event @@ -155,7 +155,7 @@ BaseSource * MediaServer::loadImage(string & path){ return imageSource; } -void MediaServer::unloadImage(string & path){ +void MediaServer::unloadImage(std::string & path){ ImageSource * source = static_cast (getSourceByPath(path)); ofLogNotice("MediaServer") << "Unload image, current reference count: " << source->referenceCount; source->referenceCount--; @@ -166,28 +166,28 @@ void MediaServer::unloadImage(string & path){ return; } // Reference count 0 or less, unload image - stringstream ss; + std::stringstream ss; ss << "Removing image " << path; ofLogNotice("MediaServer") << ss.str(); // Destroy image source if(loadedSources.count(path)){ - ofLogNotice("MediaServer") << "Source count BEFORE image removal: " << loadedSources.size() << endl; + ofLogNotice("MediaServer") << "Source count BEFORE image removal: " << loadedSources.size() << std::endl; loadedSources[path]->clear(); - map ::iterator it = loadedSources.find(path); + map ::iterator it = loadedSources.find(path); delete it->second; loadedSources.erase(it); - ofLogNotice("MediaServer") << "Source count AFTER image removal: " << loadedSources.size() << endl; + ofLogNotice("MediaServer") << "Source count AFTER image removal: " << loadedSources.size() << std::endl; ofNotifyEvent(onImageUnloaded, path, this); return; } // Something wrong here, we should be out of the routine by now - stringstream failss; + std::stringstream failss; failss << "Failed to remove image source: " << path; ofLogFatalError("MediaServer") << failss.str(); std::exit(EXIT_FAILURE); } -BaseSource * MediaServer::loadVideo(string & path){ +BaseSource * MediaServer::loadVideo(std::string & path){ VideoSource * videoSource = 0; // Check if this video is already loaded bool isVideoLoaded = false; @@ -199,11 +199,11 @@ BaseSource * MediaServer::loadVideo(string & path){ if(isVideoLoaded){ // Increase reference count of this source videoSource->referenceCount++; - stringstream refss; + std::stringstream refss; refss << "Current reference count for " << path << " = " << videoSource->referenceCount; ofLogNotice("MediaServer") << refss.str(); // Notify objects registered to onImageLoaded event - stringstream ss; + std::stringstream ss; ss << "Video " << path << " already loaded"; ofLogNotice("MediaServer") << ss.str(); ofNotifyEvent(onVideoLoaded, path, this); @@ -215,14 +215,14 @@ BaseSource * MediaServer::loadVideo(string & path){ loadedSources[path] = videoSource; // Set reference count of this image path to 1 //referenceCount[path] = 1; - stringstream refss; + std::stringstream refss; refss << "Initialized reference count of " << path << " to " << videoSource->referenceCount; ofLogNotice("MediaServer") << refss.str(); ofNotifyEvent(onVideoLoaded, path, this); return videoSource; } -void MediaServer::unloadVideo(string & path){ +void MediaServer::unloadVideo(std::string & path){ VideoSource * videoSource = static_cast (getSourceByPath(path)); // Decrease reference count of the video //referenceCount[path]--; @@ -239,26 +239,26 @@ void MediaServer::unloadVideo(string & path){ if(loadedSources.count(path)){ ofLogNotice("MediaServer") << "Source count before video removal: " - << loadedSources.size() << endl; + << loadedSources.size() << std::endl; videoSource->clear(); - map ::iterator it = loadedSources.find(path); + map ::iterator it = loadedSources.find(path); delete it->second; loadedSources.erase(it); ofLogNotice("MediaServer") << "Source count after video removal: " - << loadedSources.size() << endl; + << loadedSources.size() << std::endl; ofNotifyEvent(onVideoUnloaded, path, this); return; } // Something wrong here, we should be out of the routine by now - stringstream failss; + std::stringstream failss; failss << "Failed to remove video source: " << path; ofLogFatalError("MediaServer") << failss.str(); std::exit(EXIT_FAILURE); } -void MediaServer::unloadMedia(string & path){ +void MediaServer::unloadMedia(std::string & path){ if(loadedSources.count(path)){ BaseSource * mediaSource = getSourceByPath(path); if(mediaSource->getType() == SourceType::SOURCE_TYPE_IMAGE){ @@ -279,7 +279,7 @@ void MediaServer::unloadMedia(string & path){ // Clear all loaded media void MediaServer::clear(){ - typedef map ::iterator it_type; + typedef map ::iterator it_type; for(it_type i = loadedSources.begin(); i != loadedSources.end(); i++){ // Do not delete FBO source pointers as they are (and should be) initialized elsewhere if(i->second->getType() != SourceType::SOURCE_TYPE_FBO){ @@ -290,32 +290,32 @@ void MediaServer::clear(){ } // TODO: getLoadedSourceByPath -BaseSource * MediaServer::getSourceByPath(string & mediaPath){ +BaseSource * MediaServer::getSourceByPath(std::string & mediaPath){ if(loadedSources.count(mediaPath)){ return loadedSources[mediaPath]; } // Source not found, exit with error - stringstream ss; + std::stringstream ss; ss << "Could not find source by path: " << mediaPath; ofLogFatalError("MediaServer") << ss.str(); std::exit(EXIT_FAILURE); } -string MediaServer::getDefaultImageDir(){ +std::string MediaServer::getDefaultImageDir(){ return DEFAULT_IMAGES_DIR; } -string MediaServer::getDefaultVideoDir(){ +std::string MediaServer::getDefaultVideoDir(){ return DEFAULT_VIDEOS_DIR; } -string MediaServer::getDefaultMediaDir(int sourceType){ +std::string MediaServer::getDefaultMediaDir(int sourceType){ if(sourceType == SourceType::SOURCE_TYPE_IMAGE){ return getDefaultImageDir(); }else if(sourceType == SourceType::SOURCE_TYPE_VIDEO){ return getDefaultVideoDir(); }else{ - stringstream ss; + std::stringstream ss; ss << "Could not get default media dir. Unknown source type: " << sourceType; ofLogFatalError("MediaServer") << ss.str(); std::exit(EXIT_FAILURE); @@ -346,7 +346,7 @@ void MediaServer::addFboSource(FboSource * fboSource){ fboSource->setup(); } -BaseSource * MediaServer::loadFboSource(string & fboSourceName){ +BaseSource * MediaServer::loadFboSource(std::string & fboSourceName){ ofLogNotice("MediaServer") << "Attempting to load FBO source with name " << fboSourceName; // Search for FBO source name in our storage FboSource * source = 0; @@ -378,7 +378,7 @@ BaseSource * MediaServer::loadFboSource(string & fboSourceName){ return loadedSources[fboSourceName]; } // loadFboSource -void MediaServer::unloadFboSource(string & fboSourceName){ +void MediaServer::unloadFboSource(std::string & fboSourceName){ ofLogNotice("MediaServer") << "Attempt to unload FBO source " << fboSourceName; // Check if loaded at all if(!loadedSources.count(fboSourceName)){ @@ -396,9 +396,9 @@ void MediaServer::unloadFboSource(string & fboSourceName){ ofLogNotice("MediaServer") << fboSourceName << " reference count <= 0, removing from loaded sources"; source->referenceCount = 0; //source->removeAppListeners(); - map ::iterator it = loadedSources.find(fboSourceName); + map ::iterator it = loadedSources.find(fboSourceName); loadedSources.erase(it); - ofLogNotice("MediaServer") << "Source count after FBO source removal: " << loadedSources.size() << endl; + ofLogNotice("MediaServer") << "Source count after FBO source removal: " << loadedSources.size() << std::endl; ofNotifyEvent(onFboSourceUnloaded, fboSourceName, this); } } // unloadFboSource diff --git a/src/MediaServer/MediaServer.h b/src/MediaServer/MediaServer.h index 3f780f4..51bf721 100644 --- a/src/MediaServer/MediaServer.h +++ b/src/MediaServer/MediaServer.h @@ -55,45 +55,45 @@ class MediaServer { int getNumVideos(); int getNumImages(); int getNumFboSources(); // new - vector & getVideoPaths(); - vector getVideoNames(); - vector & getImagePaths(); - vector getImageNames(); - vector getFboSourceNames(); // new - - BaseSource * loadMedia(string & path, int mediaType); - BaseSource * loadImage(string & path); - void unloadImage(string & path); - BaseSource * loadVideo(string & path); - void unloadVideo(string & path); - void unloadMedia(string & path); + std::vector & getVideoPaths(); + std::vector getVideoNames(); + std::vector & getImagePaths(); + std::vector getImageNames(); + std::vector getFboSourceNames(); // new + + BaseSource * loadMedia(std::string & path, int mediaType); + BaseSource * loadImage(std::string & path); + void unloadImage(std::string & path); + BaseSource * loadVideo(std::string & path); + void unloadVideo(std::string & path); + void unloadMedia(std::string & path); void clear(); // Force all loaded source unload - BaseSource * getSourceByPath(string & mediaPath); - string getDefaultImageDir(); - string getDefaultVideoDir(); - string getDefaultMediaDir(int sourceType); + BaseSource * getSourceByPath(std::string & mediaPath); + std::string getDefaultImageDir(); + std::string getDefaultVideoDir(); + std::string getDefaultMediaDir(int sourceType); // Do things with FBO sources void addFboSource(FboSource & fboSource); // could be called also as register FBO source void addFboSource(FboSource * fboSource); - BaseSource * loadFboSource(string & fboSourceName); - void unloadFboSource(string & fboSourceName); + BaseSource * loadFboSource(std::string & fboSourceName); + void unloadFboSource(std::string & fboSourceName); // Custom events, add/remove - ofEvent onImageAdded; - ofEvent onImageRemoved; - ofEvent onVideoAdded; - ofEvent onVideoRemoved; - ofEvent onFboSourceAdded; - ofEvent onFboSourceRemoved; + ofEvent onImageAdded; + ofEvent onImageRemoved; + ofEvent onVideoAdded; + ofEvent onVideoRemoved; + ofEvent onFboSourceAdded; + ofEvent onFboSourceRemoved; // load/unload - ofEvent onImageLoaded; - ofEvent onImageUnloaded; - ofEvent onVideoLoaded; - ofEvent onVideoUnloaded; - ofEvent onFboSourceLoaded; - ofEvent onFboSourceUnloaded; + ofEvent onImageLoaded; + ofEvent onImageUnloaded; + ofEvent onVideoLoaded; + ofEvent onVideoUnloaded; + ofEvent onFboSourceLoaded; + ofEvent onFboSourceUnloaded; private: // Directory Watchers @@ -111,13 +111,13 @@ class MediaServer { DirectoryWatcher usb2ImageWatcher; DirectoryWatcher usb3ImageWatcher; - vector _tempImagePaths; - vector _tempVideoPaths; + std::vector _tempImagePaths; + std::vector _tempVideoPaths; - map loadedSources; + map loadedSources; // FBO source storage before they go to loadedSources - vector fboSources; // FBO source storage + std::vector fboSources; // FBO source storage }; } // namespace piMapper diff --git a/src/Sources/BaseSource.cpp b/src/Sources/BaseSource.cpp index 3ab1f92..507583e 100644 --- a/src/Sources/BaseSource.cpp +++ b/src/Sources/BaseSource.cpp @@ -4,7 +4,7 @@ namespace ofx { namespace piMapper { BaseSource::BaseSource(){ - //cout << "BaseSource" << endl; + //std::cout << "BaseSource" << std::endl; init(); } @@ -19,7 +19,7 @@ ofTexture * BaseSource::getTexture(){ return texture; } -string & BaseSource::getName(){ +std::string & BaseSource::getName(){ return name; } @@ -35,7 +35,7 @@ SourceType BaseSource::getType(){ return type; } -string & BaseSource::getPath(){ +std::string & BaseSource::getPath(){ return path; } @@ -49,11 +49,11 @@ void BaseSource::init(){ referenceCount = 1; // We have one instance on init } -void BaseSource::setNameFromPath(string & fullPath){ - vector pathParts; - //cout << "fullPath: " << fullPath << endl; +void BaseSource::setNameFromPath(std::string & fullPath){ + std::vector pathParts; + //std::cout << "fullPath: " << fullPath << std::endl; pathParts = ofSplitString(fullPath, "/"); // Maybe on win "/" is "\", have to test - //cout << "lastPathPart: " << pathParts[pathParts.size() - 1] << endl; + //std::cout << "lastPathPart: " << pathParts[pathParts.size() - 1] << std::endl; name = pathParts[pathParts.size() - 1]; } diff --git a/src/Sources/BaseSource.h b/src/Sources/BaseSource.h index c097359..84f8e42 100644 --- a/src/Sources/BaseSource.h +++ b/src/Sources/BaseSource.h @@ -13,11 +13,11 @@ class BaseSource { BaseSource(ofTexture * newTexture); // Only one clean way of passing the texture ~BaseSource(); ofTexture * getTexture(); - string & getName(); + std::string & getName(); bool isLoadable(); // Maybe the loading features shoud go to a derrived class bool isLoaded(); // as BaseSourceLoadable SourceType getType(); - string & getPath(); + std::string & getPath(); virtual void clear(){} virtual void togglePause(){} @@ -31,10 +31,10 @@ class BaseSource { void init(); protected: - void setNameFromPath(string & fullPath); + void setNameFromPath(std::string & fullPath); ofTexture * texture; - string name; - string path; // This is set only if loadable is true + std::string name; + std::string path; // This is set only if loadable is true bool loadable; // If the source can be loaded from disk like image and video bool loaded; // Is the source loaded? SourceType type; diff --git a/src/Sources/ImageSource.cpp b/src/Sources/ImageSource.cpp index 75ded43..08db4b6 100644 --- a/src/Sources/ImageSource.cpp +++ b/src/Sources/ImageSource.cpp @@ -11,7 +11,7 @@ ImageSource::ImageSource(){ ImageSource::~ImageSource(){} -void ImageSource::loadImage(string & filePath){ +void ImageSource::loadImage(std::string & filePath){ path = filePath; setNameFromPath(filePath); image = new ofImage(); diff --git a/src/Sources/ImageSource.h b/src/Sources/ImageSource.h index b22dba6..2d34270 100644 --- a/src/Sources/ImageSource.h +++ b/src/Sources/ImageSource.h @@ -10,8 +10,8 @@ class ImageSource : public BaseSource { public: ImageSource(); ~ImageSource(); - string & getPath(); - void loadImage(string & filePath); + std::string & getPath(); + void loadImage(std::string & filePath); void clear(); private: ofImage * image; diff --git a/src/Sources/OMXPlayerCache.cpp b/src/Sources/OMXPlayerCache.cpp index b051f9e..df98ac9 100644 --- a/src/Sources/OMXPlayerCache.cpp +++ b/src/Sources/OMXPlayerCache.cpp @@ -14,7 +14,7 @@ OMXPlayerCache * OMXPlayerCache::instance(){ return _instance; } -ofxOMXPlayer * OMXPlayerCache::load(string moviePath){ +ofxOMXPlayer * OMXPlayerCache::load(std::string moviePath){ if(_players.find(moviePath) == _players.end()){ ofxOMXPlayerSettings settings; settings.videoPath = moviePath; @@ -34,7 +34,7 @@ ofxOMXPlayer * OMXPlayerCache::load(string moviePath){ return _players[moviePath]; } -void OMXPlayerCache::unload(string moviePath){ +void OMXPlayerCache::unload(std::string moviePath){ if(_players.find(moviePath) != _players.end()){ _players[moviePath]->setPaused(true); } diff --git a/src/Sources/OMXPlayerCache.h b/src/Sources/OMXPlayerCache.h index ae427a0..26925a7 100644 --- a/src/Sources/OMXPlayerCache.h +++ b/src/Sources/OMXPlayerCache.h @@ -14,12 +14,12 @@ class OMXPlayerCache { public: static OMXPlayerCache * instance(); - ofxOMXPlayer * load(string moviePath); - void unload(string moviePath); + ofxOMXPlayer * load(std::string moviePath); + void unload(std::string moviePath); private: static OMXPlayerCache * _instance; - map _players; + map _players; }; diff --git a/src/Sources/SourceTypeHelper.h b/src/Sources/SourceTypeHelper.h index 6f6acae..b6e3b77 100644 --- a/src/Sources/SourceTypeHelper.h +++ b/src/Sources/SourceTypeHelper.h @@ -13,7 +13,7 @@ namespace piMapper { class SourceTypeHelper { public: - static string GetSourceTypeHelperName(SourceType sourceTypeEnum){ + static std::string GetSourceTypeHelperName(SourceType sourceTypeEnum){ if(sourceTypeEnum == SOURCE_TYPE_IMAGE){ return SOURCE_TYPE_NAME_IMAGE; }else if(sourceTypeEnum == SOURCE_TYPE_VIDEO){ @@ -23,14 +23,14 @@ class SourceTypeHelper { }else if(sourceTypeEnum == SOURCE_TYPE_FBO){ return SOURCE_TYPE_NAME_FBO; }else{ - stringstream ss; + std::stringstream ss; ss << "Invalid source type: " << sourceTypeEnum; ofLogFatalError("SourceTypeHelper") << ss.str(); exit(EXIT_FAILURE); } } - static SourceType GetSourceTypeHelperEnum(string sourceTypeName){ + static SourceType GetSourceTypeHelperEnum(std::string sourceTypeName){ if(sourceTypeName == SOURCE_TYPE_NAME_IMAGE){ return SOURCE_TYPE_IMAGE; }else if(sourceTypeName == SOURCE_TYPE_NAME_VIDEO){ @@ -40,7 +40,7 @@ class SourceTypeHelper { }else if(sourceTypeName == SOURCE_TYPE_NAME_FBO){ return SOURCE_TYPE_FBO; }else{ - stringstream ss; + std::stringstream ss; ss << "Invalid source type name: " << sourceTypeName; ofLogFatalError("SourceTypeHelper") << ss.str(); exit(EXIT_FAILURE); diff --git a/src/Sources/VideoSource.cpp b/src/Sources/VideoSource.cpp index 022c370..9c70e1e 100644 --- a/src/Sources/VideoSource.cpp +++ b/src/Sources/VideoSource.cpp @@ -18,7 +18,7 @@ VideoSource::VideoSource(){ #endif } -void VideoSource::loadVideo(string & filePath){ +void VideoSource::loadVideo(std::string & filePath){ path = filePath; setNameFromPath(filePath); #ifdef TARGET_RASPBERRY_PI diff --git a/src/Sources/VideoSource.h b/src/Sources/VideoSource.h index 18726c9..6fe8638 100644 --- a/src/Sources/VideoSource.h +++ b/src/Sources/VideoSource.h @@ -22,8 +22,8 @@ class VideoSource : public BaseSource { VideoSource(); - string & getPath(); - void loadVideo(string & path); + std::string & getPath(); + void loadVideo(std::string & path); void clear(); void togglePause(); diff --git a/src/Sources/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp index e3d6a74..6f8d9da 100644 --- a/src/Sources/magSlideShowSource.cpp +++ b/src/Sources/magSlideShowSource.cpp @@ -26,9 +26,10 @@ magSlideShowSource::magSlideShowSource() { } } -magSlideShowSource::~magSlideShowSource() { - directoryWatcher->endWatch(); - delete directoryWatcher; +magSlideShowSource::~magSlideShowSource(){ + if(directoryWatcher != 0){ + delete directoryWatcher; + } } bool magSlideShowSource::initialize(magSlideShowSource::Settings settings) { @@ -168,20 +169,18 @@ bool magSlideShowSource::createFromFolderContents(std::string path) { return false; } - auto sortedDir = dir.getSorted(); - auto files = sortedDir.getFiles(); + ofDirectory sortedDir = dir.getSorted(); + std::vector files = sortedDir.getFiles(); - if (files.size() < 1) - { + if (files.size() < 1){ ofLogError("magSlideShowSource::createFromFolderContents") << "Folder " << dir.getAbsolutePath() << " is empty"; return false; } ofImage tempImage; - for (auto &file : files) - { - if (tempImage.load(file)) - { + for(ofFile &file : files){ + if (tempImage.load(file.getFileName())){ + // make a new image slide auto slide = std::make_shared(); slide->setup(tempImage); @@ -189,9 +188,7 @@ bool magSlideShowSource::createFromFolderContents(std::string path) { slide->setTransitionDuration(static_cast(settings.transitionDuration*1000)); // if (settings.transitionName == "") addSlide(slide); - } - else - { + }else{ auto ext = ofToLower(file.getExtension()); static std::vector movieExtensions = { @@ -388,8 +385,7 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) { } void magSlideShowSource::play() { - if (!isPlaying) - { + if (!isPlaying && slides.size()){ runningTime = 0; lastTime = ofGetElapsedTimeMillis(); isPlaying = true; diff --git a/src/Sources/magSlideShowSource.h b/src/Sources/magSlideShowSource.h index 60d541d..6573370 100644 --- a/src/Sources/magSlideShowSource.h +++ b/src/Sources/magSlideShowSource.h @@ -13,7 +13,6 @@ class magSlide; - class magSlideShowSource : public ofx::piMapper::FboSource { public: magSlideShowSource(); @@ -157,9 +156,9 @@ class magSlideShowSource : public ofx::piMapper::FboSource { int currentSlideIndex = 0; int direction = 1; int loopCount = 0; - ofx::piMapper::DirectoryWatcher* directoryWatcher; - void fileAddedListener(const void *sender); - void fileRemovedListener(const void *sender); + ofx::piMapper::DirectoryWatcher * directoryWatcher; + void fileAddedListener(const void * sender); + void fileRemovedListener(const void * sender); bool doInit; bool doPlayNextSlide = false; }; diff --git a/src/Sources/magSlideTransition.h b/src/Sources/magSlideTransition.h index ecb491b..8574f79 100644 --- a/src/Sources/magSlideTransition.h +++ b/src/Sources/magSlideTransition.h @@ -76,7 +76,7 @@ public: */ float getNormalizedTime(); - string const &getName() const + std::string const &getName() const { return name; } diff --git a/src/Sources/magSlideTransitionFactory.h b/src/Sources/magSlideTransitionFactory.h index cb998b0..1a3bd32 100644 --- a/src/Sources/magSlideTransitionFactory.h +++ b/src/Sources/magSlideTransitionFactory.h @@ -16,7 +16,7 @@ class magSlideTransitionFactory public: static magSlideTransitionFactory* instance(); - std::shared_ptr createTransition(string transitionName, + std::shared_ptr createTransition(std::string transitionName, std::shared_ptr slide, ofParameterGroup &group, u_int64_t duration); diff --git a/src/Surfaces/BaseSurface.cpp b/src/Surfaces/BaseSurface.cpp index c309abd..952742b 100644 --- a/src/Surfaces/BaseSurface.cpp +++ b/src/Surfaces/BaseSurface.cpp @@ -118,7 +118,7 @@ void BaseSurface::scaleTo(float scale){ _scale = scale; - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } diff --git a/src/Surfaces/BaseSurface.h b/src/Surfaces/BaseSurface.h index 5ab86e5..d8f36ae 100644 --- a/src/Surfaces/BaseSurface.h +++ b/src/Surfaces/BaseSurface.h @@ -20,16 +20,16 @@ class BaseSurface { virtual void setup() = 0; virtual void draw() = 0; virtual void setVertex(int index, Vec3 p) = 0; - virtual void setVertices(vector v) = 0; + virtual void setVertices(std::vector v) = 0; virtual void setTexCoord(int index, Vec2 t) = 0; - virtual void setTexCoords(vector t) = 0; + virtual void setTexCoords(std::vector t) = 0; virtual void moveBy(Vec3 v) = 0; virtual int getType() = 0; virtual bool hitTest(Vec2 p) = 0; virtual ofPolyline getHitArea() = 0; virtual ofPolyline getTextureHitArea() = 0; - virtual vector getVertices() = 0; - virtual vector getTexCoords() = 0; + virtual std::vector getVertices() = 0; + virtual std::vector getTexCoords() = 0; virtual BaseSurface * clone() = 0; void drawTexture(Vec3 position); @@ -46,7 +46,7 @@ class BaseSurface { ofMesh & getMesh(); ofRectangle & getBoundingBox(); - ofEvent> verticesChangedEvent; + ofEvent> verticesChangedEvent; ofEvent vertexChangedEvent; protected: diff --git a/src/Surfaces/CircleSurface.h b/src/Surfaces/CircleSurface.h index 5f23395..831f42f 100644 --- a/src/Surfaces/CircleSurface.h +++ b/src/Surfaces/CircleSurface.h @@ -38,17 +38,17 @@ class CircleSurface : public QuadSurface { bool updateMask; bool maskIsReady; -// string glESFragmentShader; -// string glESVertexShader; +// std::string glESFragmentShader; +// std::string glESVertexShader; // -// string gl2FragmentShader; -// string gl2VertexShader; +// std::string gl2FragmentShader; +// std::string gl2VertexShader; ofMesh maskMesh; // TODO: gl3 Shaders -// string gl3VertexShader; -// string gl3FragmentShader; +// std::string gl3VertexShader; +// std::string gl3FragmentShader; private: std::vector defaultTexCoords; diff --git a/src/Surfaces/GridWarpSurface.cpp b/src/Surfaces/GridWarpSurface.cpp index b48ad2c..5590915 100644 --- a/src/Surfaces/GridWarpSurface.cpp +++ b/src/Surfaces/GridWarpSurface.cpp @@ -36,7 +36,7 @@ void GridWarpSurface::moveBy(Vec3 v){ } setMoved(true); - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } @@ -80,7 +80,7 @@ bool GridWarpSurface::hitTest(Vec2 p){ pl.addVertex(mesh.getVertex(d)); pl.close(); - if(pl.inside(p.toOf())){ + if(pl.inside(p.x, p.y)){ return true; } } @@ -150,7 +150,7 @@ void GridWarpSurface::setVertex(int index, Vec3 vert){ ofNotifyEvent(vertexChangedEvent, index, this); } -void GridWarpSurface::setVertices(vector v){ +void GridWarpSurface::setVertices(std::vector v){ if(v.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of vertices"); } @@ -159,7 +159,7 @@ void GridWarpSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } @@ -170,7 +170,7 @@ void GridWarpSurface::setTexCoord(int index, Vec2 t){ mesh.setTexCoord(index, t.toOf()); } -void GridWarpSurface::setTexCoords(vector t){ +void GridWarpSurface::setTexCoords(std::vector t){ if(t.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of texture coordinates"); } @@ -180,11 +180,11 @@ void GridWarpSurface::setTexCoords(vector t){ } -vector GridWarpSurface::getVertices(){ +std::vector GridWarpSurface::getVertices(){ return Vec3::fromOf(mesh.getVertices()); } -vector GridWarpSurface::getTexCoords(){ +std::vector GridWarpSurface::getTexCoords(){ return Vec2::fromOf(mesh.getTexCoords()); } @@ -200,9 +200,10 @@ void GridWarpSurface::createGridMesh(){ // Add vertices for each col and row for(int iy = 0; iy <= _gridRows; ++iy){ for(int ix = 0; ix <= _gridCols; ++ix){ - mesh.addVertex(Vec2( + mesh.addVertex(Vec3( margin + (vertexDistanceX * (float)ix), - margin + (vertexDistanceY * (float)iy)).toOf()); + margin + (vertexDistanceY * (float)iy), + 0.0f).toOf()); } } @@ -230,7 +231,7 @@ void GridWarpSurface::createGridMesh(){ } } - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } diff --git a/src/Surfaces/GridWarpSurface.h b/src/Surfaces/GridWarpSurface.h index 9f997f6..4a7baf8 100644 --- a/src/Surfaces/GridWarpSurface.h +++ b/src/Surfaces/GridWarpSurface.h @@ -30,11 +30,11 @@ class GridWarpSurface : public BaseSurface { ofPolyline getTextureHitArea(); void setVertex(int index, Vec3 p); - void setVertices(vector v); + void setVertices(std::vector v); void setTexCoord(int index, Vec2 t); - void setTexCoords(vector t); - vector getVertices(); - vector getTexCoords(); + void setTexCoords(std::vector t); + std::vector getVertices(); + std::vector getTexCoords(); void createGridMesh(); diff --git a/src/Surfaces/HexagonSurface.cpp b/src/Surfaces/HexagonSurface.cpp index 99df1d2..ee62775 100644 --- a/src/Surfaces/HexagonSurface.cpp +++ b/src/Surfaces/HexagonSurface.cpp @@ -11,7 +11,7 @@ void HexagonSurface::setup(){ // Create 6 + 1 points for the hexagon surface. - vector verts; + std::vector verts; verts.resize(7); // Start with the center. @@ -26,7 +26,7 @@ void HexagonSurface::setup(){ verts[6] = Vec3(0, (float)ofGetHeight() / 2.0f, 0.0f); // No create the texture coordinates. - vector coords; + std::vector coords; coords.resize(7); // Start with center. @@ -45,8 +45,8 @@ void HexagonSurface::setup(){ } void HexagonSurface::setup( - vector & verts, - vector & coords, + std::vector & verts, + std::vector & coords, BaseSource * newSource){ // Assign texture @@ -105,7 +105,7 @@ void HexagonSurface::draw(){ void HexagonSurface::setVertex(int index, Vec3 p){ if(index >= mesh.getVertices().size()){ - ofLog() << "Vertex with this index does not exist: " << index << endl; + ofLog() << "Vertex with this index does not exist: " << index << std::endl; return; } @@ -113,7 +113,7 @@ void HexagonSurface::setVertex(int index, Vec3 p){ ofNotifyEvent(vertexChangedEvent, index, this); } -void HexagonSurface::setVertices(vector v){ +void HexagonSurface::setVertices(std::vector v){ if(v.size() != mesh.getVertices().size()){ throw runtime_error("Wrong number of vertices"); } @@ -122,21 +122,21 @@ void HexagonSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } void HexagonSurface::setTexCoord(int index, Vec2 t){ if(index >= mesh.getTexCoords().size()){ ofLog() << "Texture coordinate with this index does not exist: " << index - << endl; + << std::endl; return; } mesh.setTexCoord(index, t.toOf()); } -void HexagonSurface::setTexCoords(vector t){ +void HexagonSurface::setTexCoords(std::vector t){ if(t.size() != mesh.getTexCoords().size()){ throw runtime_error("Wrong number of texture coordinates"); } @@ -152,7 +152,7 @@ void HexagonSurface::moveBy(Vec3 v){ } setMoved(true); - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } @@ -172,7 +172,7 @@ bool HexagonSurface::hitTest(Vec2 p){ Vec3 HexagonSurface::getVertex(int index){ if(index > 2){ - ofLog() << "Vertex with this index does not exist: " << index << endl; + ofLog() << "Vertex with this index does not exist: " << index << std::endl; throw runtime_error("Vertex index out of bounds."); } @@ -217,11 +217,11 @@ ofPolyline HexagonSurface::getTextureHitArea(){ return line; } -vector HexagonSurface::getVertices(){ +std::vector HexagonSurface::getVertices(){ return Vec3::fromOf(mesh.getVertices()); } -vector HexagonSurface::getTexCoords(){ +std::vector HexagonSurface::getTexCoords(){ return Vec2::fromOf(mesh.getTexCoords()); } diff --git a/src/Surfaces/HexagonSurface.h b/src/Surfaces/HexagonSurface.h index 11277ec..9ba762c 100644 --- a/src/Surfaces/HexagonSurface.h +++ b/src/Surfaces/HexagonSurface.h @@ -17,14 +17,14 @@ class HexagonSurface : public BaseSurface { void setup(); void setup( - vector & verts, - vector & coords, + std::vector & verts, + std::vector & coords, BaseSource * newSource); void draw(); void setVertex(int index, Vec3 p); - void setVertices(vector v); + void setVertices(std::vector v); void setTexCoord(int index, Vec2 t); - void setTexCoords(vector t); + void setTexCoords(std::vector t); void moveBy(Vec3 v); int getType(); @@ -33,8 +33,8 @@ class HexagonSurface : public BaseSurface { Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - vector getVertices(); - vector getTexCoords(); + std::vector getVertices(); + std::vector getTexCoords(); BaseSurface * clone(); }; diff --git a/src/Surfaces/QuadSurface.cpp b/src/Surfaces/QuadSurface.cpp index 74c6c8a..3936d0c 100644 --- a/src/Surfaces/QuadSurface.cpp +++ b/src/Surfaces/QuadSurface.cpp @@ -9,7 +9,7 @@ QuadSurface::QuadSurface(){ } QuadSurface::~QuadSurface(){ - cout << "QuadSurface destructor." << endl; + std::cout << "QuadSurface destructor." << std::endl; } void QuadSurface::setup(){ @@ -112,7 +112,7 @@ void QuadSurface::draw(){ void QuadSurface::setVertex(int index, Vec3 p){ if(index > 3){ - ofLog() << "Vertex with this index does not exist: " << index << endl; + ofLog() << "Vertex with this index does not exist: " << index << std::endl; return; } @@ -120,7 +120,7 @@ void QuadSurface::setVertex(int index, Vec3 p){ ofNotifyEvent(vertexChangedEvent, index, this); } -void QuadSurface::setVertices(vector v){ +void QuadSurface::setVertices(std::vector v){ if(v.size() != 4){ throw runtime_error("Wrong number of vertices"); } @@ -129,21 +129,21 @@ void QuadSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } void QuadSurface::setTexCoord(int index, Vec2 t){ if(index > 3){ ofLog() << "Texture coordinate with this index does not exist: " << index - << endl; + << std::endl; return; } mesh.setTexCoord(index, t.toOf()); } -void QuadSurface::setTexCoords(vector t){ +void QuadSurface::setTexCoords(std::vector t){ if(t.size() != 4){ throw runtime_error("Wrong number of vertices"); } @@ -158,7 +158,7 @@ void QuadSurface::moveBy(Vec3 v){ } setMoved(true); - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } @@ -178,7 +178,7 @@ bool QuadSurface::hitTest(Vec2 p){ Vec3 QuadSurface::getVertex(int index){ if(index > 3){ - ofLog() << "Vertex with this index does not exist: " << index << endl; + ofLog() << "Vertex with this index does not exist: " << index << std::endl; throw runtime_error("Vertex index out of bounds."); } @@ -223,11 +223,11 @@ ofPolyline QuadSurface::getTextureHitArea(){ return line; } -vector QuadSurface::getVertices(){ +std::vector QuadSurface::getVertices(){ return Vec3::fromOf(mesh.getVertices()); } -vector QuadSurface::getTexCoords(){ +std::vector QuadSurface::getTexCoords(){ return Vec2::fromOf(mesh.getTexCoords()); } diff --git a/src/Surfaces/QuadSurface.h b/src/Surfaces/QuadSurface.h index 8a48b56..738dd8c 100644 --- a/src/Surfaces/QuadSurface.h +++ b/src/Surfaces/QuadSurface.h @@ -22,9 +22,9 @@ class QuadSurface : public BaseSurface { BaseSource * newSource); void draw(); void setVertex(int index, Vec3 p); - void setVertices(vector v); + void setVertices(std::vector v); void setTexCoord(int index, Vec2 t); - void setTexCoords(vector t); + void setTexCoords(std::vector t); void moveBy(Vec3 v); int getType(); @@ -33,8 +33,8 @@ class QuadSurface : public BaseSurface { Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - vector getVertices(); - vector getTexCoords(); + std::vector getVertices(); + std::vector getTexCoords(); void setPerspectiveWarping(bool b); bool getPerspectiveWarping(); diff --git a/src/Surfaces/SurfaceFactory.cpp b/src/Surfaces/SurfaceFactory.cpp index c6d02ed..847f13c 100644 --- a/src/Surfaces/SurfaceFactory.cpp +++ b/src/Surfaces/SurfaceFactory.cpp @@ -29,13 +29,13 @@ BaseSurface * SurfaceFactory::createSurface(SurfaceType type){ } TriangleSurface * SurfaceFactory::createTriangleSurface(){ - vector vertices; + std::vector vertices; float margin = 50.0f; vertices.push_back(Vec3((float)ofGetWidth() / 2.0f, margin, 0.0f)); vertices.push_back(Vec3((float)ofGetWidth() - margin, (float)ofGetHeight() - margin, 0.0f)); vertices.push_back(Vec3(margin, (float)ofGetHeight() - margin, 0.0f)); - vector texCoords; + std::vector texCoords; texCoords.push_back(Vec2(0.5f, 0.0f)); texCoords.push_back(Vec2(1.0f, 1.0f)); texCoords.push_back(Vec2(0.0f, 1.0f)); @@ -51,14 +51,14 @@ TriangleSurface * SurfaceFactory::createTriangleSurface(){ } QuadSurface * SurfaceFactory::createQuadSurface(){ - vector vertices; + std::vector vertices; float margin = 50.0f; vertices.push_back(Vec3(margin, margin, 0.0f)); vertices.push_back(Vec3((float)ofGetWidth() - margin, margin, 0.0f)); vertices.push_back(Vec3((float)ofGetWidth() - margin, (float)ofGetHeight() - margin, 0.0f)); vertices.push_back(Vec3(margin, (float)ofGetHeight() - margin, 0.0f)); - vector texCoords; + std::vector texCoords; texCoords.push_back(Vec2(Vec2(0.0f, 0.0f))); texCoords.push_back(Vec2(Vec2(1.0f, 0.0f))); texCoords.push_back(Vec2(Vec2(1.0f, 1.0f))); diff --git a/src/Surfaces/SurfaceManager.cpp b/src/Surfaces/SurfaceManager.cpp index e991efb..dda8eca 100644 --- a/src/Surfaces/SurfaceManager.cpp +++ b/src/Surfaces/SurfaceManager.cpp @@ -111,7 +111,7 @@ void SurfaceManager::clearPresets(){ } // TODO: Do serious adjustment here. We need to save all presets. Not just the active one. -void SurfaceManager::saveXmlSettings(string fileName){ +void SurfaceManager::saveXmlSettings(std::string fileName){ if(_presets.size() <= 0){ ofLogWarning( "SurfaceManager::saveXmlSettings", @@ -128,7 +128,7 @@ void SurfaceManager::saveXmlSettings(string fileName){ } // TODO: We need to load all presets. Not just the active one. -bool SurfaceManager::loadXmlSettings(string fileName){ +bool SurfaceManager::loadXmlSettings(std::string fileName){ if(mediaServer == 0){ ofLogFatalError("SurfaceManager") << "Media server not set"; exit(EXIT_FAILURE); @@ -292,7 +292,7 @@ void SurfaceManager::selectVertex(int i){ } if(i > selectedSurface->getVertices().size() - 1){ - ofLogError("SurfaceManager::selectVertex") << "index (" << i << ") out of bounds" << endl; + ofLogError("SurfaceManager::selectVertex") << "index (" << i << ") out of bounds" << std::endl; int prevVertIndex = _selectedVertexIndex; ofNotifyEvent(vertexUnselectedEvent, prevVertIndex, this); _selectedVertexIndex = -1; @@ -393,7 +393,7 @@ void SurfaceManager::onVertexChanged(int & i){ ofNotifyEvent(vertexChangedEvent, i, this); } -void SurfaceManager::onVerticesChanged(vector & vertices){ +void SurfaceManager::onVerticesChanged(std::vector & vertices){ ofNotifyEvent(verticesChangedEvent, vertices, this); } diff --git a/src/Surfaces/SurfaceManager.h b/src/Surfaces/SurfaceManager.h index b33cd07..d798037 100644 --- a/src/Surfaces/SurfaceManager.h +++ b/src/Surfaces/SurfaceManager.h @@ -33,11 +33,11 @@ class SurfaceManager { void removeSurface(int i); void deleteSurface(BaseSurface * surface); void deselectSurface(); - void saveXmlSettings(string fileName); + void saveXmlSettings(std::string fileName); void setMediaServer(MediaServer * newMediaServer); void clearPresets(); - bool loadXmlSettings(string fileName); + bool loadXmlSettings(std::string fileName); BaseSurface * getSurface(int index); BaseSurface * selectSurface(int index); @@ -61,13 +61,13 @@ class SurfaceManager { unsigned int getNumPresets(); ofEvent vertexChangedEvent; - ofEvent > verticesChangedEvent; + ofEvent > verticesChangedEvent; ofEvent surfaceSelectedEvent; ofEvent vertexSelectedEvent; ofEvent vertexUnselectedEvent; void onVertexChanged(int & i); - void onVerticesChanged(vector & vertices); + void onVerticesChanged(std::vector & vertices); SurfaceStack * getActivePreset(); SurfaceStack * createPreset(); @@ -86,7 +86,7 @@ class SurfaceManager { int _selectedVertexIndex; int _activePresetIndex; - vector _presets; + std::vector _presets; }; diff --git a/src/Surfaces/SurfaceStack.cpp b/src/Surfaces/SurfaceStack.cpp index 22605be..c11a7c9 100644 --- a/src/Surfaces/SurfaceStack.cpp +++ b/src/Surfaces/SurfaceStack.cpp @@ -65,7 +65,7 @@ BaseSurface * SurfaceStack::back(){ return _surfaces.back(); } -void SurfaceStack::onVerticesChanged(vector & vertices){ +void SurfaceStack::onVerticesChanged(std::vector & vertices){ ofNotifyEvent(verticesChangedEvent, vertices, this); } diff --git a/src/Surfaces/SurfaceStack.h b/src/Surfaces/SurfaceStack.h index 7607167..98d19b6 100644 --- a/src/Surfaces/SurfaceStack.h +++ b/src/Surfaces/SurfaceStack.h @@ -21,18 +21,18 @@ class SurfaceStack { BaseSurface * at(int i); BaseSurface * back(); - ofEvent > verticesChangedEvent; + ofEvent > verticesChangedEvent; ofEvent vertexChangedEvent; - void onVerticesChanged(vector & vertices); + void onVerticesChanged(std::vector & vertices); void onVertexChanged(int & i); - vector & getSurfaces(){ return _surfaces; }; + std::vector & getSurfaces(){ return _surfaces; }; SurfaceStack * clone(); private: - vector _surfaces; + std::vector _surfaces; }; } // namespace piMapper diff --git a/src/Surfaces/TriangleSurface.cpp b/src/Surfaces/TriangleSurface.cpp index bf1c0a1..3296e45 100644 --- a/src/Surfaces/TriangleSurface.cpp +++ b/src/Surfaces/TriangleSurface.cpp @@ -64,7 +64,7 @@ void TriangleSurface::draw(){ void TriangleSurface::setVertex(int index, Vec3 p){ if(index > 2){ - ofLog() << "Vertex with this index does not exist: " << index << endl; + ofLog() << "Vertex with this index does not exist: " << index << std::endl; return; } @@ -72,7 +72,7 @@ void TriangleSurface::setVertex(int index, Vec3 p){ ofNotifyEvent(vertexChangedEvent, index, this); } -void TriangleSurface::setVertices(vector v){ +void TriangleSurface::setVertices(std::vector v){ if(v.size() != 3){ throw runtime_error("Wrong number of vertices"); } @@ -81,21 +81,21 @@ void TriangleSurface::setVertices(vector v){ mesh.setVertex(i, v[i].toOf()); } - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } void TriangleSurface::setTexCoord(int index, Vec2 t){ if(index > 2){ ofLog() << "Texture coordinate with this index does not exist: " << index - << endl; + << std::endl; return; } mesh.setTexCoord(index, t.toOf()); } -void TriangleSurface::setTexCoords(vector t){ +void TriangleSurface::setTexCoords(std::vector t){ if(t.size() != 3){ throw runtime_error("Wrong number of texture coordinates"); } @@ -111,7 +111,7 @@ void TriangleSurface::moveBy(Vec3 v){ } setMoved(true); - vector vertices = Vec3::fromOf(mesh.getVertices()); + std::vector vertices = Vec3::fromOf(mesh.getVertices()); ofNotifyEvent(verticesChangedEvent, vertices, this); } @@ -131,7 +131,7 @@ bool TriangleSurface::hitTest(Vec2 p){ Vec2 TriangleSurface::getVertex(int index){ if(index > 2){ - ofLog() << "Vertex with this index does not exist: " << index << endl; + ofLog() << "Vertex with this index does not exist: " << index << std::endl; throw runtime_error("Vertex index out of bounds."); } @@ -142,7 +142,7 @@ Vec2 TriangleSurface::getVertex(int index){ Vec2 TriangleSurface::getTexCoord(int index){ if(index > 2){ - ofLog() << "Texture coordinate with this index does not exist: " << index << endl; + ofLog() << "Texture coordinate with this index does not exist: " << index << std::endl; throw runtime_error("Texture coordinate index out of bounds."); } @@ -177,11 +177,11 @@ ofPolyline TriangleSurface::getTextureHitArea(){ return line; } -vector TriangleSurface::getVertices(){ +std::vector TriangleSurface::getVertices(){ return Vec3::fromOf(mesh.getVertices()); } -vector TriangleSurface::getTexCoords(){ +std::vector TriangleSurface::getTexCoords(){ return Vec2::fromOf(mesh.getTexCoords()); } diff --git a/src/Surfaces/TriangleSurface.h b/src/Surfaces/TriangleSurface.h index 9546e08..091688a 100644 --- a/src/Surfaces/TriangleSurface.h +++ b/src/Surfaces/TriangleSurface.h @@ -20,9 +20,9 @@ class TriangleSurface : public BaseSurface { BaseSource * newSource); void draw(); void setVertex(int index, Vec3 p); - void setVertices(vector v); + void setVertices(std::vector v); void setTexCoord(int index, Vec2 t); - void setTexCoords(vector t); + void setTexCoords(std::vector t); void moveBy(Vec3 v); int getType(); @@ -31,8 +31,8 @@ class TriangleSurface : public BaseSurface { Vec2 getTexCoord(int index); ofPolyline getHitArea(); ofPolyline getTextureHitArea(); - vector getVertices(); - vector getTexCoords(); + std::vector getVertices(); + std::vector getTexCoords(); BaseSurface * clone(); }; diff --git a/src/Types/Vec2.cpp b/src/Types/Vec2.cpp index 35fb3da..a812fcf 100644 --- a/src/Types/Vec2.cpp +++ b/src/Types/Vec2.cpp @@ -1,5 +1,9 @@ #include "Vec2.h" +#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR > 9 + #include "glm/geometric.hpp" +#endif + namespace ofx { namespace piMapper { @@ -22,16 +26,16 @@ Vec2::Vec2(float ix, float iy){ return ofVec2f(x, y); } - vector Vec2::toOf(vector & src){ - vector retVal; + std::vector Vec2::toOf(std::vector & src){ + std::vector retVal; for(auto itm : src){ retVal.push_back(itm.toOf()); } return retVal; } - vector Vec2::fromOf(vector & src){ - vector retVal; + std::vector Vec2::fromOf(std::vector & src){ + std::vector retVal; for(auto itm : src){ retVal.push_back(Vec2(itm)); } @@ -44,7 +48,37 @@ Vec2::Vec2(float ix, float iy){ return v1.distance(v2); } #else - // TODO: The same for glm::vec2 + Vec2::Vec2(glm::vec2 & src){ + x = src.x; + y = src.y; + } + + glm::vec2 Vec2::toOf(){ + return glm::vec2(x, y); + } + + std::vector Vec2::toOf(std::vector & src){ + std::vector retVal; + for(auto itm : src){ + retVal.push_back(itm.toOf()); + } + return retVal; + } + + std::vector Vec2::fromOf(std::vector & src){ + std::vector retVal; + for(auto itm : src){ + retVal.push_back(Vec2(itm)); + } + return retVal; + } + + float Vec2::distance(const Vec2 & other){ + glm::vec2 v1(x, y); + glm::vec2 v2(other.x, other.y); + + return glm::distance(v1, v2); + } #endif void Vec2::operator=(const Vec2 & other){ diff --git a/src/Types/Vec2.h b/src/Types/Vec2.h index e0414f6..80a86fe 100644 --- a/src/Types/Vec2.h +++ b/src/Types/Vec2.h @@ -1,9 +1,11 @@ #pragma once +#include + #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 #include "ofVec2f.h" #else - // TODO: include glm + #include "glm/vec2.hpp" #endif namespace ofx { @@ -18,10 +20,13 @@ public: #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 Vec2(ofVec2f & src); ofVec2f toOf(); - static vector toOf(vector & src); - static vector fromOf(vector & src); + static std::vector toOf(std::vector & src); + static std::vector fromOf(std::vector & src); #else - // TODO: glm + Vec2(glm::vec2 & src); + glm::vec2 toOf(); + static std::vector toOf(std::vector & src); + static std::vector fromOf(std::vector & src); #endif float distance(const Vec2 & other); diff --git a/src/Types/Vec3.cpp b/src/Types/Vec3.cpp index e3304b7..dda8c91 100644 --- a/src/Types/Vec3.cpp +++ b/src/Types/Vec3.cpp @@ -24,23 +24,47 @@ Vec3::Vec3(float ix, float iy, float iz){ return ofVec3f(x, y, z); } - vector Vec3::toOf(vector & src){ - vector retVal; + std::vector Vec3::toOf(std::vector & src){ + std::vector retVal; for(auto itm : src){ retVal.push_back(itm.toOf()); } return retVal; } - vector Vec3::fromOf(vector & src){ - vector retVal; + std::vector Vec3::fromOf(std::vector & src){ + std::vector retVal; for(auto itm : src){ retVal.push_back(Vec3(itm)); } return retVal; } #else - // TODO: Vec3::Vec3(glm::vec3 & src){...} + Vec3::Vec3(glm::vec3 & src){ + x = src.x; + y = src.y; + z = src.z; + } + + glm::vec3 Vec3::toOf(){ + return ofVec3f(x, y, z); + } + + std::vector Vec3::toOf(std::vector & src){ + std::vector retVal; + for(auto itm : src){ + retVal.push_back(itm.toOf()); + } + return retVal; + } + + std::vector Vec3::fromOf(std::vector & src){ + std::vector retVal; + for(auto itm : src){ + retVal.push_back(Vec3(itm)); + } + return retVal; + } #endif void Vec3::operator=(const Vec3 & other){ diff --git a/src/Types/Vec3.h b/src/Types/Vec3.h index c9df2d7..edce17f 100644 --- a/src/Types/Vec3.h +++ b/src/Types/Vec3.h @@ -1,9 +1,11 @@ #pragma once +#include + #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 #include "ofVec3f.h" #else - // TODO: include glm + #include "glm/vec3.hpp" #endif namespace ofx { @@ -18,10 +20,13 @@ public: #if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR <= 9 Vec3(ofVec3f & src); ofVec3f toOf(); - static vector toOf(vector & src); - static vector fromOf(vector & src); + static std::vector toOf(std::vector & src); + static std::vector fromOf(std::vector & src); #else - // TODO: Vec3(glm::vec3 & src); + Vec3(glm::vec3 & src); + glm::vec3 toOf(); + static std::vector toOf(std::vector & src); + static std::vector fromOf(std::vector & src); #endif void operator=(const Vec3 & other); diff --git a/src/UserInterface/RadioList.cpp b/src/UserInterface/RadioList.cpp index abc3c57..3b95a56 100644 --- a/src/UserInterface/RadioList.cpp +++ b/src/UserInterface/RadioList.cpp @@ -8,12 +8,12 @@ RadioList::RadioList(){ storedSelectedItem = 0; } -RadioList::RadioList(vector & labels, vector & values){ +RadioList::RadioList(std::vector & labels, std::vector & values){ RadioList(); setup(labels, values); } -RadioList::RadioList(string title, vector & labels, vector & values){ +RadioList::RadioList(std::string title, std::vector & labels, std::vector & values){ RadioList(); setup(title, labels, values); } @@ -22,7 +22,7 @@ RadioList::~RadioList(){ clear(); } -void RadioList::setup(vector & labels, vector & values){ +void RadioList::setup(std::vector & labels, std::vector & values){ // Copy incomming labels for later use storedLabels = labels; @@ -42,7 +42,7 @@ void RadioList::setup(vector & labels, vector & values){ } } -void RadioList::setup(string title, vector & labels, vector & values){ +void RadioList::setup(std::string title, std::vector & labels, std::vector & values){ // Store title for later use storedTitle = title; @@ -54,7 +54,7 @@ void RadioList::draw(){ guiGroup.draw(); } -void RadioList::setTitle(string title){ +void RadioList::setTitle(std::string title){ storedTitle = title; guiGroup.setName(title); } @@ -78,14 +78,14 @@ void RadioList::selectItem(int index){ toggle->removeListener(this, &RadioList::onToggleClicked); *toggle = true; // Select the specific radio button toggle->addListener(this, &RadioList::onToggleClicked); - //string name = toggle->getName(); + //std::string name = toggle->getName(); // Throw event with value that is image path instead of name - string value = storedValues[index]; + std::string value = storedValues[index]; ofNotifyEvent(onRadioSelected, value, this); storedSelectedItem = index; } -bool RadioList::selectItemByValue(string itemValue){ +bool RadioList::selectItemByValue(std::string itemValue){ if(itemValue == ""){ ofLogNotice("RadioList") << "Item value empty"; return false; @@ -123,7 +123,7 @@ void RadioList::enable(){ *toggle = true; toggle->addListener(this, &RadioList::onToggleClicked); - cout << "num items after enable: " << guiGroup.getNumControls() << endl; + std::cout << "num items after enable: " << guiGroup.getNumControls() << std::endl; } void RadioList::disable(){ @@ -164,11 +164,11 @@ float RadioList::getHeight(){ return guiGroup.getHeight(); } -string RadioList::getTitle(){ +std::string RadioList::getTitle(){ return guiGroup.getName(); } -string RadioList::getItemName(int index){ +std::string RadioList::getItemName(int index){ if(index >= guiGroup.getNumControls()){ return ""; } diff --git a/src/UserInterface/RadioList.h b/src/UserInterface/RadioList.h index 5e67a4f..9ce66c4 100644 --- a/src/UserInterface/RadioList.h +++ b/src/UserInterface/RadioList.h @@ -11,18 +11,18 @@ namespace piMapper { class RadioList { public: RadioList(); - RadioList(vector & labels, vector & values); - RadioList(string title, vector & labels, vector & values); + RadioList(std::vector & labels, std::vector & values); + RadioList(std::string title, std::vector & labels, std::vector & values); ~RadioList(); - void setup(vector & labels, vector & values); - void setup(string title, vector & labels, vector & values); + void setup(std::vector & labels, std::vector & values); + void setup(std::string title, std::vector & labels, std::vector & values); void draw(); - void setTitle(string title); + void setTitle(std::string title); void setPosition(ofPoint p); void setPosition(float x, float y); void selectItem(int index); - bool selectItemByValue(string itemValue); + bool selectItemByValue(std::string itemValue); void enable(); void disable(); void clear(); @@ -30,21 +30,21 @@ class RadioList { ofPoint getPosition(); float getWidth(); float getHeight(); - string getTitle(); - string getItemName(int index); + std::string getTitle(); + std::string getItemName(int index); int size(); // This event notifies about a toggle being selected and passes it's name to // the listeners. // Use ofAddListener(RadioListInstance.radioSelectedEvent, listenerClassPtr, // &listenerClass::listenerMethod) - // to listen to this. Listner method void listenerMethod(string & radioName) - ofEvent onRadioSelected; + // to listen to this. Listner method void listenerMethod(std::string & radioName) + ofEvent onRadioSelected; private: - vector storedLabels; - vector storedValues; - string storedTitle; + std::vector storedLabels; + std::vector storedValues; + std::string storedTitle; ofxGuiGroup guiGroup; int storedSelectedItem; diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index dfe47dc..c41eeac 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -156,7 +156,7 @@ void ofxPiMapper::createSurface(ofx::piMapper::SurfaceType type){ } void ofxPiMapper::eraseSurface(int i){ - cout << "numSurfaces: " << getNumSurfaces() << ", i: " << i << endl; + std::cout << "numSurfaces: " << getNumSurfaces() << ", i: " << i << std::endl; if(getNumSurfaces() > 0 && i < getNumSurfaces()){ _application.eraseSurface(i); } @@ -166,7 +166,7 @@ void ofxPiMapper::setNextSource(){ _application.setNextSource(); } -void ofxPiMapper::setFboSource(string sourceId){ +void ofxPiMapper::setFboSource(std::string sourceId){ _application.setFboSource(sourceId); } @@ -182,7 +182,7 @@ void ofxPiMapper::saveProject(){ _application.saveProject(); } -bool ofxPiMapper::loadProject(string filename){ +bool ofxPiMapper::loadProject(std::string filename){ return _application.loadXmlSettings(filename); } @@ -202,7 +202,7 @@ int ofxPiMapper::getSelectedSurface(){ return _application.getSurfaceManager()->getSelectedSurfaceIndex(); } -void ofxPiMapper::setInfoText(string text){ +void ofxPiMapper::setInfoText(std::string text){ _application.setInfoText(text); } diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index 1b036d1..f8e72eb 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -28,7 +28,7 @@ class ofxPiMapper { void registerFboSource(ofx::piMapper::FboSource * fboSource); // Application - void setInfoText(string text); + void setInfoText(std::string text); void toggleInfo(); void undo(); void deselect(); @@ -39,7 +39,7 @@ class ofxPiMapper { // Project void saveProject(); - bool loadProject(string filename); + bool loadProject(std::string filename); // Presets unsigned int getNumPresets(); @@ -74,7 +74,7 @@ class ofxPiMapper { // Sources, selected surface void setNextSource(); - void setFboSource(string sourceId); + void setFboSource(std::string sourceId); // System commands void reboot(); From bbbc613bd487088dad6e7552a390560b7915b25c Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 26 Dec 2017 21:44:11 +0100 Subject: [PATCH 068/103] Update example.xcodeproj --- example/example.xcodeproj/project.pbxproj | 114 ++++++++++++---------- 1 file changed, 63 insertions(+), 51 deletions(-) diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index 46b4907..c5d67a9 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -9,6 +9,16 @@ /* Begin PBXBuildFile section */ 010E92E21FEEEE9D0015B02B /* Vec2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 010E92DE1FEEEE8D0015B02B /* Vec2.cpp */; }; 010E92E31FEEEE9D0015B02B /* Vec3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 010E92E01FEEEE8D0015B02B /* Vec3.cpp */; }; + 01372D7D1FF2E7D4006D41AC /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D6B1FF2E7B4006D41AC /* ofxBaseGui.cpp */; }; + 01372D7E1FF2E7D4006D41AC /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D751FF2E7B4006D41AC /* ofxButton.cpp */; }; + 01372D7F1FF2E7D4006D41AC /* ofxColorPicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D781FF2E7B4006D41AC /* ofxColorPicker.cpp */; }; + 01372D801FF2E7D4006D41AC /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D771FF2E7B4006D41AC /* ofxGuiGroup.cpp */; }; + 01372D811FF2E7D4006D41AC /* ofxInputField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D7A1FF2E7B4006D41AC /* ofxInputField.cpp */; }; + 01372D821FF2E7D4006D41AC /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D791FF2E7B4006D41AC /* ofxLabel.cpp */; }; + 01372D831FF2E7D4006D41AC /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D6E1FF2E7B4006D41AC /* ofxPanel.cpp */; }; + 01372D841FF2E7D4006D41AC /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D7B1FF2E7B5006D41AC /* ofxSlider.cpp */; }; + 01372D851FF2E7D4006D41AC /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D731FF2E7B4006D41AC /* ofxSliderGroup.cpp */; }; + 01372D861FF2E7D4006D41AC /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01372D681FF2E7B4006D41AC /* ofxToggle.cpp */; }; 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE01FE7D53700C35E93 /* Application.cpp */; }; 01815E8D1FE7D59200C35E93 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */; }; 01815E8E1FE7D59200C35E93 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01815DE51FE7D53700C35E93 /* PresentationMode.cpp */; }; @@ -91,14 +101,6 @@ 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264840192224F90008A7F5 /* tinyxmlparser.cpp */; }; - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */; }; - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */; }; - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */; }; - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */; }; - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */; }; - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC801A09047C0009286E /* CustomSource.cpp */; }; 3995C20A1C79069B00123352 /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3995C2091C79069B00123352 /* Settings.cpp */; }; 399953691BD54FF600D5B1F1 /* CrossSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 399953671BD54FF600D5B1F1 /* CrossSource.cpp */; }; @@ -156,6 +158,27 @@ 010E92DF1FEEEE8D0015B02B /* Vec2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec2.h; sourceTree = ""; }; 010E92E01FEEEE8D0015B02B /* Vec3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec3.cpp; sourceTree = ""; }; 010E92E11FEEEE8D0015B02B /* Vec3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec3.h; sourceTree = ""; }; + 01372D681FF2E7B4006D41AC /* ofxToggle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; + 01372D691FF2E7B4006D41AC /* ofxButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; + 01372D6A1FF2E7B4006D41AC /* ofxSliderGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; + 01372D6B1FF2E7B4006D41AC /* ofxBaseGui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; + 01372D6C1FF2E7B4006D41AC /* ofxColorPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxColorPicker.h; sourceTree = ""; }; + 01372D6D1FF2E7B4006D41AC /* ofxInputField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxInputField.h; sourceTree = ""; }; + 01372D6E1FF2E7B4006D41AC /* ofxPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; + 01372D6F1FF2E7B4006D41AC /* ofxGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; + 01372D701FF2E7B4006D41AC /* ofxPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; + 01372D711FF2E7B4006D41AC /* ofxSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; + 01372D721FF2E7B4006D41AC /* ofxGuiGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; + 01372D731FF2E7B4006D41AC /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; + 01372D741FF2E7B4006D41AC /* ofxToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; + 01372D751FF2E7B4006D41AC /* ofxButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; + 01372D761FF2E7B4006D41AC /* ofxBaseGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; + 01372D771FF2E7B4006D41AC /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; + 01372D781FF2E7B4006D41AC /* ofxColorPicker.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxColorPicker.cpp; sourceTree = ""; }; + 01372D791FF2E7B4006D41AC /* ofxLabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; + 01372D7A1FF2E7B4006D41AC /* ofxInputField.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxInputField.cpp; sourceTree = ""; }; + 01372D7B1FF2E7B5006D41AC /* ofxSlider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; + 01372D7C1FF2E7B5006D41AC /* ofxLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; 01815DE01FE7D53700C35E93 /* Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; 01815DE11FE7D53700C35E93 /* Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; 01815DE31FE7D53700C35E93 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; @@ -326,23 +349,6 @@ 3926483E192224F90008A7F5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; 39264840192224F90008A7F5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; - 3933D5C519BB87BD000ACA55 /* ofxButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; - 3933D5C619BB87BD000ACA55 /* ofxGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; 397EFC801A09047C0009286E /* CustomSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CustomSource.cpp; sourceTree = ""; }; 397EFC811A09047C0009286E /* CustomSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomSource.h; sourceTree = ""; }; 3995C2081C79069B00123352 /* Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; @@ -714,23 +720,27 @@ 3933D5C119BB87BD000ACA55 /* src */ = { isa = PBXGroup; children = ( - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */, - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */, - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */, - 3933D5C519BB87BD000ACA55 /* ofxButton.h */, - 3933D5C619BB87BD000ACA55 /* ofxGui.h */, - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */, - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */, - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */, - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */, - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */, - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */, - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */, - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */, - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */, - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */, - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */, - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */, + 01372D6B1FF2E7B4006D41AC /* ofxBaseGui.cpp */, + 01372D761FF2E7B4006D41AC /* ofxBaseGui.h */, + 01372D751FF2E7B4006D41AC /* ofxButton.cpp */, + 01372D691FF2E7B4006D41AC /* ofxButton.h */, + 01372D781FF2E7B4006D41AC /* ofxColorPicker.cpp */, + 01372D6C1FF2E7B4006D41AC /* ofxColorPicker.h */, + 01372D6F1FF2E7B4006D41AC /* ofxGui.h */, + 01372D771FF2E7B4006D41AC /* ofxGuiGroup.cpp */, + 01372D721FF2E7B4006D41AC /* ofxGuiGroup.h */, + 01372D7A1FF2E7B4006D41AC /* ofxInputField.cpp */, + 01372D6D1FF2E7B4006D41AC /* ofxInputField.h */, + 01372D791FF2E7B4006D41AC /* ofxLabel.cpp */, + 01372D7C1FF2E7B5006D41AC /* ofxLabel.h */, + 01372D6E1FF2E7B4006D41AC /* ofxPanel.cpp */, + 01372D701FF2E7B4006D41AC /* ofxPanel.h */, + 01372D7B1FF2E7B5006D41AC /* ofxSlider.cpp */, + 01372D711FF2E7B4006D41AC /* ofxSlider.h */, + 01372D731FF2E7B4006D41AC /* ofxSliderGroup.cpp */, + 01372D6A1FF2E7B4006D41AC /* ofxSliderGroup.h */, + 01372D681FF2E7B4006D41AC /* ofxToggle.cpp */, + 01372D741FF2E7B4006D41AC /* ofxToggle.h */, ); name = src; path = ../../ofxGui/src; @@ -916,7 +926,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\""; + 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"; }; /* End PBXShellScriptBuildPhase section */ @@ -925,6 +935,16 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 01372D7D1FF2E7D4006D41AC /* ofxBaseGui.cpp in Sources */, + 01372D7E1FF2E7D4006D41AC /* ofxButton.cpp in Sources */, + 01372D7F1FF2E7D4006D41AC /* ofxColorPicker.cpp in Sources */, + 01372D801FF2E7D4006D41AC /* ofxGuiGroup.cpp in Sources */, + 01372D811FF2E7D4006D41AC /* ofxInputField.cpp in Sources */, + 01372D821FF2E7D4006D41AC /* ofxLabel.cpp in Sources */, + 01372D831FF2E7D4006D41AC /* ofxPanel.cpp in Sources */, + 01372D841FF2E7D4006D41AC /* ofxSlider.cpp in Sources */, + 01372D851FF2E7D4006D41AC /* ofxSliderGroup.cpp in Sources */, + 01372D861FF2E7D4006D41AC /* ofxToggle.cpp in Sources */, 010E92E21FEEEE9D0015B02B /* Vec2.cpp in Sources */, 010E92E31FEEEE9D0015B02B /* Vec3.cpp in Sources */, 01815E8C1FE7D59200C35E93 /* Application.cpp in Sources */, @@ -1005,23 +1025,15 @@ 01815ED61FE7D59200C35E93 /* CircleJoint.cpp in Sources */, 01815ED71FE7D59200C35E93 /* RadioList.cpp in Sources */, 01815ED81FE7D59200C35E93 /* HomographyHelper.cpp in Sources */, - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, 3995C20A1C79069B00123352 /* Settings.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, 399953691BD54FF600D5B1F1 /* CrossSource.cpp in Sources */, E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */, - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 2a7416f663499c024f48db250f3b1f32a4ec955c Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Thu, 28 Dec 2017 00:33:20 +0100 Subject: [PATCH 069/103] Remove glm/geometric include for oF stable --- src/Gui/Widgets/ScaleWidget.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Gui/Widgets/ScaleWidget.cpp b/src/Gui/Widgets/ScaleWidget.cpp index a4e192f..cbb3e35 100644 --- a/src/Gui/Widgets/ScaleWidget.cpp +++ b/src/Gui/Widgets/ScaleWidget.cpp @@ -1,5 +1,8 @@ #include "ScaleWidget.h" -#include "glm/geometric.hpp" + +#if OF_VERSION_MAJOR == 0 && OF_VERSION_MINOR > 9 + #include "glm/geometric.hpp" +#endif namespace ofx { namespace piMapper { From e92f95c7ef49d8cc799b2ae75ea0575cb93d98db Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sun, 31 Dec 2017 15:14:40 +0100 Subject: [PATCH 070/103] Fix warnings in magSlide regarding unhandled switch cases --- src/Sources/magSlide.cpp | 12 +++++------- src/Sources/magSlideShowSource.cpp | 6 ++++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Sources/magSlide.cpp b/src/Sources/magSlide.cpp index c334cbe..206a86c 100644 --- a/src/Sources/magSlide.cpp +++ b/src/Sources/magSlide.cpp @@ -24,8 +24,7 @@ void magSlide::update(u_int64_t deltaTime) transition->update(deltaTime); runningTime += deltaTime; - switch (slideState) - { + switch (slideState){ // case SlideState::BuildIn: // if (runningTime >= buildInDuration) // { @@ -35,20 +34,19 @@ void magSlide::update(u_int64_t deltaTime) // break; case SlideState::Normal: - if (runningTime >= buildOutStartTime) - { + if (runningTime >= buildOutStartTime){ setState(BuildOut); } break; case SlideState::BuildOut: - if (runningTime >= endTime) - { + if (runningTime >= endTime){ setState(Complete); } break; + default: + break; } - } void magSlide::setSize(float w, float h) diff --git a/src/Sources/magSlideShowSource.cpp b/src/Sources/magSlideShowSource.cpp index 6f8d9da..48b9359 100644 --- a/src/Sources/magSlideShowSource.cpp +++ b/src/Sources/magSlideShowSource.cpp @@ -323,8 +323,7 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) { } // Resize the slide according to the resize option: - switch (rOption) - { + switch (rOption){ float sw, sh, ratio; case magSlide::ResizeOptions::FitProportionally: @@ -362,6 +361,9 @@ void magSlideShowSource::addSlide(std::shared_ptr slide) { case magSlide::Fit: slide->setSize(getWidth(), getHeight()); break; + + default: + break; } // Add transitions: From ca7bfeafac916b6305e8f9b7abf6f3c06f5e7c1e Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sun, 31 Dec 2017 15:23:09 +0100 Subject: [PATCH 071/103] Fix warning "is abstract but has non-virtual destructor" --- src/Surfaces/BaseSurface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Surfaces/BaseSurface.h b/src/Surfaces/BaseSurface.h index d8f36ae..bca4ab3 100644 --- a/src/Surfaces/BaseSurface.h +++ b/src/Surfaces/BaseSurface.h @@ -15,7 +15,7 @@ class BaseSurface { public: BaseSurface(); - ~BaseSurface(); + virtual ~BaseSurface(); virtual void setup() = 0; virtual void draw() = 0; From 8cf585fb7b3a51756cfdc7ef351f97f2d928351a Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sun, 31 Dec 2017 15:31:37 +0100 Subject: [PATCH 072/103] Fix SettingsLoader::save returning void --- src/Application/SettingsLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Application/SettingsLoader.cpp b/src/Application/SettingsLoader.cpp index 4937709..098a42b 100644 --- a/src/Application/SettingsLoader.cpp +++ b/src/Application/SettingsLoader.cpp @@ -242,7 +242,7 @@ bool SettingsLoader::save(SurfaceManager & surfaceManager, std::string fileName) } // for - xmlSettings->save(fileName); + return xmlSettings->save(fileName); } bool SettingsLoader::create(std::string fileName){ From ef6ced67013c19bd3b827e22232bd2500447dd4c Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sun, 31 Dec 2017 15:32:47 +0100 Subject: [PATCH 073/103] Fix GridWarpSurface non-void functions returning void --- src/Surfaces/GridWarpSurface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Surfaces/GridWarpSurface.cpp b/src/Surfaces/GridWarpSurface.cpp index 5590915..1b98c0e 100644 --- a/src/Surfaces/GridWarpSurface.cpp +++ b/src/Surfaces/GridWarpSurface.cpp @@ -55,11 +55,13 @@ int GridWarpSurface::getGridCols(){ int GridWarpSurface::setGridRows(int r){ _gridRows = r; createGridMesh(); + return r; } int GridWarpSurface::setGridCols(int c){ _gridCols = c; createGridMesh(); + return c; } bool GridWarpSurface::hitTest(Vec2 p){ From 7392f0aec32e3ead9fc60492cf964bbdbd84aa77 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 3 Jan 2018 22:31:58 +0100 Subject: [PATCH 074/103] Add Travis config file --- .travis.yml | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9e24e2c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,199 @@ +# This file allows testing your addon using travis CI servers to use it you'll need to +# create an account in travis.org and enable your addon there. +# +# By default it will test linux 64bit and osx against the master and stable OF branches. +# Other platforms can be enabled by uncommenting the corresponding sections. +# +# If any extra install is needed to use the addon it can be included in the corresponding +# install script in: +# +# scripts/ci/$TARGET/install.sh +# + + +language: c++ +compiler: gcc +sudo: true +matrix: + include: + # fully specify builds, include can't dynamically expand matrix entries + # relative order of sudo and env is important so that addons: is recognized + +# Linux 64bit, OF master + - os: linux + dist: trusty + sudo: required + env: TARGET="linux64" OF_BRANCH="master" + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - gcc-4.9 + - g++-4.9 + - gdb + +# Linux 64bit, OF stable: Not supported yet +# - os: linux +# dist: trusty +# sudo: required +# env: TARGET="linux64" OF_BRANCH="stable" +# addons: +# apt: +# sources: +# - ubuntu-toolchain-r-test +# packages: +# - gcc-4.9 +# - g++-4.9 +# - gdb + +# OSX, OF master + - os: osx + osx_image: xcode8 + compiler: clang + env: TARGET="osx" OF_BRANCH="master" + +# OSX, OF stable: Not supported yet +# - os: osx +# osx_image: xcode8 +# compiler: clang +# env: TARGET="osx" OF_BRANCH="stable" + +# Linux ARM6, OF master: Uncomment following lines to enable +# - os: linux +# sudo: required +# dist: trusty +# env: TARGET="linuxarmv6l" OF_BRANCH="master" + + +# Linux ARM6, OF stable: Not supported yet +# - os: linux +# sudo: required +# dist: trusty +# env: TARGET="linuxarmv6l" OF_BRANCH="stable" + +# Linux ARM7, OF master: Uncomment following lines to enable +# - os: linux +# sudo: false +# env: TARGET="linuxarmv7l" OF_BRANCH="master" +# cache: +# directories: +# - ~/rpi2_toolchain +# - ~/firmware-master +# - ~/archlinux + +# Linux ARM7, OF stable: Not supported yet +# - os: linux +# sudo: false +# env: TARGET="linuxarmv7l" OF_BRANCH="stable" +# cache: +# directories: +# - ~/rpi2_toolchain +# - ~/firmware-master +# - ~/archlinux + + +# Emscripten, OF master: Uncomment following lines to enable +# - os: linux +# sudo: false +# env: TARGET="emscripten" OF_BRANCH="master" +# addons: +# apt: +# sources: +# - ubuntu-toolchain-r-test +# packages: +# - libstdc++6 + + +# Emscripten, OF stable: Not supported yet +# - os: linux +# sudo: false +# env: TARGET="emscripten" OF_BRANCH="stable" +# addons: +# apt: +# sources: +# - ubuntu-toolchain-r-test +# packages: +# - libstdc++6 + + +# iOS, OF master: Not supported yet +# - os: osx +# osx_image: xcode8 +# compiler: clang +# env: TARGET="ios" OF_BRANCH="master" + + +# iOS, OF stable: Not supported yet +# - os: osx +# osx_image: xcode8 +# compiler: clang +# env: TARGET="ios" OF_BRANCH="stable" + + +# tvOS, OF master: Not supported yet +# - os: osx +# osx_image: xcode8 +# compiler: clang +# env: TARGET="tvos" OF_BRANCH="master" + + +# tvOS, OF stable: Not supported yet +# - os: osx +# osx_image: xcode8 +# compiler: clang +# env: TARGET="tvos" OF_BRANCH="stable" + + +# Android armv7, OF master: Uncomment following lines to enable +# - os: linux +# sudo: false +# env: TARGET="android" OPT="armv7" OF_BRANCH="master" +# cache: +# directories: +# - ~/android-ndk-r12b + + +# Android armv7, OF stable: Not supported yet +# - os: linux +# sudo: false +# env: TARGET="android" OPT="armv7" OF_BRANCH="stable" +# cache: +# directories: +# - ~/android-ndk-r12b + + +# Android x86, OF master: Uncomment following lines to enable +# - os: linux +# sudo: false +# env: TARGET="android" OPT="x86" OF_BRANCH="master" +# cache: +# directories: +# - ~/android-ndk-r12b + + +# Android x86, OF stable: Not supported yet +# - os: linux +# sudo: false +# env: TARGET="android" OPT="x86" OF_BRANCH="stable" +# cache: +# directories: +# - ~/android-ndk-r12b + + + # Exclude the default build that would otherwise be generated + # see https://github.com/travis-ci/travis-ci/issues/1228 + exclude: + - compiler: gcc + +install: + - cd ~ + - git clone --depth=1 --branch=$OF_BRANCH https://github.com/openframeworks/openFrameworks + - cd openFrameworks + - scripts/ci/addons/install.sh + +script: + - scripts/ci/addons/build.sh + +git: + depth: 10 \ No newline at end of file From 6e19cf208456f3a9f9b5c39515427939f4270d0c Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 3 Jan 2018 22:34:57 +0100 Subject: [PATCH 075/103] Add Travis badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d497058..5fa591e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Build Status](https://travis-ci.org/kr15h/ofxPiMapper.svg?branch=master)](https://travis-ci.org/kr15h/ofxPiMapper) + Projection mapping addon for openFrameworks that runs on the Raspberry Pi. The project started as master's thesis project by [Krisjanis Rijnieks](https://rijnieks.com) at the [Helsinki Media Lab](https://medialab.aalto.fi/). Currently undergoing changes. Expect the API to be incompatible with your projects from the past or present-day. From 0a82df298b31eaa708cd2f3573ddaeaf3d22980b Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 3 Jan 2018 22:35:44 +0100 Subject: [PATCH 076/103] Position Travis badge --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 5fa591e..3863793 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # ofxPiMapper -[![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -[![Build Status](https://travis-ci.org/kr15h/ofxPiMapper.svg?branch=master)](https://travis-ci.org/kr15h/ofxPiMapper) +[![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)[![Build Status](https://travis-ci.org/kr15h/ofxPiMapper.svg?branch=master)](https://travis-ci.org/kr15h/ofxPiMapper) Projection mapping addon for openFrameworks that runs on the Raspberry Pi. From 159ad9395afef2e869bcbc434d13381f36e4a1b8 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 3 Jan 2018 22:36:44 +0100 Subject: [PATCH 077/103] Reposition Travis badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3863793..a90ffe1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ofxPiMapper -[![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)[![Build Status](https://travis-ci.org/kr15h/ofxPiMapper.svg?branch=master)](https://travis-ci.org/kr15h/ofxPiMapper) +[![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/kr15h/ofxPiMapper.svg?branch=master)](https://travis-ci.org/kr15h/ofxPiMapper) Projection mapping addon for openFrameworks that runs on the Raspberry Pi. From 997c38dc74d8621a1e91452671078f0584011913 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 3 Jan 2018 22:38:55 +0100 Subject: [PATCH 078/103] Add AppVeyor config file --- .appveyor.yml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .appveyor.yml diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000..f519df0 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,38 @@ +version: 1.0.{build} +os: Visual Studio 2015 RC + +environment: + global: + APPVEYOR_OS_NAME: windows + matrix: + #MSYS2 Building + - platform: x86 + BUILDER: MSYS2 + + #VisualStudio Building + - platform: x86 + BUILDER : VS + BITS: 32 + - platform: x64 + BUILDER : VS + BITS: 64 + +configuration: Debug +shallow_clone: true +clone_depth: 10 +init: +- set MSYS2_PATH=c:\msys64 +- set CHERE_INVOKING=1 +- if "%BUILDER%_%PLATFORM%"=="MSYS2_x86" set MSYSTEM=MINGW32 +- if "%BUILDER%_%PLATFORM%"=="MSYS2_x64" set MSYSTEM=MINGW64 +- if "%BUILDER%"=="VS" set PATH=C:\Program Files (x86)\MSBuild\14.0\Bin;%PATH% + +install: +- cd .. +- git clone --depth=1 --branch=master https://github.com/openframeworks/openFrameworks +- call openFrameworks\scripts\ci\addons\install.cmd + +build_script: +- cd %OF_PATH% +- scripts\ci\addons\build.cmd + From a63613ddd9ec72b0433446ae87c2b36a275a4d81 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 3 Jan 2018 22:42:07 +0100 Subject: [PATCH 079/103] Add AppVeyor badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a90ffe1..1a83ffc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ofxPiMapper -[![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/kr15h/ofxPiMapper.svg?branch=master)](https://travis-ci.org/kr15h/ofxPiMapper) +[![Join the chat at https://gitter.im/kr15h/ofxPiMapper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kr15h/ofxPiMapper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/kr15h/ofxPiMapper.svg?branch=master)](https://travis-ci.org/kr15h/ofxPiMapper) [![Build status](https://ci.appveyor.com/api/projects/status/j6mn85tt2agk4dk6?svg=true)](https://ci.appveyor.com/project/kr15h/ofxpimapper) Projection mapping addon for openFrameworks that runs on the Raspberry Pi. From 1cffa47afc7f4fdf542658679d3f870330e798e0 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:14:45 +0100 Subject: [PATCH 080/103] Remove ofxOMXPlayer from addons.make, add addons.make.rpi --- example/addons.make | 2 +- example/addons.make.rpi | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 example/addons.make.rpi diff --git a/example/addons.make b/example/addons.make index 963941c..0bf6afb 100644 --- a/example/addons.make +++ b/example/addons.make @@ -1,4 +1,4 @@ ofxGui ofxPiMapper ofxXmlSettings -ofxOMXPlayer +` diff --git a/example/addons.make.rpi b/example/addons.make.rpi new file mode 100644 index 0000000..963941c --- /dev/null +++ b/example/addons.make.rpi @@ -0,0 +1,4 @@ +ofxGui +ofxPiMapper +ofxXmlSettings +ofxOMXPlayer From 2602127d3c1e6c2b5ac92ddc7d7fed578da23a6b Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:30:50 +0100 Subject: [PATCH 081/103] Fix example_camera xcode project --- .../example_camera.xcodeproj/project.pbxproj | 1136 +++++++++-------- .../xcschemes/example_camera Debug.xcscheme | 10 +- .../xcschemes/example_camera Release.xcscheme | 10 +- 3 files changed, 612 insertions(+), 544 deletions(-) diff --git a/example_camera/example_camera.xcodeproj/project.pbxproj b/example_camera/example_camera.xcodeproj/project.pbxproj index fb93a4e..9d273fb 100644 --- a/example_camera/example_camera.xcodeproj/project.pbxproj +++ b/example_camera/example_camera.xcodeproj/project.pbxproj @@ -7,91 +7,100 @@ objects = { /* Begin PBXBuildFile section */ - 016631561DC8E8010081F28F /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B21DC8E8010081F28F /* Application.cpp */; }; - 016631571DC8E8010081F28F /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B51DC8E8010081F28F /* ApplicationBaseMode.cpp */; }; - 016631581DC8E8010081F28F /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B71DC8E8010081F28F /* PresentationMode.cpp */; }; - 016631591DC8E8010081F28F /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B91DC8E8010081F28F /* ProjectionMappingMode.cpp */; }; - 0166315A1DC8E8010081F28F /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630BB1DC8E8010081F28F /* SourceSelectionMode.cpp */; }; - 0166315B1DC8E8010081F28F /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630BD1DC8E8010081F28F /* TextureMappingMode.cpp */; }; - 0166315C1DC8E8010081F28F /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630BF1DC8E8010081F28F /* SettingsLoader.cpp */; }; - 0166315D1DC8E8010081F28F /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C21DC8E8010081F28F /* AddGridColCmd.cpp */; }; - 0166315E1DC8E8010081F28F /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C41DC8E8010081F28F /* AddGridRowCmd.cpp */; }; - 0166315F1DC8E8010081F28F /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C61DC8E8010081F28F /* AddSurfaceCmd.cpp */; }; - 016631601DC8E8010081F28F /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C91DC8E8010081F28F /* ClearSurfacesCmd.cpp */; }; - 016631611DC8E8010081F28F /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630CB1DC8E8010081F28F /* CmdManager.cpp */; }; - 016631621DC8E8010081F28F /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630CD1DC8E8010081F28F /* DeselectSurfaceCmd.cpp */; }; - 016631631DC8E8010081F28F /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630CF1DC8E8010081F28F /* DeselectTexCoordCmd.cpp */; }; - 016631641DC8E8010081F28F /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D11DC8E8010081F28F /* DuplicateSurfaceCmd.cpp */; }; - 016631651DC8E8010081F28F /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D31DC8E8010081F28F /* MvAllTexCoordsCmd.cpp */; }; - 016631661DC8E8010081F28F /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D51DC8E8010081F28F /* MvLayerDnCmd.cpp */; }; - 016631671DC8E8010081F28F /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D71DC8E8010081F28F /* MvLayerUpCmd.cpp */; }; - 016631681DC8E8010081F28F /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D91DC8E8010081F28F /* MvSelectionCmd.cpp */; }; - 016631691DC8E8010081F28F /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630DB1DC8E8010081F28F /* MvSurfaceVertCmd.cpp */; }; - 0166316A1DC8E8010081F28F /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630DD1DC8E8010081F28F /* MvTexCoordCmd.cpp */; }; - 0166316B1DC8E8010081F28F /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630DF1DC8E8010081F28F /* RmGridColCmd.cpp */; }; - 0166316C1DC8E8010081F28F /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E11DC8E8010081F28F /* RmGridRowCmd.cpp */; }; - 0166316D1DC8E8010081F28F /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E31DC8E8010081F28F /* RmSurfaceCmd.cpp */; }; - 0166316E1DC8E8010081F28F /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E51DC8E8010081F28F /* SaveTexCoordPosCmd.cpp */; }; - 0166316F1DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E71DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp */; }; - 016631701DC8E8010081F28F /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E91DC8E8010081F28F /* SelNextSurfaceCmd.cpp */; }; - 016631711DC8E8010081F28F /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630EB1DC8E8010081F28F /* SelNextTexCoordCmd.cpp */; }; - 016631721DC8E8010081F28F /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630ED1DC8E8010081F28F /* SelNextVertexCmd.cpp */; }; - 016631731DC8E8010081F28F /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630EF1DC8E8010081F28F /* SelPrevSurfaceCmd.cpp */; }; - 016631741DC8E8010081F28F /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F11DC8E8010081F28F /* SelPrevTexCoordCmd.cpp */; }; - 016631751DC8E8010081F28F /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F31DC8E8010081F28F /* SelPrevVertexCmd.cpp */; }; - 016631761DC8E8010081F28F /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F51DC8E8010081F28F /* SelSurfaceCmd.cpp */; }; - 016631771DC8E8010081F28F /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F71DC8E8010081F28F /* SelTexCoordCmd.cpp */; }; - 016631781DC8E8010081F28F /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F91DC8E8010081F28F /* SelVertexCmd.cpp */; }; - 016631791DC8E8010081F28F /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630FB1DC8E8010081F28F /* SetApplicationModeCmd.cpp */; }; - 0166317A1DC8E8010081F28F /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630FD1DC8E8010081F28F /* SetNextSourceCmd.cpp */; }; - 0166317B1DC8E8010081F28F /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630FF1DC8E8010081F28F /* SetPresetCmd.cpp */; }; - 0166317C1DC8E8010081F28F /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631011DC8E8010081F28F /* SetSourceCmd.cpp */; }; - 0166317D1DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631031DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp */; }; - 0166317E1DC8E8010081F28F /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631051DC8E8010081F28F /* StartDragSurfaceCmd.cpp */; }; - 0166317F1DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631071DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp */; }; - 016631801DC8E8010081F28F /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631091DC8E8010081F28F /* TogglePerspectiveCmd.cpp */; }; - 016631811DC8E8010081F28F /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166310B1DC8E8010081F28F /* TranslateCanvasCmd.cpp */; }; - 016631821DC8E8010081F28F /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166310E1DC8E8010081F28F /* Gui.cpp */; }; - 016631831DC8E8010081F28F /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631121DC8E8010081F28F /* LayerPanelWidget.cpp */; }; - 016631841DC8E8010081F28F /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631141DC8E8010081F28F /* ProjectionEditorWidget.cpp */; }; - 016631851DC8E8010081F28F /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631161DC8E8010081F28F /* ScaleWidget.cpp */; }; - 016631861DC8E8010081F28F /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631181DC8E8010081F28F /* SourcesEditorWidget.cpp */; }; - 016631871DC8E8010081F28F /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166311A1DC8E8010081F28F /* SurfaceHighlightWidget.cpp */; }; - 016631881DC8E8010081F28F /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166311C1DC8E8010081F28F /* TextureEditorWidget.cpp */; }; - 016631891DC8E8010081F28F /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166311E1DC8E8010081F28F /* TextureHighlightWidget.cpp */; }; - 0166318A1DC8E8010081F28F /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631211DC8E8010081F28F /* Info.cpp */; }; - 0166318B1DC8E8010081F28F /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631241DC8E8010081F28F /* DirectoryWatcher.cpp */; }; - 0166318C1DC8E8010081F28F /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631261DC8E8010081F28F /* MediaServer.cpp */; }; - 0166318D1DC8E8010081F28F /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631281DC8E8010081F28F /* ofxPiMapper.cpp */; }; - 0166318E1DC8E8010081F28F /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166312B1DC8E8010081F28F /* BaseSource.cpp */; }; - 0166318F1DC8E8010081F28F /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166312D1DC8E8010081F28F /* FboSource.cpp */; }; - 016631901DC8E8010081F28F /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166312F1DC8E8010081F28F /* ImageSource.cpp */; }; - 016631911DC8E8010081F28F /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631311DC8E8010081F28F /* OMXPlayerCache.cpp */; }; - 016631921DC8E8010081F28F /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631341DC8E8010081F28F /* VideoSource.cpp */; }; - 016631931DC8E8010081F28F /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631371DC8E8010081F28F /* BaseSurface.cpp */; }; - 016631941DC8E8010081F28F /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631391DC8E8010081F28F /* GridWarpSurface.cpp */; }; - 016631951DC8E8010081F28F /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166313B1DC8E8010081F28F /* HexagonSurface.cpp */; }; - 016631961DC8E8010081F28F /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166313D1DC8E8010081F28F /* QuadSurface.cpp */; }; - 016631971DC8E8010081F28F /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166313F1DC8E8010081F28F /* SurfaceFactory.cpp */; }; - 016631981DC8E8010081F28F /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631411DC8E8010081F28F /* SurfaceManager.cpp */; }; - 016631991DC8E8010081F28F /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631431DC8E8010081F28F /* SurfaceStack.cpp */; }; - 0166319A1DC8E8010081F28F /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631461DC8E8010081F28F /* TriangleSurface.cpp */; }; - 0166319B1DC8E8010081F28F /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631491DC8E8010081F28F /* BaseJoint.cpp */; }; - 0166319C1DC8E8010081F28F /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166314B1DC8E8010081F28F /* CircleJoint.cpp */; }; - 0166319D1DC8E8010081F28F /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166314F1DC8E8010081F28F /* RadioList.cpp */; }; - 0166319E1DC8E8010081F28F /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631521DC8E8010081F28F /* HomographyHelper.cpp */; }; + 012CB78B1FFF89C200F8F880 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6D81FFF893D00F8F880 /* Application.cpp */; }; + 012CB78C1FFF89C200F8F880 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6DB1FFF893D00F8F880 /* ApplicationBaseMode.cpp */; }; + 012CB78D1FFF89C200F8F880 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6DD1FFF893D00F8F880 /* PresentationMode.cpp */; }; + 012CB78E1FFF89C200F8F880 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6DF1FFF893D00F8F880 /* ProjectionMappingMode.cpp */; }; + 012CB78F1FFF89C200F8F880 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6E11FFF893D00F8F880 /* SourceSelectionMode.cpp */; }; + 012CB7901FFF89C200F8F880 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6E31FFF893D00F8F880 /* TextureMappingMode.cpp */; }; + 012CB7911FFF89C200F8F880 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6E51FFF893D00F8F880 /* SettingsLoader.cpp */; }; + 012CB7921FFF89C200F8F880 /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6E81FFF893D00F8F880 /* AddGridColCmd.cpp */; }; + 012CB7931FFF89C200F8F880 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6EA1FFF893D00F8F880 /* AddGridRowCmd.cpp */; }; + 012CB7941FFF89C200F8F880 /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6EC1FFF893D00F8F880 /* AddSurfaceCmd.cpp */; }; + 012CB7951FFF89C200F8F880 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6EF1FFF893D00F8F880 /* ClearSurfacesCmd.cpp */; }; + 012CB7961FFF89C200F8F880 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6F11FFF893D00F8F880 /* CmdManager.cpp */; }; + 012CB7971FFF89C200F8F880 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6F31FFF893D00F8F880 /* DeselectSurfaceCmd.cpp */; }; + 012CB7981FFF89C200F8F880 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6F51FFF893D00F8F880 /* DeselectTexCoordCmd.cpp */; }; + 012CB7991FFF89C200F8F880 /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6F71FFF893D00F8F880 /* DuplicateSurfaceCmd.cpp */; }; + 012CB79A1FFF89C200F8F880 /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6F91FFF893D00F8F880 /* MvAllTexCoordsCmd.cpp */; }; + 012CB79B1FFF89C200F8F880 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6FB1FFF893D00F8F880 /* MvLayerDnCmd.cpp */; }; + 012CB79C1FFF89C200F8F880 /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6FD1FFF893D00F8F880 /* MvLayerUpCmd.cpp */; }; + 012CB79D1FFF89C200F8F880 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB6FF1FFF893D00F8F880 /* MvSelectionCmd.cpp */; }; + 012CB79E1FFF89C200F8F880 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7011FFF893D00F8F880 /* MvSurfaceVertCmd.cpp */; }; + 012CB79F1FFF89C200F8F880 /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7031FFF893D00F8F880 /* MvTexCoordCmd.cpp */; }; + 012CB7A01FFF89C200F8F880 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7051FFF893D00F8F880 /* RmGridColCmd.cpp */; }; + 012CB7A11FFF89C200F8F880 /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7071FFF893D00F8F880 /* RmGridRowCmd.cpp */; }; + 012CB7A21FFF89C200F8F880 /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7091FFF893D00F8F880 /* RmSurfaceCmd.cpp */; }; + 012CB7A31FFF89C200F8F880 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB70B1FFF893D00F8F880 /* SaveTexCoordPosCmd.cpp */; }; + 012CB7A41FFF89C200F8F880 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB70D1FFF893D00F8F880 /* ScaleSurfaceFromToCmd.cpp */; }; + 012CB7A51FFF89C200F8F880 /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB70F1FFF893D00F8F880 /* SelNextSurfaceCmd.cpp */; }; + 012CB7A61FFF89C200F8F880 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7111FFF893D00F8F880 /* SelNextTexCoordCmd.cpp */; }; + 012CB7A71FFF89C200F8F880 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7131FFF893D00F8F880 /* SelNextVertexCmd.cpp */; }; + 012CB7A81FFF89C200F8F880 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7151FFF893D00F8F880 /* SelPrevSurfaceCmd.cpp */; }; + 012CB7A91FFF89C200F8F880 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7171FFF893D00F8F880 /* SelPrevTexCoordCmd.cpp */; }; + 012CB7AA1FFF89C200F8F880 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7191FFF893D00F8F880 /* SelPrevVertexCmd.cpp */; }; + 012CB7AB1FFF89C200F8F880 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB71B1FFF893D00F8F880 /* SelSurfaceCmd.cpp */; }; + 012CB7AC1FFF89C200F8F880 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB71D1FFF893D00F8F880 /* SelTexCoordCmd.cpp */; }; + 012CB7AD1FFF89C200F8F880 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB71F1FFF893D00F8F880 /* SelVertexCmd.cpp */; }; + 012CB7AE1FFF89C200F8F880 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7211FFF893D00F8F880 /* SetApplicationModeCmd.cpp */; }; + 012CB7AF1FFF89C200F8F880 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7231FFF893D00F8F880 /* SetNextSourceCmd.cpp */; }; + 012CB7B01FFF89C200F8F880 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7251FFF893D00F8F880 /* SetPresetCmd.cpp */; }; + 012CB7B11FFF89C200F8F880 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7271FFF893D00F8F880 /* SetSourceCmd.cpp */; }; + 012CB7B21FFF89C200F8F880 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7291FFF893D00F8F880 /* SetTexMapDrawModeCmd.cpp */; }; + 012CB7B31FFF89C200F8F880 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB72B1FFF893D00F8F880 /* StartDragSurfaceCmd.cpp */; }; + 012CB7B41FFF89C200F8F880 /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB72D1FFF893D00F8F880 /* ToggleAnimatedSourceCmd.cpp */; }; + 012CB7B51FFF89C200F8F880 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB72F1FFF893D00F8F880 /* TogglePerspectiveCmd.cpp */; }; + 012CB7B61FFF89C200F8F880 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7311FFF893D00F8F880 /* TranslateCanvasCmd.cpp */; }; + 012CB7B71FFF89C200F8F880 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7341FFF893D00F8F880 /* Gui.cpp */; }; + 012CB7B81FFF89C200F8F880 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7381FFF893D00F8F880 /* LayerPanelWidget.cpp */; }; + 012CB7B91FFF89C200F8F880 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB73A1FFF893D00F8F880 /* ProjectionEditorWidget.cpp */; }; + 012CB7BA1FFF89C200F8F880 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB73C1FFF893D00F8F880 /* ScaleWidget.cpp */; }; + 012CB7BB1FFF89C200F8F880 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB73E1FFF893D00F8F880 /* SourcesEditorWidget.cpp */; }; + 012CB7BC1FFF89C200F8F880 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7401FFF893D00F8F880 /* SurfaceHighlightWidget.cpp */; }; + 012CB7BD1FFF89C200F8F880 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7421FFF893D00F8F880 /* TextureEditorWidget.cpp */; }; + 012CB7BE1FFF89C200F8F880 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7441FFF893D00F8F880 /* TextureHighlightWidget.cpp */; }; + 012CB7BF1FFF89C200F8F880 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7471FFF893D00F8F880 /* Info.cpp */; }; + 012CB7C01FFF89C200F8F880 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB74A1FFF893D00F8F880 /* DirectoryWatcher.cpp */; }; + 012CB7C11FFF89C200F8F880 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB74C1FFF893D00F8F880 /* MediaServer.cpp */; }; + 012CB7C21FFF89C200F8F880 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB74F1FFF893D00F8F880 /* ofxPiMapper.cpp */; }; + 012CB7C31FFF89C200F8F880 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7521FFF893D00F8F880 /* BaseSource.cpp */; }; + 012CB7C41FFF89C200F8F880 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7541FFF893D00F8F880 /* FboSource.cpp */; }; + 012CB7C51FFF89C200F8F880 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7561FFF893D00F8F880 /* ImageSource.cpp */; }; + 012CB7C61FFF89C200F8F880 /* magSlide.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7581FFF893D00F8F880 /* magSlide.cpp */; }; + 012CB7C71FFF89C200F8F880 /* magSlideShowSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB75A1FFF893D00F8F880 /* magSlideShowSource.cpp */; }; + 012CB7C81FFF89C200F8F880 /* magSlideTransition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB75C1FFF893D00F8F880 /* magSlideTransition.cpp */; }; + 012CB7C91FFF89C200F8F880 /* magSlideTransitionFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB75E1FFF893D00F8F880 /* magSlideTransitionFactory.cpp */; }; + 012CB7CA1FFF89C200F8F880 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7601FFF893D00F8F880 /* OMXPlayerCache.cpp */; }; + 012CB7CB1FFF89C200F8F880 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7641FFF893D00F8F880 /* VideoSource.cpp */; }; + 012CB7CC1FFF89C200F8F880 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7671FFF893D00F8F880 /* BaseSurface.cpp */; }; + 012CB7CD1FFF89C200F8F880 /* CircleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7691FFF893D00F8F880 /* CircleSurface.cpp */; }; + 012CB7CE1FFF89C200F8F880 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB76B1FFF893D00F8F880 /* GridWarpSurface.cpp */; }; + 012CB7CF1FFF89C200F8F880 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB76D1FFF893D00F8F880 /* HexagonSurface.cpp */; }; + 012CB7D01FFF89C200F8F880 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB76F1FFF893D00F8F880 /* QuadSurface.cpp */; }; + 012CB7D11FFF89C200F8F880 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7711FFF893D00F8F880 /* SurfaceFactory.cpp */; }; + 012CB7D21FFF89C200F8F880 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7731FFF893D00F8F880 /* SurfaceManager.cpp */; }; + 012CB7D31FFF89C200F8F880 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7751FFF893D00F8F880 /* SurfaceStack.cpp */; }; + 012CB7D41FFF89C200F8F880 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7781FFF893D00F8F880 /* TriangleSurface.cpp */; }; + 012CB7D51FFF89C200F8F880 /* Vec2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB77B1FFF893D00F8F880 /* Vec2.cpp */; }; + 012CB7D61FFF89C200F8F880 /* Vec3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB77D1FFF893D00F8F880 /* Vec3.cpp */; }; + 012CB7D71FFF89C200F8F880 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7801FFF893D00F8F880 /* BaseJoint.cpp */; }; + 012CB7D81FFF89C200F8F880 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7821FFF893D00F8F880 /* CircleJoint.cpp */; }; + 012CB7D91FFF89C200F8F880 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7861FFF893D00F8F880 /* RadioList.cpp */; }; + 012CB7DA1FFF89C200F8F880 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7891FFF893D00F8F880 /* HomographyHelper.cpp */; }; + 012CB7F11FFF8A9700F8F880 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7DC1FFF8A8200F8F880 /* ofxBaseGui.cpp */; }; + 012CB7F21FFF8A9700F8F880 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7DE1FFF8A8200F8F880 /* ofxButton.cpp */; }; + 012CB7F31FFF8A9700F8F880 /* ofxColorPicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7E01FFF8A8200F8F880 /* ofxColorPicker.cpp */; }; + 012CB7F41FFF8A9700F8F880 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7E31FFF8A8200F8F880 /* ofxGuiGroup.cpp */; }; + 012CB7F51FFF8A9700F8F880 /* ofxInputField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7E51FFF8A8200F8F880 /* ofxInputField.cpp */; }; + 012CB7F61FFF8A9700F8F880 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7E71FFF8A8200F8F880 /* ofxLabel.cpp */; }; + 012CB7F71FFF8A9700F8F880 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7E91FFF8A8300F8F880 /* ofxPanel.cpp */; }; + 012CB7F81FFF8A9700F8F880 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7EB1FFF8A8300F8F880 /* ofxSlider.cpp */; }; + 012CB7F91FFF8A9700F8F880 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7ED1FFF8A8300F8F880 /* ofxSliderGroup.cpp */; }; + 012CB7FA1FFF8A9700F8F880 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7EF1FFF8A8300F8F880 /* ofxToggle.cpp */; }; 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264840192224F90008A7F5 /* tinyxmlparser.cpp */; }; - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */; }; - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */; }; - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */; }; - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */; }; - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */; }; - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; 397EFC821A09047C0009286E /* CameraSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC801A09047C0009286E /* CameraSource.cpp */; }; E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; @@ -143,182 +152,201 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0100D9421E33E6C1000D7FA5 /* Mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; - 016630B21DC8E8010081F28F /* Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; - 016630B31DC8E8010081F28F /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; - 016630B51DC8E8010081F28F /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; - 016630B61DC8E8010081F28F /* ApplicationBaseMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; - 016630B71DC8E8010081F28F /* PresentationMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; - 016630B81DC8E8010081F28F /* PresentationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; - 016630B91DC8E8010081F28F /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; - 016630BA1DC8E8010081F28F /* ProjectionMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; - 016630BB1DC8E8010081F28F /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; - 016630BC1DC8E8010081F28F /* SourceSelectionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; - 016630BD1DC8E8010081F28F /* TextureMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; - 016630BE1DC8E8010081F28F /* TextureMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; - 016630BF1DC8E8010081F28F /* SettingsLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; - 016630C01DC8E8010081F28F /* SettingsLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; - 016630C21DC8E8010081F28F /* AddGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; - 016630C31DC8E8010081F28F /* AddGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; - 016630C41DC8E8010081F28F /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; - 016630C51DC8E8010081F28F /* AddGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; - 016630C61DC8E8010081F28F /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; - 016630C71DC8E8010081F28F /* AddSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; - 016630C81DC8E8010081F28F /* BaseCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; - 016630C91DC8E8010081F28F /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; - 016630CA1DC8E8010081F28F /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; - 016630CB1DC8E8010081F28F /* CmdManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; - 016630CC1DC8E8010081F28F /* CmdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; - 016630CD1DC8E8010081F28F /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; - 016630CE1DC8E8010081F28F /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; - 016630CF1DC8E8010081F28F /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; - 016630D01DC8E8010081F28F /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; - 016630D11DC8E8010081F28F /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; - 016630D21DC8E8010081F28F /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; - 016630D31DC8E8010081F28F /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; - 016630D41DC8E8010081F28F /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; - 016630D51DC8E8010081F28F /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; - 016630D61DC8E8010081F28F /* MvLayerDnCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; - 016630D71DC8E8010081F28F /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; - 016630D81DC8E8010081F28F /* MvLayerUpCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; - 016630D91DC8E8010081F28F /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; - 016630DA1DC8E8010081F28F /* MvSelectionCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; - 016630DB1DC8E8010081F28F /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; - 016630DC1DC8E8010081F28F /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; - 016630DD1DC8E8010081F28F /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; - 016630DE1DC8E8010081F28F /* MvTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; - 016630DF1DC8E8010081F28F /* RmGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; - 016630E01DC8E8010081F28F /* RmGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; - 016630E11DC8E8010081F28F /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; - 016630E21DC8E8010081F28F /* RmGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; - 016630E31DC8E8010081F28F /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; - 016630E41DC8E8010081F28F /* RmSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; - 016630E51DC8E8010081F28F /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; - 016630E61DC8E8010081F28F /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; - 016630E71DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; - 016630E81DC8E8010081F28F /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; - 016630E91DC8E8010081F28F /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; - 016630EA1DC8E8010081F28F /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; - 016630EB1DC8E8010081F28F /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; - 016630EC1DC8E8010081F28F /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; - 016630ED1DC8E8010081F28F /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; - 016630EE1DC8E8010081F28F /* SelNextVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; - 016630EF1DC8E8010081F28F /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; - 016630F01DC8E8010081F28F /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; - 016630F11DC8E8010081F28F /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; - 016630F21DC8E8010081F28F /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; - 016630F31DC8E8010081F28F /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; - 016630F41DC8E8010081F28F /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; - 016630F51DC8E8010081F28F /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; - 016630F61DC8E8010081F28F /* SelSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; - 016630F71DC8E8010081F28F /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; - 016630F81DC8E8010081F28F /* SelTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; - 016630F91DC8E8010081F28F /* SelVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; - 016630FA1DC8E8010081F28F /* SelVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; - 016630FB1DC8E8010081F28F /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; - 016630FC1DC8E8010081F28F /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; - 016630FD1DC8E8010081F28F /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; - 016630FE1DC8E8010081F28F /* SetNextSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; - 016630FF1DC8E8010081F28F /* SetPresetCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; - 016631001DC8E8010081F28F /* SetPresetCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; - 016631011DC8E8010081F28F /* SetSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; - 016631021DC8E8010081F28F /* SetSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; - 016631031DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; - 016631041DC8E8010081F28F /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; - 016631051DC8E8010081F28F /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; - 016631061DC8E8010081F28F /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; - 016631071DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; - 016631081DC8E8010081F28F /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; - 016631091DC8E8010081F28F /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; - 0166310A1DC8E8010081F28F /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; - 0166310B1DC8E8010081F28F /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; - 0166310C1DC8E8010081F28F /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; - 0166310E1DC8E8010081F28F /* Gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; - 0166310F1DC8E8010081F28F /* Gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; - 016631111DC8E8010081F28F /* GuiBaseWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; - 016631121DC8E8010081F28F /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; - 016631131DC8E8010081F28F /* LayerPanelWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; - 016631141DC8E8010081F28F /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; - 016631151DC8E8010081F28F /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; - 016631161DC8E8010081F28F /* ScaleWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; - 016631171DC8E8010081F28F /* ScaleWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; - 016631181DC8E8010081F28F /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; - 016631191DC8E8010081F28F /* SourcesEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; - 0166311A1DC8E8010081F28F /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; - 0166311B1DC8E8010081F28F /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; - 0166311C1DC8E8010081F28F /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; - 0166311D1DC8E8010081F28F /* TextureEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; - 0166311E1DC8E8010081F28F /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; - 0166311F1DC8E8010081F28F /* TextureHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; - 016631211DC8E8010081F28F /* Info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; - 016631221DC8E8010081F28F /* Info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; - 016631241DC8E8010081F28F /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; - 016631251DC8E8010081F28F /* DirectoryWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; - 016631261DC8E8010081F28F /* MediaServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; - 016631271DC8E8010081F28F /* MediaServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; - 016631281DC8E8010081F28F /* ofxPiMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; - 016631291DC8E8010081F28F /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; - 0166312B1DC8E8010081F28F /* BaseSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; - 0166312C1DC8E8010081F28F /* BaseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; - 0166312D1DC8E8010081F28F /* FboSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; - 0166312E1DC8E8010081F28F /* FboSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; - 0166312F1DC8E8010081F28F /* ImageSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; - 016631301DC8E8010081F28F /* ImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; - 016631311DC8E8010081F28F /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; - 016631321DC8E8010081F28F /* OMXPlayerCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; - 016631331DC8E8010081F28F /* SourceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; - 016631341DC8E8010081F28F /* VideoSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; - 016631351DC8E8010081F28F /* VideoSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; - 016631371DC8E8010081F28F /* BaseSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; - 016631381DC8E8010081F28F /* BaseSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; - 016631391DC8E8010081F28F /* GridWarpSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; - 0166313A1DC8E8010081F28F /* GridWarpSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; - 0166313B1DC8E8010081F28F /* HexagonSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; - 0166313C1DC8E8010081F28F /* HexagonSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; - 0166313D1DC8E8010081F28F /* QuadSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; - 0166313E1DC8E8010081F28F /* QuadSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; - 0166313F1DC8E8010081F28F /* SurfaceFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; - 016631401DC8E8010081F28F /* SurfaceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; - 016631411DC8E8010081F28F /* SurfaceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; - 016631421DC8E8010081F28F /* SurfaceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; - 016631431DC8E8010081F28F /* SurfaceStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; - 016631441DC8E8010081F28F /* SurfaceStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; - 016631451DC8E8010081F28F /* SurfaceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; - 016631461DC8E8010081F28F /* TriangleSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; - 016631471DC8E8010081F28F /* TriangleSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; - 016631491DC8E8010081F28F /* BaseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; - 0166314A1DC8E8010081F28F /* BaseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; - 0166314B1DC8E8010081F28F /* CircleJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; - 0166314C1DC8E8010081F28F /* CircleJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; - 0166314D1DC8E8010081F28F /* EditorType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; - 0166314E1DC8E8010081F28F /* GuiMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; - 0166314F1DC8E8010081F28F /* RadioList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; - 016631501DC8E8010081F28F /* RadioList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; - 016631521DC8E8010081F28F /* HomographyHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; - 016631531DC8E8010081F28F /* HomographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; + 012CB6D81FFF893D00F8F880 /* Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; + 012CB6D91FFF893D00F8F880 /* Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; + 012CB6DB1FFF893D00F8F880 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; + 012CB6DC1FFF893D00F8F880 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; + 012CB6DD1FFF893D00F8F880 /* PresentationMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; + 012CB6DE1FFF893D00F8F880 /* PresentationMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; + 012CB6DF1FFF893D00F8F880 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; + 012CB6E01FFF893D00F8F880 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; + 012CB6E11FFF893D00F8F880 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; + 012CB6E21FFF893D00F8F880 /* SourceSelectionMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; + 012CB6E31FFF893D00F8F880 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; + 012CB6E41FFF893D00F8F880 /* TextureMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; + 012CB6E51FFF893D00F8F880 /* SettingsLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; + 012CB6E61FFF893D00F8F880 /* SettingsLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; + 012CB6E81FFF893D00F8F880 /* AddGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; + 012CB6E91FFF893D00F8F880 /* AddGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; + 012CB6EA1FFF893D00F8F880 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; + 012CB6EB1FFF893D00F8F880 /* AddGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; + 012CB6EC1FFF893D00F8F880 /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; + 012CB6ED1FFF893D00F8F880 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; + 012CB6EE1FFF893D00F8F880 /* BaseCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; + 012CB6EF1FFF893D00F8F880 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; + 012CB6F01FFF893D00F8F880 /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; + 012CB6F11FFF893D00F8F880 /* CmdManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; + 012CB6F21FFF893D00F8F880 /* CmdManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; + 012CB6F31FFF893D00F8F880 /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; + 012CB6F41FFF893D00F8F880 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; + 012CB6F51FFF893D00F8F880 /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; + 012CB6F61FFF893D00F8F880 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; + 012CB6F71FFF893D00F8F880 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; + 012CB6F81FFF893D00F8F880 /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; + 012CB6F91FFF893D00F8F880 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; + 012CB6FA1FFF893D00F8F880 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; + 012CB6FB1FFF893D00F8F880 /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; + 012CB6FC1FFF893D00F8F880 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; + 012CB6FD1FFF893D00F8F880 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; + 012CB6FE1FFF893D00F8F880 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; + 012CB6FF1FFF893D00F8F880 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; + 012CB7001FFF893D00F8F880 /* MvSelectionCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; + 012CB7011FFF893D00F8F880 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; + 012CB7021FFF893D00F8F880 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; + 012CB7031FFF893D00F8F880 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; + 012CB7041FFF893D00F8F880 /* MvTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; + 012CB7051FFF893D00F8F880 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; + 012CB7061FFF893D00F8F880 /* RmGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; + 012CB7071FFF893D00F8F880 /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; + 012CB7081FFF893D00F8F880 /* RmGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; + 012CB7091FFF893D00F8F880 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; + 012CB70A1FFF893D00F8F880 /* RmSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; + 012CB70B1FFF893D00F8F880 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; + 012CB70C1FFF893D00F8F880 /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; + 012CB70D1FFF893D00F8F880 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; + 012CB70E1FFF893D00F8F880 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; + 012CB70F1FFF893D00F8F880 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; + 012CB7101FFF893D00F8F880 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; + 012CB7111FFF893D00F8F880 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; + 012CB7121FFF893D00F8F880 /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; + 012CB7131FFF893D00F8F880 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; + 012CB7141FFF893D00F8F880 /* SelNextVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; + 012CB7151FFF893D00F8F880 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; + 012CB7161FFF893D00F8F880 /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; + 012CB7171FFF893D00F8F880 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; + 012CB7181FFF893D00F8F880 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; + 012CB7191FFF893D00F8F880 /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; + 012CB71A1FFF893D00F8F880 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; + 012CB71B1FFF893D00F8F880 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; + 012CB71C1FFF893D00F8F880 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; + 012CB71D1FFF893D00F8F880 /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; + 012CB71E1FFF893D00F8F880 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; + 012CB71F1FFF893D00F8F880 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; + 012CB7201FFF893D00F8F880 /* SelVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; + 012CB7211FFF893D00F8F880 /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; + 012CB7221FFF893D00F8F880 /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; + 012CB7231FFF893D00F8F880 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; + 012CB7241FFF893D00F8F880 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; + 012CB7251FFF893D00F8F880 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; + 012CB7261FFF893D00F8F880 /* SetPresetCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; + 012CB7271FFF893D00F8F880 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; + 012CB7281FFF893D00F8F880 /* SetSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; + 012CB7291FFF893D00F8F880 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; + 012CB72A1FFF893D00F8F880 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; + 012CB72B1FFF893D00F8F880 /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; + 012CB72C1FFF893D00F8F880 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; + 012CB72D1FFF893D00F8F880 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; + 012CB72E1FFF893D00F8F880 /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; + 012CB72F1FFF893D00F8F880 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; + 012CB7301FFF893D00F8F880 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; + 012CB7311FFF893D00F8F880 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; + 012CB7321FFF893D00F8F880 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; + 012CB7341FFF893D00F8F880 /* Gui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; + 012CB7351FFF893D00F8F880 /* Gui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; + 012CB7371FFF893D00F8F880 /* GuiBaseWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; + 012CB7381FFF893D00F8F880 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; + 012CB7391FFF893D00F8F880 /* LayerPanelWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; + 012CB73A1FFF893D00F8F880 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; + 012CB73B1FFF893D00F8F880 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; + 012CB73C1FFF893D00F8F880 /* ScaleWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; + 012CB73D1FFF893D00F8F880 /* ScaleWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; + 012CB73E1FFF893D00F8F880 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; + 012CB73F1FFF893D00F8F880 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; + 012CB7401FFF893D00F8F880 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; + 012CB7411FFF893D00F8F880 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; + 012CB7421FFF893D00F8F880 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; + 012CB7431FFF893D00F8F880 /* TextureEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; + 012CB7441FFF893D00F8F880 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; + 012CB7451FFF893D00F8F880 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; + 012CB7471FFF893D00F8F880 /* Info.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; + 012CB7481FFF893D00F8F880 /* Info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; + 012CB74A1FFF893D00F8F880 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; + 012CB74B1FFF893D00F8F880 /* DirectoryWatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; + 012CB74C1FFF893D00F8F880 /* MediaServer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; + 012CB74D1FFF893D00F8F880 /* MediaServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; + 012CB74E1FFF893D00F8F880 /* Mode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; + 012CB74F1FFF893D00F8F880 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; + 012CB7501FFF893D00F8F880 /* ofxPiMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; + 012CB7521FFF893D00F8F880 /* BaseSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; + 012CB7531FFF893D00F8F880 /* BaseSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; + 012CB7541FFF893D00F8F880 /* FboSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; + 012CB7551FFF893D00F8F880 /* FboSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; + 012CB7561FFF893D00F8F880 /* ImageSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; + 012CB7571FFF893D00F8F880 /* ImageSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; + 012CB7581FFF893D00F8F880 /* magSlide.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlide.cpp; sourceTree = ""; }; + 012CB7591FFF893D00F8F880 /* magSlide.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlide.h; sourceTree = ""; }; + 012CB75A1FFF893D00F8F880 /* magSlideShowSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideShowSource.cpp; sourceTree = ""; }; + 012CB75B1FFF893D00F8F880 /* magSlideShowSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideShowSource.h; sourceTree = ""; }; + 012CB75C1FFF893D00F8F880 /* magSlideTransition.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransition.cpp; sourceTree = ""; }; + 012CB75D1FFF893D00F8F880 /* magSlideTransition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransition.h; sourceTree = ""; }; + 012CB75E1FFF893D00F8F880 /* magSlideTransitionFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransitionFactory.cpp; sourceTree = ""; }; + 012CB75F1FFF893D00F8F880 /* magSlideTransitionFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransitionFactory.h; sourceTree = ""; }; + 012CB7601FFF893D00F8F880 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; + 012CB7611FFF893D00F8F880 /* OMXPlayerCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; + 012CB7621FFF893D00F8F880 /* SourceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; + 012CB7631FFF893D00F8F880 /* SourceTypeHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceTypeHelper.h; sourceTree = ""; }; + 012CB7641FFF893D00F8F880 /* VideoSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; + 012CB7651FFF893D00F8F880 /* VideoSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; + 012CB7671FFF893D00F8F880 /* BaseSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; + 012CB7681FFF893D00F8F880 /* BaseSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; + 012CB7691FFF893D00F8F880 /* CircleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleSurface.cpp; sourceTree = ""; }; + 012CB76A1FFF893D00F8F880 /* CircleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleSurface.h; sourceTree = ""; }; + 012CB76B1FFF893D00F8F880 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; + 012CB76C1FFF893D00F8F880 /* GridWarpSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; + 012CB76D1FFF893D00F8F880 /* HexagonSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; + 012CB76E1FFF893D00F8F880 /* HexagonSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; + 012CB76F1FFF893D00F8F880 /* QuadSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; + 012CB7701FFF893D00F8F880 /* QuadSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; + 012CB7711FFF893D00F8F880 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; + 012CB7721FFF893D00F8F880 /* SurfaceFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; + 012CB7731FFF893D00F8F880 /* SurfaceManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; + 012CB7741FFF893D00F8F880 /* SurfaceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; + 012CB7751FFF893D00F8F880 /* SurfaceStack.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; + 012CB7761FFF893D00F8F880 /* SurfaceStack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; + 012CB7771FFF893D00F8F880 /* SurfaceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; + 012CB7781FFF893D00F8F880 /* TriangleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; + 012CB7791FFF893D00F8F880 /* TriangleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; + 012CB77B1FFF893D00F8F880 /* Vec2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec2.cpp; sourceTree = ""; }; + 012CB77C1FFF893D00F8F880 /* Vec2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec2.h; sourceTree = ""; }; + 012CB77D1FFF893D00F8F880 /* Vec3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec3.cpp; sourceTree = ""; }; + 012CB77E1FFF893D00F8F880 /* Vec3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec3.h; sourceTree = ""; }; + 012CB7801FFF893D00F8F880 /* BaseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; + 012CB7811FFF893D00F8F880 /* BaseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; + 012CB7821FFF893D00F8F880 /* CircleJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; + 012CB7831FFF893D00F8F880 /* CircleJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; + 012CB7841FFF893D00F8F880 /* EditorType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; + 012CB7851FFF893D00F8F880 /* GuiMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; + 012CB7861FFF893D00F8F880 /* RadioList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; + 012CB7871FFF893D00F8F880 /* RadioList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; + 012CB7891FFF893D00F8F880 /* HomographyHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; + 012CB78A1FFF893D00F8F880 /* HomographyHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; + 012CB7DC1FFF8A8200F8F880 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; + 012CB7DD1FFF8A8200F8F880 /* ofxBaseGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; + 012CB7DE1FFF8A8200F8F880 /* ofxButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; + 012CB7DF1FFF8A8200F8F880 /* ofxButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; + 012CB7E01FFF8A8200F8F880 /* ofxColorPicker.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxColorPicker.cpp; sourceTree = ""; }; + 012CB7E11FFF8A8200F8F880 /* ofxColorPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxColorPicker.h; sourceTree = ""; }; + 012CB7E21FFF8A8200F8F880 /* ofxGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; + 012CB7E31FFF8A8200F8F880 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; + 012CB7E41FFF8A8200F8F880 /* ofxGuiGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; + 012CB7E51FFF8A8200F8F880 /* ofxInputField.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxInputField.cpp; sourceTree = ""; }; + 012CB7E61FFF8A8200F8F880 /* ofxInputField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxInputField.h; sourceTree = ""; }; + 012CB7E71FFF8A8200F8F880 /* ofxLabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; + 012CB7E81FFF8A8200F8F880 /* ofxLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; + 012CB7E91FFF8A8300F8F880 /* ofxPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; + 012CB7EA1FFF8A8300F8F880 /* ofxPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; + 012CB7EB1FFF8A8300F8F880 /* ofxSlider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; + 012CB7EC1FFF8A8300F8F880 /* ofxSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; + 012CB7ED1FFF8A8300F8F880 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; + 012CB7EE1FFF8A8300F8F880 /* ofxSliderGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; + 012CB7EF1FFF8A8300F8F880 /* ofxToggle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; + 012CB7F01FFF8A8300F8F880 /* ofxToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofxXmlSettings.cpp; path = ../../ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = ""; }; 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxXmlSettings.h; path = ../../ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = ""; }; 3926483D192224F90008A7F5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; 3926483E192224F90008A7F5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; 39264840192224F90008A7F5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; - 3933D5C519BB87BD000ACA55 /* ofxButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; - 3933D5C619BB87BD000ACA55 /* ofxGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; 397EFC801A09047C0009286E /* CameraSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CameraSource.cpp; sourceTree = ""; }; 397EFC811A09047C0009286E /* CameraSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraSource.h; sourceTree = ""; }; BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; @@ -373,255 +401,307 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 016630B01DC8E8010081F28F /* src */ = { + 012CB6D61FFF893D00F8F880 /* src */ = { isa = PBXGroup; children = ( - 016630B11DC8E8010081F28F /* Application */, - 016630C11DC8E8010081F28F /* Commands */, - 0166310D1DC8E8010081F28F /* Gui */, - 016631201DC8E8010081F28F /* Info */, - 016631231DC8E8010081F28F /* MediaServer */, - 016631281DC8E8010081F28F /* ofxPiMapper.cpp */, - 016631291DC8E8010081F28F /* ofxPiMapper.h */, - 0100D9421E33E6C1000D7FA5 /* Mode.h */, - 0166312A1DC8E8010081F28F /* Sources */, - 016631361DC8E8010081F28F /* Surfaces */, - 016631481DC8E8010081F28F /* UserInterface */, - 016631511DC8E8010081F28F /* Utils */, + 012CB6D71FFF893D00F8F880 /* Application */, + 012CB6E71FFF893D00F8F880 /* Commands */, + 012CB7331FFF893D00F8F880 /* Gui */, + 012CB7461FFF893D00F8F880 /* Info */, + 012CB7491FFF893D00F8F880 /* MediaServer */, + 012CB74E1FFF893D00F8F880 /* Mode.h */, + 012CB74F1FFF893D00F8F880 /* ofxPiMapper.cpp */, + 012CB7501FFF893D00F8F880 /* ofxPiMapper.h */, + 012CB7511FFF893D00F8F880 /* Sources */, + 012CB7661FFF893D00F8F880 /* Surfaces */, + 012CB77A1FFF893D00F8F880 /* Types */, + 012CB77F1FFF893D00F8F880 /* UserInterface */, + 012CB7881FFF893D00F8F880 /* Utils */, ); name = src; path = ../src; sourceTree = ""; }; - 016630B11DC8E8010081F28F /* Application */ = { + 012CB6D71FFF893D00F8F880 /* Application */ = { isa = PBXGroup; children = ( - 016630B21DC8E8010081F28F /* Application.cpp */, - 016630B31DC8E8010081F28F /* Application.h */, - 016630B41DC8E8010081F28F /* Modes */, - 016630BF1DC8E8010081F28F /* SettingsLoader.cpp */, - 016630C01DC8E8010081F28F /* SettingsLoader.h */, + 012CB6D81FFF893D00F8F880 /* Application.cpp */, + 012CB6D91FFF893D00F8F880 /* Application.h */, + 012CB6DA1FFF893D00F8F880 /* Modes */, + 012CB6E51FFF893D00F8F880 /* SettingsLoader.cpp */, + 012CB6E61FFF893D00F8F880 /* SettingsLoader.h */, ); path = Application; sourceTree = ""; }; - 016630B41DC8E8010081F28F /* Modes */ = { + 012CB6DA1FFF893D00F8F880 /* Modes */ = { isa = PBXGroup; children = ( - 016630B51DC8E8010081F28F /* ApplicationBaseMode.cpp */, - 016630B61DC8E8010081F28F /* ApplicationBaseMode.h */, - 016630B71DC8E8010081F28F /* PresentationMode.cpp */, - 016630B81DC8E8010081F28F /* PresentationMode.h */, - 016630B91DC8E8010081F28F /* ProjectionMappingMode.cpp */, - 016630BA1DC8E8010081F28F /* ProjectionMappingMode.h */, - 016630BB1DC8E8010081F28F /* SourceSelectionMode.cpp */, - 016630BC1DC8E8010081F28F /* SourceSelectionMode.h */, - 016630BD1DC8E8010081F28F /* TextureMappingMode.cpp */, - 016630BE1DC8E8010081F28F /* TextureMappingMode.h */, + 012CB6DB1FFF893D00F8F880 /* ApplicationBaseMode.cpp */, + 012CB6DC1FFF893D00F8F880 /* ApplicationBaseMode.h */, + 012CB6DD1FFF893D00F8F880 /* PresentationMode.cpp */, + 012CB6DE1FFF893D00F8F880 /* PresentationMode.h */, + 012CB6DF1FFF893D00F8F880 /* ProjectionMappingMode.cpp */, + 012CB6E01FFF893D00F8F880 /* ProjectionMappingMode.h */, + 012CB6E11FFF893D00F8F880 /* SourceSelectionMode.cpp */, + 012CB6E21FFF893D00F8F880 /* SourceSelectionMode.h */, + 012CB6E31FFF893D00F8F880 /* TextureMappingMode.cpp */, + 012CB6E41FFF893D00F8F880 /* TextureMappingMode.h */, ); path = Modes; sourceTree = ""; }; - 016630C11DC8E8010081F28F /* Commands */ = { + 012CB6E71FFF893D00F8F880 /* Commands */ = { isa = PBXGroup; children = ( - 016630C21DC8E8010081F28F /* AddGridColCmd.cpp */, - 016630C31DC8E8010081F28F /* AddGridColCmd.h */, - 016630C41DC8E8010081F28F /* AddGridRowCmd.cpp */, - 016630C51DC8E8010081F28F /* AddGridRowCmd.h */, - 016630C61DC8E8010081F28F /* AddSurfaceCmd.cpp */, - 016630C71DC8E8010081F28F /* AddSurfaceCmd.h */, - 016630C81DC8E8010081F28F /* BaseCmd.h */, - 016630C91DC8E8010081F28F /* ClearSurfacesCmd.cpp */, - 016630CA1DC8E8010081F28F /* ClearSurfacesCmd.h */, - 016630CB1DC8E8010081F28F /* CmdManager.cpp */, - 016630CC1DC8E8010081F28F /* CmdManager.h */, - 016630CD1DC8E8010081F28F /* DeselectSurfaceCmd.cpp */, - 016630CE1DC8E8010081F28F /* DeselectSurfaceCmd.h */, - 016630CF1DC8E8010081F28F /* DeselectTexCoordCmd.cpp */, - 016630D01DC8E8010081F28F /* DeselectTexCoordCmd.h */, - 016630D11DC8E8010081F28F /* DuplicateSurfaceCmd.cpp */, - 016630D21DC8E8010081F28F /* DuplicateSurfaceCmd.h */, - 016630D31DC8E8010081F28F /* MvAllTexCoordsCmd.cpp */, - 016630D41DC8E8010081F28F /* MvAllTexCoordsCmd.h */, - 016630D51DC8E8010081F28F /* MvLayerDnCmd.cpp */, - 016630D61DC8E8010081F28F /* MvLayerDnCmd.h */, - 016630D71DC8E8010081F28F /* MvLayerUpCmd.cpp */, - 016630D81DC8E8010081F28F /* MvLayerUpCmd.h */, - 016630D91DC8E8010081F28F /* MvSelectionCmd.cpp */, - 016630DA1DC8E8010081F28F /* MvSelectionCmd.h */, - 016630DB1DC8E8010081F28F /* MvSurfaceVertCmd.cpp */, - 016630DC1DC8E8010081F28F /* MvSurfaceVertCmd.h */, - 016630DD1DC8E8010081F28F /* MvTexCoordCmd.cpp */, - 016630DE1DC8E8010081F28F /* MvTexCoordCmd.h */, - 016630DF1DC8E8010081F28F /* RmGridColCmd.cpp */, - 016630E01DC8E8010081F28F /* RmGridColCmd.h */, - 016630E11DC8E8010081F28F /* RmGridRowCmd.cpp */, - 016630E21DC8E8010081F28F /* RmGridRowCmd.h */, - 016630E31DC8E8010081F28F /* RmSurfaceCmd.cpp */, - 016630E41DC8E8010081F28F /* RmSurfaceCmd.h */, - 016630E51DC8E8010081F28F /* SaveTexCoordPosCmd.cpp */, - 016630E61DC8E8010081F28F /* SaveTexCoordPosCmd.h */, - 016630E71DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp */, - 016630E81DC8E8010081F28F /* ScaleSurfaceFromToCmd.h */, - 016630E91DC8E8010081F28F /* SelNextSurfaceCmd.cpp */, - 016630EA1DC8E8010081F28F /* SelNextSurfaceCmd.h */, - 016630EB1DC8E8010081F28F /* SelNextTexCoordCmd.cpp */, - 016630EC1DC8E8010081F28F /* SelNextTexCoordCmd.h */, - 016630ED1DC8E8010081F28F /* SelNextVertexCmd.cpp */, - 016630EE1DC8E8010081F28F /* SelNextVertexCmd.h */, - 016630EF1DC8E8010081F28F /* SelPrevSurfaceCmd.cpp */, - 016630F01DC8E8010081F28F /* SelPrevSurfaceCmd.h */, - 016630F11DC8E8010081F28F /* SelPrevTexCoordCmd.cpp */, - 016630F21DC8E8010081F28F /* SelPrevTexCoordCmd.h */, - 016630F31DC8E8010081F28F /* SelPrevVertexCmd.cpp */, - 016630F41DC8E8010081F28F /* SelPrevVertexCmd.h */, - 016630F51DC8E8010081F28F /* SelSurfaceCmd.cpp */, - 016630F61DC8E8010081F28F /* SelSurfaceCmd.h */, - 016630F71DC8E8010081F28F /* SelTexCoordCmd.cpp */, - 016630F81DC8E8010081F28F /* SelTexCoordCmd.h */, - 016630F91DC8E8010081F28F /* SelVertexCmd.cpp */, - 016630FA1DC8E8010081F28F /* SelVertexCmd.h */, - 016630FB1DC8E8010081F28F /* SetApplicationModeCmd.cpp */, - 016630FC1DC8E8010081F28F /* SetApplicationModeCmd.h */, - 016630FD1DC8E8010081F28F /* SetNextSourceCmd.cpp */, - 016630FE1DC8E8010081F28F /* SetNextSourceCmd.h */, - 016630FF1DC8E8010081F28F /* SetPresetCmd.cpp */, - 016631001DC8E8010081F28F /* SetPresetCmd.h */, - 016631011DC8E8010081F28F /* SetSourceCmd.cpp */, - 016631021DC8E8010081F28F /* SetSourceCmd.h */, - 016631031DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp */, - 016631041DC8E8010081F28F /* SetTexMapDrawModeCmd.h */, - 016631051DC8E8010081F28F /* StartDragSurfaceCmd.cpp */, - 016631061DC8E8010081F28F /* StartDragSurfaceCmd.h */, - 016631071DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp */, - 016631081DC8E8010081F28F /* ToggleAnimatedSourceCmd.h */, - 016631091DC8E8010081F28F /* TogglePerspectiveCmd.cpp */, - 0166310A1DC8E8010081F28F /* TogglePerspectiveCmd.h */, - 0166310B1DC8E8010081F28F /* TranslateCanvasCmd.cpp */, - 0166310C1DC8E8010081F28F /* TranslateCanvasCmd.h */, + 012CB6E81FFF893D00F8F880 /* AddGridColCmd.cpp */, + 012CB6E91FFF893D00F8F880 /* AddGridColCmd.h */, + 012CB6EA1FFF893D00F8F880 /* AddGridRowCmd.cpp */, + 012CB6EB1FFF893D00F8F880 /* AddGridRowCmd.h */, + 012CB6EC1FFF893D00F8F880 /* AddSurfaceCmd.cpp */, + 012CB6ED1FFF893D00F8F880 /* AddSurfaceCmd.h */, + 012CB6EE1FFF893D00F8F880 /* BaseCmd.h */, + 012CB6EF1FFF893D00F8F880 /* ClearSurfacesCmd.cpp */, + 012CB6F01FFF893D00F8F880 /* ClearSurfacesCmd.h */, + 012CB6F11FFF893D00F8F880 /* CmdManager.cpp */, + 012CB6F21FFF893D00F8F880 /* CmdManager.h */, + 012CB6F31FFF893D00F8F880 /* DeselectSurfaceCmd.cpp */, + 012CB6F41FFF893D00F8F880 /* DeselectSurfaceCmd.h */, + 012CB6F51FFF893D00F8F880 /* DeselectTexCoordCmd.cpp */, + 012CB6F61FFF893D00F8F880 /* DeselectTexCoordCmd.h */, + 012CB6F71FFF893D00F8F880 /* DuplicateSurfaceCmd.cpp */, + 012CB6F81FFF893D00F8F880 /* DuplicateSurfaceCmd.h */, + 012CB6F91FFF893D00F8F880 /* MvAllTexCoordsCmd.cpp */, + 012CB6FA1FFF893D00F8F880 /* MvAllTexCoordsCmd.h */, + 012CB6FB1FFF893D00F8F880 /* MvLayerDnCmd.cpp */, + 012CB6FC1FFF893D00F8F880 /* MvLayerDnCmd.h */, + 012CB6FD1FFF893D00F8F880 /* MvLayerUpCmd.cpp */, + 012CB6FE1FFF893D00F8F880 /* MvLayerUpCmd.h */, + 012CB6FF1FFF893D00F8F880 /* MvSelectionCmd.cpp */, + 012CB7001FFF893D00F8F880 /* MvSelectionCmd.h */, + 012CB7011FFF893D00F8F880 /* MvSurfaceVertCmd.cpp */, + 012CB7021FFF893D00F8F880 /* MvSurfaceVertCmd.h */, + 012CB7031FFF893D00F8F880 /* MvTexCoordCmd.cpp */, + 012CB7041FFF893D00F8F880 /* MvTexCoordCmd.h */, + 012CB7051FFF893D00F8F880 /* RmGridColCmd.cpp */, + 012CB7061FFF893D00F8F880 /* RmGridColCmd.h */, + 012CB7071FFF893D00F8F880 /* RmGridRowCmd.cpp */, + 012CB7081FFF893D00F8F880 /* RmGridRowCmd.h */, + 012CB7091FFF893D00F8F880 /* RmSurfaceCmd.cpp */, + 012CB70A1FFF893D00F8F880 /* RmSurfaceCmd.h */, + 012CB70B1FFF893D00F8F880 /* SaveTexCoordPosCmd.cpp */, + 012CB70C1FFF893D00F8F880 /* SaveTexCoordPosCmd.h */, + 012CB70D1FFF893D00F8F880 /* ScaleSurfaceFromToCmd.cpp */, + 012CB70E1FFF893D00F8F880 /* ScaleSurfaceFromToCmd.h */, + 012CB70F1FFF893D00F8F880 /* SelNextSurfaceCmd.cpp */, + 012CB7101FFF893D00F8F880 /* SelNextSurfaceCmd.h */, + 012CB7111FFF893D00F8F880 /* SelNextTexCoordCmd.cpp */, + 012CB7121FFF893D00F8F880 /* SelNextTexCoordCmd.h */, + 012CB7131FFF893D00F8F880 /* SelNextVertexCmd.cpp */, + 012CB7141FFF893D00F8F880 /* SelNextVertexCmd.h */, + 012CB7151FFF893D00F8F880 /* SelPrevSurfaceCmd.cpp */, + 012CB7161FFF893D00F8F880 /* SelPrevSurfaceCmd.h */, + 012CB7171FFF893D00F8F880 /* SelPrevTexCoordCmd.cpp */, + 012CB7181FFF893D00F8F880 /* SelPrevTexCoordCmd.h */, + 012CB7191FFF893D00F8F880 /* SelPrevVertexCmd.cpp */, + 012CB71A1FFF893D00F8F880 /* SelPrevVertexCmd.h */, + 012CB71B1FFF893D00F8F880 /* SelSurfaceCmd.cpp */, + 012CB71C1FFF893D00F8F880 /* SelSurfaceCmd.h */, + 012CB71D1FFF893D00F8F880 /* SelTexCoordCmd.cpp */, + 012CB71E1FFF893D00F8F880 /* SelTexCoordCmd.h */, + 012CB71F1FFF893D00F8F880 /* SelVertexCmd.cpp */, + 012CB7201FFF893D00F8F880 /* SelVertexCmd.h */, + 012CB7211FFF893D00F8F880 /* SetApplicationModeCmd.cpp */, + 012CB7221FFF893D00F8F880 /* SetApplicationModeCmd.h */, + 012CB7231FFF893D00F8F880 /* SetNextSourceCmd.cpp */, + 012CB7241FFF893D00F8F880 /* SetNextSourceCmd.h */, + 012CB7251FFF893D00F8F880 /* SetPresetCmd.cpp */, + 012CB7261FFF893D00F8F880 /* SetPresetCmd.h */, + 012CB7271FFF893D00F8F880 /* SetSourceCmd.cpp */, + 012CB7281FFF893D00F8F880 /* SetSourceCmd.h */, + 012CB7291FFF893D00F8F880 /* SetTexMapDrawModeCmd.cpp */, + 012CB72A1FFF893D00F8F880 /* SetTexMapDrawModeCmd.h */, + 012CB72B1FFF893D00F8F880 /* StartDragSurfaceCmd.cpp */, + 012CB72C1FFF893D00F8F880 /* StartDragSurfaceCmd.h */, + 012CB72D1FFF893D00F8F880 /* ToggleAnimatedSourceCmd.cpp */, + 012CB72E1FFF893D00F8F880 /* ToggleAnimatedSourceCmd.h */, + 012CB72F1FFF893D00F8F880 /* TogglePerspectiveCmd.cpp */, + 012CB7301FFF893D00F8F880 /* TogglePerspectiveCmd.h */, + 012CB7311FFF893D00F8F880 /* TranslateCanvasCmd.cpp */, + 012CB7321FFF893D00F8F880 /* TranslateCanvasCmd.h */, ); path = Commands; sourceTree = ""; }; - 0166310D1DC8E8010081F28F /* Gui */ = { + 012CB7331FFF893D00F8F880 /* Gui */ = { isa = PBXGroup; children = ( - 0166310E1DC8E8010081F28F /* Gui.cpp */, - 0166310F1DC8E8010081F28F /* Gui.h */, - 016631101DC8E8010081F28F /* Widgets */, + 012CB7341FFF893D00F8F880 /* Gui.cpp */, + 012CB7351FFF893D00F8F880 /* Gui.h */, + 012CB7361FFF893D00F8F880 /* Widgets */, ); path = Gui; sourceTree = ""; }; - 016631101DC8E8010081F28F /* Widgets */ = { + 012CB7361FFF893D00F8F880 /* Widgets */ = { isa = PBXGroup; children = ( - 016631111DC8E8010081F28F /* GuiBaseWidget.h */, - 016631121DC8E8010081F28F /* LayerPanelWidget.cpp */, - 016631131DC8E8010081F28F /* LayerPanelWidget.h */, - 016631141DC8E8010081F28F /* ProjectionEditorWidget.cpp */, - 016631151DC8E8010081F28F /* ProjectionEditorWidget.h */, - 016631161DC8E8010081F28F /* ScaleWidget.cpp */, - 016631171DC8E8010081F28F /* ScaleWidget.h */, - 016631181DC8E8010081F28F /* SourcesEditorWidget.cpp */, - 016631191DC8E8010081F28F /* SourcesEditorWidget.h */, - 0166311A1DC8E8010081F28F /* SurfaceHighlightWidget.cpp */, - 0166311B1DC8E8010081F28F /* SurfaceHighlightWidget.h */, - 0166311C1DC8E8010081F28F /* TextureEditorWidget.cpp */, - 0166311D1DC8E8010081F28F /* TextureEditorWidget.h */, - 0166311E1DC8E8010081F28F /* TextureHighlightWidget.cpp */, - 0166311F1DC8E8010081F28F /* TextureHighlightWidget.h */, + 012CB7371FFF893D00F8F880 /* GuiBaseWidget.h */, + 012CB7381FFF893D00F8F880 /* LayerPanelWidget.cpp */, + 012CB7391FFF893D00F8F880 /* LayerPanelWidget.h */, + 012CB73A1FFF893D00F8F880 /* ProjectionEditorWidget.cpp */, + 012CB73B1FFF893D00F8F880 /* ProjectionEditorWidget.h */, + 012CB73C1FFF893D00F8F880 /* ScaleWidget.cpp */, + 012CB73D1FFF893D00F8F880 /* ScaleWidget.h */, + 012CB73E1FFF893D00F8F880 /* SourcesEditorWidget.cpp */, + 012CB73F1FFF893D00F8F880 /* SourcesEditorWidget.h */, + 012CB7401FFF893D00F8F880 /* SurfaceHighlightWidget.cpp */, + 012CB7411FFF893D00F8F880 /* SurfaceHighlightWidget.h */, + 012CB7421FFF893D00F8F880 /* TextureEditorWidget.cpp */, + 012CB7431FFF893D00F8F880 /* TextureEditorWidget.h */, + 012CB7441FFF893D00F8F880 /* TextureHighlightWidget.cpp */, + 012CB7451FFF893D00F8F880 /* TextureHighlightWidget.h */, ); path = Widgets; sourceTree = ""; }; - 016631201DC8E8010081F28F /* Info */ = { + 012CB7461FFF893D00F8F880 /* Info */ = { isa = PBXGroup; children = ( - 016631211DC8E8010081F28F /* Info.cpp */, - 016631221DC8E8010081F28F /* Info.h */, + 012CB7471FFF893D00F8F880 /* Info.cpp */, + 012CB7481FFF893D00F8F880 /* Info.h */, ); path = Info; sourceTree = ""; }; - 016631231DC8E8010081F28F /* MediaServer */ = { + 012CB7491FFF893D00F8F880 /* MediaServer */ = { isa = PBXGroup; children = ( - 016631241DC8E8010081F28F /* DirectoryWatcher.cpp */, - 016631251DC8E8010081F28F /* DirectoryWatcher.h */, - 016631261DC8E8010081F28F /* MediaServer.cpp */, - 016631271DC8E8010081F28F /* MediaServer.h */, + 012CB74A1FFF893D00F8F880 /* DirectoryWatcher.cpp */, + 012CB74B1FFF893D00F8F880 /* DirectoryWatcher.h */, + 012CB74C1FFF893D00F8F880 /* MediaServer.cpp */, + 012CB74D1FFF893D00F8F880 /* MediaServer.h */, ); path = MediaServer; sourceTree = ""; }; - 0166312A1DC8E8010081F28F /* Sources */ = { + 012CB7511FFF893D00F8F880 /* Sources */ = { isa = PBXGroup; children = ( - 0166312B1DC8E8010081F28F /* BaseSource.cpp */, - 0166312C1DC8E8010081F28F /* BaseSource.h */, - 0166312D1DC8E8010081F28F /* FboSource.cpp */, - 0166312E1DC8E8010081F28F /* FboSource.h */, - 0166312F1DC8E8010081F28F /* ImageSource.cpp */, - 016631301DC8E8010081F28F /* ImageSource.h */, - 016631311DC8E8010081F28F /* OMXPlayerCache.cpp */, - 016631321DC8E8010081F28F /* OMXPlayerCache.h */, - 016631331DC8E8010081F28F /* SourceType.h */, - 016631341DC8E8010081F28F /* VideoSource.cpp */, - 016631351DC8E8010081F28F /* VideoSource.h */, + 012CB7521FFF893D00F8F880 /* BaseSource.cpp */, + 012CB7531FFF893D00F8F880 /* BaseSource.h */, + 012CB7541FFF893D00F8F880 /* FboSource.cpp */, + 012CB7551FFF893D00F8F880 /* FboSource.h */, + 012CB7561FFF893D00F8F880 /* ImageSource.cpp */, + 012CB7571FFF893D00F8F880 /* ImageSource.h */, + 012CB7581FFF893D00F8F880 /* magSlide.cpp */, + 012CB7591FFF893D00F8F880 /* magSlide.h */, + 012CB75A1FFF893D00F8F880 /* magSlideShowSource.cpp */, + 012CB75B1FFF893D00F8F880 /* magSlideShowSource.h */, + 012CB75C1FFF893D00F8F880 /* magSlideTransition.cpp */, + 012CB75D1FFF893D00F8F880 /* magSlideTransition.h */, + 012CB75E1FFF893D00F8F880 /* magSlideTransitionFactory.cpp */, + 012CB75F1FFF893D00F8F880 /* magSlideTransitionFactory.h */, + 012CB7601FFF893D00F8F880 /* OMXPlayerCache.cpp */, + 012CB7611FFF893D00F8F880 /* OMXPlayerCache.h */, + 012CB7621FFF893D00F8F880 /* SourceType.h */, + 012CB7631FFF893D00F8F880 /* SourceTypeHelper.h */, + 012CB7641FFF893D00F8F880 /* VideoSource.cpp */, + 012CB7651FFF893D00F8F880 /* VideoSource.h */, ); path = Sources; sourceTree = ""; }; - 016631361DC8E8010081F28F /* Surfaces */ = { + 012CB7661FFF893D00F8F880 /* Surfaces */ = { isa = PBXGroup; children = ( - 016631371DC8E8010081F28F /* BaseSurface.cpp */, - 016631381DC8E8010081F28F /* BaseSurface.h */, - 016631391DC8E8010081F28F /* GridWarpSurface.cpp */, - 0166313A1DC8E8010081F28F /* GridWarpSurface.h */, - 0166313B1DC8E8010081F28F /* HexagonSurface.cpp */, - 0166313C1DC8E8010081F28F /* HexagonSurface.h */, - 0166313D1DC8E8010081F28F /* QuadSurface.cpp */, - 0166313E1DC8E8010081F28F /* QuadSurface.h */, - 0166313F1DC8E8010081F28F /* SurfaceFactory.cpp */, - 016631401DC8E8010081F28F /* SurfaceFactory.h */, - 016631411DC8E8010081F28F /* SurfaceManager.cpp */, - 016631421DC8E8010081F28F /* SurfaceManager.h */, - 016631431DC8E8010081F28F /* SurfaceStack.cpp */, - 016631441DC8E8010081F28F /* SurfaceStack.h */, - 016631451DC8E8010081F28F /* SurfaceType.h */, - 016631461DC8E8010081F28F /* TriangleSurface.cpp */, - 016631471DC8E8010081F28F /* TriangleSurface.h */, + 012CB7671FFF893D00F8F880 /* BaseSurface.cpp */, + 012CB7681FFF893D00F8F880 /* BaseSurface.h */, + 012CB7691FFF893D00F8F880 /* CircleSurface.cpp */, + 012CB76A1FFF893D00F8F880 /* CircleSurface.h */, + 012CB76B1FFF893D00F8F880 /* GridWarpSurface.cpp */, + 012CB76C1FFF893D00F8F880 /* GridWarpSurface.h */, + 012CB76D1FFF893D00F8F880 /* HexagonSurface.cpp */, + 012CB76E1FFF893D00F8F880 /* HexagonSurface.h */, + 012CB76F1FFF893D00F8F880 /* QuadSurface.cpp */, + 012CB7701FFF893D00F8F880 /* QuadSurface.h */, + 012CB7711FFF893D00F8F880 /* SurfaceFactory.cpp */, + 012CB7721FFF893D00F8F880 /* SurfaceFactory.h */, + 012CB7731FFF893D00F8F880 /* SurfaceManager.cpp */, + 012CB7741FFF893D00F8F880 /* SurfaceManager.h */, + 012CB7751FFF893D00F8F880 /* SurfaceStack.cpp */, + 012CB7761FFF893D00F8F880 /* SurfaceStack.h */, + 012CB7771FFF893D00F8F880 /* SurfaceType.h */, + 012CB7781FFF893D00F8F880 /* TriangleSurface.cpp */, + 012CB7791FFF893D00F8F880 /* TriangleSurface.h */, ); path = Surfaces; sourceTree = ""; }; - 016631481DC8E8010081F28F /* UserInterface */ = { + 012CB77A1FFF893D00F8F880 /* Types */ = { isa = PBXGroup; children = ( - 016631491DC8E8010081F28F /* BaseJoint.cpp */, - 0166314A1DC8E8010081F28F /* BaseJoint.h */, - 0166314B1DC8E8010081F28F /* CircleJoint.cpp */, - 0166314C1DC8E8010081F28F /* CircleJoint.h */, - 0166314D1DC8E8010081F28F /* EditorType.h */, - 0166314E1DC8E8010081F28F /* GuiMode.h */, - 0166314F1DC8E8010081F28F /* RadioList.cpp */, - 016631501DC8E8010081F28F /* RadioList.h */, + 012CB77B1FFF893D00F8F880 /* Vec2.cpp */, + 012CB77C1FFF893D00F8F880 /* Vec2.h */, + 012CB77D1FFF893D00F8F880 /* Vec3.cpp */, + 012CB77E1FFF893D00F8F880 /* Vec3.h */, + ); + path = Types; + sourceTree = ""; + }; + 012CB77F1FFF893D00F8F880 /* UserInterface */ = { + isa = PBXGroup; + children = ( + 012CB7801FFF893D00F8F880 /* BaseJoint.cpp */, + 012CB7811FFF893D00F8F880 /* BaseJoint.h */, + 012CB7821FFF893D00F8F880 /* CircleJoint.cpp */, + 012CB7831FFF893D00F8F880 /* CircleJoint.h */, + 012CB7841FFF893D00F8F880 /* EditorType.h */, + 012CB7851FFF893D00F8F880 /* GuiMode.h */, + 012CB7861FFF893D00F8F880 /* RadioList.cpp */, + 012CB7871FFF893D00F8F880 /* RadioList.h */, ); path = UserInterface; sourceTree = ""; }; - 016631511DC8E8010081F28F /* Utils */ = { + 012CB7881FFF893D00F8F880 /* Utils */ = { isa = PBXGroup; children = ( - 016631521DC8E8010081F28F /* HomographyHelper.cpp */, - 016631531DC8E8010081F28F /* HomographyHelper.h */, + 012CB7891FFF893D00F8F880 /* HomographyHelper.cpp */, + 012CB78A1FFF893D00F8F880 /* HomographyHelper.h */, ); path = Utils; sourceTree = ""; }; + 012CB7DB1FFF8A8200F8F880 /* src */ = { + isa = PBXGroup; + children = ( + 012CB7DC1FFF8A8200F8F880 /* ofxBaseGui.cpp */, + 012CB7DD1FFF8A8200F8F880 /* ofxBaseGui.h */, + 012CB7DE1FFF8A8200F8F880 /* ofxButton.cpp */, + 012CB7DF1FFF8A8200F8F880 /* ofxButton.h */, + 012CB7E01FFF8A8200F8F880 /* ofxColorPicker.cpp */, + 012CB7E11FFF8A8200F8F880 /* ofxColorPicker.h */, + 012CB7E21FFF8A8200F8F880 /* ofxGui.h */, + 012CB7E31FFF8A8200F8F880 /* ofxGuiGroup.cpp */, + 012CB7E41FFF8A8200F8F880 /* ofxGuiGroup.h */, + 012CB7E51FFF8A8200F8F880 /* ofxInputField.cpp */, + 012CB7E61FFF8A8200F8F880 /* ofxInputField.h */, + 012CB7E71FFF8A8200F8F880 /* ofxLabel.cpp */, + 012CB7E81FFF8A8200F8F880 /* ofxLabel.h */, + 012CB7E91FFF8A8300F8F880 /* ofxPanel.cpp */, + 012CB7EA1FFF8A8300F8F880 /* ofxPanel.h */, + 012CB7EB1FFF8A8300F8F880 /* ofxSlider.cpp */, + 012CB7EC1FFF8A8300F8F880 /* ofxSlider.h */, + 012CB7ED1FFF8A8300F8F880 /* ofxSliderGroup.cpp */, + 012CB7EE1FFF8A8300F8F880 /* ofxSliderGroup.h */, + 012CB7EF1FFF8A8300F8F880 /* ofxToggle.cpp */, + 012CB7F01FFF8A8300F8F880 /* ofxToggle.h */, + ); + name = src; + path = ../../ofxGui/src; + sourceTree = ""; + }; 39264837192224C20008A7F5 /* ofxXmlSettings */ = { isa = PBXGroup; children = ( @@ -655,40 +735,15 @@ 3933D5C019BB87A3000ACA55 /* ofxGui */ = { isa = PBXGroup; children = ( - 3933D5C119BB87BD000ACA55 /* src */, + 012CB7DB1FFF8A8200F8F880 /* src */, ); name = ofxGui; sourceTree = ""; }; - 3933D5C119BB87BD000ACA55 /* src */ = { - isa = PBXGroup; - children = ( - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */, - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */, - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */, - 3933D5C519BB87BD000ACA55 /* ofxButton.h */, - 3933D5C619BB87BD000ACA55 /* ofxGui.h */, - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */, - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */, - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */, - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */, - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */, - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */, - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */, - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */, - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */, - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */, - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */, - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */, - ); - name = src; - path = ../../ofxGui/src; - sourceTree = ""; - }; 396E8A34190FEDE500705899 /* ofxPiMapper */ = { isa = PBXGroup; children = ( - 016630B01DC8E8010081F28F /* src */, + 012CB6D61FFF893D00F8F880 /* src */, ); name = ofxPiMapper; sourceTree = ""; @@ -861,7 +916,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\""; + 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"; }; /* End PBXShellScriptBuildPhase section */ @@ -870,94 +925,103 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0166316B1DC8E8010081F28F /* RmGridColCmd.cpp in Sources */, - 016631601DC8E8010081F28F /* ClearSurfacesCmd.cpp in Sources */, - 016631581DC8E8010081F28F /* PresentationMode.cpp in Sources */, - 016631791DC8E8010081F28F /* SetApplicationModeCmd.cpp in Sources */, - 0166317B1DC8E8010081F28F /* SetPresetCmd.cpp in Sources */, - 016631921DC8E8010081F28F /* VideoSource.cpp in Sources */, - 016631981DC8E8010081F28F /* SurfaceManager.cpp in Sources */, - 016631561DC8E8010081F28F /* Application.cpp in Sources */, - 016631851DC8E8010081F28F /* ScaleWidget.cpp in Sources */, - 016631711DC8E8010081F28F /* SelNextTexCoordCmd.cpp in Sources */, - 016631691DC8E8010081F28F /* MvSurfaceVertCmd.cpp in Sources */, - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, - 016631771DC8E8010081F28F /* SelTexCoordCmd.cpp in Sources */, - 0166315C1DC8E8010081F28F /* SettingsLoader.cpp in Sources */, - 016631881DC8E8010081F28F /* TextureEditorWidget.cpp in Sources */, - 016631841DC8E8010081F28F /* ProjectionEditorWidget.cpp in Sources */, - 0166315B1DC8E8010081F28F /* TextureMappingMode.cpp in Sources */, - 0166318D1DC8E8010081F28F /* ofxPiMapper.cpp in Sources */, - 0166318A1DC8E8010081F28F /* Info.cpp in Sources */, - 016631931DC8E8010081F28F /* BaseSurface.cpp in Sources */, - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, - 0166319D1DC8E8010081F28F /* RadioList.cpp in Sources */, - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, - 0166316F1DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */, - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, - 016631721DC8E8010081F28F /* SelNextVertexCmd.cpp in Sources */, - 016631801DC8E8010081F28F /* TogglePerspectiveCmd.cpp in Sources */, - 016631901DC8E8010081F28F /* ImageSource.cpp in Sources */, - 016631761DC8E8010081F28F /* SelSurfaceCmd.cpp in Sources */, - 016631571DC8E8010081F28F /* ApplicationBaseMode.cpp in Sources */, + 012CB7F11FFF8A9700F8F880 /* ofxBaseGui.cpp in Sources */, + 012CB7F21FFF8A9700F8F880 /* ofxButton.cpp in Sources */, + 012CB7F31FFF8A9700F8F880 /* ofxColorPicker.cpp in Sources */, + 012CB7F41FFF8A9700F8F880 /* ofxGuiGroup.cpp in Sources */, + 012CB7F51FFF8A9700F8F880 /* ofxInputField.cpp in Sources */, + 012CB7F61FFF8A9700F8F880 /* ofxLabel.cpp in Sources */, + 012CB7F71FFF8A9700F8F880 /* ofxPanel.cpp in Sources */, + 012CB7F81FFF8A9700F8F880 /* ofxSlider.cpp in Sources */, + 012CB7F91FFF8A9700F8F880 /* ofxSliderGroup.cpp in Sources */, + 012CB7FA1FFF8A9700F8F880 /* ofxToggle.cpp in Sources */, + 012CB78B1FFF89C200F8F880 /* Application.cpp in Sources */, + 012CB78C1FFF89C200F8F880 /* ApplicationBaseMode.cpp in Sources */, + 012CB78D1FFF89C200F8F880 /* PresentationMode.cpp in Sources */, + 012CB78E1FFF89C200F8F880 /* ProjectionMappingMode.cpp in Sources */, + 012CB78F1FFF89C200F8F880 /* SourceSelectionMode.cpp in Sources */, + 012CB7901FFF89C200F8F880 /* TextureMappingMode.cpp in Sources */, + 012CB7911FFF89C200F8F880 /* SettingsLoader.cpp in Sources */, + 012CB7921FFF89C200F8F880 /* AddGridColCmd.cpp in Sources */, + 012CB7931FFF89C200F8F880 /* AddGridRowCmd.cpp in Sources */, + 012CB7941FFF89C200F8F880 /* AddSurfaceCmd.cpp in Sources */, + 012CB7951FFF89C200F8F880 /* ClearSurfacesCmd.cpp in Sources */, + 012CB7961FFF89C200F8F880 /* CmdManager.cpp in Sources */, + 012CB7971FFF89C200F8F880 /* DeselectSurfaceCmd.cpp in Sources */, + 012CB7981FFF89C200F8F880 /* DeselectTexCoordCmd.cpp in Sources */, + 012CB7991FFF89C200F8F880 /* DuplicateSurfaceCmd.cpp in Sources */, + 012CB79A1FFF89C200F8F880 /* MvAllTexCoordsCmd.cpp in Sources */, + 012CB79B1FFF89C200F8F880 /* MvLayerDnCmd.cpp in Sources */, + 012CB79C1FFF89C200F8F880 /* MvLayerUpCmd.cpp in Sources */, + 012CB79D1FFF89C200F8F880 /* MvSelectionCmd.cpp in Sources */, + 012CB79E1FFF89C200F8F880 /* MvSurfaceVertCmd.cpp in Sources */, + 012CB79F1FFF89C200F8F880 /* MvTexCoordCmd.cpp in Sources */, + 012CB7A01FFF89C200F8F880 /* RmGridColCmd.cpp in Sources */, + 012CB7A11FFF89C200F8F880 /* RmGridRowCmd.cpp in Sources */, + 012CB7A21FFF89C200F8F880 /* RmSurfaceCmd.cpp in Sources */, + 012CB7A31FFF89C200F8F880 /* SaveTexCoordPosCmd.cpp in Sources */, + 012CB7A41FFF89C200F8F880 /* ScaleSurfaceFromToCmd.cpp in Sources */, + 012CB7A51FFF89C200F8F880 /* SelNextSurfaceCmd.cpp in Sources */, + 012CB7A61FFF89C200F8F880 /* SelNextTexCoordCmd.cpp in Sources */, + 012CB7A71FFF89C200F8F880 /* SelNextVertexCmd.cpp in Sources */, + 012CB7A81FFF89C200F8F880 /* SelPrevSurfaceCmd.cpp in Sources */, + 012CB7A91FFF89C200F8F880 /* SelPrevTexCoordCmd.cpp in Sources */, + 012CB7AA1FFF89C200F8F880 /* SelPrevVertexCmd.cpp in Sources */, + 012CB7AB1FFF89C200F8F880 /* SelSurfaceCmd.cpp in Sources */, + 012CB7AC1FFF89C200F8F880 /* SelTexCoordCmd.cpp in Sources */, + 012CB7AD1FFF89C200F8F880 /* SelVertexCmd.cpp in Sources */, + 012CB7AE1FFF89C200F8F880 /* SetApplicationModeCmd.cpp in Sources */, + 012CB7AF1FFF89C200F8F880 /* SetNextSourceCmd.cpp in Sources */, + 012CB7B01FFF89C200F8F880 /* SetPresetCmd.cpp in Sources */, + 012CB7B11FFF89C200F8F880 /* SetSourceCmd.cpp in Sources */, + 012CB7B21FFF89C200F8F880 /* SetTexMapDrawModeCmd.cpp in Sources */, + 012CB7B31FFF89C200F8F880 /* StartDragSurfaceCmd.cpp in Sources */, + 012CB7B41FFF89C200F8F880 /* ToggleAnimatedSourceCmd.cpp in Sources */, + 012CB7B51FFF89C200F8F880 /* TogglePerspectiveCmd.cpp in Sources */, + 012CB7B61FFF89C200F8F880 /* TranslateCanvasCmd.cpp in Sources */, + 012CB7B71FFF89C200F8F880 /* Gui.cpp in Sources */, + 012CB7B81FFF89C200F8F880 /* LayerPanelWidget.cpp in Sources */, + 012CB7B91FFF89C200F8F880 /* ProjectionEditorWidget.cpp in Sources */, + 012CB7BA1FFF89C200F8F880 /* ScaleWidget.cpp in Sources */, + 012CB7BB1FFF89C200F8F880 /* SourcesEditorWidget.cpp in Sources */, + 012CB7BC1FFF89C200F8F880 /* SurfaceHighlightWidget.cpp in Sources */, + 012CB7BD1FFF89C200F8F880 /* TextureEditorWidget.cpp in Sources */, + 012CB7BE1FFF89C200F8F880 /* TextureHighlightWidget.cpp in Sources */, + 012CB7BF1FFF89C200F8F880 /* Info.cpp in Sources */, + 012CB7C01FFF89C200F8F880 /* DirectoryWatcher.cpp in Sources */, + 012CB7C11FFF89C200F8F880 /* MediaServer.cpp in Sources */, + 012CB7C21FFF89C200F8F880 /* ofxPiMapper.cpp in Sources */, + 012CB7C31FFF89C200F8F880 /* BaseSource.cpp in Sources */, + 012CB7C41FFF89C200F8F880 /* FboSource.cpp in Sources */, + 012CB7C51FFF89C200F8F880 /* ImageSource.cpp in Sources */, + 012CB7C61FFF89C200F8F880 /* magSlide.cpp in Sources */, + 012CB7C71FFF89C200F8F880 /* magSlideShowSource.cpp in Sources */, + 012CB7C81FFF89C200F8F880 /* magSlideTransition.cpp in Sources */, + 012CB7C91FFF89C200F8F880 /* magSlideTransitionFactory.cpp in Sources */, + 012CB7CA1FFF89C200F8F880 /* OMXPlayerCache.cpp in Sources */, + 012CB7CB1FFF89C200F8F880 /* VideoSource.cpp in Sources */, + 012CB7CC1FFF89C200F8F880 /* BaseSurface.cpp in Sources */, + 012CB7CD1FFF89C200F8F880 /* CircleSurface.cpp in Sources */, + 012CB7CE1FFF89C200F8F880 /* GridWarpSurface.cpp in Sources */, + 012CB7CF1FFF89C200F8F880 /* HexagonSurface.cpp in Sources */, + 012CB7D01FFF89C200F8F880 /* QuadSurface.cpp in Sources */, + 012CB7D11FFF89C200F8F880 /* SurfaceFactory.cpp in Sources */, + 012CB7D21FFF89C200F8F880 /* SurfaceManager.cpp in Sources */, + 012CB7D31FFF89C200F8F880 /* SurfaceStack.cpp in Sources */, + 012CB7D41FFF89C200F8F880 /* TriangleSurface.cpp in Sources */, + 012CB7D51FFF89C200F8F880 /* Vec2.cpp in Sources */, + 012CB7D61FFF89C200F8F880 /* Vec3.cpp in Sources */, + 012CB7D71FFF89C200F8F880 /* BaseJoint.cpp in Sources */, + 012CB7D81FFF89C200F8F880 /* CircleJoint.cpp in Sources */, + 012CB7D91FFF89C200F8F880 /* RadioList.cpp in Sources */, + 012CB7DA1FFF89C200F8F880 /* HomographyHelper.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, - 016631941DC8E8010081F28F /* GridWarpSurface.cpp in Sources */, - 0166315A1DC8E8010081F28F /* SourceSelectionMode.cpp in Sources */, - 016631661DC8E8010081F28F /* MvLayerDnCmd.cpp in Sources */, - 0166319E1DC8E8010081F28F /* HomographyHelper.cpp in Sources */, 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, - 016631971DC8E8010081F28F /* SurfaceFactory.cpp in Sources */, - 016631591DC8E8010081F28F /* ProjectionMappingMode.cpp in Sources */, - 0166316D1DC8E8010081F28F /* RmSurfaceCmd.cpp in Sources */, - 016631741DC8E8010081F28F /* SelPrevTexCoordCmd.cpp in Sources */, - 016631861DC8E8010081F28F /* SourcesEditorWidget.cpp in Sources */, - 016631611DC8E8010081F28F /* CmdManager.cpp in Sources */, - 0166318B1DC8E8010081F28F /* DirectoryWatcher.cpp in Sources */, - 0166316A1DC8E8010081F28F /* MvTexCoordCmd.cpp in Sources */, 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, - 016631651DC8E8010081F28F /* MvAllTexCoordsCmd.cpp in Sources */, - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, - 0166317F1DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */, - 016631751DC8E8010081F28F /* SelPrevVertexCmd.cpp in Sources */, - 0166317E1DC8E8010081F28F /* StartDragSurfaceCmd.cpp in Sources */, - 016631871DC8E8010081F28F /* SurfaceHighlightWidget.cpp in Sources */, - 016631731DC8E8010081F28F /* SelPrevSurfaceCmd.cpp in Sources */, - 0166318F1DC8E8010081F28F /* FboSource.cpp in Sources */, - 016631681DC8E8010081F28F /* MvSelectionCmd.cpp in Sources */, - 016631821DC8E8010081F28F /* Gui.cpp in Sources */, - 016631701DC8E8010081F28F /* SelNextSurfaceCmd.cpp in Sources */, - 0166319C1DC8E8010081F28F /* CircleJoint.cpp in Sources */, - 0166317A1DC8E8010081F28F /* SetNextSourceCmd.cpp in Sources */, - 0166317C1DC8E8010081F28F /* SetSourceCmd.cpp in Sources */, E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, - 0166315F1DC8E8010081F28F /* AddSurfaceCmd.cpp in Sources */, - 016631631DC8E8010081F28F /* DeselectTexCoordCmd.cpp in Sources */, - 0166318E1DC8E8010081F28F /* BaseSource.cpp in Sources */, - 016631641DC8E8010081F28F /* DuplicateSurfaceCmd.cpp in Sources */, - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, - 016631831DC8E8010081F28F /* LayerPanelWidget.cpp in Sources */, - 016631811DC8E8010081F28F /* TranslateCanvasCmd.cpp in Sources */, - 0166315E1DC8E8010081F28F /* AddGridRowCmd.cpp in Sources */, - 0166317D1DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp in Sources */, - 0166318C1DC8E8010081F28F /* MediaServer.cpp in Sources */, - 016631781DC8E8010081F28F /* SelVertexCmd.cpp in Sources */, - 016631911DC8E8010081F28F /* OMXPlayerCache.cpp in Sources */, 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, - 016631991DC8E8010081F28F /* SurfaceStack.cpp in Sources */, 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, - 016631961DC8E8010081F28F /* QuadSurface.cpp in Sources */, - 0166316C1DC8E8010081F28F /* RmGridRowCmd.cpp in Sources */, 397EFC821A09047C0009286E /* CameraSource.cpp in Sources */, - 0166319B1DC8E8010081F28F /* BaseJoint.cpp in Sources */, - 016631891DC8E8010081F28F /* TextureHighlightWidget.cpp in Sources */, - 016631671DC8E8010081F28F /* MvLayerUpCmd.cpp in Sources */, - 016631951DC8E8010081F28F /* HexagonSurface.cpp in Sources */, - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, - 0166319A1DC8E8010081F28F /* TriangleSurface.cpp in Sources */, - 0166316E1DC8E8010081F28F /* SaveTexCoordPosCmd.cpp in Sources */, - 016631621DC8E8010081F28F /* DeselectSurfaceCmd.cpp in Sources */, - 0166315D1DC8E8010081F28F /* AddGridColCmd.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Debug.xcscheme b/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Debug.xcscheme index aef2255..f38f660 100644 --- a/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Debug.xcscheme +++ b/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Debug.xcscheme @@ -15,7 +15,7 @@ @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -33,7 +34,7 @@ @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -56,7 +58,7 @@ @@ -75,7 +77,7 @@ diff --git a/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Release.xcscheme b/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Release.xcscheme index 7ff9bc9..66b1670 100644 --- a/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Release.xcscheme +++ b/example_camera/example_camera.xcodeproj/xcshareddata/xcschemes/example_camera Release.xcscheme @@ -15,7 +15,7 @@ @@ -26,6 +26,7 @@ buildConfiguration = "Release" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -33,7 +34,7 @@ @@ -45,6 +46,7 @@ buildConfiguration = "Release" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -56,7 +58,7 @@ @@ -75,7 +77,7 @@ From 9e598ac233a02121f047fd81627d34d341446008 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:31:57 +0100 Subject: [PATCH 082/103] Add addons.make.rpi to example_camera --- example_camera/addons.make | 1 - example_camera/addons.make.rpi | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 example_camera/addons.make.rpi diff --git a/example_camera/addons.make b/example_camera/addons.make index c3aa2a3..0d1404c 100644 --- a/example_camera/addons.make +++ b/example_camera/addons.make @@ -1,4 +1,3 @@ ofxPiMapper ofxXmlSettings ofxGui -ofxRPiCameraVideoGrabber diff --git a/example_camera/addons.make.rpi b/example_camera/addons.make.rpi new file mode 100644 index 0000000..963941c --- /dev/null +++ b/example_camera/addons.make.rpi @@ -0,0 +1,4 @@ +ofxGui +ofxPiMapper +ofxXmlSettings +ofxOMXPlayer From e4fb63c38f42babcc60aa18a5b5c5aed9be65776 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:38:54 +0100 Subject: [PATCH 083/103] Update example_gamepad with ofx::piMapper::Vec3 --- example_gamepad/src/ofApp.cpp | 8 ++++---- example_gamepad/src/ofApp.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/example_gamepad/src/ofApp.cpp b/example_gamepad/src/ofApp.cpp index d72ba5c..495460b 100644 --- a/example_gamepad/src/ofApp.cpp +++ b/example_gamepad/src/ofApp.cpp @@ -49,13 +49,13 @@ void ofApp::messageReceived(ofMessage & message){ */ void ofApp::handleController(ControllerCommand com){ if(com == ControllerCommand::COMMAND_LEFT){ - mapper.moveSelection(ofVec2f(-5.0f, 0.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(-5.0f, 0.0f, 0.0f)); }else if(com == ControllerCommand::COMMAND_RIGHT){ - mapper.moveSelection(ofVec2f(5.0f, 0.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(5.0f, 0.0f, 0.0f)); }else if(com == ControllerCommand::COMMAND_UP){ - mapper.moveSelection(ofVec2f(0.0f, -5.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(0.0f, -5.0f, 0.0f)); }else if(com == ControllerCommand::COMMAND_DOWN){ - mapper.moveSelection(ofVec2f(0.0f, 5.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(0.0f, 5.0f, 0.0f)); }else if(com == ControllerCommand::COMMAND_A){ if(mapper.getMode() == ofx::piMapper::Mode::MAPPING_MODE){ mapper.selectNextVertex(); diff --git a/example_gamepad/src/ofApp.h b/example_gamepad/src/ofApp.h index 748b58c..8b75536 100644 --- a/example_gamepad/src/ofApp.h +++ b/example_gamepad/src/ofApp.h @@ -3,6 +3,7 @@ #include "ofMain.h" #include "ofxPiMapper.h" #include "InputHandler.h" +#include "Vec3.h" class ofApp : public ofBaseApp { public: @@ -22,4 +23,4 @@ class ofApp : public ofBaseApp { void handleController(ControllerCommand com); ofxPiMapper mapper; -}; \ No newline at end of file +}; From b69bc31b51e4ec9c0f410740a0bb300a3ec39bf3 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:44:52 +0100 Subject: [PATCH 084/103] Update example_gamepad xcode project --- .../example_gamepad.xcodeproj/project.pbxproj | 1136 +++++++++-------- 1 file changed, 600 insertions(+), 536 deletions(-) diff --git a/example_gamepad/example_gamepad.xcodeproj/project.pbxproj b/example_gamepad/example_gamepad.xcodeproj/project.pbxproj index e65f6d4..3c7ff1d 100644 --- a/example_gamepad/example_gamepad.xcodeproj/project.pbxproj +++ b/example_gamepad/example_gamepad.xcodeproj/project.pbxproj @@ -7,93 +7,102 @@ objects = { /* Begin PBXBuildFile section */ - 016631561DC8E8010081F28F /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B21DC8E8010081F28F /* Application.cpp */; }; - 016631571DC8E8010081F28F /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B51DC8E8010081F28F /* ApplicationBaseMode.cpp */; }; - 016631581DC8E8010081F28F /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B71DC8E8010081F28F /* PresentationMode.cpp */; }; - 016631591DC8E8010081F28F /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630B91DC8E8010081F28F /* ProjectionMappingMode.cpp */; }; - 0166315A1DC8E8010081F28F /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630BB1DC8E8010081F28F /* SourceSelectionMode.cpp */; }; - 0166315B1DC8E8010081F28F /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630BD1DC8E8010081F28F /* TextureMappingMode.cpp */; }; - 0166315C1DC8E8010081F28F /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630BF1DC8E8010081F28F /* SettingsLoader.cpp */; }; - 0166315D1DC8E8010081F28F /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C21DC8E8010081F28F /* AddGridColCmd.cpp */; }; - 0166315E1DC8E8010081F28F /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C41DC8E8010081F28F /* AddGridRowCmd.cpp */; }; - 0166315F1DC8E8010081F28F /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C61DC8E8010081F28F /* AddSurfaceCmd.cpp */; }; - 016631601DC8E8010081F28F /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630C91DC8E8010081F28F /* ClearSurfacesCmd.cpp */; }; - 016631611DC8E8010081F28F /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630CB1DC8E8010081F28F /* CmdManager.cpp */; }; - 016631621DC8E8010081F28F /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630CD1DC8E8010081F28F /* DeselectSurfaceCmd.cpp */; }; - 016631631DC8E8010081F28F /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630CF1DC8E8010081F28F /* DeselectTexCoordCmd.cpp */; }; - 016631641DC8E8010081F28F /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D11DC8E8010081F28F /* DuplicateSurfaceCmd.cpp */; }; - 016631651DC8E8010081F28F /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D31DC8E8010081F28F /* MvAllTexCoordsCmd.cpp */; }; - 016631661DC8E8010081F28F /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D51DC8E8010081F28F /* MvLayerDnCmd.cpp */; }; - 016631671DC8E8010081F28F /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D71DC8E8010081F28F /* MvLayerUpCmd.cpp */; }; - 016631681DC8E8010081F28F /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630D91DC8E8010081F28F /* MvSelectionCmd.cpp */; }; - 016631691DC8E8010081F28F /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630DB1DC8E8010081F28F /* MvSurfaceVertCmd.cpp */; }; - 0166316A1DC8E8010081F28F /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630DD1DC8E8010081F28F /* MvTexCoordCmd.cpp */; }; - 0166316B1DC8E8010081F28F /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630DF1DC8E8010081F28F /* RmGridColCmd.cpp */; }; - 0166316C1DC8E8010081F28F /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E11DC8E8010081F28F /* RmGridRowCmd.cpp */; }; - 0166316D1DC8E8010081F28F /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E31DC8E8010081F28F /* RmSurfaceCmd.cpp */; }; - 0166316E1DC8E8010081F28F /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E51DC8E8010081F28F /* SaveTexCoordPosCmd.cpp */; }; - 0166316F1DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E71DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp */; }; - 016631701DC8E8010081F28F /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630E91DC8E8010081F28F /* SelNextSurfaceCmd.cpp */; }; - 016631711DC8E8010081F28F /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630EB1DC8E8010081F28F /* SelNextTexCoordCmd.cpp */; }; - 016631721DC8E8010081F28F /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630ED1DC8E8010081F28F /* SelNextVertexCmd.cpp */; }; - 016631731DC8E8010081F28F /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630EF1DC8E8010081F28F /* SelPrevSurfaceCmd.cpp */; }; - 016631741DC8E8010081F28F /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F11DC8E8010081F28F /* SelPrevTexCoordCmd.cpp */; }; - 016631751DC8E8010081F28F /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F31DC8E8010081F28F /* SelPrevVertexCmd.cpp */; }; - 016631761DC8E8010081F28F /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F51DC8E8010081F28F /* SelSurfaceCmd.cpp */; }; - 016631771DC8E8010081F28F /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F71DC8E8010081F28F /* SelTexCoordCmd.cpp */; }; - 016631781DC8E8010081F28F /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630F91DC8E8010081F28F /* SelVertexCmd.cpp */; }; - 016631791DC8E8010081F28F /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630FB1DC8E8010081F28F /* SetApplicationModeCmd.cpp */; }; - 0166317A1DC8E8010081F28F /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630FD1DC8E8010081F28F /* SetNextSourceCmd.cpp */; }; - 0166317B1DC8E8010081F28F /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016630FF1DC8E8010081F28F /* SetPresetCmd.cpp */; }; - 0166317C1DC8E8010081F28F /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631011DC8E8010081F28F /* SetSourceCmd.cpp */; }; - 0166317D1DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631031DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp */; }; - 0166317E1DC8E8010081F28F /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631051DC8E8010081F28F /* StartDragSurfaceCmd.cpp */; }; - 0166317F1DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631071DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp */; }; - 016631801DC8E8010081F28F /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631091DC8E8010081F28F /* TogglePerspectiveCmd.cpp */; }; - 016631811DC8E8010081F28F /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166310B1DC8E8010081F28F /* TranslateCanvasCmd.cpp */; }; - 016631821DC8E8010081F28F /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166310E1DC8E8010081F28F /* Gui.cpp */; }; - 016631831DC8E8010081F28F /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631121DC8E8010081F28F /* LayerPanelWidget.cpp */; }; - 016631841DC8E8010081F28F /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631141DC8E8010081F28F /* ProjectionEditorWidget.cpp */; }; - 016631851DC8E8010081F28F /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631161DC8E8010081F28F /* ScaleWidget.cpp */; }; - 016631861DC8E8010081F28F /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631181DC8E8010081F28F /* SourcesEditorWidget.cpp */; }; - 016631871DC8E8010081F28F /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166311A1DC8E8010081F28F /* SurfaceHighlightWidget.cpp */; }; - 016631881DC8E8010081F28F /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166311C1DC8E8010081F28F /* TextureEditorWidget.cpp */; }; - 016631891DC8E8010081F28F /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166311E1DC8E8010081F28F /* TextureHighlightWidget.cpp */; }; - 0166318A1DC8E8010081F28F /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631211DC8E8010081F28F /* Info.cpp */; }; - 0166318B1DC8E8010081F28F /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631241DC8E8010081F28F /* DirectoryWatcher.cpp */; }; - 0166318C1DC8E8010081F28F /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631261DC8E8010081F28F /* MediaServer.cpp */; }; - 0166318D1DC8E8010081F28F /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631281DC8E8010081F28F /* ofxPiMapper.cpp */; }; - 0166318E1DC8E8010081F28F /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166312B1DC8E8010081F28F /* BaseSource.cpp */; }; - 0166318F1DC8E8010081F28F /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166312D1DC8E8010081F28F /* FboSource.cpp */; }; - 016631901DC8E8010081F28F /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166312F1DC8E8010081F28F /* ImageSource.cpp */; }; - 016631911DC8E8010081F28F /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631311DC8E8010081F28F /* OMXPlayerCache.cpp */; }; - 016631921DC8E8010081F28F /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631341DC8E8010081F28F /* VideoSource.cpp */; }; - 016631931DC8E8010081F28F /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631371DC8E8010081F28F /* BaseSurface.cpp */; }; - 016631941DC8E8010081F28F /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631391DC8E8010081F28F /* GridWarpSurface.cpp */; }; - 016631951DC8E8010081F28F /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166313B1DC8E8010081F28F /* HexagonSurface.cpp */; }; - 016631961DC8E8010081F28F /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166313D1DC8E8010081F28F /* QuadSurface.cpp */; }; - 016631971DC8E8010081F28F /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166313F1DC8E8010081F28F /* SurfaceFactory.cpp */; }; - 016631981DC8E8010081F28F /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631411DC8E8010081F28F /* SurfaceManager.cpp */; }; - 016631991DC8E8010081F28F /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631431DC8E8010081F28F /* SurfaceStack.cpp */; }; - 0166319A1DC8E8010081F28F /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631461DC8E8010081F28F /* TriangleSurface.cpp */; }; - 0166319B1DC8E8010081F28F /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631491DC8E8010081F28F /* BaseJoint.cpp */; }; - 0166319C1DC8E8010081F28F /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166314B1DC8E8010081F28F /* CircleJoint.cpp */; }; - 0166319D1DC8E8010081F28F /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0166314F1DC8E8010081F28F /* RadioList.cpp */; }; - 0166319E1DC8E8010081F28F /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 016631521DC8E8010081F28F /* HomographyHelper.cpp */; }; + 012CB8C81FFF8BF500F8F880 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8B31FFF8BE800F8F880 /* ofxBaseGui.cpp */; }; + 012CB8CA1FFF8BF500F8F880 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8B51FFF8BE800F8F880 /* ofxButton.cpp */; }; + 012CB8CC1FFF8BF500F8F880 /* ofxColorPicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8B71FFF8BE800F8F880 /* ofxColorPicker.cpp */; }; + 012CB8CF1FFF8BF500F8F880 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8BA1FFF8BE800F8F880 /* ofxGuiGroup.cpp */; }; + 012CB8D11FFF8BF500F8F880 /* ofxInputField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8BC1FFF8BE800F8F880 /* ofxInputField.cpp */; }; + 012CB8D31FFF8BF500F8F880 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8BE1FFF8BE800F8F880 /* ofxLabel.cpp */; }; + 012CB8D51FFF8BF500F8F880 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8C01FFF8BE800F8F880 /* ofxPanel.cpp */; }; + 012CB8D71FFF8BF500F8F880 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8C21FFF8BE800F8F880 /* ofxSlider.cpp */; }; + 012CB8D91FFF8BF500F8F880 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8C41FFF8BE800F8F880 /* ofxSliderGroup.cpp */; }; + 012CB8DB1FFF8BF500F8F880 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8C61FFF8BE800F8F880 /* ofxToggle.cpp */; }; + 012CB8DF1FFF8BF500F8F880 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB7FF1FFF8BDC00F8F880 /* Application.cpp */; }; + 012CB8E11FFF8BF500F8F880 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8021FFF8BDC00F8F880 /* ApplicationBaseMode.cpp */; }; + 012CB8E31FFF8BF500F8F880 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8041FFF8BDC00F8F880 /* PresentationMode.cpp */; }; + 012CB8E51FFF8BF500F8F880 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8061FFF8BDC00F8F880 /* ProjectionMappingMode.cpp */; }; + 012CB8E71FFF8BF500F8F880 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8081FFF8BDC00F8F880 /* SourceSelectionMode.cpp */; }; + 012CB8E91FFF8BF500F8F880 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB80A1FFF8BDC00F8F880 /* TextureMappingMode.cpp */; }; + 012CB8EB1FFF8BF500F8F880 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB80C1FFF8BDC00F8F880 /* SettingsLoader.cpp */; }; + 012CB8ED1FFF8BF500F8F880 /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB80F1FFF8BDC00F8F880 /* AddGridColCmd.cpp */; }; + 012CB8EF1FFF8BF500F8F880 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8111FFF8BDC00F8F880 /* AddGridRowCmd.cpp */; }; + 012CB8F11FFF8BF500F8F880 /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8131FFF8BDC00F8F880 /* AddSurfaceCmd.cpp */; }; + 012CB8F41FFF8BF500F8F880 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8161FFF8BDC00F8F880 /* ClearSurfacesCmd.cpp */; }; + 012CB8F61FFF8BF500F8F880 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8181FFF8BDC00F8F880 /* CmdManager.cpp */; }; + 012CB8F81FFF8BF500F8F880 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB81A1FFF8BDC00F8F880 /* DeselectSurfaceCmd.cpp */; }; + 012CB8FA1FFF8BF500F8F880 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB81C1FFF8BDC00F8F880 /* DeselectTexCoordCmd.cpp */; }; + 012CB8FC1FFF8BF500F8F880 /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB81E1FFF8BDC00F8F880 /* DuplicateSurfaceCmd.cpp */; }; + 012CB8FE1FFF8BF500F8F880 /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8201FFF8BDC00F8F880 /* MvAllTexCoordsCmd.cpp */; }; + 012CB9001FFF8BF500F8F880 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8221FFF8BDC00F8F880 /* MvLayerDnCmd.cpp */; }; + 012CB9021FFF8BF500F8F880 /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8241FFF8BDC00F8F880 /* MvLayerUpCmd.cpp */; }; + 012CB9041FFF8BF500F8F880 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8261FFF8BDC00F8F880 /* MvSelectionCmd.cpp */; }; + 012CB9061FFF8BF500F8F880 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8281FFF8BDC00F8F880 /* MvSurfaceVertCmd.cpp */; }; + 012CB9081FFF8BF500F8F880 /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB82A1FFF8BDC00F8F880 /* MvTexCoordCmd.cpp */; }; + 012CB90A1FFF8BF500F8F880 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB82C1FFF8BDC00F8F880 /* RmGridColCmd.cpp */; }; + 012CB90C1FFF8BF500F8F880 /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB82E1FFF8BDC00F8F880 /* RmGridRowCmd.cpp */; }; + 012CB90E1FFF8BF500F8F880 /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8301FFF8BDC00F8F880 /* RmSurfaceCmd.cpp */; }; + 012CB9101FFF8BF500F8F880 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8321FFF8BDC00F8F880 /* SaveTexCoordPosCmd.cpp */; }; + 012CB9121FFF8BF500F8F880 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8341FFF8BDC00F8F880 /* ScaleSurfaceFromToCmd.cpp */; }; + 012CB9141FFF8BF500F8F880 /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8361FFF8BDC00F8F880 /* SelNextSurfaceCmd.cpp */; }; + 012CB9161FFF8BF500F8F880 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8381FFF8BDC00F8F880 /* SelNextTexCoordCmd.cpp */; }; + 012CB9181FFF8BF500F8F880 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB83A1FFF8BDC00F8F880 /* SelNextVertexCmd.cpp */; }; + 012CB91A1FFF8BF500F8F880 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB83C1FFF8BDC00F8F880 /* SelPrevSurfaceCmd.cpp */; }; + 012CB91C1FFF8BF500F8F880 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB83E1FFF8BDC00F8F880 /* SelPrevTexCoordCmd.cpp */; }; + 012CB91E1FFF8BF500F8F880 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8401FFF8BDC00F8F880 /* SelPrevVertexCmd.cpp */; }; + 012CB9201FFF8BF500F8F880 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8421FFF8BDC00F8F880 /* SelSurfaceCmd.cpp */; }; + 012CB9221FFF8BF500F8F880 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8441FFF8BDC00F8F880 /* SelTexCoordCmd.cpp */; }; + 012CB9241FFF8BF500F8F880 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8461FFF8BDC00F8F880 /* SelVertexCmd.cpp */; }; + 012CB9261FFF8BF500F8F880 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8481FFF8BDC00F8F880 /* SetApplicationModeCmd.cpp */; }; + 012CB9281FFF8BF500F8F880 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB84A1FFF8BDC00F8F880 /* SetNextSourceCmd.cpp */; }; + 012CB92A1FFF8BF500F8F880 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB84C1FFF8BDC00F8F880 /* SetPresetCmd.cpp */; }; + 012CB92C1FFF8BF500F8F880 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB84E1FFF8BDC00F8F880 /* SetSourceCmd.cpp */; }; + 012CB92E1FFF8BF500F8F880 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8501FFF8BDC00F8F880 /* SetTexMapDrawModeCmd.cpp */; }; + 012CB9301FFF8BF500F8F880 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8521FFF8BDC00F8F880 /* StartDragSurfaceCmd.cpp */; }; + 012CB9321FFF8BF500F8F880 /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8541FFF8BDC00F8F880 /* ToggleAnimatedSourceCmd.cpp */; }; + 012CB9341FFF8BF500F8F880 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8561FFF8BDC00F8F880 /* TogglePerspectiveCmd.cpp */; }; + 012CB9361FFF8BF500F8F880 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8581FFF8BDC00F8F880 /* TranslateCanvasCmd.cpp */; }; + 012CB9381FFF8BF500F8F880 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB85B1FFF8BDC00F8F880 /* Gui.cpp */; }; + 012CB93B1FFF8BF500F8F880 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB85F1FFF8BDC00F8F880 /* LayerPanelWidget.cpp */; }; + 012CB93D1FFF8BF500F8F880 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8611FFF8BDC00F8F880 /* ProjectionEditorWidget.cpp */; }; + 012CB93F1FFF8BF500F8F880 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8631FFF8BDC00F8F880 /* ScaleWidget.cpp */; }; + 012CB9411FFF8BF500F8F880 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8651FFF8BDC00F8F880 /* SourcesEditorWidget.cpp */; }; + 012CB9431FFF8BF500F8F880 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8671FFF8BDC00F8F880 /* SurfaceHighlightWidget.cpp */; }; + 012CB9451FFF8BF500F8F880 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8691FFF8BDC00F8F880 /* TextureEditorWidget.cpp */; }; + 012CB9471FFF8BF500F8F880 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB86B1FFF8BDC00F8F880 /* TextureHighlightWidget.cpp */; }; + 012CB9491FFF8BF500F8F880 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB86E1FFF8BDC00F8F880 /* Info.cpp */; }; + 012CB94B1FFF8BF500F8F880 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8711FFF8BDC00F8F880 /* DirectoryWatcher.cpp */; }; + 012CB94D1FFF8BF500F8F880 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8731FFF8BDC00F8F880 /* MediaServer.cpp */; }; + 012CB9501FFF8BF500F8F880 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8761FFF8BDC00F8F880 /* ofxPiMapper.cpp */; }; + 012CB9521FFF8BF500F8F880 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8791FFF8BDC00F8F880 /* BaseSource.cpp */; }; + 012CB9541FFF8BF500F8F880 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB87B1FFF8BDC00F8F880 /* FboSource.cpp */; }; + 012CB9561FFF8BF500F8F880 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB87D1FFF8BDC00F8F880 /* ImageSource.cpp */; }; + 012CB9581FFF8BF500F8F880 /* magSlide.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB87F1FFF8BDC00F8F880 /* magSlide.cpp */; }; + 012CB95A1FFF8BF500F8F880 /* magSlideShowSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8811FFF8BDC00F8F880 /* magSlideShowSource.cpp */; }; + 012CB95C1FFF8BF500F8F880 /* magSlideTransition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8831FFF8BDC00F8F880 /* magSlideTransition.cpp */; }; + 012CB95E1FFF8BF500F8F880 /* magSlideTransitionFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8851FFF8BDC00F8F880 /* magSlideTransitionFactory.cpp */; }; + 012CB9601FFF8BF500F8F880 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8871FFF8BDC00F8F880 /* OMXPlayerCache.cpp */; }; + 012CB9641FFF8BF500F8F880 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB88B1FFF8BDC00F8F880 /* VideoSource.cpp */; }; + 012CB9661FFF8BF500F8F880 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB88E1FFF8BDC00F8F880 /* BaseSurface.cpp */; }; + 012CB9681FFF8BF500F8F880 /* CircleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8901FFF8BDC00F8F880 /* CircleSurface.cpp */; }; + 012CB96A1FFF8BF500F8F880 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8921FFF8BDC00F8F880 /* GridWarpSurface.cpp */; }; + 012CB96C1FFF8BF500F8F880 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8941FFF8BDC00F8F880 /* HexagonSurface.cpp */; }; + 012CB96E1FFF8BF500F8F880 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8961FFF8BDC00F8F880 /* QuadSurface.cpp */; }; + 012CB9701FFF8BF500F8F880 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8981FFF8BDC00F8F880 /* SurfaceFactory.cpp */; }; + 012CB9721FFF8BF500F8F880 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB89A1FFF8BDC00F8F880 /* SurfaceManager.cpp */; }; + 012CB9741FFF8BF500F8F880 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB89C1FFF8BDC00F8F880 /* SurfaceStack.cpp */; }; + 012CB9771FFF8BF500F8F880 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB89F1FFF8BDC00F8F880 /* TriangleSurface.cpp */; }; + 012CB9791FFF8BF500F8F880 /* Vec2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8A21FFF8BDC00F8F880 /* Vec2.cpp */; }; + 012CB97B1FFF8BF500F8F880 /* Vec3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8A41FFF8BDC00F8F880 /* Vec3.cpp */; }; + 012CB97D1FFF8BF500F8F880 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8A71FFF8BDC00F8F880 /* BaseJoint.cpp */; }; + 012CB97F1FFF8BF500F8F880 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8A91FFF8BDC00F8F880 /* CircleJoint.cpp */; }; + 012CB9831FFF8BF500F8F880 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8AD1FFF8BDC00F8F880 /* RadioList.cpp */; }; + 012CB9851FFF8BF500F8F880 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB8B01FFF8BDC00F8F880 /* HomographyHelper.cpp */; }; 01DC7EDE1E452858003137B7 /* InputHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01DC7EDC1E452858003137B7 /* InputHandler.cpp */; }; 01DC7EE01E45289C003137B7 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01DC7EDF1E45289C003137B7 /* SDL2.framework */; }; 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264840192224F90008A7F5 /* tinyxmlparser.cpp */; }; - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */; }; - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */; }; - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */; }; - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */; }; - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */; }; - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; @@ -144,159 +153,195 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0100D9421E33E6C1000D7FA5 /* Mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; - 016630B21DC8E8010081F28F /* Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; - 016630B31DC8E8010081F28F /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; - 016630B51DC8E8010081F28F /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; - 016630B61DC8E8010081F28F /* ApplicationBaseMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; - 016630B71DC8E8010081F28F /* PresentationMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; - 016630B81DC8E8010081F28F /* PresentationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; - 016630B91DC8E8010081F28F /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; - 016630BA1DC8E8010081F28F /* ProjectionMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; - 016630BB1DC8E8010081F28F /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; - 016630BC1DC8E8010081F28F /* SourceSelectionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; - 016630BD1DC8E8010081F28F /* TextureMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; - 016630BE1DC8E8010081F28F /* TextureMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; - 016630BF1DC8E8010081F28F /* SettingsLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; - 016630C01DC8E8010081F28F /* SettingsLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; - 016630C21DC8E8010081F28F /* AddGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; - 016630C31DC8E8010081F28F /* AddGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; - 016630C41DC8E8010081F28F /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; - 016630C51DC8E8010081F28F /* AddGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; - 016630C61DC8E8010081F28F /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; - 016630C71DC8E8010081F28F /* AddSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; - 016630C81DC8E8010081F28F /* BaseCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; - 016630C91DC8E8010081F28F /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; - 016630CA1DC8E8010081F28F /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; - 016630CB1DC8E8010081F28F /* CmdManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; - 016630CC1DC8E8010081F28F /* CmdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; - 016630CD1DC8E8010081F28F /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; - 016630CE1DC8E8010081F28F /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; - 016630CF1DC8E8010081F28F /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; - 016630D01DC8E8010081F28F /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; - 016630D11DC8E8010081F28F /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; - 016630D21DC8E8010081F28F /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; - 016630D31DC8E8010081F28F /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; - 016630D41DC8E8010081F28F /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; - 016630D51DC8E8010081F28F /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; - 016630D61DC8E8010081F28F /* MvLayerDnCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; - 016630D71DC8E8010081F28F /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; - 016630D81DC8E8010081F28F /* MvLayerUpCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; - 016630D91DC8E8010081F28F /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; - 016630DA1DC8E8010081F28F /* MvSelectionCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; - 016630DB1DC8E8010081F28F /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; - 016630DC1DC8E8010081F28F /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; - 016630DD1DC8E8010081F28F /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; - 016630DE1DC8E8010081F28F /* MvTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; - 016630DF1DC8E8010081F28F /* RmGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; - 016630E01DC8E8010081F28F /* RmGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; - 016630E11DC8E8010081F28F /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; - 016630E21DC8E8010081F28F /* RmGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; - 016630E31DC8E8010081F28F /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; - 016630E41DC8E8010081F28F /* RmSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; - 016630E51DC8E8010081F28F /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; - 016630E61DC8E8010081F28F /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; - 016630E71DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; - 016630E81DC8E8010081F28F /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; - 016630E91DC8E8010081F28F /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; - 016630EA1DC8E8010081F28F /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; - 016630EB1DC8E8010081F28F /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; - 016630EC1DC8E8010081F28F /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; - 016630ED1DC8E8010081F28F /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; - 016630EE1DC8E8010081F28F /* SelNextVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; - 016630EF1DC8E8010081F28F /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; - 016630F01DC8E8010081F28F /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; - 016630F11DC8E8010081F28F /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; - 016630F21DC8E8010081F28F /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; - 016630F31DC8E8010081F28F /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; - 016630F41DC8E8010081F28F /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; - 016630F51DC8E8010081F28F /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; - 016630F61DC8E8010081F28F /* SelSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; - 016630F71DC8E8010081F28F /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; - 016630F81DC8E8010081F28F /* SelTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; - 016630F91DC8E8010081F28F /* SelVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; - 016630FA1DC8E8010081F28F /* SelVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; - 016630FB1DC8E8010081F28F /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; - 016630FC1DC8E8010081F28F /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; - 016630FD1DC8E8010081F28F /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; - 016630FE1DC8E8010081F28F /* SetNextSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; - 016630FF1DC8E8010081F28F /* SetPresetCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; - 016631001DC8E8010081F28F /* SetPresetCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; - 016631011DC8E8010081F28F /* SetSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; - 016631021DC8E8010081F28F /* SetSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; - 016631031DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; - 016631041DC8E8010081F28F /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; - 016631051DC8E8010081F28F /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; - 016631061DC8E8010081F28F /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; - 016631071DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; - 016631081DC8E8010081F28F /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; - 016631091DC8E8010081F28F /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; - 0166310A1DC8E8010081F28F /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; - 0166310B1DC8E8010081F28F /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; - 0166310C1DC8E8010081F28F /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; - 0166310E1DC8E8010081F28F /* Gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; - 0166310F1DC8E8010081F28F /* Gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; - 016631111DC8E8010081F28F /* GuiBaseWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; - 016631121DC8E8010081F28F /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; - 016631131DC8E8010081F28F /* LayerPanelWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; - 016631141DC8E8010081F28F /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; - 016631151DC8E8010081F28F /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; - 016631161DC8E8010081F28F /* ScaleWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; - 016631171DC8E8010081F28F /* ScaleWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; - 016631181DC8E8010081F28F /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; - 016631191DC8E8010081F28F /* SourcesEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; - 0166311A1DC8E8010081F28F /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; - 0166311B1DC8E8010081F28F /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; - 0166311C1DC8E8010081F28F /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; - 0166311D1DC8E8010081F28F /* TextureEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; - 0166311E1DC8E8010081F28F /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; - 0166311F1DC8E8010081F28F /* TextureHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; - 016631211DC8E8010081F28F /* Info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; - 016631221DC8E8010081F28F /* Info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; - 016631241DC8E8010081F28F /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; - 016631251DC8E8010081F28F /* DirectoryWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; - 016631261DC8E8010081F28F /* MediaServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; - 016631271DC8E8010081F28F /* MediaServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; - 016631281DC8E8010081F28F /* ofxPiMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; - 016631291DC8E8010081F28F /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; - 0166312B1DC8E8010081F28F /* BaseSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; - 0166312C1DC8E8010081F28F /* BaseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; - 0166312D1DC8E8010081F28F /* FboSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; - 0166312E1DC8E8010081F28F /* FboSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; - 0166312F1DC8E8010081F28F /* ImageSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; - 016631301DC8E8010081F28F /* ImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; - 016631311DC8E8010081F28F /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; - 016631321DC8E8010081F28F /* OMXPlayerCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; - 016631331DC8E8010081F28F /* SourceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; - 016631341DC8E8010081F28F /* VideoSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; - 016631351DC8E8010081F28F /* VideoSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; - 016631371DC8E8010081F28F /* BaseSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; - 016631381DC8E8010081F28F /* BaseSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; - 016631391DC8E8010081F28F /* GridWarpSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; - 0166313A1DC8E8010081F28F /* GridWarpSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; - 0166313B1DC8E8010081F28F /* HexagonSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; - 0166313C1DC8E8010081F28F /* HexagonSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; - 0166313D1DC8E8010081F28F /* QuadSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; - 0166313E1DC8E8010081F28F /* QuadSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; - 0166313F1DC8E8010081F28F /* SurfaceFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; - 016631401DC8E8010081F28F /* SurfaceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; - 016631411DC8E8010081F28F /* SurfaceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; - 016631421DC8E8010081F28F /* SurfaceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; - 016631431DC8E8010081F28F /* SurfaceStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; - 016631441DC8E8010081F28F /* SurfaceStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; - 016631451DC8E8010081F28F /* SurfaceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; - 016631461DC8E8010081F28F /* TriangleSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; - 016631471DC8E8010081F28F /* TriangleSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; - 016631491DC8E8010081F28F /* BaseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; - 0166314A1DC8E8010081F28F /* BaseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; - 0166314B1DC8E8010081F28F /* CircleJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; - 0166314C1DC8E8010081F28F /* CircleJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; - 0166314D1DC8E8010081F28F /* EditorType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; - 0166314E1DC8E8010081F28F /* GuiMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; - 0166314F1DC8E8010081F28F /* RadioList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; - 016631501DC8E8010081F28F /* RadioList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; - 016631521DC8E8010081F28F /* HomographyHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; - 016631531DC8E8010081F28F /* HomographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; + 012CB7FF1FFF8BDC00F8F880 /* Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; + 012CB8001FFF8BDC00F8F880 /* Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; + 012CB8021FFF8BDC00F8F880 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; + 012CB8031FFF8BDC00F8F880 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; + 012CB8041FFF8BDC00F8F880 /* PresentationMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; + 012CB8051FFF8BDC00F8F880 /* PresentationMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; + 012CB8061FFF8BDC00F8F880 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; + 012CB8071FFF8BDC00F8F880 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; + 012CB8081FFF8BDC00F8F880 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; + 012CB8091FFF8BDC00F8F880 /* SourceSelectionMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; + 012CB80A1FFF8BDC00F8F880 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; + 012CB80B1FFF8BDC00F8F880 /* TextureMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; + 012CB80C1FFF8BDC00F8F880 /* SettingsLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; + 012CB80D1FFF8BDC00F8F880 /* SettingsLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; + 012CB80F1FFF8BDC00F8F880 /* AddGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; + 012CB8101FFF8BDC00F8F880 /* AddGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; + 012CB8111FFF8BDC00F8F880 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; + 012CB8121FFF8BDC00F8F880 /* AddGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; + 012CB8131FFF8BDC00F8F880 /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; + 012CB8141FFF8BDC00F8F880 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; + 012CB8151FFF8BDC00F8F880 /* BaseCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; + 012CB8161FFF8BDC00F8F880 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; + 012CB8171FFF8BDC00F8F880 /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; + 012CB8181FFF8BDC00F8F880 /* CmdManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; + 012CB8191FFF8BDC00F8F880 /* CmdManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; + 012CB81A1FFF8BDC00F8F880 /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; + 012CB81B1FFF8BDC00F8F880 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; + 012CB81C1FFF8BDC00F8F880 /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; + 012CB81D1FFF8BDC00F8F880 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; + 012CB81E1FFF8BDC00F8F880 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; + 012CB81F1FFF8BDC00F8F880 /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; + 012CB8201FFF8BDC00F8F880 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; + 012CB8211FFF8BDC00F8F880 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; + 012CB8221FFF8BDC00F8F880 /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; + 012CB8231FFF8BDC00F8F880 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; + 012CB8241FFF8BDC00F8F880 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; + 012CB8251FFF8BDC00F8F880 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; + 012CB8261FFF8BDC00F8F880 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; + 012CB8271FFF8BDC00F8F880 /* MvSelectionCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; + 012CB8281FFF8BDC00F8F880 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; + 012CB8291FFF8BDC00F8F880 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; + 012CB82A1FFF8BDC00F8F880 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; + 012CB82B1FFF8BDC00F8F880 /* MvTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; + 012CB82C1FFF8BDC00F8F880 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; + 012CB82D1FFF8BDC00F8F880 /* RmGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; + 012CB82E1FFF8BDC00F8F880 /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; + 012CB82F1FFF8BDC00F8F880 /* RmGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; + 012CB8301FFF8BDC00F8F880 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; + 012CB8311FFF8BDC00F8F880 /* RmSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; + 012CB8321FFF8BDC00F8F880 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; + 012CB8331FFF8BDC00F8F880 /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; + 012CB8341FFF8BDC00F8F880 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; + 012CB8351FFF8BDC00F8F880 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; + 012CB8361FFF8BDC00F8F880 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; + 012CB8371FFF8BDC00F8F880 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; + 012CB8381FFF8BDC00F8F880 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; + 012CB8391FFF8BDC00F8F880 /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; + 012CB83A1FFF8BDC00F8F880 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; + 012CB83B1FFF8BDC00F8F880 /* SelNextVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; + 012CB83C1FFF8BDC00F8F880 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; + 012CB83D1FFF8BDC00F8F880 /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; + 012CB83E1FFF8BDC00F8F880 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; + 012CB83F1FFF8BDC00F8F880 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; + 012CB8401FFF8BDC00F8F880 /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; + 012CB8411FFF8BDC00F8F880 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; + 012CB8421FFF8BDC00F8F880 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; + 012CB8431FFF8BDC00F8F880 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; + 012CB8441FFF8BDC00F8F880 /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; + 012CB8451FFF8BDC00F8F880 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; + 012CB8461FFF8BDC00F8F880 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; + 012CB8471FFF8BDC00F8F880 /* SelVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; + 012CB8481FFF8BDC00F8F880 /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; + 012CB8491FFF8BDC00F8F880 /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; + 012CB84A1FFF8BDC00F8F880 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; + 012CB84B1FFF8BDC00F8F880 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; + 012CB84C1FFF8BDC00F8F880 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; + 012CB84D1FFF8BDC00F8F880 /* SetPresetCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; + 012CB84E1FFF8BDC00F8F880 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; + 012CB84F1FFF8BDC00F8F880 /* SetSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; + 012CB8501FFF8BDC00F8F880 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; + 012CB8511FFF8BDC00F8F880 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; + 012CB8521FFF8BDC00F8F880 /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; + 012CB8531FFF8BDC00F8F880 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; + 012CB8541FFF8BDC00F8F880 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; + 012CB8551FFF8BDC00F8F880 /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; + 012CB8561FFF8BDC00F8F880 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; + 012CB8571FFF8BDC00F8F880 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; + 012CB8581FFF8BDC00F8F880 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; + 012CB8591FFF8BDC00F8F880 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; + 012CB85B1FFF8BDC00F8F880 /* Gui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; + 012CB85C1FFF8BDC00F8F880 /* Gui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; + 012CB85E1FFF8BDC00F8F880 /* GuiBaseWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; + 012CB85F1FFF8BDC00F8F880 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; + 012CB8601FFF8BDC00F8F880 /* LayerPanelWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; + 012CB8611FFF8BDC00F8F880 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; + 012CB8621FFF8BDC00F8F880 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; + 012CB8631FFF8BDC00F8F880 /* ScaleWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; + 012CB8641FFF8BDC00F8F880 /* ScaleWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; + 012CB8651FFF8BDC00F8F880 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; + 012CB8661FFF8BDC00F8F880 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; + 012CB8671FFF8BDC00F8F880 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; + 012CB8681FFF8BDC00F8F880 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; + 012CB8691FFF8BDC00F8F880 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; + 012CB86A1FFF8BDC00F8F880 /* TextureEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; + 012CB86B1FFF8BDC00F8F880 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; + 012CB86C1FFF8BDC00F8F880 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; + 012CB86E1FFF8BDC00F8F880 /* Info.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; + 012CB86F1FFF8BDC00F8F880 /* Info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; + 012CB8711FFF8BDC00F8F880 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; + 012CB8721FFF8BDC00F8F880 /* DirectoryWatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; + 012CB8731FFF8BDC00F8F880 /* MediaServer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; + 012CB8741FFF8BDC00F8F880 /* MediaServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; + 012CB8751FFF8BDC00F8F880 /* Mode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; + 012CB8761FFF8BDC00F8F880 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; + 012CB8771FFF8BDC00F8F880 /* ofxPiMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; + 012CB8791FFF8BDC00F8F880 /* BaseSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; + 012CB87A1FFF8BDC00F8F880 /* BaseSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; + 012CB87B1FFF8BDC00F8F880 /* FboSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; + 012CB87C1FFF8BDC00F8F880 /* FboSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; + 012CB87D1FFF8BDC00F8F880 /* ImageSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; + 012CB87E1FFF8BDC00F8F880 /* ImageSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; + 012CB87F1FFF8BDC00F8F880 /* magSlide.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlide.cpp; sourceTree = ""; }; + 012CB8801FFF8BDC00F8F880 /* magSlide.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlide.h; sourceTree = ""; }; + 012CB8811FFF8BDC00F8F880 /* magSlideShowSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideShowSource.cpp; sourceTree = ""; }; + 012CB8821FFF8BDC00F8F880 /* magSlideShowSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideShowSource.h; sourceTree = ""; }; + 012CB8831FFF8BDC00F8F880 /* magSlideTransition.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransition.cpp; sourceTree = ""; }; + 012CB8841FFF8BDC00F8F880 /* magSlideTransition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransition.h; sourceTree = ""; }; + 012CB8851FFF8BDC00F8F880 /* magSlideTransitionFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransitionFactory.cpp; sourceTree = ""; }; + 012CB8861FFF8BDC00F8F880 /* magSlideTransitionFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransitionFactory.h; sourceTree = ""; }; + 012CB8871FFF8BDC00F8F880 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; + 012CB8881FFF8BDC00F8F880 /* OMXPlayerCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; + 012CB8891FFF8BDC00F8F880 /* SourceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; + 012CB88A1FFF8BDC00F8F880 /* SourceTypeHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceTypeHelper.h; sourceTree = ""; }; + 012CB88B1FFF8BDC00F8F880 /* VideoSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; + 012CB88C1FFF8BDC00F8F880 /* VideoSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; + 012CB88E1FFF8BDC00F8F880 /* BaseSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; + 012CB88F1FFF8BDC00F8F880 /* BaseSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; + 012CB8901FFF8BDC00F8F880 /* CircleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleSurface.cpp; sourceTree = ""; }; + 012CB8911FFF8BDC00F8F880 /* CircleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleSurface.h; sourceTree = ""; }; + 012CB8921FFF8BDC00F8F880 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; + 012CB8931FFF8BDC00F8F880 /* GridWarpSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; + 012CB8941FFF8BDC00F8F880 /* HexagonSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; + 012CB8951FFF8BDC00F8F880 /* HexagonSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; + 012CB8961FFF8BDC00F8F880 /* QuadSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; + 012CB8971FFF8BDC00F8F880 /* QuadSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; + 012CB8981FFF8BDC00F8F880 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; + 012CB8991FFF8BDC00F8F880 /* SurfaceFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; + 012CB89A1FFF8BDC00F8F880 /* SurfaceManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; + 012CB89B1FFF8BDC00F8F880 /* SurfaceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; + 012CB89C1FFF8BDC00F8F880 /* SurfaceStack.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; + 012CB89D1FFF8BDC00F8F880 /* SurfaceStack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; + 012CB89E1FFF8BDC00F8F880 /* SurfaceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; + 012CB89F1FFF8BDC00F8F880 /* TriangleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; + 012CB8A01FFF8BDC00F8F880 /* TriangleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; + 012CB8A21FFF8BDC00F8F880 /* Vec2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec2.cpp; sourceTree = ""; }; + 012CB8A31FFF8BDC00F8F880 /* Vec2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec2.h; sourceTree = ""; }; + 012CB8A41FFF8BDC00F8F880 /* Vec3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec3.cpp; sourceTree = ""; }; + 012CB8A51FFF8BDC00F8F880 /* Vec3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec3.h; sourceTree = ""; }; + 012CB8A71FFF8BDC00F8F880 /* BaseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; + 012CB8A81FFF8BDC00F8F880 /* BaseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; + 012CB8A91FFF8BDC00F8F880 /* CircleJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; + 012CB8AA1FFF8BDC00F8F880 /* CircleJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; + 012CB8AB1FFF8BDC00F8F880 /* EditorType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; + 012CB8AC1FFF8BDC00F8F880 /* GuiMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; + 012CB8AD1FFF8BDC00F8F880 /* RadioList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; + 012CB8AE1FFF8BDC00F8F880 /* RadioList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; + 012CB8B01FFF8BDC00F8F880 /* HomographyHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; + 012CB8B11FFF8BDC00F8F880 /* HomographyHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; + 012CB8B31FFF8BE800F8F880 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; + 012CB8B41FFF8BE800F8F880 /* ofxBaseGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; + 012CB8B51FFF8BE800F8F880 /* ofxButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; + 012CB8B61FFF8BE800F8F880 /* ofxButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; + 012CB8B71FFF8BE800F8F880 /* ofxColorPicker.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxColorPicker.cpp; sourceTree = ""; }; + 012CB8B81FFF8BE800F8F880 /* ofxColorPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxColorPicker.h; sourceTree = ""; }; + 012CB8B91FFF8BE800F8F880 /* ofxGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; + 012CB8BA1FFF8BE800F8F880 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; + 012CB8BB1FFF8BE800F8F880 /* ofxGuiGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; + 012CB8BC1FFF8BE800F8F880 /* ofxInputField.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxInputField.cpp; sourceTree = ""; }; + 012CB8BD1FFF8BE800F8F880 /* ofxInputField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxInputField.h; sourceTree = ""; }; + 012CB8BE1FFF8BE800F8F880 /* ofxLabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; + 012CB8BF1FFF8BE800F8F880 /* ofxLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; + 012CB8C01FFF8BE800F8F880 /* ofxPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; + 012CB8C11FFF8BE800F8F880 /* ofxPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; + 012CB8C21FFF8BE800F8F880 /* ofxSlider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; + 012CB8C31FFF8BE800F8F880 /* ofxSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; + 012CB8C41FFF8BE800F8F880 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; + 012CB8C51FFF8BE800F8F880 /* ofxSliderGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; + 012CB8C61FFF8BE800F8F880 /* ofxToggle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; + 012CB8C71FFF8BE800F8F880 /* ofxToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; 01DC7EDC1E452858003137B7 /* InputHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputHandler.cpp; sourceTree = ""; }; 01DC7EDD1E452858003137B7 /* InputHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputHandler.h; sourceTree = ""; }; 01DC7EDF1E45289C003137B7 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../../../../../../../../Library/Frameworks/SDL2.framework; sourceTree = ""; }; @@ -306,23 +351,6 @@ 3926483E192224F90008A7F5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; 39264840192224F90008A7F5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; - 3933D5C519BB87BD000ACA55 /* ofxButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; - 3933D5C619BB87BD000ACA55 /* ofxGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; @@ -376,255 +404,307 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 016630B01DC8E8010081F28F /* src */ = { + 012CB7FD1FFF8BDC00F8F880 /* src */ = { isa = PBXGroup; children = ( - 016630B11DC8E8010081F28F /* Application */, - 016630C11DC8E8010081F28F /* Commands */, - 0166310D1DC8E8010081F28F /* Gui */, - 016631201DC8E8010081F28F /* Info */, - 016631231DC8E8010081F28F /* MediaServer */, - 016631281DC8E8010081F28F /* ofxPiMapper.cpp */, - 016631291DC8E8010081F28F /* ofxPiMapper.h */, - 0100D9421E33E6C1000D7FA5 /* Mode.h */, - 0166312A1DC8E8010081F28F /* Sources */, - 016631361DC8E8010081F28F /* Surfaces */, - 016631481DC8E8010081F28F /* UserInterface */, - 016631511DC8E8010081F28F /* Utils */, + 012CB7FE1FFF8BDC00F8F880 /* Application */, + 012CB80E1FFF8BDC00F8F880 /* Commands */, + 012CB85A1FFF8BDC00F8F880 /* Gui */, + 012CB86D1FFF8BDC00F8F880 /* Info */, + 012CB8701FFF8BDC00F8F880 /* MediaServer */, + 012CB8751FFF8BDC00F8F880 /* Mode.h */, + 012CB8761FFF8BDC00F8F880 /* ofxPiMapper.cpp */, + 012CB8771FFF8BDC00F8F880 /* ofxPiMapper.h */, + 012CB8781FFF8BDC00F8F880 /* Sources */, + 012CB88D1FFF8BDC00F8F880 /* Surfaces */, + 012CB8A11FFF8BDC00F8F880 /* Types */, + 012CB8A61FFF8BDC00F8F880 /* UserInterface */, + 012CB8AF1FFF8BDC00F8F880 /* Utils */, ); name = src; path = ../src; sourceTree = ""; }; - 016630B11DC8E8010081F28F /* Application */ = { + 012CB7FE1FFF8BDC00F8F880 /* Application */ = { isa = PBXGroup; children = ( - 016630B21DC8E8010081F28F /* Application.cpp */, - 016630B31DC8E8010081F28F /* Application.h */, - 016630B41DC8E8010081F28F /* Modes */, - 016630BF1DC8E8010081F28F /* SettingsLoader.cpp */, - 016630C01DC8E8010081F28F /* SettingsLoader.h */, + 012CB7FF1FFF8BDC00F8F880 /* Application.cpp */, + 012CB8001FFF8BDC00F8F880 /* Application.h */, + 012CB8011FFF8BDC00F8F880 /* Modes */, + 012CB80C1FFF8BDC00F8F880 /* SettingsLoader.cpp */, + 012CB80D1FFF8BDC00F8F880 /* SettingsLoader.h */, ); path = Application; sourceTree = ""; }; - 016630B41DC8E8010081F28F /* Modes */ = { + 012CB8011FFF8BDC00F8F880 /* Modes */ = { isa = PBXGroup; children = ( - 016630B51DC8E8010081F28F /* ApplicationBaseMode.cpp */, - 016630B61DC8E8010081F28F /* ApplicationBaseMode.h */, - 016630B71DC8E8010081F28F /* PresentationMode.cpp */, - 016630B81DC8E8010081F28F /* PresentationMode.h */, - 016630B91DC8E8010081F28F /* ProjectionMappingMode.cpp */, - 016630BA1DC8E8010081F28F /* ProjectionMappingMode.h */, - 016630BB1DC8E8010081F28F /* SourceSelectionMode.cpp */, - 016630BC1DC8E8010081F28F /* SourceSelectionMode.h */, - 016630BD1DC8E8010081F28F /* TextureMappingMode.cpp */, - 016630BE1DC8E8010081F28F /* TextureMappingMode.h */, + 012CB8021FFF8BDC00F8F880 /* ApplicationBaseMode.cpp */, + 012CB8031FFF8BDC00F8F880 /* ApplicationBaseMode.h */, + 012CB8041FFF8BDC00F8F880 /* PresentationMode.cpp */, + 012CB8051FFF8BDC00F8F880 /* PresentationMode.h */, + 012CB8061FFF8BDC00F8F880 /* ProjectionMappingMode.cpp */, + 012CB8071FFF8BDC00F8F880 /* ProjectionMappingMode.h */, + 012CB8081FFF8BDC00F8F880 /* SourceSelectionMode.cpp */, + 012CB8091FFF8BDC00F8F880 /* SourceSelectionMode.h */, + 012CB80A1FFF8BDC00F8F880 /* TextureMappingMode.cpp */, + 012CB80B1FFF8BDC00F8F880 /* TextureMappingMode.h */, ); path = Modes; sourceTree = ""; }; - 016630C11DC8E8010081F28F /* Commands */ = { + 012CB80E1FFF8BDC00F8F880 /* Commands */ = { isa = PBXGroup; children = ( - 016630C21DC8E8010081F28F /* AddGridColCmd.cpp */, - 016630C31DC8E8010081F28F /* AddGridColCmd.h */, - 016630C41DC8E8010081F28F /* AddGridRowCmd.cpp */, - 016630C51DC8E8010081F28F /* AddGridRowCmd.h */, - 016630C61DC8E8010081F28F /* AddSurfaceCmd.cpp */, - 016630C71DC8E8010081F28F /* AddSurfaceCmd.h */, - 016630C81DC8E8010081F28F /* BaseCmd.h */, - 016630C91DC8E8010081F28F /* ClearSurfacesCmd.cpp */, - 016630CA1DC8E8010081F28F /* ClearSurfacesCmd.h */, - 016630CB1DC8E8010081F28F /* CmdManager.cpp */, - 016630CC1DC8E8010081F28F /* CmdManager.h */, - 016630CD1DC8E8010081F28F /* DeselectSurfaceCmd.cpp */, - 016630CE1DC8E8010081F28F /* DeselectSurfaceCmd.h */, - 016630CF1DC8E8010081F28F /* DeselectTexCoordCmd.cpp */, - 016630D01DC8E8010081F28F /* DeselectTexCoordCmd.h */, - 016630D11DC8E8010081F28F /* DuplicateSurfaceCmd.cpp */, - 016630D21DC8E8010081F28F /* DuplicateSurfaceCmd.h */, - 016630D31DC8E8010081F28F /* MvAllTexCoordsCmd.cpp */, - 016630D41DC8E8010081F28F /* MvAllTexCoordsCmd.h */, - 016630D51DC8E8010081F28F /* MvLayerDnCmd.cpp */, - 016630D61DC8E8010081F28F /* MvLayerDnCmd.h */, - 016630D71DC8E8010081F28F /* MvLayerUpCmd.cpp */, - 016630D81DC8E8010081F28F /* MvLayerUpCmd.h */, - 016630D91DC8E8010081F28F /* MvSelectionCmd.cpp */, - 016630DA1DC8E8010081F28F /* MvSelectionCmd.h */, - 016630DB1DC8E8010081F28F /* MvSurfaceVertCmd.cpp */, - 016630DC1DC8E8010081F28F /* MvSurfaceVertCmd.h */, - 016630DD1DC8E8010081F28F /* MvTexCoordCmd.cpp */, - 016630DE1DC8E8010081F28F /* MvTexCoordCmd.h */, - 016630DF1DC8E8010081F28F /* RmGridColCmd.cpp */, - 016630E01DC8E8010081F28F /* RmGridColCmd.h */, - 016630E11DC8E8010081F28F /* RmGridRowCmd.cpp */, - 016630E21DC8E8010081F28F /* RmGridRowCmd.h */, - 016630E31DC8E8010081F28F /* RmSurfaceCmd.cpp */, - 016630E41DC8E8010081F28F /* RmSurfaceCmd.h */, - 016630E51DC8E8010081F28F /* SaveTexCoordPosCmd.cpp */, - 016630E61DC8E8010081F28F /* SaveTexCoordPosCmd.h */, - 016630E71DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp */, - 016630E81DC8E8010081F28F /* ScaleSurfaceFromToCmd.h */, - 016630E91DC8E8010081F28F /* SelNextSurfaceCmd.cpp */, - 016630EA1DC8E8010081F28F /* SelNextSurfaceCmd.h */, - 016630EB1DC8E8010081F28F /* SelNextTexCoordCmd.cpp */, - 016630EC1DC8E8010081F28F /* SelNextTexCoordCmd.h */, - 016630ED1DC8E8010081F28F /* SelNextVertexCmd.cpp */, - 016630EE1DC8E8010081F28F /* SelNextVertexCmd.h */, - 016630EF1DC8E8010081F28F /* SelPrevSurfaceCmd.cpp */, - 016630F01DC8E8010081F28F /* SelPrevSurfaceCmd.h */, - 016630F11DC8E8010081F28F /* SelPrevTexCoordCmd.cpp */, - 016630F21DC8E8010081F28F /* SelPrevTexCoordCmd.h */, - 016630F31DC8E8010081F28F /* SelPrevVertexCmd.cpp */, - 016630F41DC8E8010081F28F /* SelPrevVertexCmd.h */, - 016630F51DC8E8010081F28F /* SelSurfaceCmd.cpp */, - 016630F61DC8E8010081F28F /* SelSurfaceCmd.h */, - 016630F71DC8E8010081F28F /* SelTexCoordCmd.cpp */, - 016630F81DC8E8010081F28F /* SelTexCoordCmd.h */, - 016630F91DC8E8010081F28F /* SelVertexCmd.cpp */, - 016630FA1DC8E8010081F28F /* SelVertexCmd.h */, - 016630FB1DC8E8010081F28F /* SetApplicationModeCmd.cpp */, - 016630FC1DC8E8010081F28F /* SetApplicationModeCmd.h */, - 016630FD1DC8E8010081F28F /* SetNextSourceCmd.cpp */, - 016630FE1DC8E8010081F28F /* SetNextSourceCmd.h */, - 016630FF1DC8E8010081F28F /* SetPresetCmd.cpp */, - 016631001DC8E8010081F28F /* SetPresetCmd.h */, - 016631011DC8E8010081F28F /* SetSourceCmd.cpp */, - 016631021DC8E8010081F28F /* SetSourceCmd.h */, - 016631031DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp */, - 016631041DC8E8010081F28F /* SetTexMapDrawModeCmd.h */, - 016631051DC8E8010081F28F /* StartDragSurfaceCmd.cpp */, - 016631061DC8E8010081F28F /* StartDragSurfaceCmd.h */, - 016631071DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp */, - 016631081DC8E8010081F28F /* ToggleAnimatedSourceCmd.h */, - 016631091DC8E8010081F28F /* TogglePerspectiveCmd.cpp */, - 0166310A1DC8E8010081F28F /* TogglePerspectiveCmd.h */, - 0166310B1DC8E8010081F28F /* TranslateCanvasCmd.cpp */, - 0166310C1DC8E8010081F28F /* TranslateCanvasCmd.h */, + 012CB80F1FFF8BDC00F8F880 /* AddGridColCmd.cpp */, + 012CB8101FFF8BDC00F8F880 /* AddGridColCmd.h */, + 012CB8111FFF8BDC00F8F880 /* AddGridRowCmd.cpp */, + 012CB8121FFF8BDC00F8F880 /* AddGridRowCmd.h */, + 012CB8131FFF8BDC00F8F880 /* AddSurfaceCmd.cpp */, + 012CB8141FFF8BDC00F8F880 /* AddSurfaceCmd.h */, + 012CB8151FFF8BDC00F8F880 /* BaseCmd.h */, + 012CB8161FFF8BDC00F8F880 /* ClearSurfacesCmd.cpp */, + 012CB8171FFF8BDC00F8F880 /* ClearSurfacesCmd.h */, + 012CB8181FFF8BDC00F8F880 /* CmdManager.cpp */, + 012CB8191FFF8BDC00F8F880 /* CmdManager.h */, + 012CB81A1FFF8BDC00F8F880 /* DeselectSurfaceCmd.cpp */, + 012CB81B1FFF8BDC00F8F880 /* DeselectSurfaceCmd.h */, + 012CB81C1FFF8BDC00F8F880 /* DeselectTexCoordCmd.cpp */, + 012CB81D1FFF8BDC00F8F880 /* DeselectTexCoordCmd.h */, + 012CB81E1FFF8BDC00F8F880 /* DuplicateSurfaceCmd.cpp */, + 012CB81F1FFF8BDC00F8F880 /* DuplicateSurfaceCmd.h */, + 012CB8201FFF8BDC00F8F880 /* MvAllTexCoordsCmd.cpp */, + 012CB8211FFF8BDC00F8F880 /* MvAllTexCoordsCmd.h */, + 012CB8221FFF8BDC00F8F880 /* MvLayerDnCmd.cpp */, + 012CB8231FFF8BDC00F8F880 /* MvLayerDnCmd.h */, + 012CB8241FFF8BDC00F8F880 /* MvLayerUpCmd.cpp */, + 012CB8251FFF8BDC00F8F880 /* MvLayerUpCmd.h */, + 012CB8261FFF8BDC00F8F880 /* MvSelectionCmd.cpp */, + 012CB8271FFF8BDC00F8F880 /* MvSelectionCmd.h */, + 012CB8281FFF8BDC00F8F880 /* MvSurfaceVertCmd.cpp */, + 012CB8291FFF8BDC00F8F880 /* MvSurfaceVertCmd.h */, + 012CB82A1FFF8BDC00F8F880 /* MvTexCoordCmd.cpp */, + 012CB82B1FFF8BDC00F8F880 /* MvTexCoordCmd.h */, + 012CB82C1FFF8BDC00F8F880 /* RmGridColCmd.cpp */, + 012CB82D1FFF8BDC00F8F880 /* RmGridColCmd.h */, + 012CB82E1FFF8BDC00F8F880 /* RmGridRowCmd.cpp */, + 012CB82F1FFF8BDC00F8F880 /* RmGridRowCmd.h */, + 012CB8301FFF8BDC00F8F880 /* RmSurfaceCmd.cpp */, + 012CB8311FFF8BDC00F8F880 /* RmSurfaceCmd.h */, + 012CB8321FFF8BDC00F8F880 /* SaveTexCoordPosCmd.cpp */, + 012CB8331FFF8BDC00F8F880 /* SaveTexCoordPosCmd.h */, + 012CB8341FFF8BDC00F8F880 /* ScaleSurfaceFromToCmd.cpp */, + 012CB8351FFF8BDC00F8F880 /* ScaleSurfaceFromToCmd.h */, + 012CB8361FFF8BDC00F8F880 /* SelNextSurfaceCmd.cpp */, + 012CB8371FFF8BDC00F8F880 /* SelNextSurfaceCmd.h */, + 012CB8381FFF8BDC00F8F880 /* SelNextTexCoordCmd.cpp */, + 012CB8391FFF8BDC00F8F880 /* SelNextTexCoordCmd.h */, + 012CB83A1FFF8BDC00F8F880 /* SelNextVertexCmd.cpp */, + 012CB83B1FFF8BDC00F8F880 /* SelNextVertexCmd.h */, + 012CB83C1FFF8BDC00F8F880 /* SelPrevSurfaceCmd.cpp */, + 012CB83D1FFF8BDC00F8F880 /* SelPrevSurfaceCmd.h */, + 012CB83E1FFF8BDC00F8F880 /* SelPrevTexCoordCmd.cpp */, + 012CB83F1FFF8BDC00F8F880 /* SelPrevTexCoordCmd.h */, + 012CB8401FFF8BDC00F8F880 /* SelPrevVertexCmd.cpp */, + 012CB8411FFF8BDC00F8F880 /* SelPrevVertexCmd.h */, + 012CB8421FFF8BDC00F8F880 /* SelSurfaceCmd.cpp */, + 012CB8431FFF8BDC00F8F880 /* SelSurfaceCmd.h */, + 012CB8441FFF8BDC00F8F880 /* SelTexCoordCmd.cpp */, + 012CB8451FFF8BDC00F8F880 /* SelTexCoordCmd.h */, + 012CB8461FFF8BDC00F8F880 /* SelVertexCmd.cpp */, + 012CB8471FFF8BDC00F8F880 /* SelVertexCmd.h */, + 012CB8481FFF8BDC00F8F880 /* SetApplicationModeCmd.cpp */, + 012CB8491FFF8BDC00F8F880 /* SetApplicationModeCmd.h */, + 012CB84A1FFF8BDC00F8F880 /* SetNextSourceCmd.cpp */, + 012CB84B1FFF8BDC00F8F880 /* SetNextSourceCmd.h */, + 012CB84C1FFF8BDC00F8F880 /* SetPresetCmd.cpp */, + 012CB84D1FFF8BDC00F8F880 /* SetPresetCmd.h */, + 012CB84E1FFF8BDC00F8F880 /* SetSourceCmd.cpp */, + 012CB84F1FFF8BDC00F8F880 /* SetSourceCmd.h */, + 012CB8501FFF8BDC00F8F880 /* SetTexMapDrawModeCmd.cpp */, + 012CB8511FFF8BDC00F8F880 /* SetTexMapDrawModeCmd.h */, + 012CB8521FFF8BDC00F8F880 /* StartDragSurfaceCmd.cpp */, + 012CB8531FFF8BDC00F8F880 /* StartDragSurfaceCmd.h */, + 012CB8541FFF8BDC00F8F880 /* ToggleAnimatedSourceCmd.cpp */, + 012CB8551FFF8BDC00F8F880 /* ToggleAnimatedSourceCmd.h */, + 012CB8561FFF8BDC00F8F880 /* TogglePerspectiveCmd.cpp */, + 012CB8571FFF8BDC00F8F880 /* TogglePerspectiveCmd.h */, + 012CB8581FFF8BDC00F8F880 /* TranslateCanvasCmd.cpp */, + 012CB8591FFF8BDC00F8F880 /* TranslateCanvasCmd.h */, ); path = Commands; sourceTree = ""; }; - 0166310D1DC8E8010081F28F /* Gui */ = { + 012CB85A1FFF8BDC00F8F880 /* Gui */ = { isa = PBXGroup; children = ( - 0166310E1DC8E8010081F28F /* Gui.cpp */, - 0166310F1DC8E8010081F28F /* Gui.h */, - 016631101DC8E8010081F28F /* Widgets */, + 012CB85B1FFF8BDC00F8F880 /* Gui.cpp */, + 012CB85C1FFF8BDC00F8F880 /* Gui.h */, + 012CB85D1FFF8BDC00F8F880 /* Widgets */, ); path = Gui; sourceTree = ""; }; - 016631101DC8E8010081F28F /* Widgets */ = { + 012CB85D1FFF8BDC00F8F880 /* Widgets */ = { isa = PBXGroup; children = ( - 016631111DC8E8010081F28F /* GuiBaseWidget.h */, - 016631121DC8E8010081F28F /* LayerPanelWidget.cpp */, - 016631131DC8E8010081F28F /* LayerPanelWidget.h */, - 016631141DC8E8010081F28F /* ProjectionEditorWidget.cpp */, - 016631151DC8E8010081F28F /* ProjectionEditorWidget.h */, - 016631161DC8E8010081F28F /* ScaleWidget.cpp */, - 016631171DC8E8010081F28F /* ScaleWidget.h */, - 016631181DC8E8010081F28F /* SourcesEditorWidget.cpp */, - 016631191DC8E8010081F28F /* SourcesEditorWidget.h */, - 0166311A1DC8E8010081F28F /* SurfaceHighlightWidget.cpp */, - 0166311B1DC8E8010081F28F /* SurfaceHighlightWidget.h */, - 0166311C1DC8E8010081F28F /* TextureEditorWidget.cpp */, - 0166311D1DC8E8010081F28F /* TextureEditorWidget.h */, - 0166311E1DC8E8010081F28F /* TextureHighlightWidget.cpp */, - 0166311F1DC8E8010081F28F /* TextureHighlightWidget.h */, + 012CB85E1FFF8BDC00F8F880 /* GuiBaseWidget.h */, + 012CB85F1FFF8BDC00F8F880 /* LayerPanelWidget.cpp */, + 012CB8601FFF8BDC00F8F880 /* LayerPanelWidget.h */, + 012CB8611FFF8BDC00F8F880 /* ProjectionEditorWidget.cpp */, + 012CB8621FFF8BDC00F8F880 /* ProjectionEditorWidget.h */, + 012CB8631FFF8BDC00F8F880 /* ScaleWidget.cpp */, + 012CB8641FFF8BDC00F8F880 /* ScaleWidget.h */, + 012CB8651FFF8BDC00F8F880 /* SourcesEditorWidget.cpp */, + 012CB8661FFF8BDC00F8F880 /* SourcesEditorWidget.h */, + 012CB8671FFF8BDC00F8F880 /* SurfaceHighlightWidget.cpp */, + 012CB8681FFF8BDC00F8F880 /* SurfaceHighlightWidget.h */, + 012CB8691FFF8BDC00F8F880 /* TextureEditorWidget.cpp */, + 012CB86A1FFF8BDC00F8F880 /* TextureEditorWidget.h */, + 012CB86B1FFF8BDC00F8F880 /* TextureHighlightWidget.cpp */, + 012CB86C1FFF8BDC00F8F880 /* TextureHighlightWidget.h */, ); path = Widgets; sourceTree = ""; }; - 016631201DC8E8010081F28F /* Info */ = { + 012CB86D1FFF8BDC00F8F880 /* Info */ = { isa = PBXGroup; children = ( - 016631211DC8E8010081F28F /* Info.cpp */, - 016631221DC8E8010081F28F /* Info.h */, + 012CB86E1FFF8BDC00F8F880 /* Info.cpp */, + 012CB86F1FFF8BDC00F8F880 /* Info.h */, ); path = Info; sourceTree = ""; }; - 016631231DC8E8010081F28F /* MediaServer */ = { + 012CB8701FFF8BDC00F8F880 /* MediaServer */ = { isa = PBXGroup; children = ( - 016631241DC8E8010081F28F /* DirectoryWatcher.cpp */, - 016631251DC8E8010081F28F /* DirectoryWatcher.h */, - 016631261DC8E8010081F28F /* MediaServer.cpp */, - 016631271DC8E8010081F28F /* MediaServer.h */, + 012CB8711FFF8BDC00F8F880 /* DirectoryWatcher.cpp */, + 012CB8721FFF8BDC00F8F880 /* DirectoryWatcher.h */, + 012CB8731FFF8BDC00F8F880 /* MediaServer.cpp */, + 012CB8741FFF8BDC00F8F880 /* MediaServer.h */, ); path = MediaServer; sourceTree = ""; }; - 0166312A1DC8E8010081F28F /* Sources */ = { + 012CB8781FFF8BDC00F8F880 /* Sources */ = { isa = PBXGroup; children = ( - 0166312B1DC8E8010081F28F /* BaseSource.cpp */, - 0166312C1DC8E8010081F28F /* BaseSource.h */, - 0166312D1DC8E8010081F28F /* FboSource.cpp */, - 0166312E1DC8E8010081F28F /* FboSource.h */, - 0166312F1DC8E8010081F28F /* ImageSource.cpp */, - 016631301DC8E8010081F28F /* ImageSource.h */, - 016631311DC8E8010081F28F /* OMXPlayerCache.cpp */, - 016631321DC8E8010081F28F /* OMXPlayerCache.h */, - 016631331DC8E8010081F28F /* SourceType.h */, - 016631341DC8E8010081F28F /* VideoSource.cpp */, - 016631351DC8E8010081F28F /* VideoSource.h */, + 012CB8791FFF8BDC00F8F880 /* BaseSource.cpp */, + 012CB87A1FFF8BDC00F8F880 /* BaseSource.h */, + 012CB87B1FFF8BDC00F8F880 /* FboSource.cpp */, + 012CB87C1FFF8BDC00F8F880 /* FboSource.h */, + 012CB87D1FFF8BDC00F8F880 /* ImageSource.cpp */, + 012CB87E1FFF8BDC00F8F880 /* ImageSource.h */, + 012CB87F1FFF8BDC00F8F880 /* magSlide.cpp */, + 012CB8801FFF8BDC00F8F880 /* magSlide.h */, + 012CB8811FFF8BDC00F8F880 /* magSlideShowSource.cpp */, + 012CB8821FFF8BDC00F8F880 /* magSlideShowSource.h */, + 012CB8831FFF8BDC00F8F880 /* magSlideTransition.cpp */, + 012CB8841FFF8BDC00F8F880 /* magSlideTransition.h */, + 012CB8851FFF8BDC00F8F880 /* magSlideTransitionFactory.cpp */, + 012CB8861FFF8BDC00F8F880 /* magSlideTransitionFactory.h */, + 012CB8871FFF8BDC00F8F880 /* OMXPlayerCache.cpp */, + 012CB8881FFF8BDC00F8F880 /* OMXPlayerCache.h */, + 012CB8891FFF8BDC00F8F880 /* SourceType.h */, + 012CB88A1FFF8BDC00F8F880 /* SourceTypeHelper.h */, + 012CB88B1FFF8BDC00F8F880 /* VideoSource.cpp */, + 012CB88C1FFF8BDC00F8F880 /* VideoSource.h */, ); path = Sources; sourceTree = ""; }; - 016631361DC8E8010081F28F /* Surfaces */ = { + 012CB88D1FFF8BDC00F8F880 /* Surfaces */ = { isa = PBXGroup; children = ( - 016631371DC8E8010081F28F /* BaseSurface.cpp */, - 016631381DC8E8010081F28F /* BaseSurface.h */, - 016631391DC8E8010081F28F /* GridWarpSurface.cpp */, - 0166313A1DC8E8010081F28F /* GridWarpSurface.h */, - 0166313B1DC8E8010081F28F /* HexagonSurface.cpp */, - 0166313C1DC8E8010081F28F /* HexagonSurface.h */, - 0166313D1DC8E8010081F28F /* QuadSurface.cpp */, - 0166313E1DC8E8010081F28F /* QuadSurface.h */, - 0166313F1DC8E8010081F28F /* SurfaceFactory.cpp */, - 016631401DC8E8010081F28F /* SurfaceFactory.h */, - 016631411DC8E8010081F28F /* SurfaceManager.cpp */, - 016631421DC8E8010081F28F /* SurfaceManager.h */, - 016631431DC8E8010081F28F /* SurfaceStack.cpp */, - 016631441DC8E8010081F28F /* SurfaceStack.h */, - 016631451DC8E8010081F28F /* SurfaceType.h */, - 016631461DC8E8010081F28F /* TriangleSurface.cpp */, - 016631471DC8E8010081F28F /* TriangleSurface.h */, + 012CB88E1FFF8BDC00F8F880 /* BaseSurface.cpp */, + 012CB88F1FFF8BDC00F8F880 /* BaseSurface.h */, + 012CB8901FFF8BDC00F8F880 /* CircleSurface.cpp */, + 012CB8911FFF8BDC00F8F880 /* CircleSurface.h */, + 012CB8921FFF8BDC00F8F880 /* GridWarpSurface.cpp */, + 012CB8931FFF8BDC00F8F880 /* GridWarpSurface.h */, + 012CB8941FFF8BDC00F8F880 /* HexagonSurface.cpp */, + 012CB8951FFF8BDC00F8F880 /* HexagonSurface.h */, + 012CB8961FFF8BDC00F8F880 /* QuadSurface.cpp */, + 012CB8971FFF8BDC00F8F880 /* QuadSurface.h */, + 012CB8981FFF8BDC00F8F880 /* SurfaceFactory.cpp */, + 012CB8991FFF8BDC00F8F880 /* SurfaceFactory.h */, + 012CB89A1FFF8BDC00F8F880 /* SurfaceManager.cpp */, + 012CB89B1FFF8BDC00F8F880 /* SurfaceManager.h */, + 012CB89C1FFF8BDC00F8F880 /* SurfaceStack.cpp */, + 012CB89D1FFF8BDC00F8F880 /* SurfaceStack.h */, + 012CB89E1FFF8BDC00F8F880 /* SurfaceType.h */, + 012CB89F1FFF8BDC00F8F880 /* TriangleSurface.cpp */, + 012CB8A01FFF8BDC00F8F880 /* TriangleSurface.h */, ); path = Surfaces; sourceTree = ""; }; - 016631481DC8E8010081F28F /* UserInterface */ = { + 012CB8A11FFF8BDC00F8F880 /* Types */ = { isa = PBXGroup; children = ( - 016631491DC8E8010081F28F /* BaseJoint.cpp */, - 0166314A1DC8E8010081F28F /* BaseJoint.h */, - 0166314B1DC8E8010081F28F /* CircleJoint.cpp */, - 0166314C1DC8E8010081F28F /* CircleJoint.h */, - 0166314D1DC8E8010081F28F /* EditorType.h */, - 0166314E1DC8E8010081F28F /* GuiMode.h */, - 0166314F1DC8E8010081F28F /* RadioList.cpp */, - 016631501DC8E8010081F28F /* RadioList.h */, + 012CB8A21FFF8BDC00F8F880 /* Vec2.cpp */, + 012CB8A31FFF8BDC00F8F880 /* Vec2.h */, + 012CB8A41FFF8BDC00F8F880 /* Vec3.cpp */, + 012CB8A51FFF8BDC00F8F880 /* Vec3.h */, + ); + path = Types; + sourceTree = ""; + }; + 012CB8A61FFF8BDC00F8F880 /* UserInterface */ = { + isa = PBXGroup; + children = ( + 012CB8A71FFF8BDC00F8F880 /* BaseJoint.cpp */, + 012CB8A81FFF8BDC00F8F880 /* BaseJoint.h */, + 012CB8A91FFF8BDC00F8F880 /* CircleJoint.cpp */, + 012CB8AA1FFF8BDC00F8F880 /* CircleJoint.h */, + 012CB8AB1FFF8BDC00F8F880 /* EditorType.h */, + 012CB8AC1FFF8BDC00F8F880 /* GuiMode.h */, + 012CB8AD1FFF8BDC00F8F880 /* RadioList.cpp */, + 012CB8AE1FFF8BDC00F8F880 /* RadioList.h */, ); path = UserInterface; sourceTree = ""; }; - 016631511DC8E8010081F28F /* Utils */ = { + 012CB8AF1FFF8BDC00F8F880 /* Utils */ = { isa = PBXGroup; children = ( - 016631521DC8E8010081F28F /* HomographyHelper.cpp */, - 016631531DC8E8010081F28F /* HomographyHelper.h */, + 012CB8B01FFF8BDC00F8F880 /* HomographyHelper.cpp */, + 012CB8B11FFF8BDC00F8F880 /* HomographyHelper.h */, ); path = Utils; sourceTree = ""; }; + 012CB8B21FFF8BE800F8F880 /* src */ = { + isa = PBXGroup; + children = ( + 012CB8B31FFF8BE800F8F880 /* ofxBaseGui.cpp */, + 012CB8B41FFF8BE800F8F880 /* ofxBaseGui.h */, + 012CB8B51FFF8BE800F8F880 /* ofxButton.cpp */, + 012CB8B61FFF8BE800F8F880 /* ofxButton.h */, + 012CB8B71FFF8BE800F8F880 /* ofxColorPicker.cpp */, + 012CB8B81FFF8BE800F8F880 /* ofxColorPicker.h */, + 012CB8B91FFF8BE800F8F880 /* ofxGui.h */, + 012CB8BA1FFF8BE800F8F880 /* ofxGuiGroup.cpp */, + 012CB8BB1FFF8BE800F8F880 /* ofxGuiGroup.h */, + 012CB8BC1FFF8BE800F8F880 /* ofxInputField.cpp */, + 012CB8BD1FFF8BE800F8F880 /* ofxInputField.h */, + 012CB8BE1FFF8BE800F8F880 /* ofxLabel.cpp */, + 012CB8BF1FFF8BE800F8F880 /* ofxLabel.h */, + 012CB8C01FFF8BE800F8F880 /* ofxPanel.cpp */, + 012CB8C11FFF8BE800F8F880 /* ofxPanel.h */, + 012CB8C21FFF8BE800F8F880 /* ofxSlider.cpp */, + 012CB8C31FFF8BE800F8F880 /* ofxSlider.h */, + 012CB8C41FFF8BE800F8F880 /* ofxSliderGroup.cpp */, + 012CB8C51FFF8BE800F8F880 /* ofxSliderGroup.h */, + 012CB8C61FFF8BE800F8F880 /* ofxToggle.cpp */, + 012CB8C71FFF8BE800F8F880 /* ofxToggle.h */, + ); + name = src; + path = ../../ofxGui/src; + sourceTree = ""; + }; 39264837192224C20008A7F5 /* ofxXmlSettings */ = { isa = PBXGroup; children = ( @@ -658,40 +738,15 @@ 3933D5C019BB87A3000ACA55 /* ofxGui */ = { isa = PBXGroup; children = ( - 3933D5C119BB87BD000ACA55 /* src */, + 012CB8B21FFF8BE800F8F880 /* src */, ); name = ofxGui; sourceTree = ""; }; - 3933D5C119BB87BD000ACA55 /* src */ = { - isa = PBXGroup; - children = ( - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */, - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */, - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */, - 3933D5C519BB87BD000ACA55 /* ofxButton.h */, - 3933D5C619BB87BD000ACA55 /* ofxGui.h */, - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */, - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */, - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */, - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */, - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */, - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */, - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */, - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */, - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */, - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */, - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */, - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */, - ); - name = src; - path = ../../ofxGui/src; - sourceTree = ""; - }; 396E8A34190FEDE500705899 /* ofxPiMapper */ = { isa = PBXGroup; children = ( - 016630B01DC8E8010081F28F /* src */, + 012CB7FD1FFF8BDC00F8F880 /* src */, ); name = ofxPiMapper; sourceTree = ""; @@ -865,7 +920,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\""; + 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"; }; /* End PBXShellScriptBuildPhase section */ @@ -874,94 +929,103 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0166316B1DC8E8010081F28F /* RmGridColCmd.cpp in Sources */, - 016631601DC8E8010081F28F /* ClearSurfacesCmd.cpp in Sources */, - 016631581DC8E8010081F28F /* PresentationMode.cpp in Sources */, - 016631791DC8E8010081F28F /* SetApplicationModeCmd.cpp in Sources */, - 0166317B1DC8E8010081F28F /* SetPresetCmd.cpp in Sources */, - 016631921DC8E8010081F28F /* VideoSource.cpp in Sources */, - 016631981DC8E8010081F28F /* SurfaceManager.cpp in Sources */, - 016631561DC8E8010081F28F /* Application.cpp in Sources */, - 016631851DC8E8010081F28F /* ScaleWidget.cpp in Sources */, - 016631711DC8E8010081F28F /* SelNextTexCoordCmd.cpp in Sources */, - 016631691DC8E8010081F28F /* MvSurfaceVertCmd.cpp in Sources */, - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, - 016631771DC8E8010081F28F /* SelTexCoordCmd.cpp in Sources */, - 0166315C1DC8E8010081F28F /* SettingsLoader.cpp in Sources */, - 016631881DC8E8010081F28F /* TextureEditorWidget.cpp in Sources */, - 016631841DC8E8010081F28F /* ProjectionEditorWidget.cpp in Sources */, - 0166315B1DC8E8010081F28F /* TextureMappingMode.cpp in Sources */, - 0166318D1DC8E8010081F28F /* ofxPiMapper.cpp in Sources */, - 0166318A1DC8E8010081F28F /* Info.cpp in Sources */, - 016631931DC8E8010081F28F /* BaseSurface.cpp in Sources */, - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, - 0166319D1DC8E8010081F28F /* RadioList.cpp in Sources */, - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, - 0166316F1DC8E8010081F28F /* ScaleSurfaceFromToCmd.cpp in Sources */, - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, - 016631721DC8E8010081F28F /* SelNextVertexCmd.cpp in Sources */, - 016631801DC8E8010081F28F /* TogglePerspectiveCmd.cpp in Sources */, - 016631901DC8E8010081F28F /* ImageSource.cpp in Sources */, + 012CB8C81FFF8BF500F8F880 /* ofxBaseGui.cpp in Sources */, + 012CB8CA1FFF8BF500F8F880 /* ofxButton.cpp in Sources */, + 012CB8CC1FFF8BF500F8F880 /* ofxColorPicker.cpp in Sources */, + 012CB8CF1FFF8BF500F8F880 /* ofxGuiGroup.cpp in Sources */, + 012CB8D11FFF8BF500F8F880 /* ofxInputField.cpp in Sources */, + 012CB8D31FFF8BF500F8F880 /* ofxLabel.cpp in Sources */, + 012CB8D51FFF8BF500F8F880 /* ofxPanel.cpp in Sources */, + 012CB8D71FFF8BF500F8F880 /* ofxSlider.cpp in Sources */, + 012CB8D91FFF8BF500F8F880 /* ofxSliderGroup.cpp in Sources */, + 012CB8DB1FFF8BF500F8F880 /* ofxToggle.cpp in Sources */, + 012CB8DF1FFF8BF500F8F880 /* Application.cpp in Sources */, + 012CB8E11FFF8BF500F8F880 /* ApplicationBaseMode.cpp in Sources */, + 012CB8E31FFF8BF500F8F880 /* PresentationMode.cpp in Sources */, + 012CB8E51FFF8BF500F8F880 /* ProjectionMappingMode.cpp in Sources */, + 012CB8E71FFF8BF500F8F880 /* SourceSelectionMode.cpp in Sources */, + 012CB8E91FFF8BF500F8F880 /* TextureMappingMode.cpp in Sources */, + 012CB8EB1FFF8BF500F8F880 /* SettingsLoader.cpp in Sources */, + 012CB8ED1FFF8BF500F8F880 /* AddGridColCmd.cpp in Sources */, + 012CB8EF1FFF8BF500F8F880 /* AddGridRowCmd.cpp in Sources */, + 012CB8F11FFF8BF500F8F880 /* AddSurfaceCmd.cpp in Sources */, + 012CB8F41FFF8BF500F8F880 /* ClearSurfacesCmd.cpp in Sources */, + 012CB8F61FFF8BF500F8F880 /* CmdManager.cpp in Sources */, + 012CB8F81FFF8BF500F8F880 /* DeselectSurfaceCmd.cpp in Sources */, + 012CB8FA1FFF8BF500F8F880 /* DeselectTexCoordCmd.cpp in Sources */, + 012CB8FC1FFF8BF500F8F880 /* DuplicateSurfaceCmd.cpp in Sources */, + 012CB8FE1FFF8BF500F8F880 /* MvAllTexCoordsCmd.cpp in Sources */, + 012CB9001FFF8BF500F8F880 /* MvLayerDnCmd.cpp in Sources */, + 012CB9021FFF8BF500F8F880 /* MvLayerUpCmd.cpp in Sources */, + 012CB9041FFF8BF500F8F880 /* MvSelectionCmd.cpp in Sources */, + 012CB9061FFF8BF500F8F880 /* MvSurfaceVertCmd.cpp in Sources */, + 012CB9081FFF8BF500F8F880 /* MvTexCoordCmd.cpp in Sources */, + 012CB90A1FFF8BF500F8F880 /* RmGridColCmd.cpp in Sources */, + 012CB90C1FFF8BF500F8F880 /* RmGridRowCmd.cpp in Sources */, + 012CB90E1FFF8BF500F8F880 /* RmSurfaceCmd.cpp in Sources */, + 012CB9101FFF8BF500F8F880 /* SaveTexCoordPosCmd.cpp in Sources */, + 012CB9121FFF8BF500F8F880 /* ScaleSurfaceFromToCmd.cpp in Sources */, + 012CB9141FFF8BF500F8F880 /* SelNextSurfaceCmd.cpp in Sources */, + 012CB9161FFF8BF500F8F880 /* SelNextTexCoordCmd.cpp in Sources */, + 012CB9181FFF8BF500F8F880 /* SelNextVertexCmd.cpp in Sources */, + 012CB91A1FFF8BF500F8F880 /* SelPrevSurfaceCmd.cpp in Sources */, + 012CB91C1FFF8BF500F8F880 /* SelPrevTexCoordCmd.cpp in Sources */, + 012CB91E1FFF8BF500F8F880 /* SelPrevVertexCmd.cpp in Sources */, + 012CB9201FFF8BF500F8F880 /* SelSurfaceCmd.cpp in Sources */, + 012CB9221FFF8BF500F8F880 /* SelTexCoordCmd.cpp in Sources */, + 012CB9241FFF8BF500F8F880 /* SelVertexCmd.cpp in Sources */, + 012CB9261FFF8BF500F8F880 /* SetApplicationModeCmd.cpp in Sources */, + 012CB9281FFF8BF500F8F880 /* SetNextSourceCmd.cpp in Sources */, + 012CB92A1FFF8BF500F8F880 /* SetPresetCmd.cpp in Sources */, + 012CB92C1FFF8BF500F8F880 /* SetSourceCmd.cpp in Sources */, + 012CB92E1FFF8BF500F8F880 /* SetTexMapDrawModeCmd.cpp in Sources */, + 012CB9301FFF8BF500F8F880 /* StartDragSurfaceCmd.cpp in Sources */, + 012CB9321FFF8BF500F8F880 /* ToggleAnimatedSourceCmd.cpp in Sources */, + 012CB9341FFF8BF500F8F880 /* TogglePerspectiveCmd.cpp in Sources */, + 012CB9361FFF8BF500F8F880 /* TranslateCanvasCmd.cpp in Sources */, + 012CB9381FFF8BF500F8F880 /* Gui.cpp in Sources */, + 012CB93B1FFF8BF500F8F880 /* LayerPanelWidget.cpp in Sources */, + 012CB93D1FFF8BF500F8F880 /* ProjectionEditorWidget.cpp in Sources */, + 012CB93F1FFF8BF500F8F880 /* ScaleWidget.cpp in Sources */, + 012CB9411FFF8BF500F8F880 /* SourcesEditorWidget.cpp in Sources */, + 012CB9431FFF8BF500F8F880 /* SurfaceHighlightWidget.cpp in Sources */, + 012CB9451FFF8BF500F8F880 /* TextureEditorWidget.cpp in Sources */, + 012CB9471FFF8BF500F8F880 /* TextureHighlightWidget.cpp in Sources */, + 012CB9491FFF8BF500F8F880 /* Info.cpp in Sources */, + 012CB94B1FFF8BF500F8F880 /* DirectoryWatcher.cpp in Sources */, + 012CB94D1FFF8BF500F8F880 /* MediaServer.cpp in Sources */, + 012CB9501FFF8BF500F8F880 /* ofxPiMapper.cpp in Sources */, + 012CB9521FFF8BF500F8F880 /* BaseSource.cpp in Sources */, + 012CB9541FFF8BF500F8F880 /* FboSource.cpp in Sources */, + 012CB9561FFF8BF500F8F880 /* ImageSource.cpp in Sources */, + 012CB9581FFF8BF500F8F880 /* magSlide.cpp in Sources */, + 012CB95A1FFF8BF500F8F880 /* magSlideShowSource.cpp in Sources */, + 012CB95C1FFF8BF500F8F880 /* magSlideTransition.cpp in Sources */, + 012CB95E1FFF8BF500F8F880 /* magSlideTransitionFactory.cpp in Sources */, + 012CB9601FFF8BF500F8F880 /* OMXPlayerCache.cpp in Sources */, + 012CB9641FFF8BF500F8F880 /* VideoSource.cpp in Sources */, + 012CB9661FFF8BF500F8F880 /* BaseSurface.cpp in Sources */, + 012CB9681FFF8BF500F8F880 /* CircleSurface.cpp in Sources */, + 012CB96A1FFF8BF500F8F880 /* GridWarpSurface.cpp in Sources */, + 012CB96C1FFF8BF500F8F880 /* HexagonSurface.cpp in Sources */, + 012CB96E1FFF8BF500F8F880 /* QuadSurface.cpp in Sources */, + 012CB9701FFF8BF500F8F880 /* SurfaceFactory.cpp in Sources */, + 012CB9721FFF8BF500F8F880 /* SurfaceManager.cpp in Sources */, + 012CB9741FFF8BF500F8F880 /* SurfaceStack.cpp in Sources */, + 012CB9771FFF8BF500F8F880 /* TriangleSurface.cpp in Sources */, + 012CB9791FFF8BF500F8F880 /* Vec2.cpp in Sources */, + 012CB97B1FFF8BF500F8F880 /* Vec3.cpp in Sources */, + 012CB97D1FFF8BF500F8F880 /* BaseJoint.cpp in Sources */, + 012CB97F1FFF8BF500F8F880 /* CircleJoint.cpp in Sources */, + 012CB9831FFF8BF500F8F880 /* RadioList.cpp in Sources */, + 012CB9851FFF8BF500F8F880 /* HomographyHelper.cpp in Sources */, 01DC7EDE1E452858003137B7 /* InputHandler.cpp in Sources */, - 016631761DC8E8010081F28F /* SelSurfaceCmd.cpp in Sources */, - 016631571DC8E8010081F28F /* ApplicationBaseMode.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, - 016631941DC8E8010081F28F /* GridWarpSurface.cpp in Sources */, - 0166315A1DC8E8010081F28F /* SourceSelectionMode.cpp in Sources */, - 016631661DC8E8010081F28F /* MvLayerDnCmd.cpp in Sources */, - 0166319E1DC8E8010081F28F /* HomographyHelper.cpp in Sources */, 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, - 016631971DC8E8010081F28F /* SurfaceFactory.cpp in Sources */, - 016631591DC8E8010081F28F /* ProjectionMappingMode.cpp in Sources */, - 0166316D1DC8E8010081F28F /* RmSurfaceCmd.cpp in Sources */, - 016631741DC8E8010081F28F /* SelPrevTexCoordCmd.cpp in Sources */, - 016631861DC8E8010081F28F /* SourcesEditorWidget.cpp in Sources */, - 016631611DC8E8010081F28F /* CmdManager.cpp in Sources */, - 0166318B1DC8E8010081F28F /* DirectoryWatcher.cpp in Sources */, - 0166316A1DC8E8010081F28F /* MvTexCoordCmd.cpp in Sources */, 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, - 016631651DC8E8010081F28F /* MvAllTexCoordsCmd.cpp in Sources */, - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, - 0166317F1DC8E8010081F28F /* ToggleAnimatedSourceCmd.cpp in Sources */, - 016631751DC8E8010081F28F /* SelPrevVertexCmd.cpp in Sources */, - 0166317E1DC8E8010081F28F /* StartDragSurfaceCmd.cpp in Sources */, - 016631871DC8E8010081F28F /* SurfaceHighlightWidget.cpp in Sources */, - 016631731DC8E8010081F28F /* SelPrevSurfaceCmd.cpp in Sources */, - 0166318F1DC8E8010081F28F /* FboSource.cpp in Sources */, - 016631681DC8E8010081F28F /* MvSelectionCmd.cpp in Sources */, - 016631821DC8E8010081F28F /* Gui.cpp in Sources */, - 016631701DC8E8010081F28F /* SelNextSurfaceCmd.cpp in Sources */, - 0166319C1DC8E8010081F28F /* CircleJoint.cpp in Sources */, - 0166317A1DC8E8010081F28F /* SetNextSourceCmd.cpp in Sources */, - 0166317C1DC8E8010081F28F /* SetSourceCmd.cpp in Sources */, E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, - 0166315F1DC8E8010081F28F /* AddSurfaceCmd.cpp in Sources */, - 016631631DC8E8010081F28F /* DeselectTexCoordCmd.cpp in Sources */, - 0166318E1DC8E8010081F28F /* BaseSource.cpp in Sources */, - 016631641DC8E8010081F28F /* DuplicateSurfaceCmd.cpp in Sources */, - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, - 016631831DC8E8010081F28F /* LayerPanelWidget.cpp in Sources */, - 016631811DC8E8010081F28F /* TranslateCanvasCmd.cpp in Sources */, - 0166315E1DC8E8010081F28F /* AddGridRowCmd.cpp in Sources */, - 0166317D1DC8E8010081F28F /* SetTexMapDrawModeCmd.cpp in Sources */, - 0166318C1DC8E8010081F28F /* MediaServer.cpp in Sources */, - 016631781DC8E8010081F28F /* SelVertexCmd.cpp in Sources */, - 016631911DC8E8010081F28F /* OMXPlayerCache.cpp in Sources */, 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, - 016631991DC8E8010081F28F /* SurfaceStack.cpp in Sources */, 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, - 016631961DC8E8010081F28F /* QuadSurface.cpp in Sources */, - 0166316C1DC8E8010081F28F /* RmGridRowCmd.cpp in Sources */, - 0166319B1DC8E8010081F28F /* BaseJoint.cpp in Sources */, - 016631891DC8E8010081F28F /* TextureHighlightWidget.cpp in Sources */, - 016631671DC8E8010081F28F /* MvLayerUpCmd.cpp in Sources */, - 016631951DC8E8010081F28F /* HexagonSurface.cpp in Sources */, - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, - 0166319A1DC8E8010081F28F /* TriangleSurface.cpp in Sources */, - 0166316E1DC8E8010081F28F /* SaveTexCoordPosCmd.cpp in Sources */, - 016631621DC8E8010081F28F /* DeselectSurfaceCmd.cpp in Sources */, - 0166315D1DC8E8010081F28F /* AddGridColCmd.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 9827e6df4e7e57d45ecbb939d0d8bcc098b9403a Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:45:17 +0100 Subject: [PATCH 085/103] Add addons.make.rpi to example_gamepad --- example_gamepad/addons.make | 2 -- example_gamepad/addons.make.rpi | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 example_gamepad/addons.make.rpi diff --git a/example_gamepad/addons.make b/example_gamepad/addons.make index 6546213..0d1404c 100644 --- a/example_gamepad/addons.make +++ b/example_gamepad/addons.make @@ -1,5 +1,3 @@ ofxPiMapper -ofxIO ofxXmlSettings ofxGui -ofxOMXPlayer diff --git a/example_gamepad/addons.make.rpi b/example_gamepad/addons.make.rpi new file mode 100644 index 0000000..963941c --- /dev/null +++ b/example_gamepad/addons.make.rpi @@ -0,0 +1,4 @@ +ofxGui +ofxPiMapper +ofxXmlSettings +ofxOMXPlayer From 23c3128a40b3ced097da0cd577aaa9a34cfa1442 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:54:18 +0100 Subject: [PATCH 086/103] Fix example_shortcuts with ofx::piMapper::Vec3 --- example_shortcuts/src/ofApp.cpp | 8 ++++---- example_shortcuts/src/ofApp.h | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/example_shortcuts/src/ofApp.cpp b/example_shortcuts/src/ofApp.cpp index c696003..68b09ab 100644 --- a/example_shortcuts/src/ofApp.cpp +++ b/example_shortcuts/src/ofApp.cpp @@ -33,13 +33,13 @@ void ofApp::keyPressed(int key){ }else if(key == OF_KEY_BACKSPACE){ mapper.eraseSurface(mapper.getNumSurfaces() - 1); }else if(key == OF_KEY_LEFT){ - mapper.moveSelection(ofVec2f(-20.0f, 0.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(-20.0f, 0.0f, 0.0f)); }else if(key == OF_KEY_RIGHT){ - mapper.moveSelection(ofVec2f(20.0f, 0.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(20.0f, 0.0f, 0.0f)); }else if(key == OF_KEY_UP){ - mapper.moveSelection(ofVec2f(0.0f, -20.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(0.0f, -20.0f, 0.0f)); }else if(key == OF_KEY_DOWN){ - mapper.moveSelection(ofVec2f(0.0f, 20.0f)); + mapper.moveSelection(ofx::piMapper::Vec3(0.0f, 20.0f, 0.0f)); }else if(key == 'k'){ mapper.selectNextSurface(); }else if(key == 'j'){ diff --git a/example_shortcuts/src/ofApp.h b/example_shortcuts/src/ofApp.h index be34c76..63be198 100644 --- a/example_shortcuts/src/ofApp.h +++ b/example_shortcuts/src/ofApp.h @@ -2,6 +2,7 @@ #include "ofMain.h" #include "ofxPiMapper.h" +#include "Vec3.h" class ofApp : public ofBaseApp { public: From 60c9b68d5966b13dbbedee12e8c2b32f9c42e5f7 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:54:32 +0100 Subject: [PATCH 087/103] Fix example_shortcuts.xcodeproj --- .../project.pbxproj | 1138 +++++++++-------- .../example_shortcuts Debug.xcscheme | 10 +- .../example_shortcuts Release.xcscheme | 10 +- 3 files changed, 612 insertions(+), 546 deletions(-) diff --git a/example_shortcuts/example_shortcuts.xcodeproj/project.pbxproj b/example_shortcuts/example_shortcuts.xcodeproj/project.pbxproj index 464f199..b81ebb3 100644 --- a/example_shortcuts/example_shortcuts.xcodeproj/project.pbxproj +++ b/example_shortcuts/example_shortcuts.xcodeproj/project.pbxproj @@ -7,91 +7,100 @@ objects = { /* Begin PBXBuildFile section */ - 013E61FF1E2E2FAE00FACF28 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E615B1E2E2FAE00FACF28 /* Application.cpp */; }; - 013E62001E2E2FAE00FACF28 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E615E1E2E2FAE00FACF28 /* ApplicationBaseMode.cpp */; }; - 013E62011E2E2FAE00FACF28 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61601E2E2FAE00FACF28 /* PresentationMode.cpp */; }; - 013E62021E2E2FAE00FACF28 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61621E2E2FAE00FACF28 /* ProjectionMappingMode.cpp */; }; - 013E62031E2E2FAE00FACF28 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61641E2E2FAE00FACF28 /* SourceSelectionMode.cpp */; }; - 013E62041E2E2FAE00FACF28 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61661E2E2FAE00FACF28 /* TextureMappingMode.cpp */; }; - 013E62051E2E2FAE00FACF28 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61681E2E2FAE00FACF28 /* SettingsLoader.cpp */; }; - 013E62061E2E2FAE00FACF28 /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E616B1E2E2FAE00FACF28 /* AddGridColCmd.cpp */; }; - 013E62071E2E2FAE00FACF28 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E616D1E2E2FAE00FACF28 /* AddGridRowCmd.cpp */; }; - 013E62081E2E2FAE00FACF28 /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E616F1E2E2FAE00FACF28 /* AddSurfaceCmd.cpp */; }; - 013E62091E2E2FAE00FACF28 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61721E2E2FAE00FACF28 /* ClearSurfacesCmd.cpp */; }; - 013E620A1E2E2FAE00FACF28 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61741E2E2FAE00FACF28 /* CmdManager.cpp */; }; - 013E620B1E2E2FAE00FACF28 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61761E2E2FAE00FACF28 /* DeselectSurfaceCmd.cpp */; }; - 013E620C1E2E2FAE00FACF28 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61781E2E2FAE00FACF28 /* DeselectTexCoordCmd.cpp */; }; - 013E620D1E2E2FAE00FACF28 /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E617A1E2E2FAE00FACF28 /* DuplicateSurfaceCmd.cpp */; }; - 013E620E1E2E2FAE00FACF28 /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E617C1E2E2FAE00FACF28 /* MvAllTexCoordsCmd.cpp */; }; - 013E620F1E2E2FAE00FACF28 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E617E1E2E2FAE00FACF28 /* MvLayerDnCmd.cpp */; }; - 013E62101E2E2FAE00FACF28 /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61801E2E2FAE00FACF28 /* MvLayerUpCmd.cpp */; }; - 013E62111E2E2FAE00FACF28 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61821E2E2FAE00FACF28 /* MvSelectionCmd.cpp */; }; - 013E62121E2E2FAE00FACF28 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61841E2E2FAE00FACF28 /* MvSurfaceVertCmd.cpp */; }; - 013E62131E2E2FAE00FACF28 /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61861E2E2FAE00FACF28 /* MvTexCoordCmd.cpp */; }; - 013E62141E2E2FAE00FACF28 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61881E2E2FAE00FACF28 /* RmGridColCmd.cpp */; }; - 013E62151E2E2FAE00FACF28 /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E618A1E2E2FAE00FACF28 /* RmGridRowCmd.cpp */; }; - 013E62161E2E2FAE00FACF28 /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E618C1E2E2FAE00FACF28 /* RmSurfaceCmd.cpp */; }; - 013E62171E2E2FAE00FACF28 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E618E1E2E2FAE00FACF28 /* SaveTexCoordPosCmd.cpp */; }; - 013E62181E2E2FAE00FACF28 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61901E2E2FAE00FACF28 /* ScaleSurfaceFromToCmd.cpp */; }; - 013E62191E2E2FAE00FACF28 /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61921E2E2FAE00FACF28 /* SelNextSurfaceCmd.cpp */; }; - 013E621A1E2E2FAE00FACF28 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61941E2E2FAE00FACF28 /* SelNextTexCoordCmd.cpp */; }; - 013E621B1E2E2FAE00FACF28 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61961E2E2FAE00FACF28 /* SelNextVertexCmd.cpp */; }; - 013E621C1E2E2FAE00FACF28 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61981E2E2FAE00FACF28 /* SelPrevSurfaceCmd.cpp */; }; - 013E621D1E2E2FAE00FACF28 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E619A1E2E2FAE00FACF28 /* SelPrevTexCoordCmd.cpp */; }; - 013E621E1E2E2FAE00FACF28 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E619C1E2E2FAE00FACF28 /* SelPrevVertexCmd.cpp */; }; - 013E621F1E2E2FAE00FACF28 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E619E1E2E2FAE00FACF28 /* SelSurfaceCmd.cpp */; }; - 013E62201E2E2FAE00FACF28 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61A01E2E2FAE00FACF28 /* SelTexCoordCmd.cpp */; }; - 013E62211E2E2FAE00FACF28 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61A21E2E2FAE00FACF28 /* SelVertexCmd.cpp */; }; - 013E62221E2E2FAE00FACF28 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61A41E2E2FAE00FACF28 /* SetApplicationModeCmd.cpp */; }; - 013E62231E2E2FAE00FACF28 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61A61E2E2FAE00FACF28 /* SetNextSourceCmd.cpp */; }; - 013E62241E2E2FAE00FACF28 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61A81E2E2FAE00FACF28 /* SetPresetCmd.cpp */; }; - 013E62251E2E2FAE00FACF28 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61AA1E2E2FAE00FACF28 /* SetSourceCmd.cpp */; }; - 013E62261E2E2FAE00FACF28 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61AC1E2E2FAE00FACF28 /* SetTexMapDrawModeCmd.cpp */; }; - 013E62271E2E2FAE00FACF28 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61AE1E2E2FAE00FACF28 /* StartDragSurfaceCmd.cpp */; }; - 013E62281E2E2FAE00FACF28 /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61B01E2E2FAE00FACF28 /* ToggleAnimatedSourceCmd.cpp */; }; - 013E62291E2E2FAE00FACF28 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61B21E2E2FAE00FACF28 /* TogglePerspectiveCmd.cpp */; }; - 013E622A1E2E2FAE00FACF28 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61B41E2E2FAE00FACF28 /* TranslateCanvasCmd.cpp */; }; - 013E622B1E2E2FAE00FACF28 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61B71E2E2FAE00FACF28 /* Gui.cpp */; }; - 013E622C1E2E2FAE00FACF28 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61BB1E2E2FAE00FACF28 /* LayerPanelWidget.cpp */; }; - 013E622D1E2E2FAE00FACF28 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61BD1E2E2FAE00FACF28 /* ProjectionEditorWidget.cpp */; }; - 013E622E1E2E2FAE00FACF28 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61BF1E2E2FAE00FACF28 /* ScaleWidget.cpp */; }; - 013E622F1E2E2FAE00FACF28 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61C11E2E2FAE00FACF28 /* SourcesEditorWidget.cpp */; }; - 013E62301E2E2FAE00FACF28 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61C31E2E2FAE00FACF28 /* SurfaceHighlightWidget.cpp */; }; - 013E62311E2E2FAE00FACF28 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61C51E2E2FAE00FACF28 /* TextureEditorWidget.cpp */; }; - 013E62321E2E2FAE00FACF28 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61C71E2E2FAE00FACF28 /* TextureHighlightWidget.cpp */; }; - 013E62331E2E2FAE00FACF28 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61CA1E2E2FAE00FACF28 /* Info.cpp */; }; - 013E62341E2E2FAE00FACF28 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61CD1E2E2FAE00FACF28 /* DirectoryWatcher.cpp */; }; - 013E62351E2E2FAE00FACF28 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61CF1E2E2FAE00FACF28 /* MediaServer.cpp */; }; - 013E62361E2E2FAE00FACF28 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61D11E2E2FAE00FACF28 /* ofxPiMapper.cpp */; }; - 013E62371E2E2FAE00FACF28 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61D41E2E2FAE00FACF28 /* BaseSource.cpp */; }; - 013E62381E2E2FAE00FACF28 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61D61E2E2FAE00FACF28 /* FboSource.cpp */; }; - 013E62391E2E2FAE00FACF28 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61D81E2E2FAE00FACF28 /* ImageSource.cpp */; }; - 013E623A1E2E2FAE00FACF28 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61DA1E2E2FAE00FACF28 /* OMXPlayerCache.cpp */; }; - 013E623B1E2E2FAE00FACF28 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61DD1E2E2FAE00FACF28 /* VideoSource.cpp */; }; - 013E623C1E2E2FAE00FACF28 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61E01E2E2FAE00FACF28 /* BaseSurface.cpp */; }; - 013E623D1E2E2FAE00FACF28 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61E21E2E2FAE00FACF28 /* GridWarpSurface.cpp */; }; - 013E623E1E2E2FAE00FACF28 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61E41E2E2FAE00FACF28 /* HexagonSurface.cpp */; }; - 013E623F1E2E2FAE00FACF28 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61E61E2E2FAE00FACF28 /* QuadSurface.cpp */; }; - 013E62401E2E2FAE00FACF28 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61E81E2E2FAE00FACF28 /* SurfaceFactory.cpp */; }; - 013E62411E2E2FAE00FACF28 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61EA1E2E2FAE00FACF28 /* SurfaceManager.cpp */; }; - 013E62421E2E2FAE00FACF28 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61EC1E2E2FAE00FACF28 /* SurfaceStack.cpp */; }; - 013E62431E2E2FAE00FACF28 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61EF1E2E2FAE00FACF28 /* TriangleSurface.cpp */; }; - 013E62441E2E2FAE00FACF28 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61F21E2E2FAE00FACF28 /* BaseJoint.cpp */; }; - 013E62451E2E2FAE00FACF28 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61F41E2E2FAE00FACF28 /* CircleJoint.cpp */; }; - 013E62461E2E2FAE00FACF28 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61F81E2E2FAE00FACF28 /* RadioList.cpp */; }; - 013E62471E2E2FAE00FACF28 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013E61FB1E2E2FAE00FACF28 /* HomographyHelper.cpp */; }; + 012CBA541FFF8F1B00F8F880 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA3E1FFF8EEE00F8F880 /* ofxBaseGui.cpp */; }; + 012CBA551FFF8F1B00F8F880 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA401FFF8EEE00F8F880 /* ofxButton.cpp */; }; + 012CBA561FFF8F1B00F8F880 /* ofxColorPicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA421FFF8EEE00F8F880 /* ofxColorPicker.cpp */; }; + 012CBA571FFF8F1B00F8F880 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA451FFF8EEE00F8F880 /* ofxGuiGroup.cpp */; }; + 012CBA581FFF8F1B00F8F880 /* ofxInputField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA471FFF8EEE00F8F880 /* ofxInputField.cpp */; }; + 012CBA591FFF8F1B00F8F880 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA491FFF8EEE00F8F880 /* ofxLabel.cpp */; }; + 012CBA5A1FFF8F1B00F8F880 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA4B1FFF8EEE00F8F880 /* ofxPanel.cpp */; }; + 012CBA5B1FFF8F1B00F8F880 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA4D1FFF8EEE00F8F880 /* ofxSlider.cpp */; }; + 012CBA5C1FFF8F1B00F8F880 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA4F1FFF8EEE00F8F880 /* ofxSliderGroup.cpp */; }; + 012CBA5D1FFF8F1B00F8F880 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA511FFF8EEE00F8F880 /* ofxToggle.cpp */; }; + 012CBA5E1FFF8F2500F8F880 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB98A1FFF8EE300F8F880 /* Application.cpp */; }; + 012CBA5F1FFF8F2500F8F880 /* ApplicationBaseMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB98D1FFF8EE300F8F880 /* ApplicationBaseMode.cpp */; }; + 012CBA601FFF8F2500F8F880 /* PresentationMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB98F1FFF8EE300F8F880 /* PresentationMode.cpp */; }; + 012CBA611FFF8F2500F8F880 /* ProjectionMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9911FFF8EE300F8F880 /* ProjectionMappingMode.cpp */; }; + 012CBA621FFF8F2500F8F880 /* SourceSelectionMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9931FFF8EE300F8F880 /* SourceSelectionMode.cpp */; }; + 012CBA631FFF8F2500F8F880 /* TextureMappingMode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9951FFF8EE300F8F880 /* TextureMappingMode.cpp */; }; + 012CBA641FFF8F2500F8F880 /* SettingsLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9971FFF8EE300F8F880 /* SettingsLoader.cpp */; }; + 012CBA651FFF8F2500F8F880 /* AddGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB99A1FFF8EE300F8F880 /* AddGridColCmd.cpp */; }; + 012CBA661FFF8F2500F8F880 /* AddGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB99C1FFF8EE300F8F880 /* AddGridRowCmd.cpp */; }; + 012CBA671FFF8F2500F8F880 /* AddSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB99E1FFF8EE300F8F880 /* AddSurfaceCmd.cpp */; }; + 012CBA681FFF8F2500F8F880 /* ClearSurfacesCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9A11FFF8EE300F8F880 /* ClearSurfacesCmd.cpp */; }; + 012CBA691FFF8F2500F8F880 /* CmdManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9A31FFF8EE300F8F880 /* CmdManager.cpp */; }; + 012CBA6A1FFF8F2500F8F880 /* DeselectSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9A51FFF8EE300F8F880 /* DeselectSurfaceCmd.cpp */; }; + 012CBA6B1FFF8F2500F8F880 /* DeselectTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9A71FFF8EE300F8F880 /* DeselectTexCoordCmd.cpp */; }; + 012CBA6C1FFF8F2500F8F880 /* DuplicateSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9A91FFF8EE300F8F880 /* DuplicateSurfaceCmd.cpp */; }; + 012CBA6D1FFF8F2500F8F880 /* MvAllTexCoordsCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9AB1FFF8EE300F8F880 /* MvAllTexCoordsCmd.cpp */; }; + 012CBA6E1FFF8F2500F8F880 /* MvLayerDnCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9AD1FFF8EE300F8F880 /* MvLayerDnCmd.cpp */; }; + 012CBA6F1FFF8F2500F8F880 /* MvLayerUpCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9AF1FFF8EE300F8F880 /* MvLayerUpCmd.cpp */; }; + 012CBA701FFF8F2500F8F880 /* MvSelectionCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9B11FFF8EE300F8F880 /* MvSelectionCmd.cpp */; }; + 012CBA711FFF8F2500F8F880 /* MvSurfaceVertCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9B31FFF8EE300F8F880 /* MvSurfaceVertCmd.cpp */; }; + 012CBA721FFF8F2500F8F880 /* MvTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9B51FFF8EE300F8F880 /* MvTexCoordCmd.cpp */; }; + 012CBA731FFF8F2500F8F880 /* RmGridColCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9B71FFF8EE300F8F880 /* RmGridColCmd.cpp */; }; + 012CBA741FFF8F2500F8F880 /* RmGridRowCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9B91FFF8EE300F8F880 /* RmGridRowCmd.cpp */; }; + 012CBA751FFF8F2500F8F880 /* RmSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9BB1FFF8EE300F8F880 /* RmSurfaceCmd.cpp */; }; + 012CBA761FFF8F2500F8F880 /* SaveTexCoordPosCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9BD1FFF8EE300F8F880 /* SaveTexCoordPosCmd.cpp */; }; + 012CBA771FFF8F2500F8F880 /* ScaleSurfaceFromToCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9BF1FFF8EE300F8F880 /* ScaleSurfaceFromToCmd.cpp */; }; + 012CBA781FFF8F2500F8F880 /* SelNextSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9C11FFF8EE300F8F880 /* SelNextSurfaceCmd.cpp */; }; + 012CBA791FFF8F2500F8F880 /* SelNextTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9C31FFF8EE300F8F880 /* SelNextTexCoordCmd.cpp */; }; + 012CBA7A1FFF8F2500F8F880 /* SelNextVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9C51FFF8EE300F8F880 /* SelNextVertexCmd.cpp */; }; + 012CBA7B1FFF8F2500F8F880 /* SelPrevSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9C71FFF8EE300F8F880 /* SelPrevSurfaceCmd.cpp */; }; + 012CBA7C1FFF8F2500F8F880 /* SelPrevTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9C91FFF8EE300F8F880 /* SelPrevTexCoordCmd.cpp */; }; + 012CBA7D1FFF8F2500F8F880 /* SelPrevVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9CB1FFF8EE300F8F880 /* SelPrevVertexCmd.cpp */; }; + 012CBA7E1FFF8F2500F8F880 /* SelSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9CD1FFF8EE300F8F880 /* SelSurfaceCmd.cpp */; }; + 012CBA7F1FFF8F2500F8F880 /* SelTexCoordCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9CF1FFF8EE300F8F880 /* SelTexCoordCmd.cpp */; }; + 012CBA801FFF8F2500F8F880 /* SelVertexCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9D11FFF8EE300F8F880 /* SelVertexCmd.cpp */; }; + 012CBA811FFF8F2500F8F880 /* SetApplicationModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9D31FFF8EE300F8F880 /* SetApplicationModeCmd.cpp */; }; + 012CBA821FFF8F2500F8F880 /* SetNextSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9D51FFF8EE300F8F880 /* SetNextSourceCmd.cpp */; }; + 012CBA831FFF8F2500F8F880 /* SetPresetCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9D71FFF8EE300F8F880 /* SetPresetCmd.cpp */; }; + 012CBA841FFF8F2500F8F880 /* SetSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9D91FFF8EE300F8F880 /* SetSourceCmd.cpp */; }; + 012CBA851FFF8F2500F8F880 /* SetTexMapDrawModeCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9DB1FFF8EE300F8F880 /* SetTexMapDrawModeCmd.cpp */; }; + 012CBA861FFF8F2500F8F880 /* StartDragSurfaceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9DD1FFF8EE300F8F880 /* StartDragSurfaceCmd.cpp */; }; + 012CBA871FFF8F2500F8F880 /* ToggleAnimatedSourceCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9DF1FFF8EE300F8F880 /* ToggleAnimatedSourceCmd.cpp */; }; + 012CBA881FFF8F2500F8F880 /* TogglePerspectiveCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9E11FFF8EE300F8F880 /* TogglePerspectiveCmd.cpp */; }; + 012CBA891FFF8F2500F8F880 /* TranslateCanvasCmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9E31FFF8EE300F8F880 /* TranslateCanvasCmd.cpp */; }; + 012CBA8A1FFF8F2500F8F880 /* Gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9E61FFF8EE300F8F880 /* Gui.cpp */; }; + 012CBA8B1FFF8F2500F8F880 /* LayerPanelWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9EA1FFF8EE300F8F880 /* LayerPanelWidget.cpp */; }; + 012CBA8C1FFF8F2500F8F880 /* ProjectionEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9EC1FFF8EE300F8F880 /* ProjectionEditorWidget.cpp */; }; + 012CBA8D1FFF8F2500F8F880 /* ScaleWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9EE1FFF8EE300F8F880 /* ScaleWidget.cpp */; }; + 012CBA8E1FFF8F2500F8F880 /* SourcesEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9F01FFF8EE300F8F880 /* SourcesEditorWidget.cpp */; }; + 012CBA8F1FFF8F2500F8F880 /* SurfaceHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9F21FFF8EE300F8F880 /* SurfaceHighlightWidget.cpp */; }; + 012CBA901FFF8F2500F8F880 /* TextureEditorWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9F41FFF8EE300F8F880 /* TextureEditorWidget.cpp */; }; + 012CBA911FFF8F2500F8F880 /* TextureHighlightWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9F61FFF8EE300F8F880 /* TextureHighlightWidget.cpp */; }; + 012CBA921FFF8F2500F8F880 /* Info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9F91FFF8EE300F8F880 /* Info.cpp */; }; + 012CBA931FFF8F2500F8F880 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9FC1FFF8EE300F8F880 /* DirectoryWatcher.cpp */; }; + 012CBA941FFF8F2500F8F880 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CB9FE1FFF8EE300F8F880 /* MediaServer.cpp */; }; + 012CBA951FFF8F2500F8F880 /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA011FFF8EE300F8F880 /* ofxPiMapper.cpp */; }; + 012CBA961FFF8F2500F8F880 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA041FFF8EE300F8F880 /* BaseSource.cpp */; }; + 012CBA971FFF8F2500F8F880 /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA061FFF8EE300F8F880 /* FboSource.cpp */; }; + 012CBA981FFF8F2500F8F880 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA081FFF8EE300F8F880 /* ImageSource.cpp */; }; + 012CBA991FFF8F2500F8F880 /* magSlide.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA0A1FFF8EE300F8F880 /* magSlide.cpp */; }; + 012CBA9A1FFF8F2500F8F880 /* magSlideShowSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA0C1FFF8EE300F8F880 /* magSlideShowSource.cpp */; }; + 012CBA9B1FFF8F2500F8F880 /* magSlideTransition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA0E1FFF8EE300F8F880 /* magSlideTransition.cpp */; }; + 012CBA9C1FFF8F2500F8F880 /* magSlideTransitionFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA101FFF8EE300F8F880 /* magSlideTransitionFactory.cpp */; }; + 012CBA9D1FFF8F2500F8F880 /* OMXPlayerCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA121FFF8EE300F8F880 /* OMXPlayerCache.cpp */; }; + 012CBA9E1FFF8F2500F8F880 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA161FFF8EE300F8F880 /* VideoSource.cpp */; }; + 012CBA9F1FFF8F2500F8F880 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA191FFF8EE300F8F880 /* BaseSurface.cpp */; }; + 012CBAA01FFF8F2500F8F880 /* CircleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA1B1FFF8EE300F8F880 /* CircleSurface.cpp */; }; + 012CBAA11FFF8F2600F8F880 /* GridWarpSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA1D1FFF8EE300F8F880 /* GridWarpSurface.cpp */; }; + 012CBAA21FFF8F2600F8F880 /* HexagonSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA1F1FFF8EE300F8F880 /* HexagonSurface.cpp */; }; + 012CBAA31FFF8F2600F8F880 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA211FFF8EE300F8F880 /* QuadSurface.cpp */; }; + 012CBAA41FFF8F2600F8F880 /* SurfaceFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA231FFF8EE300F8F880 /* SurfaceFactory.cpp */; }; + 012CBAA51FFF8F2600F8F880 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA251FFF8EE300F8F880 /* SurfaceManager.cpp */; }; + 012CBAA61FFF8F2600F8F880 /* SurfaceStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA271FFF8EE300F8F880 /* SurfaceStack.cpp */; }; + 012CBAA71FFF8F2600F8F880 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA2A1FFF8EE300F8F880 /* TriangleSurface.cpp */; }; + 012CBAA81FFF8F2600F8F880 /* Vec2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA2D1FFF8EE300F8F880 /* Vec2.cpp */; }; + 012CBAA91FFF8F2600F8F880 /* Vec3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA2F1FFF8EE300F8F880 /* Vec3.cpp */; }; + 012CBAAA1FFF8F2600F8F880 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA321FFF8EE300F8F880 /* BaseJoint.cpp */; }; + 012CBAAB1FFF8F2600F8F880 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA341FFF8EE300F8F880 /* CircleJoint.cpp */; }; + 012CBAAC1FFF8F2600F8F880 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA381FFF8EE300F8F880 /* RadioList.cpp */; }; + 012CBAAD1FFF8F2600F8F880 /* HomographyHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 012CBA3B1FFF8EE300F8F880 /* HomographyHelper.cpp */; }; 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264840192224F90008A7F5 /* tinyxmlparser.cpp */; }; - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */; }; - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */; }; - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */; }; - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */; }; - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */; }; - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; @@ -142,183 +151,201 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0100D93E1E33E4A0000D7FA5 /* Mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; - 013E615B1E2E2FAE00FACF28 /* Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; - 013E615C1E2E2FAE00FACF28 /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; - 013E615E1E2E2FAE00FACF28 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; - 013E615F1E2E2FAE00FACF28 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; - 013E61601E2E2FAE00FACF28 /* PresentationMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; - 013E61611E2E2FAE00FACF28 /* PresentationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; - 013E61621E2E2FAE00FACF28 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; - 013E61631E2E2FAE00FACF28 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; - 013E61641E2E2FAE00FACF28 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; - 013E61651E2E2FAE00FACF28 /* SourceSelectionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; - 013E61661E2E2FAE00FACF28 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; - 013E61671E2E2FAE00FACF28 /* TextureMappingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; - 013E61681E2E2FAE00FACF28 /* SettingsLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; - 013E61691E2E2FAE00FACF28 /* SettingsLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; - 013E616B1E2E2FAE00FACF28 /* AddGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; - 013E616C1E2E2FAE00FACF28 /* AddGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; - 013E616D1E2E2FAE00FACF28 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; - 013E616E1E2E2FAE00FACF28 /* AddGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; - 013E616F1E2E2FAE00FACF28 /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; - 013E61701E2E2FAE00FACF28 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; - 013E61711E2E2FAE00FACF28 /* BaseCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; - 013E61721E2E2FAE00FACF28 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; - 013E61731E2E2FAE00FACF28 /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; - 013E61741E2E2FAE00FACF28 /* CmdManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; - 013E61751E2E2FAE00FACF28 /* CmdManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; - 013E61761E2E2FAE00FACF28 /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; - 013E61771E2E2FAE00FACF28 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; - 013E61781E2E2FAE00FACF28 /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; - 013E61791E2E2FAE00FACF28 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; - 013E617A1E2E2FAE00FACF28 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; - 013E617B1E2E2FAE00FACF28 /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; - 013E617C1E2E2FAE00FACF28 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; - 013E617D1E2E2FAE00FACF28 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; - 013E617E1E2E2FAE00FACF28 /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; - 013E617F1E2E2FAE00FACF28 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; - 013E61801E2E2FAE00FACF28 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; - 013E61811E2E2FAE00FACF28 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; - 013E61821E2E2FAE00FACF28 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; - 013E61831E2E2FAE00FACF28 /* MvSelectionCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; - 013E61841E2E2FAE00FACF28 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; - 013E61851E2E2FAE00FACF28 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; - 013E61861E2E2FAE00FACF28 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; - 013E61871E2E2FAE00FACF28 /* MvTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; - 013E61881E2E2FAE00FACF28 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; - 013E61891E2E2FAE00FACF28 /* RmGridColCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; - 013E618A1E2E2FAE00FACF28 /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; - 013E618B1E2E2FAE00FACF28 /* RmGridRowCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; - 013E618C1E2E2FAE00FACF28 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; - 013E618D1E2E2FAE00FACF28 /* RmSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; - 013E618E1E2E2FAE00FACF28 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; - 013E618F1E2E2FAE00FACF28 /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; - 013E61901E2E2FAE00FACF28 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; - 013E61911E2E2FAE00FACF28 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; - 013E61921E2E2FAE00FACF28 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; - 013E61931E2E2FAE00FACF28 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; - 013E61941E2E2FAE00FACF28 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; - 013E61951E2E2FAE00FACF28 /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; - 013E61961E2E2FAE00FACF28 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; - 013E61971E2E2FAE00FACF28 /* SelNextVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; - 013E61981E2E2FAE00FACF28 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; - 013E61991E2E2FAE00FACF28 /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; - 013E619A1E2E2FAE00FACF28 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; - 013E619B1E2E2FAE00FACF28 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; - 013E619C1E2E2FAE00FACF28 /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; - 013E619D1E2E2FAE00FACF28 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; - 013E619E1E2E2FAE00FACF28 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; - 013E619F1E2E2FAE00FACF28 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; - 013E61A01E2E2FAE00FACF28 /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; - 013E61A11E2E2FAE00FACF28 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; - 013E61A21E2E2FAE00FACF28 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; - 013E61A31E2E2FAE00FACF28 /* SelVertexCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; - 013E61A41E2E2FAE00FACF28 /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; - 013E61A51E2E2FAE00FACF28 /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; - 013E61A61E2E2FAE00FACF28 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; - 013E61A71E2E2FAE00FACF28 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; - 013E61A81E2E2FAE00FACF28 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; - 013E61A91E2E2FAE00FACF28 /* SetPresetCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; - 013E61AA1E2E2FAE00FACF28 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; - 013E61AB1E2E2FAE00FACF28 /* SetSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; - 013E61AC1E2E2FAE00FACF28 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; - 013E61AD1E2E2FAE00FACF28 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; - 013E61AE1E2E2FAE00FACF28 /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; - 013E61AF1E2E2FAE00FACF28 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; - 013E61B01E2E2FAE00FACF28 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; - 013E61B11E2E2FAE00FACF28 /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; - 013E61B21E2E2FAE00FACF28 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; - 013E61B31E2E2FAE00FACF28 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; - 013E61B41E2E2FAE00FACF28 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; - 013E61B51E2E2FAE00FACF28 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; - 013E61B71E2E2FAE00FACF28 /* Gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; - 013E61B81E2E2FAE00FACF28 /* Gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; - 013E61BA1E2E2FAE00FACF28 /* GuiBaseWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; - 013E61BB1E2E2FAE00FACF28 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; - 013E61BC1E2E2FAE00FACF28 /* LayerPanelWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; - 013E61BD1E2E2FAE00FACF28 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; - 013E61BE1E2E2FAE00FACF28 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; - 013E61BF1E2E2FAE00FACF28 /* ScaleWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; - 013E61C01E2E2FAE00FACF28 /* ScaleWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; - 013E61C11E2E2FAE00FACF28 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; - 013E61C21E2E2FAE00FACF28 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; - 013E61C31E2E2FAE00FACF28 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; - 013E61C41E2E2FAE00FACF28 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; - 013E61C51E2E2FAE00FACF28 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; - 013E61C61E2E2FAE00FACF28 /* TextureEditorWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; - 013E61C71E2E2FAE00FACF28 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; - 013E61C81E2E2FAE00FACF28 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; - 013E61CA1E2E2FAE00FACF28 /* Info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; - 013E61CB1E2E2FAE00FACF28 /* Info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; - 013E61CD1E2E2FAE00FACF28 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; - 013E61CE1E2E2FAE00FACF28 /* DirectoryWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; - 013E61CF1E2E2FAE00FACF28 /* MediaServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; - 013E61D01E2E2FAE00FACF28 /* MediaServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; - 013E61D11E2E2FAE00FACF28 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; - 013E61D21E2E2FAE00FACF28 /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; - 013E61D41E2E2FAE00FACF28 /* BaseSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; - 013E61D51E2E2FAE00FACF28 /* BaseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; - 013E61D61E2E2FAE00FACF28 /* FboSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; - 013E61D71E2E2FAE00FACF28 /* FboSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; - 013E61D81E2E2FAE00FACF28 /* ImageSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; - 013E61D91E2E2FAE00FACF28 /* ImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; - 013E61DA1E2E2FAE00FACF28 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; - 013E61DB1E2E2FAE00FACF28 /* OMXPlayerCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; - 013E61DC1E2E2FAE00FACF28 /* SourceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; - 013E61DD1E2E2FAE00FACF28 /* VideoSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; - 013E61DE1E2E2FAE00FACF28 /* VideoSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; - 013E61E01E2E2FAE00FACF28 /* BaseSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; - 013E61E11E2E2FAE00FACF28 /* BaseSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; - 013E61E21E2E2FAE00FACF28 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; - 013E61E31E2E2FAE00FACF28 /* GridWarpSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; - 013E61E41E2E2FAE00FACF28 /* HexagonSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; - 013E61E51E2E2FAE00FACF28 /* HexagonSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; - 013E61E61E2E2FAE00FACF28 /* QuadSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; - 013E61E71E2E2FAE00FACF28 /* QuadSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; - 013E61E81E2E2FAE00FACF28 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; - 013E61E91E2E2FAE00FACF28 /* SurfaceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; - 013E61EA1E2E2FAE00FACF28 /* SurfaceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; - 013E61EB1E2E2FAE00FACF28 /* SurfaceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; - 013E61EC1E2E2FAE00FACF28 /* SurfaceStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; - 013E61ED1E2E2FAE00FACF28 /* SurfaceStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; - 013E61EE1E2E2FAE00FACF28 /* SurfaceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; - 013E61EF1E2E2FAE00FACF28 /* TriangleSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; - 013E61F01E2E2FAE00FACF28 /* TriangleSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; - 013E61F21E2E2FAE00FACF28 /* BaseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; - 013E61F31E2E2FAE00FACF28 /* BaseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; - 013E61F41E2E2FAE00FACF28 /* CircleJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; - 013E61F51E2E2FAE00FACF28 /* CircleJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; - 013E61F61E2E2FAE00FACF28 /* EditorType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; - 013E61F71E2E2FAE00FACF28 /* GuiMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; - 013E61F81E2E2FAE00FACF28 /* RadioList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; - 013E61F91E2E2FAE00FACF28 /* RadioList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; - 013E61FB1E2E2FAE00FACF28 /* HomographyHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; - 013E61FC1E2E2FAE00FACF28 /* HomographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; - 013E62491E2E38EC00FACF28 /* SourceTypeHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceTypeHelper.h; sourceTree = ""; }; + 012CB98A1FFF8EE300F8F880 /* Application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; + 012CB98B1FFF8EE300F8F880 /* Application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; + 012CB98D1FFF8EE300F8F880 /* ApplicationBaseMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationBaseMode.cpp; sourceTree = ""; }; + 012CB98E1FFF8EE300F8F880 /* ApplicationBaseMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApplicationBaseMode.h; sourceTree = ""; }; + 012CB98F1FFF8EE300F8F880 /* PresentationMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PresentationMode.cpp; sourceTree = ""; }; + 012CB9901FFF8EE300F8F880 /* PresentationMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PresentationMode.h; sourceTree = ""; }; + 012CB9911FFF8EE300F8F880 /* ProjectionMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionMappingMode.cpp; sourceTree = ""; }; + 012CB9921FFF8EE300F8F880 /* ProjectionMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionMappingMode.h; sourceTree = ""; }; + 012CB9931FFF8EE300F8F880 /* SourceSelectionMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourceSelectionMode.cpp; sourceTree = ""; }; + 012CB9941FFF8EE300F8F880 /* SourceSelectionMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceSelectionMode.h; sourceTree = ""; }; + 012CB9951FFF8EE300F8F880 /* TextureMappingMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureMappingMode.cpp; sourceTree = ""; }; + 012CB9961FFF8EE300F8F880 /* TextureMappingMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureMappingMode.h; sourceTree = ""; }; + 012CB9971FFF8EE300F8F880 /* SettingsLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsLoader.cpp; sourceTree = ""; }; + 012CB9981FFF8EE300F8F880 /* SettingsLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsLoader.h; sourceTree = ""; }; + 012CB99A1FFF8EE300F8F880 /* AddGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridColCmd.cpp; sourceTree = ""; }; + 012CB99B1FFF8EE300F8F880 /* AddGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridColCmd.h; sourceTree = ""; }; + 012CB99C1FFF8EE300F8F880 /* AddGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddGridRowCmd.cpp; sourceTree = ""; }; + 012CB99D1FFF8EE300F8F880 /* AddGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddGridRowCmd.h; sourceTree = ""; }; + 012CB99E1FFF8EE300F8F880 /* AddSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AddSurfaceCmd.cpp; sourceTree = ""; }; + 012CB99F1FFF8EE300F8F880 /* AddSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddSurfaceCmd.h; sourceTree = ""; }; + 012CB9A01FFF8EE300F8F880 /* BaseCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseCmd.h; sourceTree = ""; }; + 012CB9A11FFF8EE300F8F880 /* ClearSurfacesCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ClearSurfacesCmd.cpp; sourceTree = ""; }; + 012CB9A21FFF8EE300F8F880 /* ClearSurfacesCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClearSurfacesCmd.h; sourceTree = ""; }; + 012CB9A31FFF8EE300F8F880 /* CmdManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CmdManager.cpp; sourceTree = ""; }; + 012CB9A41FFF8EE300F8F880 /* CmdManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CmdManager.h; sourceTree = ""; }; + 012CB9A51FFF8EE300F8F880 /* DeselectSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectSurfaceCmd.cpp; sourceTree = ""; }; + 012CB9A61FFF8EE300F8F880 /* DeselectSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectSurfaceCmd.h; sourceTree = ""; }; + 012CB9A71FFF8EE300F8F880 /* DeselectTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DeselectTexCoordCmd.cpp; sourceTree = ""; }; + 012CB9A81FFF8EE300F8F880 /* DeselectTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeselectTexCoordCmd.h; sourceTree = ""; }; + 012CB9A91FFF8EE300F8F880 /* DuplicateSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DuplicateSurfaceCmd.cpp; sourceTree = ""; }; + 012CB9AA1FFF8EE300F8F880 /* DuplicateSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DuplicateSurfaceCmd.h; sourceTree = ""; }; + 012CB9AB1FFF8EE300F8F880 /* MvAllTexCoordsCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvAllTexCoordsCmd.cpp; sourceTree = ""; }; + 012CB9AC1FFF8EE300F8F880 /* MvAllTexCoordsCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvAllTexCoordsCmd.h; sourceTree = ""; }; + 012CB9AD1FFF8EE300F8F880 /* MvLayerDnCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerDnCmd.cpp; sourceTree = ""; }; + 012CB9AE1FFF8EE300F8F880 /* MvLayerDnCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerDnCmd.h; sourceTree = ""; }; + 012CB9AF1FFF8EE300F8F880 /* MvLayerUpCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvLayerUpCmd.cpp; sourceTree = ""; }; + 012CB9B01FFF8EE300F8F880 /* MvLayerUpCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvLayerUpCmd.h; sourceTree = ""; }; + 012CB9B11FFF8EE300F8F880 /* MvSelectionCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSelectionCmd.cpp; sourceTree = ""; }; + 012CB9B21FFF8EE300F8F880 /* MvSelectionCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSelectionCmd.h; sourceTree = ""; }; + 012CB9B31FFF8EE300F8F880 /* MvSurfaceVertCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvSurfaceVertCmd.cpp; sourceTree = ""; }; + 012CB9B41FFF8EE300F8F880 /* MvSurfaceVertCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvSurfaceVertCmd.h; sourceTree = ""; }; + 012CB9B51FFF8EE300F8F880 /* MvTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MvTexCoordCmd.cpp; sourceTree = ""; }; + 012CB9B61FFF8EE300F8F880 /* MvTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MvTexCoordCmd.h; sourceTree = ""; }; + 012CB9B71FFF8EE300F8F880 /* RmGridColCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridColCmd.cpp; sourceTree = ""; }; + 012CB9B81FFF8EE300F8F880 /* RmGridColCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridColCmd.h; sourceTree = ""; }; + 012CB9B91FFF8EE300F8F880 /* RmGridRowCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmGridRowCmd.cpp; sourceTree = ""; }; + 012CB9BA1FFF8EE300F8F880 /* RmGridRowCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmGridRowCmd.h; sourceTree = ""; }; + 012CB9BB1FFF8EE300F8F880 /* RmSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RmSurfaceCmd.cpp; sourceTree = ""; }; + 012CB9BC1FFF8EE300F8F880 /* RmSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RmSurfaceCmd.h; sourceTree = ""; }; + 012CB9BD1FFF8EE300F8F880 /* SaveTexCoordPosCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTexCoordPosCmd.cpp; sourceTree = ""; }; + 012CB9BE1FFF8EE300F8F880 /* SaveTexCoordPosCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SaveTexCoordPosCmd.h; sourceTree = ""; }; + 012CB9BF1FFF8EE300F8F880 /* ScaleSurfaceFromToCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleSurfaceFromToCmd.cpp; sourceTree = ""; }; + 012CB9C01FFF8EE300F8F880 /* ScaleSurfaceFromToCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleSurfaceFromToCmd.h; sourceTree = ""; }; + 012CB9C11FFF8EE300F8F880 /* SelNextSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextSurfaceCmd.cpp; sourceTree = ""; }; + 012CB9C21FFF8EE300F8F880 /* SelNextSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextSurfaceCmd.h; sourceTree = ""; }; + 012CB9C31FFF8EE300F8F880 /* SelNextTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextTexCoordCmd.cpp; sourceTree = ""; }; + 012CB9C41FFF8EE300F8F880 /* SelNextTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextTexCoordCmd.h; sourceTree = ""; }; + 012CB9C51FFF8EE300F8F880 /* SelNextVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelNextVertexCmd.cpp; sourceTree = ""; }; + 012CB9C61FFF8EE300F8F880 /* SelNextVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelNextVertexCmd.h; sourceTree = ""; }; + 012CB9C71FFF8EE300F8F880 /* SelPrevSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevSurfaceCmd.cpp; sourceTree = ""; }; + 012CB9C81FFF8EE300F8F880 /* SelPrevSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevSurfaceCmd.h; sourceTree = ""; }; + 012CB9C91FFF8EE300F8F880 /* SelPrevTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevTexCoordCmd.cpp; sourceTree = ""; }; + 012CB9CA1FFF8EE300F8F880 /* SelPrevTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevTexCoordCmd.h; sourceTree = ""; }; + 012CB9CB1FFF8EE300F8F880 /* SelPrevVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelPrevVertexCmd.cpp; sourceTree = ""; }; + 012CB9CC1FFF8EE300F8F880 /* SelPrevVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelPrevVertexCmd.h; sourceTree = ""; }; + 012CB9CD1FFF8EE300F8F880 /* SelSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelSurfaceCmd.cpp; sourceTree = ""; }; + 012CB9CE1FFF8EE300F8F880 /* SelSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelSurfaceCmd.h; sourceTree = ""; }; + 012CB9CF1FFF8EE300F8F880 /* SelTexCoordCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelTexCoordCmd.cpp; sourceTree = ""; }; + 012CB9D01FFF8EE300F8F880 /* SelTexCoordCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelTexCoordCmd.h; sourceTree = ""; }; + 012CB9D11FFF8EE300F8F880 /* SelVertexCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SelVertexCmd.cpp; sourceTree = ""; }; + 012CB9D21FFF8EE300F8F880 /* SelVertexCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelVertexCmd.h; sourceTree = ""; }; + 012CB9D31FFF8EE300F8F880 /* SetApplicationModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetApplicationModeCmd.cpp; sourceTree = ""; }; + 012CB9D41FFF8EE300F8F880 /* SetApplicationModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetApplicationModeCmd.h; sourceTree = ""; }; + 012CB9D51FFF8EE300F8F880 /* SetNextSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetNextSourceCmd.cpp; sourceTree = ""; }; + 012CB9D61FFF8EE300F8F880 /* SetNextSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetNextSourceCmd.h; sourceTree = ""; }; + 012CB9D71FFF8EE300F8F880 /* SetPresetCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetPresetCmd.cpp; sourceTree = ""; }; + 012CB9D81FFF8EE300F8F880 /* SetPresetCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetPresetCmd.h; sourceTree = ""; }; + 012CB9D91FFF8EE300F8F880 /* SetSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetSourceCmd.cpp; sourceTree = ""; }; + 012CB9DA1FFF8EE300F8F880 /* SetSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetSourceCmd.h; sourceTree = ""; }; + 012CB9DB1FFF8EE300F8F880 /* SetTexMapDrawModeCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SetTexMapDrawModeCmd.cpp; sourceTree = ""; }; + 012CB9DC1FFF8EE300F8F880 /* SetTexMapDrawModeCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SetTexMapDrawModeCmd.h; sourceTree = ""; }; + 012CB9DD1FFF8EE300F8F880 /* StartDragSurfaceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StartDragSurfaceCmd.cpp; sourceTree = ""; }; + 012CB9DE1FFF8EE300F8F880 /* StartDragSurfaceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StartDragSurfaceCmd.h; sourceTree = ""; }; + 012CB9DF1FFF8EE300F8F880 /* ToggleAnimatedSourceCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ToggleAnimatedSourceCmd.cpp; sourceTree = ""; }; + 012CB9E01FFF8EE300F8F880 /* ToggleAnimatedSourceCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ToggleAnimatedSourceCmd.h; sourceTree = ""; }; + 012CB9E11FFF8EE300F8F880 /* TogglePerspectiveCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TogglePerspectiveCmd.cpp; sourceTree = ""; }; + 012CB9E21FFF8EE300F8F880 /* TogglePerspectiveCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TogglePerspectiveCmd.h; sourceTree = ""; }; + 012CB9E31FFF8EE300F8F880 /* TranslateCanvasCmd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateCanvasCmd.cpp; sourceTree = ""; }; + 012CB9E41FFF8EE300F8F880 /* TranslateCanvasCmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TranslateCanvasCmd.h; sourceTree = ""; }; + 012CB9E61FFF8EE300F8F880 /* Gui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Gui.cpp; sourceTree = ""; }; + 012CB9E71FFF8EE300F8F880 /* Gui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gui.h; sourceTree = ""; }; + 012CB9E91FFF8EE300F8F880 /* GuiBaseWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiBaseWidget.h; sourceTree = ""; }; + 012CB9EA1FFF8EE300F8F880 /* LayerPanelWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayerPanelWidget.cpp; sourceTree = ""; }; + 012CB9EB1FFF8EE300F8F880 /* LayerPanelWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayerPanelWidget.h; sourceTree = ""; }; + 012CB9EC1FFF8EE300F8F880 /* ProjectionEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditorWidget.cpp; sourceTree = ""; }; + 012CB9ED1FFF8EE300F8F880 /* ProjectionEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProjectionEditorWidget.h; sourceTree = ""; }; + 012CB9EE1FFF8EE300F8F880 /* ScaleWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleWidget.cpp; sourceTree = ""; }; + 012CB9EF1FFF8EE300F8F880 /* ScaleWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScaleWidget.h; sourceTree = ""; }; + 012CB9F01FFF8EE300F8F880 /* SourcesEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditorWidget.cpp; sourceTree = ""; }; + 012CB9F11FFF8EE300F8F880 /* SourcesEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourcesEditorWidget.h; sourceTree = ""; }; + 012CB9F21FFF8EE300F8F880 /* SurfaceHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceHighlightWidget.cpp; sourceTree = ""; }; + 012CB9F31FFF8EE300F8F880 /* SurfaceHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceHighlightWidget.h; sourceTree = ""; }; + 012CB9F41FFF8EE300F8F880 /* TextureEditorWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditorWidget.cpp; sourceTree = ""; }; + 012CB9F51FFF8EE300F8F880 /* TextureEditorWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureEditorWidget.h; sourceTree = ""; }; + 012CB9F61FFF8EE300F8F880 /* TextureHighlightWidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureHighlightWidget.cpp; sourceTree = ""; }; + 012CB9F71FFF8EE300F8F880 /* TextureHighlightWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureHighlightWidget.h; sourceTree = ""; }; + 012CB9F91FFF8EE300F8F880 /* Info.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Info.cpp; sourceTree = ""; }; + 012CB9FA1FFF8EE300F8F880 /* Info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Info.h; sourceTree = ""; }; + 012CB9FC1FFF8EE300F8F880 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; + 012CB9FD1FFF8EE300F8F880 /* DirectoryWatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; + 012CB9FE1FFF8EE300F8F880 /* MediaServer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; + 012CB9FF1FFF8EE300F8F880 /* MediaServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; + 012CBA001FFF8EE300F8F880 /* Mode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mode.h; sourceTree = ""; }; + 012CBA011FFF8EE300F8F880 /* ofxPiMapper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; + 012CBA021FFF8EE300F8F880 /* ofxPiMapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; + 012CBA041FFF8EE300F8F880 /* BaseSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; + 012CBA051FFF8EE300F8F880 /* BaseSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; + 012CBA061FFF8EE300F8F880 /* FboSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; + 012CBA071FFF8EE300F8F880 /* FboSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; + 012CBA081FFF8EE300F8F880 /* ImageSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; + 012CBA091FFF8EE300F8F880 /* ImageSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; + 012CBA0A1FFF8EE300F8F880 /* magSlide.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlide.cpp; sourceTree = ""; }; + 012CBA0B1FFF8EE300F8F880 /* magSlide.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlide.h; sourceTree = ""; }; + 012CBA0C1FFF8EE300F8F880 /* magSlideShowSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideShowSource.cpp; sourceTree = ""; }; + 012CBA0D1FFF8EE300F8F880 /* magSlideShowSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideShowSource.h; sourceTree = ""; }; + 012CBA0E1FFF8EE300F8F880 /* magSlideTransition.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransition.cpp; sourceTree = ""; }; + 012CBA0F1FFF8EE300F8F880 /* magSlideTransition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransition.h; sourceTree = ""; }; + 012CBA101FFF8EE300F8F880 /* magSlideTransitionFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = magSlideTransitionFactory.cpp; sourceTree = ""; }; + 012CBA111FFF8EE300F8F880 /* magSlideTransitionFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = magSlideTransitionFactory.h; sourceTree = ""; }; + 012CBA121FFF8EE300F8F880 /* OMXPlayerCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OMXPlayerCache.cpp; sourceTree = ""; }; + 012CBA131FFF8EE300F8F880 /* OMXPlayerCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OMXPlayerCache.h; sourceTree = ""; }; + 012CBA141FFF8EE300F8F880 /* SourceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; + 012CBA151FFF8EE300F8F880 /* SourceTypeHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SourceTypeHelper.h; sourceTree = ""; }; + 012CBA161FFF8EE300F8F880 /* VideoSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; + 012CBA171FFF8EE300F8F880 /* VideoSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; + 012CBA191FFF8EE300F8F880 /* BaseSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; + 012CBA1A1FFF8EE300F8F880 /* BaseSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; + 012CBA1B1FFF8EE300F8F880 /* CircleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleSurface.cpp; sourceTree = ""; }; + 012CBA1C1FFF8EE300F8F880 /* CircleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleSurface.h; sourceTree = ""; }; + 012CBA1D1FFF8EE300F8F880 /* GridWarpSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GridWarpSurface.cpp; sourceTree = ""; }; + 012CBA1E1FFF8EE300F8F880 /* GridWarpSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GridWarpSurface.h; sourceTree = ""; }; + 012CBA1F1FFF8EE300F8F880 /* HexagonSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HexagonSurface.cpp; sourceTree = ""; }; + 012CBA201FFF8EE300F8F880 /* HexagonSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HexagonSurface.h; sourceTree = ""; }; + 012CBA211FFF8EE300F8F880 /* QuadSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; + 012CBA221FFF8EE300F8F880 /* QuadSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; + 012CBA231FFF8EE300F8F880 /* SurfaceFactory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceFactory.cpp; sourceTree = ""; }; + 012CBA241FFF8EE300F8F880 /* SurfaceFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceFactory.h; sourceTree = ""; }; + 012CBA251FFF8EE300F8F880 /* SurfaceManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; + 012CBA261FFF8EE300F8F880 /* SurfaceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; + 012CBA271FFF8EE300F8F880 /* SurfaceStack.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceStack.cpp; sourceTree = ""; }; + 012CBA281FFF8EE300F8F880 /* SurfaceStack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceStack.h; sourceTree = ""; }; + 012CBA291FFF8EE300F8F880 /* SurfaceType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; + 012CBA2A1FFF8EE300F8F880 /* TriangleSurface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; + 012CBA2B1FFF8EE300F8F880 /* TriangleSurface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; + 012CBA2D1FFF8EE300F8F880 /* Vec2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec2.cpp; sourceTree = ""; }; + 012CBA2E1FFF8EE300F8F880 /* Vec2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec2.h; sourceTree = ""; }; + 012CBA2F1FFF8EE300F8F880 /* Vec3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vec3.cpp; sourceTree = ""; }; + 012CBA301FFF8EE300F8F880 /* Vec3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vec3.h; sourceTree = ""; }; + 012CBA321FFF8EE300F8F880 /* BaseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; + 012CBA331FFF8EE300F8F880 /* BaseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; + 012CBA341FFF8EE300F8F880 /* CircleJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; + 012CBA351FFF8EE300F8F880 /* CircleJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; + 012CBA361FFF8EE300F8F880 /* EditorType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; + 012CBA371FFF8EE300F8F880 /* GuiMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; + 012CBA381FFF8EE300F8F880 /* RadioList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; + 012CBA391FFF8EE300F8F880 /* RadioList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; + 012CBA3B1FFF8EE300F8F880 /* HomographyHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HomographyHelper.cpp; sourceTree = ""; }; + 012CBA3C1FFF8EE300F8F880 /* HomographyHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomographyHelper.h; sourceTree = ""; }; + 012CBA3E1FFF8EEE00F8F880 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; + 012CBA3F1FFF8EEE00F8F880 /* ofxBaseGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; + 012CBA401FFF8EEE00F8F880 /* ofxButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; + 012CBA411FFF8EEE00F8F880 /* ofxButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; + 012CBA421FFF8EEE00F8F880 /* ofxColorPicker.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxColorPicker.cpp; sourceTree = ""; }; + 012CBA431FFF8EEE00F8F880 /* ofxColorPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxColorPicker.h; sourceTree = ""; }; + 012CBA441FFF8EEE00F8F880 /* ofxGui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; + 012CBA451FFF8EEE00F8F880 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; + 012CBA461FFF8EEE00F8F880 /* ofxGuiGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; + 012CBA471FFF8EEE00F8F880 /* ofxInputField.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxInputField.cpp; sourceTree = ""; }; + 012CBA481FFF8EEE00F8F880 /* ofxInputField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxInputField.h; sourceTree = ""; }; + 012CBA491FFF8EEE00F8F880 /* ofxLabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; + 012CBA4A1FFF8EEE00F8F880 /* ofxLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; + 012CBA4B1FFF8EEE00F8F880 /* ofxPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; + 012CBA4C1FFF8EEE00F8F880 /* ofxPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; + 012CBA4D1FFF8EEE00F8F880 /* ofxSlider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; + 012CBA4E1FFF8EEE00F8F880 /* ofxSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; + 012CBA4F1FFF8EEE00F8F880 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; + 012CBA501FFF8EEE00F8F880 /* ofxSliderGroup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; + 012CBA511FFF8EEE00F8F880 /* ofxToggle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; + 012CBA521FFF8EEE00F8F880 /* ofxToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofxXmlSettings.cpp; path = ../../ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = ""; }; 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxXmlSettings.h; path = ../../ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = ""; }; 3926483D192224F90008A7F5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; 3926483E192224F90008A7F5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; 39264840192224F90008A7F5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; - 3933D5C519BB87BD000ACA55 /* ofxButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; - 3933D5C619BB87BD000ACA55 /* ofxGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; @@ -371,256 +398,307 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 013E61591E2E2FAE00FACF28 /* src */ = { + 012CB9881FFF8EE300F8F880 /* src */ = { isa = PBXGroup; children = ( - 013E615A1E2E2FAE00FACF28 /* Application */, - 013E616A1E2E2FAE00FACF28 /* Commands */, - 013E61B61E2E2FAE00FACF28 /* Gui */, - 013E61C91E2E2FAE00FACF28 /* Info */, - 013E61CC1E2E2FAE00FACF28 /* MediaServer */, - 013E61D11E2E2FAE00FACF28 /* ofxPiMapper.cpp */, - 013E61D21E2E2FAE00FACF28 /* ofxPiMapper.h */, - 0100D93E1E33E4A0000D7FA5 /* Mode.h */, - 013E61D31E2E2FAE00FACF28 /* Sources */, - 013E61DF1E2E2FAE00FACF28 /* Surfaces */, - 013E61F11E2E2FAE00FACF28 /* UserInterface */, - 013E61FA1E2E2FAE00FACF28 /* Utils */, + 012CB9891FFF8EE300F8F880 /* Application */, + 012CB9991FFF8EE300F8F880 /* Commands */, + 012CB9E51FFF8EE300F8F880 /* Gui */, + 012CB9F81FFF8EE300F8F880 /* Info */, + 012CB9FB1FFF8EE300F8F880 /* MediaServer */, + 012CBA001FFF8EE300F8F880 /* Mode.h */, + 012CBA011FFF8EE300F8F880 /* ofxPiMapper.cpp */, + 012CBA021FFF8EE300F8F880 /* ofxPiMapper.h */, + 012CBA031FFF8EE300F8F880 /* Sources */, + 012CBA181FFF8EE300F8F880 /* Surfaces */, + 012CBA2C1FFF8EE300F8F880 /* Types */, + 012CBA311FFF8EE300F8F880 /* UserInterface */, + 012CBA3A1FFF8EE300F8F880 /* Utils */, ); name = src; path = ../src; sourceTree = ""; }; - 013E615A1E2E2FAE00FACF28 /* Application */ = { + 012CB9891FFF8EE300F8F880 /* Application */ = { isa = PBXGroup; children = ( - 013E615B1E2E2FAE00FACF28 /* Application.cpp */, - 013E615C1E2E2FAE00FACF28 /* Application.h */, - 013E615D1E2E2FAE00FACF28 /* Modes */, - 013E61681E2E2FAE00FACF28 /* SettingsLoader.cpp */, - 013E61691E2E2FAE00FACF28 /* SettingsLoader.h */, + 012CB98A1FFF8EE300F8F880 /* Application.cpp */, + 012CB98B1FFF8EE300F8F880 /* Application.h */, + 012CB98C1FFF8EE300F8F880 /* Modes */, + 012CB9971FFF8EE300F8F880 /* SettingsLoader.cpp */, + 012CB9981FFF8EE300F8F880 /* SettingsLoader.h */, ); path = Application; sourceTree = ""; }; - 013E615D1E2E2FAE00FACF28 /* Modes */ = { + 012CB98C1FFF8EE300F8F880 /* Modes */ = { isa = PBXGroup; children = ( - 013E615E1E2E2FAE00FACF28 /* ApplicationBaseMode.cpp */, - 013E615F1E2E2FAE00FACF28 /* ApplicationBaseMode.h */, - 013E61601E2E2FAE00FACF28 /* PresentationMode.cpp */, - 013E61611E2E2FAE00FACF28 /* PresentationMode.h */, - 013E61621E2E2FAE00FACF28 /* ProjectionMappingMode.cpp */, - 013E61631E2E2FAE00FACF28 /* ProjectionMappingMode.h */, - 013E61641E2E2FAE00FACF28 /* SourceSelectionMode.cpp */, - 013E61651E2E2FAE00FACF28 /* SourceSelectionMode.h */, - 013E61661E2E2FAE00FACF28 /* TextureMappingMode.cpp */, - 013E61671E2E2FAE00FACF28 /* TextureMappingMode.h */, + 012CB98D1FFF8EE300F8F880 /* ApplicationBaseMode.cpp */, + 012CB98E1FFF8EE300F8F880 /* ApplicationBaseMode.h */, + 012CB98F1FFF8EE300F8F880 /* PresentationMode.cpp */, + 012CB9901FFF8EE300F8F880 /* PresentationMode.h */, + 012CB9911FFF8EE300F8F880 /* ProjectionMappingMode.cpp */, + 012CB9921FFF8EE300F8F880 /* ProjectionMappingMode.h */, + 012CB9931FFF8EE300F8F880 /* SourceSelectionMode.cpp */, + 012CB9941FFF8EE300F8F880 /* SourceSelectionMode.h */, + 012CB9951FFF8EE300F8F880 /* TextureMappingMode.cpp */, + 012CB9961FFF8EE300F8F880 /* TextureMappingMode.h */, ); path = Modes; sourceTree = ""; }; - 013E616A1E2E2FAE00FACF28 /* Commands */ = { + 012CB9991FFF8EE300F8F880 /* Commands */ = { isa = PBXGroup; children = ( - 013E616B1E2E2FAE00FACF28 /* AddGridColCmd.cpp */, - 013E616C1E2E2FAE00FACF28 /* AddGridColCmd.h */, - 013E616D1E2E2FAE00FACF28 /* AddGridRowCmd.cpp */, - 013E616E1E2E2FAE00FACF28 /* AddGridRowCmd.h */, - 013E616F1E2E2FAE00FACF28 /* AddSurfaceCmd.cpp */, - 013E61701E2E2FAE00FACF28 /* AddSurfaceCmd.h */, - 013E61711E2E2FAE00FACF28 /* BaseCmd.h */, - 013E61721E2E2FAE00FACF28 /* ClearSurfacesCmd.cpp */, - 013E61731E2E2FAE00FACF28 /* ClearSurfacesCmd.h */, - 013E61741E2E2FAE00FACF28 /* CmdManager.cpp */, - 013E61751E2E2FAE00FACF28 /* CmdManager.h */, - 013E61761E2E2FAE00FACF28 /* DeselectSurfaceCmd.cpp */, - 013E61771E2E2FAE00FACF28 /* DeselectSurfaceCmd.h */, - 013E61781E2E2FAE00FACF28 /* DeselectTexCoordCmd.cpp */, - 013E61791E2E2FAE00FACF28 /* DeselectTexCoordCmd.h */, - 013E617A1E2E2FAE00FACF28 /* DuplicateSurfaceCmd.cpp */, - 013E617B1E2E2FAE00FACF28 /* DuplicateSurfaceCmd.h */, - 013E617C1E2E2FAE00FACF28 /* MvAllTexCoordsCmd.cpp */, - 013E617D1E2E2FAE00FACF28 /* MvAllTexCoordsCmd.h */, - 013E617E1E2E2FAE00FACF28 /* MvLayerDnCmd.cpp */, - 013E617F1E2E2FAE00FACF28 /* MvLayerDnCmd.h */, - 013E61801E2E2FAE00FACF28 /* MvLayerUpCmd.cpp */, - 013E61811E2E2FAE00FACF28 /* MvLayerUpCmd.h */, - 013E61821E2E2FAE00FACF28 /* MvSelectionCmd.cpp */, - 013E61831E2E2FAE00FACF28 /* MvSelectionCmd.h */, - 013E61841E2E2FAE00FACF28 /* MvSurfaceVertCmd.cpp */, - 013E61851E2E2FAE00FACF28 /* MvSurfaceVertCmd.h */, - 013E61861E2E2FAE00FACF28 /* MvTexCoordCmd.cpp */, - 013E61871E2E2FAE00FACF28 /* MvTexCoordCmd.h */, - 013E61881E2E2FAE00FACF28 /* RmGridColCmd.cpp */, - 013E61891E2E2FAE00FACF28 /* RmGridColCmd.h */, - 013E618A1E2E2FAE00FACF28 /* RmGridRowCmd.cpp */, - 013E618B1E2E2FAE00FACF28 /* RmGridRowCmd.h */, - 013E618C1E2E2FAE00FACF28 /* RmSurfaceCmd.cpp */, - 013E618D1E2E2FAE00FACF28 /* RmSurfaceCmd.h */, - 013E618E1E2E2FAE00FACF28 /* SaveTexCoordPosCmd.cpp */, - 013E618F1E2E2FAE00FACF28 /* SaveTexCoordPosCmd.h */, - 013E61901E2E2FAE00FACF28 /* ScaleSurfaceFromToCmd.cpp */, - 013E61911E2E2FAE00FACF28 /* ScaleSurfaceFromToCmd.h */, - 013E61921E2E2FAE00FACF28 /* SelNextSurfaceCmd.cpp */, - 013E61931E2E2FAE00FACF28 /* SelNextSurfaceCmd.h */, - 013E61941E2E2FAE00FACF28 /* SelNextTexCoordCmd.cpp */, - 013E61951E2E2FAE00FACF28 /* SelNextTexCoordCmd.h */, - 013E61961E2E2FAE00FACF28 /* SelNextVertexCmd.cpp */, - 013E61971E2E2FAE00FACF28 /* SelNextVertexCmd.h */, - 013E61981E2E2FAE00FACF28 /* SelPrevSurfaceCmd.cpp */, - 013E61991E2E2FAE00FACF28 /* SelPrevSurfaceCmd.h */, - 013E619A1E2E2FAE00FACF28 /* SelPrevTexCoordCmd.cpp */, - 013E619B1E2E2FAE00FACF28 /* SelPrevTexCoordCmd.h */, - 013E619C1E2E2FAE00FACF28 /* SelPrevVertexCmd.cpp */, - 013E619D1E2E2FAE00FACF28 /* SelPrevVertexCmd.h */, - 013E619E1E2E2FAE00FACF28 /* SelSurfaceCmd.cpp */, - 013E619F1E2E2FAE00FACF28 /* SelSurfaceCmd.h */, - 013E61A01E2E2FAE00FACF28 /* SelTexCoordCmd.cpp */, - 013E61A11E2E2FAE00FACF28 /* SelTexCoordCmd.h */, - 013E61A21E2E2FAE00FACF28 /* SelVertexCmd.cpp */, - 013E61A31E2E2FAE00FACF28 /* SelVertexCmd.h */, - 013E61A41E2E2FAE00FACF28 /* SetApplicationModeCmd.cpp */, - 013E61A51E2E2FAE00FACF28 /* SetApplicationModeCmd.h */, - 013E61A61E2E2FAE00FACF28 /* SetNextSourceCmd.cpp */, - 013E61A71E2E2FAE00FACF28 /* SetNextSourceCmd.h */, - 013E61A81E2E2FAE00FACF28 /* SetPresetCmd.cpp */, - 013E61A91E2E2FAE00FACF28 /* SetPresetCmd.h */, - 013E61AA1E2E2FAE00FACF28 /* SetSourceCmd.cpp */, - 013E61AB1E2E2FAE00FACF28 /* SetSourceCmd.h */, - 013E61AC1E2E2FAE00FACF28 /* SetTexMapDrawModeCmd.cpp */, - 013E61AD1E2E2FAE00FACF28 /* SetTexMapDrawModeCmd.h */, - 013E61AE1E2E2FAE00FACF28 /* StartDragSurfaceCmd.cpp */, - 013E61AF1E2E2FAE00FACF28 /* StartDragSurfaceCmd.h */, - 013E61B01E2E2FAE00FACF28 /* ToggleAnimatedSourceCmd.cpp */, - 013E61B11E2E2FAE00FACF28 /* ToggleAnimatedSourceCmd.h */, - 013E61B21E2E2FAE00FACF28 /* TogglePerspectiveCmd.cpp */, - 013E61B31E2E2FAE00FACF28 /* TogglePerspectiveCmd.h */, - 013E61B41E2E2FAE00FACF28 /* TranslateCanvasCmd.cpp */, - 013E61B51E2E2FAE00FACF28 /* TranslateCanvasCmd.h */, + 012CB99A1FFF8EE300F8F880 /* AddGridColCmd.cpp */, + 012CB99B1FFF8EE300F8F880 /* AddGridColCmd.h */, + 012CB99C1FFF8EE300F8F880 /* AddGridRowCmd.cpp */, + 012CB99D1FFF8EE300F8F880 /* AddGridRowCmd.h */, + 012CB99E1FFF8EE300F8F880 /* AddSurfaceCmd.cpp */, + 012CB99F1FFF8EE300F8F880 /* AddSurfaceCmd.h */, + 012CB9A01FFF8EE300F8F880 /* BaseCmd.h */, + 012CB9A11FFF8EE300F8F880 /* ClearSurfacesCmd.cpp */, + 012CB9A21FFF8EE300F8F880 /* ClearSurfacesCmd.h */, + 012CB9A31FFF8EE300F8F880 /* CmdManager.cpp */, + 012CB9A41FFF8EE300F8F880 /* CmdManager.h */, + 012CB9A51FFF8EE300F8F880 /* DeselectSurfaceCmd.cpp */, + 012CB9A61FFF8EE300F8F880 /* DeselectSurfaceCmd.h */, + 012CB9A71FFF8EE300F8F880 /* DeselectTexCoordCmd.cpp */, + 012CB9A81FFF8EE300F8F880 /* DeselectTexCoordCmd.h */, + 012CB9A91FFF8EE300F8F880 /* DuplicateSurfaceCmd.cpp */, + 012CB9AA1FFF8EE300F8F880 /* DuplicateSurfaceCmd.h */, + 012CB9AB1FFF8EE300F8F880 /* MvAllTexCoordsCmd.cpp */, + 012CB9AC1FFF8EE300F8F880 /* MvAllTexCoordsCmd.h */, + 012CB9AD1FFF8EE300F8F880 /* MvLayerDnCmd.cpp */, + 012CB9AE1FFF8EE300F8F880 /* MvLayerDnCmd.h */, + 012CB9AF1FFF8EE300F8F880 /* MvLayerUpCmd.cpp */, + 012CB9B01FFF8EE300F8F880 /* MvLayerUpCmd.h */, + 012CB9B11FFF8EE300F8F880 /* MvSelectionCmd.cpp */, + 012CB9B21FFF8EE300F8F880 /* MvSelectionCmd.h */, + 012CB9B31FFF8EE300F8F880 /* MvSurfaceVertCmd.cpp */, + 012CB9B41FFF8EE300F8F880 /* MvSurfaceVertCmd.h */, + 012CB9B51FFF8EE300F8F880 /* MvTexCoordCmd.cpp */, + 012CB9B61FFF8EE300F8F880 /* MvTexCoordCmd.h */, + 012CB9B71FFF8EE300F8F880 /* RmGridColCmd.cpp */, + 012CB9B81FFF8EE300F8F880 /* RmGridColCmd.h */, + 012CB9B91FFF8EE300F8F880 /* RmGridRowCmd.cpp */, + 012CB9BA1FFF8EE300F8F880 /* RmGridRowCmd.h */, + 012CB9BB1FFF8EE300F8F880 /* RmSurfaceCmd.cpp */, + 012CB9BC1FFF8EE300F8F880 /* RmSurfaceCmd.h */, + 012CB9BD1FFF8EE300F8F880 /* SaveTexCoordPosCmd.cpp */, + 012CB9BE1FFF8EE300F8F880 /* SaveTexCoordPosCmd.h */, + 012CB9BF1FFF8EE300F8F880 /* ScaleSurfaceFromToCmd.cpp */, + 012CB9C01FFF8EE300F8F880 /* ScaleSurfaceFromToCmd.h */, + 012CB9C11FFF8EE300F8F880 /* SelNextSurfaceCmd.cpp */, + 012CB9C21FFF8EE300F8F880 /* SelNextSurfaceCmd.h */, + 012CB9C31FFF8EE300F8F880 /* SelNextTexCoordCmd.cpp */, + 012CB9C41FFF8EE300F8F880 /* SelNextTexCoordCmd.h */, + 012CB9C51FFF8EE300F8F880 /* SelNextVertexCmd.cpp */, + 012CB9C61FFF8EE300F8F880 /* SelNextVertexCmd.h */, + 012CB9C71FFF8EE300F8F880 /* SelPrevSurfaceCmd.cpp */, + 012CB9C81FFF8EE300F8F880 /* SelPrevSurfaceCmd.h */, + 012CB9C91FFF8EE300F8F880 /* SelPrevTexCoordCmd.cpp */, + 012CB9CA1FFF8EE300F8F880 /* SelPrevTexCoordCmd.h */, + 012CB9CB1FFF8EE300F8F880 /* SelPrevVertexCmd.cpp */, + 012CB9CC1FFF8EE300F8F880 /* SelPrevVertexCmd.h */, + 012CB9CD1FFF8EE300F8F880 /* SelSurfaceCmd.cpp */, + 012CB9CE1FFF8EE300F8F880 /* SelSurfaceCmd.h */, + 012CB9CF1FFF8EE300F8F880 /* SelTexCoordCmd.cpp */, + 012CB9D01FFF8EE300F8F880 /* SelTexCoordCmd.h */, + 012CB9D11FFF8EE300F8F880 /* SelVertexCmd.cpp */, + 012CB9D21FFF8EE300F8F880 /* SelVertexCmd.h */, + 012CB9D31FFF8EE300F8F880 /* SetApplicationModeCmd.cpp */, + 012CB9D41FFF8EE300F8F880 /* SetApplicationModeCmd.h */, + 012CB9D51FFF8EE300F8F880 /* SetNextSourceCmd.cpp */, + 012CB9D61FFF8EE300F8F880 /* SetNextSourceCmd.h */, + 012CB9D71FFF8EE300F8F880 /* SetPresetCmd.cpp */, + 012CB9D81FFF8EE300F8F880 /* SetPresetCmd.h */, + 012CB9D91FFF8EE300F8F880 /* SetSourceCmd.cpp */, + 012CB9DA1FFF8EE300F8F880 /* SetSourceCmd.h */, + 012CB9DB1FFF8EE300F8F880 /* SetTexMapDrawModeCmd.cpp */, + 012CB9DC1FFF8EE300F8F880 /* SetTexMapDrawModeCmd.h */, + 012CB9DD1FFF8EE300F8F880 /* StartDragSurfaceCmd.cpp */, + 012CB9DE1FFF8EE300F8F880 /* StartDragSurfaceCmd.h */, + 012CB9DF1FFF8EE300F8F880 /* ToggleAnimatedSourceCmd.cpp */, + 012CB9E01FFF8EE300F8F880 /* ToggleAnimatedSourceCmd.h */, + 012CB9E11FFF8EE300F8F880 /* TogglePerspectiveCmd.cpp */, + 012CB9E21FFF8EE300F8F880 /* TogglePerspectiveCmd.h */, + 012CB9E31FFF8EE300F8F880 /* TranslateCanvasCmd.cpp */, + 012CB9E41FFF8EE300F8F880 /* TranslateCanvasCmd.h */, ); path = Commands; sourceTree = ""; }; - 013E61B61E2E2FAE00FACF28 /* Gui */ = { + 012CB9E51FFF8EE300F8F880 /* Gui */ = { isa = PBXGroup; children = ( - 013E61B71E2E2FAE00FACF28 /* Gui.cpp */, - 013E61B81E2E2FAE00FACF28 /* Gui.h */, - 013E61B91E2E2FAE00FACF28 /* Widgets */, + 012CB9E61FFF8EE300F8F880 /* Gui.cpp */, + 012CB9E71FFF8EE300F8F880 /* Gui.h */, + 012CB9E81FFF8EE300F8F880 /* Widgets */, ); path = Gui; sourceTree = ""; }; - 013E61B91E2E2FAE00FACF28 /* Widgets */ = { + 012CB9E81FFF8EE300F8F880 /* Widgets */ = { isa = PBXGroup; children = ( - 013E61BA1E2E2FAE00FACF28 /* GuiBaseWidget.h */, - 013E61BB1E2E2FAE00FACF28 /* LayerPanelWidget.cpp */, - 013E61BC1E2E2FAE00FACF28 /* LayerPanelWidget.h */, - 013E61BD1E2E2FAE00FACF28 /* ProjectionEditorWidget.cpp */, - 013E61BE1E2E2FAE00FACF28 /* ProjectionEditorWidget.h */, - 013E61BF1E2E2FAE00FACF28 /* ScaleWidget.cpp */, - 013E61C01E2E2FAE00FACF28 /* ScaleWidget.h */, - 013E61C11E2E2FAE00FACF28 /* SourcesEditorWidget.cpp */, - 013E61C21E2E2FAE00FACF28 /* SourcesEditorWidget.h */, - 013E61C31E2E2FAE00FACF28 /* SurfaceHighlightWidget.cpp */, - 013E61C41E2E2FAE00FACF28 /* SurfaceHighlightWidget.h */, - 013E61C51E2E2FAE00FACF28 /* TextureEditorWidget.cpp */, - 013E61C61E2E2FAE00FACF28 /* TextureEditorWidget.h */, - 013E61C71E2E2FAE00FACF28 /* TextureHighlightWidget.cpp */, - 013E61C81E2E2FAE00FACF28 /* TextureHighlightWidget.h */, + 012CB9E91FFF8EE300F8F880 /* GuiBaseWidget.h */, + 012CB9EA1FFF8EE300F8F880 /* LayerPanelWidget.cpp */, + 012CB9EB1FFF8EE300F8F880 /* LayerPanelWidget.h */, + 012CB9EC1FFF8EE300F8F880 /* ProjectionEditorWidget.cpp */, + 012CB9ED1FFF8EE300F8F880 /* ProjectionEditorWidget.h */, + 012CB9EE1FFF8EE300F8F880 /* ScaleWidget.cpp */, + 012CB9EF1FFF8EE300F8F880 /* ScaleWidget.h */, + 012CB9F01FFF8EE300F8F880 /* SourcesEditorWidget.cpp */, + 012CB9F11FFF8EE300F8F880 /* SourcesEditorWidget.h */, + 012CB9F21FFF8EE300F8F880 /* SurfaceHighlightWidget.cpp */, + 012CB9F31FFF8EE300F8F880 /* SurfaceHighlightWidget.h */, + 012CB9F41FFF8EE300F8F880 /* TextureEditorWidget.cpp */, + 012CB9F51FFF8EE300F8F880 /* TextureEditorWidget.h */, + 012CB9F61FFF8EE300F8F880 /* TextureHighlightWidget.cpp */, + 012CB9F71FFF8EE300F8F880 /* TextureHighlightWidget.h */, ); path = Widgets; sourceTree = ""; }; - 013E61C91E2E2FAE00FACF28 /* Info */ = { + 012CB9F81FFF8EE300F8F880 /* Info */ = { isa = PBXGroup; children = ( - 013E61CA1E2E2FAE00FACF28 /* Info.cpp */, - 013E61CB1E2E2FAE00FACF28 /* Info.h */, + 012CB9F91FFF8EE300F8F880 /* Info.cpp */, + 012CB9FA1FFF8EE300F8F880 /* Info.h */, ); path = Info; sourceTree = ""; }; - 013E61CC1E2E2FAE00FACF28 /* MediaServer */ = { + 012CB9FB1FFF8EE300F8F880 /* MediaServer */ = { isa = PBXGroup; children = ( - 013E61CD1E2E2FAE00FACF28 /* DirectoryWatcher.cpp */, - 013E61CE1E2E2FAE00FACF28 /* DirectoryWatcher.h */, - 013E61CF1E2E2FAE00FACF28 /* MediaServer.cpp */, - 013E61D01E2E2FAE00FACF28 /* MediaServer.h */, + 012CB9FC1FFF8EE300F8F880 /* DirectoryWatcher.cpp */, + 012CB9FD1FFF8EE300F8F880 /* DirectoryWatcher.h */, + 012CB9FE1FFF8EE300F8F880 /* MediaServer.cpp */, + 012CB9FF1FFF8EE300F8F880 /* MediaServer.h */, ); path = MediaServer; sourceTree = ""; }; - 013E61D31E2E2FAE00FACF28 /* Sources */ = { + 012CBA031FFF8EE300F8F880 /* Sources */ = { isa = PBXGroup; children = ( - 013E61D41E2E2FAE00FACF28 /* BaseSource.cpp */, - 013E61D51E2E2FAE00FACF28 /* BaseSource.h */, - 013E61D61E2E2FAE00FACF28 /* FboSource.cpp */, - 013E61D71E2E2FAE00FACF28 /* FboSource.h */, - 013E61D81E2E2FAE00FACF28 /* ImageSource.cpp */, - 013E61D91E2E2FAE00FACF28 /* ImageSource.h */, - 013E61DA1E2E2FAE00FACF28 /* OMXPlayerCache.cpp */, - 013E61DB1E2E2FAE00FACF28 /* OMXPlayerCache.h */, - 013E61DC1E2E2FAE00FACF28 /* SourceType.h */, - 013E62491E2E38EC00FACF28 /* SourceTypeHelper.h */, - 013E61DD1E2E2FAE00FACF28 /* VideoSource.cpp */, - 013E61DE1E2E2FAE00FACF28 /* VideoSource.h */, + 012CBA041FFF8EE300F8F880 /* BaseSource.cpp */, + 012CBA051FFF8EE300F8F880 /* BaseSource.h */, + 012CBA061FFF8EE300F8F880 /* FboSource.cpp */, + 012CBA071FFF8EE300F8F880 /* FboSource.h */, + 012CBA081FFF8EE300F8F880 /* ImageSource.cpp */, + 012CBA091FFF8EE300F8F880 /* ImageSource.h */, + 012CBA0A1FFF8EE300F8F880 /* magSlide.cpp */, + 012CBA0B1FFF8EE300F8F880 /* magSlide.h */, + 012CBA0C1FFF8EE300F8F880 /* magSlideShowSource.cpp */, + 012CBA0D1FFF8EE300F8F880 /* magSlideShowSource.h */, + 012CBA0E1FFF8EE300F8F880 /* magSlideTransition.cpp */, + 012CBA0F1FFF8EE300F8F880 /* magSlideTransition.h */, + 012CBA101FFF8EE300F8F880 /* magSlideTransitionFactory.cpp */, + 012CBA111FFF8EE300F8F880 /* magSlideTransitionFactory.h */, + 012CBA121FFF8EE300F8F880 /* OMXPlayerCache.cpp */, + 012CBA131FFF8EE300F8F880 /* OMXPlayerCache.h */, + 012CBA141FFF8EE300F8F880 /* SourceType.h */, + 012CBA151FFF8EE300F8F880 /* SourceTypeHelper.h */, + 012CBA161FFF8EE300F8F880 /* VideoSource.cpp */, + 012CBA171FFF8EE300F8F880 /* VideoSource.h */, ); path = Sources; sourceTree = ""; }; - 013E61DF1E2E2FAE00FACF28 /* Surfaces */ = { + 012CBA181FFF8EE300F8F880 /* Surfaces */ = { isa = PBXGroup; children = ( - 013E61E01E2E2FAE00FACF28 /* BaseSurface.cpp */, - 013E61E11E2E2FAE00FACF28 /* BaseSurface.h */, - 013E61E21E2E2FAE00FACF28 /* GridWarpSurface.cpp */, - 013E61E31E2E2FAE00FACF28 /* GridWarpSurface.h */, - 013E61E41E2E2FAE00FACF28 /* HexagonSurface.cpp */, - 013E61E51E2E2FAE00FACF28 /* HexagonSurface.h */, - 013E61E61E2E2FAE00FACF28 /* QuadSurface.cpp */, - 013E61E71E2E2FAE00FACF28 /* QuadSurface.h */, - 013E61E81E2E2FAE00FACF28 /* SurfaceFactory.cpp */, - 013E61E91E2E2FAE00FACF28 /* SurfaceFactory.h */, - 013E61EA1E2E2FAE00FACF28 /* SurfaceManager.cpp */, - 013E61EB1E2E2FAE00FACF28 /* SurfaceManager.h */, - 013E61EC1E2E2FAE00FACF28 /* SurfaceStack.cpp */, - 013E61ED1E2E2FAE00FACF28 /* SurfaceStack.h */, - 013E61EE1E2E2FAE00FACF28 /* SurfaceType.h */, - 013E61EF1E2E2FAE00FACF28 /* TriangleSurface.cpp */, - 013E61F01E2E2FAE00FACF28 /* TriangleSurface.h */, + 012CBA191FFF8EE300F8F880 /* BaseSurface.cpp */, + 012CBA1A1FFF8EE300F8F880 /* BaseSurface.h */, + 012CBA1B1FFF8EE300F8F880 /* CircleSurface.cpp */, + 012CBA1C1FFF8EE300F8F880 /* CircleSurface.h */, + 012CBA1D1FFF8EE300F8F880 /* GridWarpSurface.cpp */, + 012CBA1E1FFF8EE300F8F880 /* GridWarpSurface.h */, + 012CBA1F1FFF8EE300F8F880 /* HexagonSurface.cpp */, + 012CBA201FFF8EE300F8F880 /* HexagonSurface.h */, + 012CBA211FFF8EE300F8F880 /* QuadSurface.cpp */, + 012CBA221FFF8EE300F8F880 /* QuadSurface.h */, + 012CBA231FFF8EE300F8F880 /* SurfaceFactory.cpp */, + 012CBA241FFF8EE300F8F880 /* SurfaceFactory.h */, + 012CBA251FFF8EE300F8F880 /* SurfaceManager.cpp */, + 012CBA261FFF8EE300F8F880 /* SurfaceManager.h */, + 012CBA271FFF8EE300F8F880 /* SurfaceStack.cpp */, + 012CBA281FFF8EE300F8F880 /* SurfaceStack.h */, + 012CBA291FFF8EE300F8F880 /* SurfaceType.h */, + 012CBA2A1FFF8EE300F8F880 /* TriangleSurface.cpp */, + 012CBA2B1FFF8EE300F8F880 /* TriangleSurface.h */, ); path = Surfaces; sourceTree = ""; }; - 013E61F11E2E2FAE00FACF28 /* UserInterface */ = { + 012CBA2C1FFF8EE300F8F880 /* Types */ = { isa = PBXGroup; children = ( - 013E61F21E2E2FAE00FACF28 /* BaseJoint.cpp */, - 013E61F31E2E2FAE00FACF28 /* BaseJoint.h */, - 013E61F41E2E2FAE00FACF28 /* CircleJoint.cpp */, - 013E61F51E2E2FAE00FACF28 /* CircleJoint.h */, - 013E61F61E2E2FAE00FACF28 /* EditorType.h */, - 013E61F71E2E2FAE00FACF28 /* GuiMode.h */, - 013E61F81E2E2FAE00FACF28 /* RadioList.cpp */, - 013E61F91E2E2FAE00FACF28 /* RadioList.h */, + 012CBA2D1FFF8EE300F8F880 /* Vec2.cpp */, + 012CBA2E1FFF8EE300F8F880 /* Vec2.h */, + 012CBA2F1FFF8EE300F8F880 /* Vec3.cpp */, + 012CBA301FFF8EE300F8F880 /* Vec3.h */, + ); + path = Types; + sourceTree = ""; + }; + 012CBA311FFF8EE300F8F880 /* UserInterface */ = { + isa = PBXGroup; + children = ( + 012CBA321FFF8EE300F8F880 /* BaseJoint.cpp */, + 012CBA331FFF8EE300F8F880 /* BaseJoint.h */, + 012CBA341FFF8EE300F8F880 /* CircleJoint.cpp */, + 012CBA351FFF8EE300F8F880 /* CircleJoint.h */, + 012CBA361FFF8EE300F8F880 /* EditorType.h */, + 012CBA371FFF8EE300F8F880 /* GuiMode.h */, + 012CBA381FFF8EE300F8F880 /* RadioList.cpp */, + 012CBA391FFF8EE300F8F880 /* RadioList.h */, ); path = UserInterface; sourceTree = ""; }; - 013E61FA1E2E2FAE00FACF28 /* Utils */ = { + 012CBA3A1FFF8EE300F8F880 /* Utils */ = { isa = PBXGroup; children = ( - 013E61FB1E2E2FAE00FACF28 /* HomographyHelper.cpp */, - 013E61FC1E2E2FAE00FACF28 /* HomographyHelper.h */, + 012CBA3B1FFF8EE300F8F880 /* HomographyHelper.cpp */, + 012CBA3C1FFF8EE300F8F880 /* HomographyHelper.h */, ); path = Utils; sourceTree = ""; }; + 012CBA3D1FFF8EEE00F8F880 /* src */ = { + isa = PBXGroup; + children = ( + 012CBA3E1FFF8EEE00F8F880 /* ofxBaseGui.cpp */, + 012CBA3F1FFF8EEE00F8F880 /* ofxBaseGui.h */, + 012CBA401FFF8EEE00F8F880 /* ofxButton.cpp */, + 012CBA411FFF8EEE00F8F880 /* ofxButton.h */, + 012CBA421FFF8EEE00F8F880 /* ofxColorPicker.cpp */, + 012CBA431FFF8EEE00F8F880 /* ofxColorPicker.h */, + 012CBA441FFF8EEE00F8F880 /* ofxGui.h */, + 012CBA451FFF8EEE00F8F880 /* ofxGuiGroup.cpp */, + 012CBA461FFF8EEE00F8F880 /* ofxGuiGroup.h */, + 012CBA471FFF8EEE00F8F880 /* ofxInputField.cpp */, + 012CBA481FFF8EEE00F8F880 /* ofxInputField.h */, + 012CBA491FFF8EEE00F8F880 /* ofxLabel.cpp */, + 012CBA4A1FFF8EEE00F8F880 /* ofxLabel.h */, + 012CBA4B1FFF8EEE00F8F880 /* ofxPanel.cpp */, + 012CBA4C1FFF8EEE00F8F880 /* ofxPanel.h */, + 012CBA4D1FFF8EEE00F8F880 /* ofxSlider.cpp */, + 012CBA4E1FFF8EEE00F8F880 /* ofxSlider.h */, + 012CBA4F1FFF8EEE00F8F880 /* ofxSliderGroup.cpp */, + 012CBA501FFF8EEE00F8F880 /* ofxSliderGroup.h */, + 012CBA511FFF8EEE00F8F880 /* ofxToggle.cpp */, + 012CBA521FFF8EEE00F8F880 /* ofxToggle.h */, + ); + name = src; + path = ../../ofxGui/src; + sourceTree = ""; + }; 39264837192224C20008A7F5 /* ofxXmlSettings */ = { isa = PBXGroup; children = ( @@ -654,40 +732,15 @@ 3933D5C019BB87A3000ACA55 /* ofxGui */ = { isa = PBXGroup; children = ( - 3933D5C119BB87BD000ACA55 /* src */, + 012CBA3D1FFF8EEE00F8F880 /* src */, ); name = ofxGui; sourceTree = ""; }; - 3933D5C119BB87BD000ACA55 /* src */ = { - isa = PBXGroup; - children = ( - 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */, - 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */, - 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */, - 3933D5C519BB87BD000ACA55 /* ofxButton.h */, - 3933D5C619BB87BD000ACA55 /* ofxGui.h */, - 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */, - 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */, - 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */, - 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */, - 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */, - 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */, - 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */, - 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */, - 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */, - 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */, - 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */, - 3933D5D219BB87BD000ACA55 /* ofxToggle.h */, - ); - name = src; - path = ../../ofxGui/src; - sourceTree = ""; - }; 396E8A34190FEDE500705899 /* ofxPiMapper */ = { isa = PBXGroup; children = ( - 013E61591E2E2FAE00FACF28 /* src */, + 012CB9881FFF8EE300F8F880 /* src */, ); name = ofxPiMapper; sourceTree = ""; @@ -858,7 +911,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "rsync -aved ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\nrsync -aved ../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\""; + 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"; }; /* End PBXShellScriptBuildPhase section */ @@ -867,93 +920,102 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 013E623B1E2E2FAE00FACF28 /* VideoSource.cpp in Sources */, - 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, - 013E62131E2E2FAE00FACF28 /* MvTexCoordCmd.cpp in Sources */, - 013E62241E2E2FAE00FACF28 /* SetPresetCmd.cpp in Sources */, - 013E621C1E2E2FAE00FACF28 /* SelPrevSurfaceCmd.cpp in Sources */, - 013E623A1E2E2FAE00FACF28 /* OMXPlayerCache.cpp in Sources */, - 013E622C1E2E2FAE00FACF28 /* LayerPanelWidget.cpp in Sources */, - 013E622F1E2E2FAE00FACF28 /* SourcesEditorWidget.cpp in Sources */, - 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, - 013E62001E2E2FAE00FACF28 /* ApplicationBaseMode.cpp in Sources */, - 013E62391E2E2FAE00FACF28 /* ImageSource.cpp in Sources */, - 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, - 013E621D1E2E2FAE00FACF28 /* SelPrevTexCoordCmd.cpp in Sources */, - 013E622E1E2E2FAE00FACF28 /* ScaleWidget.cpp in Sources */, - 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, - 013E62041E2E2FAE00FACF28 /* TextureMappingMode.cpp in Sources */, - 013E62461E2E2FAE00FACF28 /* RadioList.cpp in Sources */, - 013E62441E2E2FAE00FACF28 /* BaseJoint.cpp in Sources */, - 013E62091E2E2FAE00FACF28 /* ClearSurfacesCmd.cpp in Sources */, - 013E62431E2E2FAE00FACF28 /* TriangleSurface.cpp in Sources */, - 013E621A1E2E2FAE00FACF28 /* SelNextTexCoordCmd.cpp in Sources */, - 013E62141E2E2FAE00FACF28 /* RmGridColCmd.cpp in Sources */, - 013E621F1E2E2FAE00FACF28 /* SelSurfaceCmd.cpp in Sources */, - 013E62421E2E2FAE00FACF28 /* SurfaceStack.cpp in Sources */, - 013E62221E2E2FAE00FACF28 /* SetApplicationModeCmd.cpp in Sources */, - 013E62411E2E2FAE00FACF28 /* SurfaceManager.cpp in Sources */, - 013E62211E2E2FAE00FACF28 /* SelVertexCmd.cpp in Sources */, - 013E623C1E2E2FAE00FACF28 /* BaseSurface.cpp in Sources */, - 013E622A1E2E2FAE00FACF28 /* TranslateCanvasCmd.cpp in Sources */, - 013E62301E2E2FAE00FACF28 /* SurfaceHighlightWidget.cpp in Sources */, - 013E623D1E2E2FAE00FACF28 /* GridWarpSurface.cpp in Sources */, - 013E623E1E2E2FAE00FACF28 /* HexagonSurface.cpp in Sources */, - 013E621B1E2E2FAE00FACF28 /* SelNextVertexCmd.cpp in Sources */, + 012CBA5E1FFF8F2500F8F880 /* Application.cpp in Sources */, + 012CBA5F1FFF8F2500F8F880 /* ApplicationBaseMode.cpp in Sources */, + 012CBA601FFF8F2500F8F880 /* PresentationMode.cpp in Sources */, + 012CBA611FFF8F2500F8F880 /* ProjectionMappingMode.cpp in Sources */, + 012CBA621FFF8F2500F8F880 /* SourceSelectionMode.cpp in Sources */, + 012CBA631FFF8F2500F8F880 /* TextureMappingMode.cpp in Sources */, + 012CBA641FFF8F2500F8F880 /* SettingsLoader.cpp in Sources */, + 012CBA651FFF8F2500F8F880 /* AddGridColCmd.cpp in Sources */, + 012CBA661FFF8F2500F8F880 /* AddGridRowCmd.cpp in Sources */, + 012CBA671FFF8F2500F8F880 /* AddSurfaceCmd.cpp in Sources */, + 012CBA681FFF8F2500F8F880 /* ClearSurfacesCmd.cpp in Sources */, + 012CBA691FFF8F2500F8F880 /* CmdManager.cpp in Sources */, + 012CBA6A1FFF8F2500F8F880 /* DeselectSurfaceCmd.cpp in Sources */, + 012CBA6B1FFF8F2500F8F880 /* DeselectTexCoordCmd.cpp in Sources */, + 012CBA6C1FFF8F2500F8F880 /* DuplicateSurfaceCmd.cpp in Sources */, + 012CBA6D1FFF8F2500F8F880 /* MvAllTexCoordsCmd.cpp in Sources */, + 012CBA6E1FFF8F2500F8F880 /* MvLayerDnCmd.cpp in Sources */, + 012CBA6F1FFF8F2500F8F880 /* MvLayerUpCmd.cpp in Sources */, + 012CBA701FFF8F2500F8F880 /* MvSelectionCmd.cpp in Sources */, + 012CBA711FFF8F2500F8F880 /* MvSurfaceVertCmd.cpp in Sources */, + 012CBA721FFF8F2500F8F880 /* MvTexCoordCmd.cpp in Sources */, + 012CBA731FFF8F2500F8F880 /* RmGridColCmd.cpp in Sources */, + 012CBA741FFF8F2500F8F880 /* RmGridRowCmd.cpp in Sources */, + 012CBA751FFF8F2500F8F880 /* RmSurfaceCmd.cpp in Sources */, + 012CBA761FFF8F2500F8F880 /* SaveTexCoordPosCmd.cpp in Sources */, + 012CBA771FFF8F2500F8F880 /* ScaleSurfaceFromToCmd.cpp in Sources */, + 012CBA781FFF8F2500F8F880 /* SelNextSurfaceCmd.cpp in Sources */, + 012CBA791FFF8F2500F8F880 /* SelNextTexCoordCmd.cpp in Sources */, + 012CBA7A1FFF8F2500F8F880 /* SelNextVertexCmd.cpp in Sources */, + 012CBA7B1FFF8F2500F8F880 /* SelPrevSurfaceCmd.cpp in Sources */, + 012CBA7C1FFF8F2500F8F880 /* SelPrevTexCoordCmd.cpp in Sources */, + 012CBA7D1FFF8F2500F8F880 /* SelPrevVertexCmd.cpp in Sources */, + 012CBA7E1FFF8F2500F8F880 /* SelSurfaceCmd.cpp in Sources */, + 012CBA7F1FFF8F2500F8F880 /* SelTexCoordCmd.cpp in Sources */, + 012CBA801FFF8F2500F8F880 /* SelVertexCmd.cpp in Sources */, + 012CBA811FFF8F2500F8F880 /* SetApplicationModeCmd.cpp in Sources */, + 012CBA821FFF8F2500F8F880 /* SetNextSourceCmd.cpp in Sources */, + 012CBA831FFF8F2500F8F880 /* SetPresetCmd.cpp in Sources */, + 012CBA841FFF8F2500F8F880 /* SetSourceCmd.cpp in Sources */, + 012CBA851FFF8F2500F8F880 /* SetTexMapDrawModeCmd.cpp in Sources */, + 012CBA861FFF8F2500F8F880 /* StartDragSurfaceCmd.cpp in Sources */, + 012CBA871FFF8F2500F8F880 /* ToggleAnimatedSourceCmd.cpp in Sources */, + 012CBA881FFF8F2500F8F880 /* TogglePerspectiveCmd.cpp in Sources */, + 012CBA891FFF8F2500F8F880 /* TranslateCanvasCmd.cpp in Sources */, + 012CBA8A1FFF8F2500F8F880 /* Gui.cpp in Sources */, + 012CBA8B1FFF8F2500F8F880 /* LayerPanelWidget.cpp in Sources */, + 012CBA8C1FFF8F2500F8F880 /* ProjectionEditorWidget.cpp in Sources */, + 012CBA8D1FFF8F2500F8F880 /* ScaleWidget.cpp in Sources */, + 012CBA8E1FFF8F2500F8F880 /* SourcesEditorWidget.cpp in Sources */, + 012CBA8F1FFF8F2500F8F880 /* SurfaceHighlightWidget.cpp in Sources */, + 012CBA901FFF8F2500F8F880 /* TextureEditorWidget.cpp in Sources */, + 012CBA911FFF8F2500F8F880 /* TextureHighlightWidget.cpp in Sources */, + 012CBA921FFF8F2500F8F880 /* Info.cpp in Sources */, + 012CBA931FFF8F2500F8F880 /* DirectoryWatcher.cpp in Sources */, + 012CBA941FFF8F2500F8F880 /* MediaServer.cpp in Sources */, + 012CBA951FFF8F2500F8F880 /* ofxPiMapper.cpp in Sources */, + 012CBA961FFF8F2500F8F880 /* BaseSource.cpp in Sources */, + 012CBA971FFF8F2500F8F880 /* FboSource.cpp in Sources */, + 012CBA981FFF8F2500F8F880 /* ImageSource.cpp in Sources */, + 012CBA991FFF8F2500F8F880 /* magSlide.cpp in Sources */, + 012CBA9A1FFF8F2500F8F880 /* magSlideShowSource.cpp in Sources */, + 012CBA9B1FFF8F2500F8F880 /* magSlideTransition.cpp in Sources */, + 012CBA9C1FFF8F2500F8F880 /* magSlideTransitionFactory.cpp in Sources */, + 012CBA9D1FFF8F2500F8F880 /* OMXPlayerCache.cpp in Sources */, + 012CBA9E1FFF8F2500F8F880 /* VideoSource.cpp in Sources */, + 012CBA9F1FFF8F2500F8F880 /* BaseSurface.cpp in Sources */, + 012CBAA01FFF8F2500F8F880 /* CircleSurface.cpp in Sources */, + 012CBAA11FFF8F2600F8F880 /* GridWarpSurface.cpp in Sources */, + 012CBAA21FFF8F2600F8F880 /* HexagonSurface.cpp in Sources */, + 012CBAA31FFF8F2600F8F880 /* QuadSurface.cpp in Sources */, + 012CBAA41FFF8F2600F8F880 /* SurfaceFactory.cpp in Sources */, + 012CBAA51FFF8F2600F8F880 /* SurfaceManager.cpp in Sources */, + 012CBAA61FFF8F2600F8F880 /* SurfaceStack.cpp in Sources */, + 012CBAA71FFF8F2600F8F880 /* TriangleSurface.cpp in Sources */, + 012CBAA81FFF8F2600F8F880 /* Vec2.cpp in Sources */, + 012CBAA91FFF8F2600F8F880 /* Vec3.cpp in Sources */, + 012CBAAA1FFF8F2600F8F880 /* BaseJoint.cpp in Sources */, + 012CBAAB1FFF8F2600F8F880 /* CircleJoint.cpp in Sources */, + 012CBAAC1FFF8F2600F8F880 /* RadioList.cpp in Sources */, + 012CBAAD1FFF8F2600F8F880 /* HomographyHelper.cpp in Sources */, + 012CBA541FFF8F1B00F8F880 /* ofxBaseGui.cpp in Sources */, + 012CBA551FFF8F1B00F8F880 /* ofxButton.cpp in Sources */, + 012CBA561FFF8F1B00F8F880 /* ofxColorPicker.cpp in Sources */, + 012CBA571FFF8F1B00F8F880 /* ofxGuiGroup.cpp in Sources */, + 012CBA581FFF8F1B00F8F880 /* ofxInputField.cpp in Sources */, + 012CBA591FFF8F1B00F8F880 /* ofxLabel.cpp in Sources */, + 012CBA5A1FFF8F1B00F8F880 /* ofxPanel.cpp in Sources */, + 012CBA5B1FFF8F1B00F8F880 /* ofxSlider.cpp in Sources */, + 012CBA5C1FFF8F1B00F8F880 /* ofxSliderGroup.cpp in Sources */, + 012CBA5D1FFF8F1B00F8F880 /* ofxToggle.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, - 013E62401E2E2FAE00FACF28 /* SurfaceFactory.cpp in Sources */, - 013E62361E2E2FAE00FACF28 /* ofxPiMapper.cpp in Sources */, 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, - 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, - 013E62311E2E2FAE00FACF28 /* TextureEditorWidget.cpp in Sources */, - 013E62061E2E2FAE00FACF28 /* AddGridColCmd.cpp in Sources */, - 013E62351E2E2FAE00FACF28 /* MediaServer.cpp in Sources */, - 013E620F1E2E2FAE00FACF28 /* MvLayerDnCmd.cpp in Sources */, - 013E62181E2E2FAE00FACF28 /* ScaleSurfaceFromToCmd.cpp in Sources */, - 013E62201E2E2FAE00FACF28 /* SelTexCoordCmd.cpp in Sources */, - 013E62101E2E2FAE00FACF28 /* MvLayerUpCmd.cpp in Sources */, 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, - 013E62171E2E2FAE00FACF28 /* SaveTexCoordPosCmd.cpp in Sources */, - 013E62161E2E2FAE00FACF28 /* RmSurfaceCmd.cpp in Sources */, - 013E620A1E2E2FAE00FACF28 /* CmdManager.cpp in Sources */, - 013E62191E2E2FAE00FACF28 /* SelNextSurfaceCmd.cpp in Sources */, - 013E62251E2E2FAE00FACF28 /* SetSourceCmd.cpp in Sources */, - 013E61FF1E2E2FAE00FACF28 /* Application.cpp in Sources */, - 013E620D1E2E2FAE00FACF28 /* DuplicateSurfaceCmd.cpp in Sources */, - 013E62341E2E2FAE00FACF28 /* DirectoryWatcher.cpp in Sources */, - 013E623F1E2E2FAE00FACF28 /* QuadSurface.cpp in Sources */, - 013E62271E2E2FAE00FACF28 /* StartDragSurfaceCmd.cpp in Sources */, - 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, - 013E622D1E2E2FAE00FACF28 /* ProjectionEditorWidget.cpp in Sources */, - 013E62111E2E2FAE00FACF28 /* MvSelectionCmd.cpp in Sources */, E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, - 013E62281E2E2FAE00FACF28 /* ToggleAnimatedSourceCmd.cpp in Sources */, - 013E621E1E2E2FAE00FACF28 /* SelPrevVertexCmd.cpp in Sources */, - 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, - 013E62331E2E2FAE00FACF28 /* Info.cpp in Sources */, - 013E620E1E2E2FAE00FACF28 /* MvAllTexCoordsCmd.cpp in Sources */, - 013E62051E2E2FAE00FACF28 /* SettingsLoader.cpp in Sources */, - 013E62031E2E2FAE00FACF28 /* SourceSelectionMode.cpp in Sources */, - 013E62081E2E2FAE00FACF28 /* AddSurfaceCmd.cpp in Sources */, - 013E622B1E2E2FAE00FACF28 /* Gui.cpp in Sources */, - 013E62381E2E2FAE00FACF28 /* FboSource.cpp in Sources */, - 013E62071E2E2FAE00FACF28 /* AddGridRowCmd.cpp in Sources */, - 013E62291E2E2FAE00FACF28 /* TogglePerspectiveCmd.cpp in Sources */, - 013E620C1E2E2FAE00FACF28 /* DeselectTexCoordCmd.cpp in Sources */, - 013E62121E2E2FAE00FACF28 /* MvSurfaceVertCmd.cpp in Sources */, - 013E62451E2E2FAE00FACF28 /* CircleJoint.cpp in Sources */, - 013E62021E2E2FAE00FACF28 /* ProjectionMappingMode.cpp in Sources */, - 013E62231E2E2FAE00FACF28 /* SetNextSourceCmd.cpp in Sources */, - 013E62321E2E2FAE00FACF28 /* TextureHighlightWidget.cpp in Sources */, 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, - 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, - 013E62261E2E2FAE00FACF28 /* SetTexMapDrawModeCmd.cpp in Sources */, - 013E620B1E2E2FAE00FACF28 /* DeselectSurfaceCmd.cpp in Sources */, - 013E62011E2E2FAE00FACF28 /* PresentationMode.cpp in Sources */, - 013E62151E2E2FAE00FACF28 /* RmGridRowCmd.cpp in Sources */, - 013E62371E2E2FAE00FACF28 /* BaseSource.cpp in Sources */, - 013E62471E2E2FAE00FACF28 /* HomographyHelper.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Debug.xcscheme b/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Debug.xcscheme index 6e42bda..f9f9fdf 100644 --- a/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Debug.xcscheme +++ b/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Debug.xcscheme @@ -15,7 +15,7 @@ @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -33,7 +34,7 @@ @@ -45,6 +46,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -56,7 +58,7 @@ @@ -75,7 +77,7 @@ diff --git a/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme b/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme index dca5bb7..48f0e29 100644 --- a/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme +++ b/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme @@ -15,7 +15,7 @@ @@ -26,6 +26,7 @@ buildConfiguration = "Release" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -33,7 +34,7 @@ @@ -45,6 +46,7 @@ buildConfiguration = "Release" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -56,7 +58,7 @@ @@ -75,7 +77,7 @@ From 79b5c64f4544642359e75d215f742961ec810483 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:56:08 +0100 Subject: [PATCH 088/103] Add addons.make.rpi to example_shortcuts --- example_shortcuts/addons.make | 1 - example_shortcuts/addons.make.rpi | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 example_shortcuts/addons.make.rpi diff --git a/example_shortcuts/addons.make b/example_shortcuts/addons.make index aee7c01..0d1404c 100644 --- a/example_shortcuts/addons.make +++ b/example_shortcuts/addons.make @@ -1,4 +1,3 @@ ofxPiMapper ofxXmlSettings ofxGui -ofxOMXPlayer diff --git a/example_shortcuts/addons.make.rpi b/example_shortcuts/addons.make.rpi new file mode 100644 index 0000000..963941c --- /dev/null +++ b/example_shortcuts/addons.make.rpi @@ -0,0 +1,4 @@ +ofxGui +ofxPiMapper +ofxXmlSettings +ofxOMXPlayer From 6a9bfba0f1909df2b22ffc71bea106a5301e78aa Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 5 Jan 2018 11:57:27 +0100 Subject: [PATCH 089/103] Add addons.make.rpi --- example_simpler/addons.make.rpi | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 example_simpler/addons.make.rpi diff --git a/example_simpler/addons.make.rpi b/example_simpler/addons.make.rpi new file mode 100644 index 0000000..963941c --- /dev/null +++ b/example_simpler/addons.make.rpi @@ -0,0 +1,4 @@ +ofxGui +ofxPiMapper +ofxXmlSettings +ofxOMXPlayer From 296330e05cb1726cdd9a3aefa73d2726a7ba687f Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 17:51:44 +0100 Subject: [PATCH 090/103] Move back to single addons.make file primarily for the RPi --- example/addons.make | 2 +- example/addons.make.rpi | 4 ---- example_camera/addons.make | 3 ++- example_camera/addons.make.rpi | 4 ---- example_gamepad/addons.make | 3 ++- example_gamepad/addons.make.rpi | 4 ---- example_shortcuts/addons.make | 3 ++- example_shortcuts/addons.make.rpi | 4 ---- example_simpler/addons.make | 1 + example_simpler/addons.make.rpi | 4 ---- 10 files changed, 8 insertions(+), 24 deletions(-) delete mode 100644 example/addons.make.rpi delete mode 100644 example_camera/addons.make.rpi delete mode 100644 example_gamepad/addons.make.rpi delete mode 100644 example_shortcuts/addons.make.rpi delete mode 100644 example_simpler/addons.make.rpi diff --git a/example/addons.make b/example/addons.make index 0bf6afb..963941c 100644 --- a/example/addons.make +++ b/example/addons.make @@ -1,4 +1,4 @@ ofxGui ofxPiMapper ofxXmlSettings -` +ofxOMXPlayer diff --git a/example/addons.make.rpi b/example/addons.make.rpi deleted file mode 100644 index 963941c..0000000 --- a/example/addons.make.rpi +++ /dev/null @@ -1,4 +0,0 @@ -ofxGui -ofxPiMapper -ofxXmlSettings -ofxOMXPlayer diff --git a/example_camera/addons.make b/example_camera/addons.make index 0d1404c..963941c 100644 --- a/example_camera/addons.make +++ b/example_camera/addons.make @@ -1,3 +1,4 @@ +ofxGui ofxPiMapper ofxXmlSettings -ofxGui +ofxOMXPlayer diff --git a/example_camera/addons.make.rpi b/example_camera/addons.make.rpi deleted file mode 100644 index 963941c..0000000 --- a/example_camera/addons.make.rpi +++ /dev/null @@ -1,4 +0,0 @@ -ofxGui -ofxPiMapper -ofxXmlSettings -ofxOMXPlayer diff --git a/example_gamepad/addons.make b/example_gamepad/addons.make index 0d1404c..963941c 100644 --- a/example_gamepad/addons.make +++ b/example_gamepad/addons.make @@ -1,3 +1,4 @@ +ofxGui ofxPiMapper ofxXmlSettings -ofxGui +ofxOMXPlayer diff --git a/example_gamepad/addons.make.rpi b/example_gamepad/addons.make.rpi deleted file mode 100644 index 963941c..0000000 --- a/example_gamepad/addons.make.rpi +++ /dev/null @@ -1,4 +0,0 @@ -ofxGui -ofxPiMapper -ofxXmlSettings -ofxOMXPlayer diff --git a/example_shortcuts/addons.make b/example_shortcuts/addons.make index 0d1404c..963941c 100644 --- a/example_shortcuts/addons.make +++ b/example_shortcuts/addons.make @@ -1,3 +1,4 @@ +ofxGui ofxPiMapper ofxXmlSettings -ofxGui +ofxOMXPlayer diff --git a/example_shortcuts/addons.make.rpi b/example_shortcuts/addons.make.rpi deleted file mode 100644 index 963941c..0000000 --- a/example_shortcuts/addons.make.rpi +++ /dev/null @@ -1,4 +0,0 @@ -ofxGui -ofxPiMapper -ofxXmlSettings -ofxOMXPlayer diff --git a/example_simpler/addons.make b/example_simpler/addons.make index e72d2dd..963941c 100644 --- a/example_simpler/addons.make +++ b/example_simpler/addons.make @@ -1,3 +1,4 @@ ofxGui ofxPiMapper ofxXmlSettings +ofxOMXPlayer diff --git a/example_simpler/addons.make.rpi b/example_simpler/addons.make.rpi deleted file mode 100644 index 963941c..0000000 --- a/example_simpler/addons.make.rpi +++ /dev/null @@ -1,4 +0,0 @@ -ofxGui -ofxPiMapper -ofxXmlSettings -ofxOMXPlayer From e8dddfe008ee9dbaab32195cf44eb1db979639de Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:21:22 +0100 Subject: [PATCH 091/103] Add example_pocketvj --- example_pocketvj/Makefile | 13 ++ example_pocketvj/addons.make | 4 + example_pocketvj/bin/data/ofxpimapper.xml | 36 ++++++ .../bin/data/sources/images/image1.jpg | Bin 0 -> 268727 bytes example_pocketvj/src/main.cpp | 7 ++ example_pocketvj/src/ofApp.cpp | 119 ++++++++++++++++++ example_pocketvj/src/ofApp.h | 21 ++++ 7 files changed, 200 insertions(+) create mode 100644 example_pocketvj/Makefile create mode 100644 example_pocketvj/addons.make create mode 100644 example_pocketvj/bin/data/ofxpimapper.xml create mode 100644 example_pocketvj/bin/data/sources/images/image1.jpg create mode 100644 example_pocketvj/src/main.cpp create mode 100644 example_pocketvj/src/ofApp.cpp create mode 100644 example_pocketvj/src/ofApp.h diff --git a/example_pocketvj/Makefile b/example_pocketvj/Makefile new file mode 100644 index 0000000..177e172 --- /dev/null +++ b/example_pocketvj/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=$(realpath ../../..) +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/example_pocketvj/addons.make b/example_pocketvj/addons.make new file mode 100644 index 0000000..963941c --- /dev/null +++ b/example_pocketvj/addons.make @@ -0,0 +1,4 @@ +ofxGui +ofxPiMapper +ofxXmlSettings +ofxOMXPlayer diff --git a/example_pocketvj/bin/data/ofxpimapper.xml b/example_pocketvj/bin/data/ofxpimapper.xml new file mode 100644 index 0000000..961b490 --- /dev/null +++ b/example_pocketvj/bin/data/ofxpimapper.xml @@ -0,0 +1,36 @@ + + + + + 431.000000000 + 13.000000000 + + + 781.000000000 + 363.000000000 + + + 81.000000000 + 363.000000000 + + + + + 0.500000000 + 0.000000000 + + + 1.000000000 + 1.000000000 + + + 0.000000000 + 1.000000000 + + + + image + image1.jpg + + + diff --git a/example_pocketvj/bin/data/sources/images/image1.jpg b/example_pocketvj/bin/data/sources/images/image1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88cf12e429cadd6776396bc6c59d31ea444fd8f1 GIT binary patch literal 268727 zcma&O3s_QF`#wxH)y!o2cC<2OW}32tht$;4kS0f+G9@!bL#6US9w`+q9H6F|oHFGt zQ!`U4Q&Ln?R8j*vDdq_k0TGqTQUTFQzy$Z^+s*qs{J;Noeb@DEF7{e`ueH~H)@H5s z+|T_yY~!Hu?ZHc4=VN1FFh4)oP8baKEzD#Q47LQyEn4gZ?H2u4-r?(sfAU|;N)|2q z&w1El==|#c%0m|}TK8XhsMexQu%%zyfxZtHS^Q7FYSH%p<64KWEx_Q=w|e&6*9XO#a#aEBVjC|Gi(da>a_3rYrwtYWlCWrlzKAzwS)e{^yca|9=`V zK7+0L7IqJIZ^@#cV2f8RTC!@9aRln*_r_O?kdTy17yYwA0)O3>KqKaxrOTFo``z~| z7X9Cai(reF{CDBMV2i$4v}Ex&iOKSAH{}JK;TLSC<6~QxuE8CGK41DF!+Kq3M9o@hg1~14c9dMX{MGX+Z(*>=u>aYm~352QDJR%S&j@n z31AId!FUbrO@9Hs8Y2wZO%w-vaZ)#Bhg!7^VkQ#|m~bH{cqZB}99NV%#Bnmt#|5g2U0Q+=s?`;aXn4v3v6q^ zmusyWa>XCru9zmO^-bYzMQ6^F4*;>#hArW_GfAjNvU6;(Xdw$&Ef_b#LONT!x|H+C zI=5%*QuEcBmsS6gxTYVy3#XLou^&MiaLoww1~xSa)nvHX#wzRY6U42BCWP|NHh1>% zS;Owlwp|AI(T-0XH^9vB16TyE(R_CV;__kI$sJ}@39_5y%}!=X?`_7WvU<8r*MwkkzH9xOW;k~;T{pJ3NwY< zm6ivyW|ckMsblAA(w2DcMoB;N0^3G%#+x(29G<~fkLv%K9$7(%sL-Yfs%oC~a9{Qc zjwE_IO5W?oehAgwIQu%I(L)eU1yEB)SYNymc16464Jld03n5UzS$AA8=Kw0=bu z-`$qLYJUT&;X2^T>eKDeDEUE%b%RNUjjGZuQ`KGYh9zc4gysVXPh6RrU7@Go zz<5z9xGGE;?&`jx!gWPOl&C1BHc5$(*}C%iIkI`nN?u}{M+l1yI$r z@=yupH->Xhck}(A?nFsLL&2NDs7$jVGlsOK-0wZg38bj>x=!@Q1q6 z+o7ruD~G=_O?PReXekFJn_^A6KO(|EU|EjWW&sSP9H47rceJ3xR5vp9`~c>_`BgE& zW0`6&Pc+BY4ku9O4_7wl?*0V6&Q5eD-p&tCX7%d%Xg1@NOQ-(QsqWUu3f9&h!-2GU zAdOHTtS1XerY3q2U5nb0aLNG$#u!36>S%A zzSY1l^BPi-UFR-MEh#RD$q)+-k!DHZjmxw)Zt~dpU-*xUmXfwuSvC*baPk8Zzwl!C znzN)Yw63E!X~te!kgyULcfb(ziLdvW{|kK<82dtbpU3@wEz-1Mj=7b9%B^?UNMn?;s3mqlj@*4jJ2Bm14YDzy89H8rJq+BROs=Q=yvHW#4c z*(t6Cl*Tqt{YoytaM=kVk7gH6y z(heicPZ?N81I{#(Sqm=?2NExH>(qKyq=x|WlL|;qD3MTY+7g zofE!Ylq1R~*uYC$3*L)xRXYqvHZKuHuGhBo0C(*P=V`AQD@BY}Q z-z^i#Y*U6vXmiX=D*$QL(uxN3RC_xf+)62p+>+`W_w4nn$`f9+8t|QUvt2De` zNR=Jck6jXiwS-PqirKL~+m#`H ztpsUaz@L1rJNMP+sr7e%A9<1_Z<^-K4*?VrrSaw+d`2@S>jY)oKxQW5>&c?MK9%5& zA(;+QjUP0^oOHAWXuLkIHUy0L8DVDtrs2Z9oc!eQYi?(9%JkO99PbPlfSFUg`EWhF zo`L|g2?)S%1gl;xCd|~eY}eEpj`;Wu4VMcifr7rdD2+T_K+B zus;n|<5;qjfW&D&yAu8IGKB7}5#|G?EG)fEI#sw*Ie)6;mOJu?h=?6?!Wm8cq=8!y zoETAkfp$tWOF6?^BLPxG;V!5EB`+j}7`zQbOj8nbT+-|ZXN%%H&!klGNLEEa8mT~> zrt_foLkJ-&OmO0%Rl~piEz~QO`+{ATPy+3SjIg13tl|^vRIz_$bAhzhL-3bElrFVt ze1EIIw(v@eZu3dq;IbcUpN!`2(g0H`kUnWK;PQPuA7Cg)boyDO`ryA~LOZ^>^8H^Y z8(Knjmu@Huh>|2A1xx~%1X`I9wha_$cwV})73c1R-jYijhin^i(%jQB39EP2%InYi zA`fNzdrT0POZp27vL|tlEj9+*)S-uG@I&nD#}4t=0gbyfqjJ`IO1IcG{lV}IYN1ef zrwXXx@-S1}%ELjn9nvh`)cdAqF?zo?TT;g6O#(&>(tANHR0ic5?E5KdWSyQ@9^Aab z37PO_x&9kA(!4*#>&NVJiXZlv%m~Xk5vW5o&M2|5F<5}1S$E>xkoe6a;nY20WSIEL zo{~Gh>6@q2y$g5hXkbtcw_0~3E%Kem9ZH}!F__C7Yv5p)YnO{H2X>Ffx#NCj51dt< zH;_c9PbZNBl`pg(Nj3t7Rd!Gaw4nAi4K$|*QUbbCcGrdRqlU+u>IZ*W#?No6S*f=R zqWUW7VDATt%!TqkXq0_JJ6&@lJ$N$wS6PHzS_=N9hEdlh3ii{88gz{++eBx{f?RL^ zrM_7prqyt~sf z7u<#KGr}GoPDmXs8juZqygOx+@6fcTsfXYKgVpAw+w z{Ei$#`K2uvAF*y(Q+hHgwC|_6q6q%L{5^Q>4I$FI6P`03q!3Tx4L?ANhWGKCE(Hlq z-%G6+40U~c=daN+l;S<9RBVWkw_%nON7-dpm0$G+O_$rJr38sf?+LXjW!L3ZBax4^ zVFl|Q>Rqk3#Lt`q*4vrd2G>n7s?u2+Ick2!*NPXAQd&*9j+ZU3l=dZ$^xc*F==>#$ zBZ5ZW1Sp%A$7$w_u*+bi=Fko{-m~NR!e@WFUb4JS3?yXS8MfNj?bfa?}d`s*RAmzx;$@$)XaJnd(9|=1Mn5$B{k9cp)t65 zxZchlkaF_0WL{Oc%{U3I3im7@?Vj4>zUv3EtY~4}F2=c$JLMivnH*72oEIkUr`KMX z@l{g79(y#UPUnhQBr_JOqHLTwXfRFp!+$@t6?&;azG?sV@(QI|UTDZyeae z6-y?Ol8hXCI(e?HTY?9c_v*i=il)m%Mp)Z-szwu)KIpa)hO^uqc|tGyEqy56amGso z&?Op%c8UVvgka)X4z?1wFgdT&fTbe0ze3mE{^9-bFYu!1BrQVAo3*-0JD|_hnlXVu z)l1hs0lCy%&rc;&xTdxT6G1694Fy5IclmBKAB_inwxrYu`?Ze9_Ed@qn5iVwbFs>e z>yIfvrMqr92WHcz0rMl(a>m>DBf93ASFbzRy*S0E!d^<2fI$oCPEf%^-EtED`ZyIq zOY(ZSs1x5&EzY2UIhlajN3IbzuE!zX_GCVJ-aCaL1;hTq4PA?m8czDb;(COFbliMe>50hckA^8a!OAS-ATLZ%-m{>WnMP ze%CLmVNCJ+;t?Bwvha_t1ezgKhdTI_HiQBTbv%)zOcShMz@E{o5g4!GP@7Q>yS#4qi#wf0O21dXEsp{)UwG zXn*j0l{9nt&uS`5Ti(nk<*ufa%K|^siqM11cFLqeeyp~)86He$oJM>pKCp*ig0XGx zIwth*pApq^d?ByN^8F z2;PK->QENaM`48B+lqfY_>v<(Gb(5pTYhtBksG9#A4T%io~|R<$w5d*^yhIlP1CMw zFRM(^;>{&DG7AQryj?tgbew23oQdZ+>VYFg3HQ|+g@)&et%yO>d3`JKZ5y#cDz?gl z{6mN0qhzvo#a)-<25Vt;BZf;8I_=V1!pp$8*7OSCI1ZznCpnAQJ4XviO)<q9!!ZUr=^kvK3oc=fj#FXS~ex*C; zN=CJwDg1;jC^)sQ^9}?Wuo;_2MC8ALQjI)`qHLhJE_7T{lifMq=otV$j|YDROlO4T z9>Xq2UM#UhFhwd-?;xu6$_diRbg`#U08KC9HUDLTUn%=^S9arKNTnhI+*8B>1*kq? zEBQenUF%a5@RydqMXAGz7Luq%xynsRt(zO}$rVkl)pBZdkXu`*PZ|1=U{XFgquER@ z&?c9#v_-qk-)sF#Zw_s0Gmp>#4~A-YpWCSq4lhVS;Bm9G2U>~`RcS-c(^ihML_|u+ zQYrQ%w`xgbb9~%#H8aVnD($R5kmgjW$CgH81w@Ym)%VO3xDfc5`2$|%`j%2sb?L)9 zxIQZ*EYg3*fKd@Cu_NB3hfsNgz>FX`0U#eHhwF<+gcE7J!e3%(WISdlvr1ezHH1 zul2|taFa`FDum61h-#hIgt@KZfyz||5haf0b}v;E16IwWe_bZ+lV}6_A8BSD^c*M_ zw6{f)^X1U;6F9)@t7P_*v%{3M5G-iloF7U#xY4@uJ?18{DA`3nS}IR3tslcol8OeT zI!YjDvG5ba2&2-#SfmcR1!?s$-YXoSHo_+DLG^tS0Wu6Nzca!@&zicdMEG-aV+l0b9SMQ|3mI7P*+e;_wAdAqcP|L^cf>%*|An1Y9m_2qvszDt& zcb?Zz^k`^+p2pZlXg=|PJR?kAe@pM1oojwHZo&y05{b zS2y^{X9zNk>!p)K3&^Ix)AiVKO23|zF>-C?=TKGV4ahcxA>^e7$`>Sh4(!wOfmeXz zVIRK`TGW}9%Oo%*+wr63YXwY z;r*B}A~s2b0L$eKB&G)2x4L2w8=2I<^v*JK{)3H6gh}WxW^5vc1Q}n|0ArphI+pU7 z{3^=u#KEedY*Q_Lo;DPb30?u%Mwqi=N1o;_Q24w%GU<$6b3QDt`rjnq$Fc>&=%75^YQ-U9Yg?_+tua)m8pz<^eO7n9P=r8%F4xF;t< zt*$1(gPtJYc!*f(WePG&X@ngDHre{~N3!c#Vi#A@mie3M89W?0MlGK+*OX8-Gvdad z=|&+(%X;wU4JnncswbVMKbZJHjOoBzJlsQ~4P0q%1n!In)v8}>l-iAW6>_ppT_2jQ zeQ;mPShN1=(@)CvVns@rr4k)@nS=Ll122J@kfn8>;;z7)9%Mh%q-a$YT9BSK;F!Iw z^sm6Pjy7dtG$t-X)mT{-4HhYY6;+xuM%Z_H>_m|1pRwIM)iP@_oFV-(7>@h-L(th5 zoF2SzP_}X%Cf+_~CYUYevqY?|TX#S3D5G@q=AR-b%+!l$DkA(X8_1+c0VKBHfE-lH zHAdL&77?_6o}<5LgcbYaMPW}-4X4Br&m+_R2%B@$-`ONq%k^!;lm;X0;DUhIqD7Yz z$k`#5@D*F!x?;5UM+o23{-y9 zAM4BkdJ?sAMbe-^$nD_ZxavZ9DHxroG2s?y|0>2Sxv{bvLgJOc3LCPlD73wC`1dZ1 zM{(M_2qO$dqI7{w-uwrj2k%HE#>27H8n#eII?wT3H1MH_L8>l)dab&_u+ycvt+%6b zhEj^Vk6+mIPER|c|8Pm$`AD0TD`XW#rqtOy(0@`xE(1(VsV1prD6v{TP4bFUJdky}=eBU7Zj`Etro zRsj+#;(fX}-FVhgJPXnL^^g{>$3)Az1FfEWY{g8gYwN*bdz-5~(e9Fr7 zw{orz@LJzEH|C*h=;rF0sa zUk8UXd^Yc^S&+r0kB11llV>TPGPL$esY*J(+@qulEJzzZamRG9m+jcrB1__f*Lc1p zt7>vN1UvKOpQsY(!DbQR2NV}3Hgq~Ug=VKKD8%cyYY^RKgq5{`1C+}E7Sf|03WT*v z;4NT0N(BoBcC%%7@6YW0W`cQzHvq2Ljhm@4DZ#77)*_MYUsCugk-8EW7w>)Oh zft2PX(E_^=_8Kh2t339(tbGN9)NLnb#p_M{m+-de^`nB`;hb zK_-qpdOK>)EzJ{I4f|FV(_#~`rFC?7Q8NUpjIdWu zHLZqK9hB(59zyc{s+e|>3yx~eeAE; zfHyg%-Ngo1VS=u-Y|FBJZTr*0MZQ`1Ma#kNOPrEYinpMP4<@%D`&Tztuis5XXu>9a?$Li49wNgAa%q#wDjlkT0^Zt^=Sh_gd{Vy9Oe6SH0f@ZWq(oZD}JKKWqBf30PrzjfQHrkX*XDUlH}8# z@_9o~U0axKeOT!2sW$W4JaHR>O(e5ICq=A24bLzA3+7m$llJn$$xtl-{OtJrk0gS} z-<7*I+>A}4Fs;hfv}z*A)=(kBbtI}nN%FK~4K$PH_ufX>Bq{e+H%v%0o6b49kVT|4 zXtt@VjIiw2Mwkt$q%3^IXWy6X=ulMsNcfc-LDaIsZCCaVPv1e%>MZ)hDUBTD z$G@dtC;=>T`P)s7yVzC3!)aq9%BFc*Yz8BGv@C)#BUO4x!hL3gAiIY`c>p;8oRE)@ z6>n?j_n9RYu6^&;oOpg~nVO-#Edyw?UbBj?fT)U8hR+=!QUYFbr}oQH>Za2wu0*wB zsf_VF@@#wx=dg`DJTEZ%{FLGd9}>8+C#5WkjjVh}*uO!s;ns(NB*hQx4H2p;{2^`I z*6P{<55{&aJQDda$F*$W%9;vh8#Mh; z{V7ff?TdRntGJjF*t5i(J~4Fe@zl9{LuZ#QPv~*;b)@f1JPmxNT%1r0#d_8$l0uC?i+qjS$iz(Y>lRung~1-A3P^lPmt5 z=<;?|V%L(2WzEe+23L`ZInlI^Ezk4INY^q*C?QcU*t&I}w9wN1{yQfN7gbTB=MP22 z=tmBNaa}GkEx4f}88SpOqd~^iG5a#s)!Y!Ztx0(Py0s^=@b>ni^r&lK|GNbjcjq!S zDWa%SUaJE#CG<@yo<~=+J%8`W$}b}k@!5Z`v| zW)ZyJNf2Owb#)?6uH>5!GT%cMneyRbTyQwL8se>59PzDu%{d1iMhgW$Y}@MEj5Z)?t*emoHwtRPJ%f zDb<~IXm!V1Q7e?8O8f|h<0JEP;lVAY2ItL3Zs@L1avh0&qx7SS`OD^g1nKcTnvXwf zYIS>@Gi8t$WF=S6hy+E7qXP8zl}dy6%9_$lNpmAQutWKTzq96c;_J!L5)b#g8|=8( zDQLA>*}N?w6~Zo&V3IOaMdZa9wz_V$&!pvv^g3j4htj89bn~1F$j(iCo}KbZo~r~( zvL01;za}9o^s*hzJhT|V_rIzSH>)Ce+;!yGbmcTp-y6DqdT{FUA88XI;z)2H13)$E z*O7am*>%VWOIEaK4>#vif|SfjF?PW1$^nLobE>;}yy*q?03t84_KB9&+rhG<_V-a^ z+K35;2vlj}9^tuKo%;p-y_MZPDL!Iv*~X%7X2p|;tICqgcmrCNJj#y(Xaj(?3;{p1 z)#;_mGNm%r#56BAx2Rv9F0HXVZCDb9iToU^ArXtc@=1&-!(*~=VdhH)!k+aZYH&$et)#*hlJD>3?lnI@Uh)5dROXb%G@I=a6w z-CwnqORIRI+v}3=eECPIUvygJ6b~-XALgMo8_kK>Zha^Zr&*I~RoY7wgz<4FUhgy4 zOo@ek*zh?-_TMd*`9!TqM?2PmK(bpj^J!>>Jm@%(J8+m{6j_VcfV*w<;PZa$x##PH zw`;=4?Yk^U6!ta$?ooQR3Seld8lrG)om z`d#q&V*p%TU4%Tu2~pmX6b;nvcDtVX)FzC9$sP!^@Tu_~5s{EslNJ$Rn_kzKl z#o?koMp$mK5d4c|4r+LJHB-LU0X(ze2bvq~&K|I)rbD(fz};}X7{)#4!K_5e_%5b=Rlu^0snl z@eq0zCtk3>zIbjrZH+9#V5eyunZ)XH@^B9TNFjl^Ld9D2<$+H`l;4)hRKw@W#F2oO zB#j>m9~^yfA=9;AYuBzRR)AUHz$qgvKe3aK^Q0Nv7M=#5*0^Ix(nebS_eD82nw}|{ zWg%LzX_!;Op`6haib!U@lRuZQclWrP#P0v)WrO&=bHRy~K~22+i?|BI?gs6U5)rIV z{eV?!83_DGdCy3So_<(KCFQ)}NnQ+3xb5~__AjStYsaZ8QJBJM$UXtKzyaF=kX1<9 zz{4rO2qyFIzD(R&ci3{@pcv*n_DxmtE0e}=`SO7Nufhw#n5#Lm6eX#?E1Oy%XNWy1{XW5QiJ`fKpX+rszX0(Vs|6eK0}C> zyW#AZ5eUp67vSOsPc74bW@u?qn){T6^_fx$OS+(HT7UYxNB(9*R$zrLEpsA3H(~%N($Rw1l6>qJ;wQJ; zL_ZUzJN=aFF0m&0%vr&5O@TxH?%)Z_(E_OxB2UynJENIqT6J|&?(|SYUrt&E*1Uh8 zT0>L0m&Zscq2`g?wt_uw48Y#U8m=an-6GMa?7(zQ!Pn4&s^9-Cx897P%^qlycC$6v z`t~K&_J)%{#UyaG0Y_p;G-P3e6#LMClpzjtetu(CeG(>@Rx3*0Nc@kgmTcFz6f4QC zS`2;)8%Qd0A(H7z_(@=u8!nLfP>4b+=6Dv$XjJ_6Gbzgg>o&clW_Spq(}3#2;G~u< za1EuK)Xempn%uXpnH8d!>F1S>9@Tm{^V{@FM*z#(Y+p}es=o;8h7e{@T$kRXTlYJ~ zZ^w}*V#>rBoEpvsFN2AfpLnN^5qa@i7AVnCYl$u)3o#x>7)x(e;wt3|g1A&sQGauz zMbWisx*<+q$8Hk9Pi>^)Q5%sDpVQT}Gb0MJP>T!&v-L>D#sN2+KWlM^8|n~0##ORu z1Aq1S`Z46j@=kj@Zl}E=au$)u9u@d=@+97f^F~Alu(S*djVxJvTt?iGI+lClvUZ}Gk z&@zeZalXt`UJ;O;HtPAz`M)oO@2bS@KB?V*q}jpk*PPsxN>UAP>UrZkml>%ozm7iK z=@McW#2&D3(Hx?SaTRu-F`4s@?y+z)x|$39Xraw1impg5Dpi zy`!3e7HR1XLP`Ee5d`Lz>dSo?Vh=$tR(EP8)PM zBE8q_wWiHCDzg5;;PHM~tUd8@uSSNn#Pq=fvQA@GpO_VX3f=TF6_ zyRbEfA!p0=5iP)6u%3m-0kOxqVEJg-oeoxlt&2rM-3wKGV%pv71>x~^$vg3=Ne-f+ zr92dWgs_j72r)rWbWr5WrX53gKQ5RjPN`zKb=4Bskp;(<@>8w&`F&H0Y(naLeNvAK?zkK8bA-Qu zB?|&O_PM+9f|g7%J6g$qI+X{7C$(x>c)A** zum1>asnB9%RKI!GF%osE8b4%n!N!nrhP?oV1%B5=RU|R`n3BOxxu_YhM)_!I;X8&E zPcEcm`ghl`9}zcD+qW?svP~FM??n*z5)mV5$`k5$axg4pToA507qVdXTyGoKEKFTL za^$-1Sl0r|`^HsOU0ZnF@Eq^aiB2rR++#R1Cc5P(8nphEp}%ZO-pz|8Tw7tE7xHoZJqBSk>16D zBoO$%Fi*FO;uW+HeoDx5tqDB&gzeU4u|+$atZH397NcEZsk{DTqrLv&%o8+4&z|9i{# zrp)M`q|Xp7EutL3N#`i{faMFTGxUwIb$q0~^-7VmIO_C=5yJWb$)MpxXDGHJ!h2Ur z65n8c^ciqk&u#6qExRp=i9UXdcUXaT+Cq0IM%tC+21f^vjg16lJLgOH$Oy3%f7 zQv}od5>$9iB}2)s11kn%7neNH$G6uM+=%dSPSF?bhJZM#A1nahZFO-g_(fHWyC0=( zj2zdfJ|l>7iE$zYl84eI?kZU znEH`2cjsmabyxX>mfKX^S182x*UqH*^(Zv~gv6AonmhjPHQZ*4#Eo`*Xm!_c<=}Gg z{RgSOT8pg$rLViXUMn}ew0PwH!`;ka?*jxftqe>`60W1vLC&?mXK+KvXHjTlO*T+1wI2tSPgt^*|1Gz@m2B~xnK2ak5N5|8aWb*mvTENdGZBa z1QOtDg7Jq`M%XcKrD;nauv~le%{cnzTX^gyv|-;fwl*!Y30z>_r_f1|p+0oj=5Q+N zr~(>X=C+g7`nH)ybCVw#E=4CPxunGG^eJi=a9>CD?1#oTJO=pXI9{|_UTKMXpd~km z{Whesr)HWTMChy1nek^QYdUI1uBgE|J!Ni-CJ4+v4*6N($1qw)UKMT|A1N7)o9isL zFv3n9$q18=LxBWPXs=L1IhZYKo*7_P>oiumlf1GkR~+VT)=aL92lB;gSz`LWDhJ(7Ei|2~rSXj7*n!m4cG#Bf$6tL!bgFQqU%+@WwIo0PvG_n9xV zD#k+3xe`A1?a4@o`Scjht^Oml#~w5BXCm)XLJg=&0rV`~uTnwtEn<#&#jvcoCP?#D z)kxPzB_{1k(XE~fFyJ(|wO|K1{w#^&&m0nPt^;&~y9OD{*})+3*JdSZ9Uh;X>Nq=c zOFzwTW{a}K_U)<-qG*E6HAlDnpbcN3O-E`OFa)Ee+%DQy-Dyeu^@jTES6T)xPbOr< z>0k6b80x0XW=n&?*D>Z0B47hG3`YR&t?B7tZt6~0d&TmzV}!u-tTX$OlWJw6)-ha5 z6&kREvi>>{GFECj6dF?MOkK3#Y^@m9E2d(mtk~X&#knxzwZ|65@2;a|Wk`ws` zx2FD;)ymtpZ7HhGw)PDz_U-8bChOcTiQQ7{JLwj>r05N3eF@#);BObWoedWQ>*7l9 zoT;uptKs&fec!hI&KzKsBWH+K1$FCRLQxqB_~0&}R7dH@Vx>GU+(SeY$!GEXJG-U+ zUd{#A>4cRhbmL&F)|ShY=DlxOB8^_D#Kx20kpLYp1-psIe5YSLZ-*RQIjy{(R5>12 z?${V#NGT*C63ee~3#tho#j(f=hrE!fuIoL;zE!dtxs5FwY;5T`HSVP6qxKA&R^~uT zoddU9w-cZ=pbNsCwvb~yH*T9?!!zQn)ypk(1!%<4NFuhnMQe{9FjzxCp%2Uz9(UWm zOzF$n5*dDE^KTp8UHZ4>fLw3+L|#jY)@ymt`UkKK@j@VF;LwrFy9L1nXqxTXkf5k) z-}jk>;KjA95sp}}iJ<&TYf{Z4NhAG~ypVPvrOo5$I`L**oji#1b4*gRic$0Q4h^sT zGSg-ttqofcutZ7T-_g}8Q#ujwgE!x)xg}6Ydla-rFIT9+7p#FhpCBxV=`%fFE4H|o ziylfyTX7fL#H)ou^4XiJ>}w&TWHPtX zsv}Qx*nRk3f~&N#^|dwy!b%fx1@_`*H+G=Gr-ra(z#}(>Kj`QpGQ!T$^jhpgh?W40 zRh1_riA+?|gJ&Mu4~trtLsMJ049(C(araVQv{c6w>M1>T_)7OG)2GjKz}rLoP$h1S z+T+Sc$hIg4N|gqVtE=9Xq36$1=Bp3+uPGL`EqVK8+sn(FD0^-0S|J0#!i8Bx0cBVq zK_C@gDa}w!+bICq58U=V31*25d-bLO4M3(VI7n8V0IQ`m0@c>;4088bmsEkT?m{n# zCeqO9(|8N69Dob8JQPpO!vTq*8O?L*i30bBB)aa`)gGObn>;$%@o8kLE|U)O9`^?x z;?wU!*a{Z1JH8k7C_z@(#OpeIKV=u`kB1g{KLQ zPA9EBIX2w}@#2y2O!Ooa8o(0sk8hr48k|c96y$;_{VRWD#bjGr+ou-Y6**Q6sf181 znXe+VYvVO+Larpj5iYb0P;vHu*i2!~xDYe@5lA6mFVz`g2)33sft*eF`Zp4`mdbcf z3f9l~>g^AnV^v<(u`hntm3q|xrz?Rw9mu<{LA-jsOcgywakvprI->Dtctgmk6%(yx zjp()2Ugdyet}GJUOxsqfRuwoSA8ej3dy-}-pb%O9Q+ zFBFYnhiK`-(s?;+RDd?O;t9i#6R)Nr(XW%d(%h|ALvsT$I5@5Rsk}ZE?W?p;L_Of< z4Qv#qp;DhZsaHONdG~=ht)aiz+ksJStNWv+x zCm&EX>F)+_O}MnZlQq-PR||h@OB?@CR~1)T!`MD4en+^QA9Y%u3mJM!M~9i0oZ^E8 zvRo9Tn(n$)B}<&kX}(j>|KOc{q;@7n;10!VkrQj|89J5|0_mxv%IsNM3Q7|^(oZb1 z-3w{|_STLHsX1%v*}w+3EJYWm*tLpiek!m~NER5};$*gsLQEO@ZaEHMhk0QfiQ&CZUzz z#@d)ydt1QRR&|G#^mt`h-N!jnCu!SVxuwlBA@d@mq_LI!mCrz?*UX^ZH z|HnDU&;gQTC)@yE-1$kC0~QJ=dw3$8%wvR%F7tOCq8z-fxi0@T%EaWF!{*_;2bB&9 zc)G#skF2R@3X7SZQhKUn45;p6_Z$4Z(@@gbvaq(&M`K!#V#0{qod1F9Jh4r4rLwup zp`qoRL!5$RUXISvRqa2*l*D&KbK5JN@IK<^ZH&K5G?)kcJRY7+cyYaXh3YjjTh6S-`ADDGs5-`?J!smQhw20 z`<(D(zSzC`{ZK42DQ3mDOTI52Kobi0jr@|oxvE)3_6lj}(_x$tX8oiq@}Og{COHR% zzcJQWuMnne^o~HdoRaz4*51NDp!U~(fmG{HT|I@xGa3(>h});o?u_Ff{uNF&oEji^ zJbK5YJ8gcG=uskQ2+va{6wA1MkjlA^-l7*usT$szph9!_<-gB zvKRO%zS$+k=6u?E|Hx{y==qJuF*g#c67wUS=YzqkRs1yH?W`5$C)wIKkCzfehR5q0 z)Z{>%1>D@s?%E>-GO}^uX#hE>RTt&qSX&pSsz-$`O=A z%P>tP(n|Nu7EzVZ%sW?z8)PtXwR2!0;S0%~85te$%Rcc*gtlog9nXE5;m};N@|<^g zUZde0x2LP>E*d)n6zfqR$q$|@_gbDMG-5E#-8Q9_S_>cPM{MNw%873DTZ|DF7h2#k z1F=z)$m!(3PVFIU#0F5*B?(Fc47RzwKI1h>#7fmc+Pj-C+CL`|!o%@^T|_ub-*Qf7gf&AU(ni>a z0E3xrUUUMs#A2(@X6Q8$U*8n*PubRg%Kp_Y z(32kVx!)~4n^wbI`qKZOGPi%qK0y0_LEo=0Sb)J+oK1$_34tP{o+YG0hfBYnJDQRj zcp8sS_@~C9q}1r>BtqiXg0K0nsb@m+*JHDPt__Sm|Fy=!*wnArd@cS@o6*VsrxK%& zdxac_PW|U*|GD63G9C{hu~foY)akfLsL%v<6qXFbL!TJf53oR3^#8-&dxtf#wSA*e zw_?YJC~gG>MM0|c76B0u5s(s!5NXm09ioufQIOuGNKn9l0V2|r77LNyn}UJ@NhkuE z0da5$XTje3Jo|m0^L^+2uIpUqkHc`yWM<8pHEZ3o?y~N6^IIrClt0RAsVLM&uiv@B z)p9W!?tY$s*J!hyzl*z{i|2BY;Qof?+?x6pdVf(vd8vriV&L$v7Vr4C78`i^x!^o~ z!F}GPoSI&Kp1&Fa8foYA`{KNlum0}~O&?Fqe_eR`{p;eaoxAVvJLjDI0)Ag;dAOhY zeF5nBuc9^V-JJd=#9vfGo!8dT1hoM;At=;&2LS;GoWI>k+^40>+ZLlZW!c#^8D}Y8v`8e{ct{~Z2fGPTCiM6 zLnlMuU%g`Kd?_>dU8*+ftmCD>iuo_EH32Xr|LL{H_U?bB8~WIvv{))(dD~|1gY&{T zJA#i3dZ>%1(=YOEUAl1|)JX&9=ZEuf$9X#a{mABDcb2N~Z|PfprJr|ka{l)ln||E@ zb^D!viC5N4{#A#+p-5K$`d#LuBg^-;{{2$$gTDGV_ib5DTjI|H%Q^S{^Lh=me7#}$ z2o9^3dno{IS=u)K%_N}1F4tgoIaLQGap@Ac;|`7hTm@{a{!V$Aobo$GdO6(^9Dn7J zT~1l*`G2P@m-z!+qn0>p@jq^B0HDnO8~2uJv3{xSUwpXwBxoks|EAl4rL$#7n7{az zZ|QQ4Iyn4Q`=v|NYV*H#kmiE&K-r?4fTRH6JHP3+oa^ty->kHB_4~PhzyBW}`j?PE zdHTCA$+9K6y3P*g@9E(CUwG8sZ|T*`qIjue|L#2?@xSywl*aE~x>Oaw)4x06^7T4j zcNcp{Uo-c!OKi02AMaVad=Dh=06W+6h3=_;dl#3J56<7~A4%(QJ}yo!za^xW@lxpq z%W0sDEw=uCIBiEyM;}{1M+cCAGQoTO67U=U%Dj}abVt|2NdWx(zuo>d{yy&iP!r3< z|7VK6uhTzO$vRtiKNDN0f8^R~@96Gs;uz$o>#Jj;fA*KKTK_BgADK5e<9sfwySq63 zq7?UEjo0~=3|h|R;CRW_e_42L2ypcA`w!X8ekK1i`zAXlO`JQ<=ii9C{jc&hw13|K zkD$)sJeO#_!4KyJl(4Vkze}f$?m&$Fx75vc%VO`prEdbC*!jO^U*^1{OD_Ui7IbIy z*X8rSxNQ6KIl!@6&b0(C^;d^pwS2vlAEmye7ngV`>S1IaUK#uwq6oa;*t_56?Bl7t-YJ0pMaeszyMJ_G+jYE zB;ewpdI%${FRAaP>FDgDbJ@qy`0_au`^#?jiVla+Y62=jNfR|4lt$r6VImb3V|sUA{adaHoBzM+67&c{(eR$NxhUQ$X%KweQ?N>)lnLF%}G zw4~Gt3CR-@QYXZuq?IHUm84_^{@xCOxA{0+QaXR?^xy9SSE`5pZd71kpm^X3ah#8n zgcN|_mXMT|kd_t$ImCSNo_@ALVxGQ&ze+ge=xguevW(v(uv8+zCi3@FJp^j{R}(zE z^!0xi{2!_1;jz@N<=no0S^?nU{}pY0m!Lc(&O7?z{C(^lwE`SH{RDqK?qL7>SuX%) zvfKa%dkIH(M-PzA7knG3->>p=#`)oVopD~jANfb+e&1gHpub)KKF@#7{_D#xWdsdY zI)$_MUwWtRDb+&?3X;+?l5#S#@>0^L)TOkvw4_dHDJV*5Xq-AND<`e^>ls~7Uq4$< zd&i|`Kq=xbE)Gfx^7gX!a&}T;wzjgiVlvVS@?v&&mn6mPPh66fQk1(StKeY&>-oR1 zWo+I5XYY2fSGt7r@vsGCck!@wa+GlOa&$T*@Vos=%P=YWI0r}7LnoGBrKIWO2taE9 z4i!iOeN0A7QdUgrgo%`b(g`UgDMe99(Agya$_k!yxrF~uS!E=Zq)+@KE9l@30Nd(+ zmwAa#mT9cx;tSxg@PGGYV@L15&)i)Emiv*Ct^E?JnCc;4+W<$0Lw_f_{2x>KuR;R> z64rlh_CMP4S2kbVCBHyhA4hd3&_cr{^BaP0K6MeLxCQK7%+>}88IA>fq7JNK>CLgnM?r!!c~4)dQMSgc&Eh+|L8Vh) zrS8*Fvx%^3e>C)fKLr&{Jhq4uSKqIWv~_SH^>ph+lx8PP0?%i%SzrzL$f!k>i8qGW zHp6iO0L?kb3$Vg{CRixG`%lxs8C7)hA_{gzixZ(yu>QfUHc#LJw*iyLv5aaYA@fS; z1*88_iM;lp8Ts%V%7aNm6Y#^#C^+GQDRuq;2`rd_l<+5^;Tb>Td}de$CzK4K7g1u`j8;y_etu5Q zPytv5VGLsOct~B#1hAtb{Zn$(v#=cbKCzh=VNlUa48?XW# z7p?5-Q2un8=Or>74qlVE<~veJyBHeJDQuc0sM=Lxi#dFQ<6{MF;&?-BC$?rowa*Lo z?F#(kzJZVXMrJ0(vW|-59Ib9eN}l}C791%u+uAhULWN-i1|}Y-!pP-l6HM_Gy^c@v zO8L~pX@5ORMNpe*xCZ;7S5*Us=Mq?I=GGvT(ig>=9-%SinR6_j$ZN3wV*=KV+wltC zq4V$)tHZ^wZXH`2bY$P{LXK&!-4LI`!&6kMQH0(@{ zCKDdW(``V9QoIXxl0Uo;<{F{3(CXjGa5ssaXtB%(D}@JMhICyH7q=@zSdCMjC$rZJ zd;Xv_6GhP~MAiscvWQ^v40;>`^TJjP4?&}=7hL2xj#XWg;+~KEpU8L%6*R2>!24K) zy&in4Pb4U@`W(PIzrz+DkzmP>L?x&^@Ml)pbiCI4X&iE>*~MFUjjxmF1sNaiH3s+T zSPx>04(N28lZ&VpDc7g4Q%gC0>ID-vI*b!_jtNf<4@&iSOLQ`givFO`9St$EH7*mXwyhh~4wJf;6#eTiKRTdDV3y-wj%Da2*!@ zF*gz#PgR*_^4GOCO32`GXYVxUeZ;#?8&{^Z$nxMXMPx@@m+;9LqB?>$gJrPNnnNLD zj`t0KVV`yn84uxQ|I}x5igMn$8aQ->JKnB8=rD97Fd$Y_Z1s)vm+h#c9YoeN2@10$ zr6j475WTFi6Z)fCOiIPt-ES^$5YmdSyE{;fK5iNd$m2rKo@+_cl<#zIfSb(0jeG!EQt9GPa2D>+;2@5t|egM{#M+V&% zQTz3|PTum|lAxvWp`qzXBrzU099DIL<4xoE03OG10K9&6D!czevVWD>sd8F^zXHAV zq36xcu1_1bCiKUqna+I37u6OD7`dDmF_yd*bAJr$ZaPwJfK0Nn$(8T(IhL+`@dqv- zZS4M46#S9d8jQ5Y%uGQZY}|X@sQek`@{LZOE64o@GOoMy@?7ZdOXuRjmoYI+YBc&N zQsvEzYT}lD4}(veb4`5DzVKZ0Z#wz;bcaN3yVXx_REr>BEuJ*ML1~j4!0Sf?`iM#`X zrA!th{Bz0`+AOHCrxfv!9&K^ zcmDLicPkhEyXBF`oDLgCYn%|{t`=GFVhgjJVpQe|@Zt4|mU)-4B;=uA55bWwmoc&R zq5DfjI_oU)%1&xc>|yl-dnoUvFm}|VNEo5k<1+e3kNLW?Ml?=;6pk39kPHxc7#iG%S3Q%HXx>S4cIX`fi< zfG$O5r^cm3f#`F0g`#sPA{%G3y)m^(XlNcV-agU0c~i8bm2obUssPtE{J+phrvjNm$smGJI|v{oOR|i58%79lDiYm*6Kp(wQ^=4ywxg-04Yjse zSNJI%Yt2z7w!R{=gj5#bIam|cg>zv&21(GI<3#ty|LGmx)h$>Y*{7SCkdYEFQtYPP|3i+fIfDlFc-X4g&|iCj@XEgM!y zp(z%wC&52}ULL7Mh671cDusa~xJI-B-pxn?9bY+^ZEgKQ^NQ;huAGCFxHF~;*|(0kLg~Er!Gv zdt%F3Knq3KxY5R^Q-;()Z2GwFd(WQA&qreL-a>sgG`n! zR`Ln!H(7gLP}cDd?yuV=woQ4{=9Z++06VXdE*Hz)7$R&&OFvc;K00Cg;J}QEF35YWL8$kJ3+7)&ICIg=rsz!idmU z5?pTp*VB~b5`#&w;|N;Fxdxr8!g_Myqvj}u`}#g-W+m1V<7#v=gGXp6Z<%)ppq`4r zR8p9OZ{@)JP3XkI#FXZYBg2gY_U%(t@x19T7I(rNf~NYz4UO8`a{C8)>=se+fIzc@ zFc1bUIF-=>b#@fPfYGH?S}44`t7Knzzm>8M1~2?P#j3>gl=Xbq_X3f5QI1b1#}|lu zO^$aYq|+tS%*`%>B3v}Bq$yYC6JP^F)3(fesvVA z&NPr!-(CUDG3d9mWs)o%DQ&O6@>Ho6X6@%u(RgC>2E?>|RNYn^PkYELG{mz*muG@|$nRm_NWRBO#?+}!d*fSCK_>tIg!w2H4 z_VNSnRc-B>$#^xOMknV7UmEok!)N;s!|!1_9Aa!6_^QZFqWZ48v1PSn{e86hXg#Tz?U zwc_-8#Tv^lm@b?=Db};+{JYa)J+kx9YEV&~Yd&qz&pj7U$AU2?lx~PW$#EpM@ETkh zT|`CjLY57xJSVXh#otjM*$Y&C9SzYEZwv%_prR2v#S_gsw1`r2grW+nFRFQUn@tLj z?6tE>+C9Ud?d08|T4)AFQ3?kol5IiVULavO(YUggqf`*d*37vT#bCu#1Tqcutwg#6;=G>2?kG z{GqLLMK{T0XJ^NJq2@SL@FB>oWHO8v-`eute-jRV^+2Sx{;fLfCX9@5rzK)3n0Bet zx%2Yf!(|6}hOH^*X6V@a!#sp`j@GU&^l=*N<9333Fu^<=vTE8sDrhty=zM+mQ*4y| z-tr>}{iAejM>A?v3d7__7|pbVUXHII$IFxXKED@QJNqC&p*`sCfg1C;z4vE_4!?IB zdPjkYNE@k%7oBVqQVzL1k864c-!KXZoVZYh%S#PqwI(ijV|vlhmx(CZH-MZmuwgo8 z=lv<+3InP2FD~2b&*wchmf!!pOH6d&KIP{s%k748pmqC!?jyy=Spye<9>-@>Lu_j% zzLQ;R82S3Ab?3*)sg~s6nxiL9nO+TZ-Cq46DpCZw$>v263dfhLZnxRIBbn)ok8F4+ z(obh@GN&e+Y+O6L9wW%qrCSj1qgfMJC|PMXue1o;~X>az;mP$5)Z{6d64g{X4EOWMSOm@$hTHph|lPoyMF}h&Dl|VxsMTmwpIju z<;gk2xj=9u*m5jJ=Ud8{ANdA`jd}$Po(yIWQ8&D4NA_1aBNXGCXg zjJ+~MZJUM>VMf41#&eoDjddhA6z|U%lo{gsop!q60;c1v!;Hu{T9C=#Ab-KF8 z=?ZmDEXQ=sTOpx?VTX@|p(vY8M?ll4Digr<0}O#pBsAWRt+(Y$gORgRdb0OE=>q{1 zt#?J#MY;qchuuwo#$5s2+Y9yz&_Df0xQ}q0@l-bLOnDX5a@Q$OoJP(qtXwzF6TmqB zCtgzMM%{t?ls6 z;mS$~b6@sKD$#`Wp)Y(>cIhqk_ojz7qW0NQ`&;23s$_=NG-HsFKxKtAe9DjPq$t*}p{;?`IgEfohhKc5j(=J-ORkl0!lXrb6I*nXcFQw-hZZaJ)JLHaJ*!( zaS@eyGxtZUrS~Au88k~tj3(&UdWhH}wuowbp}&EBcramhuT%Nm=i@sDH{Br=&g*PM z_pIr8I8SJO6ZVAIvUY4R*0MH%#yTblS{|12ktmTLob0G%b3tK#g!lH?0#_#mGhZvR zc0=#?Qo3o0swl_1x|id%ujz6tLw}@~ma5&ldpo{w7_;F(5zfK#lhyGJdk=aHsHucW zt)(>b1fh}72Rm?R*3m_j@MQ3Zp0WcbBy$HyNU10)C-uZ1=~U`?`kyXHza14Ql*2Pr z_>~qi0IEVU5W1ijm}>z$+2HD)mkjUeXrhom?8_vdAVr=cPAP_c{TTR=j*YUk220A0 zMaV4J`ASvZX-|fIq$MoV$vlK^g5xL+x_X1-%gesh-!%8^WN-O7Fu+dla!5Ift7hhRr+F;m$FEL?)W)#x+&?ilWr+4VCy#mv?19yR1n^FOd$ zsABT|+_36r-Nm3^B@68aidGZz&-A=M*T7MAj++whdSyPm%wj zIl-kQqLuMwUhdg|i#2fNwB0IyuVXPH&9}PBB;wUrSaldu+Ky&zNn!&vM1a`Sh80~1 zlr@_2j05!N-5TfiQ9qRa>LUOk>4(%pBL zJ8+w)dg;S`e3NHQ7Yu;ZJ^GGt(wx`=td5q`Z{Te&Ps=RuBZ0V!+eX`6`;##SjxvX` z=Hq{8E~J?*wlCSa!W@0>`c`DsBI*Qj>dt-2r;#6(v}~V0Lq~CN?JLddL2Qz{Y5ahG z{)E~^w;+3n%H&S3Twqa~)=#!qE~1Ex2w}aBU}})z##5XW5$#UT`%g~y#^q+pMhS@2 z4MNd@VS%umNHJDl-K?{Iia2VELo@SCX;eL=FOV}LHjQ+LJyy~$EuoI@o>vQfte)>W z*F0wK0t8$%Z>NFG%^f>r%qUWi-|*O-z~2VzT{aN>D?4Vn!s!qBgBMM>;3c^e_WLGIo}+sEkhnVcQKv?5J{JQQLZT29Uqc zW??cQx785!ROkI#*3(hOUZN`P_DXrtOj8Uk5_eK=1?bX?jVi`$RPRjhBXlM`fGrrdWWmtE=WDgg-9yv<@G(jy|U%d zUCTU;gED(4+j{&{!v~M!KNdf5YSv>IC=(1}`Q}B`r)g=oB&APJyTw&Hw-i6#TVN64 zvX|#8-GUtl1hclqAeBXB-bWuCp+6Q`I0b~jo<&rT7II?|_4526NBD>c(hs4LA%293 zVPKJwGG;9p`!nR3@^LB&kMLycsxHrcR$W#56lca5;)SkKx_cw9;$FO)QJ{!I@=Pa$ zIgO0igys?~I5r$_f`)V7gD+w(dCeoumtFkv?eTdO?jD{npZ#YwG6Lx~`$qUraInPI zYNB{03^dHEC8fj&MP8;tm+YBxMQs`b?;FXjJNm92kG=oiamUN1_50i}4^h(%Mxv0< z_lk%OwFZquxb8FT=P>_zO!v`i_bN$zy!)735RIu=;LUX3hj91L-2|i zutzYCRo=pnY)ER7Gwb_gwQtXty!cwl9d8{2lG87CE61Jp#uUN!5I1lGbG)gVVC-=m za2Z?+b5lNAyiQEnhwrpWQMDX6Y$L@r!(;I}^0v(zo}k)vG|<{&{t`_FUaj3yXZ_MLu&Sdr}P;SY|F# zpZFd)4{OwXI}ess-{yMX)5G^jfN-xte*ZUTwh?aMn=x^w51Lf$@ja;7)2eemtKcndQ{t&Qnt+%&_gd|MAJd7eLky@>sm3gEO#`quXdQrqKj_V#_|x*$FVF8iW!# zXRDwoDrNixK5Se<{LzQL1+1w#J@b|Fo{z$(Z$_J#{Ami+pkqnU?E_Zn{7u$Gb}Pq6 zj>SgmJTG=k7n@&v>Rd~IZB=Y~|1{U+4iRObyn%R{Dwcp@@f&amY!ANc-G@;Ebnv@~ z+J|j)EAa00n4EOlu;tnN`>Gn&HcD~5v}%#LDt;)G<9maR(Jw@bpk5X?GR!PtS_SoV zyk0~#TOv=#M|XK+tuLCMwjDm2I~`Ujj6tG6oQ|7mJO4xVJOl&#B;}~jK8pb?~E8cCgb=4eD-baWn z1oJ*u&}bq_(k8(?G%3V1fc*N~hnHh#=0-AkhMj#AIvr)W|;fxg&8Y>ocn-kL;H z^*>}X&Y$I1VY&U=owMf^2lF@CQNeHmB7*u&C+NH*30eTBgf>Q#hX4i+t&a<)z*HM+ zOYmdy@a=8|6OvXwvI`w88#}7X6eu%KZoDC%HD#dF%L0{%VCt!4HX2u82^*Nj4&H9A z_YgV+#;UbM#A^% z-stsja}O0L@XnC|;cO|4$&VRe06yl1*$-~r!$y;mQ*H(yn1@>O_Yb^@%?gl1R;dAd zf!ZVi&rfqo4bo_nQCUFj$A!^Ch^+p(q@+RUHa0dEyKYvX(^Kp-Q&;VtyswZS)lT$5K7MiWbBKqf{_3pGGU;r&yaNI8hs+3f$l6}_cF+dRB*Xhh6vYIaW~ED7f|!Y6L;@^G_;5^8nzI- z#i(?()u|sigvWg|v7Xp&+fC=v7| z<9P(PoW`47B->nCs;@?4*B8;7Xd zK<6uhqS91);cjMK)ub^m-M{YCdp%y$rAz`yJ$Wr z@WDlhJ0UoV2xvKx1w56o<4j}7IR(F;qK+h!@o2-!WEn;jVkUr9Ai)e}0-2qL1|9>RUStTD2qx;M z(2{~~*b^N0KIfiX(U({EI9^{H-u2Aw2`{sD;hZeprWTBewHWip(1)@b{pv(Z4cD5) zXpRD9vEx5ls=&j=;P0SK0%lSG7KIUeC^vr$oppD5oY?sM=?eNn}ww!BN zL?zkiAXV&8#uqQE_XOQUPW&>nDXDX|e|Lp*y0UGjx1lcG{1lNL3P*X+7={GTwjVc`2|RS0 zC~kzzUPLix5HMJ;G2p>hkvV6$k1e7mRS7POs3Ef-ls0!7LmmxRp~cYOb}3NmZHERE z64h%32B9eQ{ZnBk7{s|McQUL>uX+2JrA-NZ_3d1vjRu<PHQmnAcf8h#-J(aNU zk+mBiX@n=CBPJ4F3$SQTawdX_{Wfsa&wk$QS1_8^pemjOHW0NMA^M2gIq|6|ug9~om!8K>B1&!V;U zYk>ybfR}IVlRy|mgwcu&C8g11{YL$d*&#QdL5bO!A9I|kv&vU$?_PN8yjQW#G5c7j zs~z=&x(99+_hh}Gl@b3Vu^?`P&f(h7jm8mj*~iYB{_Q*(rzyR8WSODk;V-4)bwX>;A4i=GOmcSR2Rs(xT&`?ndR%F-oXTYqWyX7zn6&&4 zsx9Ov13C_g77i-O$tkpxqsn&FHsE}bXr5Le1Dk=-I>H#p^e2wgqeW-Yl4AkVbT^>vhe#Iw24e=-P zwY=4p7ZMi8FuVRh$_$VleFRBkqnX;sP%jgEe|AB<3!lWE)=jcu)9zdBx?t7luI_x3 z=63VRnFOGPx6xQbgQ*1XE*e9FV<`U6-*E&hPB4Wr7JSl*=AKmQmp3ZxoD9M$jr_~F zFq(2@1S{$U=K{V+6QahIT#4XrQp1)*UtT* z%mmi6lHw~1y2xUO>N;OP1;aiD&`HlYt`>L@d}L+LzF%QJOKny?-K$ktoU`?N+w<~r zFO^-VGf3=03_IWU(Rg`H+!hK#>U`T?Qp9Dm{V(>Q@n|mQV2uz92_?NeDi(Z3uX>N|+`Qf$Y4IXx`_QX9{aY9>Wsdl{6LT>_JMrZ7F4Ejguijp^L<7)m|l%cacoc! zjJ_UV;%(ECA^BZ_@;#hGJPeZ^8Pqz^$uXJ%w8um#|2j{{BI?`YGMy7L=`R~!0avtk zHlBE)S4eWST=qLv-ucVq$o+*nGLM#Px(OtHThWbhp=-vA==#0GnRiq?lZWsbeA#%k z?D4#ksOG5pivDZ+-xeowF10-rGQ*T%DIbp>IH-CetQzz!QjVoHF!58;T?>nEey|=G zD;KNE+a7tAt;@g5P(>GXtBx{cI4ar>Nky(9x$MJ8;k#xAPVBuprLt*Th{Ic<=f};j zqJwIAoP;3^n=T%4lXQQ;((045$5x8VxLK9Ld;%h6!q3Dd`b{_U1I4KVtL+`4l|TWv zu8`lzY<+eR|Jm{0ZH)kiW*9Aj1kd#*&GG|H)pCVnj>no`%P+x-Ph5WcAm`-ET#Nj? zf}xP8@*(OVKl~$*;ZerIFp?Opj9aV};D6ENyc)D>9CBBK?51P9iL%2?<4RBTcqyt_`%A#um;M?W1hO`6xX>q zD`zNM=fhB*8yf@pLRUCG6HpYpl`RahAbA_8l`;LGq&xh4$CS+hBfT+2-Ot|J92_og ztugVZ+l(y@mDPT*RnYg*P+ZS|1Jd51GLa3eJm>NU-@_RTeE#yib9(kN-=BTVpgvCg zl5u7?t@6)+J(S_2G!}4?v5uBltyjs+1ureDHly8EJu=rgC03n#INbYQ|GZ7qfj{Lk z_E09L)rhSxRIY=F7}}A_yBQppu>%(DQ0DiTbrt>$%EZHYyBh63&VR7%fB5s#r@|RU zVnT1^c(pwONDgA4zJa4V(u}-C62V``(kJ!>&Z6<%2dvo(MH;FyVKypR_PoLY*}C>& zMbnbN8$U)&K|}Xw2{b5fj+U&1OQcDnC6R9bNAM>&7JT9o#VJ{?>&pGMd`Hdh5{_Nn zC2ICAqWc`0bwp+wxC~mWgWrz~HV(qI(@o8KnsLo)21Q+!-`hXE3RH~xQf2hWu`O_n zvD2qNJYCiMAB)@sHjWUOWaXi;Kokm*B^-PgzEg%yB?Loz%Q_KyM&qvUeOlpt4VHa! z{$5Up2}d$S+w5|{GzC$X<3Mcj=J>#x>=PUxZb$+PMa9c1Tc2anA3IyRZF)DEJoMsL zjq986RrPMC_x))a3j@DWYNMJBTN`1JnQFN(3Ct{-fa>~{(r(oE9I$?_t2e%z_NP)r zgQQ>w_Pyn{3w$$ltnxczizQ%Q9gf4GGc73{k9_PwYDY+Nu1bVBD&BK=9K;wsFG?Ib z+IQG!{f4h!Hnv5+qs+~Lmx0(p4N$%vGK;`$Vxmf`M*$pY)#2xX)$X)3oKH{PMQ`n% zjt|=TRen_%T??}akJ#-)G9A>ANvmPqQ(4 z(7H^<7JKW8-h(AwAg)EO;A?BZRE-gE;x%4gg?uV|7mS6X%fF(3sK52bghjz8xjCJ^ zvBYn(dni4;KwL)_f%x5i$aoR8jZVkr0B;}vd>t*C_+z6L7`2ShvHJjTyaFD=7;-S6-8(pD7x2}u zXtF@;h@nMg!1Pt$1<`TIQ6*Zh#Pq?_Yad0NIYh7XsGB+PgEBD<*K;etji*5eOhb~F z)r4p}7Se9O#uN04*u|}kcVOB}-`qCE_DHg~kiA`-bljl7yXhP-h+Bf;5!iU5W65Xf z5hZ_o-)JNGhTWxX5ef8QaM@2;a<#}0VU9P*SRDd!EwPg}aKbXRla3$-Y@52D z8~OXTSH$E*Et-rp$(n*uC1avj;>_q+VS*d6WhcQ%o%vA%M7F_=1`R)34-cMWn_Ix4 znE3~jX`VHA(w;~+zI0#zVGc|L--5BQ9w6997*JTD5uRY+L^wfsH^>bLc(+FB(KajR zz*SANnOfwruO$}Yg+g%^9`Ee(`Z-=8_lT< zmJ+>p&tWSo2aDqpM%oG^w@)_g`>wCv&l4O91H)AT1B-G!@XNP?KuJaHmw2>JdE^kJ z!T$bKLY!LT6n(SK)aJX2(aO|TE&cGlVD9yw%t#K``guZ{fr}D+VGjSXeII!_UW3pjoP7PN4Os&& z0}1zxd4A}96vGQkFf3!jssY8*F7%X$VIX0Sk6SbFh3%%X^JQpo-Tt*QZNUu@2eL`f6-{8zd_&%sJmWR%`!hZNZKi5TlfnM% zTfn>PofGh(YgU2sp2*rsV@c3hhlt`d2|tNOT+1~4mcI!nO-t~w@0`IZIA3;aRw;cd zu_v?Q+NebrN|AyaN z&zPg?Z;y6$U+?uj1C&7ZZoUW9#Ng1!3x&>?6!)Z% zfO{=^cAsun*7vfVua0|iU&5TM$mUe`wph6|?rZA>u zos+z49S_%NCy}q%Wt{p}-#)quIE{x%aHE*#98|&au?IdD=mt2jr?9P!{Ee+5E??nr z19ok0V5S_+!&|29jm)T`3_sr)6Hk*{zzT&aP^u9yy2A)p#^rg{0@-Dxq_Y8ws8j6H zBuCZT$sT)tO4WLB@jMFKSfV=}R_%#~!ii8^6FrrUYjLlo?AuWP^BX3YV1?hu@oi;C znUr-C#gTkCj&bGwer!j{b=ElBu=ifHti8YLn~i^(&d8*Mvba+~L0L_=9L+ z&J|d*wLDG80?*GLS3Q??HV?72ZY?6f+3jOgDHMuE(Y_ zv5eLvzfp8~QRhJ4fb6`Wde~z=5ZKC(e6Fr?k|X7F+~GBt!sq9U`fT+7Xn&SYx7ML! zci6dXyGF7s{Ro>Ze4l{42EM%!z>N=j>+}^K)U%UFA z^FDV|2*;c)Ll9-C_WTPPLT9s>;`wXeBt>am@3`Wjw5|VJSkG3eoOvnCb$*ymgX=rg z(QyP{A-?PG!V_UtnQZDw@I9{*&bpS)lNr5WlqxN==}tCAZuP*B)v>D!$@$rgeG%o` z!>YmbQd&?OT0sQ@x~vyI0r#?~b@@*0LG$h-V4$CHBR4-j+C@GP%vx?7JRP;rsAn{O z^atKBlFSp*3cM&cQi9N|-NhBD_>{h(!Ir+WPtV>n8ur&c^X%yd9_8ywcGNl$bv>!a z0prEe>6S7qlq6T}(S??pnb_d}kX0qe9@pyjIDXL7S@`z04@Y#`HC~`3$JOcBgB)jq z<140CQoWjnKA04Zy?g)+YVd+}fxQs{Uu9eSo~NJw=~K6kl>q|Yo)TM>;6Zj-E5VH| zvE=E}fJ2-4llU%I$Bpcplw$`m+d!efGI*YIFLgLzrl2BH8=X<3do z3d0WZixF&G4If9aCNbx$9+06m?;9=%lg0Rs@=Rz6@Q%MuwWDrEN)dW^qi4D?lrm1Z zh>&__mG!1o@Vgtn<*OBo-Q6T3ULjPs=bP&M{zA-qA{1ju18%pGConfK0MfLdLXk;u z(v$b}0y<0IY-&ojBVRmIKy&knYb|DG0?%`7YI%Z%fxXy-Q-b$l%OUy1;8$13Zb}bI zKBgD?|JmHY?pfede(t#eU1?z&B`~N4!VTA$m4VMqcn5ex;T^}#nQ$6PLh>u#pNnxC z8S@u?ctT~4IjG3pwEs%eTyM2^q!r%7f6z2G zXiJ7^*|ujfV|T8j9$p5MMYHf0B2aF=ptqx&sLI3^Bj;+LDx{x1Vho30=q(QKCx>Dq zHPub-@Lc!w+iV%;)=*W5c}*Z9Z>k~hXKga?aWk~WC{cp|5K^4r8!%_&642`_)AW!u zSvS)CVanj?9?CfACOA0|PX|IW8nHhvOP{Z)M%_&g^1^*#LRZ08p;*AzV}IWyx8 z#2w(Cw6q=~3)p>!kaiHf0EOOYPBBR3KP$mRqsMuZbnJ_|KJgS6-}cJKL~s<34Tgbe znIW_=ey+*p?DL*=Nl!k$%7Py?&(IXcyjs2;A(PL&Z1zwzrX6fA&;0;=p8QSd`E9Kt z94%NAGGJ304tPgF#HQG9ZGK|fM&)wl;+f=lmx99yp=2d(fwjAKHdKKBAp&Nq8V&@R zA>UY7xQ-?VSD2OeBK7$NNotgQ8+7jRj@{nhq`sgs_MfxWv3_Dw{l7ejq<@ zyv+OESc>T&GW>CXOgxrlsJTm8C03^^!_-h$f#ORadFY^0kvB0IrxsYuo=Zk*^I(bQ zc8>i=m}nH)-y|R5e|(2n-exU5+&8-?N-bq0A^Ym9!N~mqg-xnYH(}!#PH7nXu1Vb-(4~&HU7Q)z^%uC zz0~pgCHj}Xg{kBA!Ls(VhcBw}ti7d6x3MLg!-^{TBP3Bc(+o+19Ot5oCnoplK>lQ= z_4m8}Y7g)svSVRE`5txImy~yg<-#-!n?M>dXgXpb$H9y$UEoi$G>E22AlDe&(z;X| z0};3Afr_H~&F(dkr-rC5APlMgm1jSQJJp!TGOOsV^Nz@o!h~`E?}sm7EU+|w!Tuh< zq@bfgR01stD5PjKlthCPu_@S;a#uLCK}`pFP3xE;i7G$q|2V#Rpg79^?X8&YiDBz= zm4ONMh?a_mt`nhqgDIS|G99VrG2#q&e=z>HUX`9=0z z0x}F=v(1{|VD2QA7FA#3-dy_Xu1M_Fm-+hZ`)=?AFKHGKV5m3&x5C%pT9(8Sn737l z42()KB<9J7(Ru6Jp~~;|17+iH?=A2YzIF4S-t}FpQTq$cz%W{E3Q%bh8E#udDXS#I zMsPSwOuN-a9eG*BXUJDG?e9ze*n;-<-cob3jyF0pH(wou#mxjFpQy-ZVMZ&kDVe;i zC=e4h6~UeASEUT?YvPlLucUbC7P+Nb_2Q=rw!4fQmft+@Vi~(tWMMM`B7xFYf!z;b zu;nO^EC?5z2lSw`W1&D7(4C|yH==kern99R6HAXrpu(~J_WMZ0Z&wbJ*7RknKw0$ zri^@;?+WC%knqlJRjqg-d+~e62@R7O!CO)oz>BP;G+FSESNseN@@cZ9H9HeeY2o;G zBPGnn`{$$S-j2J_Rxj>ukXa{jPXc&rW~V`|KwwVzU{bo_jrw^aW8Jkp%e+I%3mA(M zy@`qci?cTmhq4d8W#VjGzJeD3F^Pb!9TxYq?Ie(mUuJ?U%U1MfE&-eL0_xHX(pU?gIRt=v@ zHsP(frGsui`n!RYmIYKx#xddIe82<(Y-l!RXT!?ql z3U?>y6x=jBocYIA0IU=h6L17o0x5pTM+t(&KTw4-d55*eo0z{9iB5x;(pC{>|T$+n_9a5E4`&+S6_(??Hm4y)M;|?Wl zc6!b4Z2tG=*34!oM`}PH=q)4EL@sZrA)6ApQMvPNf9Yr(oVXzzZde8U+aaW;Vo^TD z5-b{RR*GBmY zVhy&O-$H-FajZ6e@^N2uNVJ7T-P)l-Q%IP{8E6}0zjK4H9QWJAqd4qBUC+e0`cpzM zPn!bLku*dCn}4==8g|%IL{311rn)qBTtnFNH#>z4UgT}|PZ#e#rPxAS+c?R`lJ!b< zeU}Y-RpyjL5wCd+J#x3`@;q|O3M=VzYyo|(gAQ#nh@nX8&rx?6*BUdLi~X?ssU!K# z{zv*Mt9Pf;@z_%s!w=~87NumoU{`H?K3Tp!)H>e1&`0+`1uw>Fpv2^eV}fFI;p!(m z1RCo4sq9v&K-}+_s2Z<(>HFCmS-n0xj_o12(rokbDnkq!UYjZS%|zlT7Ui{3LV;N? z^I*_(n=O%tWe6`d3AbzeHdD068rC#evfAAcH{_P+aum`hx}t<6{I(kAF*qtz zPrWuZE_Gt#lFczP8!u!D#>-=wvOAYVGxx*%-O3bfU_x~ZSdXf$)y?ZjJXwj@(H!Ur@aKqRhFYCn2!vbeYPXu^#N6F#ZAV-ZNG)IkznkM8QvGt`_P;NcAKX;_6Lgr~TssVT z@*h6Co!uG%ZQ5)hv&E*G^r(Vx(0N4Uij{v{UZr&6+-SbmuKGhajl3;s&?ET_t_c>h z`Dcz;J}?Atu&R$Z1Oz~Lo;i8}!!m>)c z@54!BrVbv(s-WJ71qSAw=G5MxIx4IGAUs!kDz)u0)%5EzSE3zf7B5>EMi+k*ZM3X88@hz z_2-aWJ`lz1?5amvoECkUjn>FSUGSQUz|yLOp{kdj zGg$7&sf)-C8eg)gK9}dOcl>^JKsPT|F)J(u|4rs{Pmu4}>4VKdwcTs$dZ$cx;u(7Cx2jfYGu9{suP-)N9IH^f+tRAECLT6iDo#)BSJ ze-?F*TK#dXz1Q!TOiS9~U~A3|I&|sRF!F z9MP+6PP&Vq@T>HPRYWpX;9&nHsVMvVS}pEcz4)?^u7y@kST*RD1^OuhO^mw=y5~D$ zxXc3-ml!>!F1qQs*R~+{n(4u?`3skqwmwy zQI0x%b3z;S?PWJakS}@zeYv#o!Vc%)wV@OHZ5b#{bk+YfHio?tHetg-&{93zlz^3S zyRUlWpoSLR+ze;Wt7a-kHPyK)YXVvsEHAu|B;^^EU5*#*2%m==#761x=azBhaE_tP zGofaj6kLm+M9;LTj+)K2H4{g~T0^WVRltzp)Bj_+^Yi~ErYel%m@@lt?YW+5&U6>= z>IM$RU6GY?;SRYyKr6>maowq3jkm&ynw^*6*(%)9ZPke@L*H^UjU0vX$>n%GvJ)z2 z+NU)Z6T7r~w3D^1HdyA0E0_kPZewbvi*Wb@UJl(NqFi#be$_xYFY*ez`f`BN+2<ZB%dY1&_b9-npGF@?g4()yeiKWy~UTni`*#Z(f21SI(^S=BKtY6IBBe) zvLz2BLvl7&+@;5!;E{Nj(<%~{_{OJ?{xrChGEuD{8aBvDqy3H4P+2$$kwNNzS_7aU z`rldu>aYj!awpJX+j zY}{}AQ-`06VR%shNjTh+l6A2Z>*)+f3S_SCiQ*M44G0MeQeM^l*Y<)#S78%0)n7$7 zp+VQB1njeWR< zc$guK)DxO^yX&J@ZRl4OeYAVFx=pW7l9EBOpt2jNf-TI0;pyl3`lg7Uk?^0YY4>y& zVI}jjx`z55@%fKAGY^;iv`)KEMB$M;0uT9-*IWkLEQhv|&_+Tlw5RwC)6s)1E|ii_ zK?LoBmr$%9Sv_PLsF(Uo@>z&_bp1IPRNi7hrUa3V5Nd}@7*-;*$rgZV5mR?GM7p6o zP3=@zrh!k>0rvV2tB;5&xHVh{H?E6vpdm(QX9eng0{kN?tP)i68 zQ4>D}%U$Ge-X*90;a1MOGTI0%0^0bWm=-LDkkYg3{VS*%CYvZ8KdEW;9*E6jZ>~a! z(B-*$h*$GM0uNQjmp=(SOh=l4{>s=6$IDN(9k`rTTvD2Eg~jeBTvf2|`og1W+hlpn z;D3Yilr9nHAgeyIf%^@zJQTHslRK$MH!MPPn<i zoL?ojqqGN10dzDV_Xb0Sv5a&DjPnsI;D2-P!I(uI>i$Ktw2e6RnzO&w_P(McxgByy zD#aR3h6V@pglD)4X}lVfJc_f3G^Tsohi)8+@2W~kPI%sRBKB46hP}71I~0PM0~1N2 zLO#T1z$9p!)cQu=)a=m2m*5SSaAx@p=bO`Gj#-R5f=bVx3;VSCh3 zN%Yk~G)f?9?Y>QYW&rKV<}j%O$b+*jZ~>%8n+D8A9LUjgzN>6bKTxQuyYcfy)<%^L z!UodkmuFX~Mi&LV%r72x`w`7t#uUtCU8}vx5t<5r>{0ay?h~D_u38@FE2-|rGkVAWt z#WtM8j@t~aI@X#i8E)v39@t>7lvr+pYv)5J(-qCC;?c@racC;oq(J>ssUm8?3)G-P zQy@g zmNw6M?tQk;>+qYteG6Tu{!tN?dR6GU7Qg7pZyLUdH-+-S2NFVgg_&P}x2qM|33w zVYJ%(D;}X^j+jlQUD_Bs z$8pdUw4I6$@EEOZyy@Og;p5zhQ~j37zuzwp&>pXSaZ*D3GMCe8hTCs@ojiujw=q*l z$x>h}0??sLSd1N3-WC2nC~s60-j(2ZL>tZglw|vmTluH-=CheNL8ZzRTNO>Qfu{mi z3#JPEr$apyNZX0_HCLaR(|LsB6dqG}?_&SlHctGpWRhi&_0y912$34mwq19E0R#LO zk>E%1XgmpiZxVV-z{Go&cxGKjTps!>$g^5DHyTB*+405Y$NRG{=jCujo{JIusT+t6 z4e$pD&3LWwxini|+-tt6vy~ZAUyv}^^29s`-Sk1|LzcDdzzxYXrAu-iy+KtqJ5 zn?zUCsRCuJERTF7;YfL%^bP}Rm#xm|vRL(V8-<%9x7$5D)(6gJoW*+K8YNPW^N<&Z)e1@A=K|itg&K@w=kyn9UHv?hh^&t^L$C zV5rvsM~I`NZiVf6&ST8fdgGpPCEl~=&zrjyV)ss;_m)-g|2zqX7EsO$_Ta{!gW{GX z3SbGxIud{e;$@YDP|x$7_wOm8Io0Zz1+3?`wzqHDqkYe(vJJZR1UyBcxM&Yh2t-Q! z5dK6A>W}8|2%3h^yc{BPeN`Ec-KrEGuPYe6cZFUfF)*srV3(3k-KQOozI%l~j2Fm) zT!g7r&e3;4MS7}uJmvh)k0xSeTe3=7xnJ}SF10glv|ln1WYs6>23>PM`|t*}x405$ z1EGDg&4;8y)-gg>*9-mmrx?qtd|%YO`Kql5-(#_PV zeJsEq`btiLT6SjkP*y~`wdR$XD%UhdC-ikz{VwLJ_4#?~h{g&ql~#C9YdQ<8M#t4=D8R_P|ElLfS9<`K_e*#Jc9 zad;wMoT)P=eJbBqB30vzu#w-oBKI6fY>n&iyZ!JVXbC;P@H{Vaq5rV?VLH4P z;nYprsffACB%zr$eSl(06?7pUSa)=JCwar8Y($Qme`?;FsukW#mRLrVmpt1W#Fqal zYlgHpG|`yKTI-h`#hxQdk8nv`rlLeyWe(J&R~^O9mKNk*0PJ#@usUcew9XXo(QXs%>P zF4v;Fjh65UP~89Z6?;V{4{QEIV2Dgu%L^<$If!BVnQanhKUw}W5ZK^=Y+>?zNE+m> z(OE=XSUI=`OW~1NOcssxpP2mUZ0Pg1YT7^j$$HL)GE+rn0k*|!8T`m{<1bWwsun68 zCpzN{iHj!oy-8H6$(0i=g;V)+WWR0mqW@Ee1lq(w8};;L-anF0gqaiA?SAJ0ASUoYuZg zUJjvOOtc!!P7e*X581fKL{HXvRy2@;7}z|e2~(Yh0JWE?OKay#Q=_HYrH+3kG-lk1 z(hXqzn#(*?tnyb=6u=fD9kgWNy=jkWk08D!Q{1YtE}_u_>|O!-v=6fg(8zyb=Dz06 zaL>-FTCxSHTdl@Vn(jmtHbIpk5XFY@7mneTfPcg**S_ZZm<+1#^D(fmV%F8(kd9Gf z&p*j{!;qA@HpF=OKWix-55lLNc!3mCuv1%AqJ^|qWGf06*`ekU=e6ZDJ{x-dUb;Lq zl6K%JOT6*@(Ap10Mh*2UfKCX+@d9zG&SFEJrWUE4$|j)A{%zwjrpO7`vDSKvPFzET zFD}_^#!sVI+E#Ux(z>EZr}!^@D?}Se?f*x?d|SBX8CrwFR~(T*A2U$=@$a}VympT^ zsqR60N8=wS+jNvwuEyG5KX+8V$Xo^1u8uPzD&-`#;}FG~V&<8q!!>${Euh~7@rqs! z{G$A^H22y+4h$QlJN%O?J7tb?@e`dKfOwjkpD6_ms50Ke__rhE!p?QAD zcIn96r)0kYLTz`~DX|XbpjtuZ=``PYJNhWTgALc&MrbFY9buX+RJ3vOh_~D$QnD?D z(1q(OG~@Z)n_5umY8`R>#56TE*%kXd^?=G0*Q;J-KFSWFg@3;pPp5l|fVOIOWa2w4 z-b82~_(py)G4$z0u5IbM>$~)C^<2v!{^npqv=kt6Ai^AE3RG%qU_3G-l=#7k=q6rI z&uj8id+l`h`%JB@x04kK(~uS|ldAW4^$LTvDZ>Y&37ZmsBt_Dm zj~dwDI$M+c?|{~Wrza8;Lir68PM@(K%mM|>rYfHlDs9z$JeQyR3?0^R?_ z;+69C)=$mvFIglf5rlTYfefgW5^~D)h>i8fJIN3Al=G&2cM=1tZd@Y%me^3$aQZ&+ zvB=3M0QEptwaA`Nna|wh+&$@z=Nev)Yns?fpO=KoZ>hay2|tcvzk1YnTr6h_FI8WD2Hb?Q2TlhE^iBFPaE_wa=z6WYJcqwNCh%kYqJ-M;b^uRAhv( z;1;hQ3|xAQ{Twwkm5u_ukTHg6)6y52RQ;f^Z6{_PqFFO7LtYGAW|B)#T<+&997*csyw>*#4_XK4%6U5> z-0}#RXl>UhI93LPoO)SW6;?AasW)8D+e#O15(S7L;US?- zbOxRby8cO4eLxRhi*bqfaUwkX#nFxHWjkiRZLeuf*-++GYP@>6r1>Z)(m)I@eB&8h zDmss@?Y4y_Nq+j9%b2;)He*^fU|rmA>57W3#t!+UB@-0rED7`AN+jSR6H&pjfWXU# zx#N*dP96}>yF{CL2q%wr6?M`a!<32o_AJv)O@495evv8%h6*4WKae#A^MJ1io<`N8 z3O1I@9dJfB9j!3Cipa1+GxOFzt!QgJs9m#0fxPqLa_kg+vQP4w4zG##bgXxnJs4c| zX^PoG)%31Rqh{6)zi_0;XXn@8!t@a$K3!Dg7KJD+1rAp{4d zl^P7OV2G7tDf%?{)P4fr`k$G6P%1$m#=R+x!Erx!1jZI5tfTg^5s&e@v5jB zE2PSy_=Xobg710e4D(r0AlIWN?WeZ>uC0b=d$b3NRpx7m02$8@E#4RYdttmG$)E|% z2bAJ@;AC4$>CqJFugx10JlC_AT;jOiATI$+H2dT6 zM*24gY*VO}%69lN{@2>Lbk%Z6(JD}Up>jaoRB@@WRv(~h!WHe+BItTE)6<5&lBsRM zy4Gver&bT+T?bFRKBn;YXPe!>%BNi!ck%nEY880p0k8VYT}45voL0^eCl?9Uv zb1u-b#JaA|pxkoz+Kn+K`Vl3zS(IxOXH>kyA(zHH1ZTFjoVkCLl<1(|US982`N{X) zS5F^Z3cOB2#cijC<89%_O?uRF$UVIJ?|5zh1bIXjgRCBLp0Xl0Fz4X0l_m6XB zraN8B<)2s{0|;oAz;^-e&_L(#i>H7CDqx#oZN z>*jlk4{qL(`abDIoYle5zLt6q!12N4#3K)Jo#dgrqx2R-}U1J%^d(aANdf7eBdVbMf(D}@6*pheB?txgbKr&qM z>1R|p*u-*(O-TX=8I6i*p}`HFoUUiJM%0s02Y1ACfA#yljw8}F&Bpz&3cLtyp<)*? zY?qm}oIHy6m#C5SWbltD%)u&}{+}2po{JH`Qui}C92)JfA&Qp_0o^Yke*)3JB0__6 z6C$&)fTI72-Nq;WvFV|>DX-guEv(bsz>VL#ju?^>{+j=~_7iWlFP4NB6?@N3@+(sW zY$(9ULe`n?@0C?uQ>gFh_yV&JVz+|_B+rS6ofY_l6eo%cIqX=4ZdMszq8Z;VZYEr2U{btN{W9nAD+J=)G;M}@P3N!~(JMqzm{LVNTJROjOa^RR^j zE$Yil(qC_%a*lT*I>z(W#Wso}q66idMTGvk;Q!0n+Xi5O7g8w{>JN$k+eJ&Xxs{|N zzvG6n#ot*T!5{dMto-9Owh(#EPRj~fRQ9Ug)Ri?1jr&}{Rwetl+4N5)W#4L{KDHXL z^8t#gkFUum@z+TQT@Q=3Wm)!v-`ajj&8LMD_Bh#p{oJ@KKe|GBr}?pbLnq>mMJWOt`PXxmkftS!eZ9A>cweL|Kp5|UV za@xqJoz4VvLZnVo{)yCQDt&%Vkhz_km^M4m_|D8`_H0#o*Y}vd6st6A)1c@izPsy| zM}trk-JWZt`@nt5MRVZag=~?<*OPgQAaU1nmTFDAtrYE@=$Ya=l*joK80}^m20R_M zqF2kA#7fJYxyN6BXzbLd@)2p7aoveM(Vm%WR@iS}sXd)DzA=;Rzp+VeQ{#G@`-il$cR}r2%GQQ zkQA5sq;a&{alq*6cHy@(PZDmN2y~cs-EaGulU5FzFoVFOrqpI!hV?Xl!XW7|9UX%J z7Yc4|VWNQ0?luyVNX?x4Wz!#-?XxEewdW3K&ovfZ+jh%kP;J>SqteFW5B}`;k`WRh z%~_}{^;ZOXp~Yuwq2WWxK1jt9E?RWHa`=6ga3{FIEm?5QIb~#n=1!X~RZtg+R z{HT;p@az(TyG94?8uVc;hRh?*=n9xWE3sRjn3{!y1Xg?pLt`JTOhC!(KX6x5W85a8 z-+`kje}EvRNc0YFumZS!hRP43aig#wDFQIlrkhM?tIM&ag8SuCiiQt-XIHW&0t`Q@>Q(=ktj|n%C-cSLL>}^3oCt~oHslri%k^Y3O@)bw z5&_9b9&O)pgZ|-?#`7n6Yjl&NUu3S{N*^mah-kKnfMueQDS;vzikD}f$Oij?r3(YI zNQmE^{M=kz@5{@kdOxY065Q#{)d@$G8%XP^9m^if(G7WpOebTECL#k$=7f zf}Wo&erD;g^@8N4RSA6S`F(0aG0D`aRg$3ufPn=wgMMifCxKr|?z(gd|Lv+zU$>K! z#M1$A7*Y{dVWK`nR{XPV2PrYjr6+JyBr;Q(;1BY%#79#IwXXS17|#Ra8gczGY?Dw$ zoT}Kalt{%<)pH`Qo)VhZ+8psOI=!O4qO{t<2zN&;$hn>kVH(0-hm^=)hYL_coO+0P zx8F2dZ!~n`^>YddwI$qThfxcinoHhp57?`4_cLA%#bbbof z!r!cn!pEz4bdf?iGD6HihIa-uK}x zoJ2z*RXAaS&7ve;3|+#2eBe#P`dY;ocTZ~H)Kl8)Y*}mcc_g|Ji$+4SsDiKWkw^hF z-wZiYaTHIo`3}`)Spw5DCo)7z!#xY#kXpF+MY;U&&;2&4i*n+VqjEG75>rVjsy66yh>|a|so2#*Wip$xYyM z@lgwpHpePilvdVvs(0zN9~%F~ttg%QP+r){)EvyJWvda9rSSH3aGd=)XKfJDLsiol z52v~N%a&Z_TLt(|pDbN*VLF0fc{||iI^r}llPTaiSW!DpfN|eE3z{!n%DB{4eU%*> z7}~1V3z~UG3L8!aUETakbF)Lh%RiUoULwYED8XZRFmOj=IZ1dVnqnnXESF0gJcVrf_A@y2 zw4s+r!N`d3UT$84q~9|A)r>}6|L7`Io*UmTfxd}v=O~N908n=v&2ka)(^qEuKK~s0 zV8K-+^tovKBX(KBmck?ZH*YQQ0hqqS8qrJufC;Y_-p*Ywf4mx|czoQ~LP$^d(Le@yTq^Eo-ao%XQ)^lK~+`mQueibS;fZU**+KB}w#B57s1 z&-T6pp>tR1(b*io&vYbZl#_U>Ldd{|?`<9dFjKz$$*rL^p{_*>wnBeV4(OUBu)l+s zKrdQiQ%_$+87-@@VX7$H{}8p^j{g7qrPwO&XE|XEwc{`~0nc+ImtFlaQ)1nHQpn`d z(t`9znrKKf$V;RrD)J8+=8kNkrPg2aD$e=d{_|-O`=7pLJh{m_?%j+Kui^Ed zSZbC}+UTf^YRKzM*VwPC+_w7ynpQzY?&&rr^6_XRyQR+OxUi0qQ0{BWN)~=5+q4=b zi?3!K{?|z1cFo>gOUNfxgV+F~q8;(=4763EeG+YAv}7u^%yE*j9EOWmm6Y^gLYck& zNN1ac?40exB>HKq8wxWGF0lg5R`808Z>DK@lTvBPX-Ztb68h)kv!T5Br0~K@hwS_R zSf+;r#rJHMbYEBTYrief`biWL2IVwZ8@&7sHv%&s7IgryvXlq|3G(1(?Q{+}7oTjCR7iv~mZMxpM?G>``=H8=f zX1c{Hzkz2Aq;`1xWTwkn!-X7!<5m~0=sCrO;{EN|6T($qgqnkc^N1AT9ig*o$<0RF zoWn$*&`TCYJiDnKOW;;-L+c5uKOF@8-Xb)8yLXVDgc6#hg}BLtAJ=1*pV*b^|7N9u zR)ZA*ZSrpgmKn5q{HRnxr{6TQ-T5GL)Df5ej9k@bLe}ruKhf@S#g%ei)$&Eu8`nH$ z3zN-(``W?Oh0qx=D~vxQbSVQ=&W(&u(a`qS`Z;Dm^L;VWt)EjcSfWhL@2)eYTcx)gU z*wpr-Ei7c!V$(}hXZSbr+OJ;yA&3#M>w^=Fae;J8#=BNG<$C|2CKu4n10aN4he}c$ebPl!EmY=X{!a`Ap0`^7{u-?YWOT-miu3pBj;?&?beC-!;lfnZ05r z8&CI~d}^kmt>_pM)tToi(a==4-*$Lq42;euI8?8qH^`{AAoFT_y*bv^nSH9{sZ#0}0~OA~hG9{_ zPMcCP`@C}nK$)fC#9>Z4=)_=Bvbn)D|9tXrd;O)7o{5Wb>f)?J{cTp>)v?{QuWx<4 zAB5iT=n?yc13Y;#x-EVz5}zS!huw$q@r^ojlhEcXi`Vx8yP|%hd>6;Dknr*TLGfhI zXHuGy)r`3}dA_s6;rfekVzA5K6;#Kr7F5>hYEzo(WBop*y%2S1-&n@VHQ~^pRJr#9(f+SV86 zPi|cM%h-iy+bLSiYuCWB4vESD`iQ0O?}S7p;k9e&d&@u7CKipoYzV@6{J1$r@Y*S7 z7fIZiecbEYDV15!f*4$b&zUGtkPf$a(yST)bKUi@YoL4+He}AJMKUE8iV{UFe{7>g zo-l$-sB9)E9u&KNg}>#KjyRM19INA+T3t?dY3JqiPRq2U-`_tl(6l6I`9oW8mFp&l z>2I*N0unnO2!IawZlHb8#u(pCma@)WQK{i{9_PUEwB*9F(X(@Xy~#RfI@J<7y^pSS zxDD=*Qh@mjet`v)$fajeD}sz;KJ%VApkK2uq~DuB8^}Q4NU-X>yH8?`2qhc7(c~GmLuW*Eu~Q>ZUCHS6 zC$%T_JsR$Wo1*Y)7~CGx~?Pzyxoy{m6;QFwQM zd2;f-%Re<-NH48|#6Hy!iT-GZoV*V#XC9BkJIQEOjwswq)<2cwMN8FnUZ_LV%srE< z0tWOH%bI46uhkR|G195(;qk@f`Hr+z$y53ctfQ~%YVQ!zwDl@pzU(&AAlYY)x8A)O zz;o#7{*m86dX7hEoMeY@oJHf*K6qS+AQyNz<6_ZSRKCOUWE8P9{cLIVJu3OCzn8E4 zHn+r@hiu=mXr@Y$uZF+hu8Ptd6UBan)!Fxnsna>D9G1YoYu6Dxw=aYF(>Tz7w+?^Bb|dzVqQViowl^9l#2W!hNjloJy+k;jX(U=HQtrT*44GSC)o8Tt&`}8 z1hY{(JW$}epqZ)x;SX{u15LrjBy`CWviX6z+_Y)Ec}Fis7b$8qIC<7`_t#Z;?+W4= zlxHVlqWEw%_oL8^*`AWd=DTE~?Y?}y${xsc4+f_HtXR!>_DZ2KMMAu~L1o2|tCDv( z9vT|6L?$8^A7&~nmGurE1N{$<)ElOZm6$4JO~-J%FHMzfS~Z>aQB8zVArnU}}9*VF}U$9=O{;@=-~MbbJ*Aq{$+NO*mwa_t}oiDITuAOv1r)e3f1 zj0c9J(zD$0`Z_n2)SR8~S7g9ue?f{xp7Mzwe#@*Q{-PmV_n=QqgDutE6ANz-5x=js#@%;4_fl%o)Xd$x~UA%Bsr0-N7ZX zW{R2x!5o1Iuv%g-6)fz}0&GGFrwW+DsObjhX$gI3ZxA$z!oZUSe*NscpajlV8Q!k~ zUnkcmX&OYIJV5p^?g@X(7{zDx+uVBk&Tl%?h5&w!slMlqFG=$^bBtEj%OGl1N~fXE z422?Q;Q;!j_8vOTGo|iDE1mbS%zMlt^Rrt*T~kK$=*R6g;-Dnxw-OOoB^}e2o6;nu zWgdkX(kp;Q^s)#7k$H2rUDz(z;lt8h^=KNu7gcS}Iw90a((*k$F*j@7`K(s)4);Vt z5w4a?uoG*}|jjV<9xj78VL3nG7ZJT@yj zD|$t*&lWKG*k1sKsEfa?n3mHI!P6Eu2iy6-Ui4A#kkHALal9${nFIDm$iK0pp{|1e zI)p2svS9P2*xkiv5QN~8?5xzg97*7l}wB50N`cARwV$mDNFC zXSQS!4xB12Do~-_`~30m5aW{^`j)zIfz+&ttx#tUU2$d5sDhQ#5^B^|ID-s9SJHTQ z2UA$#S3J4tyq=fSwWHzJ3bRFjz=1g@d2fQf-v#SP1&=h7)vNQKBwtiICpP9p#NLa7 z3dk{{01wfX8XK%QHW#ap5nXW^5=~#~E!lzV{}bu0X?!9#dHx^MXr_XSiPB8Gy@c-= zNKWm6b|#kN(f6d5Z?=fKB59Wstb!(9QfaQvOLyxAp55(aTw6KS@J3+<_?8jTU|87Q zr&;a8X}#CF?DoXnkC$2dY?sWxCs)rjkTT?uEC)v7Qw$`I8T-5Zvjz!=b@+8jy-AYR zEXn9RsWYtxJL67EECsEA8w3Qi7bx8n-U>USmLm_+v6G^GpDxtQHIQqsd_DMvqVePd zt7$;egM{1+^?zI;fwHL0%@}=qdwxGTK|JQ(`TVKz-8MR!yLSA0%Gi6nUPW|+Dfm)N zdvtM;=iic&Q&EamHo?Y7-Q=fRN5)bWU*j!9CamsWu3s*0lbySha4#|OtF-_ zr@qI|@~uce8DA8ByoS=NB6<`fmJ`XVa-NZgA~ThPq)5|}6=7f&$5FaVU9rl5TGgvP zaA$XOSh@UYB!S%>5XeODTKTE9(V18F+fL7w zpKmc+-1Fx)B!zE8W&>!t(C{e6>pnk)>qc!0j5g2R$1fM0>Dhj2^n!!V+r6h`#;u~6 z>u``2AA#iQh!q;(1sYg4B)3gDr~l5DIrm@xi8jEGzJ_ri!7SMN&AH+S2FynK!>U^rHO5gdk12{ZxNsKbt_-vhLiw0!rbi1tN!I0~ zpVm*=p<#!FFCNuv)~2X=q^GZ4;&7h`uIHx6RT~TlHd+)oVW`?vCtPJv&JPsFi_>Ol z=2edxJeJNZ*-hNMV>E1t(FF-5R>fNiD#&H9%NUD0Qtv8kd{R&9s}Q%@*RGh^x2N*z zZi^VBy+b;m52;|cganYeW4x3H>hj%F5*V+nbDHt-h01cb|{|-tBv3X zX!S(?WeM-kVk5n3>K>MfFOua;G@hTm`LTf31m0V)vfswaYA`k!5C{ZKnUfm07BW}n zMES?biX#rAhWVqo`-xi~l&s%w_(OZ(VS|etth{Q7OBI)dvegM4E>86+=6zU+Kk(*e zzl>s3hpv@VQN=lFN6|&DG-GRN@z*wdfGVTy?R|iC^S@TQ|a29 zc{G%6ZSxAYH5NsLz`b&vB{|}gg!v3jdU0;>ZuIgr_%x3@C_!aB%)y2|l5i~o33-tX zN@d}H6se3^)btEh7*z*V+-)($Wn|@E-vMC{MTXiSmF7s7v2csv@ zYuD%>QF19g5nJ=*E10GuWcUPQef(qC*@>y6&5?JA^=JuA&hb}D)>fDPmi5k*l<#=A z;q|?10Tw08vKisTi8&*9vursOd!i&Bp}k$&%nh+5>2lcI^_u3YzJ>M;qe=|@4{;Ty z!RAL*BVIsrT)qb;Sjj*S3JCHrFEw?r;mF4Xg`Xm8W@Y`y@3&j>>;~t4&$Z-lUjF#; z4P1Qx=%EG&7;u?h>K-hSM}n3rsz5%l!e8FI{!D2_>Boue{evWqOzxCh_v`C}uY6I) z7ucuM$`>{g07#ID&HpFn2+)s4j6ot=A(c5bPt*5GdnhGcH(lb@Ui(p3vuUZ(2MbCI zm*7PFjz{hUz=o56qzb7nNKV0stVMTFa!OlhGGm#Mnb;@I088nkC7W%k5n*B3#u&5{4LYu-+6P|s`qTp9IkRHsr z+$wI$ANlaJ>QCvncWsltdxw@^@5$1$g0wmroIT-r%#gq%snkSW#$(*;J(bnw4|4}Z z7tus><++v4LB83JM{;ijrydYK}TMJIL-SCl|l05rgqR1&SN>Oz9i8hu-c# zmHpyPmjl7C%jVFHXD%yFcRd2=!-I|j`V$Az#6;n$RzPfZ*LT#Quig1FU%pp-{NfvA zx?`)irS{j5(wEECN)kt&`CAqq+Deyzub=Oss)mp7NiB7zK->`GNGw&-&MyOA4#DYu zeBM+qyI)5G;d3KV^)F`JU)2|k& ze7pO+`|%skwoBH{!{>DWy5_~V`|qO|qCle<3cFdPgit*%QAk(q2^B#p%l4GmfSv;3rTT>@_*IlfTy@kCJGwoCoriWJsw zzIk$}VQvKo*k+kK$zWdirS=X?`HB}J7Zj9lS;5GmJ9LRwqrNXn2fUVB_m6y~kDM{H zQ~ulf5o~?2VT{?So$had$__>B7WS+9Qq7Ww$VFV^Ve9JqWqJobs@$+7fTO!H%n2oO zqHq(K`6U3H`>+p4wBX%`6A7KeNM+f@R;`)^3vb2bcZ#3)>gfeu{0e~l|FOG3YtVmU z%S0EuMc?m5*Z+IJn>FXWesw2PAb0I!7i~m1iw+g&(h>uATy5KQauu&HrFINjSjY&n zd(svmW#Zl!jm&HTOH%*!))B|gAHDbe6eUO>G4a=9#Qq~(uF zM`kL{#1|gBuqS@3tl8&x261%19J=~oh@7yFssV(;?JO0Sm04N2Q?J!~jsCcwr;hS_8i3)qJG^L>-&U!|CREW-T}>nGxJTOt0ikV8`i;2z`lrSCZy|S`Li>>)(a73s2_Jx0c zKkwV1>=&`HXL;N$N!NN?Wab8}rHvoMS@2g|&;f1_Hi1vW!kcz=u8ldOu38E9{Ui_uAL;tJDn49km}x+L!Z!b|pCS=}f9z#bVjmz-L)W~rBt(yqA{8al$8&SPV* z`^qN)@HPNzCX|G98)B8$F!te(+=mNcdV4m?=o#!Uw2+n#*ty}Wt)wBDgCq*YMOQ(F zz7lrEyF7r%wP#)K{_*cua!qSU@=TTZ#`s9p^e8L8YkhvMuL_iacmn&Oc(|79q3s<& zG5>=taG6I&FQ*Q)4PLCSdd19IW^Q2^Xnpd1uBPcogAExxgbyNpLc&?N4H++mxfoZF zNL38Pw^=Er4yrrz=V}~$Hl{Zh`eg@R$n3l*c4zs`_4{oci(pq#CX&{xLrZd4g$Xoy z&I=V>h@W67Dcd*t+;YnA{+3ueWb`vQm=s@8v$dAIg-6CblC0mNZzK-=> z@u~7SsXA@?O1mOQ%wy@{Y3}=V z|L6Um_q_lA|GekC=kyqH9?$lBe!uVXS>&+(Zk7=G%Lc_^`Lb);pOVH-x8yy+*DtWm z9y%|>@zbq~m8S_hW63mR#uu*!)(9uO0;ngzv1|>=;;%B_Kg!>(@>{FZ-nZ|I+rFsR z{rHwR4)l-;-9d~7PM*b=>dDVLUUs$q+^gzt{3ZJ*yDM*QIo;Sf_Y4Z0wIEl$9gye* zr7$k6uY^@t8}_}8U_4FQ)v~iHKWigpr}Gi0sJ6RBwH|r0^}X!h*S;^=oU5FOGFlgl z=Gob9OvE1^34}{&MU;f)|1Jr1A&c%z6r~i`J{f3H{_V{DK#!9m($oP7M}y2+xNLIL zFf9+}Z8^$#!%pAsBQe%Ch*YztPsjt&<~5hUsC>-(J!irI@8dtcb=mo&q5jX}Q&Y~A zMvS_;Sv|S<*Ji9Rs%Ej!i$-+N&{{61qNMhL1xat_*daPydm^whuw9tuOWgPm1~-0WA->%4dzO> z-5L3D7{F4JbF_22OSx)k1b`{+0Kfh6!n|D*suKDBE@2@(OHI~dw{>Z?2B8WZA-dy zl?&lq|3svP#YHGu>`lwccD&Wt;dSySMTy;a@raSK(f(Ka)G`aAls2y3@?g^CQBWO8 zm1^fJ4hK1Y+{0i7djr&VF3oJE)!Owu2=_7nvF-WG`Q;8~xW`s|!Da;R3q1h^!e;?d zN$l{Aluk%?B=XDSwX4-T7MzUF9ZMfVocGF@F_av-K1|`>NO`mDz+CkVGoESnv1NPI zQB%3^N0oxUd-Hc4RC$3@n(&ifTmvlA`0nMW$c~hhd zKSzy7ITYIaF!lc=eE;o#QC!JSeq58|Xfsbo9wbSG(oau*jmobTfMZFeRvl|Uvz;%w z7nNutB!?1{4byne(#I>AUBQF{4)Omk!L>a&`|Qw)8HM2&uO49|N9-(sBK-WbsL$ns$+s_{tv6(Y8xN3r=0E+9At$H9uF}c2VewW+@e` zL!(iQ>s$@ptRSK?C9*YykQy42yeO2V9*o;ViMH>2acO2{QE>Ia;_Q9YJQ>Np9F-_$ z^^%>Z5UJ%7SU%7sIg<0~DKAH(s^xH4>c;=4vsLN;r?Zt`9ZjX==OKCV9U-#%(X>3~ z1*Kmm-$sr!<+`|3q6e1k%x(8i8yljIbluGhMg%-fWSX^BJZNABnj~01u$t!{c zwbke>`pALwoN%uDF*9Lvg~rRLmjsSG0sJ)ECjH29>QKb}B@i$u!(Os*e#1|G`|l)R&Bj%rzh6?B!By}asi zvqRk8rV!6C(Y&|PC-@Pl5w^!+Uy1zQM0m_J;WpO367HU}haUJElV0}(`yE$2qc|}! zZK2iCJaYAXvkfQ;z9gc*SbX6_!#OzBG_>Nnz*p9jC31<`Q^n7+Guc_1!+&L!>5}v( z@#UdK;g_|Lved!dH~d^MPI^E~u}=x?rx4hSvp#1uMOiW@-$$c>9XMLneai3XrzklmRT=>c%a?BZdm@TO zce*F2O!h5IOBV?E%_-8F39TI(yyoU^g@h0#DQYY{el6++%4<+#uN4Q{i#kLW~JwB^% zxtgJpuW)1A4@GyJ>_KgXVFtu}LKwxMFo~E#SdoE!Edpe?fXJ?jUT58u{^rU2s8&kA zq1h&`*Ngn!1q=34)SIZ$J5fqf1!4e}hEkM7BX&0(@XW_(+)lc=&EsoNv#Pf(F?x1CLgFoq zEksPyMc=qR0?5CCD7J5ub`nJ#El_dn| z>iXb>dg9wO!k46#Sbz;Jm8D3~W#&lqFxjZ5z;9!Jb=^?fmAl55tZt3gkzSGzeq4*M zrF;t{?YKn8%yB>6G`}ysC3_Y8_gG};*9LF3UT{gXhCW9sO*ks!{-YG8fC_<{{K@j` zEvB|F+tpNyT&*|?ol470&QvHseEW>s2rT*#(NYmkRNo-J(DPkOkNK3(RO(`5^0_i)r~Y1hz<1=_(_!^aY;eM z{iE3zI+>rJxOfj$-|4d7yRKRFZhfam&emJd3~~Z1cPzgE#fhoQ(Lmmy|B!{BeN*3T zX)dWw`QiE59{Yd|Ex9Zd!74@dEG_U zUvBmK#@drqsRXNQkNpaJ!Ah2ZB#3WLHb-f!{pb@fegCJb zC-!+SEorrhCCYECixs>r?AVPx5a9$I>?>4^j#JN5FXlm0NqYk02jrZiWSmR-K{)l# zMVl?(Z@xB+->1IyszkDKGz>3>Xipl$j z()gz1-hWN$Z4Ocj0BOu+GzB2>SirH|bTMAs1DfU&gdjlBo=&sU-jZ$Ul0UK4b1U5r zd5tTKMe!SOtCoPq2&{f!JAyNywH_6RQ|+mz#9$`U>=K4mA=zbReK41lt~>7S8Zc^R zXRAuwa(w$ONdQwz@_}Y)&)fZ9w=nl6u_Z3|mT;&M5t51&Mgjs1?XEPW=&BlT zvuirEAxTFQc0;+|a78=Nsc^O8Bnnz3C@j+aRqsy8Gk@NEKH>8x`6KPgBOi*pa-hX- z!P2A&A#oM%Bz*H?DTXCNT{{=u1cjJ%eUog40MD*)-!tFw<=y6pj#c-bxnjv1kjKuW z3m|MR**e(_DHFXhu9XDeuqD}&1T?V$+VS@3+UpG1JMBAzw>`euvDIDq&w`gyea~i; z!fYqzC!rO=F9)HP&8$5H;V!HjeeBI6w@4aL(&tPOyT`>1y-S_$&8&zVXG)Jq`p`F3 z@3kRUYuK`ow4E+ww3eYIcA-d$0}zg5P2>~bp%bsWA+~Xrn}>2JaqtB1cW|Hlal7At zuUk@ghK|IMlIL|XKAl$%?$a48=;dqtD1r`?wR_GGs*9+Qswm0-=v7kGJTy1D?E7qc zEe7>}TVOAkY$EOzAECA4#C9;A4vB5VuEuZBLLo`V+`RxDIZ| z_08{IM88*d2jMBlg+o@|MB|WDs6^^@N5;iw_1MMdfVp3YxAupC#$^o-H}6+L zZf**>IX#|~OnX2=AngUtvn}=#v8~B}Hs*LLCf|i({qw+KMM8o}_Q0Xf>~xAi70WZ-BH|#gxeSO$1j^(%fNCTj>;^p46ZT=-40x ztoZ@<&yK>c{v=^T^c32!d&3MJ0P8d!<`aJBFYJjk}uMky*%*XqIZFD?btF1Sq`{5Muo&7oebmx0PU zA;Jvih;Y!!q5OKjT4`0`?zM6~qg$BrE<<_+=Vo2(iSW`9C~-|LRwW_@m>KSO1jhuj z9i6)eKW5{Hkz;lp7Lq;uq09EX%NgP>ooX=J+I+3B&J=qjvFOFsNcaVs zedBB3(o7);2I+K&WAC~G5tM|!i(5oh5CByHHoE|;xW^J2fr`;P653$$RwN<72?Z%A z1!bTClt53nBDJiE56RXyxA+=7@7THV~8n;(AlC6IW(#+J{>Ay)FDoY?vS-ZXzK1_;P6fjqmJv#dNN)J>rp1hE#{nQ&~D~c09ZxoPW$@#)H6BZ&sE~zxlOFj%%NlwSB zk2`u4D)e1;v)&$f)IZ!7_vUoTXjDxV_U09w4j#)}3~aC=EC`I^Gs8(jHq78YYCfY%=K?X#Ilpac}A(|6bic z*L>!VZ%B_RZ;1-483&{xMVyUHUi7BZVFSFgGM76;y_9E zPWLt~-{(IPn<|Yn3Xb9LTQ*uza>@&yp0-i$nl4tJk3%d-*eskZe-Ip+2-p{Hl0QM4 zfDfwPL=-j8*Q6GtJCA+NmkzxYf38Gx$@7Lk*8EK00CpC2FW`yOTAf%)JG3ML26W)4 zu(y1;eb8qXe}Sywobx4C(Y^S~>98sL4>%;IcV5U>5=aOqGhqoEUT=X0!vkqG`8JtT z)SD{reW8n^sZ@4DRs7Oz!?AzV4n3+PNmC}p;OiCe7fqXp=fltyCQXE81#4XM(=Jl7 z^<|sgWBfVgG?fx}$PBW}lJ8m|*2z+(waSY z%B<|&ob`wHMCc92YMCnM%-iLKEdtx3K#GHaWRVhT4t2mYB52cuo0*Nm-)owB8a?@w z8hzZejzj(Z$Mx#T0b>nz{=1eGHE8RDvILx#KU~PcDcEeu&rkx)VVQ2d*d5e8k7Pnq zkDSSHiY_|h)v!vji>=I%V!SWVpNwKb1L>p#M8~sSCq(79DN*$C&bp7K@@nCGCyIKz zpGz%h89;P^FZi#sU&GQNXr&-2$O6JSg8az8u=2GC|DaecShB5eM}kH`>+&)=%HTau z4}~Dd)2@tSFtP_s{yQB0^U+){LZ;ZEUF+Kti*VywVs+V#%|RpE?R*O7T=SzL#r(h$ zu2wLYOF_nuChS@6qFdUv&0%LL&Q`mQBu6DL5;i$67kvU`B@cSBGL1=C3D(o5KHP;d zz$+?4cHE%q`X|Y~eO?J|rkWd#_p_}4Rs}Jj@g%l*Lo{Gp#UpVf8zgtb1b$Fjk{_9@ zI^9CF?tFOk>Ay?vsVOF0Os&0oA;GM(+x*%er8b+QYP_(|a0{tWvU*4j8JCvf2tpo& zO$g5VyK9={Sp@ng@9#?3B5U(@!>*+lOo}w@V%kz6YcTorGj%pJb8hE0@uf2mQJV+ExSVht5m7LigQdh~g%`63;qFP=Yvz zAXEg*G&!t7iJ$w}HS9O~XiJ|?mlj)j*;`imO;fzWt~=fvs4dEntoil9SmRV-U(vim zafmon9Eye@rkwH)1($Oj_!l!<+Jn{^Zwz1KTZygA`8VmR*z!WAXa z4ljZjt&?h_WoK5Kcza(6Uu!NpR2n&iKCVlu+O)kj56=T6X%jL*UKA6AZ#ws0GU5JAInjv8J_h`JLa)z=o{ztTz^C zHn*RAR+zrxF~};xg508o^6;#bO+*?kpGNPdELifSOd9ge3nJLA)s^eP4ez%=W z{>q(lu-qKd*>56$`9YV;>+kh(N4xENS;(&hNdNVU@+>yJHpgX7mzhhu=H32qdS=;< zkIER-9x_iN061X@v7J;oeyB{hsfk^+dDrSk zs`YtCK@?vRt3`Omm%EGA!YXnJPzO@?!~gIP%Rxg^0?+l0-n$&4?Czl^FIgtM0#YXx zv{pQ2L?pCEV6i8tvxMMrSRlScJ?C;Fh@m=~T&_z$*Cwb*qFB1EdlM0Sb!n!XKzFPl z598wj^Qs=iAy8^z!3+>K%+vXJKEE(Vsd?USuw~d~JfZKzSr_q|NHv+Kn?4@s%m=$Y z0xVbbr=r+G?-i`v@(dQ zRV5e;l%8mfbPcgJ+Sx4QT%IaKhFq*+TU|lv3T1Q&kL-PmO!J znMb%QC366|t^C2x>afd_B_*SWK~x!ruU@x+j(#K=qSDBJP2OAB9YjJv6X4^&3y|gY zSwX%r$4MPyg6J*JE<9AMT6&`C&@!8uI?@tKXKRX!Ukxa}-kByUf3mnzVJI>sLG@iP9=L2YJs`^hIDm^JWFP7w=wRj7{nLpF#{5^@!O4A}hGSI3iwxvXhqV4?lsBkqXwGQdxPU~#0b@^Ya zk8chivD+V4$DNHGd}aS$?2MdZ@SQ#vmqep}6Em_`U-hcGrJFrsy?%JZDCeJ;hs-PM zQUPPC0tqS&{ZIsy$&m)I3WJp))34Vs2Q3noU3+0zPYcLjr(|B$IT-Ggv5)_-{z~27 zUjHl@&AT#QvV?5?vch5t*mO$T^_0rS*xPj3ThdQ=`9JgClWs>*{?TGZtk5g`Kghtt zMD@RM!piB;`)+{0@rGux=>nn(_AtBY0TNT z&#l{B^MkuV-$LnSg-DQtCIaM)r9L`zu{W5r*9DDZi#;q)wFHlsRi0Nx#wooS)uPl|!-M^vz`$)@t>*IJLo~ zyUXyYPI*BcS*@w>koc5CbBBU*OPvK|vLXvp(MF1AQ}!7|S|GuTq!)!nFCUCcE}d{Y zgdFkt^ZnSE)0?%7Wj@aWQ@dP?&^ImA)6tEr)DwjL%*1>)h39;rftEr`p&o9VDGZ8{ z>$y;^K0*2G_tr#EC!1?xqji^F+|({$wa^x$ct2X}7RaGOT6$rcf-cu6)wCzBwjAx-k6Zd+Z~e&!`+v+3{KzhR_JV0 zex=xAsRF9Z@ZKMUroCPaPm&G5A2M1u*-B?yZtQ1o5&L2vz>`%6rM4W~LU)X>HuHac z_;t$D6-zR2)#Bs?9+Nq><#4A>!_rt-yZSE5fIok!q}>(J~CS#8>X!CRcnx2lM%Sv z<4D|zzrBttFMvl53g>ta4HS~~ARwoTUBB5;{h5)7d~>LD;`H@z$xgn3o|N5hD-yOW zlXly+=1eJAUEvma4VmVk4*yG}!{8J4Q>0B_b}5v^Ye{N&&tC3#aX2?6w@)rX(fMJ= zBQVwabv*~F=Huc3-No+nbsj-}Ou_=;rh=$$FW(d~s^NJ0<-XV#qFr@0>9eiP?6OQ- zG$2PDK)v)W+nuC4N>6jS_y*Ck4tEdE>GD6>qUd9><;q{bW5KJc7m;qB7lQ8;ALI^; zlLUoHFA-dN*whP(XKU!QL;F&ugZ5XqG+VSCcvnrJOHqdx3tycg04p|Krl>TrlJ%Dt z-yusr)f{km7ob*WvQ3z5<8jsh8T6ji7CV?AzH|qLO2B`aW;vRM2IkfC>B`jezUdEo znbkhb^QAR!-Xz;43`%@Hn{;njUkV!K2I4E=c!nTk$PA9QI7U1b4BDHEs9E^~{V1_% zi~W_u-k#o@BlO1Nr6lE-7ao8{#yA6=nZx*V0*_mu$4zgx(Q5pH}&}W~1 zdp)v~oS>6_@H}PBe!C4xDlQ{Zw8KzuwFOr8HuUXwdvUOljqWChN;qwqwpbUfbu;xC zl}KxKr}#Fr5{JCfiE^MoqTDr>ZH9czTpx4vq{k|?(up@`E>0^bAHBtn2Go2chlB`O zXcJMLYl(Z9C*snzO7bJbL+GW8=TH4pd*u%X2(?6e;gC@>+N|a>r8bGZc}xlIN}6FX zw69-XxoY6{-70NEa4DxZL;R0p6VUgpMu3P0Q$r}pxE4vHf1>kH$;K_u{iY+ke^9q7 zWD+Jl9ZZ~i{)P+*AVhS3RJs{D^NZ%enYWtye%C)_X?&;cCkM0S&=lf@Ri!cAdws)#+F{n1J< z{nl$4NW`FaBb;C%5uJ{zB1%THUB_$NA}5my^*q!^`7dR39I+SE%u(;0vx8^FL@~){ z$hZ6CCDj?ffIBhi+Iw@JEYJ0u%l%ZSsY6ev2E%zuW7F{UZ)~b}Pj?v1hgrOZ43_%0 z)!8u-cOF&cmzI~5%P!sjd!*u5suavmSs+qELt=0bNk}FxS-`mXhHc_ULWvncM;C#0m$3Xk%;W$NPPy}wxJ$l zSF9M>!A*kJPCN*hapFre{CX&lgOe?duf^4>N_(w!H_QD39#Jy?IgN2fPuH%91kDd$ z@Ls)ov470vf(TK0e=#Pi%G`6`Uy*+AL4|qdA`O}4qP2Eqn{?Bd^|Dj><$fE5sm8K^ z+Rzk}q2V1y_jV7+6Pt<8amV|Zr51kVX0;h#8zuJ(& z07PbG^rq0H%dHgT=Yx$5tHsYJ$(v(jZCMpDnFV~O;9hf$ihQ+{ zWW%W(Z;Tw2JN-FH-mv^m)ZdLASsHe`0qHnL7VsytSo&HtBU9;QW(7zla(%Krdq(0F zE#}J062@BB>|bYAVZ)H0Jw6y4YUX3+akb%gMox`R*>Lxc z@|$+@d7qSOrGN_-fZl+Y8Kfms)Pg4D**pEPZX_>RZN@Uhu4}^hb&y9|!*vy+W0R$I#{wPU^S zLO5`_)nrA4Ru&RPNWy^{cZ%`lwxDnzv*S{!g}gZS?<;?V_-)^L%VK9v(4#4QBjIXf zo^@39pIjsm=6_HGV+4xN57v z=*LCapc?fO7?tCjuM{($j3vv!+LwrRuiIjJ8E7T+I{^|?746I@v|q29KI_D*sfb@iPgQ7p_Y20 z!DuZHf54gIbVM|l3HEOSmQsxI?-JPyVk^$KV+tk&KCF4+l1bR{lk%_Gd` z0RfcLx!~bz-`7g6O7Rm zw*3)VqrW8XY_R(1(C@Cbd23-)5igdcIF20MmA;ClMALb8)AoE*!;sgJ9EXi7cMUTv zVBOrajD=Pc)IkJ(Q=N;S_rFULZZ**sh@^DducR8~X<0mK2^b?Hn~0hGrHpV?zJ;cw zGqb=j*vog>(0N3OCoNbPd&kYFdCL<4pUH1=J*&QBQ@pJfbaO`Pg{)4oE8=m7C)vu_ z<&%BQSzp)!+IHAy9=E;I<&&eS$Lo(NYATXa#O`&h*HX= zx<|T@jd+hePY-MIHaUFgZDGTPWFmX$ge^>P!kuBswtqk0&HSeKx=eWn=IF+!aA?6S z2C%>n8UgW$Kt7MfkHZ9u(0RQ#@B$|;zQnxAW-oP;h{G`st6`>Cy}rxV z$#`zMJFeHO_Rp!xHf`PQVDj*T+(JX=L$Klc1j7{C3yORzN%Wf8F*`B8i7n$^`r)Mi zHtNy<)hW5-Q6WAXuUkunZG&UfqUI1S9IS=r4YirH&J&vs&Y&0%t_}7NWVBjZ&{v_{I#d2Y3zy@1?`_?Vm5LkWZIr72 zQeG&8b`6yd=Tt5v?HQfVqZ>k%O1ZP8y)SQcQhn@dujby0)yrc1R5vsf-#4+j1f|AJ z*bg|wm}m~;)nkkLVfG0GHP^~GQE!7d^mUi4OU3Im4^ zNr0{={Rd7zz=CqK3QdRlMuI<=3Z5f_ZpRVr7nZu;7Cw^|EN-ZJ+j;T6Jd=`IW)I@@ zPZ6P*nh$q_%Zrouc|)~D--zwV*}-cL%86#P^7;o%$jfUVuTtxJQ!g!b#OF|czf_nh zih~^nDez3;xf=iKQv1^5cZr}?!f1wOIVFYNoAN>~Vt7`dXIWQL)NM!gh^dxIE&N)o zB3|?!KX@-6O$#f<^H0uS^wrHHq%!a?dM#sAj^Yd6XsB4uT0xz10KBDl5>v#N4MYs_ z<=4H9p*c0>0y;ZR+sF8Pckw@^6?5*)JFdFTHBvGPvKOua%in~v{ncoTD2TdogV0{ z;n;&7BDI}PGt+!l_KzNuY{4<@;hZx^@`sYZ9Bvit1hcSlJz!|c1@>vd+(t5l*G&x= z6It=pNSw4KD{x75XUFgn!O-x*XQ$4sdgNXN!t9-3e+3Z~Lmi3qL3AST9p4~M z)${_%gO z-2LTBbCx{w?}QDW3Zbzq)uYTPyKeLOt;38!h@e!K{=4MJIC}4`6vFEw%uc=mP&OA4 z;rEKu$qE-Nr=~qHd?xZ{C16Id;0>DQ|`HqD&b54JFY<1U=9^;C=DKPmP!$f87wa z>_p7Fi?)M$>@h`mclTX0vaz=>1=x>F@=5%1Xe$VTv8n;!8a~4LUl$+fJtV$`6>@{i)A%8!jH(7gZC4eZ;=A+QaU_G^_U+wHI0pT8k`>A?sQT z$uF3=(^b9d+oLS5L`|4IWbEy!5r)~0<5G5dLil$;dy*~L1a3W?R&&G10A7~9pR7p8 z(cR)3JX4x|?BeS#C5m{q+h}+31Em|G($zTmXKDc0V8AX&MRIc8EpmTpy7~tzz_z_3FRw z&pIJIS{av~Hu2Q+h@0z7JfJ;>N&&wF23R3{Y3$3#Dl`CngAySu^F^!C$Bo)_MM~%n zW1Uw~J!VZg6TDXggdOSm+oY79FO>=_JNxxaru0sERRTr$KYgm@Z~3g4vBvq`BWB>pAUnj($W-=VDdoA5wWS4TROPhbB&?7V?SBWDZMn5LIGxABfEmKSXQ^@{acQF18t+`r$)4 zhP{&eS|8oKk>4IWFIcs}v) zi^G>JR!;gWWGkA#@44@Vt0-2kC1?=#FGeX_dqE#`4V2aqpOIGaS)|J8EY*#A-o!&S zouYd3@%I-y+#jUIJ-0Le<5&68uVaNtgYUBsDdj1% zu?ZQzpOSecYc{DVcwR2SbbZKZcgg-F7b_8rh;nsQC2) z&{id~H0(9ewe7TV+#PDCcv z-UN+Edf_v-p4gZ!+G$X7Jt4rpVBYE-8XdT{p}j>?Sk51|+!U)CTVwNd-%g0ZHDOu> z5ETA@f}lL?b$@;f?Wq=o9~lx^u3;0h2+8H*^UT+!=@UhM(oJ7oJffC+?xsLwxuz_I zT{c8&W76{}y&^KFQYq2BYg1z-Jw5D>prTYy4L_+^eJ$Jf+5;KGk58qXY8$A~RH6Sm zMCqJ&E&j?Q{7&Iuy9`I8%Ih0w3wYMzFQj}sM5{hAu#wLau96VkWj4$o-dZq0bLlKD zi8B~tbDYIP8QJ=OE2x(I(^8l>#O!@NhR=;Ad#>Er+*QpOt!DmhVtY== z2v~010>3EM-WeQPM@L&ETS$AUfxdwhVMF#wtgM^a`)o|6O1440PcB{Qzw686ugSU# zhu7&YbA3STYS^Ev|T@R7*y((nShv)E1H1#C4 zneE4P@5|gdf4GihC#FyjFILQ8M}%(YavWgUioNkHRVC5RI|9yrpU`c-4sxCTQfU{X zR<1T32bC#erW+>-aK_(i&O5B`Lz$F>dGF*xhE?gc+hvZY0$D(JgDDJnJNt2GQj4}wYGjqV^ zfR_gg1jcj82?0Am6pzG-I*FaJh0nj)o$lNAq_X;sT=km-#j|oA%1vK%2KBewj>DDT zV<8he)||mgMZzqADTHwa6Ewh=ypFbtZ0bqxo=7T7TlYTlp2D?f>l8B0)T;jgA$S_+ zAA)fC585s)M^XruMA^)qu=re(lM|)9sWP^R60DZqIu`GI*nqI-l*etIFY!mCSiS_E zt>xH=L{?gAl`encoqC8u7NIB{_ya|7H-Cw;gqZ~4euAQ^nyY8rsU9a=)&pAQm)AGV zqv`&K@SRbt*KPYqS57H+292^V*O)1&#@Nnuy>jw6xsTmf!=a2Q>e)>etkr~h{ zREPq(qS~k`DVjDNnP=>Eb^xh-2ejSo!UX|dMf=9v-}D!s2F*^u^_&1#3rGPuIkcG= ztmM=`l<2cXVMfR5NE~TQD3Re826N^?63Q?B)LL$*)I4|fYRJA0v+sAy*BVo^l~HS{ z>-N}4T)H2Y2BDp257jBAjz0r~FKmREQew1;m}1+bO*8s7o9>a}A7P%Cen#_|*R3mOpM$U{z;^0E z3}y%TioDBGn)x% ztcRB39Vtksh{cv^COpVK->V+Pz;g&?9n)7rSyGfYvBiiI!)O< zgFPj_0<%k?W1_lS|(_lMrD`KcQSJPtW@jc6%iib%G& zc!`qZ!Raa7v>`d9lAc}jM)pXhZE@!PIkn5@mJ}V^Z91_twQziph~$YclN_--uduid zmI8A;7k$zdorOov2s>L4U(M(D2L`N&Q4)UlgFf$Fu`tYt4;zFtn?hMUPIHUAD8pJ5 z{Cy}GSzkg{b8y_9roDC2Mr&ignX&Y7yMf-XL)9AgySjBgDIc#17JbqWpI zX-QCUr%!K;pgc@Mm^clvT3iZVJ&|$2@()i4E zewzDh8UI4}yu%GEUGIIq({%jd=7sZr0QWN9@E)orWEn8BW_-!&W9w00QNc$`Yee4W z;`%bW@1=o@adRak=NMaggI;h5GvMGdSjcS__%s+>VfRH6ytoYJV_~?QR}nJ_y%%6~ zBirx9Ovgc-waV@pxvaaqB?WC8Ae?}hL)bw`HV($<7!(6C?}IqiiaUF50Y6G@pMMcA z-~PC|l^N-Kqijs=T3e8RhYDpw*<0}BxZSCae=$8;I;l#%FzOgyH`8VJK)Yoqar@_=EtY}h+)}mMVR_u}03O_N2D5@HCq`}Y>*UX)-5{JO44~as+ z)wL>4K>iJ>B2?CpNs0kz&p3{t8LWjAY?A8+8tc~^x!?smOgJFn?1nI}e4?XHHK+10 zQ(Cg}Q$AhQ*KX*7D7?BnsWirTh}K+9;BeD$sY781z_&`HBjPMyCVx^c%6u;TYH-Oi zz-|>^Rsk{P3;D$4X>g4y?=l=gH=!B1lz_>}^RI6XkI}Rm+H1!L^pCH3t`O!>c)$|h zLdYRwEjbilM5)1XGWGlPTbOk~_6ooEv%|ST@8o-4i7N-HYziiWzC5_=j{K(K|OQ$Q9806(ghf0q=pgfwyZ|Gaho zF6kaY;2|5&C9(vW;LLU4@Va?7q~?)GLTopeSV+RXiF(Ye;P?ODbVgKXSW4l?sZj#0 z5Jpzmf)JFx$Ju=?zxlI8{Lhzcr7pQ2_wX?Jo&BqDh9JItg+9HP`{4RU)>kjx(ei`9 zJ=zaX8M=;yBqa@$1Eexzf$(^QWJt0F!>_J@`%p8tiZ$@9V7NaRc$IU^S2IBCyKlb~wVRP0mMkXi^djkg zdri6c-hY$J{Pz`|ol8^j_9^Qk!3N8Qkm_O!L%$QYer!xs&Yuvq@Vl}2Uc=}oXuRb{ z(U$>}eObQZ@tOX+MqQA8ZWg$PU5PW?j+yqw=4_vF@_ z(+MUZh70~Rvf#7IDc^Yxi^P75dZI%Z6a#DQmFVL=fyAqO!s}}aWfj*b+j>zt<#fJ~uI)7q`JFHAp^J?upuzo9}w0rRTUkEZnEiW&?&_)EY1X z*lF6%WGSVWlJvaFb~;9Ec^e+;^vNXu?qBDUU4s0W`ooM5JLH`qvd$DOc2+V$XG2|R z(uvjbj8u+__B`TNNpqeKhW<3L2~#m_Fd=>iUgqksULN5fWmB`Ri!~CG98AEYv8`^) z`b_v$&pz5}{o2gUB|fXwhM4JdhxJ|YoLDcRRT5TO_130zhlbNf_|&_a9Va+UBB&A zrP8q5CjR8fqnb9hXH6jT+ePDa(S&;lcqR*#Euxxv>+_Q9BRLand|GFf?FrW|z5x@;-&~_uRjf{}adMj1mljo!Ga* z7O7g)`*8ZbS($!Z(euGSoTK+&ds?L59$=>gc{_^bVZ0w1lkA3dh&X%`nu8V=jL}nRNIW4m06k!ZI1ls{Kjr^cTP}XGr!r7}mGFw( zk%Lx$Yiro|Y+)gQ2Cn<1+94aKN$Hyx#>o8QIw=y7>g zQi8Nt=mA0psfr|_2uMQl;34;Y{NB8o_s5&}$D4UGoVjzEa6I|WSJvKp?X@a>#5GW5 z{dZYAUs*r;-YD{fc33D+_Rn$Ny?g*%&3X4CIREisKv@0>uL(?5-A8k&32;RAF%>(H z-!W4rqe(?qd~aO>wGdcr8$9>5CofRJg3aZ77(TN4JnBv=xJVi3!&HHkDP>OHy3@?Od{+CUH49vIoj0L9?m!fay7@{0`OR>SbC>Z7z0{` zQqx@;2F59BN=hF0Hhq5^sT{{!ExH~}Fk8`|6biRL4wPMa{@A;l{9Ktd=Er?kX&amG zUBezm`XXP*Lh)QbURYU?=b(xgDRz<=Vbia`Ap2!tPhro#;Y|Lp6}2kcln}y| z;JeP?T%p>I$waL?aY#T)pq#_`AN&2GT`F>FXQBJC1GK|)%IF{LWPmb& z!!}!orh>l!kS^#b{+Q3m#O9+3rn*<^27G?f`tpUBC31R1#COHK_5CSitOl%i%r!t; zGx+hwa3e<45{VP{%vHz7c{iXU4eG$%M73DSH(jj>55GMvV6BX1t!t8Hxa+A%@DG4~ z+qWRRPfA*$n|I>rN(#=y5b;ZBYq8Jj^;I`zhMQt~(mTz9Ivlt^$7+4j%LR49?;y z7h_S*8NoRXJG7J_Q;s@Rd80pANeb$Jg7sc}4vD8ap%xkdBbAhjt->>a>U4*>H01gP zafW9->p$ag`&FT1!p@rZdk>!D8b(b5K2K=l5 zquWilcL}5e&6OwT_Jg_M*c6uiT&ZRX8>v$L)TXkQMx}*DKD--AHkdt~FN5&TBDxmObCEn-Gz`yoxj1q$OnhR+ zDCk#EYOkvCONXgJ1$tgCKP0tFi{0WMJR8bKUG}$$Z{JcZct_(d;T3oxI5V#evv?)e zBr7-Vc>!^ML6E4AAib~p&G)gafqxg{-W;j)bf}UAaZmdi7c`EvOa}vNxha#`ja!&^ zE|y%rl(vvxoM9Vm#n_yd1yu**n6KI}~i({u(eKuff_ zvcFj2N13ydUBhOe zG|1fHnU6V1o2N+-MJV|H(`Rg>;qOcE)Wvyd8&l#xKK(m9?=3OgOfm2b20{oY0HTle$yIDR$tO=HR-=6^>+*6z4JVILH3`O45!-o=j79M_1RfC!Qjn5|4JD)V(CE z!xnM_@~FYUd}S46sM9y`J?8Kb0W8*QAbi?lf+X^{<5viHRvl_`MS{kC2~PSOVPJp_ z^T9(n|Nr&5D>P02#{q!24nh{Tt%USnc zOzixtob_OPbrDw5Q&!dbdbz<_Ir+QWtn$lu3<(*nFytU_eWGI;f z&-naMygrb-gD70EpHV>g6Cl^A?&1&kahfJ7DV|kwc_U+=L)AV+-g*#=ejO^JQnulb zjss$WN+7Bcj7kRK!B-boXE3*VE3gq301qk|^#AzdO0nL`A*X@@PbxT6Q?cBzh7h=v zQ#lyRGWzA-=du|3trR`SO}Jww@V@Zsx+^7bRY?x=b4TExY3yD)Ff##gW%l=tL%>y zkeLq&Z||2HDE%0^GXudN^_BoHqn+@K5+qx|ciM9iPAYa8Gcvbg{dA}$+O8`}C?j#Q zf4^SkG(-Rb|E#!K-`y)5Uc}8q$v1CmuD*2`&3L0Znug^o+Wn`fA%RI#^4N~=cG#Vk z9q#rQjK^A;ij}2U}6#6mxx#pLDu9^ zOK{eZ@4Rlm_E+D;n&NU7lfb!aQJpsYC1*#cC>a!(%#3oFliNhoi7xr!2M=gaAKdG_ zaHKD?Mi_yUZKkOp<+VvrEl}3sOfp15=fthK2hQy-ym=ssUvnxbR>=9>m4CK@l({>| zwCYrY7k9lcXLV)i+T_nX$2o!6lf7abDEhR;Yl`xW9|l4F zy@5INn98H|{C^Was_yt29#JI=QbHuaaruX|aU%%vmoNrYMmsx{L{wA+=EvHfhxF1aBg zzn5YSuTgm!JAa+kN=310@4$)|{}&$Sbd>H zis^k8XPj`z=BQaU`CGyRp*byLa1+{ptHxJyPxS9pp?gm(8Q_03Z zzR$NTQOvfsdy1k2PN$dfNAOx-aNg?Z!QH+2gW9!1(+*D@K3^K84xZjA5okKI<0R_) zmev^wEZii%5{>9wI5mml);G2V0~>UThdM*X>@rY~V(CPuY+HUb-p5 zlvuUnx5p#BhNNCCOIJ=d$fjaLdEqHwcruv^fyP{=#4t*UM+om#px8t_+1^{jlCiT# z+<4~u(9-aVW)X!5m}iq*!bH%}Dqa<$(m_@ztf^#7ZLp-+WnROIp-LHuJo@M03t4dH z_Q=uL2aiu-PR|+AtKA2DQICIJ<-dzcfrfbD0E}odp;+}-O2EwH0=Cp#(as=uCaPdQ z$vWJjS1eI=XK%Vp;S%9J7&;w5KulHrkFRitCB<)DA#l^*7OMe+CC&4n_{rfhIHjQo z6(cCv9k-E7Nf33eReu%mHTb)^*$;1HU|#)109y5ff8_GRGg{GoMgN zOq*WnBpSraYtxyXDqVw!EO^NMX6bm7*g^^R#55le+o<%nJ&a@z;JGhu2|(RJr!jvW z#)ej>inH5*VFVIt7NCbNn2s8270->P7nMQB$~Y(OY%5MZt(Finss!?& z0`QdL$AU?3k(Re=;nt`DMM+@yDVlbB&M1#)E5EqdVI-M~+K+%Yz&_8Kuv=7sql!ky zuFw587cRLUEm~Mqb0OyHPMafy@+~JAMjhDRMFAgR^GAY{Ab^3ol)Bg(0?=wdJDJ6(BN?4Mg@!Cs0Nk*3tg{d zl6xfw#X~8POZzk#l^jj zEleN8Q|N+|qn9rVzRb8_`)rFiXwr${zD350o5JP2G>xF8j&Rw&R^n=nlZRGOhg9gI zTT;H?c3XY_Zo=IVP`KJg#xvM}pD4eoQP~TV*kTwn{V6q&Gd~%@-IH!L`9}6H0(k!M z0{wta4==zIK4L~ zK4T>xWEB+@N~S*w0$OVfK-Jx{v)&RLo1UPAGAoC`5qrMw>&?@IH3r>Ma_x8P?wNJ7 zSuq2gb{U$4!{8Z{NcIWsN%H8dj%y|NICFh4RZ^rX-?!ZU+$G$a-9O3vv>k+oVi?>t zwE+lsM8erXT1mGf(dG7sp;I!gH7?0orqbmX9kQ<2ke(r`8pAFF3AT3=)+Am4nHQ)5 zMCt%jKL(SCNd^5N5v+z3R;Pm~^7PDlr+3cytnl)+-^14;%~YCN69U)fmxGR>pr3$? z5d{kBN8u4}6g#HwIeW6B#H~}rX2FkQmoodq^zuOU`Pw)u@^L|p1KvM?cHmta`w)^n z8!U3AersdO@K&(QK2)Ouy;xY$uqCuI|a zvZL3Bv03WwiY%wo88Yv05h*HbRYg=Z`5%a@|CPdZ7$q%iKi!C7!fH@7YPE3M9 zyfPjA7A#vSTsI z#Bwu`YkfpgxIem_XN9|k2Z|WlmB;#Ma$$d=c-AA1f0EUcwTHj5F7J(FT`N;KM{B~| zMQxNo)?naFz^WZ8*7YpFflS?PY<&AZ*uk0qYCXx~Bj4(7=7?thW1fjCFNm~;}67glQ=7;nc_X!Mx&+Z?B4@ik$T!8rvsa&Q+gWi{x5*d47}&p};MOKo1? zQPeTbn6-9UVdsCYj;6MGd}qoF(_N?njWEfHd#s z<&`S$!sD)b38RfY&)(X;9NoRu&#$o8_O|DJ*&fNOIrDxy};@0mEPOFN<`3R_oay?nW8s zdd>61f@dMGg2ZBC-N`n>%m$F|ZU*7?B*cgk-~~9+6C18_R~M?Hq0tP-T{Tq!XQG{+ zNb!x2L_Lo8YCAC&BqSz;OF6SyL|l6Rd#wq*e1cp6&g)Oxy0^JhlOK}xD^$nUP83BN z9@%elCaWkh_T8gQ{b}Ob3G#A2FJK2Rkkhv%ctlDfaU(%TiTF+8X>pL_1}>d zt`ttXE+W~gK6zUdxUDU19s)`}emu<9WViAIhG75k>5{+=9D#7%-!9Vnv6PLe62OD_ zKi3IZ0F=!pX@KQ0D;L54Bt%evLJxys4OZbv6zzY*-VGSN37c%=gAsq@!5^1`Xtf(m z4sa9tCfoe)EBdBCDik;%MMHGCrCOrwS+F^EA3$v$1g~p5 z4$v2XAy6Z;G626yJC3q<+WxLgNoV|u?od*YAC|4hA zyUtl`V%JsnR+5xk^5>N91WJ(+wld0c+VWBQ?w58Dazkj$v2>@ZhN1fcou;8}zrQtd zo!W|AN^|pzp0*|@{>RtvZpkw#{H;lDPU22-^?xWRQ0_ZlqU)H|zWwY2Z3g=IOUDLV zH>*efD_=gEbV)v5Bi|V)7Xfbn`d%*zh{N zLB>j{EmT2+YiI&frz2w zm@X0Vr0`J1@=%G&lJSv}9$EJ(^6c(HJ|Nh?3NT`O!Qhm$IXxZEHBY2yCLLAGSzn`9 z;xyHE_#?#sZX?ubnKP6+FKc7Ic@otkNZR>%h6+n~ZJ$%gs`JveKP1favj6d|S6NFR z{}OzHJh*~9MQ70!kR2lHtcFUqTOd-3j@7Az?tnI|-WqL@qweE*F4br`Ns3e=`IX=NWx$&JU1sSdg0TZtx0dzFooT zlSgk<OU4X}<`E^X zP0|TGU>kb(ExHIzRU@qm#9yFFxg zE=0<`$^vFdc#9#`(R^1TKJoa9TIzwk=p9y6!pws+M%&f^-#=kjL)4aqf$qPx{iVND z7q(Aumgd)~$LnN>UIxo!MiSdw_vQk8*~dn5p%O()|WZk z?j2?8@e^Tkz6oQ11G^}rU?m*Q^N(od*>P;iK?pWFR$d%h^euHR4!Sg&Ayr$Uta6O- zdV6#GCBL;dvb+Z{of#h7F0w{pMyt#QYa!lM$VF5RtfW*Z(+~6zFMJ^4|3wL8U?Utj z4O9TU=_6^)@g+0sN5*DHqOvQj^(1c>wYLMEzrP^al6nGMQ2?)DfOimG=fMEWeECIO zi$1p~>$yO<&y_oS_D)GVXo~*0$C z8rdp0`M${!QmOWe{VQkohYWr2nd=Z}G%8e+5ej9)Ka;=@5Z{<)uoNPg>oKZpH;m~l zrSt!mtX@{^I4m9-A-eBAYOdubfp!zgzKCa!^9=syLv8~Osbr))vtJSZ44vDS)Im+M zrpwIA$tCSxblWc&dn|^#jV}wha+D(0@+s5@!pAfelx)41ljoLt*jI0=wQ1Slv{RIP=^Hr;RmgpqtN0w1{ePxTduE zzqW?4XC7Nc2d5+>Z^NtKs;?pz)8iCZ!n@HuI8?05S%w7&JVJxx}K z4h%h7n&$;+IC2o_6?SS21@GUg#|NzoRGGbo!~NNr<97Eo$$#p>;HSU|fWe#^1}|}! zn5Od;gCo1vFN-YKF!IOFCJq{>=l9(cs0M1iXkNGgc;ws+?3bVR;16DNS+T+;p3J{L zb9v6g&PtkkzfP$&&01-e5i*7A4*@p`$?r6Sh`T7@0MZhY6vYg z$Ya`E3X(p@m%edNJveXq(~HzG_{ASGC!ZG%!Z9Gh%K##**RVj_JUPG)37698(dRw5 zBaQ}lt2XM+)z|#ytMJ>`bG2mO5a_abx_yPx^^W`p)EZO!M|lBX!GQ~GlT597<|k2{ zbtjZ1%6JIpIP~cNDgmq1%JTyIxpXo>fRfk{z)axX9(1?6UoZYeI?>)Pt!>Azf;qci zmw;$FsGl2v@6C)>a-3}d5G^&a+FZrEQF0mQWN(Z&aMZ9!iqGRxU5g(61!ffHOp+WF z*tT)G^fA+UUkjb6K-jaOTCcN{`dmm){W@Q`W>N6zTNV}p5-mcwyZEk9a2kesV7RYw zE-7s;CLb#YK_aAbG;mdPJ8G)ud#vH{;2Vfa_+`lIEP<9_u7=I-5D(z)rm!fgbL(15 z@6_g#Y6gP5sY>#kk7SjjeZ%*6}l;WIm%D4k+QcBK9J+PN5YLj%VK~Q zHyCzBsvBhCuJOX=_Z}yny8Z#okfoEdbNikW>|JW_O7mHs+$@axUKAGoG-K}PKBE=+Y|A>ph zh@<_dA7^44T7({coAXDz7Nj88OZ#{#GO(d5Wr50d64($%Xp!KSB*eOT6Q&8BsNF`v z>bmrXfsP*s_BF2XVJ@?2)rsHfXrkmU+$;)Wh66I4i`(j6hEMxy< zt0Y(u?BB&4+g5LM89;Xi4TkUVa9U~tefStsj22t;`UN}QP27!d>U~F0am`;)YEuWV z#~q@%hXT0~bFhGLO<0|?f9i0)v}1tfWXkdhP7_dN7U7&MKZ zzjm|X!@DqJ&)@X@y=AQtK{vrVge1VX=mD1;Hwm8dOLM+uzY31=1zfPszuc_MDLwC1 zlbU^!%Tdw)Lxjt~v87h%f$U2vHIDi7#ffxJR;=5L6QAz{2kN1Kp7k&A9eOD6U%>39 zBVv#0!)x$bkFDQDGvTGy2K`!#w%q1HD0GN9#N5Ez%9R8<)oos8 zFDdi>c8cGMv8hdKs;tDmztEE&mj>@s)!>l z4R0%WoPR z>9}0A=?&T&b*7>G>Y4=cnxKvIW9??yuX*WyZDJB_U_#-1s1NmvhuR=w>}hOvyi=-q zzP?S6hx<7%ZIeU8%1E$+UOwns^>x8bt(A;tS?4r9M--`AM-vL-BRv`7bE4lfWI{GIU~;t#k6N%%9` z}zx`gp3Z?pqXtb3hEN=6q3Gn2gJaL=mD%|0iGkTvBSLtmr*>%Rb!FY$8@wxDoy z5iC*7rv=`|C3y}G!)o8X{I^vWZjZ<82Aw+-M?b-+1I4l;DOU9jU{|1kkAv@~c_ahh zW$K}!gXLVVta=U&WjZ2y*4u?Og9@@m9bC>M{5}{4i-9)**>g1#R+nVFH}Vtedh(n+ zaBkg;?iB;7Db*bTU*&z8Vjt&sha3UUgTi>m+lmF-QH~?m&En%BqDwZbT0gl}T)ulm zwjE7%1`Vozlz904d2_a)^;ey`4rm}217T@-VzRb{R%haV+(JR>!{jM*s0H+9B0Dfp z8>zz?*{XBp{cW;*!%gn7c3gg*Jtuq2?EAyJ6+dT>pfc~2ozOi$WqPj+4G zF}=w`d3{-U>(~wKs}wWmg$sd^+U1#>UEe(rWIrLvAFq4V&Pc}WvrXAr6Xv;g)vRUJ z07!F?xJwl1k2nZ^H32&3Iq}@a$GkCd#QyJLdby-4>H0h7)xYGuC#~Od+jP$?LE)`M z#A!L$Y=b`SugnGGQTy)7l!uEeX%0P&G3E!J#?_pcJZu20MCfRE^QTQOcwcNq#gdhu z|J3w`QF2GT_4ZH(3neouFKvMC!8O3hFevf_G*)hej@eUF<>C=r3fa-CTj8QY3#Bzl z?Bn)Bvg^PBngkjePXPpQ7Q5Z=JobrQrQb!bWg|pfU6N>T=;))fl5cm|JU+OeihGJ9 z&|)!N_%1w>7ls9#4bXtvJcvLKRbmD9P=(j-2`ny@WS0o4it_2CEu*WzJ$HDHq!)t0 zdJG8&CyA!K)c&M+>sE=?iHvvco!_^=Mr{(OC{sziK#<6C0FF`rH>|YD-|%M($4Ve2 z0Kt%b8ki}825@?mROLZ83!RejQCNM@wg`_643yH@X$-dwyHe(@dHyn>)0or3^EYX~ z_YI5dy&T9OK9l3gau@o&d`l%y9VZ+$AHSBDY2%CcNJXvf#cbCD`DyD19__OEva6TD z+e<-k)4`CD#J55g_ikV9_-S&ab0C-OSmoEVCM2kr{q;<@i}RxgK8(CHBO#CgV{Wc2 zbz-`rRpuIQMjLVkSV}~-`Ks#v)k~p{kx(vCm!=VAclOt|j2(AT3nNPK_u#FZ`@0|Z zD@(0@7gP_(N~fK!62J5+R~M5lq(6t@F43Tlv@@t|>? z3upjHIhrcinM-xC)K;7;Cw1_ynD5eEU!OsVe+t~+6<9VBo&ec05P*`vlw~w$bMHDR zO>3|RD^I$3Jd;X_(f<1owzja@=2l)G8+F<1?i<{YF3@~yx}d!M5s;%qJtSCz-D_Ei z0SwiFq*ZIQBnB(WRk;#jQT7-cf|%EdCXvPNqiaoal5Y7H znk%Rc*W$*s2=NKECP!Brn|*&>i>%tdsDm=Xx!aP@Ep|^Q{tr{-!*C!EcX8wTJSheb zFxAHPz%uwV{P{z`fsXvwiRyxdfBE{2PR&<47x|;Vx5d7T3zqk?i!<8{1|cn&{o?p} z3!WY@GjhBM%#1Y2e?6OA@K6eLbD9E@n^N<%Bp$x!=1^TZYtMn>53J8hiI8@_uau2D zJ#OaO> zaBOR#AD%_n+K$0MD5Pto%NEY$EVMtbuBgQj4&I)@H8LNq^sOBx0%cUU5V5zQubLX* zrB%nVbHpO9SCsdbx~e6ab8XtC(m7}Fe3}wwAy`zTsOuHCx^gejg-feuqXLnN&V<95!3=HRc(LP4zG0gC=u2dmig}Fdc#kM z^3MiW3Hc((IPDh5z&#sUqQ{z0Ov7(e5veYi*E{@+=%-dOHdL4O^Kmwmg$y9qv?3kF z#>ji~oTEF5X62rN%%PVZ8~H_rCyk$!N-G-Vwe=*-Tm?SE#&bPjmki=lQgA@FMV%h| zCiUe4HCf5#aME^-OyR_ZWhsNDljvVl#mDtNAc?^^2RMxzE zpJViik{ufZ^BucE8h6gcl=~ug+7z7IH13&S$%$pqe#Y^gQVr!^V5eus^jLAEvJzBR z`5S8&2;~?g&()J>R7w3ntqc$D5@|aRVcLbCsSW&U&QMXZ`(a(%I?5*i>NhXu(rsuk zC5cW;6Tj6j(ZJ32G7?}tC=|Pn$f8`0x;r&%D4(1VKNg@_w6LSC!SiFU5B{=t`3cZE z5ik{Q3pC5$Jp=OJfm9IM8RuN3?)L+z-wR?A6 zk39Y7PSCK@m%W8e)|B=Wz~hFLj+Fbk|4`aAea1J8>?M+=AYrL1RksJ3D6DS@>TmxI zF!9`tS;?n>b^GAqEsy-jwrEM~bJ=o=xfiYW%wCfNB{~{=a*~^lGXio@$RxZ1{Fma0 z#d9Ou*J6i_{P42PHDeY^J3m$hXWWtHSDkkTHN*l#!lzZ)FPWcrBEZP~42CzoIY>ag zcjnwjCiC36iAj(j^zlZIqi4V)DU#EpYW)|XcHVLuUM73Dr>kZHLv0AmOZ+qf9G!kp zOEev$2%H>k8*X#5J!2>S<0B{-C-nQ4Mid6#8#BsQiAPF9zMBP9b*JHU;y(GXUfOzMcardt>-Y4*E20_?6xg+Mm;ekR4X+^3@ z$Abms{j&P2ULT1;+~ZuqvIyN z1B9;e<}SkI(f5~P|3$5V%Df2xP#}`f^kgBFyw$VT4Tr)QC9@;BIVr_e>%zbFWD!Kr z*!CL9B_g@ccsTIfH@OYDfj)Uo^Rxu5&i-=9y0fZB5^i zGG<3TJ`b3ogTobQr|E)C-Wa+GtU8040`w9`?o-Yn-L$sf=l=4k=c0^*o8DoY2BJS!4;3pW#4g-EWaGFTa`=qJ;T-_a z^a7Pk23v#8h;iiN>63|*2~?maB<`?zP_bM+Y3G*-(aR3wd#Ic91m)@-kM;gUTM}s6 zKt2Sof>c8SvHrSF7Ng7FFPmGuu5hq9HdOReO_+zFquq^=5YH3Cd>UZac=Dxr-LmFI zi)lH@qW z5UWb@7W%L(wr!;!J=LrvXGD+Wp=ttj51JA;oLesC&> z@CjrL|Lo^70CO5l)&Ynn)SR0Mh0|o~*w$+K$#rFapRYF0a7N;1D-WJ)d9~hTjclc9 z;sSYB$31|g2#p(ml#;xn5mW}3fdwl+7~G@u^$@8z;7`foSw4OI^9{66ICt()qYWV% zR4;3zX?=vcP%e#Q-AW?Sl0aFLNg=KDH}tH&v-^6VZ}pe&6`h2Ea^BbG(S@yCrY4Oo zfoCJ&aqw`HP$3IJM{0awu0RJygx?>286?Ut(^LI&<p}RVN4% z>UZIx|M&)Pa49@*di39Xfbk`SoJy|f$+<)bnZuPVXMB4IFP?>$_ZreV4$}4oiz|Rm zqe}{;IOz32;8a3-6e1&J9(kPysJ}WI6R>B$Vsh!<$a>$ zD;_)6pmdrozGnm?Kg0$Suruv*_7)LogJ)|lR1%X^Uv zwvY43^ToGLwc9MmH8-O+(|Zl`@gKm1`lHx;)VX2EDp-b1Ck+4g_GERN|-M}`*&WI8=Y+Yd^kc)aQl@emqIcgd>h-L55ofO$n(&3xeb3PyX%M; z(!dh#RCOUg=Cug9E*NEZQ?cX=hBrrSM8jm?8Yx=RZDUoJ02Hh`}t3tb1d5JdgiL9H{Rg+g`sa9Aj+v!U?AB5;?OlqU9g$OX~-{f2~ z%7#9Q_}qWASIOtr*cn@w%*F)k>L#0rw?NLWxOZN}oOGX|MlWm>w&AXh8d1y&_zr)= zG!`=jei?i^d)a87Q0CW3>PlJaK(tME0MTVHOq>g@w?s*G|4Wkn20>IqKKmy%<(>St ziHaus5gy)4$F^7X@;*8T)8+4AH~S!F6dP$(>F6UXX_#<~p?O=DPb^8uC>PE(XLv_a zE_or62OSi?UiaxhCiVS(V%N+|EK^MtU*Ny?np`zjNXTBGU0n5}KYQAK80-Bn+!vv* z>m!uUthhU*KJ%<^URW~3g5(}EMY#r3xqG=0EJZTQzAlXdNppVEV;n)fZ)Lxq{9~B| zuZ8T3Yy?49-+zNl1otlzPDi{IM}AKRv(NvZW%N%;>#?g^PL5`S>qpMVo%<0GEvg8= zeX{3F+8f#RO$lBAn0LWf`;fYx$aG#ndEd2V!{fHq+6KmQDqF1J=Z)0iL6A=O-EFP%BLqJCA}t0#ByrL#+H5iafhtjUi_e zpir{%t@na!4Pg-#^sM#MIpeT!Do|J1im!ptMmA5-m7eD z!p1|bON{6ax_Y1XUtp>bt>XEbUqNx*Ds3TU)8pwgSQ$+y6XM%vy|oo%cwuuFL9?lg z4GA)>w02otDJetG`DW+N*3>67Cl}j|dewwa9joqJoHELc6|m^3mNn>brKBj~*?WP^ zh|=mgHE&8Q=A2QeWIFlzd%ahr!p-)cv*wndNjxKr$~2e9UNVW$1uaLvw9B&{3mn7c z{;eYP?%eVD3<686?5 z-dy_z_TzYPxL^EVn>r4D3y;L!fm>h-XFbJF0(l6K(~pilx)ib^VD2?lpak;yP&1{~ zyglV}Ar8Z{0&<=rG1^I}in7T0ePP!-_D5$-QM~^;$_X#x?Iwk;A3(tXka!-#a1%lA zk?I25)FND`5Eu&sjrgPBYh?-~!BpTQk)NhI;jol!WrCo;^gX)C?wfD+9-!#Idr}mt z5ay3wbXZw#vMpa$oic0e4|Syg=^z&!@0=|~kU@hiGtK1j^+zDY{`KW=f3 z7jM08!%Uoa3DeUHaiu&Dqk;1<7#yg!oX!+G58gFyc(K(*;^Ozw(Tbs?)X~J?Rj)?$ALfldVBH>YqOwtM-BT zTzm0AmRhEcS`#J!YtW_R%@re#dy$evBHr2$#Z>f{W?YEAeI$TyQ?tm2GS74Cy_?Q9 zis-=B5q0V&hSr zB^9x)`Q^Lc4u!XX{JaX!Ux^nO3f$=e1gyC-Z?&WIu#skc+G%dPe)I=1qij#)#`oD> zBrBgjSLVhAmg=q!y^-zpXTw4eiL%v-Eg>&vv;n$hgMKO?a%Vfl3qWujErwP^4^Jjf zCdQZ+VI6)PU#Hr(UK|@H`sx1k_b}$XebaArg{rE%v^AeQJicTN%A^>AGB!~TO6?71cpp(POi^e@b>${>L+ju~J ztVLVpbkT(iOBe)b58gVyLGtOM8@N)yo7N15ys-ehIWp*E^A6Dm<=hq)Dtno@I2yg@ zDitN*w%YjTUD=-(^yUhXyEe;zs&ZH~VPD$t->HHy)YpP0jM4vdCTpvnhs|d(0D%Fo zs{NdWkp@U0F@zMiddcX}2kLXn8#Y$B43O%I3KMyXz!nAh|IBEbrl%??CCqpa5*n^&reU$PHdHmL?!UZRkW5x=g8f6Uu8bzelJmGHYJHE)giesACKBBDMKNl_KSW&Bn8Mow|kN4Y%JzG z*>$pnacTpfSUq<%=Bk=OmQ-ls3Gz3%2a3(`aIxuKgG;OswXjdEsT^vmBGZwMIWy}`Z!h~0XRBb`YUwxa)obJ! zviT@mC=}16rTrXm0d^h}5&ZFC3rvq}k^H1nd=71QaVHjki9AiKU0clm;j@g6!C85! zXt48Hc{G332t&B@C+{fQ?@_cosb@W%6fNUL06d zKA}YgKdEWXXmeJ{F4?R)Q=OBj6kO<>1r~^h*z~~U!X|$W)@$JnM1tSNo0Nq~z&(7F9e=&D$8=6gCu8u5Il*t!E)?s*H}o z;I2F20>(|*(HfDI_F0NV-gD-XlA(`p`f=^p%C*7z8@NRLl9tqHpHR-6Y78?;w|FOPLn@gDpSRvMGwIXkIvz_WBv5t z8E_sve!+${imm3`5lID|J0=`?O`Y8C^WgAw7k(DiCe(zf)<7ZVukl@?I1AptK$T4&dlfI46M+UKCt@+MJDAkE@HB|rdEt0w-uBdn)*e-@@aT9qN`AYOI>QS8ZmYI*13Cx3bLegE=972w#Hr~S=mD!t--qMk8uQ7 z$`A+|88DLuvuJ5*KEZ9o2QNXTQ{16jwKno2W%XM_=|)&jW2evYSw7m4*iYM4Y=N^2 zp1aP~<*IN4xh9=1-tc&Rby647g$QPx@w*EK`5}iaMy?(iQGNYJbu0JNi-Fes*po0* zF*+Z23x~m>fmV(!<84@NrqjIE?TEs0(T5fF*Uz2T^HV{44qG&8t%3}U5bq&4UtGXt z#dC)!cF|mZ?tTnsbucYhRS>#lPIQ(PyWI2ABm4y6yzB$*SDNJG@CPto8^HAj&KbBl z0Q&ICS$uByxU(Y()5PaF-*JsGW93hDuDeoZsl0n`yudpEu5lA5OdFo?dIc159#|s@ zaWBpnk1?@UnvHo8&F{z?-JpSVC0ZJ~bB&Yu*i$Sqf=S;4SP`B4LWU*XXMSCN zj(b=X=8g*dXLqKTsX8E!;O^nVoMc#tBpMJUJ9j(U8ve-*lb&~|b1?E_Iv>F|3@CY8 zNM`07N&EJ)bQl=b0={8VFa8 z?BL*n8Fv`AcWes|#mZiF_Y^#yXfNq|mXMW`C=HqwX83vcT6p0Xb0ZJRa6vrtV4!rV zwD(e{94FT~_LTLq(yWHne&u7uUJqt~a_ypDQW%A~bk6sJE3s~ZX--LXiTJJ)L!Ex9Rboo0TNmZwqyfU8IATKL?{$UZm_vEjCbVOE9kfB^I zBL*IYJXs~)Z8{Ho6t(MFcqJ#bs={1nrQ`b6SK33gG*IrtQOoFG7#K1e9JSysv7-{E znGix;$eWu5q#iyU_0h#ntby}(*Pao$qi;Tk)M&2 z;^pqjyvg`74X9c`BO=b}P)2WpjF3nE`KuPF&(kIKSAkC<=QM!N$Kl7(9MA+4;TUaL zAq*Noz9wihn9r|V_ZKb1_kQQ+$&q3+W{LsZ%MbpRzqwx^t*{ydA))@}e6qaRAVNa` z38sP+Sn3hrFF7@tECo6TC8~kwZdYvp{+f4~Nn36!E319=(eRs>>;-`^6!dN8y=}mi z{llwjzd?S$lF$$j{#qMk^D^N`p!rwzl_%|wUIU_7LRZHpN9;z%CSAx7rw0z@ zWep$UF*ZSN{2~+zQa(%VG>sWtC`Y)`pSh$8h5YbUT`(Rm@DgYeeO#U$m2B1sD*d{= zdrx_R_%^Vv6L_YMCRGtvfZW>39_>-)wa?)p`$R`inYzeaiXAxA0!*RbscmRYl}wd3 z*_pF6y9HwF`WrlNq+_)1{>PUyS(A@=mJi)5Y=MhFL;=3+9q+cgl~5fdImxM>y_@d3 zF|*w=dl_U1Flau~xVE;*GIBDIau>B~(CF|aq2$oyt%u^1LqcJ90N_S6Pj(QU(ycE< z-Ci8g#9tij2t$4+*@WLViR~NM*?R`3Bc7{XB4iIfx{DW8isgee=9Oo;p1Tp9=k9mr zMYleVka@kJzglptbOmU{)O1VqxOT5RtgBFP?G_vq=#IR_Kfoh@3c=SekKeW$;SknP#o9)AKDt7$&9150u4vtDJjxah{hJ#w@HeS-B@Fa zWDCjGgqb2KLe{Yl+1JUwH*MCz*cG8LGj^G=^xLNJwc_)DjzhyP~2=bEfA*nPh(6w!>~a()gINer2Cnab=U*n0RHE+_q8gVN%!0TN4nRl#IxmSsH@M`gz z9?RIyo5|wFUj#h}Fx3aDFBB^VlUPrn1696UmfqD$t8)=2j=Sbsn*Oe?(GPZc?1GMD zaN}SQnv&qHLJ0U^gM&KVaNtsmKjs29^-C6yP?Lh>FP=R+WWOoO@Ryl?!m}VrmAPap zn4wE(j1~V<8a_=zj^44bX3FsJzA0B(){htE5(i*r7{2=;_+h@-6t<^h=L+P}Y5W5? zg<@>$O-h|q!nN~m(O+(UJyFJQqjUwt@4<;!6$Xvi$tmVE{+Q`o56Z&!&I z!Q-)k(xX??%RW zELrO{fq_Lf&l_4FvP0@m{0!rq2rFBL{$Sv(;oIgX8ZwUISy>$F zU};u?2k|34VDO*dxS~I#eJM@mwFliF@;>6SM`q2<{g=m!$WjXF`XXYAX)#bt~C9F3+xO~DJgS>lX}w*puL zg1)D#r3?br8v&c8nWdO?Kk-~mMvtvtEmy6C)-{FxdtvX%5KNx{qJoB?Yn0nP%Fd)U z+X{d+0qUjHEB(W_!A+*7!_9qWboSyns-x@TtfJuY67=Vj;Un^4pAA#DjU3423Q;q31q z=Jzi373pWU9ZP&?Jk39X6K(qI6TCE8`9k~|Ap^;s;y$XXx66L}oF$|kOnw3ep(UXWM;O*LkWK^RoLlV2 zC(JfOQy=oJ;$s>YapT0{+X#;LAAAMg%y3D8>pR-k0qN zv_6USoTgeg116>Om=;z9^J;b^>9_(ZsH5yH;C@X2!rW%3nlG4k@&~cO8%D!7_XwJ0 zaoZNUzMu9tY5km7v=PM)Yz9wsa$C$BL0zUc9ga{u3_4SU3BquJh9XIXM4G&}uGw|g zZFup@3>eo%oU{|#&ta+IrM%Z zFHFJsTe-X&UKRgxo`JHu!vlXze1#`+k()qz5e{BJ+Q`1{KDp$%r3VKB_0F?)uPay!TQbi0%9}C9$@DhLs z?>lCY5|GysNWA?q3{hgV7mbGal_1HQJ-T*p!*qLmJFc z?H(EN2Nc6JxVI2$62vP)VM{OF^yqIg_ofKy6r0J|#0P?D3y^1aOIzE{nSle!>Lq!X zwm)sm4s*e(U4b!YF~eO`!dqo|hoGiVc(2q&4^%}{GQ+;Hr6rJcLHEX0tn7V2v}fw9 zMOUVHn%C7lki8;O$h#tw-)vf`=R;-)<`_$~gg{2lA_;i0#+UpaR!^wls>`N?O5R`0 zy{L%t0vY2G@KjO!R6;=AbeI3NYNxfmgPF|xk47cAqYPLGzB3{PI{Q=lJ%8OsFW5T4 zWqqLMD(X}(C~rK&ONi?`(^x>)RT64R^V+$GOTf=;XJp<3zO(3Gec--s>(cy(nUYDB zuhyuY7U|0VN6fWjKG-xkA26-0A5f_DRTjS=(FI6iO;OC{w(?olIJDfE+<4A~)tdAZ z-86JwrMSdx$8>_#qoPM4{^_NDfI^PHyddO3MRYEUcbyE+W}807h)U&0raR;NcvSZ3 zWRZA5_f?t|A2Lik!p?-A)08RuRmg?fLc?ir1pZM%*;reVc|*TV1lRQQmGdV-S^#|0 zn!QO~vLNz>MmN??r)e_UafUJmvJ-PoBfjJ(kr^qve3ygTd6kl7wiXQ=mczAtBhD?xq0FJE~5V>kdEgT*kXt`FgbRmjuZz9ZU; zYpP1(n(MzTat5A8^lttjNa?5v#y@yl{(ii+h$72LEkFsM!w9qQpJ`n2d&ny(fz1O1 zEP4Z4#aPu=WXGw;rJraX&$f%vvuYa5p-g(3Eussd;v&cUq4c#N&Zwudu5bBvPe!cc zah-U}B|#3agcNVXy~rqLHfJW=oqf;wN{hJxODH5X@fgPw@t%?<%C5fhbAoW0`QP3! zJat@U*zcdYi~-bYpk%?6w>4+NN~uN#nI466%r-*=Gbnm>k~ApUiGsR4+A*Nd0JRbU zlYPuJVKbhX>OD>DIA>8EZ^hg)lw$hJ>KDy4nQ2}OANW_?nt;a}0zNPQnFgiC!=DH6 zfRx}PmyFd8zu7Y-JeTZ~A(+$D=$Nsq$j82}*_QKD;zFL+P21@|oM+M7_rc*(j1s6K zwo{>&a8;AeYRNoT&^nU`p4Hl`(7rQvRrim7f4yVO^4*TGv}V6%%x>@<47`BPE0tf< z9@H-6XX~^RCjGG#oKr)DOZD)n(mpGdY;P{HHyNvilcX;@OU`8G-&>E1XaSNA;0jNG z&jJetPg0Ynn2aRBdQe7^6NNGTn~00d**>X5YxBpR9^dkeNCf%#2o?IX52ne}*w4WZ z4J>l8)n}%ytTpn`Y*?%*8IoB z(=eog$;xDwyZ%XR|}qmSkg@n*@g)P&YJlGP}S z57QKqAbwFHTdKWHR`J%rpOZfG{lG#B6OD>S5hhqs7(%@{jY=Djsa8UV6(@&mJ#+Ut zRKBmk$4l7ESD+<0quI93%kxNDfq2(IM6XMmB(IICLg| zqM0+fF*=`G=;X`QB-GIF5hd^R>D#OOC(nCm*aF^uXu_cCRv!_EgaPIWR|I2 za$78WCP6<~7oP0DD_P)dv?omR%FWYTM|#bEa+Wg|y&s|>PzR{hgSX@dCU5YJ%WeVv zr8DyN`mZ4Y!Ql`0{M)P~4bYQ4*57L%aVk|v@dtrbzGfz6-i}~}{nIHr7)34dwFp!u ztKl9(v1T#X_t=W$or*Tx;JA)Uo+RxDKY1N|)_|$Q)T!s5)5}6sHxk=>K4GDnHxS#L zt#Ll1pYp=9CUiv(~+ylsNMt{~$o)mt%v|kmR%2MD+Rs^}d7L608 z;pr0u8Je8$RabnTxAsN5;xZR?_fN)Z?Uww{@<0JN1Y*U8JPf-a12GL+*^?IQQ2ZtPoNtG1(Hpp)E ztlWmV?b07H9TOV2Xlah^Y|q{j_zSHG_kB^;4Y|0hRm}Zz(^GDcik(X=f^LB&^WP2> z2pz*o_dy5hT`h}qx|{sC^~NxVq(qWH%*}Y3s1EMS>b>Q#4^P3@tAN<3p#hzKx`*ZV z-0tZPD$t-9SsPo-iKqhlXJ37N6FeJh{JgH*nvA?+nf5)OgToA%!~upCYsCQilS8GK zbQeGZkWi7XGvw+ZpiZBV8bnjw_TU=BMP%ru zt^_O!OA?Ji=Sf8&;a`AE*!Fa>l@QQNn-8h&_Yw6yA9QqPD(iomP(WPQAHc`$M9_oM z2R*17<}!Vl@DsD*7Y7*{T-(u9Ub=iDt&K19-<%n1_i>}1)n;2hi0YtLfQ8(0tX=B~ z3628+UuM3PIy>xMk$O%&)+d_J=zrvCo_Gg@7!_>CI9*S3nI*?!`JB?Y2>DZQuUI3G ze9o?a@`jT$?9w@f!W%%NriOmM0?w&~v&)s@YB=xh_G7=m8Jy6n2p2b&U8TQ0QR&HP zdhR1oas+!E#D=t{X&&E+)cRrCc6p6rKqifU^_Tj!Ts^IMt}B~7+}Ku{2W`9o3VnyO z*P<UpL4W12 z%P0Nwx3Bj+e?5XjnUlqmfJr;wiAeZxn@MX;#H%&V)1UZADnb7GmDXRJP8|T^9HvkH ze74^3&Ic@tfhrO>c9qA*DL9~F&pVOkHh0_BkYzS@!AxLVM?frp}yjpacC+XDF=h1K0U!y(Ors)e4WBNJ@Tt_55#ayLL$V zY_SlpEPgAP$_z$_i#1DL!czLBb~T^^nNvZW;6;q5+Qtk~H6 z`psjp{Q+nfsF1>btTy)qxPS&aWZKM7`0lu>`9`{3wXPA{!RcYY!}{Gb`HxE!zH{-- z7Rz)pjWY>;4k<%9q&cw3**=5b4G77xTi$}!rj;QI{cmoqP$brtFEm@ehu^ULl2)5e z*i^$X%MEDz0cA=Jnx1a2(*1Y0;-eil%RgN?Df4|kEJqy5%EH~y^_m6(P8K5ug*KzF z@7FPJI2uMe-7(4;yzx`d`OFe4CJiTs=5d3>=^jeIS#l91XL5}1$h++a9Ud3EHwe;N z;s>v`(H^#*ciqbWmm1uH>v}v?@}Te{tiK71UdI@_j*_sZ3bCtuD&J4$x`p_v*KJJ!b+YJjEi_0`f_IZWYrq%nsBbmwU z;tt#cY>EKa(>w_!tWp4Bvs{vigvJTlenC0404^CiosJWKG%Qy-o}_(7lX5*P6AXRT z*T7IL(2X57-uw_t|H~obvgs&ZC7BQi zh$JO;^u-^u>891MnzL_8Cl_@K{$YstalnEg!&^5xZWm$ynoB6+dh0O`Wd2Ex9YBF5 z44P;^X92e|Tgs-XN>0@u?3gu);_1WYeeMG)k2SyKm(G1$I_-WG315I`!K;*X)hiyK z!$;#2&D=7_+Nf?cqO|DilDH)S-TW_mje1U5O_EgqHU5Ya>_;w2UlGi5l$19@Y{uvo z?}GEWobAy(PlW6Zv)^Jzkz0K1$6zc_8}cf}Y0o6@n-2dmi%29As{7?$`xMwTmd&db ztX&FXME~Mz+sYE*;E()P)Qo3v;~9c*12`PP;ih0iclGEjx)jVZMyR?bR0h))Mi!;NWG-zmxmryln`EolX#$;Y(NJ~K04?6QF(@7OA(~g)Nf=47o1gyJ=A7mg$-sEbrPPY(c*)o+fRiNYPb{|8Yc~! zSAeri?C?W0`~gesvc1d7B^P1yx{{k)8tD8_X-idsW{aJ%x-u_w64S>y9!i<_5m`Z2 zXVpN}k=g{m?3WN&Dx=gK?t@gRXE76)|-Wca<`^D3uKN zHiA^=GosrptJyXwj7*S(;Pl{A;NVu&$Z+XtIRR@-Q_kextGRr>w)O>)c&xUF>3(K} zNBdoLX8I+wAP2kR$cCW(KMa?E`9Y5((9efq2~ekr1Dqp|L9aQf=1|{9?`w=;G|cYQ z%5PaY9n-O{`R(?OcZyp!fa9@N!>T?Fn#546M`y!hw0$L050>G3#?=*PoCZ36EdWnP zz<{7H*F#3(QQpQf1FIywBw3Qg;~LgGIUs4sZq+#JNE*2ZN)Pp3K~Iqz2VXq{#&sLj)&D}eFfqUCuJ@+m6?fx7kCNlN*%Wv3dm%LpBwE|vu5q7 z7;zavkL-)INHu=pD^Lcev*0=G6#J2@EqEcf!KWThWFPX#+ zZT;=;4sI7Sjfx#pVVQWw6oR#)OYE|4vS*^02Iv?HbELzu8q^EoiP^~uWmUYVEeuQY z1xQ;J+cuy&3o*0lLh&EN z<{fgOx=%p;?4uW3M>u&;e?K}$sRhKFV+5)dV|p-`L_^8jcG0EyU$B5fYs_ScXQ9Ho zo7rPmw)}1_WLj^3OIbS-R)!ZF8wJOKqJe*&Yp=>W&b_BZ)<$W+VdZ92lD*N9u~d!q zoaDk)DE(W}H#lmV52`v1b})bnbmmZrJg@ZP->T*020z>i*A+zVcQMqK9PwSgCWRh< z3X?w&j1Y+!LZ8+k# z5(g+6dhH-+b{s_l=e=^o&;ECau?bsEJ;D08fNNEOSDfUVEs21fA>pPnUY*<&GKKY` zS_xq&YLBWo4BWSGNJqwA+ZK$dKEHT0Z}K z{MBFi+abogls^7D-y(5MI1)KbXk4Sa8c15;bg}oDa9?lflDB9|`xNaIA=~Q8F_((q zioG>X+d|tlBxWjlSxpC6i2mh>Uaeb{Sq;<#xQT~(r`p{QYE?@)k49w(N7uv$dT|{Q zAOmC_F}d9cM-8+l1yqwHX=Vl9oIqt2**nvxKcE!<>@SDU=hH(^TECEmb_JkOaCVx? zU@?}#lH{N*l&KgjoVbIAe`2kf)@-k=u8HJ&#`I7W z3Ovo0^gD!J7S|6~o}TZPU-eEomyX{%9jRU~i@N}Tu#g#0Va+W=l%fdnOG7|Qak_6! z&MIZUkB!TuklJ2-S1bR+=oNGLA3+P8Ma%G%UiJv^v7MzyNkix4veUhLe7bb#eHW~D zJ^qjpb1dMF3E;Nt;}uZyr@<*Ms@3(CxMhPOwhlIw~8Ng2n_G5hNyW-XtV}vD$(X9NKB*4X!HNYN@WEYAbU_ zFI)PmutZkU>7rgT*o2I4;4YHKEqn6@RX~ENc)*V_nqooWKd9Js8m z_G!kX%TKUaRH&JIAUpC4`_Y76ZJ(-+_`p!Tso&ve3!h~};!J%3M7#lR!}UJ`wp`$E zDQPkumx08t0R`vdQ@~Vfdgr{pQSQ0Btom-m*`GVeyD-PYJ`92gf8d{@XF_=U#KxZT zzZ``Yh33U<@X)(eoRrM6is#7*A8z)^1S0p=0=0uKiO;9Sf2o^c1)V+`?tAQMK0N`J z0DP7G$h>W2kRCjZf?BtQS=U|995!+FtyfEP%uUeHJl@#58L6^g2T+$q{t>%~k@#*- zY@S)DHVi7u)Q9~jiJ$e43QF0b{Z)q)=HE+i8i^IEeg@YU0sgxXd_urS2^fQv_QS(8 zNebBGod`v!V{{m<>lKq3Q+wiITxm_ojlBAK|9q`-*&i)ngbwUQ4W#GTUf^5JnAD`I z_KO6=!K$VQSb>+aFUL7Hlr?sX>}=&d62JGO9VraRo8no|jzC#%bTGOR)i!!YqH)&4 z?`Z%~7@ql_<7Q~pvC{7IKwhmpBun@a;CNAY|EBC_smmA~?ok%(sgL(|ka2KO4m$ev zEP9;>G&xPe|CQn`a7caHkOHPt?M37?hpH>~EidsgF!FQ;pyZYL^<=HY#0`xCkK?pW-Tw zyytaN(aE40cZiKwF4O>JlcM{$Bz3@+X zlpik>Fe2K&-Gu=bba&7s=ng6c19>-sW7)IlFUMw4SOeRflRnJ0k(B$(@xukEkQe?F z4UPW-RRQEtw~M^NO9m?%=*iO_vEA^rUY5sp3+X>Y4n^Sm7<;~!X?Q?Mj05zfAqBfA z3$ml1{Y~^vs~CNt-L@qJfhVaD3S~{>p=Qo5B6WgFmB&UIvG9NF^bFcCgw4_%A0Llg zPmvW{%xIT@s6Oi6{&&G2rr)4f{otR#?o${BGJwYdBV@>Fy1|-9bt&OVAN|qn+d;wqju&o!`nYTVTb%@GZx{Q86W_nn7vpO`)4&~ zO_$pb&PTO#!j-lLK%rKguxeZE>lg0~KAAFNuB_*4TK04osMz-uSp(X;#=Nb~z^Z?4Z#G=jCkD6E#%{))4DBLB z4+$puO-E}OQrKq5&0Wk5>U*eugx-p-wmC%Q<=jLi!z5AM`iRkx#iy~KghhdfSED7K zW*{FVUlD7Ju=nurc<4ixn=f^Pb7;D5OOoyuhFquzLUT*Lz*qZ;T14JBP92IhXJL{g z%+W-afnMXV3hVJRqabeo$2(@}*VKeV1s~ zY{I*M4O?(nGkO)x2d(g}fNm zVN}*W%1T)6UIp0{!IP0}3SneAOu|PLGuy3_ zQkFh5MFC{e4BM%9p=xZOVYq4EazB_=x_z3<7dbFyso#0@=Ol?A{yNNHEoJ&aiqow; zCtRcw$%wHZ963+6lb6VPAZ=AAsUU@!cTIc3+3`+DDMwOk8DADOQEcAkV>9 z_bIn(;Hkpx(?vjhW|aq!c%Cz;(%4uQtGnL&X-Vi?_pE-E=sf-Bzub&(tO?aSC`&y* z7_zUyyc)@letRr~>j1wqa1e+GZ|mRTd)}Pw^@Vj6guv8>CQKK<-)dpOo z&+>M^F-9W3Z!{YN3vNO*@Q5ZuRH_(ItaqiLS-|jk5ji;9rnUAu*DNk-|4?z@OXL8z)(TU=& z;|9Z324WELR$WhHbLNkB=OSkwC;Q|xSs* zCD_4sO#fTa>J}RZ&K(6Q$OFQHKf#1MrW4blx^ML)Ij(HfiEa1#zyoq0!~G)tS3^ha z6`=-ZGX_+r)I$8)8~F8K4mUk>_B$!_9wI9O=Y^4XCZ||=#>TPrKmi~Zp=4H^>A`z{ zw|{Zg3}A(kSu0UM%;?pg|dC+}p+ z{eCBsVR+~nN3$(yy2cp*t%`h$+F2GA2ru^+lldk1o4s&rj>|a=Yj4ugig&JN%gzO} zHAb)RCY;%Ev^2s{eJ_9n-9efUs$DAC#{+6r1;QJm%<&F}1sp%*uG@HCCf4bM&fsR_ zwCU!hN^NCt(8BH3Fj4P+Tw9p_uLo7w)F@3=x$=dNBDN&(Qe>c^p)BK{gy_G5Fbnk$ zQ{76I6uS8i7r^$PY4@aWz0jSw2%TEobtxfIQOobi8xcnVACq;ZwPs8fo|U``&~F5h zdnTaBTU!{;0dVP?32`jJhKZ}ohO#;~n_5EX{0E;bRi>GBb$Z_IUAp9S#B*JOcS;`fZv=Ye(>T1V>+9^|83^QE!jH{QxoFBXbcsSf8j?EVqa zt@2lzjnf>>`&N(08xG4B{gG)B)_Go9C9Y3bKYK;vwAj+Z00)OCXnRIMe*j2~K!e{C zJSd45#fy?kWr*!1mwa_8tCtiTKgm2uFMekDYRA@r3E+Yy1j54bN$|ykaLg=w-G%Q7 zzIHwxj3Ok!b3@({JMol2OsCT8esA%sfWbW8eG&WoNhbc*$q1YJ*dDuLunvIe2gtOf z7S}LHtf)>c+!gba&$bBIQ?2zR$0zy?J`SlWZ1&kJ;5a3J_3+AH#8agRw8B zvCe@;R_K(F!6-Y)C%=)lu>Cx{o5zK4i}vfF#*GD$>|t*I8xyQJVjOQmCYI(Q+U3vC zb2#>Sle_9oLht)Lt|(dNCj^(As;Aj*fDNR|n+;cBt(HgA$Sj>4_C>eSn7>hxWxL3*n-Tri@XtW0eTAA)jKtn zH|}!-x?C(I&mu5G+wm!6BF=xXai(`h?Jloiy#c=x^k@HK*pEl1&)(BlFJ*XyHSu9s z>HmeGSvOFk z-=NMC(f3*)ujtX+uLq{aR?JX-kQY=%PcuQY^eD7=YF;IOunW-E)u|xgPU6*`fF#p z;6MeH>IKjC$^@>dYIIn|jI1n~aZTet0*=C0xj82-E)HN#zvab#L@fMm{h2O~>x2^zLG50MllG zWaioSgF=jP8u)l`nHd#1*?N5-nCx2I-Bk1JV=MdS`)15t5a9n&4DMj}u{}|3T-fkV z>DD4_tJ&*Grg==(+e6{AAK5D{wDTJJ9tQV7#&Hv`gi=xgaL5|;yclQ4wx8!Lavf>t z6ZxbTlJ;J>zq&f=oz`g?j)2WnbR77>NGGejM8LL033&&e;a@vMlAA5z*|CCbzT#*9 zb0@&;*U0S0!Pa1872sj+aO_|eHs;Xj%$^Ha#KOxu9k>Vq| zC}f@aoa^)fg#2rux<-Vzuc{AJdO)2-HA?==RUe9;vSGi&J;S>(92uO^#!}|V_-=l1 z)90|u?8g-9<(ye(iSTKDUW?K0ac^&N?n-n)(7^>(n;e>dF9T#59ynv1F_w?1)mD!H zg3t8V=fY`YN6)`HwoB+Md5Q9RdXA|$_IgvwybHYPl@h#851w&^tQ1-Fkxl6P+3!6w zkxel9@zs78?Q1If`Tw6l5kLzK_n_6|f9K4fAY~sEX9?8D=u#3xbx)dAH*Uq<3?p0B z_Yr?U$*by^oX(bxwR5^Q>fz(FKtlF zzZ^Fn{F!d>$xM6pLu7MxQA?<%VrK`e9o#m%FRE2{FV!osyd}D z8v7%`4hUaj;AsNmR6KMDOb0%P(u(xUszdU0>Q(DxoU0BDw7PO_RlWcM5b${r2zG((A~KAHC2eaX!`*YwD(Dk&KxRQ7k!T|YKP&M5V0*;4PirVjz zj%Zv4yKbkH`5LHk6b^vZzD5HPs=aF`;vz(M4cy17P_M?6ek(h0v~IWE%cV}l$mmAd z8o~+v6uEtsgM(v6?sU|Zf z&6yh@Oo3dF_`(GYPFa;~&@eQ&)lGxx?r169`RPlF0bgX?42*T$#Xli-;)YGYD17#} z{v4&9B3e}Lz+P}$ePD!g5C)+!u}gzJI}FmtQute4;H7ycqw@$V%RUz>96Dl5zOV5l zg6C@4mbd|#+Y)+@k`VKLkKlv=Uu5}E=7AhBo&O0y%)Myd4CF7{Wan6&afEg zu*RJR9r!Masv5rs(6$cfpUzM1^7>B==8@lau5Y-o*s99dwZNYHlJMPZ_(CLd)0{bu zr=(EDK9xZG^xpTc;*RjQz5IT+Ht3db!lA13x5`_5?`}}AsyO4SZw zixZ!oI)O)qAScSF7sK+%tT;dOddFB5VlLLfuBtJr%j!XiZ0fCjTW@-Ec!s|s`xjbI zA=k)iHf$UGi=}`sj0SO~4GQ~>$5}!`yGqQ{xx-Q)_eS7IYMb-5_14tkCj@ zYr4gdEawHR(qrLrIHHyuJ!)99%hR(!Ua{B~ow+(Cc==oWLeUsmq?OjR6t4s(>g3p_ z!!obCh)I=vwI}C%%>ykZF5!%C@fEgrhVli6HEuAAEE}5OEtu(AaCj4u*!-ONt~@A4 zA__4m`6qof>6t>I088T*Gog-tk_j00#61jpW`u;h?4q1`|A`x~H*|}(8VnUr3|_d~ z3}60${4&XWPy_`QS-Rkf^)J8+NwUkqKpvZ*QgyN2`IFy zY_@-9WhQ|&e_}4WS*TI`q`ITzT+p7g$AR#TiZyV^rcf_#*usfJvWT{S;A6z5Qtx+~ znq3i>pj<4^HsVl3bYG+9C`rxkxxELGGnyq7mkJ=@CLDmf z?}AAi@g9+r}52yB(dpCgAPhLsCD9=yw+L#Kd&Mlfkkw1n9#Njh-6;#|JGlgcIuXHr>g6jk3Pm4RBY4oPJupyQ$hDcbitm3>Q&#?*k)UaR zEmL6klBfBqD+osva1{qwoU|jGY=4~REICVM*5Bza(>(qXM^~P@QnYw8)v#Q8;oq3= zb24Lb*jx_7NB8v^)dMJrhm}rt%&zUCP|J6dhg9C6#@>7-?8Bi;kuW%6 zi0>g+An#$-0B1D9-K@BAV;0k;$5P+>)hXs0Tqi@E^)lEm5cU-((*7eEfU~zyj5C#h zDV@g2By@~$!c*e~S#!1;6_sX{#M|kL4zlc_RGzzPf%$7><1^K z_iobbc+H>kK1@vx#At0x=m z+M=ICC7jj|_6@c-NLdu+A<3+EiFmrqW)x!?aL9UP`S!VEa>eXVA}p&=eCM}Z4dt6L zGI;7Q9~+c4SX7qGOQh_vR(!4t?qNl3S>vlg!Pkp9$S=#ym~P4F0KinGM9Dd^eVLm7 z=KHTgzBGx|CbREhM#s&b?b-S4Fxo05`55QDFmgNz+9WYL5y_x3h7BdEXQn8tIOfpgsTYNKiAqjIZ{NV`5PxCBqI+h|Oabh0Aguf>XrJlQ z`FS*1=OXfF&fV)TSqtQ}sEO$}>6ZXp!WA8ba;3Ca=Rty4@!tfI4H86tpA;%c5Ox10 zh$a@bVk;ujT^R-!gy&dq4_t{YN4bZBoVE1?RmOLHrIOj*@%D3=m6q=XG`CrHjDh+v zH~uEL*d-6pt;K1FYr-2qwbVYPTl$?XmZyzy>x@jLCvf(8v*37s5GcS3)n~#iTplU#m&i&}r zFEBvjXfaqxl5~C=SySS2%-KpUem6lWA?L}Y!rhm$(^P@73@|>%#*i65Cs@DTOn`D6 zx(P0UOUSi-_)Fdeoqjciw@t7?Pe!-CJJ&ut{#$bK9|!gI$GyS#4Dx21&Fn~^Av=QE z93jULS!eR`V@iNtYX#E65jpT~g*!KGtFW8OddV%8!UIJHMW;F9g-OuiXOpBu;4U7M zi7e#MJj=X0Vh+2+;eE^d@=cV+_v`8r30G_V*A6|V{*cb!66Ovx^^cg7AAJZ|xQvAg z=uqb=^K(Y^)@Sevm!hu0U;FK3bpw@jZVD$pk=$@|kC?r>s*=zog(jw*pg^v4&I`gZ zl3Bgt0kgTyG=!|namfqWGi8R&CC4fc%_OWs{2wm-3j0vXBqUUNh+zG7!C^*lGal7> z|7yPzR_4u@SUmyuXxrBc`NytdMOXr*UOstMRg1E@mhD$>mUTRGiDx99n@a#kx$xsS z7`tKOr>i=F@gq6S8!tD9pHxOrY}5=yAxXoxCaXiS0nVNUT=+(p7V)G|Gfj_?W*OxRBamK;cw@PW{G) zb}8*RK6{oso3~@W}HNhEJ{o{m6qff&H`DUwhotnhG-uonL#2j zvjWbPj|hbPAfNepwtj7V(iazF(F?tS*LBD7+Nn|ew3hcr5h%KfxEI>%{5=nXF}B=@^B@BQo5 z)k**sv@&yS}Or{QH2OF$IhXVsA!)fJd;xqZZFE+pl0z~>(0g|)6l!EWh$y$Y|VPuIc zUoA`SBrEBI3WD6{7u5NHBA0O`{0&~H>gx&#r5mKVt)guaW}#*SW8p?yF=pJ1NdA2juZw1q14Lv$T2ZX{q z6GmbZvnyjRowv@`TNh9-M~0c?BEJNbfSgkWYdqaPO_rHYztixR>CsbDBUdi9f-?6Z z^@qI+7-U3sO3F&-rNI+)#Fe(t7_E|tu{-_KHAe@UEp8gT{>$OYjklg)%@MclQ5W%} zCIHFE2khlvpkL-}!hYGx0;)pTev`fFOyC)`OoTU!*pHJryOuk+;VhP1&K&M8&h%Qs zdXTfIMCQBUH(aEPmdPi!s{eA>1BHchNxco#Ze&#v<=1$Y=Q8*gFagvJ@TKlca|qzL z9$)Vm9RRRCPN7*j-p%=ug8JvQNFj@{JD<*)W)uxPy9^}g>__m__y8#1T0PJKqR|?P zT;mu=zM7dIev_ATTJBFF0Q=g>Nm5F>2!`)-zONcu$nST8-sENk@xBWM>Xcq=UGVFq z0S?aAwj7z|)q-i91Rzy1?|tBCFug=+Zu{cR++O`V`V9vI%l85B7`Ws~vmdrTh=%AB z6nUQf$^^G_u5nr(+}bgPYN=?2;anDDU>eZsEuARX)(v5!+C)uG$TsypC|b3k3P=^C zWeh0O)hA~b&wBg6m^$-tsQ&l=YmwebDxt`dHDgQGBBO*5vWzt*BwI+f#xhf>MD~53 zWH*>(U#HE!We=g4#S&_UbU5byd-=S-fBddGuFG|~ICIWxxnKAFydO`j5&U*YE?oBx zeKyTsZc1|cm3?2|_mL)FP+25`T^}!xz3-X%e4wJ78Mee%SsHdOb<3=!t|b>E=3P!# z=Wz-fK%|mjpawXp?1~$hlSc>>6sj6n&M)iB0yhO9R>H&IV_U&ArcgQi1WZifPa`cf z3h~m?+od3`B~!!ueSa8fcVl(cOBee{=YA44pAHX?f1F}hmv*a=m5tZ)@jCJ>=D0uV z7Rv$d>+{5T5=|LQXR!@D)L{aq_eD(mnyBW3@pC|sCYWj+oV2W1$}WBgKF5{?9 z8EtzaU1B`Iu2eqYitR2@nZ5fTc^O9UfSyxG^+{i=ttS*t==vTV?S7U#bYU+EW*^n` zc$2%`j8nnpZwsQ4jZ;ypW z28FrO_@x(xdebgD`Uci#cNU5KXcSvDUH~4M&OmdR3-pEAKbnB>EB_rlN#CtcX^EtA zTx5ekw0z;yOts{3j6)y;}5L2YCSxE%@aRI?$dK2n{a7){un9x`oDT9V1Vp^ z5o%{eH)lF4bM6%11~}(@M(ymsELXpTW^pC^Xs-OZd}T-*w@X zY5rC_hQkY9xFjjsHm6{QeReb@id8*>@Hwv9ybh5AdD8PLmFAR|h0=o(R+s_s`w_}W zOJ@ilbH1ksbnWiNaX_e3k@aMBeyT20@yHlD|65o*f~SGN12gS#J*~XmnlALh zrlqULnGTcFHbh`L@XIbl;-CeS`osB-NhAQE}(bUE02WXa9RUo@5=+}%{B?U*&! z(V^%2J^A0OKDy^I8i+i(9#se)l4Q@e0rM#%CuSlIskm??foaph+L2$<<-xsCYi^is z{q*|d$N8(j+s#Rm5E4DEybjq2WjyG}gx~6WQt(n8vlVsET^>k@`0?xeUR;$4zoW?w z%9ZkzD{q_ONd{ZI+|&MI=G9kug&%cpfgI}XZ&N93y9^e$iT76Au1U7QdyaQ&>P15F zH_y4`%g=}bxV%aEQVeA>=atcwnt)wOK3{bQ>0|&(q@ip&uHPN0Y_W(;uq|w>@(KA2w+a5g01HWk&yqmZg8Itwd zqv=^9X)35e&)b#M%WWLm453|#ps&JvYWa_mbiY*`Q@V;_^zKQ3YdJc}e?&@&oIm!x z$LNeE*HlzR1Y_bRT}0&xMDgJ`ny0I?=>9EpeFKF! zz&+y|>*^5WW|}sg`rLPuC<+}5Jf!N|xz|rjy+h!Of%NLj&L5+FVvku$C0~O>D+vZnOSpHy%E4m-NVCA& zB^a=zQTrO>J#WaVguP=;;-B6r89d|kF4^al>05-gHz*-vC6@&sFzyk;WOqB7fM=}6f$~YetRI6N7KJ>^dTDXJyP9K#44vXE$xJU%BV)D^ zsRtgv4f@zlY5xuaH4u=09KZ_BJ-Z=#mKg!RK8!WVwEp z3m>=4(fv#K83%3FXX9uR_eqMOofKsE>7Sc;8IyuycQv=I*n4SF zu}F7M`xl74Cdf2KIQY_s&d7DAZ_(y5mHXBEGOsY&eJR|jhDMsBobP01=cR=TET3Cj z<^%30C*6d)PQ_6=h(1IN|6mg>RoO7e%8(TMq#Wf5V$X3%2+rL$+;TY5ZX%mAdB((;%qtkGVO&<~5fV2*QX@RL` zTm;>^!1aD&Gt1N7X}veTW2?T+A@Y4o=CWe-=_du=LBvm>@!|z;;1W|GH*gVSPG|Jm zlE^+uaB~U9+45af2&bx;f`dI;cg0+6;^K>kn_r&>Ua7LgL3>)S-=Kokm~Zk1vqhiQ znvj)@$+wBgHvM+ZL^tZunEmNMaL}h7VETbRvZp{G?W@{9g)OE`7LSvp;O}%!ISG)~osz-lx0^t@(teK-aS5t~ub4hiBW@`4^JUS=%NmLOs z0nNw+B#=2qyh@c01*v{DACsd6(pTc1?e_!JB!t*ImwL2M%FfIrlkV{p;tkmZJ6cf zk)OnNNrMsYuyq$_*J4{cYim0_R~J{lc2Ccf&u$Fq>@SOXe1KcWsocDu=|kU&Z>g?? zdi$q7UzSXTo84vCh^61&-uMx9&MauzM2pS*EkMOB>@fX2nGZ>OS-Ns~s*NF1+a5;& zXZPq-O|38D9>JC^CEj8Vx#b(=+5O?%p#h#~qU{8+9RK@V6seW-JcwH*DRDb@Cvn}+ z+HH;jDHdBukdL#EGKJC?7#LWkF=1t{79$#~U>S7p^^tr(&|)->8~hB$#QX#)FE>_w$+oEQjfcwRwzx2rtkNYv@eX{+ zRM(Kv!7hwwLDW@N=Q0BUD{>EAzRrHPV7wToc6`(BJv8PSETPD$WC-;f}(0)S%?xKj%t$}+!# zG-?_1xnI*S*JH13PD&B3di#V=zc^L9okz(wQC}St3AXQnzm5S+78#t_eWk$xDDpWQsGbD ze=;kR0-wyMs`7_BJPTl}0tZJunC1h2kH|pMcv=P}GeYYH21t-Hl|Ou&^Y#%3BNZ!U zo}hvwN36bMqe0+7yIn*1^;)OsJ>RbKR=dS-s~NDR$nScgyG@|zQRG^VUlgfyZoqA` z5gdo)e$WR>iI8;#>Ri~Q8^2jZBtdd)s$WlrpOs^29@2m+cF$W!bKpGQL{a= zXQU}J_?3&KSfilE31dV%P#)Bf2K%MEx7nF@nU0XO>5GK{EIQ7RXItaYU1q^r6OQj*0&6a#fb&;G zjt0KOj_K|x$0sDSq5w`$nF0TNjZd7MJtQwO-ePaBSBJ=TXIg=085eJd@7)c8*>_EMLmqFLIe6V$8VP5OqAOygL72!po^V_uHr}ygY8e#NK`CN=GF0oMHo4 z$Ypsu4lB)EDc@v^?r6ErYn~RP0$!%|!U{fN)(CSSsnJr6E5y{>P<*`nXhFNGaz#B_ z8~)RSG1f_6gbkcZE8^0Smx`iQ$s5~v%0Q&9ogwbZ?HJ=3GZJV1op$Pzps#*Kh>gMC zX0!(IyY~QQ3%PfOLO)QiQW~;W_^xE9MpcE~InaIg-i}ej|AbsaJK(r?Nt)WK4Njl& z$ZSE+;cT$#Kz62?Jvv_tUYv}2|2GzOn(#L`bsj@bbO+VulqvnY4-FL?2?~;>l9h<< zaHcPs>1#enVx*wcRocwxG0k5WRb-Mdy#p8XRGPd>)e{3bq&X7U%vYmGm3YuGhVKPF zCAi)hY5F>S#lTQN(PY1o-YsGNifbz`Pu~94J(dyY{1%`O88aXRNuy&^UW1vV3z_$2 z`k&Aaq4^+mdkxZdYkWDT*@7VtQ?{~drY8%wBa&;TIpppP9L|k9n$`EL*_)-G7zb`$*e$rL?lS?r_(E7pS4M-D zqG~>9%{i`va9#^MN5Io-LiZbiyBpBL4ItgYQd*G#V#dpmyzwDX?D2;o)7;mj9-KEs zjHH?V4nP5SA+S4N>ID}X(#kiY)2P&%`xXDh8gbe$l!~NJJwM!RBX&*d+JPgWOUEAo zBJeOpFzZM=!3}H3_~*b5BqJv~x3p2o0xMW_qQD&tfIn^Ma8)cAove{m(4}(_G{ZGF z+zHk4j3+&6M=LTNaeK;onmkTnKDYN4Jkdm_W<5C4?@0N3Ze%okdQ?Y|Gw-+61n33@ z|FL)A-SMADB#`Q+GS|DLF3-5x>Jnt$*+a2+JtAE(`bo>LV`&SE;9(Dkr94l~arbg` z^yE&7N!I7c$v$%Oe10_R_3O5*EJs)rEF2K+Ez>k1S%|AQn3xs%qkI|@(%U57e0w># z;^(VVrf-g9CI(5q6$k;^#x$niI@50jyus|OiF zt3SPHEzOOw0|0WGyS%&yIekq~ufD~~0^DC1Aieb;^$I-bDX~Hq zKJo1q{;U@cE8Hd3v;sPz+tDDlMa@~}Ujk(v>c{^NjYx!9YKnvQit+4$Kwp)*2K+Yv_F?QfZxDr9bpSAT2$q{h7_o?MM5J0^vKvs4Zur4ow{`s za6OehsCrB(tAO)t$$au$p1@V03?e1RK?Cd12TqVKmc?YE6(MiwoDjNeA1~X6MC0d{ z%)6EPJXXm|#xH621pg8k?;OrP)|o$bD|5WK5oDUdf?q@0ti_2Vsfr-K(-bg(U=on( zvTHx+6=|6@e_QS5&Mp55-tJ(v`Cjj>dKgK|N(Ajni9p?xSx@Du(TD(fhFv{l>vK(v zdVIxWT*=gou2|IYKz?Ln&S4My+UV%|O_XvYoIpR=<`90ZdgSh~kIdN_cL(pP4xJ94b{Y5gh+Cq%T%4c`HlgyH0i(N6oH3ZmPOUrn_KZvxXCkL!&d=| z)qVvJJ1$>3c>iNm%QQV|euQoaqlz%Y0mDuVl~jDXYEVp5>*~a(Qf&dL?$0&nbV1d2 zIJA|*Va1U6GckzFBjkF z{${);)?)hCjel7}Kw>?;%TB;x25~n;joIHi9F?-5gM0U}c@LE|-ZX-{^0Ot6fSXv2Oh5eh?$Z_Hv;JSj&Cy0vi(g9Dq7^KCd?5k>L(r$ccmf5Ms^+xNiV9a}Hv3#w zH>8#KUs_umJ@K2t>J&#%wXd=?afHOlH)_~tgsiHP`qH+m&(y{#FJDw#uIIf@S1cS( zd34wjb%LAy%f6@rhuaK^ddQc0IP?khyiA4gX0}rXIKhWDy-uVEo6+63%2_q5_>K^~ zmO1Ib$&Y#4f#bm7CkE0Y;4MgpAT=8p_TSx=Ak(12Xpmga!?Z z#y3ml{7F61mr5yva=Nx>0{%pnZuZWr)sMa6ocVm1@+Zry%2JO?>=ku=koy3x;9;6G zin1T;7hQWQplJQ#3bQzDzbS8gi496yDzDV^CW^)kX534I2FX`=>CCC|Fr)?idF)>n zElg+c$dk>S%j)v8%f7~!hfFzn_D3HU<<^6O7@F%kaPybY3dh1qB82x0Kql7^Ww<)( zFFS5v>mRtO*%e%s2>NyB&`$+RKMJXP_XxWkD2r%r@vw?my5GzuM@OL4a)t)p&FCBMoPPg&P8@j{m zAqeCKZ@sOq8TrJ;-BYipSa{Uq*ybNK!gdiH1*q?!%RKuL-1=V zwHflS2Cu_c$(9*U3qQ{*2vEwBc3e>Qdci6PW;i$INWLsVNn(31M!Jn6;90(-PvjZCUh<)sXJ)p4(mxQ}0z-7$_OlW|++x7Os^=)rZJqg{`DW>SB=dIr8 zhP#-)ZMQbcNulNkc{w|K$*ykxEM?6pKse}&`?Z?_C9}lSbi&S_x|i>fIL?7(C=sv7iGPYq8nfU3} zGrk(D3;1WF_xVe}0jCHc5KJIQh+Geob?Wex^$X|^kSCOP{vTv&z@=+;_PrpNd$sW) z_X=FDeH67VaaN7Pwv^jU)soFudyX6JKz^);K8pGq0){w02+|%F=ZK7xG?C|Olwb9K zk)Fjcx>7yc1C(yr8uqG9_*n1tbZ!GI8lzA{-h2Jj%U}ImH4i^7o2Ddxd0PD7>M7y* zGK3)?&o&^+#e!cKh#PE{!>O(-5eM)CF$g=(UiM3=3%!C?4Xol5F50GIkH5S^A%BHk z26jsCbFGyruVx*^{Sfzv2&C2^9vwHkr zyvDs3dD~P*0m6nDXxFwT zR9Ot_k8R3wnN^L|yjt4mH#E+XyYI7lyHn|6hevE|jc_<%o0*^)>%b?=G6PyITAEA7 zWd%RuL(>kW9Db!cRw#W+6R4(MOPjGYqJ&Py)sFdEeVt=ug5vg<5^N}8nDoQ2Vr639 z00u1y^M5`WHIK>5)T~|{@X|9K6$eq8bb!1}^$jhH>$mj9avrbzZ>()az&itjbhA%J z@H`0996^{CaQYe3;fuun8#RaT@+%&=4fCjS?zfir_F^k1wN6GV4L zH#+96gxcyWb)QYFvns9}K5;(^B8NSjOB5NTTlJe=7czGbFp-3+ z;|_01t#MXhoW*jkc)B`OJ;k1X`s9zV)#wN4n0!6M!fQ=48uc5XN(u*QvKxMwYvPSV zIML00)JwJTxdp*(1jpZXG5h#6boOoDD51R%YzK0Hi$B+q8ntu1V7mouaRAb&<6(x@ zJ^gOUztdd1;8QT@5Gk^s_Dv44?b_`SI2^i_r&F;ca--;lHo!4Y2yx6j|A{_2UjNUI zT+GIahOhGkc$&J)+ZD_@&|Kc#eoiwbC;CA0R*-y+<@ius{Q$=qM-e+WQS4LdkN36*P}lU^t#P@cS&TvY3Vn-SIjrW-;d~q8!Z=&< zxH5%#I$q~OjLI9shoz?vl;8Zs9d-b6p`jQODVhl-?!O`2fS|c_F(#{5_?BJw=_83+ zDwKn-59#uod*^fC%cNEpy73wPsjismEOHONZ**n#bI}v-AmP7>*e(GhDS#cJuT~bi zK#c`h+={L9ViS^@DVbd1e`zGTj%SW*Y3doM1znkb9LqU*O~FDi(l6jO^A427e0VQ} zyNRxvE$JgSS76G>G8j>sOv$;Y?Gv)FF>H55{UuYPIc!W107|fzqTS-*57u^CLp@ z6}63aJNR*=Mk^V@$rR;{;-tN&wHg~lU(LLa5}e(PaDGs3{Wsp%3Q)&Df$5U_-bMBS z8^Ae3Du+KdgArIB$D0Ue?UM*ud3;`Ak@Il;S|3(B6a~*<~ z+tk+OY# z+l!aa{~-$hazAHz%jBgR;Rn$7azao&Ee<9hiwq;;}f<|P?3nQ~ZWA}TbK8`+H zsP@St`vre+doBQ`P`s><3KEq{>iF&j*%U_-Xd}OsyB9ifU&-ncO;y520O_I{XbmCVVKMfBR_l)z>%YO1bnh}fDEjCk| z;0{)$%EQcjGrU1V9T0{lrgmB-9BD6yUM%*Xk_o<0_k=frE$o{UF_J_BJOSD~DR(Ya zD3@=J>O(l7D8Lu*4iRuScOlA`uic89za%-drE9cU=af zcx?n|={E7=HerTW8L_D!*6tn%+@|aQ`u5Q0Wlm=Cy`rxKM%fM%fNqnOO$<62#k~`J z@}=4#S7JT~9m$mtzh{P4jZm1(i4-V}A{p$8X%NhNojgef0qxfHIias8@_lG&52gX5Edr3Wq*vn8m9L2W z#&n7Z=A6GOaP<%<-iR}Oz^OM?DaPEYX$&cWRN_plnND*DRl;=HDT=V1XNPpU!CTX> z7rB7KLI@-s7!(Db3f6TRCv_gZbi84^<2i+JFG@cd+uf9%%d(>f;-MgzQV(j!^a%zp zz5YfxUGZ8CT@O!^+gR|Vq@S2x-mZOjvSaG^T*Afbla|^f5zjirAK-0im9|Ne0-M2k zjAyUI-Qmg_qaf{xfUGNk=@;E8W3K0?dr&aH0q8kNSwc`hyF1wBvMXVryOyQ8O%G%i z^H_)p&0SD`GOu9OCuG(PxN0^evK{UwYVQBO`Od%XL>Qm?t;1SA`Y($q7@boeu(63^ zTm=d7LtP~wQquAc9vO8af^vc|4h$SdGCJWO_kwnS+Iddl_dc&tOTC-AJ`xkSz&dul zyWXIB-;XGgJ>Wl)fSFGM_Fg?e=?&4-(s44Is`E)Ro&St(tm&<)mL9jUI7XVuMs48| zku*6lCi!p*&M!>PGyNbBsHnJ@qkm%bE_8bBvn(3C5i8u_ClYNRTnokUG()=}3|*1S z2%^4R0P))uNJu~TjOeK8shava_Y=Z5SqLSQd$C#{p0Q4Z-b*9Zz~j;Hmv;ie!8aj9II@;qb^&Jx<5d+a)LS-SS|o)LqC!o#$d!>7Cv2r_Q z4t@t@8Z2`o+}9_+&Sv#$r6wt!Ns8L`Y9wFwiXt@+$~jC=V&r?b(iFuj3hQ3EDs7#7 zi;5Mmzt%_o!omhhl0X?S*p8(A2*y*}2Pz5lK^Iw+Eg7=RO`Yc6N{Qq|pG+GIcv#I~xcUvJi zO2|~>-m7l3+i$9aGMC_g-tB{cp$y;FdRnrkS>{A<(&23R43w>sPK+CFxapzE^p1AJ zk=7Mv7dvk*pt=~Pdhu2gb zM^7|>{^sf~fG?f}ZOhr9Pbqr`PGd->{%D>6q}|XDWgh6)weJeaBVr-!k7d?x@E^B* z`7cY&Wk3RPA*oD_tpRpg#in|eoxKoj?h{gK7`SrEzb0n(f=$;cGFVT}!ygzEL}?M?cjVq#?@8lG{&355(J~!t zs(vBMa)j?2G&|oFmcITY=Cc%k<-iw(`YtTcn1mkR^MdGMx1n^enLRTPVN|>CGoO@;hJ!dJtzhoN9aH%3SG>4H> zsUdHly6Z20NPpxN)v`jLK+)S`pe2X_Ols~A$!;9lhq<8RDjsep{^Q#GKZ_Ptj9@8O3&T=uLSk-eEa?#D^Kv?Rs2<(I1@Kz21lUs+O1bx zx3cH#MwH_~fFf_iTA6_Oh6(Hiq{tG;;Y|EPUaM~hZnrFd{-SYDdDXlP(Sy4JGsuIg zOg#(?nG9Z*Y1*w!-I_YU{x$WHPsPhb-V4<-QQF6z>mvF$keXO)NV}^IHKdGJb<3-$ z@l?0j_IZ#Y-Q68)BI4m1c0J`18;b=;qEyhz`RbYB37I%?J*7C-%*FaMW?zS2LJs%dQ4?B%hA0&N{R0hlnfqNkwWlM0`8SBF*q zt99p#e|DbAw(uA5wREL;=BR8jg8DDlJt?vQmjpV4CrC1R-duHBhD z6-NzyRkA`h)rxLpqwe07zEyBQSKX;R-@v4oBe>IO)ZY##vz&>oVP8_U{B5fdWWe#y z%jbU=LlrF9RH?4;f=lh_A5}qj`dQV$G+9?a_U^lFIX(3U*b~oJ@_PvUwyKa!flEci zA}Oun3lGlN-~TTB6meJsykuRHClo;Ox=6ES2;wQb>^G|Onnu@O*S$FW;oMbM7Z!{7 zLkPw{NL8>g@tznHW6V*exQ1+L#%zmh+%BLkm?YN1xH3ab@(InOX1zK;ZueEG%Jt!p zZbwv~D4Ub7r5E!gy^1AH)?IjCt<39{ue;GG#j4?rRXNGJ5&so0m48mRB-pl}MObf& z-#Rb$cfO=Qc}NdkTznrz-j1LRlIxO!a4uy`56H@-WklRfncXhNY)bV7O2bCL=EK3` zS5KGq3Jro(CWr1L*&48>#vvR`0z}$9k6tdUR!Y3|rtC4b0Dly<(vsD*TK9buaw-q$ zV|vl&lKdNMi7K9{nzx4>{iE#7O><;lTg4BZYI$~~>g!RIFsQwyQ3kWt)_%fOv@l+W zmXUMY?Yk8@UdpC0;6`n3w$v!boOF>y6Wr)`zBK}Wpw5ZfuB49C*cR53$3-Zv=DIfF@Kr)p z<=?XXCjCgLBRz43%)rGv#x5(!5)5Udoh-y252YSR91Q?HITJk-_+;jz>IM?s=P$aS zC-C96s+H~CzkEyK=OH$ic0_!V=A=9^rHhLUG>QZGtBFVD9;@>}&iYl~1X5bjnZ+ohi1>IoMiy)nhlR}q zhAfp|b!+Qgr|heO^F{}5XuWwFcyKi;za|a|0y7OL+`M+kUq}Jsw;q?rkGva^6{||c z*gpGx-8M0>-QhI|1U+y)iiNo0Q$h?~!~#VKq0-sQr_WZRa!Uwsadnru+{gLCC>_Nz zDpU65;_EJ1Q6J8pC!I(naUQ=s;o(H&FzGjeIxaZAkXK`(yT$rH9(GRsknxq-BeGu~ zOo@3WgI=sRG+{sbgT97;^ZTf>RE1;g@#0{*0>FVjlcdhU3#SM@NOh*e#gPm zvnR|NYM-2&4@p({0*t~wBr*J$zE8C(gmRJcHfR?|-{Q@7ln6Wy0tVMy&k#?X8nl0& zy0ohv@~EgPQD5i-_f;|Y1)^UWMBY7N2X68W)bpnKS4ce;HEpbWs#c=sU?ji-&6kS^ z_0K^a)>Hh=CRea%9VM@US*mn}#>Ipgn;SGZf^ym;-cT3JqIQla~pCx^=L=XJ~a7ivwLGg|GIa~?c= zI@wb%ibH&gzD^HS%6k{w5OL5APikbbNQf%Ey|^t=vUFuO$r;<}>#KC4C-^=povUFz zs+5!(+VH{iwR>?m?=7!$O3rgXH}~{$e$X5woqzkbyDB=P4K*THvt&EFZXBjNEAisS zAa6`QSuH*|%BkcG4v7>IkM2ZL=aO9_nY^(^W@9O(6Zak-L!{wB>bc{u=nD$GO15?) ziC0wG&Uah-oyoiFto6;%IReF-0iSfRco|HIn zuAI) z80f*L)ylNXY%r3#kL^7zZ3R-`rw%ZS$su$AeAPjWaF9F2cCBz>)gK~`Hs&GNUWQa|Cv zmHZ!c)E>MQ9#vs70Os{yab5+cBjy-T<9Yn>kFo_o z&rI&pmoEsX@+h6uwT}=d`qm-RX0X9PnKCCFwZqWsu8-nSGbx$uc|H8%$=CVv>Mo`a z{Fb3TCrOzlQC8i{pK|E<>wA$EUhD`Kzrilg6aO9iDa6=ZWpjW(3#H7ZU)ov^l88+Y4|VyHFGju{lE;Fjr{ zy205${&e_JfRUb2ltl}Do5S&YhV7x0UqH%C z;w9AF^K&XgC{4pVx`RL5^c68uU6FBw_L ztrxWZiUJ!9cBe=4-k8h9Z*~e5#Fm#8 zyeR=BktIPOK`e5bGv&2P6t$BU=y?&HB3V_0pw9uZ2n70M3m6U+5DMZfT4LT|SiYoA z1B3ce=_@HYJ(*W(TMk(1BB_Rg%zejt23QPsYC1njZ`*xWZ5HhADA+cT)8HDf1+0?9cyc$=}q_3U*2}3Mctmh zaV;%!@MQ_GKLI7BA3^ZEDuox{vI^F`0}u^Lpu~U)*FHhTW%&EZFHS`p`ntGq6i)jk zRFKP*-tq3fcGG+WvKi38AoOXl8z()DwP6MVvcI_rorgr3(}aSI$NhID4%SwaYTDXj z1-{=pu7Bp6ul+W_Vd0^Ed8m&x$k``9h}Lx9cFo8bbyngP#I|ZIq z_$>Dc2VB$_)xAxxkiL2owK)gR14x2A71Y2u$$}LWTtBC@JvKz19F)^Sq}nzA(bpK^Z4s06CsMMG)#@_r~U62`@ z=IiQp5|gK!Akf~RFUb4X@F5zo$hTaXz6WksgDsaPfRkaZrydo`9;O;T8Gs)Hs1X%^ZF%am-=8{3WG9H=Ahf9I$-?%fcF>s0HfVJ&cX{}YINO6T3TwOO(E^J%taOP@| z&sUuao7neGL?G15-n;h0)!=I|T-P?NF$a8Qf*I>MKf%p~6CBIJs#$+ zBzu3h;>P-7-Eo5?Wnl3j1gf3gq&`w_hgWj)V>h7|)OoqUtxkYzA03eO(-Ib1>6U55kRrpXCs2e_$|LYg zVQcGH3;T_Yo!aPqAH$=rAn-CM@W$|#7{xvk=*fx6oJ$00if>Rzzn}xKDfLp0ky}0b zP)|h9LxnhHK4yJCI2yHWA4L+t(UwU`4#DtW5b)B@BIS^BHSWsj3oCpBMMQ;?r^9o@ z5u*)_$rfU6s$#o<`9lEqb>Jsik>Vs#oMf$hFaNrnHD(^H`<4z7RJ{yket%4WYQWz& z##-q=qJe1c_3EFv_9)T?e=w^*a4LWwl*J7MV)dZ>-s9g^NQqz#&mdn`dABdoNY1K0 zy&`4hNP=-f<79+AsE_8g0E5mw1>?B`Byte7&sTS(Up}Sw{QMI(iF=REptQCm0AB}3 z@1(b(p-!8Ya7YnSCJS&eIGKLZ4Bl%I{SJ>9gPC_?y(GIX-&_=rL5Y(iMG9?Zp6kwd z971f)sG`ARel-!WLXyKAU}6Qx$N_Y}r;pXjTw-u)!u?E@e6f($=dGXGmwM6f@}%~B zL{veXR!EPaktljuI1Mm%adHcAG4ND-Js}FfhN2`1rN2FPGHDmLk1tyu=X_hC`mqPW zVL~4*+d}sedv<`gV;F#&CEya;bm;53IGUVB_v>~lu3xC%N2&enwn@T$$(III?aKr` zE|Ci|wBSE;+`+NHTLS88^|T>UWuF}#PwNDxY_OQ;F_Q@>?)*l|?m z&i>M~iJ2E;UNHH~wk5l8sX-tEr|Af`VUV(>3Bq|4k`iDO4(45@at?sEIH#g>b{n0r zN{#X6V|PCPXx=TMP3kiKfVqxC+#7IcVI`lz?5;X4d)6rdqkQZ%+z3&%Bp0Q3h z_5-csBe(mE^i$(-F{Ued}2r;mMyMP(8J6$9W^3AUOm`nby!VMZWmMuayAYdy%h3yhL>|tjZ#*Pta*7 zwCc@rt`kEr|5#+6Tisv~C~z2yMx7Ql8yGO2VKZ(ZK(64!Z0}tRPMBQT>_-;r&5&0z z={7n^OJ;c(<>mb->qm2A;gOERt$yzV4?^QLm?%2TpcHfj>{(%! z#X%G+IRM(`7tzp%Iq0L10&W0w8!P8{@2LjCSi1e1fy@v{5o=Dk;Zth!LZtH3J?|*c z8?_+{ErG2>doR+3+9BB@=B=e*%LH;`OOD$R(;gFNa^rbNnkpajcXGJQ!?)#mai4>B ztO<}2FnUU4(8xm6LqxzF4lml(vl%&CTRZBSQ$eYc9BHhNzu&chI{|RCBY24Z)*Pq? zp@d&?5#2`GKkU8&Fiu*;ze%#$c{;x(107CpWD;P+Iy;dHWCQ7 z0Nld~QvvylGZ#rigf7-)vZEnqdVbG@lgW9E@0o>E_XXskyuefMKg_p@IX_UR-WlDD!Sk(paPbLt z-}P>y;B!o8y?x$*K2Z|gl;-pDtwlwE03#GN) zp+BbAG_`l+d%2c>DE$^w^t;EL6_>Rx>76^^w}aL|nRjQ(!wX^ce7Rk~plAv;+LI;Vw_NHh@~O@Sm1 zSLZP;fxJ_jPPAvNKF_wa<;gF_EO#0=H(tLLpEdnZpF<1r@p+2^N~nw2I|%i1ieaij z11a;NHiOQA5b)_orqw55bi;&hz4$YJM(M9a?i9N(m+I*+`;4}f!8Bw@;lg}N9cGqQ z-)T%_KBIq|z1e4|FH>nh8M&sfR(9sFtix@0+i(M5Ist6%iJ@Z^kPp+3i%y-^PrT|$ zbzAq(xi@D0D{;#DOxg0~UoJf?m>Y?afoHrFN+;#Cd8YNw>W-4ca2GTdN>-|@ zF=_ogO*i!Aithp2g}WZ*ac6FIT|Jc3G+!RXpqYblySGf|M07I)U-i!F4I@E`Sz5W* zM;Uqn!1V4lV{4Lp_n!u(l0T0H#-O5f-=xe{A|Pi*bN3u0VlQk@pS=V31Fubas_rX- zr`4gYfhOY|GGWH7bIf;VCHaC6e^-!;Iv1$j$pc>wJmY!pb@&Mkc9(2RxP_rg6@~}k zZ_(~k_31_Q{%^r410{2;HHXH|uN?P@c>L|DXA~&F{y&nw1RTo!eZTdz9jR;`g$gO_ zsVrG1$(9(AeVIaK36Z6-%$!z5vQxH6$QF}qS*Oi9%-EH+m?b1NuccS7`TZZ?|8@15 zx~_(I`E1YUe(vYK(N?Gwy~Dpg+o|qYlX>lM{~}e^rJY05CK9@KSKoW##V2H|6y-0a z=`O!h`(yI<`uR0Wb_>|CWG>ahmHPXCRN>@4o9B*`+^VW3*m_Cq|I|JXKI`tu=_hmw zxK~w{i%G^OeGs_1on>N+o{AP}ddS7r^^1~0 z;l5!D9}u&5TpE)sO$sJmA-VYoyd=iBAVcEoHrb|5U)qxIvt6)!zxS#0K#s7wkRF-U zdd&s};t0+V>qV%nR<<#l!okO@d8zsz2Tw`$IRER<%jx^{Rf;xskop7H8%eatFEY`O zG_;FGhiqpYJtpqBY0+n*F+=h~g%If?>c;yjEvhe!)W>E%ww?PJKT**G^t4P|CJyjtv%h@7A+6W8Gp*3~@neD>&N2hp#NS}k3&g1dxgWxE|&3LiD^1cQl z?>JWT=S$WdQY#q*`anY93jA0gx{)8?)ArtJ2OX!zzk;TAwzDYm?~b?Sdu)^rD) z(V7;su(xE-8dyfUgwhbGbR2QT-XokUbsC3qoPW_LO$%7qv{3IoNBSd^^MF zNm102w^wV_4deZ{UM_h1Jt>DeF(E>1YRo|?j@T%4OCm%Uo=?b{I8{|MrK>#V)Pi4d zoXRFskIGkW`hEes4PD=qH0Rc0WdL)wf)OWM5SyZ5Q%j938rtrEh#;sDH?Hx-R z*=}OjTbLqxqOt=Iq$40Nxt!WCR*cs0Nx`Twdm&wgF|VzcRfgJrQd3@xQ<1q%RC>vh z5zUkPUNkE1M%6H*b}$)7p->X1OylmQ9a3Y`X-qtQjBMV3aMLN~NqBMH#uS{1?i_nd z@yjo5W)gK!^j3(I0d<{7h(zTuE}7HG``nJ6AakfkP|}d)dh-Nb8}sbBPNPo98KWXdco z2<5SQ2>6v}bWR}AuIFJ;I%1Cj3sU^Qb!ucqwJdE*5Q>c$zA@dN_v!P4F5blWF5Qc4 zXP&_6 zdQ-w}wC>0bLd243Tv!;Bnw%d`k{L17&ML$;C#R)3SiryI^p}oqC#%>)DY?IZL|5Wj zSHSk?YH<9qNn2PGPZmHy49S5w#VfHZA0TT)Osi+EToCt5@`zTMoA(pg)bPN)ZIKG4 z13EDpigT z?Fc&5iAx6OMoJRj@iqrRqRwH1cvY0y@w3(i@4$QQT=}TndMaV}-aT6^K_8=IL4d%E zLDG;`et;WD_(CeW(TP`b0n4vE{05hTwv#ozx=U&7We$O>8bVIV6C53Lb$k~pJDU1-&S=vyX+T#mAyQ9*RE~Pq zQJ*$+l{k5Z{T1skJ6>8m)+T*_ulwewSs8By3q(k}#>tGEP?!MQ4roKmvAJpa<_i3P z34-|P)I(EQ z2=7*#*LLt)>T#YGvyJ^3LlphD-S3e)u4X9zm>rChwPKE^4Bu~qsIY0+m-%!uR}sfmT0`R-Z8aBg?KBnQA6w9|KvOOh zHG0%v@!2Q(jqzdbbaf~&#^g{n^w(u_4#^YUccDCnE_tQ@@1*f* z4ZWmayBqEz)lY7<2}J+UXto9;F93tV4C(_OZO1WJambQMM8;JX^AMdFOdZwOr%l%n z-xeLNDX{7J`6U~YJOPOG}4QX3XDHi(>9)>gnU9uL)n%(HkkO_7lTN<5lwATZL6WYh@4EtPr4^py@5}mN_`~l~^xS8vNJyA%eVlGf`Lj%l*o>5{~1t>_sQ; z@dztT5eJK}j{%rr{*U|n{u2B&48xNMI>wssr29-L^NA!^lw+o%LQJ#U(>Rt_a%uCm zAOEyptqC2y)iC>W;AGvGr6!`H{2^XAiZ-UV|B3g42@ES)ZpqDb&97#&rsa2nh8 zlpHZ9;y$%77u{t4zrwquDE{?q21q8kl-|GhZ1$E;jXR61*)YcuP_gYs4TFou)e?2C zFs|0J9&B^dYX>p4RKT=OW`&|vMW$$DFdM82>jdeh^bFd*M$PxDexcG1)&92Gv_Q*nZ0?2zi?+#0`6B|pL4$PA7sKsG`iQJ$=P zO){$MhfOl0y{sXFyI0yvDYo*l!^Jm2n+z3$CvECLkdYw#L8wdd`ukX&-d84Wk3_Fr z`F!Dsh)mL15Ms=KL#G;xWUCuL9ljCaI*zI3Tw zAAe7NJ=k7#l9As8b>fdTw9>$W_qZY;bW36oPWkgF@$B1*9S)9PXoDc}l}d7dsC#N} z2^?9t>vj6LE+?R-*wwLHt~RM-{1R4)7!d2vS#dt)S5u_lY2W%8Wx8%MeDF!hiXpt@ ze|VGxodOsT^{7_%sp={hoFk8&np;8`xwohstnlE&SY@xk=Ts}YL2q(1VFSe1VV)#s zNaV3=SaKX@VsM-i0I@shbw(vn%`)TIq4kOB{=6_q!^^MqV4|g?%(Egn(8;B71UWur z=3Cd{4zsPnH>=w6c+^C!goW-~C`%}QPY+pnQ9KkQu9noYRoJ&K@}ip~R}#quFCS69s`)|DZL z;IdQ-^!)F1N#Z?+=u6@fqXD0dbH_@jAGYNDQ=uK3UIkf#rEvcBN#s-#A27}KCRZLe zt%|AOHIdfB?TF1KK1`@O!tG@r>%8LG?sy{6P}^F>!*Lm#qyW<}y($aeNpi!U^2(@X zv(}A+rNu7xhBC`SCPdZ5+AT?Yye;H&pq}$&610iJW_M7d(O{PvNyvZpRW1Bcdgl4? zW|;?W0+tW9X$zFwO~T&I1u5SXkZj?~;Z$fcIIdvQg*6TT{b=AYk9>r9+)H)VDWk;_DbAn*r-!Q?Rc%4xFen!~SpG4p-cE)_;tto`y!N%>YjxJQ z6^ck{$l=VAUl3+8spxx}66qS+#}BOUqQp~>Cqj^^d=lbn!&}OUXtF@=b=IZaf}^eb z0PU;~vxku6YTt)5c{^D5psK?D?h-Gu&|}A`w*EDj zOzs5Q4s?u(Has1&Wor~YJ*eU=pl4enQOQ_iKq1k;vkp|ihEg^D?QT^SIi>irbnvA2+D5B5bZ_7 zq<$>vj}>FJhz5Xthp`f>Pm?>ZC9TlMv1{yZATu=hhR^;aykcymd1G9?veTpzk*B06~(KjNKlf(#rb0ySpfGAMBA z%!yPo@Rpso`$57Gbu>? zM8GZ?JF8WmWSAyz(l}M+6TM zv<{?%IfCuxq~E0IK_~lqND-P!K5zMrGVWI3wunXn0pDo&A6 zH#c`%`RgOmBCQJQ^$CdPO5p1;&>mqmWO^w~A}T+i#-d-9*4}mew>Lisd0bLm!CCe6 zU95kv(4v-qUhn78=*Bo6Ady>mt^B|pr?FaI4c9oUirNmDA^(nVU;6;8g;;Ijh-|G- z$;qXfih%>wtFyx2_HH~scso}l@-vqrOJ>*)6Sq$y2&9NYjd(QHkDP0N)pFp0iQYFC zOHX$jf0+8$G4EO1i@T}KgtZa}c$kE7{r-lBIndc!&`y3^9(TeX^BRBlFUE$S{~b(L zo!!yPU%2zLIBUvvM54}(`V0s8#{+90(hC%NsRClhOmAh`fl4$xbJsL36@F)Ym{R3X z!c29*(Or%+ubc*LgTL+FuvI%7?y~?*VgZ5NQ|F;>D>zed7zu2A`<%si-SSf%D!cai zV3pH>xzJT-k-%P%B{t_hkai8=`_MFEka(*TLeeQkyA9IztqlUx*u0*=p|8 z8CEy9Vzru_zAH4=$A;?rpUnc9J;4QCXN>idoOTBhLN>yQB9jd5HP%!aWx_M&avpjq z%~jWWZU0qWGoUngE4gjU2ghB8ro(Wb577b^4sDO|KQu~T8y(O}^HDS2)e8?ao~ZdB zMFVdJyEuMQ+TOOb)KjM#Q_kuCRoF}b8bl%mNgO|qfFtcwR0PKI@^e@4ZxrM8&QTX? zl^?j^T?Uo}iYG*H*Agy>sQxJ|nWn-Om=ro0ZT~|#IFlWKy&r(h9WKfJw;|2vuOv2& z(IwvNLzg zxc;F6UTE6kJJy32r|@S@eM{Xuy#D%ltl$AS2EpoNUe#4roU-{}`DMnZ&RLoH`~G8aL|BI@wfmgS7c!h8VT?Mi^<6ZP^Z(9lfH&Z&W?@BYFlNL|o3SjTnI3}7!EU7jXM%Q6> z12_fLkC>T<<5RxGSiMReBwKI>zgR|X+CcA@cu-)ohOB5lgsu+f0**SbXPP%tZu*kA z(J|E+l3CBK4%Xfke;}71sX4Xpcy^;LjIMp~Wmv9HZljVy0F23mmHS_Ur&Nlb)BW(S z?MKGusA}{#(pL>Oezy|7xWi;8D?p;n<`$VDMrH`0kg~`{BtZaSKy;Q)NpiItlmQq> z_8-{>PmbJ-x-#%|HcPC?t$Zq3_`nYkFXj&KKlC03C z)8)?%CHh)L?&nHN#eQ0S_@qC{X!x#tW(~&mjbe$dp?O>umvigB6kSlwyV_11pPqOi z(Muy~q@XpB-tfxwyj7@0?pHWrXOOOuZt|V@=lD+Eg!JqXL|C-Rx}w@FW8VV_SzrA; zSIg!r&w6cBb7KW*=8)?b!@kyFoXa&Fei6JrI3jB9Kyw4!SvYB;<#hGRxt+Tr@fIed zt^0fb6DQ_9d-hA!*#-$ogMgP$sz;gNd@bRq*^tG;$r3F%Q=r5nn?I^C;dD=Q<6SVHk z{ZCo`YXSB}vI^E)n9pith5_lCaX1^WM$aZfKegfBv%EMTVzIN~weM*b9R{*>2?#k= z9s(xr1O@poYyxA2)Ow*QXp{iw4yu;pyb>cXT2nXpeMakqAL2(6@TfwQ{OWG# zM?q+--NF8<-crb;iS*uKPp#Ip#h5W^-iJ=_lFg-yjg6fNAKZ11hz47pEdLY9S1x`= zlLgvi5EG)b4m<;b6#uSi-yrG{7j*doK^pyd=uEYkm{9pj)t|!k37@dz67RIr-Kc#k z%z4Pn!{XFRpoaq$-(S!B*Ng0j=3CCyT=vPbVy7ir4pR>@)2u#RgaBhBnXwO2{-21s zyaIk8Alg1i*$;Y0ma5LuAm4xW&=BXJk&=ZDd2#z~s6POAQjd-R9_s5!xJqKoL_X_lk=K6wJaw`8C zl$0M=VXWeK)DCg66!Ixz{nkZkihF|}^H#q6Fy%?|~RGMAykG}Iq=@iXx zdRAB~kg{w`;cQI2zw!g8>+D5&HdmF`FJmB?nR7=`|K#SF6!Da1hYL7}8IjaFxwWEf z4Qx^hn@men^oz(X@IK)*ZI@OoObi*cw>=#1diJzRQLU@Z?;04Ztz0IX`~>81F@%ll zqB3x3%aO|qFXw!ntb41L>%0A{N_;MDcXj@0)!p&^IsV-DuIQ#SSQ7MX3kEpBy39xy z?;&12BQDRguAevVLJZ@{)R#MW_!*f@CS8vFW-=SyIM2&Kg!nh483f8W9)6@`fUKx9 zfld?>EgZ7nx2|oSOrskdW&k>+=0TD_|`%KtW=gY7_sh8NO9vVD5^^d3Bj!)ur0iw;Hi%=^(^7mC|LHZ{wi(r(~Q23ai?x& zAeiiTzK0}vUq zRl}-6$dxS?y9{>x*VbL-vE{*th`$4b!-YgC9*5gbx`2UJSwB=>%-Ef9L}!hA4?hlf z*<={-&4^=q^68zpN1H$|5&Z*$#~s=q)DER{bi>;wo=PFH;&xdoL#w&@ zabET0Y0(R*M`mu@S%%Y}siHtLfK@mrNkX)8T`4xYvzjbu?2NS?4}>5_~-5fvON`dBVI!C~& z)BD&3fK!%{34Q>jP3lRVeK*{C0*L^|Lg!Wj-M#3vLRMzD6`4vb>EMMl~+iArL9KI z_B=iAOsCh(`ZqYSb2ckCwmfNQ3}7!H=N!k9`Sz*Ih1;|5J=9CR?I@+Qc5#y0gKtWZ zExb^EAhV6O7P)1s^7A4Q3m0?yYXNpM zy=pt`ysiBOBWw^*X&iqR#6(*t3}17_IW@7qh?;;KD_Z;$vX$dW(knL(jOJS1z3E0( zhiPyGS_M`MpBdPjS9(s5M>;_8IwiKTARXv=(UB%bIeVPW2$$CPeLdj2WbwOXFMJhX z#>{%G3O<9d@A|PpN@gEJz z8u!L(u;!l1Iq7p)b9bdmA^)l(dD^yS%Yez8ipPu+JxKbpc2>FF^!;*<%f?f@)#dcy zt}A`!yzwm0p`p4_Ua^z$H8D!DN9oDF0E@2vIb5F$pCoJxbig3V949K^_}Al zB{!6Ny_nAS{rAD5lCSOeIL9xG3(bOgJHJS*05yVkUVd{ZD7Z?)h`vEgh@ikge}|@V zT6!wykE^8FS}lANZ;uklp7r|a%h z{tjvK&pjpGu(830RyjCML2iUqC&-E73M+mg+0UvU(Wx(Sku`I0sBE8BGnoW6 z&Ld=oKHmWihm#|(l`)akbRMh2cYw1dp*_}501U>pdAazwd!>CY=8HGgoD{C>ZRoq! zkxOb^Cu`S0av}cjXmoR6ZGfGGp>}eWO;LdW9Z7Dw*nJ35;YNWFY|i7Ub3DH+t!<4v z$PVWMR?eqa1Ru^~bX0(p*&QUtWyr5mr2~YMTGQZ7lGR@h4C6bx!dh_M>7CvERrxWU zO_^CI3#CS)o6KPt-^E_?CcuC(q!yhA8eSz&fM+2ySs z@+IOR3%7TlRTJ=1RobM|>Hw4bK`Q_`Z0O&Up4qOA@Cy^P{sy>?1q^<wN0PqK74Xyy~? zI&-^GKOZFR60 zdl&le{c+x~mhDMya(AgZPCB|Nhj%q`QKg-53?LiEacBw-=v6%U6!Mj!*P!DFrkQDd^Nle?*2mMY8L}FxF6ZrKfB?oV#Qj z1}^XVU4gRecyMtjvmY3%G#Lv%Rn%LsE_zJU9(yz)>T!2*Ib#6##c-lw(my(|t-gM|u%Gth$k|UFaIOuO2J#GyX(I+!b!e0)gbLa(B(0o9LUW{Hv zN_e&M(mXi0N%#HOqJ5M3F`i+ndg#ADuve{$r;L2nHTnbOdNV82vnh!8 zF)k7%b8ott`m4I=PkA1_K!s;lnOw%Y3BaVccF--OK`GbQ{*Sp<``S;H{IKr=Td3K2rInzWer5vx4t$7SM32)mW2{1hAg5p9olb98%Bl0l_4C zmn33~WWV`2LbOKC&R$5DN$Vq6DD0cuxc}ix?chaPNn%ssOXs85x&Hxmyt~eF4 zs(6({uSeB$m0lf{Sp4FC`n!gW+IHaQeM`eoCx7NdXKDMEcJuR}z-;v$K-m*iAUnIG zcP>d*v14sjWJx|Ksdq-@0N!W^3jDw!1hT5qrx2xi z7SJ`XwcH`9kcreMhAmy69$4pO}lMF zE%_^W6NHyo6qt7>b&Ku$Na=a})s-X$YrqkXrx z76O6{iH%qqcMq9+P^Vo5)Js_0)F1m0cjsC!Rh3SMMTfb`!EF5R<+=m+Oj`}TF|v-$ z%3A!p9#;AsXu)g(y+lQwA8uaCWHIRi3Nw-fb2I09%FIuJ-of5O0|}p^*Vjt{)rDh> zgd$?65WT8WFI=jY05_g|WM|&c@RoSVC8xqczYPaNuRGp)ks!PgYXpAn16aKd1+2=V zvuA}CBb8%m7I+ZY`@f#WE!gTr8z}+;rzyWAGHb-F)Y^;}_vBE2!{>a5mR@bgy`T4l z#Co4SJyJbl3&iaLtb}KrMLtIRHzJ>{LZ97H0=wr-ddkbN(+(vkJ{(B43b`y*Z_oT_ zp8$!!Q!q9Uq4VwHb{Gq!k%rhIB}I;oq$|#7OP}TW6UFo*N8?L>?>wkAsad6C5*2-*E;+Gv8 z9MNd}>wh|cghTQiqN$UQ2Q?2iq@cmUB4tTzG)f_S)gk$;c<}0*Nk>WDZBWZnprD}O zqBXcfLT_-Nf`a|Wkkr&)F9VFlqva1BSbysKINP)z(Uh zzXX+acD)M@4bX}2sJr8AaQ(&SL}ll*KY*=;Vo!Ky$qW)baAn}vfEZ(!DOllU-C(%S zhNY$yPTz<$VocC|-LBavw;4@bLSH6JUgFWT3G5>}TKQM_Q9>tM}ZP2se zH7-I1c=d(Xy~JJzk6Mo?i<*ngsd5)RiII0fK#yOnQ_hau(mt$AVbc^nt6g2XgPz>g z3P~z>AFuznPxql`lKX~=W~0k-U2z?-1O%fepiq&clBT5d;rUE_gTd_XqV&(1zG@B0 z?0rQ!n@y&_M$;0cI{iC<8`+FQ=`my(bX@u+YTef4-B-1Nci=E$bV8=5&92dX2KaMi zH%VtCG#Tq*$Kty9&O_3%LBJ z@OoB@NvB7$Le2Zs<`0j~#^l)&dV9P~rVE|lOY?sjJibaj(D=)4l9qy%bMP9(xU)Q3 zN>E9oU1wcme@LC*Q?GqGbJ{eK^%rbB$MD}F>oGdSE=zd%4VRW}*o}R-?ibu8b-M56 z;=_k5^G@||i5KPp>4t30$N5gM?54r)x%xNgqW~HuMLR-M(JAHBkEwJnhl!<@x^~Ps z-M_zW`!+uhvwJo+QbJYWd>Dy?dp1D3;PW%|@H7hM*PXH2Mm!v4q25uO*8IDn$GrLD0ppVR&~Pk zP=2}-PWil&e19{+n#_>n2ay>8WQGZGV<#MMISJsCy1LzG+ZJ|(i`Nk8MJY+IGx6w~ z;^Dd06nXsFThUDi5j%`Sg^D2xSrrfa8<(5V(8&6R`!{$mR>YZ&RqvhDuB>dh{({qD zoPFlvTO095V2Zgk#3o=X^}IeFfw2NwZAvsv+P_#m$9IoKK-d1IzmCR#|2b;BcuMBs zyBup|F8Uem7<5hFL<%JX6s2`m(K~1>8bw75I>iJ7BFQ>So9)s*MXRY(Hi038Fyzzx zQGkOqze2lH#`ky!UDS>qWl6~sAED|i{tDk#QWmp%{`FcpQ+lPQ?rsmGuvq%h3CTl^ z>%eRo=AC97w9U|J;U}wdzwtwQ7VxtCOC(owpG~C8Lznve23<~^mtKDEImq=1@&7UL z4P+>?p(km8cR_9er^Cx)VytCu2(5%@#uO7z=G&}_uyLmav}cB`jJjz%3d>}aBX3wU zvX0pe^W9;qhy+_pEUTM*sEP^Ec4r3AD3uw#!_#vCZdbE$%Px(b6E-i)4gYKn*$bxb z42rxl5PcG3^pPmmU%47tYJy!AdP$tEI-G|A!n;1*O;^7&bGrYw!^)ljI~bzK3nji1=iL~f<8f59#GZo7*^X78GzAnM0iJ2s#IWC0NsCuCz(*fH}zIh z$qP1D*7nTH?(Ldcud(}%__KBu@>NlQfL8%r#sXT!~_DNvZT#M8g^4 zllPn?jGZ2bd+v~xFLO^-FI6~e*CdZLlJ$plKA<09&`4mpygxCpG&6K}(p|BaR}$RQ z9D8ocbY1pfMXw~R#_yEpCCMe@G}bEhPWGX4s1*E7=Lpi{nDg{fvJr*R6izwos~J?d zP)ACvt))G$e1DZ-`&y#tV@NaM9Lb*V#&?CdkOAg%fuvyXJtMAsyc3;GQJm50ykwr8 zLtPCN_Hx_!^~zN%Z;fVGmr~Ta%MrF$E=MX+T;dYcQ?;y0aBwoGJ+|E_^W1$_*`u-| zKE3h4#UllzY*m{(?Q#I%YC{Ff1Urqj1)Cx@LLq)5>R#qmLwh0_S=+-%*%{|w@N4CJ zn#NlNi)V7R>n0~3{*>R%)lNO19+dTOT+H4ug5(FEpXVtahICd1OY8)&J>W-lsBWmm_ zt#NvarpZGjFdOW~A&+TKT=lCkSX46U7^g0ET(F&{O7bB(o#BmPF)fUFTc`Y(!Fwj# zZ<>Pf#4~s*N|oSYw7#=TC@22hQX&))yHE+ad2ArGVw&787axJj$Z>rQP+ zxaj@YKr`W_GpfJ<^`K(7)Drf9_g!d=6gUkv83{xhfp<6XdVj90GH|v@pAH*JplQ=IVO_dvP*zxMK}bS6_H*b&g+r-J5sECYE)lH_PM7LH8iF-#P(y zQ?Nu)7-Yt|EZTcLW54=Hi}?cDimm)It%CwS9r~~m^n$jZA|J|bP!0M-a@eL8IDMYD z)K_N3-}i0VEK=U+&F>iTZDED3i_P{09MA;^@D7q&OH?mZEC4k_$q-wiAyQ`TX<;Fh zkUCQC#TO56>{z`R7&ax zg>M9k-gTrkqmrgZ@*9>*UtHBbo7koJtbPF3D{CU^;`9|*#qeA{UXGChYgz$UPJ15_P0N2T*9o7Y5j=k6A1&I>8N{mpdGuu?@7 zd+)w#c@)xwOt|i0bc0Sl%dI}~MaO&qveFHU5Z~SlmrX$y1QiV-{YxScPjrye#xJB4 z@Cez5`hHCHm(5S9saJpZlOObZyX_BIrTL8wo05)0ehH$TIJB8^f{vcx_;>gpAnHdH zi93C>wG|KU^+N3BKKxxR8d)d0HvO5%OwR)td>H!5b1K9{dhl zv{^m?mjXmf+wwlvf_#>Kw)j$=YTg9Q`nNE9ETPH#4@EbuLwsA~F*?C_h*SH168PQ3 z-_wAbKj}ZU0U`jY0f)-NdL;!gSMs;ARb2*PjI$Lgt3PA z9wH#oVdMEP&_kve5{}*o_IeH&GtDre@>4`f!AuB;H*eAJUM{d7F+W&b`Jxg;p=#h= z^#Q{U90eqf^F}(Cb9wYreG7El$!0XN#8|SRD2r^H7*szbI&1k=W8j5o;TiJPFvzH+ zkWY}c8=BDouEYuY;0mBs*(|KJE*#fM)%Z3v6h_M6?g;luy8L%oaO3lp>su!+@3we5 z0gvSaKhmrev|-kQJ2H|?Nzo!@@|{yxCihJ!dWI&2rCAPp4GFa>l~h>Pzn43^3O2Ei zw8YQfDw`7VYMVM6oqeZOgsh9ptW#kDw*-f+3U-nlun#+mAbn)eZuc)*ebY~O^JA_- zAL~uZxQAMvM|aF=D>>^XT}gz4udm z4;>a3tly0LUT*jKSL+RM58?-m!#&e!FWIsvmz#iuCN1>J`nQ zJlQzeOmIc(VHX7Ed>h|k07Fm$I>&DGL5zlbeo%whypW87n9sX4b<}IlAHCkyW47LU zNF)*n1t$g2oVA@23f*)!GAK`1(xwSorX@4g;-&2mFUb$u{Uv3d;JMxkU`IAot1{sy z<{`;3&kwwhQ`rDeZYF+^VnCC{AwwvWuFf2%QepRF6bm% zi*Fw`Tk)lK#GLnfyE0x=^z-MG;}E#D7-L`dPb3OKSg$E0hfT3U6G)C4oE`gwG^Ol( zs70rh#aox|)n58jxAa1ORWR=Rd`*?l@+9>?*nxpcD?0}up+W%qM_`P}&Lfd4R+S`b zSKE?5@?%_8tk?O^ubYc*`pWyhBG7Uxm(KQ5Wbyh3uUFqu&$JxQaNXFupo@!&5(hLL zlAAZIfbWop^}w4Bj_UH3!BD;HeHm@I=g~VBD)*2UscjQ81Jm?C5)+C?jp}b4&N8=< z?{9eICw-Cn@t6CXzcMaB^$3)Kl+I&Q4XKn2TXJgo4*#xxe0 zp1>nBmCyrqcL^z6M8Orvz{=0{;|<>rrR7ibC=t#{Ohcc}m9GS>rQSFnDe=ch*T@V- za`(r)sCIgp_f-=w2cz`5Cy%8{vd%VM{3~V7wH{P&9y+X=m-?o^eSd9OM*Ygp!z!n4 zedzo8^VgwdV2r_zmYMVhK5mjx07F_%`dI>6rMb81l2mTSS&yCRb^{!iT3E27UGJ93 zQm>zr)ZXY@{e2?Ah6*lqYl{6COUFxtMd0wX!XEI?52U2!`&?Uvs_M%q#3Z1qXN^t( z{>bc@XRcaz;?ij8w3HYL>e~F$NV$|aYgtqEh(FW8->aW!GNt{OM1ywm>PCdgCS$C{ z0`|xZIRl4e&ikU8M4#!ImHD)W+F<^nhVsjwWjyYA$R@A3_T|IfKZX|1I}9khG*okf zAdeB3wBTvF)$QF~gL=2HV_;kKgpi6u64eQ5v61K)JYu^N zmBpT;NnEw!(bANoo~V3h32)PuQ8=iWvV{aPo4go)pc&9++DVsqeh@&NMAq6f7xV;A zti6Wjnm)5sQbJ6!aiN*a$oOgOPqFy&+tQ7CbIn{Faz2&t8Qnuu#){AZ4&m6ET-h0t zgTcs49SFNcWxOis@%vOKjKQNo}7;+o7-tgdJ)+U|U!_B$9b^L-8QUfKw@R z%d z77d&Wj%;NqPS@Ugsvtqqn6o+RSOek}S+ z-VywbAz$Lt_o1;d*CR~&lBofX$XZ5LD-B{`7{NY*)=py=XwjMeiUskaB zjpFO|6(_b!k)D*y&=^!Yjv*o4UbJ?9KF}yP$H73RPx}+40wYK6HgkTa|i$@j|i!>lx%x{`g|L%qiE5Id=Ry)QHUwZuz0grwU4)r zt5aF_f9tM5y)9rZxaeo_-mG5g;O?Jkib;aYlNnaR*5Hb&%d=T0^+j@T~> zs?5f37<9as*CuhfCM_r5^Fwj=o064oEDGT!(-djko#dk!!j1JCp^w|~mJ?J*O6_dw zu0M#bp8Z)Gde!}P;b_)<`QKy&&!gEwOdAXFKRGi!it9W9XYlxyh_o6le3G)SP@nzF z%Qq*^_a8of;Ob@9vjrX!K&S&tgteECz(CBF%GC41in`&c4*3U}Whhj|@DKv6H*v4p zFUh_znGRhIfz{z8J8+c$)5yYit}PySI8wj^XrVD_U79*SBId5b0FdV*D(CO{lBkPB z(Y*_^=ngeg)~3K?Oa4%hX@~Kv3wTbvr_~40GRKrr|0}CIsk0i+Vvkq*_DPj7yaIpe33%eggLY+XqyC{e-FkU zQ0HGT+oYbZ_!Wpgg~6__o^!0eSNVtR?uWup(gtf1pCz~|YV0jR%)kQ20NJv}PTFFJ zy}?>~3Fd>9ErPxw&oX>wuYlN1b^L#l>XH&WTO({%?-`&)tT?DYX#p68bcugy*794n zW48_^pMFE;{%gEk|J1^lTUrf|Lu_0i7n(%_Y%^YC0?C+2YjRmzXR-J2c`J!mz;g(q z_URFLXO;q1?ao%o+|lj4Z@6dFWSvZUp9fG5$M14TjP zw#l<6cnkSZ%<8dAk=`9rzgMcsHfK9tDohWhK;Jh~(r{V3$v_=FI)Lya#K(lJufV*r}{~9Y6Nm^eNe{D76a%Y z1xAfHnX5yVYZ&6j|3XiIsc)#(&f3Cesp2Kq7bU6*E|xo;ZSL(Cm~N6^oM7V7-%#+Y z0WX|=zltNJ$oKfhCn3uD1?QSB@Twor=?vKk8PSE#9ocmLw(;==y-y{-m}~ZG8VFQH z^8-Tp0VPNUk47JoyyknNW7+X)I#%QUYwXO6C9lah_oXe&Ot-&sS=u6E2y<=|nITFF z66|b)x74uA8Z&DnnPByOYUcWv2cG*l#r&Zb(f3;#Z0z~AgXd;=+a`Lc6d{j*So8+Hf6?j}A2m6VTgEluwgfhr~i ztKraOeBR6YWND3e`OiI_ese!K@woo?e~i}ZX#=PDq#h#rl;8J^t6AZ`AFH(m| zMQSh8>>T%>IL9wteW_r3{KEPU%2rt1(#Z^&Z!3b7GM$(_*r>;9SpBX6JbpnjMKP@4 zObs&7ob@YO7jGq$(BTvGS;4{}Ai6;se5oCPHVn1iIN57{@Cq8+h*ciy^mwCdoG?KSSvhfZJg5j}f{+n4s%{6Mma1 z`zzJkWFAHzAF}pi^FX_J^Sk-vUZW>RaaVMdo%=H{^Gc&7lqAOCmD^$Qs zu}&}*PUZgoa_4`ZcANa0EZXV3-K}T~_D9+_X>Gx^ zXuyom-eROQ6GZqI$;=uW_Xr%}Gt&{E97wV4IOH^)+`^e`uiBx8T3ks`QmZfz*=dlw*`0nqs=TAzdBB_a83s8e$gh=REYUNXL(E@{5@J zv?jT^3@{2KQk9ZONBJ}m1q}D6-w5~?Yw+l=FC%^e%Q>zDJAoR#s8UERAHasO}sqAmW1 z(U>+Nw4|NzMAFgc=>H?>N}!?o-*>xqZBmpel*%wG@I6r*LEeJfM_%xsY(fYUl`XZZSc*p@}56wQhMWQ z?}D*Lwnl>~E|rMP&>1Y)yN|h(PXQk=8KEWDwr96~8MHN-xn{E^INb5pyJMPz)*jI2 zz9cV7U5X&AT%o-(i3)g8JT*1TmS57BK9z?!hq!yIH91`?YU+!;9u&US%JPY6oHAjf z#mpSW;b9{bj7!Bh2g9C{RD{*hqfNSo6_ud`m0wBz{vPw@X8BWBQ$ML44w;qG_Foco zfKwdLJAgqcK=&P=*@z7Tp!MIfM2>`6yX-MF<=hT<*nEda*=|} zEq_YV=AUKOh6SUBZDD0lBaYO%+lG{>0!#^qAQHx+;*dysDsftyl2z~D zNjXvs3V;<-TwyJ{QG|Ig@3s=5=kDEek3u5P>x$jo0i!*NCBSGWfx6Z$@wTlbWquVO z-xe@b^s9ERuei6__1gM~R3#Zs!}4FN-3aFZRjUz@N5I3A!Y#3Dmhgc$Nl(`4cxtbf zRhT;%c`Z&>q|koAPwJ+@C*bn1SegD_a0_j^WG4sf{$`!(_IPFKSFb$S&eatMHJkP} z--Jr#BYF~9uMdPVz5d5ag>|ioa3(hMKu?UBWf#dLX5uo3u0&{+1jXlFGB_~3?`Y_g zouTTh!^OKTD^|(1)K-+B3~Pk+1%C*ZFPFiiw*7h@qtDqCXySssEw)!AeY36o@&51O zeK+&~y3!I*1h%e_YEqNPfmk18c|Wi+SOJ+>c&|q}eyK&nL~g%GRzb3Pumj7YqKf!x zLW%jwtjM-AOe8RwGZj;@RLYznLZLRp11{Ij>HV;k;tEJ)9H0Ux;Cc1X`DrMp zp`@gIVCU?7X2}~|4M%1!BX}O@Vja4MeDx}HLn)M-55xaGax&Xm5HNadmF|_Lg%4LM zvg0sQI58*dKx}dGkj2$-N5d6$c060TDE^Zw^d61$#N#M`gMfU7o{q~%{<)REpWnf_J_RHwWBqPFZ?Td5!;)+IbGN`sK7Ss0}Zps-h8wqCL5tUaSZD5 zF^O9t{3)c1|K!{Hfl>0+H}MbrE5F>c9!}_flf40f!fbSl?V2*wrU*@j-gAMs`W!Iv z38>X`Lm&9CrP3gUyVfbo*!{VKxvj0vi&HPsUPw-Ms}7&kd;y}NKn^b+8iN=?6UviX z3lRC@vdZ0EJu9M{Sz4pCy|fg?D|<@!mxlFae5oBVm;CfF`2|9xkZ`AJlQrjp&y}1f}Kqr5u^f^`B9*2&6ur9;_d;@FpE%usE zLWF#-_G0>(i@gLl{;Rzle(GFCjzUl4Z5hw=BT;gW(~yPvsH)5 z_T&q8@1K3Ub%DO%8OhC3&6V&m}+YR&CeOT<4cN zSW+;}sgm(`R+UJ?1kBBH0)J3kq^Qw#Dv0uA6M-dKMR>!fbA*$13iC}+?;Q#(3uN`H zh7ZSWopBqq3k1LZTjt-H`S+qQxI#AadQ;&Ag`-laLz-G+B3(+YV5(FSS)HCFak<7W z>3YPNzTo$%Po0uvr5aEq!#hz(&+Yrij`?+0TFu^)p7noOW2kV!!0nY($@-W8bCF;; zqP4D}h3EiUhC-~RIlv{hQ5BnW$CCPWbKE&}wbsw_nYUYH`=Z!M(`$~tbg;)wz{z`^ z{rq*wlBB=&QjR4KVZ;UMX)L7!`vucn8Ly(uIYQv>cB&dqQ{W$88|f+eWA>jsMD95t z!Gx~lKO;a-oV37!RCFL_mPBGHgBFiD{U!OS00!U8;0tYd{8)B zm_gZxUT?uA*?K%lXJ@Ln9q72wRMepQy!6Stfk{OffWC(eeC(#wNk|c$bJX9r;6O5pMEor8L?5 z+hf0b6l+uQ2_CuCd}>ycdGPgsA2%z)4I7TNzLVFdKLQwVn5w{V;Kvm-BXb$4f7TNZEr@wZ3Bb0`5&(kWEhQU<0u4tx3D z%@i5IIYah>I9-0xf?-FxZ$XS0=30C$zxv-YU&6=U^kLdV)#F}P{GqbvXb7V^vn{IR zSKrn_SKGYeP}%G(sb&Xt`}eCHX>dgG)IjHjehh!a6B@l?_I7Zd^TRT^{5_kl-7a=~ z)9o=*o0{Fteq=h(tn8respSEt$WU?8?Z7&*Ijjqdc-@WHn$~)l700;Frf3gsOAhFX z*sQ~O5J5eE?=-#Yf9_pH#U#BJ-78tz^uwsrnLf{bj~hhVa;~lJ%DtK-S0Z<0gE@FM zK!-+~Ie0_DJ?&Xyvv<583GtKp#x2BDvRkKg63d}Cud8^Xyv9A@pX~wPyS1(P6W;#< ztwipGal9}A#kON+gNb}QF|JyT8Xuduf@Eu1nbxV|KRxk%?bpra&@uZBXyoqAlq_Og zKowV*lU14~2rv0%_2FCm!msP|H9l2oxzYko`Ij zOY{Q^7EP>-jP=&9iq0HPF~~pr=wlG^yxhEuAXs0S>&r?K1Vtkj<&~Kghx!Nb=2G*U!vxe3vRoJZI2O*mA_` zcNJR*N`52x7^g8Y7i-{$CHa~VEUm0{dUD6AgNw$Jj>ekpWvM!jptiXZUyG2VrhH}W z=V?5^l}Jn(X|8E*9ZDC-AsU6AX+g~;i@wAb-`S3lDAyU&S`D-FIzZDF@#^4Xg1--A2**`x8{1Fg(k^>O>D(KyS*0Pg`2INsVzWw75~%xLB+ ztSA25v5PNTdLx69WXb(iMGK8x#}91VwK3@Jj(@U{l)>`?SI7|Xk6}-$*Og*J<#hbv z3YX)-;!U$E4`K{%+mz9?cV*>2o4)*jP+ZT{MJr~6s){TQ3_gED+Y=yCvvEg=%Lym$6r7L0;9NO_;f8}AD(C9ay&b;ZN5B5%$ zU2rM-?umCxDVp*)dZyFYPIG!f{9Jj*Zz+WfpIdg^U!_=cLGwdFsa*Qz5D_mCsIJ4& z+NLA`cC!Hm`nhh+AyTdC+egVK`HE2(F)2z$eDF$r&8^eLa`HDq@4fq;32gk%_c^Yz zIi>fj?X$lm^^NHnZrxY0v-VDaq@4H9Mzf9h3&sg>AWr;Rj*D?o)Nb!qj!`_T2&@}OAdeZ`SyrOs2m0z zK^gG48BQSoG(uP+Qyq+D3m@%w({(_uCn@^b5vAv!&TJA+{I=Nr4mX)bua*f2f}TK# zHYMRT`;a_YZP1*KPj$Fh(^srh=)v9pd=x*!y(Mu62L!A`u|20 zLOe|->Yj%hHks-NdIzqu(se>SMDlwkZI&NZ4SDAE=aA~k|7peGx5AwnV>E0Od(#8l zB|j6Q350O(vHI8ZgV9-2uA53)w{H2+g3a7)bQzdfGXQMNfH~_<5ZSY?VBRoPkIzMK z_l{pE*)6u~M^sAM4gJ+XoYF`s4>oVbA)t~(r6yME=7~fDjf_oj0rr`{7phc-7`Knt^J#XT%AQJ?rYMq#t^Kns^X`fi zUS*~81zpjrNh-I&_e{7o>ryX>QviN~--ac2l*WC8YHQ=kSBNO*blll8qY{^4wbb%) ze@FQ-1J@IQjx?2oe$YpPsO}?Qm|p}!xpqM69L9?J$|Iw7$&L=LEYlE!XrujJrP6iT zuB$)NUNp3Q0`Jaw9G{M8G>Q2ywY!7&(8R!i8!q0mljPo_ag5(JR-II-^fUZ9;hUrN zHfu-Pk-i`**Tlb_i13MMZl~BW-I(2B4D*nIAiY=a`JwFYzQ*>rQrWa9?y2ZyJuXe*d-Ozhwb-LvM;RCTDYO@1A)8RHEkYm(a(ckd}9ce;sWYIbI@coq+oPpX`fSl7dj(d^Q`>YsbUJL9#n-a zCIP8orRtu3jSav&_=KS~cZNYI9`b@jtd0{nx-)66I;Q4~?XZZdCDd$c*~eC1viLC{ z7OOMB4Ho^MpS!+>pS)5H-o6h6RXruC1=m*Z!fzecF_6pbAA({) z3@!zSM5N)_pw;@EhT@6@r^a_4YvMC&k}n;Xp%20Cf^WTaSI4=wd{A!bl)=bJIis$IiWTGs6Gr{L>*6XQ@eG@p#}+q zCC61OUgyPze7Mc`6;|T-)T!oe+5Jho)E_GycU!9&$Tfin_&zGype@z~;;KQ>CkX2T zV8TNg#0za@X@ai1H?19qJdy}{>*0mjd0l%hxQLbtIFe#PANZm>{rk411+0=?`w2U~ z8FW%;f}8kecs>debpWhHLQuCMZ!EdaF#Y_K0h?D@<7W~IedC(ub5&K!M9$x@*j2=# zEQQVht+nCW2#4J$>Gbq0vob!84RzOry57jA#wFi^tq8B4oL#ru(w6CScyhIojuoJj z&@A8u0A)JVdes!=Pjp4KLn%WxC~wskQeaCc;mMeb(?$1zA#LqAVUb@stRRa8G#gfl zx_}6ec!y!b`R0{f(zG4{IWRGdhw*f~w{NVZ95yVFY?V z3T}QB_{e&#o;EHZI2GEsYWS-s@9eVI?jI8i9+q02xN^k_oy1DXlp_8VUz9;d9tbXC z{64=aCXH!4r3L~q=O>hcLh>4)4Fy#58k+HE47Qai5G$#b6ad9u>fXfCmzsvDF(icV zg~%|hL@OcO!6o)uC5dI2k9N7nyY+22rfPXxR*p8gB5&`zJoQT!P^d)y)d?B!fgsI} zPOdF`{_&YhfJ~}wmtmK}7yXS}^_|~uJFLrGHV(O#k2O5B6^aOMi3+@{LHQLDmdUjC z3|^nFH|oVZZZN6sGPJ?fbw(cLU0eO|L{u~DX#?>E1qrD(1R^yy!hPrmRE;XsN*PL% zN;it1CpTAF&Nn=+>i7L6zc=nk0{_0Hw$*RH(Mq|0R)Skqe4fC^u$7vk4tfAkZmYK| z<5M|}F%`zzO#BHGPiD#Vf@Y~mZ*S*TS=am+CAO@yW)YhTwqs~3Rh!agL+UpkXukS| zt~4#Xo}}FT=)Yw(5l75sBGbflCO5f%4U&2erW$xPI&V7$3=gfPbd`ycIJBcD(kSVw z?XqxW$hY16tXp=)_eRceiS5pZ1J_RlfBsj*CbkOeQrZrIO_BFp3k3;b%k@e-*p$n@{aEHm9>Kb{}Mw9ge9NBlS1Ru`0fJM9?j!2R7`LYhxI9DGYZ_PaNBE|MTZT zOU)~xYU>|GlrKNA;;tju3eH28p+!f-iUn5idKCmWQ97ejt+K-FnOau*P4y$kM-6994zh$@DO&rw-vJj4-dq7&&ic9S;O$0gFJk-N4Xrv`AELk{p z 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

&3&3@m+U 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 Date: Wed, 10 Jan 2018 18:22:07 +0100 Subject: [PATCH 092/103] Remove example_shortcuts in favour to example_pocketvj --- example_shortcuts/.gitignore | 6 - example_shortcuts/Makefile | 13 - example_shortcuts/Project.xcconfig | 17 - example_shortcuts/addons.make | 4 - example_shortcuts/bin/data/ofxpimapper.xml | 36 - .../bin/data/sources/images/image1.jpg | Bin 268727 -> 0 bytes .../project.pbxproj | 1335 ----------------- .../example_shortcuts Debug.xcscheme | 93 -- .../example_shortcuts Release.xcscheme | 93 -- example_shortcuts/openFrameworks-Info.plist | 22 - example_shortcuts/src/main.cpp | 7 - example_shortcuts/src/ofApp.cpp | 102 -- example_shortcuts/src/ofApp.h | 21 - 13 files changed, 1749 deletions(-) delete mode 100644 example_shortcuts/.gitignore delete mode 100644 example_shortcuts/Makefile delete mode 100644 example_shortcuts/Project.xcconfig delete mode 100644 example_shortcuts/addons.make delete mode 100644 example_shortcuts/bin/data/ofxpimapper.xml delete mode 100644 example_shortcuts/bin/data/sources/images/image1.jpg delete mode 100644 example_shortcuts/example_shortcuts.xcodeproj/project.pbxproj delete mode 100644 example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Debug.xcscheme delete mode 100644 example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme delete mode 100644 example_shortcuts/openFrameworks-Info.plist delete mode 100644 example_shortcuts/src/main.cpp delete mode 100644 example_shortcuts/src/ofApp.cpp delete mode 100644 example_shortcuts/src/ofApp.h diff --git a/example_shortcuts/.gitignore b/example_shortcuts/.gitignore deleted file mode 100644 index 4572154..0000000 --- a/example_shortcuts/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -obj -*.xcworkspace -*.xcuserdatad -*~ -config.make -bin/*.app diff --git a/example_shortcuts/Makefile b/example_shortcuts/Makefile deleted file mode 100644 index 8d8e4c0..0000000 --- a/example_shortcuts/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# Attempt to load a config.make file. -# If none is found, project defaults in config.project.make will be used. -ifneq ($(wildcard config.make),) - include config.make -endif - -# make sure the the OF_ROOT location is defined -ifndef OF_ROOT - OF_ROOT=$(realpath ../../..) -endif - -# call the project makefile! -include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/example_shortcuts/Project.xcconfig b/example_shortcuts/Project.xcconfig deleted file mode 100644 index e570b15..0000000 --- a/example_shortcuts/Project.xcconfig +++ /dev/null @@ -1,17 +0,0 @@ -//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. -//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED -OF_PATH = ../../.. - -//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE -#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" - -//ICONS - NEW IN 0072 -ICON_NAME_DEBUG = icon-debug.icns -ICON_NAME_RELEASE = icon.icns -ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ - -//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: -//ICON_FILE_PATH = bin/data/ - -OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) -HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/example_shortcuts/addons.make b/example_shortcuts/addons.make deleted file mode 100644 index 963941c..0000000 --- a/example_shortcuts/addons.make +++ /dev/null @@ -1,4 +0,0 @@ -ofxGui -ofxPiMapper -ofxXmlSettings -ofxOMXPlayer diff --git a/example_shortcuts/bin/data/ofxpimapper.xml b/example_shortcuts/bin/data/ofxpimapper.xml deleted file mode 100644 index 961b490..0000000 --- a/example_shortcuts/bin/data/ofxpimapper.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - 431.000000000 - 13.000000000 - - - 781.000000000 - 363.000000000 - - - 81.000000000 - 363.000000000 - - - - - 0.500000000 - 0.000000000 - - - 1.000000000 - 1.000000000 - - - 0.000000000 - 1.000000000 - - - - image - image1.jpg - - - diff --git a/example_shortcuts/bin/data/sources/images/image1.jpg b/example_shortcuts/bin/data/sources/images/image1.jpg deleted file mode 100644 index 88cf12e429cadd6776396bc6c59d31ea444fd8f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268727 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 z 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

&3&3@m+U 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme b/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme deleted file mode 100644 index 48f0e29..0000000 --- a/example_shortcuts/example_shortcuts.xcodeproj/xcshareddata/xcschemes/example_shortcuts Release.xcscheme +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example_shortcuts/openFrameworks-Info.plist b/example_shortcuts/openFrameworks-Info.plist deleted file mode 100644 index 60abaf8..0000000 --- a/example_shortcuts/openFrameworks-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - ${ICON} - CFBundleIdentifier - cc.openFrameworks.ofapp - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - - diff --git a/example_shortcuts/src/main.cpp b/example_shortcuts/src/main.cpp deleted file mode 100644 index a26fe86..0000000 --- a/example_shortcuts/src/main.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "ofMain.h" -#include "ofApp.h" - -int main(){ - ofSetupOpenGL(800, 450, OF_WINDOW); - ofRunApp(new ofApp()); -} diff --git a/example_shortcuts/src/ofApp.cpp b/example_shortcuts/src/ofApp.cpp deleted file mode 100644 index 68b09ab..0000000 --- a/example_shortcuts/src/ofApp.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "ofApp.h" - -void ofApp::setup(){ - ofBackground(0); - mapper.setup(); -} - -void ofApp::update(){ - mapper.update(); -} - -void ofApp::draw(){ - mapper.draw(); -} - -void ofApp::keyPressed(int key){ - if(key == '1'){ - mapper.setMode(ofx::piMapper::PRESENTATION_MODE); - }else if(key == '2'){ - mapper.setMode(ofx::piMapper::MAPPING_MODE); - }else if(key == '3'){ - mapper.setMode(ofx::piMapper::TEXTURE_MODE); - }else if(key == '4'){ - mapper.setMode(ofx::piMapper::SOURCE_MODE); - }else if(key == 'w'){ - mapper.createSurface(ofx::piMapper::QUAD_SURFACE); - }else if(key == 'e'){ - mapper.createSurface(ofx::piMapper::HEXAGON_SURFACE); - }else if(key == 'r'){ - mapper.createSurface(ofx::piMapper::GRID_WARP_SURFACE); - }else if(key == 't'){ - mapper.createSurface(ofx::piMapper::TRIANGLE_SURFACE); - }else if(key == OF_KEY_BACKSPACE){ - mapper.eraseSurface(mapper.getNumSurfaces() - 1); - }else if(key == OF_KEY_LEFT){ - mapper.moveSelection(ofx::piMapper::Vec3(-20.0f, 0.0f, 0.0f)); - }else if(key == OF_KEY_RIGHT){ - mapper.moveSelection(ofx::piMapper::Vec3(20.0f, 0.0f, 0.0f)); - }else if(key == OF_KEY_UP){ - mapper.moveSelection(ofx::piMapper::Vec3(0.0f, -20.0f, 0.0f)); - }else if(key == OF_KEY_DOWN){ - mapper.moveSelection(ofx::piMapper::Vec3(0.0f, 20.0f, 0.0f)); - }else if(key == 'k'){ - mapper.selectNextSurface(); - }else if(key == 'j'){ - mapper.selectPrevSurface(); - }else if(key == 'v'){ - mapper.setNextSource(); - }else if(key == 'd'){ - mapper.duplicateSurface(); - }else if(key == 'l'){ - if(mapper.getMode() == ofx::piMapper::Mode::MAPPING_MODE){ - mapper.selectNextVertex(); - }else if(mapper.getMode() == ofx::piMapper::Mode::TEXTURE_MODE){ - mapper.selectNextTexCoord(); - } - }else if(key == 'h'){ - if(mapper.getMode() == ofx::piMapper::Mode::MAPPING_MODE){ - mapper.selectPrevVertex(); - }else if(mapper.getMode() == ofx::piMapper::Mode::TEXTURE_MODE){ - mapper.selectPrevTexCoord(); - } - }else if(key == 'i'){ - mapper.moveLayerUp(); - }else if(key == 'u'){ - mapper.moveLayerDown(); - }else if(key == 'p'){ - mapper.togglePerspective(); - }else if(key == '+'){ - mapper.scaleUp(); - }else if(key == '-'){ - mapper.scaleDown(); - }else if(key == '\\'){ - mapper.togglePause(); - }else if(key == 'n'){ - std::string multilineInfoText = - "Custom ofxPiMapper shortcuts\n\n" - "Good day user.\n" - "Shortcuts have been customized.\n" - "Please make sure to provide your own documentation."; - mapper.setInfoText(multilineInfoText); - mapper.toggleInfo(); - }else{ - mapper.keyPressed(key); - } -} - -void ofApp::keyReleased(int key){ - mapper.keyReleased(key); -} - -void ofApp::mousePressed(int x, int y, int button){ - mapper.mousePressed(x, y, button); -} - -void ofApp::mouseReleased(int x, int y, int button){ - mapper.mouseReleased(x, y, button); -} - -void ofApp::mouseDragged(int x, int y, int button){ - mapper.mouseDragged(x, y, button); -} diff --git a/example_shortcuts/src/ofApp.h b/example_shortcuts/src/ofApp.h deleted file mode 100644 index 63be198..0000000 --- a/example_shortcuts/src/ofApp.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "ofMain.h" -#include "ofxPiMapper.h" -#include "Vec3.h" - -class ofApp : public ofBaseApp { - public: - void setup(); - void update(); - void draw(); - - void keyPressed(int key); - void keyReleased(int key); - - void mousePressed(int x, int y, int button); - void mouseReleased(int x, int y, int button); - void mouseDragged(int x, int y, int button); - - ofxPiMapper mapper; -}; From d91f8ccc95bae12320d52d18eb4e97543d9f738e Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:24:33 +0100 Subject: [PATCH 093/103] Add delete surface option to example_pocketvj --- example_pocketvj/src/ofApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example_pocketvj/src/ofApp.cpp b/example_pocketvj/src/ofApp.cpp index b90fbaa..ef84a3a 100644 --- a/example_pocketvj/src/ofApp.cpp +++ b/example_pocketvj/src/ofApp.cpp @@ -77,7 +77,7 @@ void ofApp::keyPressed(int key){ }else if(key == 'z'){ mapper.undo(); }else if(key == 'd'){ - // Delete surface + mapper.eraseSurface(mapper.getSelectedSurface()); }else if(key == 'w'){ mapper.togglePause(); }else if(key == '5'){ From 3b63753ad1c6dc8877652d3c03f4c9b5e7f0bc1c Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:31:25 +0100 Subject: [PATCH 094/103] Add wrappers for Application::addGrid col and row methods --- src/ofxPiMapper.cpp | 16 ++++++++++++++++ src/ofxPiMapper.h | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index c41eeac..ab46a69 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -162,6 +162,22 @@ void ofxPiMapper::eraseSurface(int i){ } } +void ofxPiMapper::addGridColumn(){ + _application.addGridColumn(); +} + +void ofxPiMapper::removeGridColumn(){ + _application.removeGridColumn(); +} + +void ofxPiMapper::addGridRow(){ + _application.addGridRow(); +} + +void ofxPiMapper::removeGridRow(){ + _application.removeGridRow(); +} + void ofxPiMapper::setNextSource(){ _application.setNextSource(); } diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index f8e72eb..8220989 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -71,6 +71,12 @@ class ofxPiMapper { void moveSelection(ofx::piMapper::Vec3 by); void createSurface(ofx::piMapper::SurfaceType type); void eraseSurface(int i); + + // Specifically for GridWarpSurface + void addGridColumn(); + void removeGridColumn(); + void addGridRow(); + void removeGridRow(); // Sources, selected surface void setNextSource(); From 1f9bad3e6328fcd4adc8cea2bf634edae8fb2f11 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:31:48 +0100 Subject: [PATCH 095/103] Add GridWarp surface modifier shortcuts --- example_pocketvj/src/ofApp.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/example_pocketvj/src/ofApp.cpp b/example_pocketvj/src/ofApp.cpp index ef84a3a..229ae4b 100644 --- a/example_pocketvj/src/ofApp.cpp +++ b/example_pocketvj/src/ofApp.cpp @@ -51,13 +51,13 @@ void ofApp::keyPressed(int key){ }else if(key == 'p'){ mapper.togglePerspective(); }else if(key == 'v'){ - // Add columns + mapper.addGridColumn(); }else if(key == 'b'){ - // Remove columns + mapper.removeGridColumn(); }else if(key == 'n'){ - // Add rows + mapper.addGridRow(); }else if(key == 'm'){ - // Remove rows + mapper.removeGridRow(); }else if(key == '.'){ mapper.selectNextSurface(); }else if(key == ','){ From cb1947d14539cf35c7854424d0dfad5ce9100e4d Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:43:02 +0100 Subject: [PATCH 096/103] Add ofxPiMapper::toggleLayerPanel --- src/Application/Application.cpp | 6 ++++++ src/Application/Application.h | 1 + src/Application/Modes/ProjectionMappingMode.cpp | 6 +++++- src/Application/Modes/ProjectionMappingMode.h | 3 +++ src/ofxPiMapper.cpp | 4 ++++ src/ofxPiMapper.h | 3 +++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index bdc0a77..9b4df56 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -564,5 +564,11 @@ void Application::deselect(){ } } +void Application::toggleLayerPanel(){ + if(getState() == ProjectionMappingMode::instance()){ + ProjectionMappingMode::instance()->toggleLayerPanel(); + } +} + } // namespace piMapper } // namespace ofx diff --git a/src/Application/Application.h b/src/Application/Application.h index fd89275..d1b00c5 100644 --- a/src/Application/Application.h +++ b/src/Application/Application.h @@ -139,6 +139,7 @@ class Application { // Make it so that other parts of the application react to the change. void undo(); void deselect(); + void toggleLayerPanel(); void setPreset(unsigned int i); void setNextPreset(); diff --git a/src/Application/Modes/ProjectionMappingMode.cpp b/src/Application/Modes/ProjectionMappingMode.cpp index 2ca7b8d..8293471 100644 --- a/src/Application/Modes/ProjectionMappingMode.cpp +++ b/src/Application/Modes/ProjectionMappingMode.cpp @@ -49,6 +49,10 @@ void ProjectionMappingMode::draw(Application * app){ Gui::instance()->getSurfaceHighlightWidget().draw(); } +void ProjectionMappingMode::toggleLayerPanel(){ + _bDrawLayerPanel = !_bDrawLayerPanel; +} + void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & args){ switch(args.key){ @@ -173,7 +177,7 @@ void ProjectionMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & arg break; case 'l': - _bDrawLayerPanel = !_bDrawLayerPanel; + toggleLayerPanel(); break; /* diff --git a/src/Application/Modes/ProjectionMappingMode.h b/src/Application/Modes/ProjectionMappingMode.h index 6567061..eca83a1 100644 --- a/src/Application/Modes/ProjectionMappingMode.h +++ b/src/Application/Modes/ProjectionMappingMode.h @@ -23,6 +23,9 @@ class ProjectionMappingMode : public ApplicationBaseMode { void setup(Application * app); void update(Application * app); void draw(Application * app); + + void toggleLayerPanel(); + void onKeyPressed(Application * app, ofKeyEventArgs & args); void onMousePressed(Application * app, ofMouseEventArgs & args); void onMouseReleased(Application * app, ofMouseEventArgs & args); diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index ab46a69..fcd0e46 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -260,3 +260,7 @@ ofx::piMapper::Mode ofxPiMapper::getMode(){ } return ofx::piMapper::PRESENTATION_MODE; } + +void ofxPiMapper::toggleLayerPanel(){ + _application.toggleLayerPanel(); +} diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index 8220989..3af7708 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -36,6 +36,9 @@ class ofxPiMapper { // Modes void setMode(ofx::piMapper::Mode m); ofx::piMapper::Mode getMode(); + + // Projection mapping mode only + void toggleLayerPanel(); // Project void saveProject(); From c90e393f35ff6386ed27d6bbf0401d62a09406a7 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:43:30 +0100 Subject: [PATCH 097/103] Make use of ofxPiMapper::toggleLayerPanel in example_poxketvj --- example_pocketvj/.gitignore | 6 + example_pocketvj/Project.xcconfig | 18 + .../project.pbxproj | 5085 +++++++++++++++++ .../xcschemes/example_pocketvj Debug.xcscheme | 86 + .../example_pocketvj Release.xcscheme | 86 + example_pocketvj/openFrameworks-Info.plist | 22 + example_pocketvj/src/ofApp.cpp | 2 +- 7 files changed, 5304 insertions(+), 1 deletion(-) create mode 100644 example_pocketvj/.gitignore create mode 100644 example_pocketvj/Project.xcconfig create mode 100644 example_pocketvj/example_pocketvj.xcodeproj/project.pbxproj create mode 100644 example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Debug.xcscheme create mode 100644 example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Release.xcscheme create mode 100644 example_pocketvj/openFrameworks-Info.plist diff --git a/example_pocketvj/.gitignore b/example_pocketvj/.gitignore new file mode 100644 index 0000000..4572154 --- /dev/null +++ b/example_pocketvj/.gitignore @@ -0,0 +1,6 @@ +obj +*.xcworkspace +*.xcuserdatad +*~ +config.make +bin/*.app diff --git a/example_pocketvj/Project.xcconfig b/example_pocketvj/Project.xcconfig new file mode 100644 index 0000000..40adc89 --- /dev/null +++ b/example_pocketvj/Project.xcconfig @@ -0,0 +1,18 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../.. + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_CFLAGS = $(OF_CORE_CFLAGS) +OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/example_pocketvj/example_pocketvj.xcodeproj/project.pbxproj b/example_pocketvj/example_pocketvj.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9c6e82c --- /dev/null +++ b/example_pocketvj/example_pocketvj.xcodeproj/project.pbxproj @@ -0,0 +1,5085 @@ + + + + archiveVersion + 1 + classes + + objectVersion + 46 + objects + + 5A4349E9754D6FA14C0F2A3A + + fileRef + FC5DA1C87211D4F6377DA719 + isa + PBXBuildFile + + FC5DA1C87211D4F6377DA719 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + tinyxmlparser.cpp + path + ../../../addons/ofxXmlSettings/libs/tinyxmlparser.cpp + sourceTree + SOURCE_ROOT + + 9D44DC88EF9E7991B4A09951 + + fileRef + 832BDC407620CDBA568B713D + isa + PBXBuildFile + + 832BDC407620CDBA568B713D + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + tinyxmlerror.cpp + path + ../../../addons/ofxXmlSettings/libs/tinyxmlerror.cpp + sourceTree + SOURCE_ROOT + + B21E7E5F548EEA92F368040B + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + tinyxml.h + path + ../../../addons/ofxXmlSettings/libs/tinyxml.h + sourceTree + SOURCE_ROOT + + 6E54289412D2D94F45A05113 + + children + + 2B40EDA85BEB63E46785BC29 + B21E7E5F548EEA92F368040B + 832BDC407620CDBA568B713D + FC5DA1C87211D4F6377DA719 + + isa + PBXGroup + name + libs + sourceTree + <group> + + 933A2227713C720CEFF80FD9 + + fileRef + 2B40EDA85BEB63E46785BC29 + isa + PBXBuildFile + + 2B40EDA85BEB63E46785BC29 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + tinyxml.cpp + path + ../../../addons/ofxXmlSettings/libs/tinyxml.cpp + sourceTree + SOURCE_ROOT + + 01DCC0911400F9ACF5B65578 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxXmlSettings.h + path + ../../../addons/ofxXmlSettings/src/ofxXmlSettings.h + sourceTree + SOURCE_ROOT + + 6ECEF0D76BC33727823EADFF + + children + + 50DF87D612C5AAE17AAFA6C0 + 01DCC0911400F9ACF5B65578 + + isa + PBXGroup + name + src + sourceTree + <group> + + 1F4FB5C423662B96ADFDCC0B + + children + + 6ECEF0D76BC33727823EADFF + 6E54289412D2D94F45A05113 + + isa + PBXGroup + name + ofxXmlSettings + sourceTree + <group> + + 63B57AC5BF4EF088491E0317 + + fileRef + 50DF87D612C5AAE17AAFA6C0 + isa + PBXBuildFile + + 50DF87D612C5AAE17AAFA6C0 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxXmlSettings.cpp + path + ../../../addons/ofxXmlSettings/src/ofxXmlSettings.cpp + sourceTree + SOURCE_ROOT + + D627BF76B06B3FF4F1516C5E + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + HomographyHelper.h + path + ../../../addons/ofxPiMapper/src/Utils/HomographyHelper.h + sourceTree + SOURCE_ROOT + + 3D6840E4DBCF2DED6C755B76 + + children + + E2333CF877EE99EBE86F4B0F + D627BF76B06B3FF4F1516C5E + + isa + PBXGroup + name + Utils + sourceTree + <group> + + 83CACB24937919003F2F9B63 + + fileRef + E2333CF877EE99EBE86F4B0F + isa + PBXBuildFile + + E2333CF877EE99EBE86F4B0F + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + HomographyHelper.cpp + path + ../../../addons/ofxPiMapper/src/Utils/HomographyHelper.cpp + sourceTree + SOURCE_ROOT + + DC69ACA83F14B8A2AE20197B + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + RadioList.h + path + ../../../addons/ofxPiMapper/src/UserInterface/RadioList.h + sourceTree + SOURCE_ROOT + + 1F4453EA1589AD79F4B34493 + + fileRef + 4048CA09E6AAB5F673CBD2F0 + isa + PBXBuildFile + + 4048CA09E6AAB5F673CBD2F0 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + RadioList.cpp + path + ../../../addons/ofxPiMapper/src/UserInterface/RadioList.cpp + sourceTree + SOURCE_ROOT + + B7DD3DE526EF824DDAF42B09 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + GuiMode.h + path + ../../../addons/ofxPiMapper/src/UserInterface/GuiMode.h + sourceTree + SOURCE_ROOT + + 4130052A043CF3D3C2BA943A + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + EditorType.h + path + ../../../addons/ofxPiMapper/src/UserInterface/EditorType.h + sourceTree + SOURCE_ROOT + + 9B4D98CCBAB57278C96169D4 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + CircleJoint.h + path + ../../../addons/ofxPiMapper/src/UserInterface/CircleJoint.h + sourceTree + SOURCE_ROOT + + 42BCE929D520D8872171239A + + fileRef + 62F01592304CB7995200EF7B + isa + PBXBuildFile + + 62F01592304CB7995200EF7B + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + CircleJoint.cpp + path + ../../../addons/ofxPiMapper/src/UserInterface/CircleJoint.cpp + sourceTree + SOURCE_ROOT + + 851AF875A70187105CA91C1A + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + BaseJoint.h + path + ../../../addons/ofxPiMapper/src/UserInterface/BaseJoint.h + sourceTree + SOURCE_ROOT + + 925C888869704DBDF0BE6D0B + + children + + 7E78D1B2A6DB0856BF8ED1FE + 851AF875A70187105CA91C1A + 62F01592304CB7995200EF7B + 9B4D98CCBAB57278C96169D4 + 4130052A043CF3D3C2BA943A + B7DD3DE526EF824DDAF42B09 + 4048CA09E6AAB5F673CBD2F0 + DC69ACA83F14B8A2AE20197B + + isa + PBXGroup + name + UserInterface + sourceTree + <group> + + 868F230C6074263277ED9B07 + + fileRef + 7E78D1B2A6DB0856BF8ED1FE + isa + PBXBuildFile + + 7E78D1B2A6DB0856BF8ED1FE + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + BaseJoint.cpp + path + ../../../addons/ofxPiMapper/src/UserInterface/BaseJoint.cpp + sourceTree + SOURCE_ROOT + + 18E4114EBCEA8ADD837B4207 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + Vec3.h + path + ../../../addons/ofxPiMapper/src/Types/Vec3.h + sourceTree + SOURCE_ROOT + + 2E088EDC6E32D190998D8241 + + fileRef + A8558ACA2B5E9FD75C455CA2 + isa + PBXBuildFile + + A8558ACA2B5E9FD75C455CA2 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + Vec3.cpp + path + ../../../addons/ofxPiMapper/src/Types/Vec3.cpp + sourceTree + SOURCE_ROOT + + 93C11B810D4F591A2F70C148 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + Vec2.h + path + ../../../addons/ofxPiMapper/src/Types/Vec2.h + sourceTree + SOURCE_ROOT + + E910F62B91A8365D01A66512 + + children + + 4E09343A9F13BB51BC741692 + 93C11B810D4F591A2F70C148 + A8558ACA2B5E9FD75C455CA2 + 18E4114EBCEA8ADD837B4207 + + isa + PBXGroup + name + Types + sourceTree + <group> + + 5FB2E2349349B93011671206 + + fileRef + 4E09343A9F13BB51BC741692 + isa + PBXBuildFile + + 4E09343A9F13BB51BC741692 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + Vec2.cpp + path + ../../../addons/ofxPiMapper/src/Types/Vec2.cpp + sourceTree + SOURCE_ROOT + + 23118136CC7FFA920626B6C3 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + TriangleSurface.h + path + ../../../addons/ofxPiMapper/src/Surfaces/TriangleSurface.h + sourceTree + SOURCE_ROOT + + C0EB2D2E383BA9DE417ADB38 + + fileRef + 3DF2D82EA37D8C7A5F686EA5 + isa + PBXBuildFile + + 3DF2D82EA37D8C7A5F686EA5 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + TriangleSurface.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/TriangleSurface.cpp + sourceTree + SOURCE_ROOT + + B178ED5CA7F76AAA6E49E191 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceType.h + path + ../../../addons/ofxPiMapper/src/Surfaces/SurfaceType.h + sourceTree + SOURCE_ROOT + + 6592BB3592290B34832D7607 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceStack.h + path + ../../../addons/ofxPiMapper/src/Surfaces/SurfaceStack.h + sourceTree + SOURCE_ROOT + + C3A616FB3A463C17E327F395 + + fileRef + 1C080561EC053F17BB86A668 + isa + PBXBuildFile + + 1C080561EC053F17BB86A668 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceStack.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/SurfaceStack.cpp + sourceTree + SOURCE_ROOT + + 7344B3B35CD0188D1283EC59 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceManager.h + path + ../../../addons/ofxPiMapper/src/Surfaces/SurfaceManager.h + sourceTree + SOURCE_ROOT + + 85649EB44DE8F0A3BF8430F9 + + fileRef + 836B103542A52C63B004410C + isa + PBXBuildFile + + 836B103542A52C63B004410C + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceManager.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/SurfaceManager.cpp + sourceTree + SOURCE_ROOT + + D58C36B60BB72C7336042FB9 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceFactory.h + path + ../../../addons/ofxPiMapper/src/Surfaces/SurfaceFactory.h + sourceTree + SOURCE_ROOT + + B27F2ADC894A4C463E892AFE + + fileRef + 03FA94CA9F193C816DE4253F + isa + PBXBuildFile + + 03FA94CA9F193C816DE4253F + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceFactory.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/SurfaceFactory.cpp + sourceTree + SOURCE_ROOT + + 906696B07A716E4057D32B1E + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + QuadSurface.h + path + ../../../addons/ofxPiMapper/src/Surfaces/QuadSurface.h + sourceTree + SOURCE_ROOT + + 2A9AFA74E0EF07E58AC11382 + + fileRef + B9ECBF061BABECA9C2341372 + isa + PBXBuildFile + + B9ECBF061BABECA9C2341372 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + QuadSurface.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/QuadSurface.cpp + sourceTree + SOURCE_ROOT + + 0B4D5D37A2AE7AB30D726C16 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + HexagonSurface.h + path + ../../../addons/ofxPiMapper/src/Surfaces/HexagonSurface.h + sourceTree + SOURCE_ROOT + + 9C194C9F4ACD67CD61FBD30D + + fileRef + BCBB74B9531974E1D5DA019B + isa + PBXBuildFile + + BCBB74B9531974E1D5DA019B + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + HexagonSurface.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/HexagonSurface.cpp + sourceTree + SOURCE_ROOT + + C3E8D103B72D02E063B29082 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + GridWarpSurface.h + path + ../../../addons/ofxPiMapper/src/Surfaces/GridWarpSurface.h + sourceTree + SOURCE_ROOT + + 63DB0907B2ACDF9E6F2D9925 + + fileRef + 2D2400AC1A64EDE5E990C56C + isa + PBXBuildFile + + 2D2400AC1A64EDE5E990C56C + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + GridWarpSurface.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/GridWarpSurface.cpp + sourceTree + SOURCE_ROOT + + 5F3D44140B5D476BC98E98F3 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + CircleSurface.h + path + ../../../addons/ofxPiMapper/src/Surfaces/CircleSurface.h + sourceTree + SOURCE_ROOT + + D0758B5E19E04C33E9BF7193 + + fileRef + E47BE7E996D01B437B713B9B + isa + PBXBuildFile + + E47BE7E996D01B437B713B9B + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + CircleSurface.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/CircleSurface.cpp + sourceTree + SOURCE_ROOT + + F27EBFBACAC7B29B2B7CA500 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + BaseSurface.h + path + ../../../addons/ofxPiMapper/src/Surfaces/BaseSurface.h + sourceTree + SOURCE_ROOT + + DA1ABA97EBE5173F815CB449 + + children + + F2C0EE541190D47BF5911C0A + F27EBFBACAC7B29B2B7CA500 + E47BE7E996D01B437B713B9B + 5F3D44140B5D476BC98E98F3 + 2D2400AC1A64EDE5E990C56C + C3E8D103B72D02E063B29082 + BCBB74B9531974E1D5DA019B + 0B4D5D37A2AE7AB30D726C16 + B9ECBF061BABECA9C2341372 + 906696B07A716E4057D32B1E + 03FA94CA9F193C816DE4253F + D58C36B60BB72C7336042FB9 + 836B103542A52C63B004410C + 7344B3B35CD0188D1283EC59 + 1C080561EC053F17BB86A668 + 6592BB3592290B34832D7607 + B178ED5CA7F76AAA6E49E191 + 3DF2D82EA37D8C7A5F686EA5 + 23118136CC7FFA920626B6C3 + + isa + PBXGroup + name + Surfaces + sourceTree + <group> + + 9F968AD3A115328F4BFE5D71 + + fileRef + F2C0EE541190D47BF5911C0A + isa + PBXBuildFile + + F2C0EE541190D47BF5911C0A + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + BaseSurface.cpp + path + ../../../addons/ofxPiMapper/src/Surfaces/BaseSurface.cpp + sourceTree + SOURCE_ROOT + + C2D03F683EE589F55D47CFFD + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + VideoSource.h + path + ../../../addons/ofxPiMapper/src/Sources/VideoSource.h + sourceTree + SOURCE_ROOT + + A0C1CAB7B9C59DDDC960EB62 + + fileRef + 5407451FA68C27B2AAE644A6 + isa + PBXBuildFile + + 5407451FA68C27B2AAE644A6 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + VideoSource.cpp + path + ../../../addons/ofxPiMapper/src/Sources/VideoSource.cpp + sourceTree + SOURCE_ROOT + + EFB1537A5DBC298C759BFC62 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SourceTypeHelper.h + path + ../../../addons/ofxPiMapper/src/Sources/SourceTypeHelper.h + sourceTree + SOURCE_ROOT + + 6595C215972AFFC7EE685F5A + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SourceType.h + path + ../../../addons/ofxPiMapper/src/Sources/SourceType.h + sourceTree + SOURCE_ROOT + + 3BD72CBAFD427FC6E9F164D2 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + OMXPlayerCache.h + path + ../../../addons/ofxPiMapper/src/Sources/OMXPlayerCache.h + sourceTree + SOURCE_ROOT + + 588E33B9B0BD6F5A2E4DF31D + + fileRef + F7B0806EEA8012D629BE363C + isa + PBXBuildFile + + F7B0806EEA8012D629BE363C + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + OMXPlayerCache.cpp + path + ../../../addons/ofxPiMapper/src/Sources/OMXPlayerCache.cpp + sourceTree + SOURCE_ROOT + + 38683A925FBE28339A8BDBC0 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + magSlideTransitionFactory.h + path + ../../../addons/ofxPiMapper/src/Sources/magSlideTransitionFactory.h + sourceTree + SOURCE_ROOT + + 582BDA35793B6C5F719AFFB6 + + fileRef + 8219246B2D3DCA07840E8006 + isa + PBXBuildFile + + 8219246B2D3DCA07840E8006 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + magSlideTransitionFactory.cpp + path + ../../../addons/ofxPiMapper/src/Sources/magSlideTransitionFactory.cpp + sourceTree + SOURCE_ROOT + + 9401251DD4C51CCD32270579 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + magSlideTransition.h + path + ../../../addons/ofxPiMapper/src/Sources/magSlideTransition.h + sourceTree + SOURCE_ROOT + + 2375406EEFFBF32FC848BCF0 + + fileRef + 237BC60FA935F4D2EF7333B8 + isa + PBXBuildFile + + 237BC60FA935F4D2EF7333B8 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + magSlideTransition.cpp + path + ../../../addons/ofxPiMapper/src/Sources/magSlideTransition.cpp + sourceTree + SOURCE_ROOT + + 8F9A0B3E8F65E3A01D5F598C + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + magSlideShowSource.h + path + ../../../addons/ofxPiMapper/src/Sources/magSlideShowSource.h + sourceTree + SOURCE_ROOT + + DBD3C91431A9ACF2F980B702 + + fileRef + 35097CC7BE3F0F1C9474F901 + isa + PBXBuildFile + + 35097CC7BE3F0F1C9474F901 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + magSlideShowSource.cpp + path + ../../../addons/ofxPiMapper/src/Sources/magSlideShowSource.cpp + sourceTree + SOURCE_ROOT + + 2EEB35CE3E4992705F95E2E3 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + magSlide.h + path + ../../../addons/ofxPiMapper/src/Sources/magSlide.h + sourceTree + SOURCE_ROOT + + D2B8EB6B80117D2235CD85FE + + fileRef + 2382B6BE80F965EC5CD2E817 + isa + PBXBuildFile + + 2382B6BE80F965EC5CD2E817 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + magSlide.cpp + path + ../../../addons/ofxPiMapper/src/Sources/magSlide.cpp + sourceTree + SOURCE_ROOT + + E5949E35CC6642F2FDFFAAE5 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ImageSource.h + path + ../../../addons/ofxPiMapper/src/Sources/ImageSource.h + sourceTree + SOURCE_ROOT + + 95CB0A22296B3DB402835DCF + + fileRef + 61291E56B7882C9E9B8F119B + isa + PBXBuildFile + + 61291E56B7882C9E9B8F119B + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ImageSource.cpp + path + ../../../addons/ofxPiMapper/src/Sources/ImageSource.cpp + sourceTree + SOURCE_ROOT + + F05CE9A6503C7CBCC46403C4 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + FboSource.h + path + ../../../addons/ofxPiMapper/src/Sources/FboSource.h + sourceTree + SOURCE_ROOT + + 7702233BBFB6E8D9E8B93CBC + + fileRef + C61C1F4F1A1ED2660B1D6EDC + isa + PBXBuildFile + + C61C1F4F1A1ED2660B1D6EDC + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + FboSource.cpp + path + ../../../addons/ofxPiMapper/src/Sources/FboSource.cpp + sourceTree + SOURCE_ROOT + + B390802358C73D3757AC9B4E + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + BaseSource.h + path + ../../../addons/ofxPiMapper/src/Sources/BaseSource.h + sourceTree + SOURCE_ROOT + + 77B40894B404D46E0B9438E0 + + children + + AB4132974E14024E74E320F5 + B390802358C73D3757AC9B4E + C61C1F4F1A1ED2660B1D6EDC + F05CE9A6503C7CBCC46403C4 + 61291E56B7882C9E9B8F119B + E5949E35CC6642F2FDFFAAE5 + 2382B6BE80F965EC5CD2E817 + 2EEB35CE3E4992705F95E2E3 + 35097CC7BE3F0F1C9474F901 + 8F9A0B3E8F65E3A01D5F598C + 237BC60FA935F4D2EF7333B8 + 9401251DD4C51CCD32270579 + 8219246B2D3DCA07840E8006 + 38683A925FBE28339A8BDBC0 + F7B0806EEA8012D629BE363C + 3BD72CBAFD427FC6E9F164D2 + 6595C215972AFFC7EE685F5A + EFB1537A5DBC298C759BFC62 + 5407451FA68C27B2AAE644A6 + C2D03F683EE589F55D47CFFD + + isa + PBXGroup + name + Sources + sourceTree + <group> + + 892923A127FC7C57469FD078 + + fileRef + AB4132974E14024E74E320F5 + isa + PBXBuildFile + + AB4132974E14024E74E320F5 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + BaseSource.cpp + path + ../../../addons/ofxPiMapper/src/Sources/BaseSource.cpp + sourceTree + SOURCE_ROOT + + 378C962CF2DB945F38DE674A + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxPiMapper.h + path + ../../../addons/ofxPiMapper/src/ofxPiMapper.h + sourceTree + SOURCE_ROOT + + 3B90107DB9BF4857E357FCA8 + + fileRef + 16DB3860ECC0D672B08DE71C + isa + PBXBuildFile + + 16DB3860ECC0D672B08DE71C + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxPiMapper.cpp + path + ../../../addons/ofxPiMapper/src/ofxPiMapper.cpp + sourceTree + SOURCE_ROOT + + C2E5DC1692A11AF5D981F8FA + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + Mode.h + path + ../../../addons/ofxPiMapper/src/Mode.h + sourceTree + SOURCE_ROOT + + FCB5A622161B43A8154687F8 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + MediaServer.h + path + ../../../addons/ofxPiMapper/src/MediaServer/MediaServer.h + sourceTree + SOURCE_ROOT + + 92527EF632E7EC0E96BC329C + + fileRef + 18385A4F4BC87806616D4F7F + isa + PBXBuildFile + + 18385A4F4BC87806616D4F7F + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + MediaServer.cpp + path + ../../../addons/ofxPiMapper/src/MediaServer/MediaServer.cpp + sourceTree + SOURCE_ROOT + + 7C89C324499F9541394245C9 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + DirectoryWatcher.h + path + ../../../addons/ofxPiMapper/src/MediaServer/DirectoryWatcher.h + sourceTree + SOURCE_ROOT + + 49237A8A4935FFC7A690CBD7 + + children + + 20F9951441118A70E8D55E13 + 7C89C324499F9541394245C9 + 18385A4F4BC87806616D4F7F + FCB5A622161B43A8154687F8 + + isa + PBXGroup + name + MediaServer + sourceTree + <group> + + DB8FC60C7512DB810C92625B + + fileRef + 20F9951441118A70E8D55E13 + isa + PBXBuildFile + + 20F9951441118A70E8D55E13 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + DirectoryWatcher.cpp + path + ../../../addons/ofxPiMapper/src/MediaServer/DirectoryWatcher.cpp + sourceTree + SOURCE_ROOT + + 37E7F66B151AB6A0AB6FC244 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + Info.h + path + ../../../addons/ofxPiMapper/src/Info/Info.h + sourceTree + SOURCE_ROOT + + 922DC4E8A53315BB0C983902 + + children + + EEF2CEBAFFABCFED915AFCE1 + 37E7F66B151AB6A0AB6FC244 + + isa + PBXGroup + name + Info + sourceTree + <group> + + F3EACD31EE5E141FF66C48BD + + fileRef + EEF2CEBAFFABCFED915AFCE1 + isa + PBXBuildFile + + EEF2CEBAFFABCFED915AFCE1 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + Info.cpp + path + ../../../addons/ofxPiMapper/src/Info/Info.cpp + sourceTree + SOURCE_ROOT + + 3BD822DBD11904D1D6E27E76 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + TextureHighlightWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureHighlightWidget.h + sourceTree + SOURCE_ROOT + + 9CAA3B0DFD59840998C832DA + + fileRef + 941AD8B39C28D08B9F31077A + isa + PBXBuildFile + + 941AD8B39C28D08B9F31077A + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + TextureHighlightWidget.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureHighlightWidget.cpp + sourceTree + SOURCE_ROOT + + AB96773D1B378AE8018EA33E + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + TextureEditorWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureEditorWidget.h + sourceTree + SOURCE_ROOT + + 4D2D4455339FC8C955091C88 + + fileRef + 413E846B881CCADC897A8A40 + isa + PBXBuildFile + + 413E846B881CCADC897A8A40 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + TextureEditorWidget.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/TextureEditorWidget.cpp + sourceTree + SOURCE_ROOT + + 9F39733296358C3B0F85BB15 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceHighlightWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/SurfaceHighlightWidget.h + sourceTree + SOURCE_ROOT + + 8A3D6CE0A4338871766366B6 + + fileRef + 69A4D26FC0AD01A86571540D + isa + PBXBuildFile + + 69A4D26FC0AD01A86571540D + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SurfaceHighlightWidget.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/SurfaceHighlightWidget.cpp + sourceTree + SOURCE_ROOT + + B562DE1EEC28EE801EB4F483 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SourcesEditorWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/SourcesEditorWidget.h + sourceTree + SOURCE_ROOT + + FB03F0A6D7866DFC55F519EB + + fileRef + 36F59D2F886152DF4115A218 + isa + PBXBuildFile + + 36F59D2F886152DF4115A218 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SourcesEditorWidget.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/SourcesEditorWidget.cpp + sourceTree + SOURCE_ROOT + + 23A4F0C9DE47BA73B3E49EDE + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ScaleWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/ScaleWidget.h + sourceTree + SOURCE_ROOT + + F06AE014F869282B7F7CE84C + + fileRef + F4EDCDF597954EF25E7AD416 + isa + PBXBuildFile + + F4EDCDF597954EF25E7AD416 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ScaleWidget.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/ScaleWidget.cpp + sourceTree + SOURCE_ROOT + + C27244405258CD6DF424D0F3 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ProjectionEditorWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/ProjectionEditorWidget.h + sourceTree + SOURCE_ROOT + + 274AEF0299D77E27C0C5B205 + + fileRef + 18DA1B30717C876AA19CEEC0 + isa + PBXBuildFile + + 18DA1B30717C876AA19CEEC0 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ProjectionEditorWidget.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/ProjectionEditorWidget.cpp + sourceTree + SOURCE_ROOT + + 438B20A2C548E18384498186 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + LayerPanelWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/LayerPanelWidget.h + sourceTree + SOURCE_ROOT + + 8E8F94DC506856A4E92FBA8A + + fileRef + 57990D37D728C5711AACBA9F + isa + PBXBuildFile + + 57990D37D728C5711AACBA9F + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + LayerPanelWidget.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/LayerPanelWidget.cpp + sourceTree + SOURCE_ROOT + + 0775EF7214A04F1C3C936CCE + + children + + 94DC897871B221F060A6A70F + 57990D37D728C5711AACBA9F + 438B20A2C548E18384498186 + 18DA1B30717C876AA19CEEC0 + C27244405258CD6DF424D0F3 + F4EDCDF597954EF25E7AD416 + 23A4F0C9DE47BA73B3E49EDE + 36F59D2F886152DF4115A218 + B562DE1EEC28EE801EB4F483 + 69A4D26FC0AD01A86571540D + 9F39733296358C3B0F85BB15 + 413E846B881CCADC897A8A40 + AB96773D1B378AE8018EA33E + 941AD8B39C28D08B9F31077A + 3BD822DBD11904D1D6E27E76 + + isa + PBXGroup + name + Widgets + sourceTree + <group> + + 94DC897871B221F060A6A70F + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + GuiBaseWidget.h + path + ../../../addons/ofxPiMapper/src/Gui/Widgets/GuiBaseWidget.h + sourceTree + SOURCE_ROOT + + 7A3290FC65714D0C4D02B8BA + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + Gui.h + path + ../../../addons/ofxPiMapper/src/Gui/Gui.h + sourceTree + SOURCE_ROOT + + 783C34304FF450D0CB244879 + + children + + DCC24025AD26B4554B000385 + 7A3290FC65714D0C4D02B8BA + 0775EF7214A04F1C3C936CCE + + isa + PBXGroup + name + Gui + sourceTree + <group> + + EA700B09626C8413C92EF860 + + fileRef + DCC24025AD26B4554B000385 + isa + PBXBuildFile + + DCC24025AD26B4554B000385 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + Gui.cpp + path + ../../../addons/ofxPiMapper/src/Gui/Gui.cpp + sourceTree + SOURCE_ROOT + + 5AB104FC7812B4F42B8E1540 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + TranslateCanvasCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/TranslateCanvasCmd.h + sourceTree + SOURCE_ROOT + + 28F5415281F8D09BBC098355 + + fileRef + 03FCF5559C2A6AB79D947767 + isa + PBXBuildFile + + 03FCF5559C2A6AB79D947767 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + TranslateCanvasCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/TranslateCanvasCmd.cpp + sourceTree + SOURCE_ROOT + + 4244A1B9B55BD7BA7ED2F547 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + TogglePerspectiveCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/TogglePerspectiveCmd.h + sourceTree + SOURCE_ROOT + + 23963D6D8F0085D5DD2DF394 + + fileRef + 655142313A378162E3929785 + isa + PBXBuildFile + + 655142313A378162E3929785 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + TogglePerspectiveCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/TogglePerspectiveCmd.cpp + sourceTree + SOURCE_ROOT + + 21167F26AF957606289D4A4A + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ToggleAnimatedSourceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/ToggleAnimatedSourceCmd.h + sourceTree + SOURCE_ROOT + + 6438655B2AE4DDA2743241EC + + fileRef + 5D020B9B28609D071E21BB76 + isa + PBXBuildFile + + 5D020B9B28609D071E21BB76 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ToggleAnimatedSourceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/ToggleAnimatedSourceCmd.cpp + sourceTree + SOURCE_ROOT + + 5EBDBF5E7887C574E1FCC1B5 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + StartDragSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/StartDragSurfaceCmd.h + sourceTree + SOURCE_ROOT + + 06765053D7BFBBEB43E77B23 + + fileRef + E8DA47AF2B265F778E74D4DA + isa + PBXBuildFile + + E8DA47AF2B265F778E74D4DA + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + StartDragSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/StartDragSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + 912C6A870E22496CEA43AC85 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SetTexMapDrawModeCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SetTexMapDrawModeCmd.h + sourceTree + SOURCE_ROOT + + A6EE8D8F3CA590EF6D7FAFA6 + + fileRef + 49BE2D8F2A2A57F4EBF83FF4 + isa + PBXBuildFile + + 49BE2D8F2A2A57F4EBF83FF4 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SetTexMapDrawModeCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SetTexMapDrawModeCmd.cpp + sourceTree + SOURCE_ROOT + + 56A68D8E68FF141B5EB1ADF6 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SetSourceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SetSourceCmd.h + sourceTree + SOURCE_ROOT + + 6500BFD07CA93EFD8A162B25 + + fileRef + 7F58FFED7FBFC49573FF65E4 + isa + PBXBuildFile + + 7F58FFED7FBFC49573FF65E4 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SetSourceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SetSourceCmd.cpp + sourceTree + SOURCE_ROOT + + BCB571865BB25BC586CF80EC + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SetPresetCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SetPresetCmd.h + sourceTree + SOURCE_ROOT + + 84172554824F6959BA431E33 + + fileRef + 15C9B02F2CF08112845CD074 + isa + PBXBuildFile + + 15C9B02F2CF08112845CD074 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SetPresetCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SetPresetCmd.cpp + sourceTree + SOURCE_ROOT + + FA2E4E947E8D358C28D903C0 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SetNextSourceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SetNextSourceCmd.h + sourceTree + SOURCE_ROOT + + 4BF21A290FA6FE26B87B8971 + + fileRef + 4FFBE499412CC8DD07163E91 + isa + PBXBuildFile + + 4FFBE499412CC8DD07163E91 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SetNextSourceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SetNextSourceCmd.cpp + sourceTree + SOURCE_ROOT + + F0A9FE4B6FB6C958B72B72CD + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SetApplicationModeCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SetApplicationModeCmd.h + sourceTree + SOURCE_ROOT + + 90DE06EA59944C1BEA539719 + + fileRef + 8D3CB0B9A827AFA479349BBE + isa + PBXBuildFile + + 8D3CB0B9A827AFA479349BBE + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SetApplicationModeCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SetApplicationModeCmd.cpp + sourceTree + SOURCE_ROOT + + 79A9ED756DB70790A67E3EF8 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelVertexCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelVertexCmd.h + sourceTree + SOURCE_ROOT + + 7002E598586957E5F20E69A7 + + fileRef + A2282B1E05458C3B2BBCE568 + isa + PBXBuildFile + + A2282B1E05458C3B2BBCE568 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelVertexCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelVertexCmd.cpp + sourceTree + SOURCE_ROOT + + D05D5FBB2B2779B022A5DD04 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelTexCoordCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelTexCoordCmd.h + sourceTree + SOURCE_ROOT + + 14566DCD28D35A80428886C4 + + fileRef + 27453C6FAE9B674FD694508D + isa + PBXBuildFile + + 27453C6FAE9B674FD694508D + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelTexCoordCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelTexCoordCmd.cpp + sourceTree + SOURCE_ROOT + + CB4461BD6FC059D946144727 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelSurfaceCmd.h + sourceTree + SOURCE_ROOT + + E5D631612E039E04B1736E76 + + fileRef + 0B691BBAB665F94F09B2C276 + isa + PBXBuildFile + + 0B691BBAB665F94F09B2C276 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + 47AB6134D2AB2F3EB10096A3 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelPrevVertexCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelPrevVertexCmd.h + sourceTree + SOURCE_ROOT + + B9654D0EF43BCA228B330ED7 + + fileRef + 3B29C3846BA06080344C1D1E + isa + PBXBuildFile + + 3B29C3846BA06080344C1D1E + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelPrevVertexCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelPrevVertexCmd.cpp + sourceTree + SOURCE_ROOT + + 1CE256C39E514ABD16FCCB87 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelPrevTexCoordCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelPrevTexCoordCmd.h + sourceTree + SOURCE_ROOT + + 800748EF057A284D9DA82F60 + + fileRef + F7E88D3956480E0CBAA21641 + isa + PBXBuildFile + + F7E88D3956480E0CBAA21641 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelPrevTexCoordCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelPrevTexCoordCmd.cpp + sourceTree + SOURCE_ROOT + + B5C793F4FEA3AA065347B61C + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelPrevSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelPrevSurfaceCmd.h + sourceTree + SOURCE_ROOT + + 7DAB7D546F81A93336034BF7 + + fileRef + 6DF54314CF2B45BF195B84C6 + isa + PBXBuildFile + + 6DF54314CF2B45BF195B84C6 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelPrevSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelPrevSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + BA5B6BB795E2A24B2DBA22BD + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelNextVertexCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelNextVertexCmd.h + sourceTree + SOURCE_ROOT + + E6D82F5A7B22E9FB46DEEF15 + + fileRef + 140C0677F9F5A5D3B8A89AC4 + isa + PBXBuildFile + + 140C0677F9F5A5D3B8A89AC4 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelNextVertexCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelNextVertexCmd.cpp + sourceTree + SOURCE_ROOT + + A5CBAE57D2ADED1CAB6123AF + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelNextTexCoordCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelNextTexCoordCmd.h + sourceTree + SOURCE_ROOT + + 60C8089351E49CF344577098 + + fileRef + 784FFEB8D108EC916343AB97 + isa + PBXBuildFile + + 784FFEB8D108EC916343AB97 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelNextTexCoordCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelNextTexCoordCmd.cpp + sourceTree + SOURCE_ROOT + + 30ED82F4A70B5B95CCEF7744 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SelNextSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SelNextSurfaceCmd.h + sourceTree + SOURCE_ROOT + + 67FF225B68ECC1942C833BFE + + fileRef + FC98A68C64BFC941D0B31EE9 + isa + PBXBuildFile + + FC98A68C64BFC941D0B31EE9 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SelNextSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SelNextSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + 62C9C3E62D4BEF04CF54C031 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ScaleSurfaceFromToCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/ScaleSurfaceFromToCmd.h + sourceTree + SOURCE_ROOT + + E327ACE85A208BAFACD1B7C7 + + fileRef + 34B45EB44DED0A47FBAD30F4 + isa + PBXBuildFile + + 34B45EB44DED0A47FBAD30F4 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ScaleSurfaceFromToCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/ScaleSurfaceFromToCmd.cpp + sourceTree + SOURCE_ROOT + + D463EA9CC53D21A44CB9D6EF + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SaveTexCoordPosCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/SaveTexCoordPosCmd.h + sourceTree + SOURCE_ROOT + + 36A98A331EAE1D0A19998A59 + + fileRef + 60F40691CD9DE4DEE1768FE9 + isa + PBXBuildFile + + 60F40691CD9DE4DEE1768FE9 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SaveTexCoordPosCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/SaveTexCoordPosCmd.cpp + sourceTree + SOURCE_ROOT + + D7287CBE5600FEE9EE1B1AEA + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + RmSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/RmSurfaceCmd.h + sourceTree + SOURCE_ROOT + + B01F972DDDA5F21EF4C8B99D + + fileRef + B7C308F8B76FCB909581A580 + isa + PBXBuildFile + + B7C308F8B76FCB909581A580 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + RmSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/RmSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + 74CA4C78136F233FB90B7D3E + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + RmGridRowCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/RmGridRowCmd.h + sourceTree + SOURCE_ROOT + + 5826FF4F63DC430E90AFDA5E + + fileRef + F3538B8AF69CAB7C215FA1EF + isa + PBXBuildFile + + F3538B8AF69CAB7C215FA1EF + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + RmGridRowCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/RmGridRowCmd.cpp + sourceTree + SOURCE_ROOT + + BA65337B3E631788AE2D018B + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + RmGridColCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/RmGridColCmd.h + sourceTree + SOURCE_ROOT + + 82643E358DF270B9EC939699 + + fileRef + A50F23D868C48DF9799BC788 + isa + PBXBuildFile + + A50F23D868C48DF9799BC788 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + RmGridColCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/RmGridColCmd.cpp + sourceTree + SOURCE_ROOT + + 8F41EDB76644426680B2FA2B + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + MvTexCoordCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/MvTexCoordCmd.h + sourceTree + SOURCE_ROOT + + 25F5CD753AF35B53464E56AE + + fileRef + 0739F09627790055C959BBF4 + isa + PBXBuildFile + + 0739F09627790055C959BBF4 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + MvTexCoordCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/MvTexCoordCmd.cpp + sourceTree + SOURCE_ROOT + + D565A612B1DF2837C94A6081 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + MvSurfaceVertCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/MvSurfaceVertCmd.h + sourceTree + SOURCE_ROOT + + 845DC872C79A75F7B5FABC02 + + fileRef + 18041C8871E17DE3E60BFF95 + isa + PBXBuildFile + + 18041C8871E17DE3E60BFF95 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + MvSurfaceVertCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/MvSurfaceVertCmd.cpp + sourceTree + SOURCE_ROOT + + D4CFAEBB593AD070E04F106C + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + MvSelectionCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/MvSelectionCmd.h + sourceTree + SOURCE_ROOT + + 6056983B92E88B475FF04299 + + fileRef + 7D386994DF359F3BD1E66480 + isa + PBXBuildFile + + 7D386994DF359F3BD1E66480 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + MvSelectionCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/MvSelectionCmd.cpp + sourceTree + SOURCE_ROOT + + 933CAE5B2DEC9DDABEA95E34 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + MvLayerUpCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/MvLayerUpCmd.h + sourceTree + SOURCE_ROOT + + C34B66987F4DA38C21AF325B + + fileRef + E52D4207C299D5886C8FD2C7 + isa + PBXBuildFile + + E52D4207C299D5886C8FD2C7 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + MvLayerUpCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/MvLayerUpCmd.cpp + sourceTree + SOURCE_ROOT + + 61481FB831430E35A18ABD02 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + MvLayerDnCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/MvLayerDnCmd.h + sourceTree + SOURCE_ROOT + + A75658250711ADE2C05FC781 + + fileRef + EC481BAB32B250D3EA41AF9E + isa + PBXBuildFile + + EC481BAB32B250D3EA41AF9E + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + MvLayerDnCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/MvLayerDnCmd.cpp + sourceTree + SOURCE_ROOT + + 25322223D3976D5F33DCCBF6 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + MvAllTexCoordsCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/MvAllTexCoordsCmd.h + sourceTree + SOURCE_ROOT + + 8CA6C92E3D4F91750BC469FF + + fileRef + DBAFA0B7AFEA589CA5167204 + isa + PBXBuildFile + + DBAFA0B7AFEA589CA5167204 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + MvAllTexCoordsCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/MvAllTexCoordsCmd.cpp + sourceTree + SOURCE_ROOT + + EE95BF87E883491E7CC9B6EC + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + DuplicateSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/DuplicateSurfaceCmd.h + sourceTree + SOURCE_ROOT + + D61A46C1800537BA43C7884F + + fileRef + C656C28252AD5E9E09FA2162 + isa + PBXBuildFile + + C656C28252AD5E9E09FA2162 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + DuplicateSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/DuplicateSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + 718E523D4BDDCFAC394B3EA5 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + DeselectTexCoordCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/DeselectTexCoordCmd.h + sourceTree + SOURCE_ROOT + + 973F560586CB3735581265E7 + + fileRef + E8CE817DF3028A4345376E7D + isa + PBXBuildFile + + E8CE817DF3028A4345376E7D + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + DeselectTexCoordCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/DeselectTexCoordCmd.cpp + sourceTree + SOURCE_ROOT + + 65DBA05D19177D2853D54196 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + DeselectSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/DeselectSurfaceCmd.h + sourceTree + SOURCE_ROOT + + C8D7FA44AA0565654A681157 + + fileRef + 6E80EE6FB0CC304A6CA287BB + isa + PBXBuildFile + + 6E80EE6FB0CC304A6CA287BB + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + DeselectSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/DeselectSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + 2F04FFB9BAC4575E214C0DED + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + CmdManager.h + path + ../../../addons/ofxPiMapper/src/Commands/CmdManager.h + sourceTree + SOURCE_ROOT + + 93760FE8B10EBD4081251E10 + + fileRef + BDBE053980FA01FAD543D782 + isa + PBXBuildFile + + BDBE053980FA01FAD543D782 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + CmdManager.cpp + path + ../../../addons/ofxPiMapper/src/Commands/CmdManager.cpp + sourceTree + SOURCE_ROOT + + 3074E4094F76555C299E5D8E + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ClearSurfacesCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/ClearSurfacesCmd.h + sourceTree + SOURCE_ROOT + + F9A6B58165791682416A1685 + + fileRef + 962C349E8F4E59FF335AB2A6 + isa + PBXBuildFile + + 962C349E8F4E59FF335AB2A6 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ClearSurfacesCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/ClearSurfacesCmd.cpp + sourceTree + SOURCE_ROOT + + 17972C3384311464011667D9 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + BaseCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/BaseCmd.h + sourceTree + SOURCE_ROOT + + 00756183A9E41665E637AC23 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + AddSurfaceCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/AddSurfaceCmd.h + sourceTree + SOURCE_ROOT + + B1EEE5A7EC1876072BF8F7FE + + fileRef + B323D7489A7B26A63443444F + isa + PBXBuildFile + + B323D7489A7B26A63443444F + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + AddSurfaceCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/AddSurfaceCmd.cpp + sourceTree + SOURCE_ROOT + + 775FD891C1E381F87BF33C82 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + AddGridRowCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/AddGridRowCmd.h + sourceTree + SOURCE_ROOT + + D88BA6D139757ED4E1669796 + + fileRef + 3E4A0386460638A781A7AC84 + isa + PBXBuildFile + + 3E4A0386460638A781A7AC84 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + AddGridRowCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/AddGridRowCmd.cpp + sourceTree + SOURCE_ROOT + + 1E73070DAC89F6A796BFF464 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + AddGridColCmd.h + path + ../../../addons/ofxPiMapper/src/Commands/AddGridColCmd.h + sourceTree + SOURCE_ROOT + + F19689EE10A2EC1EC429FAC7 + + children + + 231337763726D333E0B3D56C + 1E73070DAC89F6A796BFF464 + 3E4A0386460638A781A7AC84 + 775FD891C1E381F87BF33C82 + B323D7489A7B26A63443444F + 00756183A9E41665E637AC23 + 17972C3384311464011667D9 + 962C349E8F4E59FF335AB2A6 + 3074E4094F76555C299E5D8E + BDBE053980FA01FAD543D782 + 2F04FFB9BAC4575E214C0DED + 6E80EE6FB0CC304A6CA287BB + 65DBA05D19177D2853D54196 + E8CE817DF3028A4345376E7D + 718E523D4BDDCFAC394B3EA5 + C656C28252AD5E9E09FA2162 + EE95BF87E883491E7CC9B6EC + DBAFA0B7AFEA589CA5167204 + 25322223D3976D5F33DCCBF6 + EC481BAB32B250D3EA41AF9E + 61481FB831430E35A18ABD02 + E52D4207C299D5886C8FD2C7 + 933CAE5B2DEC9DDABEA95E34 + 7D386994DF359F3BD1E66480 + D4CFAEBB593AD070E04F106C + 18041C8871E17DE3E60BFF95 + D565A612B1DF2837C94A6081 + 0739F09627790055C959BBF4 + 8F41EDB76644426680B2FA2B + A50F23D868C48DF9799BC788 + BA65337B3E631788AE2D018B + F3538B8AF69CAB7C215FA1EF + 74CA4C78136F233FB90B7D3E + B7C308F8B76FCB909581A580 + D7287CBE5600FEE9EE1B1AEA + 60F40691CD9DE4DEE1768FE9 + D463EA9CC53D21A44CB9D6EF + 34B45EB44DED0A47FBAD30F4 + 62C9C3E62D4BEF04CF54C031 + FC98A68C64BFC941D0B31EE9 + 30ED82F4A70B5B95CCEF7744 + 784FFEB8D108EC916343AB97 + A5CBAE57D2ADED1CAB6123AF + 140C0677F9F5A5D3B8A89AC4 + BA5B6BB795E2A24B2DBA22BD + 6DF54314CF2B45BF195B84C6 + B5C793F4FEA3AA065347B61C + F7E88D3956480E0CBAA21641 + 1CE256C39E514ABD16FCCB87 + 3B29C3846BA06080344C1D1E + 47AB6134D2AB2F3EB10096A3 + 0B691BBAB665F94F09B2C276 + CB4461BD6FC059D946144727 + 27453C6FAE9B674FD694508D + D05D5FBB2B2779B022A5DD04 + A2282B1E05458C3B2BBCE568 + 79A9ED756DB70790A67E3EF8 + 8D3CB0B9A827AFA479349BBE + F0A9FE4B6FB6C958B72B72CD + 4FFBE499412CC8DD07163E91 + FA2E4E947E8D358C28D903C0 + 15C9B02F2CF08112845CD074 + BCB571865BB25BC586CF80EC + 7F58FFED7FBFC49573FF65E4 + 56A68D8E68FF141B5EB1ADF6 + 49BE2D8F2A2A57F4EBF83FF4 + 912C6A870E22496CEA43AC85 + E8DA47AF2B265F778E74D4DA + 5EBDBF5E7887C574E1FCC1B5 + 5D020B9B28609D071E21BB76 + 21167F26AF957606289D4A4A + 655142313A378162E3929785 + 4244A1B9B55BD7BA7ED2F547 + 03FCF5559C2A6AB79D947767 + 5AB104FC7812B4F42B8E1540 + + isa + PBXGroup + name + Commands + sourceTree + <group> + + 580602DA874A9CF9E850DEEE + + fileRef + 231337763726D333E0B3D56C + isa + PBXBuildFile + + 231337763726D333E0B3D56C + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + AddGridColCmd.cpp + path + ../../../addons/ofxPiMapper/src/Commands/AddGridColCmd.cpp + sourceTree + SOURCE_ROOT + + 5235D939D249EAF47F9A5EB5 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SettingsLoader.h + path + ../../../addons/ofxPiMapper/src/Application/SettingsLoader.h + sourceTree + SOURCE_ROOT + + 2E9E05C9FFCE15172A701335 + + fileRef + 33DD6E4350FD51C68B7E65F0 + isa + PBXBuildFile + + 33DD6E4350FD51C68B7E65F0 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SettingsLoader.cpp + path + ../../../addons/ofxPiMapper/src/Application/SettingsLoader.cpp + sourceTree + SOURCE_ROOT + + 3157007392BD114EAB99F470 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + TextureMappingMode.h + path + ../../../addons/ofxPiMapper/src/Application/Modes/TextureMappingMode.h + sourceTree + SOURCE_ROOT + + 21B18AC78EBFC1FD28C614D5 + + fileRef + B16277019B0C4B684E1B063E + isa + PBXBuildFile + + B16277019B0C4B684E1B063E + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + TextureMappingMode.cpp + path + ../../../addons/ofxPiMapper/src/Application/Modes/TextureMappingMode.cpp + sourceTree + SOURCE_ROOT + + 7FD330C204479B5A5021D286 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + SourceSelectionMode.h + path + ../../../addons/ofxPiMapper/src/Application/Modes/SourceSelectionMode.h + sourceTree + SOURCE_ROOT + + AA98F23DF9897F2241EF3968 + + fileRef + 4245228145B1AA737F49CF14 + isa + PBXBuildFile + + 4245228145B1AA737F49CF14 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + SourceSelectionMode.cpp + path + ../../../addons/ofxPiMapper/src/Application/Modes/SourceSelectionMode.cpp + sourceTree + SOURCE_ROOT + + DC8107E8E56AFFB933FE8962 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ProjectionMappingMode.h + path + ../../../addons/ofxPiMapper/src/Application/Modes/ProjectionMappingMode.h + sourceTree + SOURCE_ROOT + + 42AB7CD7DFB89209AB951942 + + fileRef + 1BCA96396113AAF56D66C844 + isa + PBXBuildFile + + 1BCA96396113AAF56D66C844 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ProjectionMappingMode.cpp + path + ../../../addons/ofxPiMapper/src/Application/Modes/ProjectionMappingMode.cpp + sourceTree + SOURCE_ROOT + + 3B043509B19E37C383D7CA87 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + PresentationMode.h + path + ../../../addons/ofxPiMapper/src/Application/Modes/PresentationMode.h + sourceTree + SOURCE_ROOT + + 4A53BFBA57F4AD16FB9D2D24 + + fileRef + 64156CB2D856E4CE0FBBED96 + isa + PBXBuildFile + + 64156CB2D856E4CE0FBBED96 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + PresentationMode.cpp + path + ../../../addons/ofxPiMapper/src/Application/Modes/PresentationMode.cpp + sourceTree + SOURCE_ROOT + + 57D73BCD8A871590F140EFF6 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ApplicationBaseMode.h + path + ../../../addons/ofxPiMapper/src/Application/Modes/ApplicationBaseMode.h + sourceTree + SOURCE_ROOT + + 783422EB3B2FDA36D11DC9CF + + children + + 9631F04A0875ADEB45970DE8 + 57D73BCD8A871590F140EFF6 + 64156CB2D856E4CE0FBBED96 + 3B043509B19E37C383D7CA87 + 1BCA96396113AAF56D66C844 + DC8107E8E56AFFB933FE8962 + 4245228145B1AA737F49CF14 + 7FD330C204479B5A5021D286 + B16277019B0C4B684E1B063E + 3157007392BD114EAB99F470 + + isa + PBXGroup + name + Modes + sourceTree + <group> + + C4D6DA9B890E612343FD059F + + fileRef + 9631F04A0875ADEB45970DE8 + isa + PBXBuildFile + + 9631F04A0875ADEB45970DE8 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ApplicationBaseMode.cpp + path + ../../../addons/ofxPiMapper/src/Application/Modes/ApplicationBaseMode.cpp + sourceTree + SOURCE_ROOT + + 928068952444E81EF818B25C + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + Application.h + path + ../../../addons/ofxPiMapper/src/Application/Application.h + sourceTree + SOURCE_ROOT + + 43844FF975EC3DB9B9DDAD73 + + children + + 1B3B1807E9CFC3FFBA4DBBEF + 928068952444E81EF818B25C + 783422EB3B2FDA36D11DC9CF + 33DD6E4350FD51C68B7E65F0 + 5235D939D249EAF47F9A5EB5 + + isa + PBXGroup + name + Application + sourceTree + <group> + + 57113A603B123D17EBD5D0D1 + + children + + 43844FF975EC3DB9B9DDAD73 + F19689EE10A2EC1EC429FAC7 + 783C34304FF450D0CB244879 + 922DC4E8A53315BB0C983902 + 49237A8A4935FFC7A690CBD7 + C2E5DC1692A11AF5D981F8FA + 16DB3860ECC0D672B08DE71C + 378C962CF2DB945F38DE674A + 77B40894B404D46E0B9438E0 + DA1ABA97EBE5173F815CB449 + E910F62B91A8365D01A66512 + 925C888869704DBDF0BE6D0B + 3D6840E4DBCF2DED6C755B76 + + isa + PBXGroup + name + src + sourceTree + <group> + + 7CC2E9C572434BA3ED1C8079 + + children + + 57113A603B123D17EBD5D0D1 + + isa + PBXGroup + name + ofxPiMapper + sourceTree + <group> + + 401140F3B7FA4412935BB121 + + fileRef + 1B3B1807E9CFC3FFBA4DBBEF + isa + PBXBuildFile + + 1B3B1807E9CFC3FFBA4DBBEF + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + Application.cpp + path + ../../../addons/ofxPiMapper/src/Application/Application.cpp + sourceTree + SOURCE_ROOT + + 0A1DAC09F322AE313A40706D + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxToggle.h + path + ../../../addons/ofxGui/src/ofxToggle.h + sourceTree + SOURCE_ROOT + + 1CD33E884D9E3358252E82A1 + + fileRef + 907C5B5E104864A2D3A25745 + isa + PBXBuildFile + + 907C5B5E104864A2D3A25745 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxToggle.cpp + path + ../../../addons/ofxGui/src/ofxToggle.cpp + sourceTree + SOURCE_ROOT + + C70D8946940288799E82131E + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxSliderGroup.h + path + ../../../addons/ofxGui/src/ofxSliderGroup.h + sourceTree + SOURCE_ROOT + + B56FE57CC35806596D38118C + + fileRef + 802251BAF1B35B1D67B32FD0 + isa + PBXBuildFile + + 802251BAF1B35B1D67B32FD0 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxSliderGroup.cpp + path + ../../../addons/ofxGui/src/ofxSliderGroup.cpp + sourceTree + SOURCE_ROOT + + 52AFA1F08C420992CAAAE648 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxSlider.h + path + ../../../addons/ofxGui/src/ofxSlider.h + sourceTree + SOURCE_ROOT + + 837220E80EB56CD44AD27F2A + + fileRef + 15F2C6477A769C03A56D1401 + isa + PBXBuildFile + + 15F2C6477A769C03A56D1401 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxSlider.cpp + path + ../../../addons/ofxGui/src/ofxSlider.cpp + sourceTree + SOURCE_ROOT + + 89449E3044D456F7DE7BEA14 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxPanel.h + path + ../../../addons/ofxGui/src/ofxPanel.h + sourceTree + SOURCE_ROOT + + F285EB3169F1566CA3D93C20 + + fileRef + E112B3AEBEA2C091BF2B40AE + isa + PBXBuildFile + + E112B3AEBEA2C091BF2B40AE + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxPanel.cpp + path + ../../../addons/ofxGui/src/ofxPanel.cpp + sourceTree + SOURCE_ROOT + + B87C60311EC1FE841C1ECD89 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxLabel.h + path + ../../../addons/ofxGui/src/ofxLabel.h + sourceTree + SOURCE_ROOT + + 483908258D00B98B4BE69F07 + + fileRef + 78D67A00EB899FAC09430597 + isa + PBXBuildFile + + 78D67A00EB899FAC09430597 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxLabel.cpp + path + ../../../addons/ofxGui/src/ofxLabel.cpp + sourceTree + SOURCE_ROOT + + AE68B54581BE4A1DAE853180 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxInputField.h + path + ../../../addons/ofxGui/src/ofxInputField.h + sourceTree + SOURCE_ROOT + + 852E0891794923EE7583C621 + + fileRef + 44B351490B620D04E1E7C52D + isa + PBXBuildFile + + 44B351490B620D04E1E7C52D + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxInputField.cpp + path + ../../../addons/ofxGui/src/ofxInputField.cpp + sourceTree + SOURCE_ROOT + + 1C0DA2561397A7DE0246858B + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxGuiGroup.h + path + ../../../addons/ofxGui/src/ofxGuiGroup.h + sourceTree + SOURCE_ROOT + + B266578FC55D23BFEBC042E7 + + fileRef + ECF8674C7975F1063C5E30CA + isa + PBXBuildFile + + ECF8674C7975F1063C5E30CA + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxGuiGroup.cpp + path + ../../../addons/ofxGui/src/ofxGuiGroup.cpp + sourceTree + SOURCE_ROOT + + 17E65988300FBD9AAA2CD0CA + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxGui.h + path + ../../../addons/ofxGui/src/ofxGui.h + sourceTree + SOURCE_ROOT + + 489B196944B06ADC2A071076 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxColorPicker.h + path + ../../../addons/ofxGui/src/ofxColorPicker.h + sourceTree + SOURCE_ROOT + + 853E0BA2F448076739446874 + + fileRef + 181D363B6DD54D1FA6309C43 + isa + PBXBuildFile + + 181D363B6DD54D1FA6309C43 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxColorPicker.cpp + path + ../../../addons/ofxGui/src/ofxColorPicker.cpp + sourceTree + SOURCE_ROOT + + 2834D88A62CD23F3DE2C47D1 + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxButton.h + path + ../../../addons/ofxGui/src/ofxButton.h + sourceTree + SOURCE_ROOT + + 5CBB2AB3A60F65431D7B555D + + fileRef + C88333E71C9457E441C33474 + isa + PBXBuildFile + + C88333E71C9457E441C33474 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxButton.cpp + path + ../../../addons/ofxGui/src/ofxButton.cpp + sourceTree + SOURCE_ROOT + + 87F26B4B24CBD428AD9EEBAA + + explicitFileType + sourcecode.c.h + fileEncoding + 4 + isa + PBXFileReference + name + ofxBaseGui.h + path + ../../../addons/ofxGui/src/ofxBaseGui.h + sourceTree + SOURCE_ROOT + + A763ED608B35AE3310251DEE + + children + + 9604B925D32EE39065747725 + 87F26B4B24CBD428AD9EEBAA + C88333E71C9457E441C33474 + 2834D88A62CD23F3DE2C47D1 + 181D363B6DD54D1FA6309C43 + 489B196944B06ADC2A071076 + 17E65988300FBD9AAA2CD0CA + ECF8674C7975F1063C5E30CA + 1C0DA2561397A7DE0246858B + 44B351490B620D04E1E7C52D + AE68B54581BE4A1DAE853180 + 78D67A00EB899FAC09430597 + B87C60311EC1FE841C1ECD89 + E112B3AEBEA2C091BF2B40AE + 89449E3044D456F7DE7BEA14 + 15F2C6477A769C03A56D1401 + 52AFA1F08C420992CAAAE648 + 802251BAF1B35B1D67B32FD0 + C70D8946940288799E82131E + 907C5B5E104864A2D3A25745 + 0A1DAC09F322AE313A40706D + + isa + PBXGroup + name + src + sourceTree + <group> + + 480A780D8D0308AE4A368801 + + children + + A763ED608B35AE3310251DEE + + isa + PBXGroup + name + ofxGui + sourceTree + <group> + + 856AA354D08AB4B323081444 + + fileRef + 9604B925D32EE39065747725 + isa + PBXBuildFile + + 9604B925D32EE39065747725 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofxBaseGui.cpp + path + ../../../addons/ofxGui/src/ofxBaseGui.cpp + sourceTree + SOURCE_ROOT + + 6948EE371B920CB800B5AC1A + + children + + isa + PBXGroup + name + local_addons + sourceTree + <group> + + 8466F1851C04CA0E00918B1C + + buildActionMask + 12 + files + + inputPaths + + isa + PBXShellScriptBuildPhase + outputPaths + + runOnlyForDeploymentPostprocessing + 0 + shellPath + /bin/sh + shellScript + echo "$GCC_PREPROCESSOR_DEFINITIONS"; +APPSTORE=`expr "$GCC_PREPROCESSOR_DEFINITIONS" : ".*APPSTORE=\([0-9]*\)"` +if [ -z "$APPSTORE" ] ; then +echo "Note: Not copying bin/data to App Package or doing App Code signing. Use AppStore target for AppStore distribution"; +else +# Copy bin/data into App/Resources +rsync -avz --exclude='.DS_Store' "${SRCROOT}/bin/data/" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/" + +# ---- Code Sign App Package ---- + +# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY! + +# Verify that $CODE_SIGN_IDENTITY is set +if [ -z "${CODE_SIGN_IDENTITY}" ] ; then +echo "CODE_SIGN_IDENTITY needs to be set for framework code-signing" +exit 0 +fi + +if [ -z "${CODE_SIGN_ENTITLEMENTS}" ] ; then +echo "CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!" + +if [ "${CONFIGURATION}" = "Release" ] ; then +exit 1 +else +# Code-signing is optional for non-release builds. +exit 0 +fi +fi + +ITEMS="" + +FRAMEWORKS_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +echo "$FRAMEWORKS_DIR" +if [ -d "$FRAMEWORKS_DIR" ] ; then +FRAMEWORKS=$(find "${FRAMEWORKS_DIR}" -depth -type d -name "*.framework" -or -name "*.dylib" -or -name "*.bundle" | sed -e "s/\(.*framework\)/\1\/Versions\/A\//") +RESULT=$? +if [[ $RESULT != 0 ]] ; then +exit 1 +fi + +ITEMS="${FRAMEWORKS}" +fi + +LOGINITEMS_DIR="${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/" +if [ -d "$LOGINITEMS_DIR" ] ; then +LOGINITEMS=$(find "${LOGINITEMS_DIR}" -depth -type d -name "*.app") +RESULT=$? +if [[ $RESULT != 0 ]] ; then +exit 1 +fi + +ITEMS="${ITEMS}"$'\n'"${LOGINITEMS}" +fi + +# Prefer the expanded name, if available. +CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}" +if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then +# Fall back to old behavior. +CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}" +fi + +echo "Identity:" +echo "${CODE_SIGN_IDENTITY_FOR_ITEMS}" + +echo "Entitlements:" +echo "${CODE_SIGN_ENTITLEMENTS}" + +echo "Found:" +echo "${ITEMS}" + +# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below. +SAVED_IFS=$IFS +IFS=$(echo -en "\n\b") + +# Loop through all items. +for ITEM in $ITEMS; +do +echo "Signing '${ITEM}'" +codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" --entitlements "${CODE_SIGN_ENTITLEMENTS}" "${ITEM}" +RESULT=$? +if [[ $RESULT != 0 ]] ; then +echo "Failed to sign '${ITEM}'." +IFS=$SAVED_IFS +exit 1 +fi +done + +# Restore $IFS. +IFS=$SAVED_IFS + +fi + + + 99FA3DBB1C7456C400CFA0EE + + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + buildSettings + + HEADER_SEARCH_PATHS + + $(OF_CORE_HEADERS) + src + ../../../addons/ofxGui/src + ../../../addons/ofxPiMapper/src + ../../../addons/ofxPiMapper/src/Application + ../../../addons/ofxPiMapper/src/Application/Modes + ../../../addons/ofxPiMapper/src/Commands + ../../../addons/ofxPiMapper/src/Gui + ../../../addons/ofxPiMapper/src/Gui/Widgets + ../../../addons/ofxPiMapper/src/Info + ../../../addons/ofxPiMapper/src/MediaServer + ../../../addons/ofxPiMapper/src/Sources + ../../../addons/ofxPiMapper/src/Surfaces + ../../../addons/ofxPiMapper/src/Types + ../../../addons/ofxPiMapper/src/UserInterface + ../../../addons/ofxPiMapper/src/Utils + ../../../addons/ofxXmlSettings/libs + ../../../addons/ofxXmlSettings/src + + CONFIGURATION_BUILD_DIR + $(SRCROOT)/bin/ + COPY_PHASE_STRIP + YES + DEAD_CODE_STRIPPING + YES + GCC_AUTO_VECTORIZATION + YES + GCC_ENABLE_SSE3_EXTENSIONS + YES + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + YES + GCC_INLINES_ARE_PRIVATE_EXTERN + NO + GCC_OPTIMIZATION_LEVEL + 3 + GCC_PREPROCESSOR_DEFINITIONS[arch=*] + DISTRIBUTION=1 + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_UNROLL_LOOPS + YES + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + YES + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + NO + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + NO + GCC_WARN_UNINITIALIZED_AUTOS + NO + GCC_WARN_UNUSED_VALUE + NO + GCC_WARN_UNUSED_VARIABLE + NO + MACOSX_DEPLOYMENT_TARGET + 10.9 + OTHER_CPLUSPLUSFLAGS + + -D__MACOSX_CORE__ + -mtune=native + + SDKROOT + macosx + + isa + XCBuildConfiguration + name + AppStore + + 99FA3DBC1C7456C400CFA0EE + + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + buildSettings + + HEADER_SEARCH_PATHS + + $(OF_CORE_HEADERS) + src + ../../../addons/ofxGui/src + ../../../addons/ofxPiMapper/src + ../../../addons/ofxPiMapper/src/Application + ../../../addons/ofxPiMapper/src/Application/Modes + ../../../addons/ofxPiMapper/src/Commands + ../../../addons/ofxPiMapper/src/Gui + ../../../addons/ofxPiMapper/src/Gui/Widgets + ../../../addons/ofxPiMapper/src/Info + ../../../addons/ofxPiMapper/src/MediaServer + ../../../addons/ofxPiMapper/src/Sources + ../../../addons/ofxPiMapper/src/Surfaces + ../../../addons/ofxPiMapper/src/Types + ../../../addons/ofxPiMapper/src/UserInterface + ../../../addons/ofxPiMapper/src/Utils + ../../../addons/ofxXmlSettings/libs + ../../../addons/ofxXmlSettings/src + + COMBINE_HIDPI_IMAGES + YES + COPY_PHASE_STRIP + YES + FRAMEWORK_SEARCH_PATHS + $(inherited) + GCC_GENERATE_DEBUGGING_SYMBOLS + YES + GCC_MODEL_TUNING + NONE + GCC_PREPROCESSOR_DEFINITIONS[arch=*] + APPSTORE=1 + ICON + $(ICON_NAME_RELEASE) + ICON_FILE + $(ICON_FILE_PATH)$(ICON) + INFOPLIST_FILE + openFrameworks-Info.plist + INSTALL_PATH + /Applications + LIBRARY_SEARCH_PATHS + $(inherited) + PRODUCT_NAME + $(TARGET_NAME) + WRAPPER_EXTENSION + app + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + + isa + XCBuildConfiguration + name + AppStore + + BB4B014C10F69532006C3DED + + children + + 480A780D8D0308AE4A368801 + 7CC2E9C572434BA3ED1C8079 + 1F4FB5C423662B96ADFDCC0B + + isa + PBXGroup + name + addons + sourceTree + <group> + + E4328143138ABC890047C5CB + + isa + PBXFileReference + lastKnownFileType + wrapper.pb-project + name + openFrameworksLib.xcodeproj + path + ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj + sourceTree + SOURCE_ROOT + + E4328144138ABC890047C5CB + + children + + E4328148138ABC890047C5CB + + isa + PBXGroup + name + Products + sourceTree + <group> + + E4328147138ABC890047C5CB + + containerPortal + E4328143138ABC890047C5CB + isa + PBXContainerItemProxy + proxyType + 2 + remoteGlobalIDString + E4B27C1510CBEB8E00536013 + remoteInfo + openFrameworks + + E4328148138ABC890047C5CB + + fileType + archive.ar + isa + PBXReferenceProxy + path + openFrameworksDebug.a + remoteRef + E4328147138ABC890047C5CB + sourceTree + BUILT_PRODUCTS_DIR + + E4328149138ABC9F0047C5CB + + fileRef + E4328148138ABC890047C5CB + isa + PBXBuildFile + + E4B69B4A0A3A1720003C02F2 + + children + + E4B6FCAD0C3E899E008CF71C + E4EB6923138AFD0F00A09F29 + E4B69E1C0A3A1BDC003C02F2 + E4EEC9E9138DF44700A80321 + BB4B014C10F69532006C3DED + 6948EE371B920CB800B5AC1A + E4B69B5B0A3A1756003C02F2 + + isa + PBXGroup + sourceTree + <group> + + E4B69B4C0A3A1720003C02F2 + + attributes + + LastUpgradeCheck + 0600 + + buildConfigurationList + E4B69B4D0A3A1720003C02F2 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + English + Japanese + French + German + + mainGroup + E4B69B4A0A3A1720003C02F2 + productRefGroup + E4B69B4A0A3A1720003C02F2 + projectDirPath + + projectReferences + + + ProductGroup + E4328144138ABC890047C5CB + ProjectRef + E4328143138ABC890047C5CB + + + projectRoot + + targets + + E4B69B5A0A3A1756003C02F2 + + + E4B69B4D0A3A1720003C02F2 + + buildConfigurations + + E4B69B4E0A3A1720003C02F2 + E4B69B4F0A3A1720003C02F2 + 99FA3DBB1C7456C400CFA0EE + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + E4B69B4E0A3A1720003C02F2 + + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + buildSettings + + HEADER_SEARCH_PATHS + + $(OF_CORE_HEADERS) + src + ../../../addons/ofxGui/src + ../../../addons/ofxPiMapper/src + ../../../addons/ofxPiMapper/src/Application + ../../../addons/ofxPiMapper/src/Application/Modes + ../../../addons/ofxPiMapper/src/Commands + ../../../addons/ofxPiMapper/src/Gui + ../../../addons/ofxPiMapper/src/Gui/Widgets + ../../../addons/ofxPiMapper/src/Info + ../../../addons/ofxPiMapper/src/MediaServer + ../../../addons/ofxPiMapper/src/Sources + ../../../addons/ofxPiMapper/src/Surfaces + ../../../addons/ofxPiMapper/src/Types + ../../../addons/ofxPiMapper/src/UserInterface + ../../../addons/ofxPiMapper/src/Utils + ../../../addons/ofxXmlSettings/libs + ../../../addons/ofxXmlSettings/src + + CONFIGURATION_BUILD_DIR + $(SRCROOT)/bin/ + COPY_PHASE_STRIP + NO + DEAD_CODE_STRIPPING + YES + GCC_AUTO_VECTORIZATION + YES + GCC_ENABLE_SSE3_EXTENSIONS + YES + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + YES + GCC_INLINES_ARE_PRIVATE_EXTERN + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + YES + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + NO + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + NO + GCC_WARN_UNINITIALIZED_AUTOS + NO + GCC_WARN_UNUSED_VALUE + NO + GCC_WARN_UNUSED_VARIABLE + NO + MACOSX_DEPLOYMENT_TARGET + 10.9 + ONLY_ACTIVE_ARCH + YES + OTHER_CPLUSPLUSFLAGS + + -D__MACOSX_CORE__ + -mtune=native + + SDKROOT + macosx + + isa + XCBuildConfiguration + name + Debug + + E4B69B4F0A3A1720003C02F2 + + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + buildSettings + + HEADER_SEARCH_PATHS + + $(OF_CORE_HEADERS) + src + ../../../addons/ofxGui/src + ../../../addons/ofxPiMapper/src + ../../../addons/ofxPiMapper/src/Application + ../../../addons/ofxPiMapper/src/Application/Modes + ../../../addons/ofxPiMapper/src/Commands + ../../../addons/ofxPiMapper/src/Gui + ../../../addons/ofxPiMapper/src/Gui/Widgets + ../../../addons/ofxPiMapper/src/Info + ../../../addons/ofxPiMapper/src/MediaServer + ../../../addons/ofxPiMapper/src/Sources + ../../../addons/ofxPiMapper/src/Surfaces + ../../../addons/ofxPiMapper/src/Types + ../../../addons/ofxPiMapper/src/UserInterface + ../../../addons/ofxPiMapper/src/Utils + ../../../addons/ofxXmlSettings/libs + ../../../addons/ofxXmlSettings/src + + CONFIGURATION_BUILD_DIR + $(SRCROOT)/bin/ + COPY_PHASE_STRIP + YES + DEAD_CODE_STRIPPING + YES + GCC_AUTO_VECTORIZATION + YES + GCC_ENABLE_SSE3_EXTENSIONS + YES + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + YES + GCC_INLINES_ARE_PRIVATE_EXTERN + NO + GCC_OPTIMIZATION_LEVEL + 3 + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_UNROLL_LOOPS + YES + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + YES + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + NO + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + NO + GCC_WARN_UNINITIALIZED_AUTOS + NO + GCC_WARN_UNUSED_VALUE + NO + GCC_WARN_UNUSED_VARIABLE + NO + MACOSX_DEPLOYMENT_TARGET + 10.9 + OTHER_CPLUSPLUSFLAGS + + -D__MACOSX_CORE__ + -mtune=native + + SDKROOT + macosx + + isa + XCBuildConfiguration + name + Release + + E4B69B580A3A1756003C02F2 + + buildActionMask + 2147483647 + files + + E4B69E200A3A1BDC003C02F2 + E4B69E210A3A1BDC003C02F2 + 856AA354D08AB4B323081444 + 5CBB2AB3A60F65431D7B555D + 853E0BA2F448076739446874 + B266578FC55D23BFEBC042E7 + 852E0891794923EE7583C621 + 483908258D00B98B4BE69F07 + F285EB3169F1566CA3D93C20 + 837220E80EB56CD44AD27F2A + B56FE57CC35806596D38118C + 1CD33E884D9E3358252E82A1 + 401140F3B7FA4412935BB121 + C4D6DA9B890E612343FD059F + 4A53BFBA57F4AD16FB9D2D24 + 42AB7CD7DFB89209AB951942 + AA98F23DF9897F2241EF3968 + 21B18AC78EBFC1FD28C614D5 + 2E9E05C9FFCE15172A701335 + 580602DA874A9CF9E850DEEE + D88BA6D139757ED4E1669796 + B1EEE5A7EC1876072BF8F7FE + F9A6B58165791682416A1685 + 93760FE8B10EBD4081251E10 + C8D7FA44AA0565654A681157 + 973F560586CB3735581265E7 + D61A46C1800537BA43C7884F + 8CA6C92E3D4F91750BC469FF + A75658250711ADE2C05FC781 + C34B66987F4DA38C21AF325B + 6056983B92E88B475FF04299 + 845DC872C79A75F7B5FABC02 + 25F5CD753AF35B53464E56AE + 82643E358DF270B9EC939699 + 5826FF4F63DC430E90AFDA5E + B01F972DDDA5F21EF4C8B99D + 36A98A331EAE1D0A19998A59 + E327ACE85A208BAFACD1B7C7 + 67FF225B68ECC1942C833BFE + 60C8089351E49CF344577098 + E6D82F5A7B22E9FB46DEEF15 + 7DAB7D546F81A93336034BF7 + 800748EF057A284D9DA82F60 + B9654D0EF43BCA228B330ED7 + E5D631612E039E04B1736E76 + 14566DCD28D35A80428886C4 + 7002E598586957E5F20E69A7 + 90DE06EA59944C1BEA539719 + 4BF21A290FA6FE26B87B8971 + 84172554824F6959BA431E33 + 6500BFD07CA93EFD8A162B25 + A6EE8D8F3CA590EF6D7FAFA6 + 06765053D7BFBBEB43E77B23 + 6438655B2AE4DDA2743241EC + 23963D6D8F0085D5DD2DF394 + 28F5415281F8D09BBC098355 + EA700B09626C8413C92EF860 + 8E8F94DC506856A4E92FBA8A + 274AEF0299D77E27C0C5B205 + F06AE014F869282B7F7CE84C + FB03F0A6D7866DFC55F519EB + 8A3D6CE0A4338871766366B6 + 4D2D4455339FC8C955091C88 + 9CAA3B0DFD59840998C832DA + F3EACD31EE5E141FF66C48BD + DB8FC60C7512DB810C92625B + 92527EF632E7EC0E96BC329C + 3B90107DB9BF4857E357FCA8 + 892923A127FC7C57469FD078 + 7702233BBFB6E8D9E8B93CBC + 95CB0A22296B3DB402835DCF + D2B8EB6B80117D2235CD85FE + DBD3C91431A9ACF2F980B702 + 2375406EEFFBF32FC848BCF0 + 582BDA35793B6C5F719AFFB6 + 588E33B9B0BD6F5A2E4DF31D + A0C1CAB7B9C59DDDC960EB62 + 9F968AD3A115328F4BFE5D71 + D0758B5E19E04C33E9BF7193 + 63DB0907B2ACDF9E6F2D9925 + 9C194C9F4ACD67CD61FBD30D + 2A9AFA74E0EF07E58AC11382 + B27F2ADC894A4C463E892AFE + 85649EB44DE8F0A3BF8430F9 + C3A616FB3A463C17E327F395 + C0EB2D2E383BA9DE417ADB38 + 5FB2E2349349B93011671206 + 2E088EDC6E32D190998D8241 + 868F230C6074263277ED9B07 + 42BCE929D520D8872171239A + 1F4453EA1589AD79F4B34493 + 83CACB24937919003F2F9B63 + 63B57AC5BF4EF088491E0317 + 933A2227713C720CEFF80FD9 + 9D44DC88EF9E7991B4A09951 + 5A4349E9754D6FA14C0F2A3A + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + E4B69B590A3A1756003C02F2 + + buildActionMask + 2147483647 + files + + E4328149138ABC9F0047C5CB + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + E4B69B5A0A3A1756003C02F2 + + buildConfigurationList + E4B69B5F0A3A1757003C02F2 + buildPhases + + E4B69B580A3A1756003C02F2 + E4B69B590A3A1756003C02F2 + E4B6FFFD0C3F9AB9008CF71C + E4C2427710CC5ABF004149E2 + 8466F1851C04CA0E00918B1C + + buildRules + + dependencies + + E4EEB9AC138B136A00A80321 + + isa + PBXNativeTarget + name + example_pocketvj + productName + myOFApp + productReference + E4B69B5B0A3A1756003C02F2 + productType + com.apple.product-type.application + + E4B69B5B0A3A1756003C02F2 + + explicitFileType + wrapper.application + includeInIndex + 0 + isa + PBXFileReference + path + example_pocketvjDebug.app + sourceTree + BUILT_PRODUCTS_DIR + + E4B69B5F0A3A1757003C02F2 + + buildConfigurations + + E4B69B600A3A1757003C02F2 + E4B69B610A3A1757003C02F2 + 99FA3DBC1C7456C400CFA0EE + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + E4B69B600A3A1757003C02F2 + + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + buildSettings + + HEADER_SEARCH_PATHS + + $(OF_CORE_HEADERS) + src + ../../../addons/ofxGui/src + ../../../addons/ofxPiMapper/src + ../../../addons/ofxPiMapper/src/Application + ../../../addons/ofxPiMapper/src/Application/Modes + ../../../addons/ofxPiMapper/src/Commands + ../../../addons/ofxPiMapper/src/Gui + ../../../addons/ofxPiMapper/src/Gui/Widgets + ../../../addons/ofxPiMapper/src/Info + ../../../addons/ofxPiMapper/src/MediaServer + ../../../addons/ofxPiMapper/src/Sources + ../../../addons/ofxPiMapper/src/Surfaces + ../../../addons/ofxPiMapper/src/Types + ../../../addons/ofxPiMapper/src/UserInterface + ../../../addons/ofxPiMapper/src/Utils + ../../../addons/ofxXmlSettings/libs + ../../../addons/ofxXmlSettings/src + + COMBINE_HIDPI_IMAGES + YES + COPY_PHASE_STRIP + NO + FRAMEWORK_SEARCH_PATHS + $(inherited) + GCC_DYNAMIC_NO_PIC + NO + GCC_GENERATE_DEBUGGING_SYMBOLS + YES + GCC_MODEL_TUNING + NONE + ICON + $(ICON_NAME_DEBUG) + ICON_FILE + $(ICON_FILE_PATH)$(ICON) + INFOPLIST_FILE + openFrameworks-Info.plist + INSTALL_PATH + /Applications + LIBRARY_SEARCH_PATHS + $(inherited) + PRODUCT_NAME + $(TARGET_NAME)Debug + WRAPPER_EXTENSION + app + + isa + XCBuildConfiguration + name + Debug + + E4B69B610A3A1757003C02F2 + + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + buildSettings + + HEADER_SEARCH_PATHS + + $(OF_CORE_HEADERS) + src + ../../../addons/ofxGui/src + ../../../addons/ofxPiMapper/src + ../../../addons/ofxPiMapper/src/Application + ../../../addons/ofxPiMapper/src/Application/Modes + ../../../addons/ofxPiMapper/src/Commands + ../../../addons/ofxPiMapper/src/Gui + ../../../addons/ofxPiMapper/src/Gui/Widgets + ../../../addons/ofxPiMapper/src/Info + ../../../addons/ofxPiMapper/src/MediaServer + ../../../addons/ofxPiMapper/src/Sources + ../../../addons/ofxPiMapper/src/Surfaces + ../../../addons/ofxPiMapper/src/Types + ../../../addons/ofxPiMapper/src/UserInterface + ../../../addons/ofxPiMapper/src/Utils + ../../../addons/ofxXmlSettings/libs + ../../../addons/ofxXmlSettings/src + + COMBINE_HIDPI_IMAGES + YES + COPY_PHASE_STRIP + YES + FRAMEWORK_SEARCH_PATHS + $(inherited) + GCC_GENERATE_DEBUGGING_SYMBOLS + YES + GCC_MODEL_TUNING + NONE + ICON + $(ICON_NAME_RELEASE) + ICON_FILE + $(ICON_FILE_PATH)$(ICON) + INFOPLIST_FILE + openFrameworks-Info.plist + INSTALL_PATH + /Applications + LIBRARY_SEARCH_PATHS + $(inherited) + PRODUCT_NAME + $(TARGET_NAME) + WRAPPER_EXTENSION + app + baseConfigurationReference + E4EB6923138AFD0F00A09F29 + + isa + XCBuildConfiguration + name + Release + + E4B69E1C0A3A1BDC003C02F2 + + children + + E4B69E1D0A3A1BDC003C02F2 + E4B69E1E0A3A1BDC003C02F2 + E4B69E1F0A3A1BDC003C02F2 + + isa + PBXGroup + path + src + sourceTree + SOURCE_ROOT + + E4B69E1D0A3A1BDC003C02F2 + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.cpp.cpp + name + main.cpp + path + src/main.cpp + sourceTree + SOURCE_ROOT + + E4B69E1E0A3A1BDC003C02F2 + + explicitFileType + sourcecode.cpp.cpp + fileEncoding + 4 + isa + PBXFileReference + name + ofApp.cpp + path + src/ofApp.cpp + sourceTree + SOURCE_ROOT + + E4B69E1F0A3A1BDC003C02F2 + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + ofApp.h + path + src/ofApp.h + sourceTree + SOURCE_ROOT + + E4B69E200A3A1BDC003C02F2 + + fileRef + E4B69E1D0A3A1BDC003C02F2 + isa + PBXBuildFile + + E4B69E210A3A1BDC003C02F2 + + fileRef + E4B69E1E0A3A1BDC003C02F2 + isa + PBXBuildFile + + E4B6FCAD0C3E899E008CF71C + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + openFrameworks-Info.plist + sourceTree + <group> + + E4B6FFFD0C3F9AB9008CF71C + + buildActionMask + 2147483647 + files + + inputPaths + + isa + PBXShellScriptBuildPhase + outputPaths + + runOnlyForDeploymentPostprocessing + 0 + shellPath + /bin/sh + shellScript + mkdir -p "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/" +# Copy default icon file into App/Resources +rsync -aved "$ICON_FILE" "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/" +# Copy libfmod and change install directory for fmod to run +rsync -aved "$OF_PATH/libs/fmodex/lib/osx/libfmodex.dylib" "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/"; +install_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME"; + +echo "$GCC_PREPROCESSOR_DEFINITIONS"; + + + E4C2427710CC5ABF004149E2 + + buildActionMask + 2147483647 + dstPath + + dstSubfolderSpec + 10 + files + + isa + PBXCopyFilesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + E4EB691F138AFCF100A09F29 + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + name + CoreOF.xcconfig + path + ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig + sourceTree + SOURCE_ROOT + + E4EB6923138AFD0F00A09F29 + + fileEncoding + 4 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Project.xcconfig + sourceTree + <group> + + E4EEB9AB138B136A00A80321 + + containerPortal + E4328143138ABC890047C5CB + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + E4B27C1410CBEB8E00536013 + remoteInfo + openFrameworks + + E4EEB9AC138B136A00A80321 + + isa + PBXTargetDependency + name + openFrameworks + targetProxy + E4EEB9AB138B136A00A80321 + + E4EEC9E9138DF44700A80321 + + children + + E4EB691F138AFCF100A09F29 + E4328143138ABC890047C5CB + + isa + PBXGroup + name + openFrameworks + sourceTree + <group> + + + rootObject + E4B69B4C0A3A1720003C02F2 + + diff --git a/example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Debug.xcscheme b/example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Debug.xcscheme new file mode 100644 index 0000000..1fd4166 --- /dev/null +++ b/example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Debug.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Release.xcscheme b/example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Release.xcscheme new file mode 100644 index 0000000..f166528 --- /dev/null +++ b/example_pocketvj/example_pocketvj.xcodeproj/xcshareddata/xcschemes/example_pocketvj Release.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_pocketvj/openFrameworks-Info.plist b/example_pocketvj/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/example_pocketvj/openFrameworks-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + cc.openFrameworks.ofapp + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleIconFile + ${ICON} + + diff --git a/example_pocketvj/src/ofApp.cpp b/example_pocketvj/src/ofApp.cpp index 229ae4b..d623a1e 100644 --- a/example_pocketvj/src/ofApp.cpp +++ b/example_pocketvj/src/ofApp.cpp @@ -73,7 +73,7 @@ void ofApp::keyPressed(int key){ }else if(key == 's'){ mapper.saveProject(); }else if(key == 'y'){ - // Toggle layer panel + mapper.toggleLayerPanel(); }else if(key == 'z'){ mapper.undo(); }else if(key == 'd'){ From 211992c265474d3fd23604a690c11c26e4cd4928 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:52:08 +0100 Subject: [PATCH 098/103] Add ofxPiMapper::toggleShift method --- src/Application/Application.cpp | 7 ++++++- src/Application/Application.h | 1 + src/ofxPiMapper.cpp | 4 ++++ src/ofxPiMapper.h | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Application/Application.cpp b/src/Application/Application.cpp index 9b4df56..89bd67b 100644 --- a/src/Application/Application.cpp +++ b/src/Application/Application.cpp @@ -102,7 +102,7 @@ void Application::onKeyPressed(ofKeyEventArgs & args){ break; case '/': - _shiftKeyDown = !_shiftKeyDown; + toggleShift(); break; case '1': @@ -231,6 +231,11 @@ bool Application::isShiftKeyDown(){ return _shiftKeyDown; } +bool Application::toggleShift(){ + _shiftKeyDown = !_shiftKeyDown; + return _shiftKeyDown; +} + void Application::setPreset(unsigned int i){ _cmdManager.exec(new SetPresetCmd(this, i)); } diff --git a/src/Application/Application.h b/src/Application/Application.h index d1b00c5..0546e4e 100644 --- a/src/Application/Application.h +++ b/src/Application/Application.h @@ -96,6 +96,7 @@ class Application { bool loadXmlSettings(std::string fileName); bool isShiftKeyDown(); + bool toggleShift(); SurfaceManager * getSurfaceManager(){ return &_surfaceManager; } CmdManager * getCmdManager(){ return &_cmdManager; } diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index fcd0e46..84a2987 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -234,6 +234,10 @@ void ofxPiMapper::deselect(){ _application.deselect(); } +bool ofxPiMapper::toggleShift(){ + return _application.toggleShift(); +} + void ofxPiMapper::setMode(ofx::piMapper::Mode m){ if(m == ofx::piMapper::PRESENTATION_MODE){ _application.setPresentationMode(); diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index 3af7708..74e4470 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -32,6 +32,7 @@ class ofxPiMapper { void toggleInfo(); void undo(); void deselect(); + bool toggleShift(); // Modes void setMode(ofx::piMapper::Mode m); From f3030c6523f60c4e470f31dcb4d2d7e7c8518b76 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 18:52:52 +0100 Subject: [PATCH 099/103] Make use of ofxPiMapper::toggleShift in example_pocketvj --- example_pocketvj/src/ofApp.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/example_pocketvj/src/ofApp.cpp b/example_pocketvj/src/ofApp.cpp index d623a1e..d9644c8 100644 --- a/example_pocketvj/src/ofApp.cpp +++ b/example_pocketvj/src/ofApp.cpp @@ -90,16 +90,21 @@ void ofApp::keyPressed(int key){ mapper.moveSelection(ofx::piMapper::Vec3(-1.0f, 0.0f, 0.0f)); }else if(key == '0'){ mapper.moveSelection(ofx::piMapper::Vec3(1.0f, 0.0f, 0.0f)); + }else if(key == '/'){ + bool shiftIsDown = mapper.toggleShift(); + if(shiftIsDown){ + ofLogNotice("ofApp") << "Shift key is down"; + }else{ + ofLogNotice("ofApp") << "Shift key is up"; + } } - // Make / toggle between shif/unshift (how to capture that with EGL window?) - - /* - rbt Reboot (Raspberry Pi only) - sdn Shutdown (Raspberry Pi only) - new Clear composition (remove all surfaces) - ext Exit application and return to command line - */ + /* For these one has to figure out her own ways. + * rbt Reboot (Raspberry Pi only) + * sdn Shutdown (Raspberry Pi only) + * new Clear composition (remove all surfaces) + * ext Exit application and return to command line + */ } void ofApp::keyReleased(int key){ From cd95c14b8041ea851b08282ba865e124de015895 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 20:25:20 +0100 Subject: [PATCH 100/103] Remove unused variable boxAspect from ScaleWidget --- src/Gui/Widgets/ScaleWidget.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Gui/Widgets/ScaleWidget.cpp b/src/Gui/Widgets/ScaleWidget.cpp index cbb3e35..57e0577 100644 --- a/src/Gui/Widgets/ScaleWidget.cpp +++ b/src/Gui/Widgets/ScaleWidget.cpp @@ -130,8 +130,6 @@ void ScaleWidget::onMouseDragged(ofMouseEventArgs & args){ } ofRectangle box = _surfaceManager->getSelectedSurface()->getBoundingBox(); - float boxAspect = box.width / box.height; - ofPolyline newLine = _line; newLine[1].x = args.x; newLine[1].y = args.y; From be4d830c54df1167afbf01b98dca192fb8e78a98 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 20:30:57 +0100 Subject: [PATCH 101/103] Remove unused variables from TextureEditorWidget --- src/Gui/Widgets/TextureEditorWidget.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Gui/Widgets/TextureEditorWidget.cpp b/src/Gui/Widgets/TextureEditorWidget.cpp index b84d7fc..f94599a 100644 --- a/src/Gui/Widgets/TextureEditorWidget.cpp +++ b/src/Gui/Widgets/TextureEditorWidget.cpp @@ -296,13 +296,6 @@ void TextureEditorWidget::moveTexCoords(Vec2 by){ int rows = s->getGridRows(); int cols = s->getGridCols(); - int vertsPerRow = cols + 1; - int vertsPerCol = rows + 1; - - int a = 0; - int b = cols; - int c = (rows * vertsPerRow) + (vertsPerRow - 1); - int d = (rows * vertsPerRow); // Distance between horizontal tex coords float sx = joints[0]->position.x / textureSize.x; From 1800eba9e5f51996a51f28bfe025a3df34c1653f Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 20:40:19 +0100 Subject: [PATCH 102/103] Remove unused variable key from TextureMappingMode --- src/Application/Modes/TextureMappingMode.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Application/Modes/TextureMappingMode.cpp b/src/Application/Modes/TextureMappingMode.cpp index e7a15ec..7a08a8d 100644 --- a/src/Application/Modes/TextureMappingMode.cpp +++ b/src/Application/Modes/TextureMappingMode.cpp @@ -73,7 +73,6 @@ void TextureMappingMode::draw(Application * app){ } void TextureMappingMode::onKeyPressed(Application * app, ofKeyEventArgs & args){ - int key = args.key; float moveStep; if(app->isShiftKeyDown()){ From 7bbf58d3843e0c7cdb207a1524249cb143a70eeb Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 10 Jan 2018 20:46:23 +0100 Subject: [PATCH 103/103] Remove paramPtr unused variable from RadioList --- src/UserInterface/RadioList.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/UserInterface/RadioList.cpp b/src/UserInterface/RadioList.cpp index 3b95a56..eff3ea9 100644 --- a/src/UserInterface/RadioList.cpp +++ b/src/UserInterface/RadioList.cpp @@ -145,7 +145,6 @@ void RadioList::unselectAll(){ int i; for(i = 0; i < guiGroup.getNumControls(); i++){ ofxToggle * toggle = static_cast (guiGroup.getControl(i)); - ofParameter * paramPtr = static_cast *>(&toggle->getParameter()); toggle->removeListener(this, &RadioList::onToggleClicked); *toggle = false; toggle->addListener(this, &RadioList::onToggleClicked);