├── mapamok-original ├── src │ ├── main.cpp │ ├── ofxProCamToolkit.h │ ├── ofApp.h │ ├── ofxProCamToolkit.cpp │ ├── LineArt.h │ └── ofApp.cpp ├── Project.xcconfig ├── openFrameworks-Info.plist └── mapamok.xcodeproj │ ├── xcshareddata │ └── xcschemes │ │ ├── mapamok Debug.xcscheme │ │ └── mapamok Release.xcscheme │ └── project.xcworkspace │ └── xcshareddata │ └── mapamok.xccheckout ├── readme.md ├── .gitignore ├── RenderTest ├── bin │ └── data │ │ ├── Outline.frag │ │ └── Outline.vert ├── Project.xcconfig ├── openFrameworks-Info.plist ├── src │ └── main.cpp └── ofApp.xcodeproj │ ├── project.xcworkspace │ └── xcshareddata │ │ └── ofApp.xccheckout │ ├── xcshareddata │ └── xcschemes │ │ ├── ofApp Debug.xcscheme │ │ └── ofApp Release.xcscheme │ └── project.pbxproj ├── Corners ├── Project.xcconfig ├── openFrameworks-Info.plist ├── src │ └── main.cpp └── ofApp.xcodeproj │ ├── project.xcworkspace │ └── xcshareddata │ │ └── ofApp.xccheckout │ └── xcshareddata │ └── xcschemes │ ├── ofApp Debug.xcscheme │ └── ofApp Release.xcscheme ├── Draggable ├── Project.xcconfig ├── openFrameworks-Info.plist ├── src │ └── main.cpp └── ofApp.xcodeproj │ ├── project.xcworkspace │ └── xcshareddata │ │ └── ofApp.xccheckout │ ├── xcshareddata │ └── xcschemes │ │ ├── ofApp Debug.xcscheme │ │ └── ofApp Release.xcscheme │ └── project.pbxproj ├── mapamok ├── Project.xcconfig ├── openFrameworks-Info.plist ├── mapamok.xcodeproj │ ├── xcshareddata │ │ └── xcschemes │ │ │ ├── mapamok Debug.xcscheme │ │ │ └── mapamok Release.xcscheme │ └── project.xcworkspace │ │ └── xcshareddata │ │ └── mapamok.xccheckout └── src │ └── main.cpp ├── license.md └── SharedCode ├── DraggablePoint.h ├── ofAutoShader.h ├── EventWatcher.h ├── DraggablePoints.h ├── SelectablePoints.h ├── Mapamok.h └── MeshUtils.h /mapamok-original/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofApp.h" 2 | 3 | int main() { 4 | ofSetupOpenGL(1280, 720, OF_WINDOW); 5 | ofRunApp(new ofApp()); 6 | } 7 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # mapamok 2 | 3 | mapamok is a tool for projection mapping originally developed by [Kyle McDonald](http://kylemcdonald.net) during the Guest Research Project v1 at Yamaguchi Center for Arts and Media. 4 | 5 | ProCamToolkit is co-developed by [YCAM Interlab](http://interlab.ycam.jp/en). -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | example-pulse/ 2 | 3 | *.depend 4 | *.layout 5 | *.mode*v3 6 | *.pbxuser 7 | *.app* 8 | *.DS_* 9 | *.xcworkspacedata 10 | xcuserdata/ 11 | 12 | *.opensdf 13 | *.sdf 14 | *.suo 15 | *.ipch 16 | 17 | .svn/ 18 | obj/ 19 | bin/ 20 | build/ 21 | !data/ 22 | 23 | ofxCv.wiki/ -------------------------------------------------------------------------------- /RenderTest/bin/data/Outline.frag: -------------------------------------------------------------------------------- 1 | #version 120 2 | 3 | varying vec2 texCoord; 4 | varying vec3 position; 5 | varying vec3 color; 6 | 7 | void main() { 8 | float brightness = min(min(color.r, color.g), color.b); 9 | brightness = brightness < .1 ? 1. : 0.; 10 | gl_FragColor = vec4(vec3(brightness), 1.); 11 | } -------------------------------------------------------------------------------- /RenderTest/bin/data/Outline.vert: -------------------------------------------------------------------------------- 1 | #version 120 2 | 3 | varying vec2 texCoord; 4 | varying vec3 position; 5 | varying vec3 color; 6 | 7 | void main() { 8 | texCoord = gl_MultiTexCoord0.xy; 9 | position = gl_Vertex.xyz; 10 | color = gl_Color.rgb; 11 | gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 12 | } -------------------------------------------------------------------------------- /RenderTest/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | OTHER_LDFLAGS = $(OF_CORE_LIBS) 9 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 10 | -------------------------------------------------------------------------------- /mapamok-original/src/ofxProCamToolkit.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxCv.h" 5 | 6 | ofVec3f ofWorldToScreen(ofVec3f world); 7 | ofVec3f ofScreenToWorld(ofVec3f screen); 8 | ofMesh getProjectedMesh(const ofMesh& mesh); 9 | cv::Point2f getClosestPoint(const vector& vertices, float x, float y, int* choice = NULL, float* distance = NULL); 10 | ofVec3f getClosestPointOnMesh(const ofMesh& mesh, float x, float y, int* choice = NULL, float* distance = NULL); 11 | -------------------------------------------------------------------------------- /Corners/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_LDFLAGS = $(OF_CORE_LIBS) 17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 18 | -------------------------------------------------------------------------------- /Draggable/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_LDFLAGS = $(OF_CORE_LIBS) 17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 18 | -------------------------------------------------------------------------------- /mapamok/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_LDFLAGS = $(OF_CORE_LIBS) 17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 18 | -------------------------------------------------------------------------------- /mapamok-original/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_LDFLAGS = $(OF_CORE_LIBS) 17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 18 | -------------------------------------------------------------------------------- /RenderTest/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.yourcompany.openFrameworks 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | 20 | 21 | -------------------------------------------------------------------------------- /Corners/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.yourcompany.openFrameworks 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | 22 | 23 | -------------------------------------------------------------------------------- /Draggable/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.yourcompany.openFrameworks 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | 22 | 23 | -------------------------------------------------------------------------------- /mapamok/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.yourcompany.openFrameworks 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | 22 | 23 | -------------------------------------------------------------------------------- /mapamok-original/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.yourcompany.openFrameworks 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | 22 | 23 | -------------------------------------------------------------------------------- /license.md: -------------------------------------------------------------------------------- 1 | The code in this repository is available under the [MIT License](https://secure.wikimedia.org/wikipedia/en/wiki/Mit_license). 2 | 3 | Copyright (c) 2011- Kyle McDonald and YCAM Interlab 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Draggable/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | 3 | #include "DraggablePoints.h" 4 | 5 | class WhitePoints : public SelectablePoints { 6 | public: 7 | void draw(ofEventArgs& args) { 8 | ofSetColor(ofColor::white); 9 | SelectablePoints::draw(args); 10 | } 11 | }; 12 | 13 | class GrayPoints : public DraggablePoints { 14 | public: 15 | void draw(ofEventArgs& args) { 16 | ofSetColor(ofColor::gray); 17 | DraggablePoints::draw(args); 18 | } 19 | }; 20 | 21 | class ofApp : public ofBaseApp { 22 | public: 23 | WhitePoints whitePoints; 24 | GrayPoints grayPoints; 25 | 26 | void setup() { 27 | whitePoints.setClickRadius(32); 28 | for(int i = 0; i < 12; i++) { 29 | whitePoints.add(ofVec2f(ofRandomWidth(), ofRandomHeight())); 30 | } 31 | whitePoints.enableControlEvents(); 32 | whitePoints.enableDrawEvent(); 33 | 34 | grayPoints.setClickRadius(24); 35 | for(int i = 0; i < 12; i++) { 36 | grayPoints.add(ofVec2f(ofRandomWidth(), ofRandomHeight())); 37 | } 38 | grayPoints.enableControlEvents(); 39 | grayPoints.enableDrawEvent(); 40 | } 41 | void draw() { 42 | ofBackground(0); 43 | } 44 | }; 45 | 46 | int main() { 47 | ofSetupOpenGL(1280, 720, OF_WINDOW); 48 | ofRunApp(new ofApp()); 49 | } 50 | -------------------------------------------------------------------------------- /SharedCode/DraggablePoint.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class DraggablePoint { 4 | public: 5 | ofVec2f position, positionStart; 6 | bool selected, dragging, hit; 7 | 8 | DraggablePoint() 9 | :selected(false) 10 | ,dragging(false) 11 | ,hit(false) { 12 | } 13 | void reset() { 14 | selected = false; 15 | dragging = false; 16 | hit = false; 17 | } 18 | bool isHit(ofVec2f v, float clickRadiusSquared) { 19 | bool curHit = position.distanceSquared(v) < clickRadiusSquared; 20 | if(curHit) { 21 | hit = true; 22 | } 23 | return curHit; 24 | } 25 | void draw(float clickRadiusSquared) { 26 | float r = 2;//sqrt(clickRadiusSquared); 27 | ofPushStyle(); 28 | ofNoFill(); 29 | ofSetLineWidth(2); 30 | if(selected) { 31 | ofSetColor(ofColor::yellow); 32 | ofCircle(position, r + 4); 33 | ofSetLineWidth(1); 34 | ofSetColor(255); 35 | ofLine(position.x, 0, position.x, ofGetHeight()); 36 | ofLine(0, position.y, ofGetWidth(), position.y); 37 | } 38 | ofPopStyle(); 39 | ofPushStyle(); 40 | ofFill(); 41 | if(hit) { 42 | ofSetColor(ofColor::green); 43 | } 44 | ofCircle(position, r); 45 | ofPopStyle(); 46 | } 47 | }; -------------------------------------------------------------------------------- /SharedCode/ofAutoShader.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class ofAutoShader : public ofShader { 4 | public: 5 | void setup(string name) { 6 | this->name = name; 7 | ofEventArgs args; 8 | update(args); 9 | ofAddListener(ofEvents().update, this, &ofAutoShader::update); 10 | } 11 | 12 | void update(ofEventArgs &args) { 13 | bool needsReload = false; 14 | 15 | string fragName = name + ".frag"; 16 | ofFile fragFile(fragName); 17 | if(fragFile.exists()) { 18 | Poco::Timestamp fragTimestamp = fragFile.getPocoFile().getLastModified(); 19 | if(fragTimestamp != lastFragTimestamp) { 20 | needsReload = true; 21 | lastFragTimestamp = fragTimestamp; 22 | } 23 | } else { 24 | fragName = ""; 25 | } 26 | 27 | string vertName = name + ".vert"; 28 | ofFile vertFile(vertName); 29 | if(vertFile.exists()) { 30 | Poco::Timestamp vertTimestamp = vertFile.getPocoFile().getLastModified(); 31 | if(vertTimestamp != lastVertTimestamp) { 32 | needsReload = true; 33 | lastVertTimestamp = vertTimestamp; 34 | } 35 | } else { 36 | vertName = ""; 37 | } 38 | 39 | if(needsReload) { 40 | ofLogVerbose("ofAutoShader") << "reloading shader at " << ofGetTimestampString("%H:%M:%S"); 41 | ofShader::load(vertName, fragName); 42 | } 43 | } 44 | private: 45 | string name; 46 | Poco::Timestamp lastFragTimestamp, lastVertTimestamp; 47 | }; 48 | -------------------------------------------------------------------------------- /Corners/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | 3 | #include "ofxAssimpModelLoader.h" 4 | #include "MeshUtils.h" 5 | 6 | class ofApp : public ofBaseApp { 7 | public: 8 | ofMesh mesh, controlPoints; 9 | ofEasyCam cam; 10 | vector rankedCorners; 11 | 12 | void setup() { 13 | // loadModel("mesh.3ds"); 14 | } 15 | void loadModel(string filename) { 16 | ofxAssimpModelLoader model; 17 | model.loadModel(filename); 18 | mesh = collapseModel(model); 19 | rankedCorners = getRankedCorners(mesh); 20 | } 21 | void update() { 22 | int n = mesh.getNumVertices(); 23 | int start = ofMap(mouseX, 0, ofGetWidth(), 0, n, true); 24 | controlPoints.clear(); 25 | controlPoints.setMode(OF_PRIMITIVE_POINTS); 26 | for(int i = start; i < n; i++) { 27 | unsigned int index = rankedCorners[i]; 28 | controlPoints.addVertex(mesh.getVertex(index)); 29 | } 30 | } 31 | void draw() { 32 | ofBackground(0); 33 | cam.begin(); 34 | ofSetLineWidth(2); 35 | ofSetColor(ofColor::red, 16); 36 | mesh.drawWireframe(); 37 | glPointSize(4); 38 | ofSetColor(ofColor::white); 39 | controlPoints.draw(); 40 | cam.end(); 41 | } 42 | void dragEvent(ofDragInfo dragInfo) { 43 | if(dragInfo.files.size() == 1) { 44 | string filename = dragInfo.files[0]; 45 | loadModel(filename); 46 | } 47 | } 48 | }; 49 | 50 | int main() { 51 | ofSetupOpenGL(1280, 720, OF_WINDOW); 52 | ofRunApp(new ofApp()); 53 | } 54 | -------------------------------------------------------------------------------- /mapamok-original/src/ofApp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxCv.h" 5 | #include "ofxAssimpModelLoader.h" 6 | #include "ofxProCamToolkit.h" 7 | #include "ofxAutoControlPanel.h" 8 | #include "LineArt.h" 9 | 10 | class ofApp : public ofBaseApp { 11 | public: 12 | void setb(string name, bool value); 13 | void seti(string name, int value); 14 | void setf(string name, float value); 15 | bool getb(string name); 16 | int geti(string name); 17 | float getf(string name); 18 | 19 | void setup(); 20 | void update(); 21 | void draw(); 22 | void keyPressed(int key); 23 | void mousePressed(int x, int y, int button); 24 | void mouseReleased(int x, int y, int button); 25 | 26 | void setupControlPanel(); 27 | void setupMesh(); 28 | void drawLabeledPoint(int label, ofVec2f position, ofColor color, ofColor bg = ofColor::black, ofColor fg = ofColor::white); 29 | void updateRenderMode(); 30 | void drawSelectionMode(); 31 | void drawRenderMode(); 32 | void render(); 33 | void loadCalibration(); 34 | void saveCalibration(); 35 | 36 | ofxAssimpModelLoader model; 37 | ofEasyCam cam; 38 | ofVboMesh objectMesh; 39 | ofMesh imageMesh; 40 | ofLight light; 41 | 42 | ofxAutoControlPanel panel; 43 | 44 | vector objectPoints; 45 | vector imagePoints; 46 | vector referencePoints; 47 | 48 | cv::Mat rvec, tvec; 49 | ofMatrix4x4 modelMatrix; 50 | ofxCv::Intrinsics intrinsics; 51 | bool calibrationReady; 52 | 53 | Poco::Timestamp lastFragTimestamp, lastVertTimestamp; 54 | ofShader shader; 55 | }; 56 | -------------------------------------------------------------------------------- /RenderTest/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | #include "ofAppGLFWWindow.h" 3 | 4 | #include "ofxAssimpModelLoader.h" 5 | #include "ofAutoShader.h" 6 | #include "MeshUtils.h" 7 | 8 | ofMesh collapseModel(ofxAssimpModelLoader model) { 9 | ofMesh mesh; 10 | for(int i = 0; i < model.getNumMeshes(); i++) { 11 | ofMesh curMesh = model.getMesh(i); 12 | mesh.append(curMesh); 13 | } 14 | return mesh; 15 | } 16 | 17 | class ofApp : public ofBaseApp { 18 | public: 19 | ofxAssimpModelLoader model; 20 | ofEasyCam cam; 21 | ofVboMesh mesh; 22 | ofAutoShader shader; 23 | 24 | void setup() { 25 | ofSetVerticalSync(false); 26 | model.loadModel("model.dae"); 27 | shader.setup("Outline"); 28 | mesh = collapseModel(model); 29 | mesh = convertIndices(mesh); 30 | 31 | mesh.setMode(OF_PRIMITIVE_TRIANGLES); 32 | mesh.clearColors(); 33 | int n = mesh.getNumVertices(); 34 | for(int i = 0; i < n; i++) { 35 | mesh.addColor(ofColor(255, 0, 0)); 36 | mesh.addColor(ofColor(0, 255, 0)); 37 | mesh.addColor(ofColor(0, 0, 255)); 38 | } 39 | } 40 | void update() { 41 | } 42 | void draw() { 43 | ofEnableDepthTest(); 44 | ofBackground(0); 45 | cam.begin(); 46 | shader.begin(); 47 | mesh.drawFaces(); 48 | shader.end(); 49 | cam.end(); 50 | ofDrawBitmapString(ofToString((int) ofGetFrameRate()), 10, ofGetHeight() - 40); 51 | } 52 | }; 53 | 54 | int main() { 55 | ofAppGLFWWindow window; 56 | ofSetupOpenGL(&window, 1280, 720, OF_WINDOW); 57 | ofRunApp(new ofApp()); 58 | } 59 | -------------------------------------------------------------------------------- /SharedCode/EventWatcher.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class EventWatcher { 4 | public: 5 | virtual void mousePressed(ofMouseEventArgs& mouse) {} 6 | virtual void mouseMoved(ofMouseEventArgs& mouse) {} 7 | virtual void mouseDragged(ofMouseEventArgs& mouse) {} 8 | virtual void mouseReleased(ofMouseEventArgs& mouse) {} 9 | virtual void keyPressed(ofKeyEventArgs& key) {} 10 | virtual void keyReleased(ofKeyEventArgs& key) {} 11 | virtual void draw(ofEventArgs& args) {} 12 | void enableControlEvents() { 13 | ofAddListener(ofEvents().keyPressed, this, &EventWatcher::keyPressed); 14 | ofAddListener(ofEvents().keyReleased, this, &EventWatcher::keyReleased); 15 | ofAddListener(ofEvents().mousePressed, this, &EventWatcher::mousePressed); 16 | ofAddListener(ofEvents().mouseReleased, this, &EventWatcher::mouseReleased); 17 | ofAddListener(ofEvents().mouseMoved, this, &EventWatcher::mouseMoved); 18 | ofAddListener(ofEvents().mouseDragged, this, &EventWatcher::mouseDragged); 19 | } 20 | void disableControlEvents() { 21 | ofRemoveListener(ofEvents().keyPressed, this, &EventWatcher::keyPressed); 22 | ofRemoveListener(ofEvents().keyReleased, this, &EventWatcher::keyReleased); 23 | ofRemoveListener(ofEvents().mousePressed, this, &EventWatcher::mousePressed); 24 | ofRemoveListener(ofEvents().mouseReleased, this, &EventWatcher::mouseReleased); 25 | ofRemoveListener(ofEvents().mouseMoved, this, &EventWatcher::mouseMoved); 26 | ofRemoveListener(ofEvents().mouseDragged, this, &EventWatcher::mouseDragged); 27 | } 28 | void enableDrawEvent() { 29 | ofAddListener(ofEvents().draw, this, &EventWatcher::draw); 30 | } 31 | void disableDrawEvent() { 32 | ofRemoveListener(ofEvents().draw, this, &EventWatcher::draw); 33 | } 34 | }; -------------------------------------------------------------------------------- /SharedCode/DraggablePoints.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "SelectablePoints.h" 4 | 5 | class DraggablePoints : public SelectablePoints { 6 | protected: 7 | ofVec2f mouseStart; 8 | 9 | void cachePositions() { 10 | for(set::iterator itr = selected.begin(); itr != selected.end(); itr++) { 11 | points[*itr].positionStart = points[*itr].position; 12 | } 13 | } 14 | static bool isDirectionKey(int key) { 15 | return 16 | key == OF_KEY_LEFT || 17 | key == OF_KEY_RIGHT || 18 | key == OF_KEY_UP || 19 | key == OF_KEY_DOWN; 20 | } 21 | static ofVec2f getDirectionFromKey(int key) { 22 | switch(key) { 23 | case OF_KEY_LEFT: return ofVec2f(-1, 0); 24 | case OF_KEY_RIGHT: return ofVec2f(+1, 0); 25 | case OF_KEY_UP: return ofVec2f(0, -1); 26 | case OF_KEY_DOWN: return ofVec2f(0, +1); 27 | } 28 | return ofVec2f(0, 0); 29 | } 30 | 31 | public: 32 | virtual void mousePressed(ofMouseEventArgs& mouse) { 33 | SelectablePoints::mousePressed(mouse); 34 | mouseStart = mouse; 35 | cachePositions(); 36 | } 37 | void mouseDragged(ofMouseEventArgs& mouse) { 38 | ofVec2f offset = mouse - mouseStart; 39 | for(set::iterator itr = selected.begin(); itr != selected.end(); itr++) { 40 | points[*itr].position = points[*itr].positionStart + offset; 41 | } 42 | } 43 | void mouseReleased(ofMouseEventArgs& mouse) { 44 | cachePositions(); 45 | } 46 | void keyPressed(ofKeyEventArgs& key) { 47 | SelectablePoints::keyPressed(key); 48 | if(isDirectionKey(key.key)) { 49 | float multiplier = ofGetKeyPressed(OF_KEY_COMMAND) ? .25 : 1; 50 | ofVec2f offset = multiplier * getDirectionFromKey(key.key); 51 | for(set::iterator itr = selected.begin(); itr != selected.end(); itr++) { 52 | points[*itr].position += offset; 53 | } 54 | } 55 | } 56 | }; -------------------------------------------------------------------------------- /SharedCode/SelectablePoints.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "EventWatcher.h" 4 | #include "DraggablePoint.h" 5 | 6 | class SelectablePoints : public EventWatcher { 7 | protected: 8 | vector points; 9 | set selected; 10 | 11 | float clickRadiusSquared; 12 | 13 | public: 14 | SelectablePoints() 15 | :clickRadiusSquared(0) { 16 | } 17 | unsigned int size() { 18 | return points.size(); 19 | } 20 | void add(const ofVec2f& v) { 21 | points.push_back(DraggablePoint()); 22 | points.back().position = v; 23 | } 24 | DraggablePoint& get(int i) { 25 | return points[i]; 26 | } 27 | void clear() { 28 | points.clear(); 29 | selected.clear(); 30 | } 31 | void setClickRadius(float clickRadius) { 32 | this->clickRadiusSquared = clickRadius * clickRadius; 33 | } 34 | void mousePressed(ofMouseEventArgs& mouse) { 35 | bool shift = ofGetKeyPressed(OF_KEY_SHIFT); 36 | bool hitAny = false; 37 | for(int i = 0; i < size(); i++) { 38 | bool hit = points[i].isHit(mouse, clickRadiusSquared); 39 | if(hit && !hitAny) { 40 | if(!points[i].selected) { 41 | points[i].selected = true; 42 | selected.insert(i); 43 | hitAny = true; 44 | } 45 | } else if(!shift) { 46 | points[i].selected = false; 47 | selected.erase(i); 48 | } 49 | } 50 | } 51 | virtual void keyPressed(ofKeyEventArgs& key) { 52 | if(key.key == OF_KEY_DEL || key.key == OF_KEY_BACKSPACE) { 53 | set::iterator itr; 54 | for(itr = selected.begin(); itr != selected.end(); itr++) { 55 | points[*itr].reset(); 56 | } 57 | selected.clear(); 58 | } 59 | } 60 | void draw(ofEventArgs& args) { 61 | ofPushStyle(); 62 | for(int i = 0; i < size(); i++) { 63 | points[i].draw(clickRadiusSquared); 64 | } 65 | ofPopStyle(); 66 | } 67 | }; -------------------------------------------------------------------------------- /RenderTest/ofApp.xcodeproj/project.xcworkspace/xcshareddata/ofApp.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 8BCB71C8-0247-446E-A78E-82845A7CF2DA 9 | IDESourceControlProjectName 10 | ofApp 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 27BF9310-11F0-49A0-82A1-5792995EC236 14 | ssh://github.com/YCAMInterlab/mapamok.git 15 | C5F60473-EC8F-4250-8182-059FDD3C93E2 16 | ssh://github.com/kylemcdonald/openFrameworks.git 17 | 18 | IDESourceControlProjectPath 19 | apps/mapamok/RenderTest/ofApp.xcodeproj/project.xcworkspace 20 | IDESourceControlProjectRelativeInstallPathDictionary 21 | 22 | 27BF9310-11F0-49A0-82A1-5792995EC236 23 | ../../.. 24 | C5F60473-EC8F-4250-8182-059FDD3C93E2 25 | ../../../../.. 26 | 27 | IDESourceControlProjectURL 28 | ssh://github.com/YCAMInterlab/mapamok.git 29 | IDESourceControlProjectVersion 30 | 110 31 | IDESourceControlProjectWCCIdentifier 32 | C5F60473-EC8F-4250-8182-059FDD3C93E2 33 | IDESourceControlProjectWCConfigurations 34 | 35 | 36 | IDESourceControlRepositoryExtensionIdentifierKey 37 | public.vcs.git 38 | IDESourceControlWCCIdentifierKey 39 | 27BF9310-11F0-49A0-82A1-5792995EC236 40 | IDESourceControlWCCName 41 | mapamok 42 | 43 | 44 | IDESourceControlRepositoryExtensionIdentifierKey 45 | public.vcs.git 46 | IDESourceControlWCCIdentifierKey 47 | C5F60473-EC8F-4250-8182-059FDD3C93E2 48 | IDESourceControlWCCName 49 | openFrameworks 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /SharedCode/Mapamok.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxCv.h" 5 | 6 | class Mapamok { 7 | public: 8 | cv::Mat rvec, tvec; 9 | ofMatrix4x4 modelMatrix; 10 | ofxCv::Intrinsics intrinsics; 11 | bool calibrationReady; 12 | 13 | void update(int width, int height, vector& imagePoints, vector& objectPoints) { 14 | int n = imagePoints.size(); 15 | const static int minPoints = 6; 16 | if(n < minPoints) { 17 | calibrationReady = false; 18 | return; 19 | } 20 | vector rvecs, tvecs; 21 | cv::Mat distCoeffs; 22 | vector > objectPointsCv(1); 23 | vector > imagePointsCv(1); 24 | for(int i = 0; i < n; i++) { 25 | objectPointsCv[0].push_back(ofxCv::toCv(objectPoints[i])); 26 | imagePointsCv[0].push_back(ofxCv::toCv(imagePoints[i])); 27 | } 28 | float aov = 80; // decent guess 29 | cv::Size2i imageSize(width, height); 30 | float f = imageSize.width * ofDegToRad(aov); // this might be wrong, but it's optimized out 31 | cv::Point2f c = cv::Point2f(imageSize) * (1. / 2); 32 | cv::Mat1d cameraMatrix = (cv::Mat1d(3, 3) << 33 | f, 0, c.x, 34 | 0, f, c.y, 35 | 0, 0, 1); 36 | int flags = 37 | CV_CALIB_USE_INTRINSIC_GUESS | 38 | // CV_CALIB_FIX_PRINCIPAL_POINT | 39 | CV_CALIB_FIX_ASPECT_RATIO | 40 | CV_CALIB_FIX_K1 | 41 | CV_CALIB_FIX_K2 | 42 | CV_CALIB_FIX_K3;// | 43 | // CV_CALIB_ZERO_TANGENT_DIST); 44 | calibrateCamera(objectPointsCv, imagePointsCv, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags); 45 | rvec = rvecs[0]; 46 | tvec = tvecs[0]; 47 | intrinsics.setup(cameraMatrix, imageSize); 48 | modelMatrix = ofxCv::makeMatrix(rvec, tvec); 49 | calibrationReady = true; 50 | } 51 | void begin() { 52 | if(calibrationReady) { 53 | glPushMatrix(); 54 | glMatrixMode(GL_PROJECTION); 55 | glPushMatrix(); 56 | glMatrixMode(GL_MODELVIEW); 57 | intrinsics.loadProjectionMatrix(.1, 10); 58 | ofxCv::applyMatrix(modelMatrix); 59 | } 60 | } 61 | void end() { 62 | if(calibrationReady) { 63 | glPopMatrix(); 64 | glMatrixMode(GL_PROJECTION); 65 | glPopMatrix(); 66 | glMatrixMode(GL_MODELVIEW); 67 | } 68 | } 69 | }; -------------------------------------------------------------------------------- /mapamok-original/src/ofxProCamToolkit.cpp: -------------------------------------------------------------------------------- 1 | #include "ofxProCamToolkit.h" 2 | 3 | using namespace ofxCv; 4 | using namespace cv; 5 | 6 | GLdouble modelviewMatrix[16], projectionMatrix[16]; 7 | GLint viewport[4]; 8 | void updateProjectionState() { 9 | glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix); 10 | glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix); 11 | glGetIntegerv(GL_VIEWPORT, viewport); 12 | } 13 | 14 | ofVec3f ofWorldToScreen(ofVec3f world) { 15 | GLdouble x, y, z; 16 | gluProject(world.x, world.y, world.z, modelviewMatrix, projectionMatrix, viewport, &x, &y, &z); 17 | ofVec3f screen(x, y, z); 18 | screen.y = ofGetHeight() - screen.y; 19 | return screen; 20 | } 21 | 22 | ofVec3f ofScreenToWorld(ofVec3f screen) { 23 | GLdouble x, y, z; 24 | screen.y = ofGetHeight() - screen.y; 25 | gluUnProject(screen.x, screen.y, screen.z, modelviewMatrix, projectionMatrix, viewport, &x, &y, &z); 26 | ofVec3f world(x, y, z); 27 | return world; 28 | } 29 | 30 | ofMesh getProjectedMesh(const ofMesh& mesh) { 31 | ofMesh projected = mesh; 32 | updateProjectionState(); 33 | for(int i = 0; i < mesh.getNumVertices(); i++) { 34 | ofVec3f cur = ofWorldToScreen(mesh.getVerticesPointer()[i]); 35 | cur.z = 0; 36 | projected.setVertex(i, cur); 37 | } 38 | return projected; 39 | } 40 | 41 | Point2f getClosestPoint(const vector& vertices, float x, float y, int* choice, float* distance) { 42 | float bestDistance = numeric_limits::infinity(); 43 | int bestChoice = 0; 44 | for(int i = 0; i < vertices.size(); i++) { 45 | const Point2f& cur = vertices[i]; 46 | float dx = x - cur.x; 47 | float dy = y - cur.y; 48 | float curDistance = dx * dx + dy * dy; 49 | if(curDistance < bestDistance) { 50 | bestDistance = curDistance; 51 | bestChoice = i; 52 | } 53 | } 54 | if(choice != NULL) { 55 | *choice = bestChoice; 56 | } 57 | if(distance != NULL) { 58 | *distance = sqrtf(bestDistance); 59 | } 60 | return vertices[bestChoice]; 61 | } 62 | 63 | ofVec3f getClosestPointOnMesh(const ofMesh& mesh, float x, float y, int* choice, float* distance) { 64 | float bestDistance = numeric_limits::infinity(); 65 | int bestChoice = 0; 66 | for(int i = 0; i < mesh.getNumVertices(); i++) { 67 | const ofVec3f& cur = mesh.getVerticesPointer()[i]; 68 | float dx = x - cur.x; 69 | float dy = y - cur.y; 70 | float curDistance = dx * dx + dy * dy; 71 | if(curDistance < bestDistance) { 72 | bestDistance = curDistance; 73 | bestChoice = i; 74 | } 75 | } 76 | if(choice != NULL) { 77 | *choice = bestChoice; 78 | } 79 | if(distance != NULL) { 80 | *distance = sqrtf(bestDistance); 81 | } 82 | return mesh.getVerticesPointer()[bestChoice]; 83 | } 84 | -------------------------------------------------------------------------------- /mapamok-original/src/LineArt.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "ofMain.h" 3 | 4 | /* 5 | LineArt renders an ofMesh as a wireframe with occlusion, and optionally only 6 | the depth edges. It happens in vertex space, so one model that partially 7 | occludes another will not create a depth edge. 8 | 9 | To use LineArt, just call LineArt::draw() on your ofMesh. You may optionally 10 | use ofEnableSmoothing() and ofSetLineWidth() with the function. 11 | */ 12 | 13 | namespace LineArt { 14 | inline void drawMesh(ofMesh& mesh, bool useNormals, bool useColors) { 15 | glEnableClientState(GL_VERTEX_ARRAY); 16 | glVertexPointer(3, GL_FLOAT, sizeof(ofVec3f), mesh.getVerticesPointer()); 17 | if(useNormals && mesh.getNumNormals()) { 18 | glEnableClientState(GL_NORMAL_ARRAY); 19 | glNormalPointer(GL_FLOAT, sizeof(ofVec3f), mesh.getNormalsPointer()); 20 | } 21 | if(useColors && mesh.getNumColors()) { 22 | glEnableClientState(GL_COLOR_ARRAY); 23 | glColorPointer(4, GL_FLOAT, sizeof(ofFloatColor), mesh.getColorsPointer()); 24 | } 25 | if(mesh.getNumIndices()){ 26 | glDrawElements(ofGetGLPrimitiveMode(mesh.getMode()), mesh.getNumIndices(), GL_UNSIGNED_INT, mesh.getIndexPointer()); 27 | }else{ 28 | glDrawArrays(ofGetGLPrimitiveMode(mesh.getMode()), 0, mesh.getNumVertices()); 29 | } 30 | glDisableClientState(GL_NORMAL_ARRAY); 31 | glDisableClientState(GL_COLOR_ARRAY); 32 | } 33 | inline void draw(ofMesh& mesh, bool depthEdgesOnly = true, ofColor fill = ofColor(0, 0, 0, 0), ofShader* shader = NULL) { 34 | ofColor stroke = ofGetStyle().color; 35 | 36 | glPushAttrib(GL_ALL_ATTRIB_BITS); 37 | 38 | glEnable(GL_BLEND); 39 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 40 | if(ofGetStyle().smoothing) { 41 | glEnable(GL_LINE_SMOOTH); 42 | } 43 | 44 | glEnable(GL_DEPTH_TEST); 45 | glEnable(GL_CULL_FACE); 46 | glPolygonMode(GL_FRONT, GL_FILL); 47 | glDepthFunc(GL_LESS); 48 | glCullFace(GL_BACK); 49 | ofSetColor(fill); 50 | drawMesh(mesh, true, false); 51 | 52 | glMatrixMode(GL_PROJECTION); 53 | glPushMatrix(); 54 | ofMatrix4x4 mat; 55 | mat(3, 3) = 1.01; 56 | glMultMatrixf(mat.getPtr()); 57 | glMatrixMode(GL_MODELVIEW); 58 | 59 | glLineWidth(ofGetStyle().lineWidth); 60 | glDepthFunc(GL_LEQUAL); 61 | if(depthEdgesOnly) { 62 | glPolygonMode(GL_BACK, GL_LINE); 63 | glCullFace(GL_FRONT); 64 | } else { 65 | glPolygonMode(GL_FRONT, GL_LINE); 66 | glCullFace(GL_BACK); 67 | } 68 | ofSetColor(stroke); 69 | if(shader != NULL) { 70 | shader->begin(); 71 | } 72 | drawMesh(mesh, true, true); 73 | if(shader != NULL) { 74 | shader->end(); 75 | } 76 | glPopAttrib(); 77 | 78 | glMatrixMode(GL_PROJECTION); 79 | glPopMatrix(); 80 | glMatrixMode(GL_MODELVIEW); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /Corners/ofApp.xcodeproj/project.xcworkspace/xcshareddata/ofApp.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 2746E972-55A7-4FAC-AD82-00150184B017 9 | IDESourceControlProjectName 10 | ofApp 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 02816957-DF7D-480B-8B02-017E9FA67EE0 14 | ssh://github.com/kylemcdonald/openFrameworks.git 15 | B893C209-DAB2-459A-9BC4-68F96D9BFA77 16 | ssh://github.com/rezaali/ofxUI.git 17 | CCEF6678-6CE7-4710-9751-FA00A175CDDC 18 | ssh://github.com/YCAMInterlab/mapamok.git 19 | 20 | IDESourceControlProjectPath 21 | apps/mapamok/Draggable/ofApp.xcodeproj/project.xcworkspace 22 | IDESourceControlProjectRelativeInstallPathDictionary 23 | 24 | 02816957-DF7D-480B-8B02-017E9FA67EE0 25 | ../../../../.. 26 | B893C209-DAB2-459A-9BC4-68F96D9BFA77 27 | ../../../../../addons/ofxUI 28 | CCEF6678-6CE7-4710-9751-FA00A175CDDC 29 | ../../.. 30 | 31 | IDESourceControlProjectURL 32 | ssh://github.com/YCAMInterlab/mapamok.git 33 | IDESourceControlProjectVersion 34 | 110 35 | IDESourceControlProjectWCCIdentifier 36 | 02816957-DF7D-480B-8B02-017E9FA67EE0 37 | IDESourceControlProjectWCConfigurations 38 | 39 | 40 | IDESourceControlRepositoryExtensionIdentifierKey 41 | public.vcs.git 42 | IDESourceControlWCCIdentifierKey 43 | CCEF6678-6CE7-4710-9751-FA00A175CDDC 44 | IDESourceControlWCCName 45 | mapamok 46 | 47 | 48 | IDESourceControlRepositoryExtensionIdentifierKey 49 | public.vcs.git 50 | IDESourceControlWCCIdentifierKey 51 | B893C209-DAB2-459A-9BC4-68F96D9BFA77 52 | IDESourceControlWCCName 53 | ofxUI 54 | 55 | 56 | IDESourceControlRepositoryExtensionIdentifierKey 57 | public.vcs.git 58 | IDESourceControlWCCIdentifierKey 59 | 02816957-DF7D-480B-8B02-017E9FA67EE0 60 | IDESourceControlWCCName 61 | openFrameworks 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Draggable/ofApp.xcodeproj/project.xcworkspace/xcshareddata/ofApp.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 2746E972-55A7-4FAC-AD82-00150184B017 9 | IDESourceControlProjectName 10 | ofApp 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 02816957-DF7D-480B-8B02-017E9FA67EE0 14 | ssh://github.com/kylemcdonald/openFrameworks.git 15 | B893C209-DAB2-459A-9BC4-68F96D9BFA77 16 | ssh://github.com/rezaali/ofxUI.git 17 | CCEF6678-6CE7-4710-9751-FA00A175CDDC 18 | ssh://github.com/YCAMInterlab/mapamok.git 19 | 20 | IDESourceControlProjectPath 21 | apps/mapamok/Draggable/ofApp.xcodeproj/project.xcworkspace 22 | IDESourceControlProjectRelativeInstallPathDictionary 23 | 24 | 02816957-DF7D-480B-8B02-017E9FA67EE0 25 | ../../../../.. 26 | B893C209-DAB2-459A-9BC4-68F96D9BFA77 27 | ../../../../../addons/ofxUI 28 | CCEF6678-6CE7-4710-9751-FA00A175CDDC 29 | ../../.. 30 | 31 | IDESourceControlProjectURL 32 | ssh://github.com/YCAMInterlab/mapamok.git 33 | IDESourceControlProjectVersion 34 | 110 35 | IDESourceControlProjectWCCIdentifier 36 | 02816957-DF7D-480B-8B02-017E9FA67EE0 37 | IDESourceControlProjectWCConfigurations 38 | 39 | 40 | IDESourceControlRepositoryExtensionIdentifierKey 41 | public.vcs.git 42 | IDESourceControlWCCIdentifierKey 43 | CCEF6678-6CE7-4710-9751-FA00A175CDDC 44 | IDESourceControlWCCName 45 | mapamok 46 | 47 | 48 | IDESourceControlRepositoryExtensionIdentifierKey 49 | public.vcs.git 50 | IDESourceControlWCCIdentifierKey 51 | B893C209-DAB2-459A-9BC4-68F96D9BFA77 52 | IDESourceControlWCCName 53 | ofxUI 54 | 55 | 56 | IDESourceControlRepositoryExtensionIdentifierKey 57 | public.vcs.git 58 | IDESourceControlWCCIdentifierKey 59 | 02816957-DF7D-480B-8B02-017E9FA67EE0 60 | IDESourceControlWCCName 61 | openFrameworks 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /RenderTest/ofApp.xcodeproj/xcshareddata/xcschemes/ofApp Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 49 | 50 | 56 | 57 | 58 | 59 | 60 | 61 | 67 | 68 | 74 | 75 | 76 | 77 | 79 | 80 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /RenderTest/ofApp.xcodeproj/xcshareddata/xcschemes/ofApp Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 50 | 51 | 57 | 58 | 59 | 60 | 61 | 62 | 68 | 69 | 75 | 76 | 77 | 78 | 80 | 81 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /Corners/ofApp.xcodeproj/xcshareddata/xcschemes/ofApp Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /Draggable/ofApp.xcodeproj/xcshareddata/xcschemes/ofApp Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /Corners/ofApp.xcodeproj/xcshareddata/xcschemes/ofApp Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /Draggable/ofApp.xcodeproj/xcshareddata/xcschemes/ofApp Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /mapamok/mapamok.xcodeproj/xcshareddata/xcschemes/mapamok Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /mapamok-original/mapamok.xcodeproj/xcshareddata/xcschemes/mapamok Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /mapamok/mapamok.xcodeproj/xcshareddata/xcschemes/mapamok Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /mapamok-original/mapamok.xcodeproj/xcshareddata/xcschemes/mapamok Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /mapamok/mapamok.xcodeproj/project.xcworkspace/xcshareddata/mapamok.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | AAF0C8A5-6970-406D-B379-4421781630E8 9 | IDESourceControlProjectName 10 | mapamok 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 251E7897-C8D7-43D7-942C-A55D0752A421 14 | ssh://github.com/kylemcdonald/ofxControlPanel.git 15 | 27BF9310-11F0-49A0-82A1-5792995EC236 16 | ssh://github.com/YCAMInterlab/mapamok.git 17 | B1E43C6E-2094-4F9D-937D-6F8A12774521 18 | ssh://github.com/kylemcdonald/ofxCv.git 19 | C5F60473-EC8F-4250-8182-059FDD3C93E2 20 | ssh://github.com/kylemcdonald/openFrameworks.git 21 | DD8D0B16-DA85-4DF7-9867-5A1F5B4ED4AA 22 | ssh://github.com/rezaali/ofxUI.git 23 | 24 | IDESourceControlProjectPath 25 | apps/mapamok/mapamok/mapamok.xcodeproj/project.xcworkspace 26 | IDESourceControlProjectRelativeInstallPathDictionary 27 | 28 | 251E7897-C8D7-43D7-942C-A55D0752A421 29 | ../../../../../addons/ofxControlPanel 30 | 27BF9310-11F0-49A0-82A1-5792995EC236 31 | ../../.. 32 | B1E43C6E-2094-4F9D-937D-6F8A12774521 33 | ../../../../../addons/ofxCv 34 | C5F60473-EC8F-4250-8182-059FDD3C93E2 35 | ../../../../.. 36 | DD8D0B16-DA85-4DF7-9867-5A1F5B4ED4AA 37 | ../../../../../addons/ofxUI 38 | 39 | IDESourceControlProjectURL 40 | ssh://github.com/YCAMInterlab/mapamok.git 41 | IDESourceControlProjectVersion 42 | 110 43 | IDESourceControlProjectWCCIdentifier 44 | C5F60473-EC8F-4250-8182-059FDD3C93E2 45 | IDESourceControlProjectWCConfigurations 46 | 47 | 48 | IDESourceControlRepositoryExtensionIdentifierKey 49 | public.vcs.git 50 | IDESourceControlWCCIdentifierKey 51 | 27BF9310-11F0-49A0-82A1-5792995EC236 52 | IDESourceControlWCCName 53 | mapamok 54 | 55 | 56 | IDESourceControlRepositoryExtensionIdentifierKey 57 | public.vcs.git 58 | IDESourceControlWCCIdentifierKey 59 | 251E7897-C8D7-43D7-942C-A55D0752A421 60 | IDESourceControlWCCName 61 | ofxControlPanel 62 | 63 | 64 | IDESourceControlRepositoryExtensionIdentifierKey 65 | public.vcs.git 66 | IDESourceControlWCCIdentifierKey 67 | B1E43C6E-2094-4F9D-937D-6F8A12774521 68 | IDESourceControlWCCName 69 | ofxCv 70 | 71 | 72 | IDESourceControlRepositoryExtensionIdentifierKey 73 | public.vcs.git 74 | IDESourceControlWCCIdentifierKey 75 | DD8D0B16-DA85-4DF7-9867-5A1F5B4ED4AA 76 | IDESourceControlWCCName 77 | ofxUI 78 | 79 | 80 | IDESourceControlRepositoryExtensionIdentifierKey 81 | public.vcs.git 82 | IDESourceControlWCCIdentifierKey 83 | C5F60473-EC8F-4250-8182-059FDD3C93E2 84 | IDESourceControlWCCName 85 | openFrameworks 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /mapamok-original/mapamok.xcodeproj/project.xcworkspace/xcshareddata/mapamok.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | AAF0C8A5-6970-406D-B379-4421781630E8 9 | IDESourceControlProjectName 10 | mapamok 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 251E7897-C8D7-43D7-942C-A55D0752A421 14 | ssh://github.com/kylemcdonald/ofxControlPanel.git 15 | 27BF9310-11F0-49A0-82A1-5792995EC236 16 | ssh://github.com/YCAMInterlab/mapamok.git 17 | B1E43C6E-2094-4F9D-937D-6F8A12774521 18 | ssh://github.com/kylemcdonald/ofxCv.git 19 | C5F60473-EC8F-4250-8182-059FDD3C93E2 20 | ssh://github.com/kylemcdonald/openFrameworks.git 21 | DD8D0B16-DA85-4DF7-9867-5A1F5B4ED4AA 22 | ssh://github.com/rezaali/ofxUI.git 23 | 24 | IDESourceControlProjectPath 25 | apps/mapamok/mapamok/mapamok.xcodeproj/project.xcworkspace 26 | IDESourceControlProjectRelativeInstallPathDictionary 27 | 28 | 251E7897-C8D7-43D7-942C-A55D0752A421 29 | ../../../../../addons/ofxControlPanel 30 | 27BF9310-11F0-49A0-82A1-5792995EC236 31 | ../../.. 32 | B1E43C6E-2094-4F9D-937D-6F8A12774521 33 | ../../../../../addons/ofxCv 34 | C5F60473-EC8F-4250-8182-059FDD3C93E2 35 | ../../../../.. 36 | DD8D0B16-DA85-4DF7-9867-5A1F5B4ED4AA 37 | ../../../../../addons/ofxUI 38 | 39 | IDESourceControlProjectURL 40 | ssh://github.com/YCAMInterlab/mapamok.git 41 | IDESourceControlProjectVersion 42 | 110 43 | IDESourceControlProjectWCCIdentifier 44 | C5F60473-EC8F-4250-8182-059FDD3C93E2 45 | IDESourceControlProjectWCConfigurations 46 | 47 | 48 | IDESourceControlRepositoryExtensionIdentifierKey 49 | public.vcs.git 50 | IDESourceControlWCCIdentifierKey 51 | 27BF9310-11F0-49A0-82A1-5792995EC236 52 | IDESourceControlWCCName 53 | mapamok 54 | 55 | 56 | IDESourceControlRepositoryExtensionIdentifierKey 57 | public.vcs.git 58 | IDESourceControlWCCIdentifierKey 59 | 251E7897-C8D7-43D7-942C-A55D0752A421 60 | IDESourceControlWCCName 61 | ofxControlPanel 62 | 63 | 64 | IDESourceControlRepositoryExtensionIdentifierKey 65 | public.vcs.git 66 | IDESourceControlWCCIdentifierKey 67 | B1E43C6E-2094-4F9D-937D-6F8A12774521 68 | IDESourceControlWCCName 69 | ofxCv 70 | 71 | 72 | IDESourceControlRepositoryExtensionIdentifierKey 73 | public.vcs.git 74 | IDESourceControlWCCIdentifierKey 75 | DD8D0B16-DA85-4DF7-9867-5A1F5B4ED4AA 76 | IDESourceControlWCCName 77 | ofxUI 78 | 79 | 80 | IDESourceControlRepositoryExtensionIdentifierKey 81 | public.vcs.git 82 | IDESourceControlWCCIdentifierKey 83 | C5F60473-EC8F-4250-8182-059FDD3C93E2 84 | IDESourceControlWCCName 85 | openFrameworks 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /mapamok/src/main.cpp: -------------------------------------------------------------------------------- 1 | // separate click radius from draw radius 2 | // abstract DraggablePoint into template 3 | // don't move model when dragging points 4 | // only select one point at a time. 5 | 6 | #include "ofMain.h" 7 | #include "ofAppGLFWWindow.h" 8 | #include "ofxAssimpModelLoader.h" 9 | #include "ofxUI.h" 10 | 11 | #include "Mapamok.h" 12 | #include "DraggablePoints.h" 13 | #include "MeshUtils.h" 14 | 15 | class ReferencePoints : public DraggablePoints { 16 | public: 17 | void draw(ofEventArgs& args) { 18 | ofPushStyle(); 19 | ofSetColor(ofColor::red); 20 | DraggablePoints::draw(args); 21 | ofPopStyle(); 22 | } 23 | }; 24 | 25 | class ofApp : public ofBaseApp { 26 | public: 27 | ofxUICanvas* gui; 28 | ofxUIRadio* renderMode; 29 | 30 | Mapamok mapamok; 31 | 32 | const float cornerRatio = .1; 33 | const int cornerMinimum = 3; 34 | const float mergeTolerance = .001; 35 | const float selectionMergeTolerance = .01; 36 | 37 | bool editToggle = true; 38 | bool loadButton = false; 39 | bool saveButton = false; 40 | float backgroundBrightness = 0; 41 | bool useShader = false; 42 | 43 | ofVboMesh mesh, cornerMesh; 44 | ofEasyCam cam; 45 | ReferencePoints referencePoints; 46 | 47 | void setup() { 48 | ofSetWindowTitle("mapamok"); 49 | ofSetVerticalSync(true); 50 | setupGui(); 51 | if(ofFile::doesFileExist("model.dae")) { 52 | loadModel("model.dae"); 53 | } else if(ofFile::doesFileExist("model.3ds")) { 54 | loadModel("model.3ds"); 55 | } 56 | cam.setDistance(1); 57 | cam.setNearClip(.1); 58 | cam.setFarClip(10); 59 | 60 | referencePoints.setClickRadius(8); 61 | referencePoints.enableControlEvents(); 62 | // referencePoints.enableDrawEvent(); 63 | } 64 | enum { 65 | RENDER_MODE_FACES = 0, 66 | RENDER_MODE_OUTLINE, 67 | RENDER_MODE_WIREFRAME_FULL, 68 | RENDER_MODE_WIREFRAME_OCCLUDED 69 | }; 70 | void setupGui() { 71 | gui = new ofxUICanvas(); 72 | 73 | ofColor 74 | cb(64, 192), 75 | co(192, 192), 76 | coh(128, 192), 77 | cf(240, 255), 78 | cfh(128, 255), 79 | cp(96, 192), 80 | cpo(255, 192); 81 | gui->setUIColors(cb, co, coh, cf, cfh, cp, cpo); 82 | 83 | gui->addSpacer(); 84 | gui->addLabel("Calibration"); 85 | gui->addToggle("Edit", &editToggle); 86 | gui->addButton("Load", &loadButton); 87 | gui->addButton("Save", &saveButton); 88 | 89 | gui->addSpacer(); 90 | gui->addLabel("Render"); 91 | vector renderModes; 92 | renderModes.push_back("Faces"); 93 | renderModes.push_back("Depth Edges"); 94 | renderModes.push_back("Full wireframe"); 95 | renderModes.push_back("Occluded wireframe"); 96 | renderMode = gui->addRadio("Render", renderModes, OFX_UI_ORIENTATION_VERTICAL, OFX_UI_FONT_MEDIUM); 97 | renderMode->activateToggle(renderModes[0]); 98 | 99 | gui->addSpacer(); 100 | gui->addMinimalSlider("Background", 0, 255, &backgroundBrightness); 101 | gui->addToggle("Use shader", &useShader); 102 | 103 | gui->autoSizeToFitWidgets(); 104 | } 105 | int getSelection(ofxUIRadio* radio) { 106 | vector toggles = radio->getToggles(); 107 | for(int i = 0; i < toggles.size(); i++) { 108 | if(toggles[i]->getValue()) { 109 | return i; 110 | } 111 | } 112 | return -1; 113 | } 114 | void render() { 115 | int renderModeSelection = getSelection(renderMode); 116 | if(renderModeSelection == RENDER_MODE_FACES) { 117 | // ofEnableDepthTest(); 118 | ofSetColor(255, 128); 119 | mesh.drawFaces(); 120 | // ofDisableDepthTest(); 121 | } else if(renderModeSelection == RENDER_MODE_WIREFRAME_FULL) { 122 | mesh.drawWireframe(); 123 | } else if(renderModeSelection == RENDER_MODE_OUTLINE || renderModeSelection == RENDER_MODE_WIREFRAME_OCCLUDED) { 124 | prepareRender(true, true, false); 125 | glEnable(GL_POLYGON_OFFSET_FILL); 126 | float lineWidth = ofGetStyle().lineWidth; 127 | if(renderModeSelection == RENDER_MODE_OUTLINE) { 128 | glPolygonOffset(-lineWidth, -lineWidth); 129 | } else if(renderModeSelection == RENDER_MODE_WIREFRAME_OCCLUDED) { 130 | glPolygonOffset(+lineWidth, +lineWidth); 131 | } 132 | glColorMask(false, false, false, false); 133 | mesh.drawFaces(); 134 | glColorMask(true, true, true, true); 135 | glDisable(GL_POLYGON_OFFSET_FILL); 136 | mesh.drawWireframe(); 137 | prepareRender(false, false, false); 138 | } 139 | } 140 | void drawEdit() { 141 | cam.begin(); 142 | ofPushStyle(); 143 | ofSetColor(255, 128); 144 | mesh.drawFaces(); 145 | ofPopStyle(); 146 | cam.end(); 147 | 148 | ofMesh cornerMeshImage = cornerMesh; 149 | // should only update this if necessary 150 | project(cornerMeshImage, cam, ofGetWindowRect()); 151 | 152 | // if this is a new mesh, create the points 153 | // should use a "dirty" flag instead allowing us to reset manually 154 | if(cornerMesh.getNumVertices() != referencePoints.size()) { 155 | referencePoints.clear(); 156 | for(int i = 0; i < cornerMeshImage.getNumVertices(); i++) { 157 | referencePoints.add(ofVec2f(cornerMeshImage.getVertex(i))); 158 | } 159 | } 160 | 161 | // if the calibration is ready, use the calibration to find the corner positions 162 | 163 | // otherwise, update the points 164 | for(int i = 0; i < referencePoints.size(); i++) { 165 | DraggablePoint& cur = referencePoints.get(i); 166 | if(!cur.hit) { 167 | cur.position = cornerMeshImage.getVertex(i); 168 | } else { 169 | ofLine(cur.position, cornerMeshImage.getVertex(i)); 170 | } 171 | } 172 | 173 | // should be a better way to do this 174 | ofEventArgs args; 175 | referencePoints.draw(args); 176 | 177 | // calculating the 3d mesh 178 | vector imagePoints; 179 | vector objectPoints; 180 | for(int i = 0; i < referencePoints.size(); i++) { 181 | DraggablePoint& cur = referencePoints.get(i); 182 | if(cur.hit) { 183 | imagePoints.push_back(cur.position); 184 | objectPoints.push_back(cornerMesh.getVertex(i)); 185 | } 186 | } 187 | 188 | // should only calculate this when the points are updated 189 | mapamok.update(ofGetWidth(), ofGetHeight(), imagePoints, objectPoints); 190 | } 191 | void draw() { 192 | ofBackground(backgroundBrightness); 193 | ofSetColor(255); 194 | 195 | if(editToggle) { 196 | drawEdit(); 197 | } 198 | 199 | if(mapamok.calibrationReady) { 200 | mapamok.begin(); 201 | if(editToggle) { 202 | ofSetColor(255, 128); 203 | } else { 204 | ofSetColor(255); 205 | } 206 | mesh.draw(); 207 | mapamok.end(); 208 | } 209 | 210 | ofDrawBitmapString(ofToString((int) ofGetFrameRate()), 10, ofGetHeight() - 40); 211 | } 212 | void loadModel(string filename) { 213 | ofxAssimpModelLoader model; 214 | model.loadModel(filename); 215 | vector meshes = getMeshes(model); 216 | 217 | // join all the meshes 218 | mesh = ofVboMesh(); 219 | mesh = joinMeshes(meshes); 220 | ofVec3f cornerMin, cornerMax; 221 | getBoundingBox(mesh, cornerMin, cornerMax); 222 | centerAndNormalize(mesh, cornerMin, cornerMax); 223 | 224 | // normalize submeshes before any further processing 225 | for(int i = 0; i < meshes.size(); i++) { 226 | centerAndNormalize(meshes[i], cornerMin, cornerMax); 227 | } 228 | 229 | // merge 230 | // another good metric for finding corners is if there is a single vertex touching 231 | // the wall of the bounding box, that point is a good control point 232 | cornerMesh = ofVboMesh(); 233 | for(int i = 0; i < meshes.size(); i++) { 234 | ofMesh mergedMesh = mergeNearbyVertices(meshes[i], mergeTolerance); 235 | vector cornerIndices = getRankedCorners(mergedMesh); 236 | int n = cornerIndices.size() * cornerRatio; 237 | n = MIN(MAX(n, cornerMinimum), cornerIndices.size()); 238 | for(int j = 0; j < n; j++) { 239 | int index = cornerIndices[j]; 240 | const ofVec3f& corner = mergedMesh.getVertices()[index]; 241 | cornerMesh.addVertex(corner); 242 | } 243 | } 244 | cornerMesh = mergeNearbyVertices(cornerMesh, selectionMergeTolerance); 245 | cornerMesh.setMode(OF_PRIMITIVE_POINTS); 246 | } 247 | void dragEvent(ofDragInfo dragInfo) { 248 | if(dragInfo.files.size() == 1) { 249 | string filename = dragInfo.files[0]; 250 | loadModel(filename); 251 | } 252 | } 253 | void keyPressed(int key) { 254 | if(key == 'f') { 255 | ofToggleFullscreen(); 256 | } 257 | if(key == '\t') { 258 | gui->toggleVisible(); 259 | } 260 | } 261 | }; 262 | 263 | int main() { 264 | ofAppGLFWWindow window; 265 | ofSetupOpenGL(&window, 1280, 720, OF_WINDOW); 266 | ofRunApp(new ofApp()); 267 | } 268 | -------------------------------------------------------------------------------- /SharedCode/MeshUtils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class Edge { 4 | public: 5 | unsigned int i0, i1; 6 | Edge(unsigned int i0, unsigned int i1) 7 | :i0(i0) 8 | ,i1(i1) { 9 | } 10 | unsigned int getFirst() const { 11 | return MIN(i0, i1); 12 | } 13 | unsigned int getSecond() const { 14 | return MAX(i0, i1); 15 | } 16 | bool operator<(const Edge& edge) const { 17 | int a0 = getFirst(); 18 | int b0 = edge.getFirst(); 19 | if(a0 == b0) { 20 | int a1 = getSecond(); 21 | int b1 = edge.getSecond(); 22 | return a1 < b1; 23 | } 24 | return a0 < b0; 25 | } 26 | }; 27 | 28 | class Face { 29 | public: 30 | unsigned int i0, i1, i2; 31 | Face(unsigned int i0, unsigned int i1, unsigned int i2) 32 | :i0(i0) 33 | ,i1(i1) 34 | ,i2(i2) { 35 | } 36 | Edge getEdge(unsigned int i) { 37 | switch(i) { 38 | case 0: return Edge(i0, i1); 39 | case 1: return Edge(i1, i2); 40 | case 2: return Edge(i2, i0); 41 | } 42 | } 43 | unsigned int getFirst() const { 44 | if(i0 < i1 && i0 < i2) return i0; 45 | if(i1 < i0 && i1 < i2) return i1; 46 | else return i2; 47 | } 48 | unsigned int getSecond() const { 49 | if(i0 < i1 && i0 > i2) return i0; 50 | if(i0 > i1 && i0 < i2) return i0; 51 | if(i1 < i0 && i1 > i2) return i1; 52 | if(i1 > i0 && i1 < i2) return i1; 53 | else return i2; 54 | } 55 | unsigned int getThird() const { 56 | if(i0 > i1 && i0 > i2) return i0; 57 | if(i1 > i0 && i1 > i2) return i1; 58 | else return i2; 59 | } 60 | bool operator<(const Face& face) const { 61 | // might be faster by just sorting vertices before comparison 62 | int a0 = getFirst(); 63 | int b0 = face.getFirst(); 64 | if(a0 == b0) { 65 | int a1 = getSecond(); 66 | int b1 = face.getSecond(); 67 | if(a1 == b1) { 68 | int a2 = getThird(); 69 | int b2 = face.getThird(); 70 | return a2 < b2; 71 | } 72 | return a1 < b1; 73 | } 74 | return a0 < b0; 75 | } 76 | }; 77 | 78 | ofVec3f getVector(const ofMesh& mesh, int from, int to) { 79 | return mesh.getVertex(to) - mesh.getVertex(from); 80 | } 81 | 82 | ofVec3f getEdgeVector(const ofMesh& mesh, const Edge& edge) { 83 | return getVector(mesh, edge.i0, edge.i1); 84 | } 85 | 86 | float getAngle(const ofMesh& mesh, int a, int center, int b) { 87 | ofVec3f v0 = getVector(mesh, center, a); 88 | ofVec3f v1 = getVector(mesh, center, b); 89 | if(a == center || a == b || center == b) { 90 | return 0; // avoid NaN 91 | } 92 | return v0.angle(v1); 93 | } 94 | 95 | float getMaximumAngle(const ofMesh& mesh, const vector& edges) { 96 | float maximumAngle = 0; 97 | for(int i = 0; i < edges.size(); i++) { 98 | int i0 = edges[i].i0, i1 = edges[i].i1; 99 | ofVec3f a = getVector(mesh, i0, i1); 100 | for(int j = 0; j < edges.size(); j++) { 101 | if(i != j) { 102 | int j0 = edges[j].i0, j1 = edges[j].i1; 103 | ofVec3f b; 104 | if(i0 == j0) { 105 | b = getVector(mesh, j0, j1); 106 | } else { 107 | b = getVector(mesh, j1, j0); 108 | } 109 | float curAngle = a.angle(b); 110 | if(curAngle > maximumAngle) { 111 | maximumAngle = curAngle; 112 | } 113 | } 114 | } 115 | } 116 | return maximumAngle; 117 | } 118 | 119 | vector getAllEdges(const ofMesh& mesh) { 120 | set uniqueEdges; 121 | int n = mesh.getNumIndices(); 122 | for(int i = 0; i < n;) { 123 | int i0 = mesh.getIndex(i++); 124 | int i1 = mesh.getIndex(i++); 125 | int i2 = mesh.getIndex(i++); 126 | uniqueEdges.insert(Edge(i0, i1)); 127 | uniqueEdges.insert(Edge(i1, i2)); 128 | uniqueEdges.insert(Edge(i2, i0)); 129 | } 130 | vector edges; 131 | edges.assign(uniqueEdges.begin(), uniqueEdges.end()); 132 | return edges; 133 | } 134 | 135 | vector< vector > getAllEdgesForVertices(const ofMesh& mesh) { 136 | vector allEdges = getAllEdges(mesh); 137 | vector< vector > edgesForVertices(mesh.getNumVertices()); 138 | for(int i = 0; i < allEdges.size(); i++) { 139 | const Edge& curEdge = allEdges[i]; 140 | edgesForVertices[curEdge.i0].push_back(curEdge); 141 | edgesForVertices[curEdge.i1].push_back(curEdge); 142 | } 143 | return edgesForVertices; 144 | } 145 | 146 | vector getEdgesFromVertex(const ofMesh& mesh, unsigned int index) { 147 | set uniqueEdges; 148 | int n = mesh.getNumIndices(); 149 | for(int i = 0; i < n;) { 150 | int i0 = mesh.getIndex(i++); 151 | int i1 = mesh.getIndex(i++); 152 | int i2 = mesh.getIndex(i++); 153 | if(i0 == index) { 154 | uniqueEdges.insert(Edge(i0, i1)); 155 | uniqueEdges.insert(Edge(i0, i2)); 156 | } 157 | if(i1 == index) { 158 | uniqueEdges.insert(Edge(i1, i0)); 159 | uniqueEdges.insert(Edge(i1, i2)); 160 | } 161 | if(i2 == index) { 162 | uniqueEdges.insert(Edge(i2, i0)); 163 | uniqueEdges.insert(Edge(i2, i1)); 164 | } 165 | } 166 | vector edges; 167 | edges.assign(uniqueEdges.begin(), uniqueEdges.end()); 168 | return edges; 169 | } 170 | 171 | vector getAllFaces(const ofMesh& mesh) { 172 | vector faces; 173 | int n = mesh.getNumIndices(); 174 | for(int i = 0; i < n;) { 175 | int i0 = mesh.getIndex(i++); 176 | int i1 = mesh.getIndex(i++); 177 | int i2 = mesh.getIndex(i++); 178 | // ignore faces that are just lines 179 | if(i0 != i1 && i0 != i2 && i1 != i2) { 180 | faces.push_back(Face(i0, i1, i2)); 181 | } 182 | } 183 | return faces; 184 | } 185 | 186 | template 187 | vector getSortedIndices(const vector& v) { 188 | int n = v.size(); 189 | vector< pair > sorted(n); 190 | for(unsigned int i = 0; i < n; i++) { 191 | sorted[i].first = v[i]; 192 | sorted[i].second = i; 193 | if(v[i] != v[i]) { 194 | ofLogError() << "potential memory corruption from sorting NaN"; 195 | } 196 | } 197 | ofSort(sorted); 198 | vector indices(n); 199 | for(unsigned int i = 0; i < n; i++) { 200 | indices[i] = sorted[i].second; 201 | } 202 | return indices; 203 | } 204 | 205 | vector getAngleSums(const ofMesh& mesh) { 206 | vector angleSums(mesh.getNumVertices()); 207 | vector faces = getAllFaces(mesh); 208 | for(int i = 0; i < faces.size(); i++) { 209 | Face& face = faces[i]; 210 | angleSums[face.i0] += getAngle(mesh, face.i2, face.i0, face.i1); 211 | angleSums[face.i1] += getAngle(mesh, face.i0, face.i1, face.i2); 212 | angleSums[face.i2] += getAngle(mesh, face.i1, face.i2, face.i0); 213 | } 214 | return angleSums; 215 | } 216 | 217 | vector getRankedCorners(const ofMesh& mesh) { 218 | vector angleSums = getAngleSums(mesh); 219 | for(int i = 0; i < angleSums.size(); i++) { 220 | // angleSums should be 360 for flat surfaces 221 | // clear corners / end points have less than 360 222 | // wrinkly saddles have more than 360 223 | // this transforms both to being 0 for flat 224 | // and negative / small for non-flat 225 | float before = angleSums[i]; 226 | angleSums[i] = -fabsf(angleSums[i] - 360); 227 | } 228 | return getSortedIndices(angleSums); 229 | } 230 | 231 | int findNearestVertex(const vector& vertices, const ofVec3f& base) { 232 | int nearestIndex = 0; 233 | float nearestDistance = 0; 234 | int n = vertices.size(); 235 | for(int i = 0; i < n; i++) { 236 | float distance = base.squareDistance(vertices[i]); 237 | if(i == 0 || distance < nearestDistance) { 238 | nearestDistance = distance; 239 | nearestIndex = i; 240 | } 241 | } 242 | return nearestIndex; 243 | } 244 | 245 | class PercentStatus { 246 | public: 247 | int i, total, ticks; 248 | int lastReport; 249 | PercentStatus(int total, int ticks = 10) 250 | :total(total) 251 | ,ticks(ticks) 252 | ,lastReport(0) { 253 | } 254 | bool update(int i) { 255 | this->i = i; 256 | if(i > lastReport + (total / ticks)) { 257 | lastReport = i; 258 | return true; 259 | } 260 | return false; 261 | } 262 | void updateAndLog(int i) { 263 | if(update(i)) { 264 | ofLog() << getPercentage() << "%"; 265 | } 266 | } 267 | int getPercentage() { 268 | return (100 * i) / total; 269 | } 270 | }; 271 | 272 | // assumes mesh is indexed 273 | // drops all normals, colors, and tex coords 274 | ofMesh mergeNearbyVertices(const ofMesh& mesh, float tolerance = 0) { 275 | if(tolerance == 0) { 276 | return mesh; 277 | } 278 | float squareTolerance = tolerance * tolerance; 279 | ofMesh mergedMesh; 280 | int n = mesh.getNumVertices(); 281 | vector remappedIndices; 282 | for(int i = 0; i < n; i++) { 283 | const ofVec3f& cur = mesh.getVertices()[i]; 284 | if(mergedMesh.getNumVertices() > 0) { 285 | int nearestIndex = findNearestVertex(mergedMesh.getVertices(), cur); 286 | const ofVec3f& nearestVertex = mergedMesh.getVertices()[nearestIndex]; 287 | if(cur.squareDistance(nearestVertex) < squareTolerance) { 288 | remappedIndices.push_back(nearestIndex); 289 | } else { 290 | remappedIndices.push_back(mergedMesh.getNumVertices()); 291 | mergedMesh.addVertex(cur); 292 | } 293 | } else { 294 | remappedIndices.push_back(0); 295 | mergedMesh.addVertex(cur); 296 | } 297 | } 298 | n = mesh.getNumIndices(); 299 | for(int i = 0; i < n; i++) { 300 | mergedMesh.addIndex(remappedIndices[mesh.getIndex(i)]); 301 | } 302 | return mergedMesh; 303 | } 304 | 305 | void getBoundingBox(const ofMesh& mesh, ofVec3f& cornerMin, ofVec3f& cornerMax) { 306 | const vector& vertices = mesh.getVertices(); 307 | if(vertices.size() > 0) { 308 | cornerMin = vertices[0]; 309 | cornerMax = vertices[0]; 310 | } 311 | for(int i = 0; i < vertices.size(); i++) { 312 | cornerMin.x = MIN(cornerMin.x, vertices[i].x); 313 | cornerMin.y = MIN(cornerMin.y, vertices[i].y); 314 | cornerMin.z = MIN(cornerMin.z, vertices[i].z); 315 | cornerMax.x = MAX(cornerMax.x, vertices[i].x); 316 | cornerMax.y = MAX(cornerMax.y, vertices[i].y); 317 | cornerMax.z = MAX(cornerMax.z, vertices[i].z); 318 | } 319 | } 320 | 321 | void centerAndNormalize(ofMesh& mesh, ofVec3f cornerMin, ofVec3f cornerMax) { 322 | ofVec3f translate = -(cornerMax + cornerMin) / 2; 323 | ofVec3f range = (cornerMax - cornerMin); 324 | float maxRange = 0; 325 | maxRange = MAX(maxRange, range.x); 326 | maxRange = MAX(maxRange, range.y); 327 | maxRange = MAX(maxRange, range.z); 328 | float scale = 1 / maxRange; 329 | vector& vertices = mesh.getVertices(); 330 | for(int i = 0; i < vertices.size(); i++) { 331 | vertices[i] += translate; 332 | vertices[i] *= scale; 333 | } 334 | } 335 | 336 | void centerAndNormalize(ofMesh& mesh) { 337 | ofVec3f cornerMin, cornerMax; 338 | getBoundingBox(mesh, cornerMin, cornerMax); 339 | centerAndNormalize(mesh, cornerMin, cornerMax); 340 | } 341 | 342 | ofVec3f randomVec3f(float range) { 343 | return ofVec3f(ofRandom(-range, range), ofRandom(-range, range), ofRandom(-range, range)); 344 | } 345 | 346 | void addJitter(ofMesh& mesh, float range) { 347 | vector& vertices = mesh.getVertices(); 348 | int n = vertices.size(); 349 | for(int i = 0; i < n; i++) { 350 | vertices[i] += randomVec3f(range); 351 | } 352 | } 353 | 354 | void project(ofMesh& mesh, const ofCamera& camera, ofRectangle viewport) { 355 | ofMatrix4x4 modelViewProjectionMatrix = camera.getModelViewProjectionMatrix(viewport); 356 | viewport.width /= 2; 357 | viewport.height /= 2; 358 | for(int i = 0; i < mesh.getNumVertices(); i++) { 359 | ofVec3f& cur = mesh.getVerticesPointer()[i]; 360 | ofVec3f CameraXYZ = cur * modelViewProjectionMatrix; 361 | cur.x = (CameraXYZ.x + 1.0f) * viewport.width + viewport.x; 362 | cur.y = (1.0f - CameraXYZ.y) * viewport.height + viewport.y; 363 | cur.z = CameraXYZ.z / 2; 364 | } 365 | } 366 | 367 | void drawNormals(const ofMesh& mesh, float normalLength) { 368 | for(int i = 0; i < mesh.getNumNormals(); i++) { 369 | const ofVec3f& start = mesh.getVertices()[i]; 370 | const ofVec3f& normal = mesh.getNormals()[i]; 371 | ofVec3f end = start + normal * normalLength; 372 | ofLine(start, end); 373 | } 374 | } 375 | 376 | vector getMeshes(ofxAssimpModelLoader& model) { 377 | vector meshes; 378 | for(int i = 0; i < model.getNumMeshes(); i++) { 379 | meshes.push_back(model.getMesh(i)); 380 | } 381 | return meshes; 382 | } 383 | 384 | ofMesh joinMeshes(vector& meshes) { 385 | ofMesh mesh; 386 | for(int i = 0; i < meshes.size(); i++) { 387 | mesh.append(meshes[i]); 388 | } 389 | return mesh; 390 | } 391 | 392 | void prepareRender(bool useDepthTesting, bool useBackFaceCulling, bool useFrontFaceCulling) { 393 | ofSetDepthTest(useDepthTesting); 394 | if(useBackFaceCulling || useFrontFaceCulling) { 395 | glEnable(GL_CULL_FACE); 396 | if(useBackFaceCulling && useFrontFaceCulling) { 397 | glCullFace(GL_FRONT_AND_BACK); 398 | } else if(useBackFaceCulling) { 399 | glCullFace(GL_BACK); 400 | } else if(useFrontFaceCulling) { 401 | glCullFace(GL_FRONT); 402 | } 403 | } else { 404 | glDisable(GL_CULL_FACE); 405 | } 406 | } 407 | 408 | 409 | ofVec3f getNormal(const ofVec3f& v1, const ofVec3f& v2, const ofVec3f& v3) { 410 | ofVec3f a = v1 - v2; 411 | ofVec3f b = v3 - v2; 412 | ofVec3f normal = b.cross(a); 413 | normal.normalize(); 414 | return normal; 415 | } 416 | 417 | ofMesh convertFromIndices(const ofMesh& mesh) { 418 | ofMesh result; 419 | // have to do a const_cast because ofMesh::get*() is not const correct 420 | ofMesh& cmesh = const_cast(mesh); 421 | int vertices = mesh.getNumVertices(); 422 | int colors = mesh.getNumColors(); 423 | int normals = mesh.getNumNormals(); 424 | int texcoords = mesh.getNumTexCoords(); 425 | int indices = mesh.getNumIndices(); 426 | for(int i = 0; i < indices; i++) { 427 | int cur = cmesh.getIndex(i); 428 | if(vertices > 0) { 429 | result.addVertex(cmesh.getVertex(cur)); 430 | } 431 | if(colors > 0) { 432 | result.addColor(cmesh.getColor(cur)); 433 | } 434 | if(normals > 0) { 435 | result.addNormal(cmesh.getNormal(cur)); 436 | } 437 | if(texcoords > 0) { 438 | result.addTexCoord(cmesh.getTexCoord(cur)); 439 | } 440 | } 441 | return result; 442 | } 443 | 444 | void buildNormalsFaces(ofMesh& mesh) { 445 | for(int i = 0; i < mesh.getNumVertices(); i += 3) { 446 | int i0 = i + 0, i1 = i + 1, i2 = i + 2; 447 | ofVec3f normal = getNormal(mesh.getVertices()[i0], mesh.getVertices()[i1], mesh.getVertices()[i2]); 448 | for(int j = 0; j < 3; j++) { 449 | mesh.addNormal(normal); 450 | } 451 | } 452 | } 453 | 454 | // assumes indexed vertices and triangles 455 | void buildNormalsSingle(ofMesh& mesh) { 456 | vector& indices = mesh.getIndices(); 457 | vector ready(mesh.getNumVertices()); 458 | vector normals(mesh.getNumVertices()); 459 | for(int i = 0; i < indices.size(); i += 3) { 460 | int i0 = indices[i + 0], i1 = indices[i + 1], i2 = indices[i + 2]; 461 | ofVec3f normal = getNormal(mesh.getVertices()[i0], mesh.getVertices()[i1], mesh.getVertices()[i2]); 462 | if(!ready[i0]) { 463 | normals[i0] = normal; 464 | ready[i0] = true; 465 | } 466 | if(!ready[i1]) { 467 | normals[i1] = normal; 468 | ready[i1] = true; 469 | } 470 | if(!ready[i2]) { 471 | normals[i2] = normal; 472 | ready[i2] = true; 473 | } 474 | } 475 | mesh.addNormals(normals); 476 | } 477 | 478 | // assumes indexed vertices and triangles 479 | void buildNormalsAverage(ofMesh& mesh) { 480 | vector& indices = mesh.getIndices(); 481 | vector normals(mesh.getNumVertices()); 482 | for(int i = 0; i < indices.size(); i += 3) { 483 | int i0 = indices[i + 0], i1 = indices[i + 1], i2 = indices[i + 2]; 484 | ofVec3f normal = getNormal(mesh.getVertices()[i0], mesh.getVertices()[i1], mesh.getVertices()[i2]); 485 | normals[i0] += normal; 486 | normals[i1] += normal; 487 | normals[i2] += normal; 488 | } 489 | for(int i = 0; i < normals.size(); i++) { 490 | normals[i].normalize(); 491 | } 492 | mesh.addNormals(normals); 493 | } 494 | 495 | // need to check that this actually works 496 | class IndexedPoint { 497 | public: 498 | const ofVec3f* vertex; 499 | const ofFloatColor* color; 500 | const ofVec3f* normal; 501 | const ofVec2f* texCoord; 502 | 503 | IndexedPoint(const ofMesh& mesh, int i) { 504 | vertex = mesh.getNumVertices() > 0 ? &(mesh.getVerticesPointer()[i]) : NULL; 505 | color = mesh.getNumColors() > 0 ? &(mesh.getColorsPointer()[i]) : NULL; 506 | normal = mesh.getNumNormals() > 0 ? &(mesh.getNormalsPointer()[i]) : NULL; 507 | texCoord = mesh.getNumTexCoords() > 0 ? &(mesh.getTexCoordsPointer()[i]) : NULL; 508 | } 509 | // used for map operator[] 510 | bool operator<(const IndexedPoint& point) const { 511 | if(vertex->x < point.vertex->x) { 512 | return false; 513 | } else if(vertex->x > point.vertex->x) { 514 | return true; 515 | } else { 516 | if(vertex->y < point.vertex->y) { 517 | return false; 518 | } else if(vertex->y > point.vertex->y) { 519 | return true; 520 | } else { 521 | return false; // equal 522 | } 523 | } 524 | } 525 | }; 526 | 527 | ofMesh convertToIndices(ofMesh& mesh) { 528 | ofMesh result; 529 | 530 | int vertices = mesh.getNumVertices(); // ofVec3f 531 | int colors = mesh.getNumColors(); // ofFloatColor 532 | int normals = mesh.getNumNormals(); // ofVec3f 533 | int texcoords = mesh.getNumTexCoords(); // ofVec2f 534 | 535 | bool usingColors = colors > 0; 536 | bool usingNormals = normals > 0; 537 | bool usingTexcoords = texcoords > 0; 538 | 539 | map indexedMap; 540 | vector > shared; 541 | int index = 0; 542 | for(int i = 0; i < vertices; i++) { 543 | IndexedPoint cur(mesh, i); 544 | if(indexedMap.find(cur) == indexedMap.end()) { 545 | indexedMap[cur] = index; 546 | shared.push_back(vector()); 547 | index++; 548 | } 549 | int curIndex = indexedMap[cur]; 550 | result.addIndex(curIndex); 551 | shared[curIndex].push_back(i); 552 | } 553 | 554 | for(int i = 0; i < shared.size(); i++) { 555 | vector& cur = shared[i]; 556 | 557 | ofVec3f vertex = mesh.getVerticesPointer()[cur[0]]; 558 | ofFloatColor color(0, 0, 0, 0); 559 | ofVec3f normal(0, 0, 0); 560 | ofVec2f texCoord(0, 0); 561 | float normalize = 1. / cur.size(); 562 | 563 | for(int j = 0; j < cur.size(); j++) { 564 | if(usingColors) { 565 | color += mesh.getColorsPointer()[cur[j]] * normalize; 566 | } 567 | if(usingNormals) { 568 | normal += mesh.getNormalsPointer()[cur[j]] * normalize; 569 | } 570 | if(usingTexcoords) { 571 | texCoord += mesh.getTexCoordsPointer()[cur[j]] * normalize; 572 | } 573 | } 574 | 575 | result.addVertex(vertex); 576 | if(usingColors) { 577 | result.addColor(color); 578 | } 579 | if(usingNormals) { 580 | result.addNormal(normal); 581 | } 582 | if(usingTexcoords) { 583 | result.addTexCoord(texCoord); 584 | } 585 | } 586 | 587 | return result; 588 | } 589 | -------------------------------------------------------------------------------- /mapamok-original/src/ofApp.cpp: -------------------------------------------------------------------------------- 1 | #include "ofApp.h" 2 | 3 | using namespace ofxCv; 4 | using namespace cv; 5 | 6 | void ofApp::setb(string name, bool value) { 7 | panel.setValueB(name, value); 8 | } 9 | void ofApp::seti(string name, int value) { 10 | panel.setValueI(name, value); 11 | } 12 | void ofApp::setf(string name, float value) { 13 | panel.setValueF(name, value); 14 | } 15 | bool ofApp::getb(string name) { 16 | return panel.getValueB(name); 17 | } 18 | int ofApp::geti(string name) { 19 | return panel.getValueI(name); 20 | } 21 | float ofApp::getf(string name) { 22 | return panel.getValueF(name); 23 | } 24 | 25 | void ofApp::setup() { 26 | ofSetDrawBitmapMode(OF_BITMAPMODE_MODEL_BILLBOARD); 27 | ofSetVerticalSync(true); 28 | calibrationReady = false; 29 | setupMesh(); 30 | setupControlPanel(); 31 | } 32 | 33 | void ofApp::update() { 34 | ofSetWindowTitle("mapamok"); 35 | if(getb("randomLighting")) { 36 | setf("lightX", ofSignedNoise(ofGetElapsedTimef(), 1, 1) * 1000); 37 | setf("lightY", ofSignedNoise(1, ofGetElapsedTimef(), 1) * 1000); 38 | setf("lightZ", ofSignedNoise(1, 1, ofGetElapsedTimef()) * 1000); 39 | } 40 | light.setPosition(getf("lightX"), getf("lightY"), getf("lightZ")); 41 | 42 | if(getb("selectionMode")) { 43 | cam.enableMouseInput(); 44 | } else { 45 | updateRenderMode(); 46 | cam.disableMouseInput(); 47 | } 48 | } 49 | 50 | void enableFog(float nearFog, float farFog) { 51 | glEnable(GL_FOG); 52 | glFogi(GL_FOG_MODE, GL_LINEAR); 53 | GLfloat fogColor[4]= {0, 0, 0, 1}; 54 | glFogfv(GL_FOG_COLOR, fogColor); 55 | glHint(GL_FOG_HINT, GL_FASTEST); 56 | glFogf(GL_FOG_START, nearFog); 57 | glFogf(GL_FOG_END, farFog); 58 | } 59 | 60 | void disableFog() { 61 | glDisable(GL_FOG); 62 | } 63 | 64 | void ofApp::draw() { 65 | ofBackground(geti("backgroundColor")); 66 | if(getb("loadCalibration")) { 67 | loadCalibration(); 68 | setb("loadCalibration", false); 69 | } 70 | if(getb("saveCalibration")) { 71 | saveCalibration(); 72 | setb("saveCalibration", false); 73 | } 74 | if(getb("selectionMode")) { 75 | drawSelectionMode(); 76 | } else { 77 | drawRenderMode(); 78 | } 79 | if(!getb("validShader")) { 80 | ofPushStyle(); 81 | ofSetColor(magentaPrint); 82 | ofSetLineWidth(8); 83 | ofLine(0, 0, ofGetWidth(), ofGetHeight()); 84 | ofLine(ofGetWidth(), 0, 0, ofGetHeight()); 85 | string message = "Shader failed to compile."; 86 | ofVec2f center(ofGetWidth(), ofGetHeight()); 87 | center /= 2; 88 | center.x -= message.size() * 8 / 2; 89 | center.y -= 8; 90 | drawHighlightString(message, center); 91 | ofPopStyle(); 92 | } 93 | } 94 | 95 | void ofApp::keyPressed(int key) { 96 | if(key == OF_KEY_LEFT || key == OF_KEY_UP || key == OF_KEY_RIGHT|| key == OF_KEY_DOWN){ 97 | int choice = geti("selectionChoice"); 98 | setb("arrowing", true); 99 | if(choice > 0){ 100 | Point2f& cur = imagePoints[choice]; 101 | switch(key) { 102 | case OF_KEY_LEFT: cur.x -= 1; break; 103 | case OF_KEY_RIGHT: cur.x += 1; break; 104 | case OF_KEY_UP: cur.y -= 1; break; 105 | case OF_KEY_DOWN: cur.y += 1; break; 106 | } 107 | } 108 | } else { 109 | setb("arrowing",false); 110 | } 111 | if(key == OF_KEY_BACKSPACE) { // delete selected 112 | if(getb("selected")) { 113 | setb("selected", false); 114 | int choice = geti("selectionChoice"); 115 | referencePoints[choice] = false; 116 | imagePoints[choice] = Point2f(); 117 | } 118 | } 119 | if(key == '\n') { // deselect 120 | setb("selected", false); 121 | } 122 | if(key == ' ') { // toggle render/select mode 123 | setb("selectionMode", !getb("selectionMode")); 124 | } 125 | } 126 | 127 | void ofApp::mousePressed(int x, int y, int button) { 128 | setb("selected", getb("hoverSelected")); 129 | seti("selectionChoice", geti("hoverChoice")); 130 | if(getb("selected")) { 131 | setb("dragging", true); 132 | } 133 | } 134 | 135 | void ofApp::mouseReleased(int x, int y, int button) { 136 | setb("dragging", false); 137 | } 138 | 139 | void ofApp::setupMesh() { 140 | model.loadModel("model.dae"); 141 | objectMesh = model.getMesh(0); 142 | int n = objectMesh.getNumVertices(); 143 | objectPoints.resize(n); 144 | imagePoints.resize(n); 145 | referencePoints.resize(n, false); 146 | for(int i = 0; i < n; i++) { 147 | objectPoints[i] = toCv(objectMesh.getVertex(i)); 148 | } 149 | } 150 | 151 | void ofApp::render() { 152 | ofPushStyle(); 153 | ofSetLineWidth(geti("lineWidth")); 154 | if(getb("useSmoothing")) { 155 | ofEnableSmoothing(); 156 | } else { 157 | ofDisableSmoothing(); 158 | } 159 | int shading = geti("shading"); 160 | bool useLights = shading == 1; 161 | bool useShader = shading == 2; 162 | if(useLights) { 163 | light.enable(); 164 | ofEnableLighting(); 165 | glShadeModel(GL_SMOOTH); 166 | glEnable(GL_NORMALIZE); 167 | } 168 | 169 | if(getb("highlight")) { 170 | objectMesh.clearColors(); 171 | int n = objectMesh.getNumVertices(); 172 | float highlightPosition = getf("highlightPosition"); 173 | float highlightOffset = getf("highlightOffset"); 174 | for(int i = 0; i < n; i++) { 175 | int lower = ofMap(highlightPosition - highlightOffset, 0, 1, 0, n); 176 | int upper = ofMap(highlightPosition + highlightOffset, 0, 1, 0, n); 177 | ofColor cur = (lower < i && i < upper) ? ofColor::white : ofColor::black; 178 | objectMesh.addColor(cur); 179 | } 180 | } 181 | 182 | ofSetColor(255); 183 | glPushAttrib(GL_ALL_ATTRIB_BITS); 184 | glEnable(GL_DEPTH_TEST); 185 | if(useShader) { 186 | ofFile fragFile("shader.frag"), vertFile("shader.vert"); 187 | Poco::Timestamp fragTimestamp = fragFile.getPocoFile().getLastModified(); 188 | Poco::Timestamp vertTimestamp = vertFile.getPocoFile().getLastModified(); 189 | if(fragTimestamp != lastFragTimestamp || vertTimestamp != lastVertTimestamp) { 190 | bool validShader = shader.load("shader"); 191 | setb("validShader", validShader); 192 | } 193 | lastFragTimestamp = fragTimestamp; 194 | lastVertTimestamp = vertTimestamp; 195 | 196 | shader.begin(); 197 | shader.setUniform1f("elapsedTime", ofGetElapsedTimef()); 198 | shader.end(); 199 | } 200 | ofColor transparentBlack(0, 0, 0, 0); 201 | switch(geti("drawMode")) { 202 | case 0: // faces 203 | if(useShader) shader.begin(); 204 | glEnable(GL_CULL_FACE); 205 | glCullFace(GL_BACK); 206 | objectMesh.drawFaces(); 207 | if(useShader) shader.end(); 208 | break; 209 | case 1: // fullWireframe 210 | if(useShader) shader.begin(); 211 | objectMesh.drawWireframe(); 212 | if(useShader) shader.end(); 213 | break; 214 | case 2: // outlineWireframe 215 | LineArt::draw(objectMesh, true, transparentBlack, useShader ? &shader : NULL); 216 | break; 217 | case 3: // occludedWireframe 218 | LineArt::draw(objectMesh, false, transparentBlack, useShader ? &shader : NULL); 219 | break; 220 | } 221 | glPopAttrib(); 222 | if(useLights) { 223 | ofDisableLighting(); 224 | } 225 | ofPopStyle(); 226 | } 227 | 228 | void ofApp::saveCalibration() { 229 | string dirName = "calibration-" + ofGetTimestampString() + "/"; 230 | ofDirectory dir(dirName); 231 | dir.create(); 232 | 233 | FileStorage fs(ofToDataPath(dirName + "calibration-advanced.yml"), FileStorage::WRITE); 234 | 235 | Mat cameraMatrix = intrinsics.getCameraMatrix(); 236 | fs << "cameraMatrix" << cameraMatrix; 237 | 238 | double focalLength = intrinsics.getFocalLength(); 239 | fs << "focalLength" << focalLength; 240 | 241 | Point2d fov = intrinsics.getFov(); 242 | fs << "fov" << fov; 243 | 244 | Point2d principalPoint = intrinsics.getPrincipalPoint(); 245 | fs << "principalPoint" << principalPoint; 246 | 247 | cv::Size imageSize = intrinsics.getImageSize(); 248 | fs << "imageSize" << imageSize; 249 | 250 | fs << "translationVector" << tvec; 251 | fs << "rotationVector" << rvec; 252 | 253 | Mat rotationMatrix; 254 | Rodrigues(rvec, rotationMatrix); 255 | fs << "rotationMatrix" << rotationMatrix; 256 | 257 | double rotationAngleRadians = norm(rvec, NORM_L2); 258 | double rotationAngleDegrees = ofRadToDeg(rotationAngleRadians); 259 | Mat rotationAxis = rvec / rotationAngleRadians; 260 | fs << "rotationAngleRadians" << rotationAngleRadians; 261 | fs << "rotationAngleDegrees" << rotationAngleDegrees; 262 | fs << "rotationAxis" << rotationAxis; 263 | 264 | ofVec3f axis(rotationAxis.at(0), rotationAxis.at(1), rotationAxis.at(2)); 265 | ofVec3f euler = ofQuaternion(rotationAngleDegrees, axis).getEuler(); 266 | Mat eulerMat = (Mat_(3,1) << euler.x, euler.y, euler.z); 267 | fs << "euler" << eulerMat; 268 | 269 | ofFile basic("calibration-basic.txt", ofFile::WriteOnly); 270 | ofVec3f position( tvec.at(1), tvec.at(2)); 271 | basic << "position (in world units):" << endl; 272 | basic << "\tx: " << ofToString(tvec.at(0), 2) << endl; 273 | basic << "\ty: " << ofToString(tvec.at(1), 2) << endl; 274 | basic << "\tz: " << ofToString(tvec.at(2), 2) << endl; 275 | basic << "axis-angle rotation (in degrees):" << endl; 276 | basic << "\taxis x: " << ofToString(axis.x, 2) << endl; 277 | basic << "\taxis y: " << ofToString(axis.y, 2) << endl; 278 | basic << "\taxis z: " << ofToString(axis.z, 2) << endl; 279 | basic << "\tangle: " << ofToString(rotationAngleDegrees, 2) << endl; 280 | basic << "euler rotation (in degrees):" << endl; 281 | basic << "\tx: " << ofToString(euler.x, 2) << endl; 282 | basic << "\ty: " << ofToString(euler.y, 2) << endl; 283 | basic << "\tz: " << ofToString(euler.z, 2) << endl; 284 | basic << "fov (in degrees):" << endl; 285 | basic << "\thorizontal: " << ofToString(fov.x, 2) << endl; 286 | basic << "\tvertical: " << ofToString(fov.y, 2) << endl; 287 | basic << "principal point (in screen units):" << endl; 288 | basic << "\tx: " << ofToString(principalPoint.x, 2) << endl; 289 | basic << "\ty: " << ofToString(principalPoint.y, 2) << endl; 290 | basic << "image size (in pixels):" << endl; 291 | basic << "\tx: " << ofToString(principalPoint.x, 2) << endl; 292 | basic << "\ty: " << ofToString(principalPoint.y, 2) << endl; 293 | 294 | saveMat(Mat(objectPoints), dirName + "objectPoints.yml"); 295 | saveMat(Mat(imagePoints), dirName + "imagePoints.yml"); 296 | } 297 | 298 | void ofApp::loadCalibration() { 299 | 300 | // retrieve advanced calibration folder 301 | 302 | string calibPath; 303 | ofFileDialogResult result = ofSystemLoadDialog("Select a calibration folder", true, ofToDataPath("", true)); 304 | calibPath = result.getPath(); 305 | 306 | // load objectPoints and imagePoints 307 | 308 | Mat objPointsMat, imgPointsMat; 309 | loadMat( objPointsMat, calibPath + "/objectPoints.yml"); 310 | loadMat( imgPointsMat, calibPath + "/imagePoints.yml"); 311 | 312 | int numVals; 313 | float x, y, z; 314 | cv::Point3f oP; 315 | 316 | const float* objVals = objPointsMat.ptr(0); 317 | numVals = objPointsMat.cols * objPointsMat.rows; 318 | 319 | for(int i = 0; i < numVals; i+=3) { 320 | oP.x = objVals[i]; 321 | oP.y = objVals[i+1]; 322 | oP.z = objVals[i+2]; 323 | objectPoints[i/3] = oP; 324 | } 325 | 326 | cv::Point2f iP; 327 | 328 | referencePoints.resize( (imgPointsMat.cols * imgPointsMat.rows ) / 2, false); 329 | 330 | const float* imgVals = imgPointsMat.ptr(0); 331 | numVals = objPointsMat.cols * objPointsMat.rows; 332 | 333 | for(int i = 0; i < numVals; i+=2) { 334 | iP.x = imgVals[i]; 335 | iP.y = imgVals[i+1]; 336 | if(iP.x != 0 && iP.y != 0) { 337 | referencePoints[i/2] = true; 338 | } 339 | imagePoints[i/2] = iP; 340 | } 341 | 342 | 343 | // load the calibration-advanced yml 344 | 345 | FileStorage fs(ofToDataPath(calibPath + "/calibration-advanced.yml", true), FileStorage::READ); 346 | 347 | Mat cameraMatrix; 348 | Size2i imageSize; 349 | fs["cameraMatrix"] >> cameraMatrix; 350 | fs["imageSize"][0] >> imageSize.width; 351 | fs["imageSize"][1] >> imageSize.height; 352 | fs["rotationVector"] >> rvec; 353 | fs["translationVector"] >> tvec; 354 | 355 | intrinsics.setup(cameraMatrix, imageSize); 356 | modelMatrix = makeMatrix(rvec, tvec); 357 | 358 | calibrationReady = true; 359 | } 360 | 361 | void ofApp::setupControlPanel() { 362 | panel.setup(); 363 | panel.msg = "tab hides the panel, space toggles render/selection mode, 'f' toggles fullscreen."; 364 | 365 | panel.addPanel("Interaction"); 366 | panel.addToggle("setupMode", true); 367 | panel.addSlider("scale", 1, .1, 25); 368 | panel.addSlider("backgroundColor", 0, 0, 255, true); 369 | panel.addMultiToggle("drawMode", 3, variadic("faces")("fullWireframe")("outlineWireframe")("occludedWireframe")); 370 | panel.addMultiToggle("shading", 0, variadic("none")("lights")("shader")); 371 | panel.addToggle("loadCalibration", false); 372 | panel.addToggle("saveCalibration", false); 373 | 374 | panel.addPanel("Highlight"); 375 | panel.addToggle("highlight", false); 376 | panel.addSlider("highlightPosition", 0, 0, 1); 377 | panel.addSlider("highlightOffset", .1, 0, 1); 378 | 379 | panel.addPanel("Calibration"); 380 | panel.addSlider("aov", 80, 50, 100); 381 | panel.addToggle("CV_CALIB_FIX_ASPECT_RATIO", true); 382 | panel.addToggle("CV_CALIB_FIX_K1", true); 383 | panel.addToggle("CV_CALIB_FIX_K2", true); 384 | panel.addToggle("CV_CALIB_FIX_K3", true); 385 | panel.addToggle("CV_CALIB_ZERO_TANGENT_DIST", true); 386 | panel.addToggle("CV_CALIB_FIX_PRINCIPAL_POINT", false); 387 | 388 | panel.addPanel("Rendering"); 389 | panel.addSlider("lineWidth", 2, 1, 8, true); 390 | panel.addToggle("useSmoothing", false); 391 | panel.addToggle("useFog", false); 392 | panel.addSlider("fogNear", 200, 0, 1000); 393 | panel.addSlider("fogFar", 1850, 0, 2500); 394 | panel.addSlider("screenPointSize", 2, 1, 16, true); 395 | panel.addSlider("selectedPointSize", 8, 1, 16, true); 396 | panel.addSlider("selectionRadius", 12, 1, 32); 397 | panel.addSlider("lightX", 200, -1000, 1000); 398 | panel.addSlider("lightY", 400, -1000, 1000); 399 | panel.addSlider("lightZ", 800, -1000, 1000); 400 | panel.addToggle("randomLighting", false); 401 | 402 | panel.addPanel("Internal"); 403 | panel.addToggle("validShader", true); 404 | panel.addToggle("selectionMode", true); 405 | panel.addToggle("hoverSelected", false); 406 | panel.addSlider("hoverChoice", 0, 0, objectPoints.size(), true); 407 | panel.addToggle("selected", false); 408 | panel.addToggle("dragging", false); 409 | panel.addToggle("arrowing", false); 410 | panel.addSlider("selectionChoice", 0, 0, objectPoints.size(), true); 411 | panel.addSlider("slowLerpRate", .001, 0, .01); 412 | panel.addSlider("fastLerpRate", 1, 0, 1); 413 | } 414 | 415 | void ofApp::updateRenderMode() { 416 | // generate camera matrix given aov guess 417 | float aov = getf("aov"); 418 | Size2i imageSize(ofGetWidth(), ofGetHeight()); 419 | float f = imageSize.width * ofDegToRad(aov); // i think this is wrong, but it's optimized out anyway 420 | Point2f c = Point2f(imageSize) * (1. / 2); 421 | Mat1d cameraMatrix = (Mat1d(3, 3) << 422 | f, 0, c.x, 423 | 0, f, c.y, 424 | 0, 0, 1); 425 | 426 | // generate flags 427 | #define getFlag(flag) (panel.getValueB((#flag)) ? flag : 0) 428 | int flags = 429 | CV_CALIB_USE_INTRINSIC_GUESS | 430 | getFlag(CV_CALIB_FIX_PRINCIPAL_POINT) | 431 | getFlag(CV_CALIB_FIX_ASPECT_RATIO) | 432 | getFlag(CV_CALIB_FIX_K1) | 433 | getFlag(CV_CALIB_FIX_K2) | 434 | getFlag(CV_CALIB_FIX_K3) | 435 | getFlag(CV_CALIB_ZERO_TANGENT_DIST); 436 | 437 | vector rvecs, tvecs; 438 | Mat distCoeffs; 439 | vector > referenceObjectPoints(1); 440 | vector > referenceImagePoints(1); 441 | int n = referencePoints.size(); 442 | for(int i = 0; i < n; i++) { 443 | if(referencePoints[i]) { 444 | referenceObjectPoints[0].push_back(objectPoints[i]); 445 | referenceImagePoints[0].push_back(imagePoints[i]); 446 | } 447 | } 448 | const static int minPoints = 6; 449 | if(referenceObjectPoints[0].size() >= minPoints) { 450 | calibrateCamera(referenceObjectPoints, referenceImagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags); 451 | rvec = rvecs[0]; 452 | tvec = tvecs[0]; 453 | intrinsics.setup(cameraMatrix, imageSize); 454 | modelMatrix = makeMatrix(rvec, tvec); 455 | calibrationReady = true; 456 | } else { 457 | calibrationReady = false; 458 | } 459 | } 460 | 461 | void ofApp::drawLabeledPoint(int label, ofVec2f position, ofColor color, ofColor bg, ofColor fg) { 462 | glPushAttrib(GL_DEPTH_BUFFER_BIT); 463 | glDisable(GL_DEPTH_TEST); 464 | //glEnable(GL_DEPTH_TEST); 465 | ofVec2f tooltipOffset(5, -25); 466 | ofSetColor(color); 467 | float w = ofGetWidth(); 468 | float h = ofGetHeight(); 469 | ofSetLineWidth(1.5); 470 | position.x = roundf(position.x) + .5, position.y = roundf(position.y) + .5; 471 | ofLine(position - ofVec2f(w,0), position + ofVec2f(w,0)); 472 | ofLine(position - ofVec2f(0,h), position + ofVec2f(0,h)); 473 | ofCircle(position, geti("selectedPointSize")); 474 | drawHighlightString(ofToString(label), position + tooltipOffset, bg, fg); 475 | glPopAttrib(); 476 | } 477 | 478 | void ofApp::drawSelectionMode() { 479 | ofSetColor(255); 480 | cam.begin(); 481 | float scale = getf("scale"); 482 | ofScale(scale, scale, scale); 483 | if(getb("useFog")) { 484 | enableFog(getf("fogNear"), getf("fogFar")); 485 | } 486 | render(); 487 | if(getb("useFog")) { 488 | disableFog(); 489 | } 490 | if(getb("setupMode")) { 491 | imageMesh = getProjectedMesh(objectMesh); 492 | } 493 | cam.end(); 494 | 495 | if(getb("setupMode")) { 496 | // draw all points cyan small 497 | glPointSize(geti("screenPointSize")); 498 | glEnable(GL_POINT_SMOOTH); 499 | ofSetColor(cyanPrint); 500 | imageMesh.drawVertices(); 501 | 502 | // draw all reference points cyan 503 | int n = referencePoints.size(); 504 | for(int i = 0; i < n; i++) { 505 | if(referencePoints[i]) { 506 | drawLabeledPoint(i, imageMesh.getVertex(i), cyanPrint); 507 | } 508 | } 509 | 510 | // check to see if anything is selected 511 | // draw hover point magenta 512 | int choice; 513 | float distance; 514 | ofVec3f selected = getClosestPointOnMesh(imageMesh, mouseX, mouseY, &choice, &distance); 515 | if(!ofGetMousePressed() && distance < getf("selectionRadius")) { 516 | seti("hoverChoice", choice); 517 | setb("hoverSelected", true); 518 | drawLabeledPoint(choice, selected, magentaPrint); 519 | } else { 520 | setb("hoverSelected", false); 521 | } 522 | 523 | // draw selected point yellow 524 | if(getb("selected")) { 525 | int choice = geti("selectionChoice"); 526 | ofVec2f selected = imageMesh.getVertex(choice); 527 | drawLabeledPoint(choice, selected, yellowPrint, ofColor::white, ofColor::black); 528 | } 529 | } 530 | } 531 | 532 | void ofApp::drawRenderMode() { 533 | glPushMatrix(); 534 | glMatrixMode(GL_PROJECTION); 535 | glPushMatrix(); 536 | glMatrixMode(GL_MODELVIEW); 537 | 538 | if(calibrationReady) { 539 | intrinsics.loadProjectionMatrix(10, 2000); 540 | applyMatrix(modelMatrix); 541 | render(); 542 | if(getb("setupMode")) { 543 | imageMesh = getProjectedMesh(objectMesh); 544 | } 545 | } 546 | 547 | glPopMatrix(); 548 | glMatrixMode(GL_PROJECTION); 549 | glPopMatrix(); 550 | glMatrixMode(GL_MODELVIEW); 551 | 552 | if(getb("setupMode")) { 553 | // draw all reference points cyan 554 | int n = referencePoints.size(); 555 | for(int i = 0; i < n; i++) { 556 | if(referencePoints[i]) { 557 | drawLabeledPoint(i, toOf(imagePoints[i]), cyanPrint); 558 | } 559 | } 560 | 561 | // move points that need to be dragged 562 | // draw selected yellow 563 | int choice = geti("selectionChoice"); 564 | if(getb("selected")) { 565 | referencePoints[choice] = true; 566 | Point2f& cur = imagePoints[choice]; 567 | if(cur == Point2f()) { 568 | if(calibrationReady) { 569 | cur = toCv(ofVec2f(imageMesh.getVertex(choice))); 570 | } else { 571 | cur = Point2f(mouseX, mouseY); 572 | } 573 | } 574 | } 575 | if(getb("dragging")) { 576 | Point2f& cur = imagePoints[choice]; 577 | float rate = ofGetMousePressed(0) ? getf("fastLerpRate") : getf("slowLerpRate"); 578 | cur = Point2f(ofLerp(cur.x, mouseX, rate), ofLerp(cur.y, mouseY, rate)); 579 | drawLabeledPoint(choice, toOf(cur), yellowPrint, ofColor::white, ofColor::black); 580 | ofSetColor(ofColor::black); 581 | ofRect(toOf(cur), 1, 1); 582 | } else if(getb("arrowing")) { 583 | Point2f& cur = imagePoints[choice]; 584 | drawLabeledPoint(choice, toOf(cur), yellowPrint, ofColor::white, ofColor::black); 585 | ofSetColor(ofColor::black); 586 | ofRect(toOf(cur), 1, 1); 587 | } else { 588 | // check to see if anything is selected 589 | // draw hover magenta 590 | float distance; 591 | ofVec2f selected = toOf(getClosestPoint(imagePoints, mouseX, mouseY, &choice, &distance)); 592 | if(!ofGetMousePressed() && referencePoints[choice] && distance < getf("selectionRadius")) { 593 | seti("hoverChoice", choice); 594 | setb("hoverSelected", true); 595 | drawLabeledPoint(choice, selected, magentaPrint); 596 | } else { 597 | setb("hoverSelected", false); 598 | } 599 | } 600 | } 601 | } 602 | -------------------------------------------------------------------------------- /RenderTest/ofApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 42; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 278CD1BB1905F63E00C464A8 /* ofxAssimpAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 278CD1781905F63E00C464A8 /* ofxAssimpAnimation.cpp */; }; 11 | 278CD1BC1905F63E00C464A8 /* ofxAssimpMeshHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 278CD17A1905F63E00C464A8 /* ofxAssimpMeshHelper.cpp */; }; 12 | 278CD1BD1905F63E00C464A8 /* ofxAssimpModelLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 278CD17C1905F63E00C464A8 /* ofxAssimpModelLoader.cpp */; }; 13 | 278CD1BE1905F63E00C464A8 /* ofxAssimpTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 278CD17E1905F63E00C464A8 /* ofxAssimpTexture.cpp */; }; 14 | 278CD1BF1905F63E00C464A8 /* assimp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 278CD1B61905F63E00C464A8 /* assimp.a */; }; 15 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; 16 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; 17 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; 18 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; 19 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; }; 20 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9740E8CC7DD009D7055 /* Carbon.framework */; }; 21 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; }; 22 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; }; 23 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; }; 24 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; }; 25 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; }; 26 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; 27 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; }; 28 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; }; 29 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; }; 30 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; 31 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; }; 32 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; }; 33 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; }; 34 | /* End PBXBuildFile section */ 35 | 36 | /* Begin PBXContainerItemProxy section */ 37 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 40 | proxyType = 2; 41 | remoteGlobalIDString = E4B27C1510CBEB8E00536013; 42 | remoteInfo = openFrameworks; 43 | }; 44 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { 45 | isa = PBXContainerItemProxy; 46 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 47 | proxyType = 1; 48 | remoteGlobalIDString = E4B27C1410CBEB8E00536013; 49 | remoteInfo = openFrameworks; 50 | }; 51 | /* End PBXContainerItemProxy section */ 52 | 53 | /* Begin PBXCopyFilesBuildPhase section */ 54 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = { 55 | isa = PBXCopyFilesBuildPhase; 56 | buildActionMask = 2147483647; 57 | dstPath = ""; 58 | dstSubfolderSpec = 10; 59 | files = ( 60 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */, 61 | ); 62 | runOnlyForDeploymentPostprocessing = 0; 63 | }; 64 | /* End PBXCopyFilesBuildPhase section */ 65 | 66 | /* Begin PBXFileReference section */ 67 | 2721BC211906E21D0084CEA1 /* ofAutoShader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofAutoShader.h; sourceTree = ""; }; 68 | 27812673190AE5FC00C8EE54 /* MeshUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MeshUtils.h; sourceTree = ""; }; 69 | 278CD1781905F63E00C464A8 /* ofxAssimpAnimation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxAssimpAnimation.cpp; sourceTree = ""; }; 70 | 278CD1791905F63E00C464A8 /* ofxAssimpAnimation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxAssimpAnimation.h; sourceTree = ""; }; 71 | 278CD17A1905F63E00C464A8 /* ofxAssimpMeshHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxAssimpMeshHelper.cpp; sourceTree = ""; }; 72 | 278CD17B1905F63E00C464A8 /* ofxAssimpMeshHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxAssimpMeshHelper.h; sourceTree = ""; }; 73 | 278CD17C1905F63E00C464A8 /* ofxAssimpModelLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxAssimpModelLoader.cpp; sourceTree = ""; }; 74 | 278CD17D1905F63E00C464A8 /* ofxAssimpModelLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxAssimpModelLoader.h; sourceTree = ""; }; 75 | 278CD17E1905F63E00C464A8 /* ofxAssimpTexture.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxAssimpTexture.cpp; sourceTree = ""; }; 76 | 278CD17F1905F63E00C464A8 /* ofxAssimpTexture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxAssimpTexture.h; sourceTree = ""; }; 77 | 278CD1801905F63E00C464A8 /* ofxAssimpUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxAssimpUtils.h; sourceTree = ""; }; 78 | 278CD1841905F63E00C464A8 /* aiAnim.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiAnim.h; sourceTree = ""; }; 79 | 278CD1851905F63E00C464A8 /* aiAssert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiAssert.h; sourceTree = ""; }; 80 | 278CD1861905F63E00C464A8 /* aiCamera.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiCamera.h; sourceTree = ""; }; 81 | 278CD1871905F63E00C464A8 /* aiColor4D.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiColor4D.h; sourceTree = ""; }; 82 | 278CD1881905F63E00C464A8 /* aiColor4D.inl */ = {isa = PBXFileReference; lastKnownFileType = text; path = aiColor4D.inl; sourceTree = ""; }; 83 | 278CD1891905F63E00C464A8 /* aiConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiConfig.h; sourceTree = ""; }; 84 | 278CD18A1905F63E00C464A8 /* aiDefines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiDefines.h; sourceTree = ""; }; 85 | 278CD18B1905F63E00C464A8 /* aiFileIO.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiFileIO.h; sourceTree = ""; }; 86 | 278CD18C1905F63E00C464A8 /* aiLight.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiLight.h; sourceTree = ""; }; 87 | 278CD18D1905F63E00C464A8 /* aiMaterial.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiMaterial.h; sourceTree = ""; }; 88 | 278CD18E1905F63E00C464A8 /* aiMaterial.inl */ = {isa = PBXFileReference; lastKnownFileType = text; path = aiMaterial.inl; sourceTree = ""; }; 89 | 278CD18F1905F63E00C464A8 /* aiMatrix3x3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiMatrix3x3.h; sourceTree = ""; }; 90 | 278CD1901905F63E00C464A8 /* aiMatrix3x3.inl */ = {isa = PBXFileReference; lastKnownFileType = text; path = aiMatrix3x3.inl; sourceTree = ""; }; 91 | 278CD1911905F63E00C464A8 /* aiMatrix4x4.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiMatrix4x4.h; sourceTree = ""; }; 92 | 278CD1921905F63E00C464A8 /* aiMatrix4x4.inl */ = {isa = PBXFileReference; lastKnownFileType = text; path = aiMatrix4x4.inl; sourceTree = ""; }; 93 | 278CD1931905F63E00C464A8 /* aiMesh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiMesh.h; sourceTree = ""; }; 94 | 278CD1941905F63E00C464A8 /* aiPostProcess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiPostProcess.h; sourceTree = ""; }; 95 | 278CD1951905F63E00C464A8 /* aiQuaternion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiQuaternion.h; sourceTree = ""; }; 96 | 278CD1961905F63E00C464A8 /* aiScene.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiScene.h; sourceTree = ""; }; 97 | 278CD1971905F63E00C464A8 /* aiTexture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiTexture.h; sourceTree = ""; }; 98 | 278CD1981905F63E00C464A8 /* aiTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiTypes.h; sourceTree = ""; }; 99 | 278CD1991905F63E00C464A8 /* aiVector2D.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiVector2D.h; sourceTree = ""; }; 100 | 278CD19A1905F63E00C464A8 /* aiVector3D.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiVector3D.h; sourceTree = ""; }; 101 | 278CD19B1905F63E00C464A8 /* aiVector3D.inl */ = {isa = PBXFileReference; lastKnownFileType = text; path = aiVector3D.inl; sourceTree = ""; }; 102 | 278CD19C1905F63E00C464A8 /* aiVersion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aiVersion.h; sourceTree = ""; }; 103 | 278CD19D1905F63E00C464A8 /* assimp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = assimp.h; sourceTree = ""; }; 104 | 278CD19E1905F63E00C464A8 /* assimp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = assimp.hpp; sourceTree = ""; }; 105 | 278CD1A01905F63E00C464A8 /* poppack1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = poppack1.h; sourceTree = ""; }; 106 | 278CD1A11905F63E00C464A8 /* pushpack1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pushpack1.h; sourceTree = ""; }; 107 | 278CD1A21905F63E00C464A8 /* DefaultLogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DefaultLogger.h; sourceTree = ""; }; 108 | 278CD1A31905F63E00C464A8 /* IOStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IOStream.h; sourceTree = ""; }; 109 | 278CD1A41905F63E00C464A8 /* IOSystem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IOSystem.h; sourceTree = ""; }; 110 | 278CD1A51905F63E00C464A8 /* Logger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Logger.h; sourceTree = ""; }; 111 | 278CD1A61905F63E00C464A8 /* LogStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LogStream.h; sourceTree = ""; }; 112 | 278CD1A71905F63E00C464A8 /* NullLogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NullLogger.h; sourceTree = ""; }; 113 | 278CD1A81905F63E00C464A8 /* ProgressHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProgressHandler.h; sourceTree = ""; }; 114 | 278CD1B61905F63E00C464A8 /* assimp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = assimp.a; sourceTree = ""; }; 115 | BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; 116 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; 117 | E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; 118 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; 119 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 120 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 121 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; 122 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 123 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 124 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; 125 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; 126 | E4B69B5B0A3A1756003C02F2 /* ofAppDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ofAppDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; 127 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; 128 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; 129 | E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 130 | E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 131 | E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 132 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; 133 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; 134 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; 135 | E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; 136 | E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; }; 137 | /* End PBXFileReference section */ 138 | 139 | /* Begin PBXFrameworksBuildPhase section */ 140 | E4B69B590A3A1756003C02F2 /* Frameworks */ = { 141 | isa = PBXFrameworksBuildPhase; 142 | buildActionMask = 2147483647; 143 | files = ( 144 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */, 145 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */, 146 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */, 147 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, 148 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */, 149 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */, 150 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */, 151 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */, 152 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */, 153 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */, 154 | 278CD1BF1905F63E00C464A8 /* assimp.a in Frameworks */, 155 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */, 156 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */, 157 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */, 158 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */, 159 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */, 160 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */, 161 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */, 162 | ); 163 | runOnlyForDeploymentPostprocessing = 0; 164 | }; 165 | /* End PBXFrameworksBuildPhase section */ 166 | 167 | /* Begin PBXGroup section */ 168 | 278CD1761905F63E00C464A8 /* ofxAssimpModelLoader */ = { 169 | isa = PBXGroup; 170 | children = ( 171 | 278CD1771905F63E00C464A8 /* src */, 172 | 278CD1811905F63E00C464A8 /* libs */, 173 | ); 174 | name = ofxAssimpModelLoader; 175 | sourceTree = ""; 176 | }; 177 | 278CD1771905F63E00C464A8 /* src */ = { 178 | isa = PBXGroup; 179 | children = ( 180 | 278CD1781905F63E00C464A8 /* ofxAssimpAnimation.cpp */, 181 | 278CD1791905F63E00C464A8 /* ofxAssimpAnimation.h */, 182 | 278CD17A1905F63E00C464A8 /* ofxAssimpMeshHelper.cpp */, 183 | 278CD17B1905F63E00C464A8 /* ofxAssimpMeshHelper.h */, 184 | 278CD17C1905F63E00C464A8 /* ofxAssimpModelLoader.cpp */, 185 | 278CD17D1905F63E00C464A8 /* ofxAssimpModelLoader.h */, 186 | 278CD17E1905F63E00C464A8 /* ofxAssimpTexture.cpp */, 187 | 278CD17F1905F63E00C464A8 /* ofxAssimpTexture.h */, 188 | 278CD1801905F63E00C464A8 /* ofxAssimpUtils.h */, 189 | ); 190 | name = src; 191 | path = ../../../addons/ofxAssimpModelLoader/src; 192 | sourceTree = ""; 193 | }; 194 | 278CD1811905F63E00C464A8 /* libs */ = { 195 | isa = PBXGroup; 196 | children = ( 197 | 278CD1821905F63E00C464A8 /* assimp */, 198 | ); 199 | name = libs; 200 | path = ../../../addons/ofxAssimpModelLoader/libs; 201 | sourceTree = ""; 202 | }; 203 | 278CD1821905F63E00C464A8 /* assimp */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | 278CD1831905F63E00C464A8 /* include */, 207 | 278CD1A91905F63E00C464A8 /* lib */, 208 | ); 209 | path = assimp; 210 | sourceTree = ""; 211 | }; 212 | 278CD1831905F63E00C464A8 /* include */ = { 213 | isa = PBXGroup; 214 | children = ( 215 | 278CD1841905F63E00C464A8 /* aiAnim.h */, 216 | 278CD1851905F63E00C464A8 /* aiAssert.h */, 217 | 278CD1861905F63E00C464A8 /* aiCamera.h */, 218 | 278CD1871905F63E00C464A8 /* aiColor4D.h */, 219 | 278CD1881905F63E00C464A8 /* aiColor4D.inl */, 220 | 278CD1891905F63E00C464A8 /* aiConfig.h */, 221 | 278CD18A1905F63E00C464A8 /* aiDefines.h */, 222 | 278CD18B1905F63E00C464A8 /* aiFileIO.h */, 223 | 278CD18C1905F63E00C464A8 /* aiLight.h */, 224 | 278CD18D1905F63E00C464A8 /* aiMaterial.h */, 225 | 278CD18E1905F63E00C464A8 /* aiMaterial.inl */, 226 | 278CD18F1905F63E00C464A8 /* aiMatrix3x3.h */, 227 | 278CD1901905F63E00C464A8 /* aiMatrix3x3.inl */, 228 | 278CD1911905F63E00C464A8 /* aiMatrix4x4.h */, 229 | 278CD1921905F63E00C464A8 /* aiMatrix4x4.inl */, 230 | 278CD1931905F63E00C464A8 /* aiMesh.h */, 231 | 278CD1941905F63E00C464A8 /* aiPostProcess.h */, 232 | 278CD1951905F63E00C464A8 /* aiQuaternion.h */, 233 | 278CD1961905F63E00C464A8 /* aiScene.h */, 234 | 278CD1971905F63E00C464A8 /* aiTexture.h */, 235 | 278CD1981905F63E00C464A8 /* aiTypes.h */, 236 | 278CD1991905F63E00C464A8 /* aiVector2D.h */, 237 | 278CD19A1905F63E00C464A8 /* aiVector3D.h */, 238 | 278CD19B1905F63E00C464A8 /* aiVector3D.inl */, 239 | 278CD19C1905F63E00C464A8 /* aiVersion.h */, 240 | 278CD19D1905F63E00C464A8 /* assimp.h */, 241 | 278CD19E1905F63E00C464A8 /* assimp.hpp */, 242 | 278CD19F1905F63E00C464A8 /* Compiler */, 243 | 278CD1A21905F63E00C464A8 /* DefaultLogger.h */, 244 | 278CD1A31905F63E00C464A8 /* IOStream.h */, 245 | 278CD1A41905F63E00C464A8 /* IOSystem.h */, 246 | 278CD1A51905F63E00C464A8 /* Logger.h */, 247 | 278CD1A61905F63E00C464A8 /* LogStream.h */, 248 | 278CD1A71905F63E00C464A8 /* NullLogger.h */, 249 | 278CD1A81905F63E00C464A8 /* ProgressHandler.h */, 250 | ); 251 | path = include; 252 | sourceTree = ""; 253 | }; 254 | 278CD19F1905F63E00C464A8 /* Compiler */ = { 255 | isa = PBXGroup; 256 | children = ( 257 | 278CD1A01905F63E00C464A8 /* poppack1.h */, 258 | 278CD1A11905F63E00C464A8 /* pushpack1.h */, 259 | ); 260 | path = Compiler; 261 | sourceTree = ""; 262 | }; 263 | 278CD1A91905F63E00C464A8 /* lib */ = { 264 | isa = PBXGroup; 265 | children = ( 266 | 278CD1B51905F63E00C464A8 /* osx */, 267 | ); 268 | path = lib; 269 | sourceTree = ""; 270 | }; 271 | 278CD1B51905F63E00C464A8 /* osx */ = { 272 | isa = PBXGroup; 273 | children = ( 274 | 278CD1B61905F63E00C464A8 /* assimp.a */, 275 | ); 276 | path = osx; 277 | sourceTree = ""; 278 | }; 279 | BB4B014C10F69532006C3DED /* addons */ = { 280 | isa = PBXGroup; 281 | children = ( 282 | 278CD1761905F63E00C464A8 /* ofxAssimpModelLoader */, 283 | ); 284 | name = addons; 285 | sourceTree = ""; 286 | }; 287 | BBAB23C913894ECA00AA2426 /* system frameworks */ = { 288 | isa = PBXGroup; 289 | children = ( 290 | E7F985F515E0DE99003869B5 /* Accelerate.framework */, 291 | E4C2424410CC5A17004149E2 /* AppKit.framework */, 292 | E4C2424510CC5A17004149E2 /* Cocoa.framework */, 293 | E4C2424610CC5A17004149E2 /* IOKit.framework */, 294 | E45BE9710E8CC7DD009D7055 /* AGL.framework */, 295 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */, 296 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */, 297 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */, 298 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */, 299 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */, 300 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */, 301 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */, 302 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */, 303 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */, 304 | E7E077E715D3B6510020DFD4 /* QTKit.framework */, 305 | ); 306 | name = "system frameworks"; 307 | sourceTree = ""; 308 | }; 309 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = { 310 | isa = PBXGroup; 311 | children = ( 312 | BBAB23BE13894E4700AA2426 /* GLUT.framework */, 313 | ); 314 | name = "3rd party frameworks"; 315 | sourceTree = ""; 316 | }; 317 | E4328144138ABC890047C5CB /* Products */ = { 318 | isa = PBXGroup; 319 | children = ( 320 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */, 321 | ); 322 | name = Products; 323 | sourceTree = ""; 324 | }; 325 | E45BE5980E8CC70C009D7055 /* frameworks */ = { 326 | isa = PBXGroup; 327 | children = ( 328 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */, 329 | BBAB23C913894ECA00AA2426 /* system frameworks */, 330 | ); 331 | name = frameworks; 332 | sourceTree = ""; 333 | }; 334 | E4B69B4A0A3A1720003C02F2 = { 335 | isa = PBXGroup; 336 | children = ( 337 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, 338 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, 339 | E4B69E1C0A3A1BDC003C02F2 /* src */, 340 | E4EEC9E9138DF44700A80321 /* openFrameworks */, 341 | BB4B014C10F69532006C3DED /* addons */, 342 | E45BE5980E8CC70C009D7055 /* frameworks */, 343 | E4B69B5B0A3A1756003C02F2 /* ofAppDebug.app */, 344 | ); 345 | sourceTree = ""; 346 | }; 347 | E4B69E1C0A3A1BDC003C02F2 /* src */ = { 348 | isa = PBXGroup; 349 | children = ( 350 | 27812673190AE5FC00C8EE54 /* MeshUtils.h */, 351 | 2721BC211906E21D0084CEA1 /* ofAutoShader.h */, 352 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, 353 | ); 354 | path = src; 355 | sourceTree = SOURCE_ROOT; 356 | }; 357 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = { 358 | isa = PBXGroup; 359 | children = ( 360 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, 361 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, 362 | ); 363 | name = openFrameworks; 364 | sourceTree = ""; 365 | }; 366 | /* End PBXGroup section */ 367 | 368 | /* Begin PBXNativeTarget section */ 369 | E4B69B5A0A3A1756003C02F2 /* ofApp */ = { 370 | isa = PBXNativeTarget; 371 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ofApp" */; 372 | buildPhases = ( 373 | E4B69B580A3A1756003C02F2 /* Sources */, 374 | E4B69B590A3A1756003C02F2 /* Frameworks */, 375 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, 376 | E4C2427710CC5ABF004149E2 /* CopyFiles */, 377 | ); 378 | buildRules = ( 379 | ); 380 | dependencies = ( 381 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, 382 | ); 383 | name = ofApp; 384 | productName = myOFApp; 385 | productReference = E4B69B5B0A3A1756003C02F2 /* ofAppDebug.app */; 386 | productType = "com.apple.product-type.application"; 387 | }; 388 | /* End PBXNativeTarget section */ 389 | 390 | /* Begin PBXProject section */ 391 | E4B69B4C0A3A1720003C02F2 /* Project object */ = { 392 | isa = PBXProject; 393 | attributes = { 394 | }; 395 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ofApp" */; 396 | compatibilityVersion = "Xcode 2.4"; 397 | developmentRegion = English; 398 | hasScannedForEncodings = 0; 399 | knownRegions = ( 400 | English, 401 | Japanese, 402 | French, 403 | German, 404 | ); 405 | mainGroup = E4B69B4A0A3A1720003C02F2; 406 | productRefGroup = E4B69B4A0A3A1720003C02F2; 407 | projectDirPath = ""; 408 | projectReferences = ( 409 | { 410 | ProductGroup = E4328144138ABC890047C5CB /* Products */; 411 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 412 | }, 413 | ); 414 | projectRoot = ""; 415 | targets = ( 416 | E4B69B5A0A3A1756003C02F2 /* ofApp */, 417 | ); 418 | }; 419 | /* End PBXProject section */ 420 | 421 | /* Begin PBXReferenceProxy section */ 422 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { 423 | isa = PBXReferenceProxy; 424 | fileType = archive.ar; 425 | path = openFrameworksDebug.a; 426 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; 427 | sourceTree = BUILT_PRODUCTS_DIR; 428 | }; 429 | /* End PBXReferenceProxy section */ 430 | 431 | /* Begin PBXShellScriptBuildPhase section */ 432 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { 433 | isa = PBXShellScriptBuildPhase; 434 | buildActionMask = 2147483647; 435 | files = ( 436 | ); 437 | inputPaths = ( 438 | ); 439 | outputPaths = ( 440 | ); 441 | runOnlyForDeploymentPostprocessing = 0; 442 | shellPath = /bin/sh; 443 | shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";"; 444 | }; 445 | /* End PBXShellScriptBuildPhase section */ 446 | 447 | /* Begin PBXSourcesBuildPhase section */ 448 | E4B69B580A3A1756003C02F2 /* Sources */ = { 449 | isa = PBXSourcesBuildPhase; 450 | buildActionMask = 2147483647; 451 | files = ( 452 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, 453 | 278CD1BC1905F63E00C464A8 /* ofxAssimpMeshHelper.cpp in Sources */, 454 | 278CD1BB1905F63E00C464A8 /* ofxAssimpAnimation.cpp in Sources */, 455 | 278CD1BD1905F63E00C464A8 /* ofxAssimpModelLoader.cpp in Sources */, 456 | 278CD1BE1905F63E00C464A8 /* ofxAssimpTexture.cpp in Sources */, 457 | ); 458 | runOnlyForDeploymentPostprocessing = 0; 459 | }; 460 | /* End PBXSourcesBuildPhase section */ 461 | 462 | /* Begin PBXTargetDependency section */ 463 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { 464 | isa = PBXTargetDependency; 465 | name = openFrameworks; 466 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; 467 | }; 468 | /* End PBXTargetDependency section */ 469 | 470 | /* Begin XCBuildConfiguration section */ 471 | E4B69B4E0A3A1720003C02F2 /* Debug */ = { 472 | isa = XCBuildConfiguration; 473 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 474 | buildSettings = { 475 | ARCHS = "$(NATIVE_ARCH)"; 476 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 477 | COPY_PHASE_STRIP = NO; 478 | DEAD_CODE_STRIPPING = YES; 479 | GCC_AUTO_VECTORIZATION = YES; 480 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 481 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 482 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 483 | GCC_OPTIMIZATION_LEVEL = 0; 484 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 485 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 486 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 487 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 488 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 489 | GCC_WARN_UNUSED_VALUE = NO; 490 | GCC_WARN_UNUSED_VARIABLE = NO; 491 | OTHER_CPLUSPLUSFLAGS = ( 492 | "-D__MACOSX_CORE__", 493 | "-lpthread", 494 | "-mtune=native", 495 | ); 496 | }; 497 | name = Debug; 498 | }; 499 | E4B69B4F0A3A1720003C02F2 /* Release */ = { 500 | isa = XCBuildConfiguration; 501 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 502 | buildSettings = { 503 | ARCHS = "$(NATIVE_ARCH)"; 504 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 505 | COPY_PHASE_STRIP = YES; 506 | DEAD_CODE_STRIPPING = YES; 507 | GCC_AUTO_VECTORIZATION = YES; 508 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 509 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 510 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 511 | GCC_OPTIMIZATION_LEVEL = s; 512 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 513 | GCC_UNROLL_LOOPS = YES; 514 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 515 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 516 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 517 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 518 | GCC_WARN_UNUSED_VALUE = NO; 519 | GCC_WARN_UNUSED_VARIABLE = NO; 520 | OTHER_CPLUSPLUSFLAGS = ( 521 | "-D__MACOSX_CORE__", 522 | "-lpthread", 523 | "-mtune=native", 524 | ); 525 | }; 526 | name = Release; 527 | }; 528 | E4B69B600A3A1757003C02F2 /* Debug */ = { 529 | isa = XCBuildConfiguration; 530 | buildSettings = { 531 | COPY_PHASE_STRIP = NO; 532 | ENABLE_OPENMP_SUPPORT = YES; 533 | FRAMEWORK_SEARCH_PATHS = ( 534 | "$(inherited)", 535 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 536 | ); 537 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; 538 | GCC_DYNAMIC_NO_PIC = NO; 539 | GCC_ENABLE_FIX_AND_CONTINUE = YES; 540 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 541 | GCC_MODEL_TUNING = NONE; 542 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 543 | GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; 544 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 545 | INSTALL_PATH = "$(HOME)/Applications"; 546 | LIBRARY_SEARCH_PATHS = ( 547 | "$(inherited)", 548 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 549 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 550 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 551 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", 552 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", 553 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", 554 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 555 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 556 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 557 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 558 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 559 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 560 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 561 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", 562 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", 563 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 564 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 565 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 566 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 567 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 568 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 569 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 570 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 571 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 572 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", 573 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", 574 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", 575 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", 576 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", 577 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", 578 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", 579 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", 580 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", 581 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", 582 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", 583 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", 584 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", 585 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", 586 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", 587 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", 588 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", 589 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", 590 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", 591 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", 592 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", 593 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", 594 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", 595 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", 596 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", 597 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", 598 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", 599 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", 600 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", 601 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", 602 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", 603 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", 604 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", 605 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", 606 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", 607 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", 608 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)", 609 | /Users/kyle/Documents/openFrameworks/addons/ofxAssimpModelLoader/libs/assimp/lib/osx, 610 | ); 611 | PREBINDING = NO; 612 | PRODUCT_NAME = "$(TARGET_NAME)Debug"; 613 | SDKROOT = macosx10.8; 614 | WRAPPER_EXTENSION = app; 615 | }; 616 | name = Debug; 617 | }; 618 | E4B69B610A3A1757003C02F2 /* Release */ = { 619 | isa = XCBuildConfiguration; 620 | buildSettings = { 621 | COPY_PHASE_STRIP = YES; 622 | ENABLE_OPENMP_SUPPORT = YES; 623 | FRAMEWORK_SEARCH_PATHS = ( 624 | "$(inherited)", 625 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 626 | ); 627 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; 628 | GCC_ENABLE_FIX_AND_CONTINUE = NO; 629 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 630 | GCC_MODEL_TUNING = NONE; 631 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 632 | GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; 633 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 634 | INSTALL_PATH = "$(HOME)/Applications"; 635 | LIBRARY_SEARCH_PATHS = ( 636 | "$(inherited)", 637 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 638 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 639 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 640 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", 641 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", 642 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", 643 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 644 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 645 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 646 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 647 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 648 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 649 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 650 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", 651 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", 652 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 653 | "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", 654 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 655 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 656 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 657 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 658 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 659 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 660 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 661 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 662 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", 663 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", 664 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", 665 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", 666 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", 667 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", 668 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", 669 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", 670 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", 671 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", 672 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", 673 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", 674 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", 675 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", 676 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", 677 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", 678 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", 679 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", 680 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", 681 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", 682 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", 683 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", 684 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", 685 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", 686 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", 687 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", 688 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", 689 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", 690 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", 691 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", 692 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", 693 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", 694 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", 695 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", 696 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", 697 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", 698 | /Users/kyle/Documents/openFrameworks/addons/ofxAssimpModelLoader/libs/assimp/lib/osx, 699 | ); 700 | PREBINDING = NO; 701 | PRODUCT_NAME = "$(TARGET_NAME)"; 702 | SDKROOT = macosx10.8; 703 | WRAPPER_EXTENSION = app; 704 | }; 705 | name = Release; 706 | }; 707 | /* End XCBuildConfiguration section */ 708 | 709 | /* Begin XCConfigurationList section */ 710 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ofApp" */ = { 711 | isa = XCConfigurationList; 712 | buildConfigurations = ( 713 | E4B69B4E0A3A1720003C02F2 /* Debug */, 714 | E4B69B4F0A3A1720003C02F2 /* Release */, 715 | ); 716 | defaultConfigurationIsVisible = 0; 717 | defaultConfigurationName = Release; 718 | }; 719 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ofApp" */ = { 720 | isa = XCConfigurationList; 721 | buildConfigurations = ( 722 | E4B69B600A3A1757003C02F2 /* Debug */, 723 | E4B69B610A3A1757003C02F2 /* Release */, 724 | ); 725 | defaultConfigurationIsVisible = 0; 726 | defaultConfigurationName = Release; 727 | }; 728 | /* End XCConfigurationList section */ 729 | }; 730 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; 731 | } 732 | -------------------------------------------------------------------------------- /Draggable/ofApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 27F1B1AE18318DE3006B1568 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27F1B1A718318DE3006B1568 /* tinyxml.cpp */; }; 11 | 27F1B1AF18318DE3006B1568 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27F1B1A918318DE3006B1568 /* tinyxmlerror.cpp */; }; 12 | 27F1B1B018318DE3006B1568 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27F1B1AA18318DE3006B1568 /* tinyxmlparser.cpp */; }; 13 | 27F1B1B118318DE3006B1568 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27F1B1AC18318DE3006B1568 /* ofxXmlSettings.cpp */; }; 14 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; 15 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; 16 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; 17 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; 18 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; }; 19 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9740E8CC7DD009D7055 /* Carbon.framework */; }; 20 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; }; 21 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; }; 22 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; }; 23 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; }; 24 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; }; 25 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; 26 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; }; 27 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; }; 28 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; }; 29 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; 30 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; }; 31 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; }; 32 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; }; 33 | /* End PBXBuildFile section */ 34 | 35 | /* Begin PBXContainerItemProxy section */ 36 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 39 | proxyType = 2; 40 | remoteGlobalIDString = E4B27C1510CBEB8E00536013; 41 | remoteInfo = openFrameworks; 42 | }; 43 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 46 | proxyType = 1; 47 | remoteGlobalIDString = E4B27C1410CBEB8E00536013; 48 | remoteInfo = openFrameworks; 49 | }; 50 | /* End PBXContainerItemProxy section */ 51 | 52 | /* Begin PBXCopyFilesBuildPhase section */ 53 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = { 54 | isa = PBXCopyFilesBuildPhase; 55 | buildActionMask = 2147483647; 56 | dstPath = ""; 57 | dstSubfolderSpec = 10; 58 | files = ( 59 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */, 60 | ); 61 | runOnlyForDeploymentPostprocessing = 0; 62 | }; 63 | /* End PBXCopyFilesBuildPhase section */ 64 | 65 | /* Begin PBXFileReference section */ 66 | 271086431863A6A800509AE4 /* DraggablePoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DraggablePoint.h; sourceTree = ""; }; 67 | 271086441863A6A800509AE4 /* DraggablePoints.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DraggablePoints.h; sourceTree = ""; }; 68 | 271086451863A6A800509AE4 /* EventWatcher.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EventWatcher.h; sourceTree = ""; }; 69 | 271086461863A6A800509AE4 /* SelectablePoints.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelectablePoints.h; sourceTree = ""; }; 70 | 27F1B17918318DCE006B1568 /* ofxUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUI.h; sourceTree = ""; }; 71 | 27F1B17A18318DCE006B1568 /* ofxUI2DGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUI2DGraph.h; sourceTree = ""; }; 72 | 27F1B17B18318DCE006B1568 /* ofxUI2DPad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUI2DPad.h; sourceTree = ""; }; 73 | 27F1B17C18318DCE006B1568 /* ofxUIBaseDraws.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIBaseDraws.h; sourceTree = ""; }; 74 | 27F1B17D18318DCE006B1568 /* ofxUIBiLabelSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIBiLabelSlider.h; sourceTree = ""; }; 75 | 27F1B17E18318DCE006B1568 /* ofxUIButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIButton.h; sourceTree = ""; }; 76 | 27F1B17F18318DCE006B1568 /* ofxUICanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUICanvas.h; sourceTree = ""; }; 77 | 27F1B18018318DCE006B1568 /* ofxUICircleSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUICircleSlider.h; sourceTree = ""; }; 78 | 27F1B18118318DCE006B1568 /* ofxUICustomImageButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUICustomImageButton.h; sourceTree = ""; }; 79 | 27F1B18218318DCE006B1568 /* ofxUIDropDownList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIDropDownList.h; sourceTree = ""; }; 80 | 27F1B18318318DCE006B1568 /* ofxUIEventArgs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIEventArgs.h; sourceTree = ""; }; 81 | 27F1B18418318DCE006B1568 /* ofxUIFPS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIFPS.h; sourceTree = ""; }; 82 | 27F1B18518318DCE006B1568 /* ofxUIFPSSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIFPSSlider.h; sourceTree = ""; }; 83 | 27F1B18618318DCE006B1568 /* ofxUIImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIImage.h; sourceTree = ""; }; 84 | 27F1B18718318DCE006B1568 /* ofxUIImageButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIImageButton.h; sourceTree = ""; }; 85 | 27F1B18818318DCE006B1568 /* ofxUIImageSampler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIImageSampler.h; sourceTree = ""; }; 86 | 27F1B18918318DCE006B1568 /* ofxUIImageSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIImageSlider.h; sourceTree = ""; }; 87 | 27F1B18A18318DCE006B1568 /* ofxUIImageToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIImageToggle.h; sourceTree = ""; }; 88 | 27F1B18B18318DCE006B1568 /* ofxUILabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUILabel.h; sourceTree = ""; }; 89 | 27F1B18C18318DCE006B1568 /* ofxUILabelButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUILabelButton.h; sourceTree = ""; }; 90 | 27F1B18D18318DCE006B1568 /* ofxUILabelToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUILabelToggle.h; sourceTree = ""; }; 91 | 27F1B18E18318DCE006B1568 /* ofxUIMinimalSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIMinimalSlider.h; sourceTree = ""; }; 92 | 27F1B18F18318DCE006B1568 /* ofxUIMovingGraph.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIMovingGraph.h; sourceTree = ""; }; 93 | 27F1B19018318DCE006B1568 /* ofxUIMultiImageButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIMultiImageButton.h; sourceTree = ""; }; 94 | 27F1B19118318DCE006B1568 /* ofxUIMultiImageSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIMultiImageSlider.h; sourceTree = ""; }; 95 | 27F1B19218318DCE006B1568 /* ofxUIMultiImageToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIMultiImageToggle.h; sourceTree = ""; }; 96 | 27F1B19318318DCE006B1568 /* ofxUINumberDialer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUINumberDialer.h; sourceTree = ""; }; 97 | 27F1B19418318DCE006B1568 /* ofxUIRadio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIRadio.h; sourceTree = ""; }; 98 | 27F1B19518318DCE006B1568 /* ofxUIRangeSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIRangeSlider.h; sourceTree = ""; }; 99 | 27F1B19618318DCE006B1568 /* ofxUIRectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIRectangle.h; sourceTree = ""; }; 100 | 27F1B19718318DCE006B1568 /* ofxUIRotarySlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIRotarySlider.h; sourceTree = ""; }; 101 | 27F1B19818318DCE006B1568 /* ofxUIScrollableCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIScrollableCanvas.h; sourceTree = ""; }; 102 | 27F1B19918318DCE006B1568 /* ofxUISlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUISlider.h; sourceTree = ""; }; 103 | 27F1B19A18318DCE006B1568 /* ofxUISpacer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUISpacer.h; sourceTree = ""; }; 104 | 27F1B19B18318DCE006B1568 /* ofxUISpectrum.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUISpectrum.h; sourceTree = ""; }; 105 | 27F1B19C18318DCE006B1568 /* ofxUISuperCanvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUISuperCanvas.h; sourceTree = ""; }; 106 | 27F1B19D18318DCE006B1568 /* ofxUITextArea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUITextArea.h; sourceTree = ""; }; 107 | 27F1B19E18318DCE006B1568 /* ofxUITextInput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUITextInput.h; sourceTree = ""; }; 108 | 27F1B19F18318DCE006B1568 /* ofxUIToggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIToggle.h; sourceTree = ""; }; 109 | 27F1B1A018318DCE006B1568 /* ofxUIToggleMatrix.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIToggleMatrix.h; sourceTree = ""; }; 110 | 27F1B1A118318DCE006B1568 /* ofxUIValuePlotter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIValuePlotter.h; sourceTree = ""; }; 111 | 27F1B1A218318DCE006B1568 /* ofxUIWaveform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIWaveform.h; sourceTree = ""; }; 112 | 27F1B1A318318DCE006B1568 /* ofxUIWidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIWidget.h; sourceTree = ""; }; 113 | 27F1B1A418318DCE006B1568 /* ofxUIWidgetWithLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxUIWidgetWithLabel.h; sourceTree = ""; }; 114 | 27F1B1A718318DE3006B1568 /* tinyxml.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; 115 | 27F1B1A818318DE3006B1568 /* tinyxml.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; 116 | 27F1B1A918318DE3006B1568 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; 117 | 27F1B1AA18318DE3006B1568 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; 118 | 27F1B1AC18318DE3006B1568 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ofxXmlSettings.cpp; sourceTree = ""; }; 119 | 27F1B1AD18318DE3006B1568 /* ofxXmlSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ofxXmlSettings.h; sourceTree = ""; }; 120 | BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; 121 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; 122 | E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; 123 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; 124 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 125 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 126 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; 127 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 128 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 129 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; 130 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; 131 | E4B69B5B0A3A1756003C02F2 /* ofAppDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ofAppDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; 132 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; 133 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; 134 | E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 135 | E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 136 | E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 137 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; 138 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; 139 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; 140 | E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; 141 | E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; }; 142 | /* End PBXFileReference section */ 143 | 144 | /* Begin PBXFrameworksBuildPhase section */ 145 | E4B69B590A3A1756003C02F2 /* Frameworks */ = { 146 | isa = PBXFrameworksBuildPhase; 147 | buildActionMask = 2147483647; 148 | files = ( 149 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */, 150 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */, 151 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */, 152 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, 153 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */, 154 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */, 155 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */, 156 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */, 157 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */, 158 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */, 159 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */, 160 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */, 161 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */, 162 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */, 163 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */, 164 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */, 165 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXFrameworksBuildPhase section */ 170 | 171 | /* Begin PBXGroup section */ 172 | 271086421863A6A800509AE4 /* SharedCode */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | 271086431863A6A800509AE4 /* DraggablePoint.h */, 176 | 271086441863A6A800509AE4 /* DraggablePoints.h */, 177 | 271086451863A6A800509AE4 /* EventWatcher.h */, 178 | 271086461863A6A800509AE4 /* SelectablePoints.h */, 179 | ); 180 | name = SharedCode; 181 | path = ../../SharedCode; 182 | sourceTree = ""; 183 | }; 184 | 27F1AF9518318DCA006B1568 /* ofxUI */ = { 185 | isa = PBXGroup; 186 | children = ( 187 | 27F1B17818318DCE006B1568 /* src */, 188 | ); 189 | name = ofxUI; 190 | path = ../../../addons/ofxUI; 191 | sourceTree = ""; 192 | }; 193 | 27F1B17818318DCE006B1568 /* src */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | 27F1B17918318DCE006B1568 /* ofxUI.h */, 197 | 27F1B17A18318DCE006B1568 /* ofxUI2DGraph.h */, 198 | 27F1B17B18318DCE006B1568 /* ofxUI2DPad.h */, 199 | 27F1B17C18318DCE006B1568 /* ofxUIBaseDraws.h */, 200 | 27F1B17D18318DCE006B1568 /* ofxUIBiLabelSlider.h */, 201 | 27F1B17E18318DCE006B1568 /* ofxUIButton.h */, 202 | 27F1B17F18318DCE006B1568 /* ofxUICanvas.h */, 203 | 27F1B18018318DCE006B1568 /* ofxUICircleSlider.h */, 204 | 27F1B18118318DCE006B1568 /* ofxUICustomImageButton.h */, 205 | 27F1B18218318DCE006B1568 /* ofxUIDropDownList.h */, 206 | 27F1B18318318DCE006B1568 /* ofxUIEventArgs.h */, 207 | 27F1B18418318DCE006B1568 /* ofxUIFPS.h */, 208 | 27F1B18518318DCE006B1568 /* ofxUIFPSSlider.h */, 209 | 27F1B18618318DCE006B1568 /* ofxUIImage.h */, 210 | 27F1B18718318DCE006B1568 /* ofxUIImageButton.h */, 211 | 27F1B18818318DCE006B1568 /* ofxUIImageSampler.h */, 212 | 27F1B18918318DCE006B1568 /* ofxUIImageSlider.h */, 213 | 27F1B18A18318DCE006B1568 /* ofxUIImageToggle.h */, 214 | 27F1B18B18318DCE006B1568 /* ofxUILabel.h */, 215 | 27F1B18C18318DCE006B1568 /* ofxUILabelButton.h */, 216 | 27F1B18D18318DCE006B1568 /* ofxUILabelToggle.h */, 217 | 27F1B18E18318DCE006B1568 /* ofxUIMinimalSlider.h */, 218 | 27F1B18F18318DCE006B1568 /* ofxUIMovingGraph.h */, 219 | 27F1B19018318DCE006B1568 /* ofxUIMultiImageButton.h */, 220 | 27F1B19118318DCE006B1568 /* ofxUIMultiImageSlider.h */, 221 | 27F1B19218318DCE006B1568 /* ofxUIMultiImageToggle.h */, 222 | 27F1B19318318DCE006B1568 /* ofxUINumberDialer.h */, 223 | 27F1B19418318DCE006B1568 /* ofxUIRadio.h */, 224 | 27F1B19518318DCE006B1568 /* ofxUIRangeSlider.h */, 225 | 27F1B19618318DCE006B1568 /* ofxUIRectangle.h */, 226 | 27F1B19718318DCE006B1568 /* ofxUIRotarySlider.h */, 227 | 27F1B19818318DCE006B1568 /* ofxUIScrollableCanvas.h */, 228 | 27F1B19918318DCE006B1568 /* ofxUISlider.h */, 229 | 27F1B19A18318DCE006B1568 /* ofxUISpacer.h */, 230 | 27F1B19B18318DCE006B1568 /* ofxUISpectrum.h */, 231 | 27F1B19C18318DCE006B1568 /* ofxUISuperCanvas.h */, 232 | 27F1B19D18318DCE006B1568 /* ofxUITextArea.h */, 233 | 27F1B19E18318DCE006B1568 /* ofxUITextInput.h */, 234 | 27F1B19F18318DCE006B1568 /* ofxUIToggle.h */, 235 | 27F1B1A018318DCE006B1568 /* ofxUIToggleMatrix.h */, 236 | 27F1B1A118318DCE006B1568 /* ofxUIValuePlotter.h */, 237 | 27F1B1A218318DCE006B1568 /* ofxUIWaveform.h */, 238 | 27F1B1A318318DCE006B1568 /* ofxUIWidget.h */, 239 | 27F1B1A418318DCE006B1568 /* ofxUIWidgetWithLabel.h */, 240 | ); 241 | path = src; 242 | sourceTree = ""; 243 | }; 244 | 27F1B1A518318DE3006B1568 /* ofxXmlSettings */ = { 245 | isa = PBXGroup; 246 | children = ( 247 | 27F1B1A618318DE3006B1568 /* libs */, 248 | 27F1B1AB18318DE3006B1568 /* src */, 249 | ); 250 | name = ofxXmlSettings; 251 | path = ../../../addons/ofxXmlSettings; 252 | sourceTree = ""; 253 | }; 254 | 27F1B1A618318DE3006B1568 /* libs */ = { 255 | isa = PBXGroup; 256 | children = ( 257 | 27F1B1A718318DE3006B1568 /* tinyxml.cpp */, 258 | 27F1B1A818318DE3006B1568 /* tinyxml.h */, 259 | 27F1B1A918318DE3006B1568 /* tinyxmlerror.cpp */, 260 | 27F1B1AA18318DE3006B1568 /* tinyxmlparser.cpp */, 261 | ); 262 | path = libs; 263 | sourceTree = ""; 264 | }; 265 | 27F1B1AB18318DE3006B1568 /* src */ = { 266 | isa = PBXGroup; 267 | children = ( 268 | 27F1B1AC18318DE3006B1568 /* ofxXmlSettings.cpp */, 269 | 27F1B1AD18318DE3006B1568 /* ofxXmlSettings.h */, 270 | ); 271 | path = src; 272 | sourceTree = ""; 273 | }; 274 | BB4B014C10F69532006C3DED /* addons */ = { 275 | isa = PBXGroup; 276 | children = ( 277 | 27F1B1A518318DE3006B1568 /* ofxXmlSettings */, 278 | 27F1AF9518318DCA006B1568 /* ofxUI */, 279 | ); 280 | name = addons; 281 | sourceTree = ""; 282 | }; 283 | BBAB23C913894ECA00AA2426 /* system frameworks */ = { 284 | isa = PBXGroup; 285 | children = ( 286 | E7F985F515E0DE99003869B5 /* Accelerate.framework */, 287 | E4C2424410CC5A17004149E2 /* AppKit.framework */, 288 | E4C2424510CC5A17004149E2 /* Cocoa.framework */, 289 | E4C2424610CC5A17004149E2 /* IOKit.framework */, 290 | E45BE9710E8CC7DD009D7055 /* AGL.framework */, 291 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */, 292 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */, 293 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */, 294 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */, 295 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */, 296 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */, 297 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */, 298 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */, 299 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */, 300 | E7E077E715D3B6510020DFD4 /* QTKit.framework */, 301 | ); 302 | name = "system frameworks"; 303 | sourceTree = ""; 304 | }; 305 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = { 306 | isa = PBXGroup; 307 | children = ( 308 | BBAB23BE13894E4700AA2426 /* GLUT.framework */, 309 | ); 310 | name = "3rd party frameworks"; 311 | sourceTree = ""; 312 | }; 313 | E4328144138ABC890047C5CB /* Products */ = { 314 | isa = PBXGroup; 315 | children = ( 316 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */, 317 | ); 318 | name = Products; 319 | sourceTree = ""; 320 | }; 321 | E45BE5980E8CC70C009D7055 /* frameworks */ = { 322 | isa = PBXGroup; 323 | children = ( 324 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */, 325 | BBAB23C913894ECA00AA2426 /* system frameworks */, 326 | ); 327 | name = frameworks; 328 | sourceTree = ""; 329 | }; 330 | E4B69B4A0A3A1720003C02F2 = { 331 | isa = PBXGroup; 332 | children = ( 333 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, 334 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, 335 | E4B69E1C0A3A1BDC003C02F2 /* src */, 336 | E4EEC9E9138DF44700A80321 /* openFrameworks */, 337 | BB4B014C10F69532006C3DED /* addons */, 338 | E45BE5980E8CC70C009D7055 /* frameworks */, 339 | E4B69B5B0A3A1756003C02F2 /* ofAppDebug.app */, 340 | ); 341 | sourceTree = ""; 342 | }; 343 | E4B69E1C0A3A1BDC003C02F2 /* src */ = { 344 | isa = PBXGroup; 345 | children = ( 346 | 271086421863A6A800509AE4 /* SharedCode */, 347 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, 348 | ); 349 | path = src; 350 | sourceTree = SOURCE_ROOT; 351 | }; 352 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = { 353 | isa = PBXGroup; 354 | children = ( 355 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, 356 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, 357 | ); 358 | name = openFrameworks; 359 | sourceTree = ""; 360 | }; 361 | /* End PBXGroup section */ 362 | 363 | /* Begin PBXNativeTarget section */ 364 | E4B69B5A0A3A1756003C02F2 /* ofApp */ = { 365 | isa = PBXNativeTarget; 366 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ofApp" */; 367 | buildPhases = ( 368 | E4B69B580A3A1756003C02F2 /* Sources */, 369 | E4B69B590A3A1756003C02F2 /* Frameworks */, 370 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, 371 | E4C2427710CC5ABF004149E2 /* CopyFiles */, 372 | ); 373 | buildRules = ( 374 | ); 375 | dependencies = ( 376 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, 377 | ); 378 | name = ofApp; 379 | productName = myOFApp; 380 | productReference = E4B69B5B0A3A1756003C02F2 /* ofAppDebug.app */; 381 | productType = "com.apple.product-type.application"; 382 | }; 383 | /* End PBXNativeTarget section */ 384 | 385 | /* Begin PBXProject section */ 386 | E4B69B4C0A3A1720003C02F2 /* Project object */ = { 387 | isa = PBXProject; 388 | attributes = { 389 | LastUpgradeCheck = 0460; 390 | }; 391 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ofApp" */; 392 | compatibilityVersion = "Xcode 3.2"; 393 | developmentRegion = English; 394 | hasScannedForEncodings = 0; 395 | knownRegions = ( 396 | English, 397 | Japanese, 398 | French, 399 | German, 400 | ); 401 | mainGroup = E4B69B4A0A3A1720003C02F2; 402 | productRefGroup = E4B69B4A0A3A1720003C02F2; 403 | projectDirPath = ""; 404 | projectReferences = ( 405 | { 406 | ProductGroup = E4328144138ABC890047C5CB /* Products */; 407 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 408 | }, 409 | ); 410 | projectRoot = ""; 411 | targets = ( 412 | E4B69B5A0A3A1756003C02F2 /* ofApp */, 413 | ); 414 | }; 415 | /* End PBXProject section */ 416 | 417 | /* Begin PBXReferenceProxy section */ 418 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { 419 | isa = PBXReferenceProxy; 420 | fileType = archive.ar; 421 | path = openFrameworksDebug.a; 422 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; 423 | sourceTree = BUILT_PRODUCTS_DIR; 424 | }; 425 | /* End PBXReferenceProxy section */ 426 | 427 | /* Begin PBXShellScriptBuildPhase section */ 428 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { 429 | isa = PBXShellScriptBuildPhase; 430 | buildActionMask = 2147483647; 431 | files = ( 432 | ); 433 | inputPaths = ( 434 | ); 435 | outputPaths = ( 436 | ); 437 | runOnlyForDeploymentPostprocessing = 0; 438 | shellPath = /bin/sh; 439 | shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\ncp -f \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n"; 440 | }; 441 | /* End PBXShellScriptBuildPhase section */ 442 | 443 | /* Begin PBXSourcesBuildPhase section */ 444 | E4B69B580A3A1756003C02F2 /* Sources */ = { 445 | isa = PBXSourcesBuildPhase; 446 | buildActionMask = 2147483647; 447 | files = ( 448 | 27F1B1B018318DE3006B1568 /* tinyxmlparser.cpp in Sources */, 449 | 27F1B1AF18318DE3006B1568 /* tinyxmlerror.cpp in Sources */, 450 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, 451 | 27F1B1B118318DE3006B1568 /* ofxXmlSettings.cpp in Sources */, 452 | 27F1B1AE18318DE3006B1568 /* tinyxml.cpp in Sources */, 453 | ); 454 | runOnlyForDeploymentPostprocessing = 0; 455 | }; 456 | /* End PBXSourcesBuildPhase section */ 457 | 458 | /* Begin PBXTargetDependency section */ 459 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { 460 | isa = PBXTargetDependency; 461 | name = openFrameworks; 462 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; 463 | }; 464 | /* End PBXTargetDependency section */ 465 | 466 | /* Begin XCBuildConfiguration section */ 467 | E4B69B4E0A3A1720003C02F2 /* Debug */ = { 468 | isa = XCBuildConfiguration; 469 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 470 | buildSettings = { 471 | ARCHS = "$(NATIVE_ARCH)"; 472 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 473 | COPY_PHASE_STRIP = NO; 474 | DEAD_CODE_STRIPPING = YES; 475 | GCC_AUTO_VECTORIZATION = YES; 476 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 477 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 478 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 479 | GCC_OPTIMIZATION_LEVEL = 0; 480 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 481 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 482 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 483 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 484 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 485 | GCC_WARN_UNUSED_VALUE = NO; 486 | GCC_WARN_UNUSED_VARIABLE = NO; 487 | MACOSX_DEPLOYMENT_TARGET = 10.6; 488 | OTHER_CPLUSPLUSFLAGS = ( 489 | "-D__MACOSX_CORE__", 490 | "-lpthread", 491 | "-mtune=native", 492 | ); 493 | SDKROOT = macosx; 494 | }; 495 | name = Debug; 496 | }; 497 | E4B69B4F0A3A1720003C02F2 /* Release */ = { 498 | isa = XCBuildConfiguration; 499 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 500 | buildSettings = { 501 | ARCHS = "$(NATIVE_ARCH)"; 502 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 503 | COPY_PHASE_STRIP = YES; 504 | DEAD_CODE_STRIPPING = YES; 505 | GCC_AUTO_VECTORIZATION = YES; 506 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 507 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 508 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 509 | GCC_OPTIMIZATION_LEVEL = 3; 510 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 511 | GCC_UNROLL_LOOPS = YES; 512 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 513 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 514 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 515 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 516 | GCC_WARN_UNUSED_VALUE = NO; 517 | GCC_WARN_UNUSED_VARIABLE = NO; 518 | MACOSX_DEPLOYMENT_TARGET = 10.6; 519 | OTHER_CPLUSPLUSFLAGS = ( 520 | "-D__MACOSX_CORE__", 521 | "-lpthread", 522 | "-mtune=native", 523 | ); 524 | SDKROOT = macosx; 525 | }; 526 | name = Release; 527 | }; 528 | E4B69B600A3A1757003C02F2 /* Debug */ = { 529 | isa = XCBuildConfiguration; 530 | buildSettings = { 531 | COMBINE_HIDPI_IMAGES = YES; 532 | COPY_PHASE_STRIP = NO; 533 | FRAMEWORK_SEARCH_PATHS = ( 534 | "$(inherited)", 535 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 536 | ); 537 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; 538 | GCC_DYNAMIC_NO_PIC = NO; 539 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 540 | GCC_MODEL_TUNING = NONE; 541 | ICON = "$(ICON_NAME_DEBUG)"; 542 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; 543 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 544 | INSTALL_PATH = "$(HOME)/Applications"; 545 | LIBRARY_SEARCH_PATHS = ( 546 | "$(inherited)", 547 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 548 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 549 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 550 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", 551 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", 552 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", 553 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 554 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 555 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 556 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 557 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 558 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 559 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 560 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", 561 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", 562 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 563 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 564 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 565 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 566 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 567 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 568 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 569 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 570 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 571 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", 572 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", 573 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", 574 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", 575 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", 576 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", 577 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", 578 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", 579 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", 580 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", 581 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", 582 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", 583 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", 584 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", 585 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", 586 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", 587 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", 588 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", 589 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", 590 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", 591 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", 592 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", 593 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", 594 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", 595 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", 596 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", 597 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", 598 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", 599 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", 600 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", 601 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", 602 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", 603 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", 604 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", 605 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", 606 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", 607 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)", 608 | ); 609 | PRODUCT_NAME = "$(TARGET_NAME)Debug"; 610 | WRAPPER_EXTENSION = app; 611 | }; 612 | name = Debug; 613 | }; 614 | E4B69B610A3A1757003C02F2 /* Release */ = { 615 | isa = XCBuildConfiguration; 616 | buildSettings = { 617 | COMBINE_HIDPI_IMAGES = YES; 618 | COPY_PHASE_STRIP = YES; 619 | FRAMEWORK_SEARCH_PATHS = ( 620 | "$(inherited)", 621 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 622 | ); 623 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; 624 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 625 | GCC_MODEL_TUNING = NONE; 626 | ICON = "$(ICON_NAME_RELEASE)"; 627 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; 628 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 629 | INSTALL_PATH = "$(HOME)/Applications"; 630 | LIBRARY_SEARCH_PATHS = ( 631 | "$(inherited)", 632 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 633 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 634 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 635 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", 636 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", 637 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", 638 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 639 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 640 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 641 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 642 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 643 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 644 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 645 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", 646 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", 647 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", 648 | "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", 649 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", 650 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", 651 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", 652 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", 653 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", 654 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", 655 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", 656 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", 657 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", 658 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", 659 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", 660 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", 661 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", 662 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", 663 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", 664 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", 665 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", 666 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", 667 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", 668 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", 669 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", 670 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", 671 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", 672 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", 673 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", 674 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", 675 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", 676 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", 677 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", 678 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", 679 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", 680 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", 681 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", 682 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", 683 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", 684 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", 685 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", 686 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", 687 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", 688 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", 689 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", 690 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", 691 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", 692 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", 693 | ); 694 | PRODUCT_NAME = "$(TARGET_NAME)"; 695 | WRAPPER_EXTENSION = app; 696 | }; 697 | name = Release; 698 | }; 699 | /* End XCBuildConfiguration section */ 700 | 701 | /* Begin XCConfigurationList section */ 702 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "ofApp" */ = { 703 | isa = XCConfigurationList; 704 | buildConfigurations = ( 705 | E4B69B4E0A3A1720003C02F2 /* Debug */, 706 | E4B69B4F0A3A1720003C02F2 /* Release */, 707 | ); 708 | defaultConfigurationIsVisible = 0; 709 | defaultConfigurationName = Release; 710 | }; 711 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "ofApp" */ = { 712 | isa = XCConfigurationList; 713 | buildConfigurations = ( 714 | E4B69B600A3A1757003C02F2 /* Debug */, 715 | E4B69B610A3A1757003C02F2 /* Release */, 716 | ); 717 | defaultConfigurationIsVisible = 0; 718 | defaultConfigurationName = Release; 719 | }; 720 | /* End XCConfigurationList section */ 721 | }; 722 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; 723 | } 724 | --------------------------------------------------------------------------------