282 lines
7.8 KiB
C
282 lines
7.8 KiB
C
|
/** \file
|
||
|
* \brief mglplot binding for Lua 5.
|
||
|
*
|
||
|
* See Copyright Notice in "iup.h"
|
||
|
*/
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#include <lua.h>
|
||
|
#include <lauxlib.h>
|
||
|
|
||
|
#include "iup.h"
|
||
|
#include "iup_mglplot.h"
|
||
|
|
||
|
#include "iuplua.h"
|
||
|
#include "iuplua_mglplot.h"
|
||
|
#include "il.h"
|
||
|
|
||
|
static int PlotBegin(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
IupMglPlotBegin(ih, luaL_checkinteger(L,2));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotAdd1D(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
IupMglPlotAdd1D(ih, luaL_checkstring(L,2), luaL_checknumber(L,3));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotAdd2D(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
IupMglPlotAdd2D(ih, luaL_checknumber(L,2), luaL_checknumber(L,3));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotAdd3D(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
IupMglPlotAdd3D(ih, luaL_checknumber(L,2), luaL_checknumber(L,3), luaL_checknumber(L,4));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotEnd(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
int ret = IupMglPlotEnd(ih);
|
||
|
lua_pushinteger(L, ret);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int PlotInsert1D(lua_State *L)
|
||
|
{
|
||
|
double *py;
|
||
|
char* *px;
|
||
|
int count = luaL_checkinteger(L, 6);
|
||
|
px = iuplua_checkstring_array(L, 4, count);
|
||
|
py = iuplua_checkdouble_array(L, 5, count);
|
||
|
IupMglPlotInsert1D(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), luaL_checkinteger(L,3), px, py, count);
|
||
|
free(px);
|
||
|
free(py);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotInsert2D(lua_State *L)
|
||
|
{
|
||
|
double *px, *py;
|
||
|
int count = luaL_checkinteger(L, 6);
|
||
|
px = iuplua_checkdouble_array(L, 4, count);
|
||
|
py = iuplua_checkdouble_array(L, 5, count);
|
||
|
IupMglPlotInsert2D(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), luaL_checkinteger(L,3), px, py, count);
|
||
|
free(px);
|
||
|
free(py);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotInsert3D(lua_State *L)
|
||
|
{
|
||
|
double *px, *py, *pz;
|
||
|
int count = luaL_checkinteger(L, 7);
|
||
|
px = iuplua_checkdouble_array(L, 4, count);
|
||
|
py = iuplua_checkdouble_array(L, 5, count);
|
||
|
pz = iuplua_checkdouble_array(L, 6, count);
|
||
|
IupMglPlotInsert3D(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), luaL_checkinteger(L,3), px, py, pz, count);
|
||
|
free(px);
|
||
|
free(py);
|
||
|
free(pz);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotSet1D(lua_State *L)
|
||
|
{
|
||
|
double *py;
|
||
|
char* *px;
|
||
|
int count = luaL_checkinteger(L, 5);
|
||
|
px = iuplua_checkstring_array(L, 3, count);
|
||
|
py = iuplua_checkdouble_array(L, 4, count);
|
||
|
IupMglPlotSet1D(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), px, py, count);
|
||
|
free(px);
|
||
|
free(py);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotSet2D(lua_State *L)
|
||
|
{
|
||
|
double *px, *py;
|
||
|
int count = luaL_checkinteger(L, 5);
|
||
|
px = iuplua_checkdouble_array(L, 3, count);
|
||
|
py = iuplua_checkdouble_array(L, 4, count);
|
||
|
IupMglPlotSet2D(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), px, py, count);
|
||
|
free(px);
|
||
|
free(py);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotSet3D(lua_State *L)
|
||
|
{
|
||
|
double *px, *py, *pz;
|
||
|
int count = luaL_checkinteger(L, 6);
|
||
|
px = iuplua_checkdouble_array(L, 3, count);
|
||
|
py = iuplua_checkdouble_array(L, 4, count);
|
||
|
pz = iuplua_checkdouble_array(L, 5, count);
|
||
|
IupMglPlotSet3D(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), px, py, pz, count);
|
||
|
free(px);
|
||
|
free(py);
|
||
|
free(pz);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotSetFormula(lua_State *L)
|
||
|
{
|
||
|
IupMglPlotSetFormula(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), luaL_checkstring(L,3), luaL_checkstring(L,4), luaL_checkstring(L,5), luaL_checkinteger(L,6));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotLoadData(lua_State *L)
|
||
|
{
|
||
|
IupMglPlotLoadData(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), luaL_checkstring(L,3), luaL_checkinteger(L,4), luaL_checkinteger(L,5), luaL_checkinteger(L,6));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotSetFromFormula(lua_State *L)
|
||
|
{
|
||
|
IupMglPlotSetFromFormula(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), luaL_checkstring(L,3), luaL_checkinteger(L,4), luaL_checkinteger(L,5), luaL_checkinteger(L,6));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotSetData(lua_State *L)
|
||
|
{
|
||
|
int count_x = luaL_checkinteger(L,4),
|
||
|
count_y = luaL_checkinteger(L,5),
|
||
|
count_z = luaL_checkinteger(L,6);
|
||
|
double* data = iuplua_checkdouble_array(L, 3, count_x*count_y*count_z);
|
||
|
IupMglPlotSetData(iuplua_checkihandle(L,1), luaL_checkinteger(L,2), data, count_x, count_y, count_z);
|
||
|
free(data);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotTransform(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
int ix, iy;
|
||
|
IupMglPlotTransform(ih, luaL_checknumber(L,2), luaL_checknumber(L,3), luaL_checknumber(L,4), &ix, &iy);
|
||
|
lua_pushinteger(L, ix);
|
||
|
lua_pushinteger(L, iy);
|
||
|
return 2;
|
||
|
}
|
||
|
|
||
|
static int PlotTransformTo(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
double x, y, z;
|
||
|
IupMglPlotTransformTo(ih, luaL_checkinteger(L,2), luaL_checkinteger(L,3), &x, &y, &z);
|
||
|
lua_pushnumber(L, x);
|
||
|
lua_pushnumber(L, y);
|
||
|
lua_pushnumber(L, z);
|
||
|
return 3;
|
||
|
}
|
||
|
|
||
|
static int PlotNewDataSet(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
int ret = IupMglPlotNewDataSet(ih, luaL_checkinteger(L,2));
|
||
|
lua_pushinteger(L, ret);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static int PlotPaintTo(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
const char* format = luaL_checkstring(L,2);
|
||
|
void* data = NULL;
|
||
|
|
||
|
if (*format == 'E' || *format == 'S') //EPS or SVG
|
||
|
data = (void*)luaL_checkstring(L, 6);
|
||
|
else if (*format == 'R') //RGB
|
||
|
{
|
||
|
if (!lua_islightuserdata(L, 6))
|
||
|
luaL_argerror(L, 6, "data must be a light user data");
|
||
|
data = lua_touserdata(L, 6);
|
||
|
}
|
||
|
else
|
||
|
luaL_argerror(L, 2, "invalid format");
|
||
|
|
||
|
IupMglPlotPaintTo(ih, format, luaL_checkinteger(L,3), luaL_checkinteger(L,4), luaL_checknumber(L,5), data);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotDrawMark(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
IupMglPlotDrawMark(ih, luaL_checknumber(L,2), luaL_checknumber(L,3), luaL_checknumber(L,4));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotDrawLine(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
IupMglPlotDrawLine(ih, luaL_checknumber(L,2), luaL_checknumber(L,3), luaL_checknumber(L,4),
|
||
|
luaL_checknumber(L,5), luaL_checknumber(L,6), luaL_checknumber(L,7));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int PlotDrawText(lua_State *L)
|
||
|
{
|
||
|
Ihandle *ih = iuplua_checkihandle(L,1);
|
||
|
IupMglPlotDrawText(ih, luaL_checkstring(L,2), luaL_checknumber(L,3), luaL_checknumber(L,4), luaL_checknumber(L,5));
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int iupmgllabellua_open(lua_State * L);
|
||
|
|
||
|
void iuplua_mglplotfuncs_open(lua_State *L)
|
||
|
{
|
||
|
iupmgllabellua_open(L);
|
||
|
|
||
|
iuplua_register(L, PlotBegin ,"MglPlotBegin");
|
||
|
iuplua_register(L, PlotAdd1D ,"MglPlotAdd1D");
|
||
|
iuplua_register(L, PlotAdd2D ,"MglPlotAdd2D");
|
||
|
iuplua_register(L, PlotAdd3D ,"MglPlotAdd3D");
|
||
|
iuplua_register(L, PlotEnd ,"MglPlotEnd");
|
||
|
iuplua_register(L, PlotNewDataSet ,"MglPlotNewDataSet");
|
||
|
iuplua_register(L, PlotInsert1D ,"MglPlotInsert1D");
|
||
|
iuplua_register(L, PlotInsert2D ,"MglPlotInsert2D");
|
||
|
iuplua_register(L, PlotInsert3D ,"MglPlotInsert3D");
|
||
|
iuplua_register(L, PlotSet1D ,"MglPlotSet1D");
|
||
|
iuplua_register(L, PlotSet2D ,"MglPlotSet2D");
|
||
|
iuplua_register(L, PlotSet3D ,"MglPlotSet3D");
|
||
|
iuplua_register(L, PlotSetFormula ,"MglPlotSetFormula");
|
||
|
iuplua_register(L, PlotSetData ,"MglPlotSetData");
|
||
|
iuplua_register(L, PlotLoadData ,"MglPlotLoadData");
|
||
|
iuplua_register(L, PlotSetFromFormula,"MglPlotSetFromFormula");
|
||
|
iuplua_register(L, PlotTransform ,"MglPlotTransform");
|
||
|
iuplua_register(L, PlotTransformTo ,"MglPlotTransformTo");
|
||
|
iuplua_register(L, PlotDrawMark ,"MglPlotDrawMark");
|
||
|
iuplua_register(L, PlotDrawLine ,"MglPlotDrawLine");
|
||
|
iuplua_register(L, PlotDrawText ,"MglPlotDrawText");
|
||
|
iuplua_register(L, PlotPaintTo ,"MglPlotPaintTo");
|
||
|
}
|
||
|
|
||
|
int iupmglplotlua_open(lua_State * L);
|
||
|
|
||
|
int iup_mglplotlua_open(lua_State * L)
|
||
|
{
|
||
|
if (iuplua_opencall_internal(L))
|
||
|
IupMglPlotOpen();
|
||
|
|
||
|
iuplua_get_env(L);
|
||
|
iupmglplotlua_open(L);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/* obligatory to use require"iuplua_mglplot" */
|
||
|
int luaopen_iuplua_mglplot(lua_State* L)
|
||
|
{
|
||
|
return iup_mglplotlua_open(L);
|
||
|
}
|
||
|
|