#include <Imagine/Graphics.h>
using namespace std;
const bool stepByStep=true;
void aWindow()
{
cout << "A window ... click when done" << endl;
}
void twoWindows()
{
cout << "Two windows ... click when done" << endl;
}
void twoDimBasics() {
cout << "Basic 2D drawings ... click when done" << endl;
for (int i=0;i<20;i+=2)
int px[]={201,200,260,240},py[]={301,350,330,280};
int t[]={300,300,300,400,400,350};
}
void bitmapBasics() {
cout << "Basic bitmap drawings... click when done" << endl;
byte r[256*256],g[256*256],b[256*256];
for (int j=0;j<256;j++) {
for (int i=0;i<256;i++) {
r[i+256*j]=i;
g[i+256*j]=255-i;
b[i+256*j]=(j<128)?255:0;
}
}
for (int j=0;j<256;j++)
for (int i=0;i<256;i++)
cols[i+256*j]=
Color(i,(2*j)%256,(i+j)%256);
for (int j=0;j<256;j++)
for (int i=0;i<256;i++)
grey[i+256*j]=
byte(128+127*sin((i+j)/10.));
}
void mouseBasics() {
cout << "Basic mouse functions" << endl;
int button;
}
void imageBasics() {
cout << "Basic image reading/writing. click when done" << endl;
int w,h;
byte *r,*g,*b;
delete[]r;delete[]g;delete[]b;
delete[]I;
}
void captureFunctions()
{
int w = 456;
int h = 444;
byte *img_source;
return;
do {
} while(p2.x()-p1.x()<=0 || p2.y()-p1.y()<=0);
byte *capt_r = new byte[(p2.x()-p1.x())*(p2.y()-p1.y())];
byte *capt_g = new byte[(p2.x()-p1.x())*(p2.y()-p1.y())];
byte *capt_b = new byte[(p2.x()-p1.x())*(p2.y()-p1.y())];
captureRectangle(p1.x(), p1.y(), capt_r, capt_g, capt_b, p2.x()-p1.x(), p2.y()-p1.y());
putColorImage(p1.x(), p1.y(), capt_r, capt_g, capt_b, p2.x()-p1.x(), p2.y()-p1.y());
delete [] capt_r;
delete [] capt_g;
delete [] capt_b;
}
void naiveAnimation()
{
for(int i = 0; i < 10; i++)
{
fillRect(rand()%300, rand()%300, rand()%50, rand()%50,
Color(rand()%256, rand()%256, rand()%256));
}
cout << "Finished!" << endl;
}
void fastDrawings() {
cout << "Fast drawings ... click when done" << endl;
for (int i=0;i<1000;i++) {
double r=200*i/1000.;
}
for (int i=0;i<100;i+=5) {
}
const int sz=128;
byte r[sz*sz],g[sz*sz],b[sz*sz];
for (int y=0;y<sz;y++) {
for (int x=0;x<sz;x++) {
r[x+sz*y]=2*x;
g[x+sz*y]=2*y;
b[x+sz*y]=2*(x+y);
}
}
natBM.setColorImage(0,0,r,g,b,sz,sz);
for (int y=0;y<64;y++)
for (int x=0;x<64;x++)
cl[x+64*y]=
Color((x+y)%256,0,0);
natBM.setColorImage(
IntPoint2(32,32),cl,64,64);
for (int x=0;x<sz;x++)
for (int i=0;i<20;i++) {
double f=1+0.8*sin(i/2.);
putNativeBitmap(
int(256-sz/2+100*cos(i/4.0)),
int(256-sz/2+100*sin(i/4.0)),natBM,
true,f);
putNativeBitmap(
int(256-sz/2+100*cos(i/4.0)),
int(256-sz/2+100*sin(i/4.0)),natBM,
true,f);
}
}
void imageAnimation()
{
cout << "check 'ksmall.jpg' path" << endl;
cout <<
srcPath(
"ksmall.jpg") << endl;
int w, h;
for (int y = 0; y < h; ++y)
for (int x = 0; x < w; ++x)
for (int y = 0; y < h; ++y)
for (int x = 0; x < w; ++x)
std::cout << "wait for click!" << std::endl;
int x = 0, y = 0;
int step = 1;
for(int i = 0; i < 5*w/2; i++)
{
x += step;
if (x < 0 || x > w)
step *= -1;
}
cout << "Finished!" << endl;
}
void advancedEvents()
{
cout << "Advanced event handling" << endl;
drawString(10,30,
"Come back here again and press Up Arrow when done",
RED);
do {
case EVT_NONE:
cout << "No event for 500ms" << endl;
break;
case EVT_MOTION:
cout << "Motion" << endl;
break;
case EVT_KEY_ON:
cout <<
"Key " << ev.
key <<
" pressed"<< endl;
break;
case EVT_KEY_OFF:
cout <<
"Key " << ev.
key <<
" released"<< endl;
break;
case EVT_BUT_ON:
cout <<
"Button " << ev.
button <<
" pressed"<< endl;
break;
case EVT_BUT_OFF:
cout <<
"Button " << ev.
button <<
" released"<< endl;
break;
}
cout <<
" Mouse=[" << ev.
pix.
x() <<
','<<ev.
pix.
y() <<
"] "
<<
",Win=" << ev.
win <<
",SubWin=" << ev.
subWin << endl;
}
void subWindows()
{
cout << "A window with sub windows..." << endl;
string names[]={"sub window 0","sub window 1","sub window 2"};
}
#ifdef IMAGINE_OPENGL
void threeDim()
{
Mesh Sphere = Mesh::Sphere(centerSphere, 0.8);
Mesh Cylinder = Mesh::Cylinder(centerCylinder, axisCylinder, 0.8);
Mesh Cone = Mesh::Cone(centerCone, axisCone, 0.8);
Mesh Plane = Mesh::Plane(centerPlane, axisPlane1, axisPlane2);
Mesh Cube = Mesh::Cube(centerCube, axis1Cube, axis2Cube, axis3Cube);
Mesh Arrow = Mesh::Arrow(baseArrow, shaftArrow, 0.5);
for(int i = 0; i < n; i++)
{
points_[i].
x() = Sphere.
vertices()[i].x() + 3;
points_[i].
y() = Sphere.
vertices()[i].y() + 3;
points_[i].
z() = Sphere.
vertices()[i].z() + 3;
}
Mesh PointCloud = Mesh::PointCloud(points_, Sphere.
vertices().size());
Mesh PolyLine = Mesh::PolyLine(points_, n,
false);
string fileName =
srcPath(
"bunny.obj");
cout << "Reading filename: \"" << fileName << "\"" << endl;
readMeshFromObjFile(Bunny, fileName);
mesh=Bunny; cout << "Bunny" << endl;
mesh=Sphere; cout << "Sphere" << endl;
mesh=Cylinder; cout << "Cylinder" << endl;
mesh=Cone; cout << "Cone" << endl;
mesh=Plane; cout << "Plane" << endl;
mesh=Cube; cout << "Cube" << endl;
mesh=Arrow; cout << "Arrow" << endl;
mesh=PointCloud; cout << "Point cloud" << endl;
mesh=PolyLine; cout << "PolyLine" << endl;
}
#endif
int main(int argc, char** argv) {
typedef void (*FUNC)();
vector< pair<string,FUNC> > tests;
#define ADD_TEST(func) \
tests.push_back(make_pair(string(#func), func));
ADD_TEST(aWindow);
ADD_TEST(twoWindows);
ADD_TEST(twoDimBasics);
ADD_TEST(bitmapBasics);
ADD_TEST(mouseBasics);
ADD_TEST(imageBasics);
ADD_TEST(subWindows);
ADD_TEST(naiveAnimation);
ADD_TEST(imageAnimation);
ADD_TEST(fastDrawings);
ADD_TEST(advancedEvents);
ADD_TEST(captureFunctions);
#ifdef IMAGINE_OPENGL
ADD_TEST(threeDim);
#endif
std::vector< pair<string,FUNC> >::const_iterator it;
if(argc<=1)
for(it=tests.begin(); it!=tests.end(); ++it) {
cout << "---" << it->first << "---" << std::endl;
it->second();
}
else {
bool fail=false;
for(int i=1; i<argc; i++) {
for(it=tests.begin(); it!=tests.end(); ++it) {
if(it->first == argv[i]) {
cout << "---" << it->first << "---" << std::endl;
it->second();
break;
}
}
if(it==tests.end()) {
std::cout << "Unknown test " << argv[i] << endl;
fail = true;
}
}
if(fail) {
cout << "--- Available tests:" << endl;
for(it=tests.begin(); it!=tests.end(); ++it)
cout << it->first << ' ';
cout << endl;
}
}
return 0;
}
Vector of fixed size.
Definition: FVector.h:17
const T & z() const
Read alias.
Definition: FVector.h:132
const T & y() const
Read alias.
Definition: FVector.h:118
const T & x() const
Read alias.
Definition: FVector.h:104
A mesh representing a 3D object.
Definition: Mesh.h:151
const std::vector< FloatPoint3 > & vertices() const
Get points.
void setColor(Color col)
Set color.
void setOpacity(float opacity)
Set opacity.
Native bitmap: image stored in graphics card format, fast to display.
Definition: ImageIO.h:514
RED GREEN BLUE color.
Definition: Color.h:26
#define srcPath(s)
Transform relative file path to absolute path.
Definition: Base.h:51
const Color CYAN
Predefined color.
Definition: Color.h:323
const Color BLACK
Predefined color.
Definition: Color.h:293
const Color BLUE
Predefined color.
Definition: Color.h:299
RGB< byte > Color
RGB<byte> alias.
Definition: Color.h:281
const Color MAGENTA
Predefined color.
Definition: Color.h:329
const Color RED
Predefined color.
Definition: Color.h:305
const Color GREEN
Predefined color.
Definition: Color.h:311
bool saveGreyImage(const std::string &name, const byte *g, int w, int h, int quality=85)
Save grey image.
void closeWindow(Window w)
Close window.
void getEvent(int ms, Event &ev)
Get keyboard and mouse events.
bool saveColorImage(const std::string &name, const Color *cols, int w, int h, int quality=85)
Save color image.
void captureRectangle(int x, int y, Color *c, int w, int h)
Capture (sub window).
bool loadGreyImage(const std::string &name, byte *&g, int &w, int &h)
Load grey image.
void hideMesh(const Mesh &M, bool reinitCam=true)
Hide mesh.
void putNativeBitmap(int x, int y, const NativeBitmap &bm, bool xorMode=false, double fact=1.)
Display native bitmap.
Window openWindow(int w, int h, const std::string &windowTitle="Imagine++", int x=-1, int y=-1)
New window for 2D graphics.
void drawPoint(int x, int y, const Color &col, bool xorMode=false)
Point.
void setActiveWindow(Window w, int subWin=0)
Set active window.
void drawPoly(const int x[], const int y[], int n, const Color &col, int width=1, bool xorMode=false)
Draw a polygon.
void drawEllipse(int x, int y, int w, int h, const Color &col, int penWidth=1, bool xorMode=false)
Ellipse.
void putGreyImage(int x, int y, const byte *g, int w, int h, bool xorMode=false, double fact=1.)
Display grey bitmap.
int getMouse(int &x, int &y)
Wait for mouse click in active window (returning position).
int click()
Wait for mouse click in active window.
Window openWindow3D(int w, int h, const std::string &windowTitle="Imagine++", int x=-1, int y=-1)
New window for 3D graphics.
Window openComplexWindow(int w, int h, const std::string &name="Imagine++", int tabsNb=1, const std::string *tabsNames=0, const WindowType *tabsTypes=0, int x=-1, int y=-1)
New complex window.
void fillCircle(int xc, int yc, int r, const AlphaColor &col, bool xorMode=false)
Filled Circle.
void showMesh(const Mesh &M, bool reinitCam=true)
Show mesh.
void drawString(int x, int y, const std::string &s, const AlphaColor &col, int fontSize=12, double alpha=0, bool italic=false, bool bold=false, bool underlined=false, bool xorMode=false)
String.
void drawCircle(int xc, int yc, int r, const Color &col, int penWidth=1, bool xorMode=false)
Circle.
WindowInternal * Window
Handle to a display window.
Definition: Types.h:48
void noRefreshEnd()
Norefresh end.
void endGraphics()
Terminate graphics application.
void drawRect(int x, int y, int w, int h, const Color &col, int penWidth=1, bool xorMode=false)
Rectangle.
int anyClick()
Wait for mouse click in any window.
void fillRect(int x, int y, int w, int h, const AlphaColor &col, bool xorMode=false)
Filled rectangle.
bool loadColorImage(const std::string &name, Color *&cols, int &w, int &h)
Load color image.
void fillEllipse(int x, int y, int w, int h, const AlphaColor &col, bool xorMode=false)
Filled Ellipse.
void milliSleep(int msec)
... Pause program for a certain period.
void fillPoly(const int x[], const int y[], int n, const AlphaColor &col, bool xorMode=false)
Filled Polygon.
void clearWindow()
clearWindow.
void noRefreshBegin()
Norefresh begin.
Coords< 2 > IntPoint2
Plane point with integral coordinates.
Definition: Types.h:17
void putColorImage(int x, int y, const Color *cols, int w, int h, bool xorMode=false, double fact=1.)
Display color bitmap.
void drawArrow(int x1, int y1, int x2, int y2, const AlphaColor &col, int arrowWidth=8, int arrowHeight=5, int style=0, int width=1, bool xorMode=false)
Arrow.
void drawLine(int x1, int y1, int x2, int y2, const Color &col, int penWidth=1, bool xorMode=false)
Line.
Image< byte, dim > grey(const Image< T, dim > &I, T m, T M)
Grey level representation.
Definition: IO.h:289
Event info.
Definition: Events.h:69
int key
Key code that triggered the event, if any (only for types EVT_KEY_ON and EVT_KEY_OFF).
Definition: Events.h:78
int subWin
SubWindow where the event occurred.
Definition: Events.h:84
EventType type
Event type.
Definition: Events.h:71
int button
Mouse button (1,2,3) that triggered the event, if any.
Definition: Events.h:75
Window win
Window where the event occurred.
Definition: Events.h:82
EventState state
Keyboard state (bitfield) just before the event occured.
Definition: Events.h:80
IntPoint2 pix
Mouse position (only for EVT_BUT_ON, EVT_BUT_OFF and EVT_MOTION).
Definition: Events.h:73