11 changed files with 411 additions and 0 deletions
@ -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 |
@ -0,0 +1,5 @@ |
|||
ofxGui |
|||
ofxJSON |
|||
ofxNetwork |
|||
ofxPiMapper |
|||
ofxXmlSettings |
@ -0,0 +1,4 @@ |
|||
{ |
|||
"ip":"127.0.0.1", |
|||
"port":9999 |
|||
} |
@ -0,0 +1,36 @@ |
|||
<surfaces> |
|||
<surface type="0"> |
|||
<vertices> |
|||
<vertex> |
|||
<x>640.000000000</x> |
|||
<y>50.000000000</y> |
|||
</vertex> |
|||
<vertex> |
|||
<x>1230.000000000</x> |
|||
<y>750.000000000</y> |
|||
</vertex> |
|||
<vertex> |
|||
<x>50.000000000</x> |
|||
<y>750.000000000</y> |
|||
</vertex> |
|||
</vertices> |
|||
<texCoords> |
|||
<texCoord> |
|||
<x>0.500000000</x> |
|||
<y>0.000000000</y> |
|||
</texCoord> |
|||
<texCoord> |
|||
<x>1.000000000</x> |
|||
<y>1.000000000</y> |
|||
</texCoord> |
|||
<texCoord> |
|||
<x>0.000000000</x> |
|||
<y>1.000000000</y> |
|||
</texCoord> |
|||
</texCoords> |
|||
<source> |
|||
<source-type>video</source-type> |
|||
<source-name>gene-nsynthesis-loop-b.mp4</source-name> |
|||
</source> |
|||
</surface> |
|||
</surfaces> |
@ -0,0 +1,3 @@ |
|||
version https://git-lfs.github.com/spec/v1 |
|||
oid sha256:2da7b85225116bee7e1ae5275f58cca7684c2a5d013b97bdd46955c2c418a812 |
|||
size 2045077 |
@ -0,0 +1,142 @@ |
|||
################################################################################ |
|||
# CONFIGURE PROJECT MAKEFILE (optional) |
|||
# This file is where we make project specific configurations. |
|||
################################################################################ |
|||
|
|||
################################################################################ |
|||
# OF ROOT |
|||
# The location of your root openFrameworks installation |
|||
# (default) OF_ROOT = ../../.. |
|||
################################################################################ |
|||
# OF_ROOT = ../../.. |
|||
|
|||
################################################################################ |
|||
# PROJECT ROOT |
|||
# The location of the project - a starting place for searching for files |
|||
# (default) PROJECT_ROOT = . (this directory) |
|||
# |
|||
################################################################################ |
|||
# PROJECT_ROOT = . |
|||
|
|||
################################################################################ |
|||
# PROJECT SPECIFIC CHECKS |
|||
# This is a project defined section to create internal makefile flags to |
|||
# conditionally enable or disable the addition of various features within |
|||
# this makefile. For instance, if you want to make changes based on whether |
|||
# GTK is installed, one might test that here and create a variable to check. |
|||
################################################################################ |
|||
# None |
|||
|
|||
################################################################################ |
|||
# PROJECT EXTERNAL SOURCE PATHS |
|||
# These are fully qualified paths that are not within the PROJECT_ROOT folder. |
|||
# Like source folders in the PROJECT_ROOT, these paths are subject to |
|||
# exlclusion via the PROJECT_EXLCUSIONS list. |
|||
# |
|||
# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_EXTERNAL_SOURCE_PATHS = |
|||
|
|||
################################################################################ |
|||
# PROJECT EXCLUSIONS |
|||
# These makefiles assume that all folders in your current project directory |
|||
# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations |
|||
# to look for source code. The any folders or files that match any of the |
|||
# items in the PROJECT_EXCLUSIONS list below will be ignored. |
|||
# |
|||
# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete |
|||
# string unless teh user adds a wildcard (%) operator to match subdirectories. |
|||
# GNU make only allows one wildcard for matching. The second wildcard (%) is |
|||
# treated literally. |
|||
# |
|||
# (default) PROJECT_EXCLUSIONS = (blank) |
|||
# |
|||
# Will automatically exclude the following: |
|||
# |
|||
# $(PROJECT_ROOT)/bin% |
|||
# $(PROJECT_ROOT)/obj% |
|||
# $(PROJECT_ROOT)/%.xcodeproj |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_EXCLUSIONS = |
|||
|
|||
################################################################################ |
|||
# PROJECT LINKER FLAGS |
|||
# These flags will be sent to the linker when compiling the executable. |
|||
# |
|||
# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
|
|||
# Currently, shared libraries that are needed are copied to the |
|||
# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to |
|||
# add a runtime path to search for those shared libraries, since they aren't |
|||
# incorporated directly into the final executable application binary. |
|||
# TODO: should this be a default setting? |
|||
# PROJECT_LDFLAGS=-Wl,-rpath=./libs |
|||
|
|||
################################################################################ |
|||
# PROJECT DEFINES |
|||
# Create a space-delimited list of DEFINES. The list will be converted into |
|||
# CFLAGS with the "-D" flag later in the makefile. |
|||
# |
|||
# (default) PROJECT_DEFINES = (blank) |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_DEFINES = |
|||
|
|||
################################################################################ |
|||
# PROJECT CFLAGS |
|||
# This is a list of fully qualified CFLAGS required when compiling for this |
|||
# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS |
|||
# defined in your platform specific core configuration files. These flags are |
|||
# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. |
|||
# |
|||
# (default) PROJECT_CFLAGS = (blank) |
|||
# |
|||
# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in |
|||
# your platform specific configuration file will be applied by default and |
|||
# further flags here may not be needed. |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_CFLAGS = |
|||
|
|||
################################################################################ |
|||
# PROJECT OPTIMIZATION CFLAGS |
|||
# These are lists of CFLAGS that are target-specific. While any flags could |
|||
# be conditionally added, they are usually limited to optimization flags. |
|||
# These flags are added BEFORE the PROJECT_CFLAGS. |
|||
# |
|||
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. |
|||
# |
|||
# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) |
|||
# |
|||
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. |
|||
# |
|||
# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) |
|||
# |
|||
# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the |
|||
# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration |
|||
# file will be applied by default and further optimization flags here may not |
|||
# be needed. |
|||
# |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = |
|||
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = |
|||
|
|||
################################################################################ |
|||
# PROJECT COMPILERS |
|||
# Custom compilers can be set for CC and CXX |
|||
# (default) PROJECT_CXX = (blank) |
|||
# (default) PROJECT_CC = (blank) |
|||
# Note: Leave a leading space when adding list items with the += operator |
|||
################################################################################ |
|||
# PROJECT_CXX = |
|||
# PROJECT_CC = |
@ -0,0 +1,46 @@ |
|||
#include "TCPClient.h" |
|||
|
|||
shared_ptr<TCPClient> TCPClient::_instance = 0; |
|||
|
|||
shared_ptr<TCPClient> TCPClient::instance(){ |
|||
if(_instance == 0){ |
|||
_instance = shared_ptr<TCPClient>(new TCPClient); |
|||
} |
|||
return _instance; |
|||
} |
|||
|
|||
TCPClient::TCPClient(){ |
|||
|
|||
} |
|||
|
|||
void TCPClient::setup(string ip, int port){ |
|||
_tcpClient.setup(ip, port); |
|||
} |
|||
|
|||
void TCPClient::update(){ |
|||
if(_tcpClient.isConnected()){ |
|||
string rx = _tcpClient.receive(); |
|||
if(rx.length() > 0){ |
|||
ofxJSONElement json; |
|||
json["event"] = "received"; |
|||
json["data"] = rx; |
|||
|
|||
ofMessage m(json.getRawString()); |
|||
ofSendMessage(m); |
|||
} |
|||
} |
|||
} |
|||
|
|||
void TCPClient::draw(){ |
|||
if(_tcpClient.isConnected()){ |
|||
ofSetColor(0, 255, 0); |
|||
ofPushMatrix(); |
|||
ofTranslate(10, 10); |
|||
ofDrawRectangle(0, 0, 10, 10); |
|||
ofPopMatrix(); |
|||
} |
|||
} |
|||
|
|||
void TCPClient::send(string message){ |
|||
_tcpClient.send(message); |
|||
} |
@ -0,0 +1,22 @@ |
|||
#pragma once |
|||
|
|||
#include "ofMain.h" |
|||
#include "ofxNetwork.h" |
|||
#include "ofxJSONElement.h" |
|||
|
|||
class TCPClient{ |
|||
public: |
|||
static shared_ptr<TCPClient> instance(); |
|||
|
|||
void setup(string ip, int port); |
|||
void update(); |
|||
void draw(); |
|||
|
|||
void send(string message); |
|||
|
|||
private: |
|||
TCPClient(); |
|||
static shared_ptr<TCPClient> _instance; |
|||
|
|||
ofxTCPClient _tcpClient; |
|||
}; |
@ -0,0 +1,7 @@ |
|||
#include "ofMain.h" |
|||
#include "ofApp.h" |
|||
|
|||
int main(){ |
|||
ofSetupOpenGL(1280, 800, OF_WINDOW); |
|||
ofRunApp(new ofApp()); |
|||
} |
@ -0,0 +1,109 @@ |
|||
#include "ofApp.h" |
|||
|
|||
void ofApp::setup(){ |
|||
ofBackground(0); |
|||
|
|||
isMapperSetup = false; |
|||
|
|||
// Set IP address of your RasPi in data/config.json
|
|||
ofxJSONElement json; |
|||
json.open("config.json"); |
|||
TCPClient::instance()->setup(json["ip"].asString(), json["port"].asInt()); |
|||
} |
|||
|
|||
void ofApp::update(){ |
|||
TCPClient::instance()->update(); |
|||
if(isMapperSetup){ |
|||
mapper.update(); |
|||
} |
|||
} |
|||
|
|||
void ofApp::draw(){ |
|||
TCPClient::instance()->draw(); |
|||
if(isMapperSetup){ |
|||
mapper.draw(); |
|||
} |
|||
} |
|||
|
|||
// This is where we get configuration from the server part of this.
|
|||
void ofApp::gotMessage(ofMessage m){ |
|||
ofxJSONElement json; |
|||
bool ok = json.parse(m.message); |
|||
if(ok){ |
|||
if(json["event"] == "received"){ |
|||
std::string buffer = json["data"].asString(); |
|||
ofxXmlSettings xml; |
|||
xml.loadFromBuffer(buffer); |
|||
xml.save("ofxpimapper.xml"); |
|||
|
|||
mapper.setup(); |
|||
isMapperSetup = true; |
|||
} |
|||
} |
|||
} |
|||
|
|||
void ofApp::keyPressed(int key){ |
|||
if(isMapperSetup){ |
|||
mapper.keyPressed(key); |
|||
|
|||
ofxJSONElement json; |
|||
json["event"] = "keyPressed"; |
|||
json["key"] = key; |
|||
|
|||
TCPClient::instance()->send(json.getRawString()); |
|||
} |
|||
} |
|||
|
|||
void ofApp::keyReleased(int key){ |
|||
if(isMapperSetup){ |
|||
mapper.keyReleased(key); |
|||
|
|||
ofxJSONElement json; |
|||
json["event"] = "keyReleased"; |
|||
json["key"] = key; |
|||
|
|||
TCPClient::instance()->send(json.getRawString()); |
|||
} |
|||
} |
|||
|
|||
void ofApp::mousePressed(int x, int y, int button){ |
|||
if(isMapperSetup){ |
|||
mapper.mousePressed(x, y, button); |
|||
|
|||
ofxJSONElement json; |
|||
json["event"] = "mousePressed"; |
|||
json["x"] = x; |
|||
json["y"] = y; |
|||
json["button"] = button; |
|||
|
|||
TCPClient::instance()->send(json.getRawString()); |
|||
} |
|||
} |
|||
|
|||
void ofApp::mouseReleased(int x, int y, int button){ |
|||
if(isMapperSetup){ |
|||
mapper.mouseReleased(x, y, button); |
|||
|
|||
ofxJSONElement json; |
|||
json["event"] = "mouseReleased"; |
|||
json["x"] = x; |
|||
json["y"] = y; |
|||
json["button"] = button; |
|||
|
|||
TCPClient::instance()->send(json.getRawString()); |
|||
} |
|||
} |
|||
|
|||
void ofApp::mouseDragged(int x, int y, int button){ |
|||
if(isMapperSetup){ |
|||
mapper.mouseDragged(x, y, button); |
|||
|
|||
ofxJSONElement json; |
|||
json["event"] = "mouseDragged"; |
|||
json["x"] = x; |
|||
json["y"] = y; |
|||
json["button"] = button; |
|||
|
|||
TCPClient::instance()->send(json.getRawString()); |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
#pragma once |
|||
|
|||
#include "ofMain.h" |
|||
#include "TCPClient.h" |
|||
#include "ofxPiMapper.h" |
|||
#include "ofxJSONElement.h" |
|||
|
|||
class ofApp : public ofBaseApp{ |
|||
public: |
|||
void setup(); |
|||
void update(); |
|||
void draw(); |
|||
|
|||
void gotMessage(ofMessage m); |
|||
|
|||
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; |
|||
bool isMapperSetup; |
|||
}; |
Loading…
Reference in new issue