Python, openFrameworks (c ++)

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

Python, openFrameworks (c ++)
Python C ++ Notizen
Python C / C ++ - Erweiterungsmusterzeiger
Weiter Python in C-Sprache
C-API in Python 3
ABC147 C --HonestOrUnkind2 [Python]
Erweitern Sie Python in C ++ (Boost.NumPy)
Geschwindigkeitsvergleich von Python, Java, C ++
PyTorch C ++ VS Python (Ausgabe 2019)
Python
Binäre Suche in Python / C ++
Mehrstufige Auswahl (C # / Python) (alt)
Ich habe die C-Erweiterung von Python ausprobiert
Python wurde von C-Programmierern gestartet
ABC-Memorandum [ABC159 C - Maximales Volumen] (Python)
Löse ABC163 A ~ C mit Python
Rufen Sie C von Python mit DragonFFI auf
Erstellen Sie Awaitable mit der Python / C-API
Mehrstufige Auswahl (Go / C # / Ruby / Python)
Rufen Sie popcount von Ruby / Python / C # auf
Einführung in Protobuf-c (C-Sprache ⇔ Python)
Python-Spickzettel (für C ++ erfahren)
Löse ABC168 A ~ C mit Python
ABC-Memorandum [ABC161 C - Integer ersetzen] (Python)
Löse ABC036 A ~ C mit Python
Tipps zum Aufrufen von Python von C.
Führen Sie Python-Code über die C # -GUI aus
So verpacken Sie C in Python
ABC-Memorandum [ABC158 C - Steuererhöhung] (Python)
AtCoder ABC 114 C-755 mit Python3 gelöst
C / C ++ - Programmierer fordert Python heraus (erster Schritt)
Löse ABC162 A ~ C mit Python
Führen Sie Python-Skripte synchron von C # aus
Löse ABC167 A ~ C mit Python
ABC128 A, B, C Kommentar (Python)
Löse ABC158 A ~ C mit Python
ABC126 A, B, C Erklärung (Python)
Löse ABC037 A ~ C mit Python
Schreiben Sie einen C-Sprach-Unit-Test in Python
AtCoder Anfängerwettbewerb 174 C Problem (Python)
Rufen Sie C / C ++ von Python auf dem Mac auf
Rufen Sie die c-Sprache von Python aus auf (python.h)
Vergleich der Deserialisierungsleistung von msgpack (C ++ / Python / Ruby)
Kafka Python
Python-Grundlagen ⑤
Python-Zusammenfassung
Eingebaute Python
Python-Einschlussnotation
Python-Technik
Python studieren
Python 2.7 Countdown
Python-Memorandum
Python FlowFishMaster
Python-Dienst
Python-Tipps
Python-Funktion ①
Python-Grundlagen