From: <le...@us...> - 2006-12-31 10:41:28
|
Revision: 87 http://svn.sourceforge.net/qcell/?rev=87&view=rev Author: lessm Date: 2006-12-31 02:41:23 -0800 (Sun, 31 Dec 2006) Log Message: ----------- - method resize in CalculationData change to resizeData - Renderer class can render 1D,2D,3D data Modified Paths: -------------- trunk/qcell/baseheaders/CalculationData.h trunk/qcell/baseheaders/Calculator.h trunk/qcell/baseheaders/Renderer.h trunk/qcell/basesources/CalculationData.cpp trunk/qcell/basesources/Calculator.cpp trunk/qcell/basesources/LocalFunction.cpp trunk/qcell/basesources/Neighbourhood.cpp trunk/qcell/basesources/Renderer.cpp Modified: trunk/qcell/baseheaders/CalculationData.h =================================================================== --- trunk/qcell/baseheaders/CalculationData.h 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/baseheaders/CalculationData.h 2006-12-31 10:41:23 UTC (rev 87) @@ -22,7 +22,7 @@ protected: void clearData(void); - bool resize(bool foreignDataPointer=0, char *dataPointer=NULL); + bool resizeData(bool foreignDataPointer=0, char *dataPointer=NULL); void * getAddressAt(int x, int y, int z, int t); public: @@ -58,14 +58,14 @@ baseDataTypes::DATA_TYPES getDataType(void); int getDataSize(void); - bool resize(int x, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(int x, int y, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(int x, int y, int z, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(int x, int y, int z, int t, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(QVector<int> newSize, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, int y, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, int y, int z, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, int y, int z, int t, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(QVector<int> newSize, char *dataPointer=NULL, bool foreignDataPointer=0); int getSizeX(void); - int getSizeY(void); + int getSizeY(void); int getSizeZ(void); int getSizeT(void); int getSizeInByte(void); Modified: trunk/qcell/baseheaders/Calculator.h =================================================================== --- trunk/qcell/baseheaders/Calculator.h 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/baseheaders/Calculator.h 2006-12-31 10:41:23 UTC (rev 87) @@ -33,7 +33,7 @@ bool setCalculationSpace(QVector<int> start, QVector<int> end, bool dataCopy=0, char *foreignDataPointer=NULL); int getOutputDataSizeInByte(void); - const char *getOutputDataPointer(void); + /*const*/ char *getOutputDataPointer(void); void calculate(void); }; Modified: trunk/qcell/baseheaders/Renderer.h =================================================================== --- trunk/qcell/baseheaders/Renderer.h 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/baseheaders/Renderer.h 2006-12-31 10:41:23 UTC (rev 87) @@ -10,40 +10,62 @@ #include <QImage> #include <QPainter> #include <QObject> +#include <QtOpengl> +struct SYMBOL +{ + bool hide; + QColor color; + float floatColorDiffuse[4], floatColorSpectacular[4]; + int primitiveID; +}; + class Renderer : public CalculationData, public QGLWidget { Q_OBJECT private: protected: - QVector<QColor> ColorMap; + QVector<SYMBOL> symbolsMap; QGLPixelBuffer *OGLpBuffer; bool discretValues; + QVector<GLuint> primitives; + QVector<double> rotation, translation; + + GLuint generateBox(void); + QImage render1D(void); - QImage render2D(void); + QImage render2D(int zval=0); QImage render3D(void); +protected: + void initializeGL(); + void paintGL(); + void resizeGL(int width, int height); + public: - typedef enum RENDER_MODE - { - TEXT, - GRAPHICS - }; Renderer(QWidget *parent); ~Renderer(); void setDataType(baseDataTypes::DATA_TYPES type = baseDataTypes::CHAR); - bool resize(int x, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(int x, int y, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(int x, int y, int z, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(int x, int y, int z, int t, char *dataPointer=NULL, bool foreignDataPointer=0); - bool resize(QVector<int> newSize, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, int y, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, int y, int z, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(int x, int y, int z, int t, char *dataPointer=NULL, bool foreignDataPointer=0); + bool resizeData(QVector<int> newSize, char *dataPointer=NULL, bool foreignDataPointer=0); + void render(void); QImage renderToQImage(void); - void setColorInMap(int value, QColor color); + bool setSymbolColor(int index, QColor color); + bool hideSymbol(int index); + bool showSymbol(int index); + bool setSymbolPrimitive(int index, int primitiveId); + void addSymbol(SYMBOL symbol); + + void setTranslation(float x, float y, float z); + void setRotation(float x, float y, float z); }; #endif Modified: trunk/qcell/basesources/CalculationData.cpp =================================================================== --- trunk/qcell/basesources/CalculationData.cpp 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/basesources/CalculationData.cpp 2006-12-31 10:41:23 UTC (rev 87) @@ -8,7 +8,7 @@ data = NULL; } -bool CalculationData::resize(bool foreignDataPointer, char *dataPointer) +bool CalculationData::resizeData(bool foreignDataPointer, char *dataPointer) { clearData(); if(!foreignDataPointer) @@ -33,14 +33,14 @@ void * CalculationData::getAddressAt(int x, int y, int z, int t) { int dSize; - if(dataType==baseDataTypes::NONE) + if(dataType==baseDataTypes::DATA_TYPES::NONE) return NULL; return data + dataSize * (x + y * sizeX + z * sizeX * sizeY + t * sizeX * sizeY * sizeZ); } CalculationData::CalculationData() { - dataType = baseDataTypes::NONE; + dataType = baseDataTypes::DATA_TYPES::NONE; sizeX = sizeY = sizeZ = sizeT = 0; dimension = -1; dataSize = 0; @@ -50,7 +50,7 @@ CalculationData::~CalculationData() { - dataType = baseDataTypes::NONE; + dataType = baseDataTypes::DATA_TYPES::NONE; sizeX = sizeY = sizeZ = sizeT = 0; dimension = -1; dataSize = 0; @@ -61,7 +61,7 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; case baseDataTypes::CHAR: @@ -86,16 +86,16 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: return *((char *)getAddressAt(x, y, 0, 0)); - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: return *((int *)(getAddressAt(x, y, 0, 0))); - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: return *((short *)(getAddressAt(x, y, 0, 0))); case baseDataTypes::FLOAT: return (int)(*((float *)(getAddressAt(x, y, 0, 0)))); @@ -110,16 +110,16 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: return *((char *)getAddressAt(x, y, z, 0)); - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: return *((int *)(getAddressAt(x, y, z, 0))); - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: return *((short *)(getAddressAt(x, y, z, 0))); case baseDataTypes::FLOAT: @@ -135,16 +135,16 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: return *((char *)getAddressAt(x, y, z, t)); - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: return *((int *)(getAddressAt(x, y, z, t))); - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: return *((short *)(getAddressAt(x, y, z, t))); case baseDataTypes::FLOAT: @@ -177,18 +177,18 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: *((char *)getAddressAt(x, 0, 0, 0)) = (char)val; break; - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: *((int *)(getAddressAt(x, 0, 0, 0))) = val; break; - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: *((short *)(getAddressAt(x, 0, 0, 0))) = (short)val; break; } @@ -198,18 +198,18 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: *((char *)getAddressAt(x, y, 0, 0)) = (char)val; break; - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: *((int *)(getAddressAt(x, y, 0, 0))) = val; break; - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: *((short *)(getAddressAt(x, y, 0, 0))) = (short)val; break; } @@ -219,18 +219,18 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: *((char *)getAddressAt(x, y, z, 0)) = (char)val; break; - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: *((int *)(getAddressAt(x, y, z, 0))) = val; break; - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: *((short *)(getAddressAt(x, y, z, 0))) = (short)val; break; } @@ -240,18 +240,18 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: *((char *)getAddressAt(x, y, z, t)) = (char)val; break; - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: *((int *)(getAddressAt(x, y, z, t))) = val; break; - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: *((short *)(getAddressAt(x, y, z, t))) = (short)val; break; } @@ -261,22 +261,22 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: return (double)*((char *)getAddressAt(x, 0, 0, 0)); - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: return (double)*((int *)(getAddressAt(x, 0, 0, 0))); - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: return (double)*((short *)(getAddressAt(x, 0, 0, 0))); - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: return *((double *)(getAddressAt(x, 0, 0, 0))); - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: return *((float *)(getAddressAt(x, 0, 0, 0))); } return 0.0; @@ -286,22 +286,22 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: return (double)*((char *)getAddressAt(x, y, 0, 0)); - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: return (double)*((int *)(getAddressAt(x, y, 0, 0))); - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: return (double)*((short *)(getAddressAt(x, y, 0, 0))); - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: return *((double *)(getAddressAt(x, y, 0, 0))); - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: return *((float *)(getAddressAt(x, y, 0, 0))); } return 0.0; @@ -311,22 +311,22 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: return (double)*((char *)getAddressAt(x, y, z, 0)); - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: return (double)*((int *)(getAddressAt(x, y, z, 0))); - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: return (double)*((short *)(getAddressAt(x, y, z, 0))); - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: return *((double *)(getAddressAt(x, y, z, 0))); - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: return *((float *)(getAddressAt(x, y, z, 0))); } return 0.0; @@ -336,22 +336,22 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: return (double)*((char *)getAddressAt(x, y, z, t)); - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: return (double)*((int *)(getAddressAt(x, y, z, t))); - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: return (double)*((short *)(getAddressAt(x, y, z, t))); - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: return *((double *)(getAddressAt(x, y, z, t))); - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: return *((float *)(getAddressAt(x, y, z, t))); } return 0.0; @@ -377,11 +377,11 @@ { switch(dataType) { - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: *((double *)(getAddressAt(x, 0, 0, 0))) = val; break; - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: *((float *)(getAddressAt(x, 0, 0, 0))) = (float)val; break; } @@ -391,11 +391,11 @@ { switch(dataType) { - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: *((double *)(getAddressAt(x, y, 0, 0))) = val; break; - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: *((float *)(getAddressAt(x, y, 0, 0))) = (float)val; break; } @@ -405,11 +405,11 @@ { switch(dataType) { - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: *((double *)(getAddressAt(x, y, z, 0))) = val; break; - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: *((float *)(getAddressAt(x, y, z, 0))) = (float)val; break; } @@ -419,17 +419,17 @@ { switch(dataType) { - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: *((double *)(getAddressAt(x, y, z, t))) = val; break; - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: *((float *)(getAddressAt(x, y, z, t))) = (float)val; break; } } -void CalculationData::setDataType(baseDataTypes::DATA_TYPES type) +void CalculationData::setDataType(DATA_TYPES type) { dataType = type; dataSize = 0; @@ -470,58 +470,58 @@ return dataSize; } -bool CalculationData::resize(int x, char *dataPointer, bool foreignDataPointer) +bool CalculationData::resizeData(int x, char *dataPointer, bool foreignDataPointer) { sizeX = x; sizeY = 0; sizeZ = 0; sizeT = 0; dimension = 1; - return resize(foreignDataPointer, dataPointer); + return resizeData(foreignDataPointer, dataPointer); } -bool CalculationData::resize(int x, int y, char *dataPointer, bool foreignDataPointer) +bool CalculationData::resizeData(int x, int y, char *dataPointer, bool foreignDataPointer) { sizeX = x; sizeY = y; sizeZ = 0; sizeT = 0; dimension = 2; - return resize(foreignDataPointer, dataPointer);; + return resizeData(foreignDataPointer, dataPointer);; } -bool CalculationData::resize(int x, int y, int z, char *dataPointer, bool foreignDataPointer) +bool CalculationData::resizeData(int x, int y, int z, char *dataPointer, bool foreignDataPointer) { sizeX = x; sizeY = y; sizeZ = z; sizeT = 0; dimension = 3; - return resize(foreignDataPointer, dataPointer);; + return resizeData(foreignDataPointer, dataPointer);; } -bool CalculationData::resize(int x, int y, int z, int t, char *dataPointer, bool foreignDataPointer) +bool CalculationData::resizeData(int x, int y, int z, int t, char *dataPointer, bool foreignDataPointer) { sizeX = x; sizeY = y; sizeZ = z; sizeT = t; dimension = 4; - return resize(foreignDataPointer, dataPointer);; + return resizeData(foreignDataPointer, dataPointer); } -bool CalculationData::resize(QVector<int> newSize, char *dataPointer, bool foreignDataPointer) +bool CalculationData::resizeData(QVector<int> newSize, char *dataPointer, bool foreignDataPointer) { switch(newSize.size()) { case 1: - return resize(newSize[0], dataPointer, foreignDataPointer); + return resizeData(newSize[0], dataPointer, foreignDataPointer); case 2: - return resize(newSize[1], newSize[2], dataPointer, foreignDataPointer); + return resizeData(newSize[1], newSize[2], dataPointer, foreignDataPointer); case 3: - return resize(newSize[1], newSize[2], newSize[3], dataPointer, foreignDataPointer); + return resizeData(newSize[1], newSize[2], newSize[3], dataPointer, foreignDataPointer); case 4: - return resize(newSize[1], newSize[2], newSize[3], newSize[4], dataPointer, foreignDataPointer); + return resizeData(newSize[1], newSize[2], newSize[3], newSize[4], dataPointer, foreignDataPointer); } return 0; } @@ -550,10 +550,10 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: return (sizeX * sizeY * sizeZ * sizeT)/8 + 1; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: switch(dimension) { case 1: @@ -566,7 +566,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(char); } - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: switch(dimension) { case 1: @@ -579,7 +579,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(double); } - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: switch(dimension) { case 1: @@ -592,7 +592,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(float); } - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: switch(dimension) { case 1: @@ -605,7 +605,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(int); } - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: switch(dimension) { case 1: @@ -666,16 +666,16 @@ switch(cData.getDimension()) { case 1: - resize(cData.getSizeX()); + resizeData(cData.getSizeX()); break; case 2: - resize(cData.getSizeX(), cData.getSizeY()); + resizeData(cData.getSizeX(), cData.getSizeY()); break; case 3: - resize(cData.getSizeX(), cData.getSizeY(), cData.getSizeZ()); + resizeData(cData.getSizeX(), cData.getSizeY(), cData.getSizeZ()); break; case 4: - resize(cData.getSizeX(), cData.getSizeY(), cData.getSizeZ(), cData.getSizeT()); + resizeData(cData.getSizeX(), cData.getSizeY(), cData.getSizeZ(), cData.getSizeT()); break; } Modified: trunk/qcell/basesources/Calculator.cpp =================================================================== --- trunk/qcell/basesources/Calculator.cpp 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/basesources/Calculator.cpp 2006-12-31 10:41:23 UTC (rev 87) @@ -177,7 +177,7 @@ return 0; } -const char *Calculator::getOutputDataPointer(void) +/*const*/ char *Calculator::getOutputDataPointer(void) { return outData; } Modified: trunk/qcell/basesources/LocalFunction.cpp =================================================================== --- trunk/qcell/basesources/LocalFunction.cpp 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/basesources/LocalFunction.cpp 2006-12-31 10:41:23 UTC (rev 87) @@ -5,20 +5,20 @@ switch(functionMode) { - case LocalFunction::SUM: + case LocalFunction::FUNCTION_TYPE::SUM: numElements = 1; for(int i=0;i<sumArguments.size();++i) numElements *= sumArguments[i].size() * (maxArgVal - 1) + 1; break; - case LocalFunction::SUM_AND_SWITCH: + case LocalFunction::FUNCTION_TYPE::SUM_AND_SWITCH: numElements = 1; for(int i=0;i<sumArguments.size();++i) numElements *= sumArguments[i].size() * (maxArgVal - 1) + 1; numElements *= freeArguments.size() * maxArgVal; break; - case LocalFunction::SWITCH: + case LocalFunction::FUNCTION_TYPE::SWITCH: numElements = numArg * maxArgVal; break; } @@ -32,7 +32,7 @@ int i, t, out; QVector<int> temp; - if(functionMode==LocalFunction::SCRIPT) + if(functionMode==LocalFunction::FUNCTION_TYPE::SCRIPT) return -1; temp.resize(maxArgVal); @@ -130,12 +130,12 @@ LocalFunction::LocalFunction() { - functionMode = LocalFunction::SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SWITCH; } LocalFunction::~LocalFunction() { - functionMode = LocalFunction::SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SWITCH; } void LocalFunction::init(int numberOfArguments, int alphabetSize) @@ -145,7 +145,7 @@ valueTable.clear(); sumArguments.clear(); freeArguments.clear(); - functionMode = LocalFunction::SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SWITCH; } void LocalFunction::addSumArguments(QVector<int> args) @@ -162,12 +162,12 @@ } if(freeArguments.size()==0) - functionMode = LocalFunction::SUM; + functionMode = LocalFunction::FUNCTION_TYPE::SUM; else if(freeArguments.size()==numArg) - functionMode = LocalFunction::SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SWITCH; else - functionMode = LocalFunction::SUM_AND_SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SUM_AND_SWITCH; } } @@ -184,12 +184,12 @@ freeArguments<<i; if(freeArguments.size()==0) - functionMode = LocalFunction::SUM; + functionMode = LocalFunction::FUNCTION_TYPE::SUM; else if(freeArguments.size()==numArg) - functionMode = LocalFunction::SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SWITCH; else - functionMode = LocalFunction::SUM_AND_SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SUM_AND_SWITCH; } } @@ -198,13 +198,13 @@ sumArguments.clear(); freeArguments.clear(); valueTable.clear(); - functionMode = LocalFunction::SWITCH; + functionMode = LocalFunction::FUNCTION_TYPE::SWITCH; } void LocalFunction::setScript(QString scriptData) { script = scriptData; - functionMode = LocalFunction::SCRIPT; + functionMode = LocalFunction::FUNCTION_TYPE::SCRIPT; } void LocalFunction::setFunctonType(LocalFunction::FUNCTION_TYPE type) @@ -221,13 +221,13 @@ { switch(functionMode) { - case LocalFunction::SUM: + case LocalFunction::FUNCTION_TYPE::SUM: return 1; - case LocalFunction::SUM_AND_SWITCH: + case LocalFunction::FUNCTION_TYPE::SUM_AND_SWITCH: return freeArguments.size() + 1; - case LocalFunction::SWITCH: + case LocalFunction::FUNCTION_TYPE::SWITCH: return freeArguments.size(); } @@ -256,11 +256,11 @@ resizeValueTable(); switch(functionMode) { - case LocalFunction::SUM: + case LocalFunction::FUNCTION_TYPE::SUM: valueTable[sum] = value; break; - case LocalFunction::SUM_AND_SWITCH: + case LocalFunction::FUNCTION_TYPE::SUM_AND_SWITCH: offset = sum * freeArguments.size() * maxArgVal; for(int i=offset;i<freeArguments.size() * maxArgVal + offset;++i) valueTable[i] = value; @@ -333,7 +333,7 @@ int i, index = 0, temp; if(valueTable.empty()) resizeValueTable(); - if(functionMode==LocalFunction::SCRIPT) + if(functionMode==LocalFunction::FUNCTION_TYPE::SCRIPT) return -1; QVector<int> sums, freeArgs; @@ -342,7 +342,7 @@ switch(functionMode) { - case LocalFunction::SCRIPT: + case LocalFunction::FUNCTION_TYPE::SCRIPT: break; default: index = calculateSumsIndex(sums) + calculateSwitchIndex(freeArgs); @@ -357,12 +357,12 @@ double out = 0.0; switch(functionMode) { - case LocalFunction::SUM: + case LocalFunction::FUNCTION_TYPE::SUM: for (i=0;i<args.size();++i) out += args[i]; break; - case LocalFunction::SCRIPT: + case LocalFunction::FUNCTION_TYPE::SCRIPT: break; } Modified: trunk/qcell/basesources/Neighbourhood.cpp =================================================================== --- trunk/qcell/basesources/Neighbourhood.cpp 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/basesources/Neighbourhood.cpp 2006-12-31 10:41:23 UTC (rev 87) @@ -282,22 +282,22 @@ dType = type; switch(dType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: dataSize = sizeof(char); break; - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: dataSize = sizeof(double); break; - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: dataSize = sizeof(float); break; - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: dataSize = sizeof(int); break; - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: dataSize = sizeof(short); break; } @@ -311,38 +311,38 @@ int i; switch(dType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; - case baseDataTypes::CHAR: + case baseDataTypes::DATA_TYPES::CHAR: for(i=0;i<neighbourVector.size();++i) { neighbourVector[i].value.iValue = *((char *)(address + neighbourVector[i].offset)); } break; - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: for(i=0;i<neighbourVector.size();++i) { neighbourVector[i].value.dValue = *((double *)(address + neighbourVector[i].offset)); } break; - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: for(i=0;i<neighbourVector.size();++i) { neighbourVector[i].value.dValue = *((float *)(address + neighbourVector[i].offset)); } break; - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: for(i=0;i<neighbourVector.size();++i) { neighbourVector[i].value.iValue = *((int *)(address + neighbourVector[i].offset)); } break; - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: for(i=0;i<neighbourVector.size();++i) { neighbourVector[i].value.iValue = *((short *)(address + neighbourVector[i].offset)); Modified: trunk/qcell/basesources/Renderer.cpp =================================================================== --- trunk/qcell/basesources/Renderer.cpp 2006-12-31 10:15:35 UTC (rev 86) +++ trunk/qcell/basesources/Renderer.cpp 2006-12-31 10:41:23 UTC (rev 87) @@ -1,24 +1,71 @@ #include "../baseheaders/Renderer.h" +GLuint Renderer::generateBox() +{ + GLuint list = glGenLists(1); + glNewList(list, GL_COMPILE); + glBegin(GL_QUADS); + + glNormal3f( 0.0f, 0.0f, 1.0f); + glVertex3f(-1.0f, 1.0f, 1.0f); + glVertex3f(-1.0f, -1.0f, 1.0f); + glVertex3f( 1.0f, -1.0f, 1.0f); + glVertex3f( 1.0f, 1.0f, 1.0f); + + glNormal3f( 0.0f, 0.0f, -1.0f); + glVertex3f( 1.0f, 1.0f, -1.0f); + glVertex3f( 1.0f, -1.0f, -1.0f); + glVertex3f(-1.0f, -1.0f, -1.0f); + glVertex3f(-1.0f, 1.0f, -1.0f); + + glNormal3f( 0.0f, -1.0f, 0.0f); + glVertex3f(-1.0f, -1.0f, 1.0f); + glVertex3f(-1.0f, -1.0f, -1.0f); + glVertex3f( 1.0f, -1.0f, -1.0f); + glVertex3f( 1.0f, -1.0f, 1.0f); + + glNormal3f( 0.0f, 1.0f, 0.0f); + glVertex3f( 1.0f, 1.0f, 1.0f); + glVertex3f( 1.0f, 1.0f, -1.0f); + glVertex3f(-1.0f, 1.0f, -1.0f); + glVertex3f(-1.0f, 1.0f, 1.0f); + + glNormal3f( 1.0f, 0.0f, 0.0f); + glVertex3f( 1.0f, -1.0f, -1.0f); + glVertex3f( 1.0f, 1.0f, -1.0f); + glVertex3f( 1.0f, 1.0f, 1.0f); + glVertex3f( 1.0f, -1.0f, 1.0f); + + glNormal3f(-1.0f, 0.0f, 0.0f); + glVertex3f(-1.0f, 1.0f, 1.0f); + glVertex3f(-1.0f, 1.0f, -1.0f); + glVertex3f(-1.0f, -1.0f, -1.0f); + glVertex3f(-1.0f, -1.0f, 1.0f); + + glEnd(); + glEndList(); + return list; +} + QImage Renderer::render1D(void) { QPainter painter(OGLpBuffer); for(int x=0;x<sizeX;++x) { - painter.setPen(ColorMap[getValueAt_i(x)]); + painter.setPen(symbolsMap[getValueAt_i(x)].color); painter.drawPoint(x, 0); } return OGLpBuffer->toImage(); } -QImage Renderer::render2D(void) +QImage Renderer::render2D(int zval) { QPainter painter(OGLpBuffer); for(int y=0;y<sizeY;++y) { for(int x=0;x<sizeX;++x) { - painter.setPen(ColorMap[getValueAt_i(x, y)]); + painter.setPen(symbolsMap[getValueAt_i(x, y, zval)].color); painter.drawPoint(x, y); } } @@ -27,18 +74,95 @@ QImage Renderer::render3D(void) { - return QImage(); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glLoadIdentity(); + + glTranslated(translation[0], translation[1], translation[2]); + glRotatef(rotation[0], 1.0f, 0.0f, 0.0f); + glRotatef(rotation[1], 0.0f, 1.0f, 0.0f); + glRotatef(rotation[2], 0.0f, 0.0f, 1.0f); + render(); + return grabFrameBuffer(); } +void Renderer::initializeGL() + { + qglClearColor(QColor(0,0,0)); + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + + //glEnable(GL_COLOR_MATERIAL); + + //glEnable(GL_NORMALIZE); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + + float ambient[] = {0.02f, 0.02f, 0.02f, 1.0f}; + float diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f}; + float spectacular[] = {1.0f, 1.0f, 1.0f, 1.0f}; + float position[] = { -1000.0f, 1000.0f, 1000.0f, 1.0f}; + + glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); + glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); + glLightfv(GL_LIGHT0, GL_SPECULAR, spectacular); + glLightfv(GL_LIGHT0, GL_POSITION, position); + + primitives<<generateBox(); + } + + void Renderer::paintGL() + { + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glLoadIdentity(); + + glTranslated(translation[0], translation[1], translation[2]); + glRotatef(rotation[0], 1.0f, 0.0f, 0.0f); + glRotatef(rotation[1], 0.0f, 1.0f, 0.0f); + glRotatef(rotation[2], 0.0f, 0.0f, 1.0f); + + render(); + } + + void Renderer::resizeGL(int width, int height) + { + glViewport(0, 0, width, height); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + //glOrtho(-10.0, 10.0, 10.0, -10.0, 0.1, 15.0); + gluPerspective(75.0f, (GLdouble)width / (GLdouble)height, 0.1f, 1000.0f); + glMatrixMode(GL_MODELVIEW); + glTranslated(0.0, 0.0, -10.0); + } + Renderer::Renderer(QWidget *parent) : QGLWidget(parent) { discretValues = 1; OGLpBuffer = NULL; - ColorMap.resize(1024); + + + SYMBOL baseSymbols; + baseSymbols.hide = 1; + baseSymbols.primitiveID = 0; + addSymbol(baseSymbols); + setSymbolColor(0, QColor(0,0,0)); + + baseSymbols.hide = 0; + baseSymbols.primitiveID = 0; + addSymbol(baseSymbols); + setSymbolColor(1, QColor(255,255,255)); + + translation.resize(3); + rotation.resize(3); } Renderer::~Renderer() { + makeCurrent(); + for(int i=0;i<primitives.size();++i) + glDeleteLists(primitives[i], 1); + if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = NULL; @@ -64,10 +188,10 @@ CalculationData::setDataType(type); } -bool Renderer::resize(int x, char *dataPointer, bool foreignDataPointer) +bool Renderer::resizeData(int x, char *dataPointer, bool foreignDataPointer) { - if(CalculationData::resize(x, dataPointer, foreignDataPointer)) + if(CalculationData::resizeData(x, dataPointer, foreignDataPointer)) { if(OGLpBuffer) delete OGLpBuffer; @@ -77,9 +201,9 @@ return 0; } -bool Renderer::resize(int x, int y, char *dataPointer, bool foreignDataPointer) +bool Renderer::resizeData(int x, int y, char *dataPointer, bool foreignDataPointer) { - if(CalculationData::resize(x, y, dataPointer, foreignDataPointer)) + if(CalculationData::resizeData(x, y, dataPointer, foreignDataPointer)) { if(OGLpBuffer) delete OGLpBuffer; @@ -89,19 +213,19 @@ return 0; } -bool Renderer::resize(int x, int y, int z, char *dataPointer, bool foreignDataPointer) +bool Renderer::resizeData(int x, int y, int z, char *dataPointer, bool foreignDataPointer) { - return CalculationData::resize(x, y, z, dataPointer, foreignDataPointer); + return CalculationData::resizeData(x, y, z, dataPointer, foreignDataPointer); } -bool Renderer::resize(int x, int y, int z, int t, char *dataPointer, bool foreignDataPointer) +bool Renderer::resizeData(int x, int y, int z, int t, char *dataPointer, bool foreignDataPointer) { - return CalculationData::resize(x, y, z, t, dataPointer, foreignDataPointer); + return CalculationData::resizeData(x, y, z, t, dataPointer, foreignDataPointer); } -bool Renderer::resize(QVector<int> newSize, char *dataPointer, bool foreignDataPointer) +bool Renderer::resizeData(QVector<int> newSize, char *dataPointer, bool foreignDataPointer) { - if(CalculationData::resize(newSize, dataPointer, foreignDataPointer)) + if(CalculationData::resizeData(newSize, dataPointer, foreignDataPointer)) { if(OGLpBuffer) delete OGLpBuffer; @@ -120,6 +244,33 @@ return 0; } +void Renderer::render(void) +{ + int counter = 0, index; + float mx = -(float)sizeX, my = -(float)sizeY, mz = -(float)sizeZ; + for(int z=0;z<sizeZ;++z) + { + for(int y=sizeY;y>0;--y) + { + for(int x=0;x<sizeX;++x) + { + + index = getValueAt_i(counter++); + if(!(symbolsMap[index].hide)) + { + glPushMatrix(); + glTranslatef(mx + (float)x * 2.0f , my + (float)y * 2.0f, mz + (float)z * 2.0f); + //glColor3ub(symbolsMap[index].color.red(), symbolsMap[index].color.green(), symbolsMap[index].color.blue()); + glMaterialfv(GL_FRONT, GL_DIFFUSE, symbolsMap[index].floatColorDiffuse); + glMaterialfv(GL_FRONT, GL_SPECULAR, symbolsMap[index].floatColorSpectacular); + glCallList(primitives[symbolsMap[index].primitiveID]); + glPopMatrix(); + } + } + } + } +} + QImage Renderer::renderToQImage(void) { switch(dimension) @@ -128,11 +279,77 @@ return render1D(); case 2: return render2D(); + case 3: + return render3D(); } return QImage(); } -void Renderer::setColorInMap(int value, QColor color) + +bool Renderer::setSymbolColor(int index, QColor color) { - ColorMap[value] = color; -} \ No newline at end of file + if(index<symbolsMap.size()) + { + symbolsMap[index].color = color; + symbolsMap[index].floatColorSpectacular[0] = symbolsMap[index].floatColorDiffuse[0] = (float)color.red() / 255.0f; + symbolsMap[index].floatColorSpectacular[1] = symbolsMap[index].floatColorDiffuse[1] = (float)color.green() / 255.0f; + symbolsMap[index].floatColorSpectacular[2] = symbolsMap[index].floatColorDiffuse[2] = (float)color.blue() / 255.0f; + symbolsMap[index].floatColorSpectacular[3] = symbolsMap[index].floatColorDiffuse[3] = 1.0f; + + symbolsMap[index].floatColorSpectacular[0] += symbolsMap[index].floatColorDiffuse[0] * 0.1f; + symbolsMap[index].floatColorSpectacular[1] += symbolsMap[index].floatColorDiffuse[1] * 0.1f; + symbolsMap[index].floatColorSpectacular[2] += symbolsMap[index].floatColorDiffuse[2] * 0.1f; + return 1; + } + return 0; +} + +bool Renderer::hideSymbol(int index) +{ + if(index<symbolsMap.size()) + { + symbolsMap[index].hide = 1; + return 1; + } + return 0; +} + +bool Renderer::showSymbol(int index) +{ + if(index<symbolsMap.size()) + { + symbolsMap[index].hide = 0; + return 1; + } + return 0; +} + +bool Renderer::setSymbolPrimitive(int index, int primitiveId) +{ + if(index<symbolsMap.size() && primitiveId<primitives.size()) + { + symbolsMap[index].primitiveID = primitiveId; + return 1; + } + return 0; +} + +void Renderer::addSymbol(SYMBOL symbol) +{ + symbolsMap<<symbol; +} + +void Renderer::setTranslation(float x, float y, float z) +{ + translation[0] = x; + translation[1] = y; + translation[2] = z; +} + +void Renderer::setRotation(float x, float y, float z) +{ + rotation[0] = x; + rotation[1] = y; + rotation[2] = z; +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |