Führen Sie Python in openFrameworks (c ++) aus.
Dieser Artikel ist nur ein persönliches Memorandum, in dem ich den Artikel des großen Pioniers ausprobiert habe.
Dieser Artikel stammt aus dem gerade veröffentlichten Artikel von @ Hzikajr. http://qiita.com/Hzikajr/items/afe73cb287af5ab90265 ist. Sie sollten es auf jeden Fall lesen und nicht meinen Artikel wie diesen. Oder lieber lesen. Es gibt keine wichtigen Punkte in diesem Artikel.
pyenv hier bezeichnet: http://www.python-izm.com/contents/basis/pyenv.shtml
Ich persönlich hatte Probleme mit der Zusammenarbeit zwischen Python und OF, daher war es sehr hilfreich. Der Test befindet sich in genau derselben Umgebung wie @Hzikajr. satoruhiga's ofxPy https://github.com/satoruhiga/ofxPy Ich habe auch einige Beispiele in ausprobiert.
bin/data/python/test_script.py
print('hello from test_script.py')
def my_fn():
print ('hello from python function')
def my_fn2(theta):
import math
a = math.sin(theta * math.pi)
return a
def get_random():
import random
return (random.random(), random.random())
def size_expression(t):
import math
return abs(math.sin(t * math.pi) + math.sin(t * math.pi * 1.5))
ofApp.h
#pragma once
#include "ofMain.h"
#include "ofxPy.h"
class ofApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void keyPressed(int key);
void keyReleased(int key);
void mouseMoved(int x, int y );
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void mouseEntered(int x, int y);
void mouseExited(int x, int y);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
ofxPy::Context python;
};
ofApp.cpp
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){
putenv((char *)"PYTHONHOME=/Users/ksumiya/.pyenv/versions/anaconda3-4.3.1");
python.setup();
ofSetFrameRate(60);
ofSetVerticalSync(true);
ofBackground(0);
// append data/python to PYTHONPATH
python.appendPath(ofToDataPath("python"));
// import and call python script function
python.exec("import test_script; test_script.my_fn()");
}
//--------------------------------------------------------------
void ofApp::update(){
ofSetWindowTitle(ofToString(ofGetFrameRate()));
}
//--------------------------------------------------------------
void ofApp::draw(){
// get tuple return value
auto v = python.eval<ofxPy::tuple>("test_script.get_random()");
// unpack and cast array-like object
float x = ofxPy::get<float>(v, 0) * ofGetWidth();
float y = ofxPy::get<float>(v, 1) * ofGetHeight();
ofDrawRectangle(x, y, 10, 10);
// get function and call with argument
float s = python.eval("test_script.size_expression").call(ofGetElapsedTimef()).cast<float>();
ofDrawCircle(ofGetMouseX(), ofGetMouseY(), s * 50);
float a = python.eval("test_script.my_fn2").call(0.25).cast<float>();
string msg;
msg += ofToString(1/a) + "\n";
ofSetColor(255);
ofDrawBitmapString(msg, 100, 100);
}
Ich habe nur den Teil `my_fn2``` hinzugefügt. Infolgedessen wird es, da es 1 / sin (pi / 4) ist, zu
sqrt (2)
und
1.414 ...
`wird ausgegeben.
Pionier, großartig ...
Recommended Posts