From: <le...@us...> - 2007-01-07 13:25:12
|
Revision: 112 http://svn.sourceforge.net/qcell/?rev=112&view=rev Author: lessm Date: 2007-01-07 05:25:06 -0800 (Sun, 07 Jan 2007) Log Message: ----------- - Renderer class updated - Some changes in CalculationData class (backward compatible a think) - simulationWindow class added Modified Paths: -------------- trunk/qcell/baseheaders/CalculationData.h trunk/qcell/baseheaders/Renderer.h trunk/qcell/basesources/CalculationData.cpp trunk/qcell/basesources/Renderer.cpp Added Paths: ----------- trunk/qcell/baseheaders/simulationwindow.h trunk/qcell/baseheaders/simulationwindow.ui trunk/qcell/basesources/simulationwindow.cpp Modified: trunk/qcell/baseheaders/CalculationData.h =================================================================== --- trunk/qcell/baseheaders/CalculationData.h 2007-01-07 12:32:30 UTC (rev 111) +++ trunk/qcell/baseheaders/CalculationData.h 2007-01-07 13:25:06 UTC (rev 112) @@ -65,7 +65,7 @@ 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); @@ -82,6 +82,10 @@ CalculationData & operator = (CalculationData &cData); +signals: + void dataUpdated(); + void dataResized(); + }; #endif Modified: trunk/qcell/baseheaders/Renderer.h =================================================================== --- trunk/qcell/baseheaders/Renderer.h 2007-01-07 12:32:30 UTC (rev 111) +++ trunk/qcell/baseheaders/Renderer.h 2007-01-07 13:25:06 UTC (rev 112) @@ -10,7 +10,9 @@ #include <QImage> #include <QPainter> #include <QObject> -#include <QtOpenGL> +#include <QtOpengl> +#include <QPixmap> +#include <QChar> struct SYMBOL { @@ -18,9 +20,10 @@ QColor color; float floatColorDiffuse[4], floatColorSpectacular[4]; int primitiveID; + QChar textSybmol; }; -class Renderer : public CalculationData, public QGLWidget +class Renderer : /*public CalculationData,*/ public QGLWidget { Q_OBJECT private: @@ -40,6 +43,8 @@ QImage render2D(int zval=0); QImage render3D(void); + CalculationData storage; + protected: void initializeGL(); void paintGL(); @@ -49,7 +54,7 @@ Renderer(QWidget *parent); ~Renderer(); - +/* void setDataType(baseDataTypes::DATA_TYPES type = baseDataTypes::CHAR); bool resizeData(int x, char *dataPointer=NULL, bool foreignDataPointer=0); @@ -57,17 +62,28 @@ 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(int zplane=-1); + void renderToPixmap(QPixmap *pixmap, int zval); bool setSymbolColor(int index, QColor color); bool hideSymbol(int index); bool showSymbol(int index); bool setSymbolPrimitive(int index, int primitiveId); void addSymbol(SYMBOL symbol); + SYMBOL getSymbol(int index); void setTranslation(float x, float y, float z); void setRotation(float x, float y, float z); + void rotateX(float rot); + void rotateY(float rot); + void rotateZ(float rot); + + void translateX(float trans); + void translateY(float trans); + void translateZ(float trans); + + CalculationData * getStorage(void); }; #endif Added: trunk/qcell/baseheaders/simulationwindow.h =================================================================== --- trunk/qcell/baseheaders/simulationwindow.h (rev 0) +++ trunk/qcell/baseheaders/simulationwindow.h 2007-01-07 13:25:06 UTC (rev 112) @@ -0,0 +1,77 @@ +#ifndef SIMULATIONWINDOW_H +#define SIMULATIONWINDOW_H + +#include <QPainter> +#include <QWidget> +#include <QMouseEvent> +#include <QBrush> +#include <QTableWidget> +#include <QTableWidgetItem> +#include <QGraphicsView> +#include <QPixmap> +#include <QGraphicsPixmapItem> +#include <QProgressDialog> +#include "ui_simulationwindow.h" +#include "../baseheaders/Renderer.h" + +// this is widget make visualization of world data + +class simulationWindow : public QWidget +{ + Q_OBJECT + +private: + Ui::simulationWindowClass ui; + +protected: + Renderer *renderer; + int cursor_x, cursor_y; + int z_plane; + float zoom; + QTableWidget *table2D; + QTableWidget *table1D; + QTableWidget *table1DMem; + + bool table2DUpdateRequest, table1DUpdateRequest, graph2DUpdateRequest; + + QGraphicsView *graphicsView2D; + QGraphicsScene *graphicsScene2D; + QGraphicsPixmapItem *graphicsScene2DPixmap; + QPixmap *pixmap; + + virtual void mouseMoveEvent(QMouseEvent * event); + virtual void mousePressEvent(QMouseEvent * event); + virtual void wheelEvent(QWheelEvent * event); + virtual void resizeEvent(QResizeEvent * event); + virtual void paintEvent(QPaintEvent * event); + + + +protected: + void update2DTable(void); + void update2DGraph(void); + void update1DTable(void); + void update1DTableMem(void); + +public: + simulationWindow(QWidget *parent = 0); + ~simulationWindow(); + + Renderer *getRenderer(); + CalculationData *getStorage(); + +protected slots: + void zPlaneChange(int i); + void dataUpdateRequest(void); + void dataResizeRequest(void); + void GridView2DRepaint(void); + void GridView1DRepaint(void); + void GridView1DMemClear(void); +signals: + void progressUpdate(int val); + + + +}; + +#endif // SIMULATIONWINDOW_H Added: trunk/qcell/baseheaders/simulationwindow.ui =================================================================== --- trunk/qcell/baseheaders/simulationwindow.ui (rev 0) +++ trunk/qcell/baseheaders/simulationwindow.ui 2007-01-07 13:25:06 UTC (rev 112) @@ -0,0 +1,176 @@ +<ui version="4.0" > + <class>simulationWindowClass</class> + <widget class="QWidget" name="simulationWindowClass" > + <property name="windowTitle" > + <string>simulationWindow</string> + </property> + <widget class="QTabWidget" name="tabWidget" > + <property name="geometry" > + <rect> + <x>10</x> + <y>10</y> + <width>620</width> + <height>460</height> + </rect> + </property> + <property name="tabPosition" > + <enum>QTabWidget::North</enum> + </property> + <property name="tabShape" > + <enum>QTabWidget::Rounded</enum> + </property> + <property name="currentIndex" > + <number>3</number> + </property> + <widget class="QWidget" name="view3D" > + <attribute name="title" > + <string>3D View</string> + </attribute> + </widget> + <widget class="QWidget" name="view2D" > + <attribute name="title" > + <string>2D Text View</string> + </attribute> + <widget class="QSpinBox" name="Grid2DZplane" > + <property name="geometry" > + <rect> + <x>500</x> + <y>10</y> + <width>91</width> + <height>22</height> + </rect> + </property> + </widget> + <widget class="QLabel" name="label" > + <property name="geometry" > + <rect> + <x>440</x> + <y>10</y> + <width>35</width> + <height>14</height> + </rect> + </property> + <property name="lineWidth" > + <number>3</number> + </property> + <property name="text" > + <string>Z Plane</string> + </property> + <property name="textFormat" > + <enum>Qt::AutoText</enum> + </property> + </widget> + <widget class="QRadioButton" name="Grid2DValues" > + <property name="geometry" > + <rect> + <x>140</x> + <y>10</y> + <width>83</width> + <height>20</height> + </rect> + </property> + <property name="text" > + <string>Values</string> + </property> + <property name="checked" > + <bool>true</bool> + </property> + </widget> + <widget class="QRadioButton" name="Grid2DSybmols" > + <property name="geometry" > + <rect> + <x>240</x> + <y>10</y> + <width>83</width> + <height>18</height> + </rect> + </property> + <property name="text" > + <string>Symbols</string> + </property> + </widget> + <widget class="QCheckBox" name="Grig2DColors" > + <property name="geometry" > + <rect> + <x>10</x> + <y>10</y> + <width>91</width> + <height>18</height> + </rect> + </property> + <property name="text" > + <string>Enable Colors</string> + </property> + </widget> + </widget> + <widget class="QWidget" name="view2DGraph" > + <attribute name="title" > + <string>2D Graphics View</string> + </attribute> + </widget> + <widget class="QWidget" name="view1D" > + <attribute name="title" > + <string>1D View</string> + </attribute> + <widget class="QRadioButton" name="Grid1DSybmols" > + <property name="geometry" > + <rect> + <x>240</x> + <y>10</y> + <width>83</width> + <height>18</height> + </rect> + </property> + <property name="text" > + <string>Symbols</string> + </property> + </widget> + <widget class="QRadioButton" name="Grid1DValues" > + <property name="geometry" > + <rect> + <x>140</x> + <y>10</y> + <width>83</width> + <height>18</height> + </rect> + </property> + <property name="text" > + <string>Values</string> + </property> + <property name="checked" > + <bool>true</bool> + </property> + </widget> + <widget class="QCheckBox" name="Grig1DColors" > + <property name="geometry" > + <rect> + <x>10</x> + <y>10</y> + <width>91</width> + <height>18</height> + </rect> + </property> + <property name="text" > + <string>Enable Colors</string> + </property> + </widget> + <widget class="QPushButton" name="memClr" > + <property name="geometry" > + <rect> + <x>350</x> + <y>10</y> + <width>75</width> + <height>23</height> + </rect> + </property> + <property name="text" > + <string>Clear Memory</string> + </property> + </widget> + </widget> + </widget> + </widget> + <layoutdefault spacing="6" margin="11" /> + <resources/> + <connections/> +</ui> Modified: trunk/qcell/basesources/CalculationData.cpp =================================================================== --- trunk/qcell/basesources/CalculationData.cpp 2007-01-07 12:32:30 UTC (rev 111) +++ trunk/qcell/basesources/CalculationData.cpp 2007-01-07 13:25:06 UTC (rev 112) @@ -11,6 +11,10 @@ bool CalculationData::resizeData(bool foreignDataPointer, char *dataPointer) { clearData(); + + if(getSizeInByte()==0) + return 0; + if(!foreignDataPointer) { data = new char[getSizeInByte()]; @@ -21,11 +25,13 @@ fillData(dataPointer); haveForeignDataPointer = 0; + emit dataResized(); } else { data = dataPointer; haveForeignDataPointer = 1; + emit dataUpdated(); } return 1; } @@ -33,14 +39,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 +56,7 @@ CalculationData::~CalculationData() { - dataType = baseDataTypes::NONE; + dataType = baseDataTypes::DATA_TYPES::NONE; sizeX = sizeY = sizeZ = sizeT = 0; dimension = -1; dataSize = 0; @@ -61,7 +67,7 @@ { switch(dataType) { - case baseDataTypes::BOOL: + case baseDataTypes::DATA_TYPES::BOOL: break; case baseDataTypes::CHAR: @@ -86,16 +92,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 +116,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 +141,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 +183,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 +204,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 +225,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 +246,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 +267,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 +292,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 +317,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 +342,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 +383,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 +397,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 +411,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,11 +425,11 @@ { 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; } @@ -431,33 +437,37 @@ void CalculationData::setDataType(DATA_TYPES type) { - dataType = type; - dataSize = 0; - switch(dataType) + if(type!=dataType) { - case baseDataTypes::BOOL: + dataType = type; dataSize = 0; - break; + switch(dataType) + { + case baseDataTypes::BOOL: + dataSize = 0; + break; - case baseDataTypes::CHAR: - dataSize = sizeof(char); - break; + case baseDataTypes::CHAR: + dataSize = sizeof(char); + break; - case baseDataTypes::DOUBLE: - dataSize = sizeof(double); - break; + case baseDataTypes::DOUBLE: + dataSize = sizeof(double); + break; - case baseDataTypes::FLOAT: - dataSize = sizeof(float); - break; + case baseDataTypes::FLOAT: + dataSize = sizeof(float); + break; - case baseDataTypes::INT: - dataSize = sizeof(int); - break; + case baseDataTypes::INT: + dataSize = sizeof(int); + break; - case baseDataTypes::SHORT: - dataSize = sizeof(short); - break; + case baseDataTypes::SHORT: + dataSize = sizeof(short); + break; + } + resizeData(); } } @@ -472,42 +482,58 @@ bool CalculationData::resizeData(int x, char *dataPointer, bool foreignDataPointer) { - sizeX = x; - sizeY = 0; - sizeZ = 0; - sizeT = 0; - dimension = 1; - return resizeData(foreignDataPointer, dataPointer); + if(sizeX!=x || dimension!=1) + { + sizeX = x; + sizeY = 0; + sizeZ = 0; + sizeT = 0; + dimension = 1; + return resizeData(foreignDataPointer, dataPointer); + } + return 1; } bool CalculationData::resizeData(int x, int y, char *dataPointer, bool foreignDataPointer) { - sizeX = x; - sizeY = y; - sizeZ = 0; - sizeT = 0; - dimension = 2; - return resizeData(foreignDataPointer, dataPointer);; + if(sizeX!=x || sizeY!=y || dimension!=2) + { + sizeX = x; + sizeY = y; + sizeZ = 0; + sizeT = 0; + dimension = 2; + return resizeData(foreignDataPointer, dataPointer); + } + return 1; } bool CalculationData::resizeData(int x, int y, int z, char *dataPointer, bool foreignDataPointer) { - sizeX = x; - sizeY = y; - sizeZ = z; - sizeT = 0; - dimension = 3; - return resizeData(foreignDataPointer, dataPointer);; + if(sizeX!=x || sizeY!=y || sizeZ!=z || dimension!=3) + { + sizeX = x; + sizeY = y; + sizeZ = z; + sizeT = 0; + dimension = 3; + return resizeData(foreignDataPointer, dataPointer); + } + return 1; } 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 resizeData(foreignDataPointer, dataPointer); + if(sizeX!=x || sizeY!=y || sizeZ!=z || sizeT!=z || dimension!=3) + { + sizeX = x; + sizeY = y; + sizeZ = z; + sizeT = t; + dimension = 4; + return resizeData(foreignDataPointer, dataPointer); + } + return 1; } bool CalculationData::resizeData(QVector<int> newSize, char *dataPointer, bool foreignDataPointer) @@ -531,7 +557,7 @@ return sizeX; } -int CalculationData::getSizeY(void) +int CalculationData::getSizeY(void) { return sizeY; } @@ -550,10 +576,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 +592,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(char); } - case baseDataTypes::DOUBLE: + case baseDataTypes::DATA_TYPES::DOUBLE: switch(dimension) { case 1: @@ -579,7 +605,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(double); } - case baseDataTypes::FLOAT: + case baseDataTypes::DATA_TYPES::FLOAT: switch(dimension) { case 1: @@ -592,7 +618,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(float); } - case baseDataTypes::INT: + case baseDataTypes::DATA_TYPES::INT: switch(dimension) { case 1: @@ -605,7 +631,7 @@ return sizeX * sizeY * sizeZ * sizeT * sizeof(int); } - case baseDataTypes::SHORT: + case baseDataTypes::DATA_TYPES::SHORT: switch(dimension) { case 1: @@ -633,20 +659,25 @@ void CalculationData::fillData(const char *dataPointer) { - if(data!=NULL) - memcpy(data, dataPointer, getSizeInByte()); + if(!haveForeignDataPointer) + { + if(data!=NULL) + memcpy(data, dataPointer, getSizeInByte()); + emit dataUpdated(); + } } void CalculationData::setForeignDataPointer(char *dataPointer) { clearData(); data = dataPointer; + haveForeignDataPointer = 1; + emit dataUpdated(); } QString CalculationData::createXmlHeader(void) { - /// @todo The nasties thing to do - change that!!! - return QString::number((int)this); + return QString(); } bool CalculationData::setFromXmlString(QString *xmlString) @@ -682,5 +713,4 @@ fillData(cData.getDataPointer()); return *this; -} - +} \ No newline at end of file Modified: trunk/qcell/basesources/Renderer.cpp =================================================================== --- trunk/qcell/basesources/Renderer.cpp 2007-01-07 12:32:30 UTC (rev 111) +++ trunk/qcell/basesources/Renderer.cpp 2007-01-07 13:25:06 UTC (rev 112) @@ -53,9 +53,9 @@ painter.begin(OGLpBuffer); else painter.begin(imageBuffer); - for(int x=0;x<sizeX;++x) + for(int x=0;x<storage.getSizeX();++x) { - painter.setPen(symbolsMap[getValueAt_i(x)].color); + painter.setPen(symbolsMap[storage.getValueAt_i(x)].color); painter.drawPoint(x, 0); } painter.end(); @@ -71,11 +71,11 @@ painter.begin(OGLpBuffer); else painter.begin(imageBuffer); - for(int y=0;y<sizeY;++y) + for(int y=0;y<storage.getSizeY();++y) { - for(int x=0;x<sizeX;++x) + for(int x=0;x<storage.getSizeX();++x) { - painter.setPen(symbolsMap[getValueAt_i(x, y, zval)].color); + painter.setPen(symbolsMap[storage.getValueAt_i(x, y, zval)].color); painter.drawPoint(x, y); } } @@ -144,10 +144,8 @@ 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) @@ -155,16 +153,17 @@ discretValues = 1; OGLpBuffer = NULL; imageBuffer = NULL; -// painter = NULL; SYMBOL baseSymbols; baseSymbols.hide = 1; baseSymbols.primitiveID = 0; + baseSymbols.textSybmol = '.'; addSymbol(baseSymbols); setSymbolColor(0, QColor(0,0,0)); baseSymbols.hide = 0; baseSymbols.primitiveID = 0; + baseSymbols.textSybmol = '*'; addSymbol(baseSymbols); setSymbolColor(1, QColor(255,255,255)); @@ -190,7 +189,7 @@ delete imageBuffer; imageBuffer = NULL; } - +/* void Renderer::setDataType(baseDataTypes::DATA_TYPES type) { switch(type) @@ -216,18 +215,11 @@ if(CalculationData::resizeData(x, dataPointer, foreignDataPointer)) { - //if(painter) - // delete painter; - if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = new QGLPixelBuffer(sizeX, 1, format(), this); if(!OGLpBuffer->hasOpenGLPbuffers()) { - // painter = new QPainter(OGLpBuffer); - //} - //else - //{ if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = NULL; @@ -235,8 +227,6 @@ if(imageBuffer) delete imageBuffer; imageBuffer = new QImage(sizeX, 1, QImage::Format_RGB32); - //painter = new QPainter(imageBuffer); - } return 1; } @@ -247,19 +237,12 @@ { if(CalculationData::resizeData(x, y, dataPointer, foreignDataPointer)) { - //if(painter) - // delete painter; - if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = new QGLPixelBuffer(sizeX, sizeY, format(), this); if(!OGLpBuffer->hasOpenGLPbuffers()) { - // painter = new QPainter(OGLpBuffer); - //} - //else - //{ if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = NULL; @@ -267,7 +250,6 @@ if(imageBuffer) delete imageBuffer; imageBuffer = new QImage(sizeX, sizeY, QImage::Format_RGB32); - //painter = new QPainter(imageBuffer); } return 1; } @@ -279,19 +261,12 @@ if(CalculationData::resizeData(x, y, z, dataPointer, foreignDataPointer)) { - //if(painter) - // delete painter; - if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = new QGLPixelBuffer(sizeX, sizeY, format(), this); if(!OGLpBuffer->hasOpenGLPbuffers()) { - //painter = new QPainter(OGLpBuffer); - //} - //else - //{ if(OGLpBuffer) delete OGLpBuffer; OGLpBuffer = NULL; @@ -299,7 +274,6 @@ if(imageBuffer) delete imageBuffer; imageBuffer = new QImage(sizeX, sizeY, QImage::Format_RGB32); - //painter = new QPainter(imageBuffer); } return 1; } @@ -331,19 +305,19 @@ } 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) + float mx = -(float)storage.getSizeX(), my = -(float)storage.getSizeY(), mz = -(float)storage.getSizeZ(); + for(int z=0;z<storage.getSizeZ();++z) { - for(int y=sizeY;y>0;--y) + for(int y=storage.getSizeY();y>0;--y) { - for(int x=0;x<sizeX;++x) + for(int x=0;x<storage.getSizeX();++x) { - index = getValueAt_i(counter++); + index = storage.getValueAt_i(counter++); if(!(symbolsMap[index].hide)) { glPushMatrix(); @@ -362,7 +336,7 @@ { if(zplane==-1) { - switch(dimension) + switch(storage.getDimension()) { case 1: return render1D(); @@ -374,12 +348,28 @@ } else { - if(dimension>1) + if(storage.getDimension()>1) return render2D(zplane); } return QImage(); } +void Renderer::renderToPixmap(QPixmap *pixmap, int zval) +{ + if(storage.getDimension()>1) + { + painter.begin(pixmap); + for(int y=0;y<storage.getSizeY();++y) + { + for(int x=0;x<storage.getSizeX();++x) + { + painter.setPen(symbolsMap[storage.getValueAt_i(x, y, zval)].color); + painter.drawPoint(x, y); + } + } + painter.end(); + } +} bool Renderer::setSymbolColor(int index, QColor color) { @@ -434,6 +424,11 @@ symbolsMap<<symbol; } +SYMBOL Renderer::getSymbol(int index) +{ + return symbolsMap[index]; +} + void Renderer::setTranslation(float x, float y, float z) { translation[0] = x; @@ -448,3 +443,37 @@ rotation[2] = z; } +void Renderer::rotateX(float rot) +{ + rotation[0] += rot; +} + +void Renderer::rotateY(float rot) +{ + rotation[1] += rot; +} + +void Renderer::rotateZ(float rot) +{ + rotation[2] += rot; +} + +void Renderer::translateX(float trans) +{ + translation[0] += trans; +} + +void Renderer::translateY(float trans) +{ + translation[1] += trans; +} + +void Renderer::translateZ(float trans) +{ + translation[2] += trans; +} + +CalculationData * Renderer::getStorage(void) +{ + return &storage; +} \ No newline at end of file Added: trunk/qcell/basesources/simulationwindow.cpp =================================================================== --- trunk/qcell/basesources/simulationwindow.cpp (rev 0) +++ trunk/qcell/basesources/simulationwindow.cpp 2007-01-07 13:25:06 UTC (rev 112) @@ -0,0 +1,434 @@ +#include "../baseheaders/simulationwindow.h" + +void simulationWindow::mouseMoveEvent(QMouseEvent * event) +{ + if(ui.view3D->isVisible()) + { + if(event->buttons()==(Qt::LeftButton | Qt::RightButton)) + { + renderer->rotateX((float)(event->y() - cursor_y)/2.0f); + renderer->rotateY((float)(event->x() - cursor_x)/2.0f); + + } + else + if(event->buttons()==Qt::RightButton) + { + renderer->translateX((float)(event->x() - cursor_x)/10.0f); + renderer->translateY((float)(cursor_y - event->y())/10.0f); + } + + cursor_x = event->x(); + cursor_y = event->y(); + renderer->updateGL(); + } +} + +void simulationWindow::wheelEvent(QWheelEvent * event) +{ + if(ui.view3D->isVisible()) + { + renderer->translateZ((float)event->delta()/100.0f); + renderer->updateGL(); + } +/* + if(ui.view2DGraph->isVisible()) + { + //zoom =+ (float)event->delta(); + //graphicsScene2DPixmap->setZValue(zoom); + } +*/ + if(ui.view2DGraph->isVisible()) + { + if(renderer->getStorage()->getDimension()>2) + { + if(event->delta()>0) + ++z_plane; + else + --z_plane; + if(z_plane<0) + z_plane = 0; + + if(z_plane>=renderer->getStorage()->getSizeZ()) + z_plane = renderer->getStorage()->getSizeZ()-1; + + ui.Grid2DZplane->setValue(z_plane); + update2DGraph(); + table2DUpdateRequest = 1; + } + else + z_plane = 0; + + } +} + +void simulationWindow::mousePressEvent(QMouseEvent * event) +{ + if(ui.view3D->isVisible()) + { + cursor_x = event->x(); + cursor_y = event->y(); + } +} + +void simulationWindow::resizeEvent(QResizeEvent * event) +{ + + ui.tabWidget->resize(width() - 20, height() - 60); + ui.view1D->resize(ui.tabWidget->width(), ui.tabWidget->height() - 20); + ui.view2D->resize(ui.tabWidget->width(), ui.tabWidget->height() - 20); + ui.view3D->resize(ui.tabWidget->width(), ui.tabWidget->height() - 20); + ui.view2DGraph->resize(ui.tabWidget->width(), ui.tabWidget->height() - 20); + + + renderer->resize(ui.view3D->width() - 7, ui.view3D->height() - 7); + table2D->move(0, 35); + table2D->resize(ui.view2D->width() - 7 , ui.view2D->height() - 42); + graphicsView2D->resize(ui.view2DGraph->width() - 7, ui.view2DGraph->height() - 7); + + table1D->move(0, 35); + table1D->resize(ui.view1D->width() - 7, 75); + + table1DMem->move(0, 150); + table1DMem->resize(ui.view1D->width() - 7, ui.view1D->height() - 157); +} + +void simulationWindow::paintEvent(QPaintEvent * event) +{ + if(ui.view2D->isVisible() && table2DUpdateRequest) + { + update2DTable(); + table2DUpdateRequest = 0; + } + if(ui.view2DGraph->isVisible() && graph2DUpdateRequest) + { + update2DGraph(); + graph2DUpdateRequest = 0; + } + + if(ui.view1D->isVisible() && table1DUpdateRequest) + update1DTable(); +} + +void simulationWindow::update2DTable(void) +{ + QTableWidgetItem *item; + QProgressDialog progresDialog; + + progresDialog.setLabelText("Generating view pleas wait..."); + progresDialog.setMaximum(renderer->getStorage()->getSizeY()); + + progresDialog.show(); + + if(table2D->columnCount()!= renderer->getStorage()->getSizeX() || table2D->rowCount()!= renderer->getStorage()->getSizeY()) + { + ui.Grid2DZplane->setRange(0, renderer->getStorage()->getSizeZ()-1); + table2D->clear(); + table2D->setColumnCount(renderer->getStorage()->getSizeX()); + table2D->setRowCount(renderer->getStorage()->getSizeY()); + for(int i=0;i<renderer->getStorage()->getSizeY();++i) + table2D->setRowHeight(i, 30); + for(int i=0;i<renderer->getStorage()->getSizeX();++i) + table2D->setColumnWidth(i, 30); + + + for(int y=0;y<renderer->getStorage()->getSizeY();++y) + { + for(int x=0;x<renderer->getStorage()->getSizeX();++x) + { + if(ui.Grid2DValues->isChecked()) + item = new QTableWidgetItem(tr("%1").arg(renderer->getStorage()->getValueAt_i(x, y, z_plane))); + else + item = new QTableWidgetItem(tr("%1").arg(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x, y, z_plane)).textSybmol)); + item->setTextAlignment(Qt::AlignCenter); + item->setTextColor(Qt::black); + if(ui.Grig2DColors->isChecked()) + { + item->setBackgroundColor(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x, y, z_plane)).color); + if(item->textColor() == item->backgroundColor()) + { + if(item->backgroundColor()==Qt::black) + item->setTextColor(Qt::white); + else + item->setTextColor(Qt::black); + } + } + else + item->setBackgroundColor(Qt::white); + table2D->setItem(y, x, item); + } + progresDialog.setValue(y); + } + } + else + { + for(int y=0;y<renderer->getStorage()->getSizeY();++y) + { + for(int x=0;x<renderer->getStorage()->getSizeX();++x) + { + item = table2D->item(y, x); + if(ui.Grid2DValues->isChecked()) + item->setText(tr("%1").arg(renderer->getStorage()->getValueAt_i(x, y, z_plane))); + else + item->setText(tr("%1").arg(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x, y, z_plane)).textSybmol)); + + item->setTextColor(Qt::black); + if(ui.Grig2DColors->isChecked()) + { + item->setBackgroundColor(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x, y, z_plane)).color); + if(item->textColor() == item->backgroundColor()) + { + if(item->backgroundColor()==Qt::black) + item->setTextColor(Qt::white); + else + item->setTextColor(Qt::black); + } + } + else + item->setBackgroundColor(Qt::white); + } + progresDialog.setValue(y); + } + } +} + +void simulationWindow::update2DGraph(void) +{ + if(renderer->getStorage()->getDimension()>1) + { + if(pixmap->width() != renderer->getStorage()->getSizeX() || pixmap->height() != renderer->getStorage()->getSizeY()) + { + delete pixmap; + pixmap = new QPixmap(renderer->getStorage()->getSizeX(), renderer->getStorage()->getSizeY()); + } + renderer->renderToPixmap(pixmap, z_plane); + graphicsScene2DPixmap->setPixmap(*pixmap); + } +} + +void simulationWindow::update1DTable(void) +{ + QTableWidgetItem *item;//, *memItem; + if(table1D->columnCount()!= renderer->getStorage()->getSizeX()) + { + + table1D->clear(); + table1D->setColumnCount(renderer->getStorage()->getSizeX()); + table1D->setRowHeight(0, 30); + + table1DMem->clear(); + //table1DMem->setRowCount(1); + table1DMem->setColumnCount(renderer->getStorage()->getSizeX()); + table1DMem->setRowHeight(0, 30); + + for(int x=0;x<renderer->getStorage()->getSizeX();++x) + { + table1D->setColumnWidth(x, 30); + table1DMem->setColumnWidth(x, 30); + if(ui.Grid1DSybmols->isChecked()) + { + item = new QTableWidgetItem(tr("%1").arg(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x)).textSybmol)); + } + else + { + item = new QTableWidgetItem(tr("%1").arg(renderer->getStorage()->getValueAt_i(x))); + } + item->setTextAlignment(Qt::AlignCenter); + + item->setTextColor(Qt::black); + if(ui.Grig1DColors->isChecked()) + { + item->setBackgroundColor(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x)).color); + if(item->textColor() == item->backgroundColor()) + { + if(item->backgroundColor()==Qt::black) + item->setTextColor(Qt::white); + else + item->setTextColor(Qt::black); + } + } + else + item->setBackgroundColor(Qt::white); + + table1D->setItem(0, x, item); + + /* + memItem = new QTableWidgetItem(*item); + table1DMem->setItem(0, x, memItem); + */ + } + } + else + { + for(int x=0;x<renderer->getStorage()->getSizeX();++x) + { + item = table1D->item(0, x); + if(ui.Grid1DSybmols->isChecked()) + item->setText(tr("%1").arg(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x)).textSybmol)); + else + item->setText(tr("%1").arg(renderer->getStorage()->getValueAt_i(x))); + + item->setTextColor(Qt::black); + if(ui.Grig1DColors->isChecked()) + { + item->setBackgroundColor(renderer->getSymbol(renderer->getStorage()->getValueAt_i(x)).color); + if(item->textColor() == item->backgroundColor()) + { + if(item->backgroundColor()==Qt::black) + item->setTextColor(Qt::white); + else + item->setTextColor(Qt::black); + } + } + else + item->setBackgroundColor(Qt::white); + } + } +} + +void simulationWindow::update1DTableMem(void) +{ + QTableWidgetItem *item, *memItem; + table1DMem->setRowCount(table1DMem->rowCount()+1); + for(int x=0;x<renderer->getStorage()->getSizeX();++x) + { + item = table1D->item(0, x); + memItem = new QTableWidgetItem(*item); + table1DMem->setItem(table1DMem->rowCount() - 1, x, memItem); + } + if(table1DMem->rowCount()>30) + table1DMem->removeRow(0); +} + +simulationWindow::simulationWindow(QWidget *parent) + : QWidget(parent) +{ + z_plane = 0; + zoom = 1.0; + ui.setupUi(this); + + renderer = new Renderer(ui.view3D); + renderer->resize(ui.view3D->width(), ui.view3D->height()); + + graphicsView2D = new QGraphicsView(ui.view2DGraph); + graphicsScene2D = new QGraphicsScene; + + pixmap = new QPixmap(0, 0); + + graphicsScene2DPixmap = graphicsScene2D->addPixmap(*pixmap); + graphicsView2D->setScene(graphicsScene2D); + + table1D = new QTableWidget(ui.view1D); + table1D->setRowCount(1); + + table1DMem = new QTableWidget(ui.view1D); + + table2D = new QTableWidget(ui.view2D); + connect(ui.Grid2DZplane, SIGNAL(valueChanged(int)), SLOT(zPlaneChange(int))); + connect(renderer->getStorage(), SIGNAL(dataUpdated()), SLOT(dataUpdateRequest())); + + connect(ui.Grid2DSybmols, SIGNAL(clicked(bool)), SLOT(GridView2DRepaint())); + connect(ui.Grid2DValues, SIGNAL(clicked(bool)), SLOT(GridView2DRepaint())); + connect(ui.Grig2DColors, SIGNAL(clicked(bool)), SLOT(GridView2DRepaint())); + + connect(ui.Grid1DSybmols, SIGNAL(clicked(bool)), SLOT(GridView1DRepaint())); + connect(ui.Grid1DValues, SIGNAL(clicked(bool)), SLOT(GridView1DRepaint())); + connect(ui.Grig1DColors, SIGNAL(clicked(bool)), SLOT(GridView1DRepaint())); + + connect(renderer->getStorage(), SIGNAL(dataResized()), SLOT(dataResizeRequest())); + + connect(ui.memClr, SIGNAL(clicked(bool)), SLOT(GridView1DMemClear())); + + table2DUpdateRequest = 0; + table1DUpdateRequest = 0; +} + +simulationWindow::~simulationWindow() +{ + if(renderer) + delete renderer; + renderer = NULL; + + if(pixmap) + delete pixmap; +} + +Renderer * simulationWindow::getRenderer() +{ + return renderer; +} + +CalculationData *simulationWindow::getStorage() +{ + return renderer->getStorage(); +} + +void simulationWindow::zPlaneChange(int i) +{ + z_plane = i; + if(ui.view2D->isVisible()) + update2DTable(); + graph2DUpdateRequest = 1; +} + +void simulationWindow::dataUpdateRequest(void) +{ + switch(renderer->getStorage()->getDimension()) + { + case 1: + update1DTable(); + update1DTableMem(); + break; + case 3: + renderer->repaint(); + + case 2: + update2DTable(); + update2DGraph(); + break; + } +} + +void simulationWindow::dataResizeRequest(void) +{ + switch(renderer->getStorage()->getDimension()) + { + case 1: + ui.tabWidget->setTabEnabled(0, 0); + ui.tabWidget->setTabEnabled(1, 0); + ui.tabWidget->setTabEnabled(2, 0); + ui.tabWidget->setTabEnabled(3, 1); + break; + + case 2: + ui.tabWidget->setTabEnabled(0, 0); + ui.tabWidget->setTabEnabled(1, 1); + ui.tabWidget->setTabEnabled(2, 1); + ui.tabWidget->setTabEnabled(3, 0); + break; + + case 3: + ui.tabWidget->setTabEnabled(0, 1); + ui.tabWidget->setTabEnabled(1, 1); + ui.tabWidget->setTabEnabled(2, 1); + ui.tabWidget->setTabEnabled(3, 0); + break; + } +} + +void simulationWindow::GridView2DRepaint() +{ + update2DTable(); +} + +void simulationWindow::GridView1DRepaint() +{ + update1DTable(); +} + +void simulationWindow::GridView1DMemClear(void) +{ + while(table1DMem->rowCount()>0) + table1DMem->removeRow(0); + + update1DTableMem(); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |