IFS.h
Code: Select all
class IFS
{
public:
int SierpinskiTriangleIter;
IFS()
{
SierpinskiTriangleIter = 10000;
};
~IFS(){};
struct RGBquad
{
int r, g, b, a;
};
struct Vertex
{
float x, y; // Position of vertex in 3D space
RGBquad color; // Color of vertex
}*IFSList;
void SierpinskiTriangleCoords();
}static IFS;
Code: Select all
void IFS::CoordsGraph(int equation)
{
int iterations;
switch(equation)
{
case ID_SierpinskiTriangle:
iterations = IFS::SierpinskiTriangleIter;
break;
case ID_TriAngles:
iterations = IFS::TriAnglesIter;
break;
case ID_Pentagon:
iterations = IFS::PentagonIter;
break;
default:
break;
}
glPushMatrix();
glBegin(GL_POINTS);
for(int d=0;d<iterations;d++)
{
glColor3ub(IFSList[d].color.r, IFSList[d].color.g, IFSList[d].color.b);
glVertex2f(IFSList[d].x, IFSList[d].y);
}
glEnd();
glPopMatrix();
}
void IFS::SierpinskiTriangleCoords()
{
free(IFSList);
IFSList = (IFS::Vertex*)malloc(IFS::SierpinskiTriangleIter * sizeof(IFS::Vertex)); // Iteration of 500 times, reference this to elsewhere
float pax=0, pay=-1, pbx=-1, pby=1, pcx=1, pcy=1, px=0, py=0;
int pick, d;
static int skip=0;
for(d=0;d<IFS::SierpinskiTriangleIter;d++)
{
pick=rnd(3);
if(pick==0)
{
px=(px-pax)/2;
py=(py-pay)/2;
}
if(pick==1)
{
px=(px-pbx)/2;
py=(py-pby)/2;
}
if(pick==2)
{
px=(px-pcx)/2;
py=(py-pcy)/2;
}
if(skip>10)
{
IFSList[d].x = px;
IFSList[d].y = py;
switch(pick) // This coloring algorithm does something compleatly unexpected!
{
case 0:
IFSList[d].color.r = 255;
IFSList[d].color.g = 0;
IFSList[d].color.b = 0;
IFSList[d].color.a = 255;
break;
case 1:
IFSList[d].color.r = 0;
IFSList[d].color.g = 255;
IFSList[d].color.b = 0;
IFSList[d].color.a = 255;
break;
case 2:
IFSList[d].color.r = 0;
IFSList[d].color.g = 0;
IFSList[d].color.b = 255;
IFSList[d].color.a = 255;
break;
default:
break;
}
}
skip++;
}
}
CalculateThread.h
Code: Select all
#ifndef _CALCULATETHREAD_
#define _CALCULATETHREAD_
#include "wx.h"
DECLARE_EVENT_TYPE(wxEVT_THREAD, -1)
class CalculateThread : public wxThread
{
public:
CalculateThread(wxEvtHandler *ehParent, int equation){m_ehParent = ehParent;Equation = equation;};
~CalculateThread(){};
private:
int Equation;
wxEvtHandler *m_ehParent;
void *Entry();
};
#endif
Code: Select all
#include "CalculateThread.h"
#include "IFS.h"
void *CalculateThread::Entry()
{
//wxCommandEvent evt(wxEVT_THREAD, wxID_ANY);
//evt.SetId(101);
//m_ehParent->AddPendingEvent(evt);
IFS.SierpinskiTriangleCoords();
return NULL;
};
Basically when I run the Coordinate Generator in a seperate thread nothing happens!
Any help? -Thanks!