16 changed files with 1627 additions and 185 deletions
@ -1,6 +1,5 @@ |
|||
obj |
|||
*.xcodeproj |
|||
*.plist |
|||
*.xcconfig |
|||
*.xcworkspace |
|||
*.xcuserdatad |
|||
*~ |
|||
config.make |
|||
|
@ -0,0 +1,17 @@ |
|||
//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) |
|||
HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) |
File diff suppressed because it is too large
@ -0,0 +1,86 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<Scheme |
|||
LastUpgradeVersion = "0460" |
|||
version = "1.3"> |
|||
<BuildAction |
|||
parallelizeBuildables = "YES" |
|||
buildImplicitDependencies = "YES"> |
|||
<BuildActionEntries> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "YES" |
|||
buildForArchiving = "YES" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
</BuildActionEntries> |
|||
</BuildAction> |
|||
<TestAction |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
shouldUseLaunchSchemeArgsEnv = "YES" |
|||
buildConfiguration = "Debug"> |
|||
<Testables> |
|||
</Testables> |
|||
<MacroExpansion> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</MacroExpansion> |
|||
</TestAction> |
|||
<LaunchAction |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
launchStyle = "0" |
|||
useCustomWorkingDirectory = "NO" |
|||
buildConfiguration = "Debug" |
|||
ignoresPersistentStateOnLaunch = "NO" |
|||
debugDocumentVersioning = "YES" |
|||
allowLocationSimulation = "YES"> |
|||
<BuildableProductRunnable> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
<AdditionalOptions> |
|||
</AdditionalOptions> |
|||
</LaunchAction> |
|||
<ProfileAction |
|||
shouldUseLaunchSchemeArgsEnv = "YES" |
|||
savedToolIdentifier = "" |
|||
useCustomWorkingDirectory = "NO" |
|||
buildConfiguration = "Debug" |
|||
debugDocumentVersioning = "YES"> |
|||
<BuildableProductRunnable> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
</ProfileAction> |
|||
<AnalyzeAction |
|||
buildConfiguration = "Debug"> |
|||
</AnalyzeAction> |
|||
<ArchiveAction |
|||
buildConfiguration = "Debug" |
|||
revealArchiveInOrganizer = "YES"> |
|||
</ArchiveAction> |
|||
</Scheme> |
@ -0,0 +1,86 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<Scheme |
|||
LastUpgradeVersion = "0460" |
|||
version = "1.3"> |
|||
<BuildAction |
|||
parallelizeBuildables = "YES" |
|||
buildImplicitDependencies = "YES"> |
|||
<BuildActionEntries> |
|||
<BuildActionEntry |
|||
buildForTesting = "YES" |
|||
buildForRunning = "YES" |
|||
buildForProfiling = "YES" |
|||
buildForArchiving = "YES" |
|||
buildForAnalyzing = "YES"> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildActionEntry> |
|||
</BuildActionEntries> |
|||
</BuildAction> |
|||
<TestAction |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
shouldUseLaunchSchemeArgsEnv = "YES" |
|||
buildConfiguration = "Release"> |
|||
<Testables> |
|||
</Testables> |
|||
<MacroExpansion> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</MacroExpansion> |
|||
</TestAction> |
|||
<LaunchAction |
|||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|||
launchStyle = "0" |
|||
useCustomWorkingDirectory = "NO" |
|||
buildConfiguration = "Release" |
|||
ignoresPersistentStateOnLaunch = "NO" |
|||
debugDocumentVersioning = "YES" |
|||
allowLocationSimulation = "YES"> |
|||
<BuildableProductRunnable> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
<AdditionalOptions> |
|||
</AdditionalOptions> |
|||
</LaunchAction> |
|||
<ProfileAction |
|||
shouldUseLaunchSchemeArgsEnv = "YES" |
|||
savedToolIdentifier = "" |
|||
useCustomWorkingDirectory = "NO" |
|||
buildConfiguration = "Release" |
|||
debugDocumentVersioning = "YES"> |
|||
<BuildableProductRunnable> |
|||
<BuildableReference |
|||
BuildableIdentifier = "primary" |
|||
BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" |
|||
BuildableName = "example.app" |
|||
BlueprintName = "example" |
|||
ReferencedContainer = "container:example.xcodeproj"> |
|||
</BuildableReference> |
|||
</BuildableProductRunnable> |
|||
</ProfileAction> |
|||
<AnalyzeAction |
|||
buildConfiguration = "Release"> |
|||
</AnalyzeAction> |
|||
<ArchiveAction |
|||
buildConfiguration = "Release" |
|||
revealArchiveInOrganizer = "YES"> |
|||
</ArchiveAction> |
|||
</Scheme> |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>CFBundleDevelopmentRegion</key> |
|||
<string>English</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>${EXECUTABLE_NAME}</string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>cc.openFrameworks.ofapp</string> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>APPL</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>1.0</string> |
|||
<key>CFBundleIconFile</key> |
|||
<string>${ICON}</string> |
|||
</dict> |
|||
</plist> |
@ -0,0 +1,158 @@ |
|||
#include "ofxPiMapper.h" |
|||
|
|||
ofxPiMapper::ofxPiMapper(): |
|||
bShowInfo(false), |
|||
isSetUp(false){ |
|||
ofAddListener(ofEvents().setup, this, &ofxPiMapper::setup, OF_EVENT_ORDER_BEFORE_APP); |
|||
ofAddListener(ofEvents().keyPressed, this, &ofxPiMapper::keyPressed); |
|||
} |
|||
|
|||
ofxPiMapper::~ofxPiMapper() { |
|||
ofRemoveListener(ofEvents().setup, this, &ofxPiMapper::setup, OF_EVENT_ORDER_BEFORE_APP); |
|||
ofRemoveListener(ofEvents().keyPressed, this, &ofxPiMapper::keyPressed); |
|||
} |
|||
|
|||
void ofxPiMapper::setup(ofEventArgs& args) { |
|||
ofLogNotice("ofxPiMapper") << "Setting up..."; |
|||
|
|||
// Assign media server to other pi mapper components
|
|||
surfaceManager.setMediaServer(&mediaServer); |
|||
gui.setMediaServer(&mediaServer); |
|||
|
|||
// Check if we have user surfaces defined, if not - load default
|
|||
if (ofFile::doesFileExist(PIMAPPER_USER_SURFACES_XML_FILE)) { |
|||
ofLogNotice("ofxPiMapper") << "Loading user surfaces from " << PIMAPPER_USER_SURFACES_XML_FILE; |
|||
surfaceManager.loadXmlSettings(PIMAPPER_USER_SURFACES_XML_FILE); |
|||
} else { |
|||
ofLogNotice("ofxPiMapper") << "Loading default surfaces from " << PIMAPPER_DEF_SURFACES_XML_FILE; |
|||
surfaceManager.loadXmlSettings(PIMAPPER_DEF_SURFACES_XML_FILE); |
|||
} |
|||
|
|||
// The GUI needs something to interface with
|
|||
gui.setSurfaceManager(&surfaceManager); |
|||
|
|||
isSetUp = true; |
|||
|
|||
ofLogNotice("ofxPiMapper") << "Done setting up"; |
|||
} |
|||
|
|||
void ofxPiMapper::draw() { |
|||
if (!isSetUp) { |
|||
return; |
|||
} |
|||
|
|||
// Draw the piMapper GUI
|
|||
gui.draw(); |
|||
|
|||
if (bShowInfo) { |
|||
// Draw instructions
|
|||
stringstream ss; |
|||
ss << "There are 4 modes:\n\n"; |
|||
ss << " 1. Presentation mode\n"; |
|||
ss << " 2. Texture mapping mode\n"; |
|||
ss << " 3. Projection mapping mode\n"; |
|||
ss << " 4. Source selection mode\n\n"; |
|||
ss << "You can switch between the modes by using <1>, <2>, <3> and <4> " |
|||
"keys on the keyboard.\n\n"; |
|||
ss << "Press <t> to add new triangle surface\n"; |
|||
ss << "Press <q> to add new quad surface\n"; |
|||
ss << "Press <s> to save the composition\n"; |
|||
ss << "Press <f> to toggle fullscreen\n"; |
|||
ss << "Press <i> to hide this message"; |
|||
|
|||
ofDrawBitmapStringHighlight(ss.str(), 10, 20, ofColor(0, 0, 0, 100), |
|||
ofColor(255, 255, 255, 200)); |
|||
} |
|||
|
|||
} // draw
|
|||
|
|||
void ofxPiMapper::keyPressed(ofKeyEventArgs &args) { |
|||
ofLogNotice("ofxPiMapper") << "Key pressed: " << static_cast<char>(args.key); |
|||
|
|||
switch (args.key) { |
|||
case '1': |
|||
gui.setMode(ofx::piMapper::GuiMode::NONE); |
|||
break; |
|||
case '2': |
|||
gui.setMode(ofx::piMapper::GuiMode::TEXTURE_MAPPING); |
|||
break; |
|||
case '3': |
|||
gui.setMode(ofx::piMapper::GuiMode::PROJECTION_MAPPING); |
|||
break; |
|||
case '4': |
|||
gui.setMode(ofx::piMapper::GuiMode::SOURCE_SELECTION); |
|||
break; |
|||
case 'i': |
|||
bShowInfo = !bShowInfo; |
|||
break; |
|||
case 'q': |
|||
addQuadSurface(); |
|||
break; |
|||
case 't': |
|||
addTriangleSurface(); |
|||
break; |
|||
case 'f': |
|||
ofToggleFullscreen(); |
|||
break; |
|||
case 's': |
|||
surfaceManager.saveXmlSettings(PIMAPPER_USER_SURFACES_XML_FILE); |
|||
break; |
|||
case OF_KEY_BACKSPACE: |
|||
surfaceManager.removeSelectedSurface(); |
|||
break; |
|||
default: |
|||
break; |
|||
} |
|||
} // keyPressed
|
|||
|
|||
void ofxPiMapper::addTriangleSurface() { |
|||
int surfaceType = ofx::piMapper::SurfaceType::TRIANGLE_SURFACE; |
|||
|
|||
vector<ofVec2f> 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)); |
|||
|
|||
vector<ofVec2f> 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)); |
|||
surfaceManager.addSurface(surfaceType, vertices, texCoords); |
|||
|
|||
// Select this surface right away
|
|||
surfaceManager.selectSurface(surfaceManager.size() - 1); |
|||
|
|||
} // addTriangleSurface
|
|||
|
|||
void ofxPiMapper::addQuadSurface() { |
|||
|
|||
int surfaceType = ofx::piMapper::SurfaceType::QUAD_SURFACE; |
|||
|
|||
vector<ofVec2f> 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)); |
|||
|
|||
vector<ofVec2f> 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))); |
|||
|
|||
surfaceManager.addSurface(surfaceType, vertices, texCoords); |
|||
|
|||
// select this surface right away
|
|||
surfaceManager.selectSurface(surfaceManager.size() - 1); |
|||
|
|||
} // addQuadSurface
|
|||
|
|||
ofx::piMapper::MediaServer& ofxPiMapper::getMediaServer() { |
|||
return mediaServer; |
|||
} |
|||
|
|||
ofx::piMapper::SurfaceManager& ofxPiMapper::getSurfaceManager() { |
|||
return surfaceManager; |
|||
} |
@ -1,6 +1,38 @@ |
|||
#pragma once |
|||
|
|||
#include "ofMain.h" |
|||
#include "SurfaceManager.h" |
|||
#include "SurfaceManagerGui.h" |
|||
#include "MediaServer.h" |
|||
|
|||
#include "MediaServer.h" |
|||
#define PIMAPPER_DEF_SURFACES_XML_FILE "defaultSurfaces.xml" |
|||
#define PIMAPPER_USER_SURFACES_XML_FILE "surfaces.xml" |
|||
|
|||
class ofxPiMapper { |
|||
public: |
|||
ofxPiMapper(); |
|||
~ofxPiMapper(); |
|||
|
|||
void setup(ofEventArgs& args); |
|||
void draw(); // Called manually to make custom layering possible
|
|||
void keyPressed(ofKeyEventArgs& args); |
|||
|
|||
// TODO: Move these methods to SurfaceManager
|
|||
void addTriangleSurface(); |
|||
void addQuadSurface(); |
|||
|
|||
// Toggle help / info
|
|||
void showInfo() { bShowInfo = true; }; |
|||
void hideInfo() { bShowInfo = false; }; |
|||
|
|||
// Getters
|
|||
ofx::piMapper::MediaServer& getMediaServer(); |
|||
ofx::piMapper::SurfaceManager& getSurfaceManager(); |
|||
|
|||
private: |
|||
bool isSetUp; |
|||
bool bShowInfo; |
|||
ofx::piMapper::MediaServer mediaServer; |
|||
ofx::piMapper::SurfaceManager surfaceManager; |
|||
ofx::piMapper::SurfaceManagerGui gui; |
|||
}; |
Loading…
Reference in new issue