Το συντακτικό μπορούμε να το διαβάσουμε απο το πρότυπο LuaWrapper.h. Σε γενικές γραμμές χρησιμοποιούμε το πρόθεμα of και του στέλνουμε μήνυμα με το σύμβολο ..
Παράδειγμα, αντί ofBackground(0) γράφουμε of.background(0)=.
Για να εισάγουμε ενα καινούργιο περιτύλιγμα σε μια function του openFrameworks εισάγουμε κώδικα μέσα στο module όπως τον κώδικα που φαίνεται στο παράδειγμα παρακάτω:
Note from danomatika (https://github.com/danomatika/ofxLua/issues/12)
Also, it's very important to note the colon : with app:getAmp(). The colon is used when calling a member function on a class instance while the period . is used when accessing a property (app.amp) or calling a global function in a module (gea.getApp(), where "gea" is the module name). Coming from C++, that still trips me up now and then.
/*
* Copyright (c) 2011,2012 Dan Wilcox <danomatika@gmail.com>
*
* BSD Simplified License.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
*
* See https://github.com/danomatika/ofxLua for documentation
*
*/
#pragma once
#include "ofMain.h"
#include "ofxOscLua.h"
#include "ofxLua.h"
class ofWrapper {
public:
/// static function called when binding
static void bind(ofxLua& lua) {
using namespace luabind;
/// example OpenFrameworks api wrapper
///
/// note: this is not the *entire* api
///
module(lua, "of")
[
// Aris Bezas 11:53 AM May 23, 2013
def("backgroundAuto", (void(*)(bool)) &ofSetBackgroundAuto),
class_<ofxOscLua>("osc")
.def(constructor<>())
.def("setup", (void(ofxOscLua::*)()) &ofxOscLua::setup)
.def("update", (void(ofxOscLua::*)()) &ofxOscLua::update)
.def("resp", (void(ofxOscLua::*)(string)) &ofxOscLua::resp)
.def("var", (float(ofxOscLua::*)(string)) &ofxOscLua::var),
// Activate this if you want to use Midi
// class_<ofxMidiLua>("midi")
// .def(constructor<>())
// .def("setup", (void(ofxMidiLua::*)()) &ofxMidiLua::setup)
// .def("update", (void(ofxMidiLua::*)()) &ofxMidiLua::update)
// .def("init", (void(ofxMidiLua::*)(int, float)) &ofxMidiLua::init)
///////////////////////////////
/// \section Graphics
/// openGL wrappers
def("pushMatrix", &ofPushMatrix),
def("popMatrix", &ofPopMatrix),
def("translate", (void(*)(float,float,float)) &ofTranslate),
def("scale", &ofScale),
def("rotate", (void(*)(float,float,float,float)) &ofRotate),
def("rotateX", &ofRotateX),
def("rotateY", &ofRotateY),
def("rotateZ", &ofRotateZ),
def("rotate", (void(*)(float)) &ofRotate),
/// drawing modes
def("setCircleResolution", &ofSetCircleResolution),
def("setCurveResolution", &ofSetCurveResolution),
/// drawing options
def("noFill", &ofNoFill),
def("fill", &ofFill),
def("setLineWidth", &ofSetLineWidth),
/// color options
def("setColor", (void(*)(int)) &ofSetColor),
def("setColor", (void(*)(int,int,int)) &ofSetColor),
def("setColor", (void(*)(int,int,int,int)) &ofSetColor),
def("setHexColor", (void(*)(int)) &ofSetHexColor),
/// blending
//def("enableBlendMode", &ofEnableBlendMode),
//def("disableBlendMode", &ofDisableBlendMode),
/// transparency
def("enableAlphaBlending", &ofEnableAlphaBlending),
def("disableAlphaBlending", &ofDisableAlphaBlending),
/// smooth
def("enableSmoothing", &ofEnableSmoothing),
def("disableSmoothing", &ofDisableSmoothing),
/// drawing style
def("setPolyMode", &ofSetPolyMode),
/// background
def("background", (void(*)(int)) &background),
def("background", (void(*)(int,int)) &ofBackground),
def("background", (void(*)(int,int,int)) &background),
def("background", (void(*)(int,int,int,int)) &ofBackground),
def("clear", (void(*)(float,float,float,float)) &ofClear),
def("clearAlpha", &ofClearAlpha),
/// geometry
def("line", (void(*)(float,float,float,float)) &ofLine),
def("rect", (void(*)(float,float,float,float)) &ofRect),
def("triangle", (void(*)(float,float,float,float,float,float)) &ofTriangle),
def("circle", (void(*)(float,float,float)) &ofCircle),
def("ellipse", (void(*)(float,float,float,float)) &ofEllipse),
def("curve", (void(*)(float,float,float,float,float,float,float,float)) &ofCurve),
def("bezier", (void(*)(float,float,float,float,float,float,float,float)) &ofBezier),
/// polygons
def("beginShape", &ofBeginShape),
def("vertex", (void(*)(float,float)) &ofVertex),
def("curveVertex", (void(*)(float,float)) &ofCurveVertex),
def("bezierVertex", (void(*)(float,float,float,float,float,float)) &ofBezierVertex),
def("endShape", &ofEndShape),
def("nextContour", &ofNextContour),
/// bitmapped text
def("drawBitmapString", (void(*)(string,float,float)) &ofDrawBitmapString),
///////////////////////////////
/// \section PolyLine
class_<ofPolyline>("polyline")
.def(constructor<>())
.enum_("windingMode")
[
value("WINDING_ODD", OF_POLY_WINDING_ODD),
value("WINDING_NONZERO", OF_POLY_WINDING_NONZERO),
value("WINDING_POSITIVE", OF_POLY_WINDING_POSITIVE),
value("WINDING_NEGATIVE", OF_POLY_WINDING_NEGATIVE),
value("WINDING_ABS_GEQ_TWO", OF_POLY_WINDING_ABS_GEQ_TWO)
],
///////////////////////////////
/// \section Rectangle
class_<ofRectangle>("rectangle")
.def(constructor<>())
.def(constructor<const ofRectangle&>())
.def(constructor<float,float,float,float>())
.def("set", (void(ofRectangle::*)(float,float,float,float)) &ofRectangle::set)
.def("set", (void(ofRectangle::*)(const ofRectangle&)) &ofRectangle::set)
.def("setFromCenter", (void(ofRectangle::*)(float,float,float,float)) &ofRectangle::setFromCenter)
//.def("inside", (void(ofRectangle::*)(float,float)) &ofRectangle::inside)
.property("x", &ofRectangle::getX, &ofRectangle::setX)
.property("y", &ofRectangle::getY, &ofRectangle::setY)
.def_readonly("width", &ofRectangle::width)
.def_readonly("height", &ofRectangle::height),
///////////////////////////////
/// \section Color
class_<ofColor>("color")
.def(constructor<>())
.def(constructor<float,float,float,float>())
.def(constructor<float,float,float>())
.def(constructor<float,float>())
.def(constructor<float>())
.def("set", (void(ofColor::*)(float,float,float,float)) &ofColor::set)
//.def("set", (void(ofColor::*)(float,float,float)) &ofColor::set3)
.def("set", (void(ofColor::*)(float,float)) &ofColor::set)
//.def("set", (void(Color::*)(float)) &ofColor::set1)
.def("setHex", &ofColor::setHex)
.def("getHex", &ofColor::getHex)
.def("getHue", &ofColor::getHue)
.def("getSaturation", &ofColor::getSaturation)
.def("getBrightness", &ofColor::getBrightness)
.def("getLightness", &ofColor::getLightness)
.def("setHue", &ofColor::setHue)
.def("setSaturation", &ofColor::setSaturation)
.def("setBrightness", &ofColor::setBrightness),
///////////////////////////////
/// \section Pixels
class_<ofPixels>("pixels")
.def(constructor<>())
.def("allocate", (void(ofPixels::*)(int,int,int)) &ofPixels::allocate)
.def("allocate", (void(ofPixels::*)(int,int,ofPixelFormat)) &ofPixels::allocate)
.def("allocate", (void(ofPixels::*)(int,int,ofImageType)) &ofPixels::allocate)
.def("set", (void(ofPixels::*)(unsigned char)) &ofPixels::set)
.def("set", (void(ofPixels::*)(int,unsigned char)) &ofPixels::set)
.def("swapRgb", &ofPixels::swapRgb)
.def("clear", &ofPixels::clear)
.def("getColor", &ofPixels::getColor)
.def("setColor", &ofPixels::setColor)
.def("getPixelIndex", &ofPixels::getPixelIndex)
.def("getPixel", &getPixel)
.def("setPixel", &setPixel)
.def("isAllocated", &ofPixels::isAllocated)
.def("getWidth", &ofPixels::getWidth)
.def("getHeight", &ofPixels::getHeight)
.def("getImageType", &ofPixels::getImageType)
.def("size", &ofPixels::size)
.enum_("format")
[
value("MONO", OF_PIXELS_MONO),
value("RGB", OF_PIXELS_RGB),
value("RGBA", OF_PIXELS_RGBA),
value("BGRA", OF_PIXELS_BGRA),
value("RGB565", OF_PIXELS_RGB565)
],
///////////////////////////////
/// \section Image
class_<ofImage>("image")
.def(constructor<>())
.def(constructor<const string&>())
.def("allocate", &ofImage::allocate)
.def("clear", &ofImage::clear)
.def("loadImage", (bool(ofImage::*)(string)) &ofImage::loadImage)
.def("getPixels", &ofImage::getPixelsRef)
.def("setImageType", &ofImage::setImageType)
.def("getColor", &ofImage::getColor)
.def("setColor", &ofImage::setColor)
.def("resize", &ofImage::resize)
.def("update", &ofImage::update)
.def("draw", (void(ofImage::*)(float,float)) &ofImage::draw)
.def("draw", (void(ofImage::*)(float,float,float,float)) &ofImage::draw)
.def("getHeight", &ofImage::getHeight)
.def("getWidth", &ofImage::getWidth)
.def("allocated", &ofImage::bAllocated)
.def_readonly("width", &ofImage::width)
.def_readonly("height", &ofImage::height)
.def_readonly("bpp", &ofImage::bpp)
.enum_("imageType")
[
value("GRAYSCALE", OF_IMAGE_GRAYSCALE),
value("COLOR", OF_IMAGE_COLOR),
value("COLOR_ALPHA", OF_IMAGE_COLOR_ALPHA),
value("UNDEFINED", OF_IMAGE_UNDEFINED)
],
///////////////////////////////
/// \section Font
class_<ofTrueTypeFont>("font")
.def(constructor<>())
.def("loadFont", &loadFont2)
.def("loadFont", &loadFont4)
.def("loadFont", (void(ofTrueTypeFont::*)(string,int,bool,bool,bool,float)) &ofTrueTypeFont::loadFont)
.def("isLoaded", &ofTrueTypeFont::isLoaded)
.def("getLineHeight", &ofTrueTypeFont::getLineHeight)
.def("setLineHeight", &ofTrueTypeFont::setLineHeight)
.def("getLetterSpacing", &ofTrueTypeFont::getLetterSpacing)
.def("setLetterSpacing", &ofTrueTypeFont::setLetterSpacing)
.def("getSpaceSize", &ofTrueTypeFont::getSpaceSize)
.def("setSpaceSize", &ofTrueTypeFont::setSpaceSize)
.def("stringWidth", &ofTrueTypeFont::stringWidth)
.def("stringHeight", &ofTrueTypeFont::stringHeight)
.def("getStringBoundingBox", &ofTrueTypeFont::getStringBoundingBox)
.def("drawString", &ofTrueTypeFont::drawString)
.def("drawStringAsShapes", &ofTrueTypeFont::drawStringAsShapes),
///////////////////////////////
/// \section Math
def("random", (float(*)(float)) &ofRandom),
def("random", (float(*)(float,float)) &ofRandom),
///////////////////////////////
/// \section App
/// input properties
def("mouseX", &getMouseX),
def("mouseY", &getMouseY),
/// exit
def("exit", (void(*)(void)) &ofExit),
def("exit", (void(*)(int)) &ofExit),
/// time
def("getFrameRate", &ofGetFrameRate),
def("getFrameNum", &ofGetFrameNum),
def("setFrameRate", &ofSetFrameRate),
def("sleepMillis", &ofSleepMillis),
def("getLastFrameTime", &ofGetLastFrameTime),
/// cursor
def("hideCursor", &ofHideCursor),
def("showCursor", &ofShowCursor),
/// window / screen
def("getWindowPositionX", &ofGetWindowPositionX),
def("getWindowPositionY", &ofGetWindowPositionY),
def("getScreenWidth", &ofGetScreenWidth),
def("getScreenHeight", &ofGetScreenHeight),
def("getWindowMode", &ofGetWindowMode),
def("getWidth", &ofGetWidth),
def("getHeight", &ofGetHeight),
def("getWindowWidth", &ofGetWindowWidth),
def("getWindowHeight", &ofGetWindowHeight),
def("setWindowPosition", &ofSetWindowPosition),
def("setWindowShape", &ofSetWindowShape),
def("setWindowTitle", &ofSetWindowTitle),
def("enableSetupScreen", &ofEnableSetupScreen),
def("disableSetupScreen", &ofDisableSetupScreen),
def("setFullscreen", &ofSetFullscreen),
def("toggleFullscreen", &ofToggleFullscreen),
/// sync
def("setVerticalSync", &ofSetVerticalSync),
///////////////////////////////
/// \section Utils
def("nextPow2", &ofNextPow2),
def("resetElapsedTimeCounter", &ofResetElapsedTimeCounter),
def("getElapsedTime", &ofGetElapsedTimef),
def("getElapsedTimeMillis", &ofGetElapsedTimeMillis),
def("getElapsedTimeMicros", &ofGetElapsedTimeMicros),
def("getSeconds", &ofGetSeconds),
def("getMinutes", &ofGetMinutes),
def("getHours", &ofGetHours),
def("getUnixTime", &ofGetUnixTime),
def("getSystemTime", &ofGetSystemTime),
def("getSystemTimeMicros", &ofGetSystemTimeMicros),
def("getTimestampString", (string(*)(void)) &ofGetTimestampString),
def("getTimestampString", (string(*)(string)) &ofGetTimestampString),
def("getYear", &ofGetYear),
def("getMonth", &ofGetMonth),
def("getDay", &ofGetDay),
def("getWeekday", &ofGetWeekday),
def("launchBrowser", &ofLaunchBrowser)
];
///////////////////////////////
/// \section Add Values
/// add some constant values to the lua state
lua.doString("math.TWO_PI = "+ofToString(TWO_PI));
}
/// \section Function & Object Wrappers
/// background
static void background(int brightness) {ofBackground(brightness);}
static void background(int r, int g, int b) {ofBackground(r, g, b);}
/// ofPixels
static unsigned char getPixel(ofPixels* pixels, int index) {
return pixels->getPixels()[index];
}
static void setPixel(ofPixels* pixels, int index, unsigned char p) {
pixels->getPixels()[index] = p;
}
/// global mouse vars
static int getMouseX() {return ofGetAppPtr()->mouseX;}
static int getMouseY() {return ofGetAppPtr()->mouseY;}
/// ofTrueTypeFont
static void loadFont2(ofTrueTypeFont* font, string filename, int fontsize) {
font->loadFont(filename, fontsize);
}
static void loadFont4(ofTrueTypeFont* font, string filename, int fontsize, bool _bAntiAliased, bool _bFullCharacterSet) {
font->loadFont(filename, fontsize, _bAntiAliased, _bFullCharacterSet);
}
};