From: <le...@us...> - 2007-01-07 19:07:35
|
Revision: 113 http://svn.sourceforge.net/qcell/?rev=113&view=rev Author: lessm Date: 2007-01-07 11:07:33 -0800 (Sun, 07 Jan 2007) Log Message: ----------- - simulationWindow class can edit Symbols Modified Paths: -------------- trunk/qcell/baseheaders/BaseDataTypes.h trunk/qcell/baseheaders/Renderer.h trunk/qcell/baseheaders/simulationwindow.h trunk/qcell/baseheaders/simulationwindow.ui trunk/qcell/basesources/Renderer.cpp trunk/qcell/basesources/simulationwindow.cpp Modified: trunk/qcell/baseheaders/BaseDataTypes.h =================================================================== --- trunk/qcell/baseheaders/BaseDataTypes.h 2007-01-07 13:25:06 UTC (rev 112) +++ trunk/qcell/baseheaders/BaseDataTypes.h 2007-01-07 19:07:33 UTC (rev 113) @@ -3,7 +3,7 @@ #include <QObject> -class baseDataTypes : QObject +class baseDataTypes : public QObject { Q_OBJECT private: Modified: trunk/qcell/baseheaders/Renderer.h =================================================================== --- trunk/qcell/baseheaders/Renderer.h 2007-01-07 13:25:06 UTC (rev 112) +++ trunk/qcell/baseheaders/Renderer.h 2007-01-07 19:07:33 UTC (rev 113) @@ -29,6 +29,7 @@ private: protected: QVector<SYMBOL> symbolsMap; + GLuint greed; QGLPixelBuffer *OGLpBuffer; QImage *imageBuffer; QPainter painter; @@ -38,6 +39,7 @@ QVector<double> rotation, translation; GLuint generateBox(void); + void generateGreed(void); QImage render1D(void); QImage render2D(int zval=0); @@ -70,8 +72,11 @@ bool hideSymbol(int index); bool showSymbol(int index); bool setSymbolPrimitive(int index, int primitiveId); + void setSymbol(int index, QChar symbol); void addSymbol(SYMBOL symbol); SYMBOL getSymbol(int index); + int getSymbolCount(void); + void removeSymbol(void); void setTranslation(float x, float y, float z); void setRotation(float x, float y, float z); @@ -84,6 +89,9 @@ void translateZ(float trans); CalculationData * getStorage(void); + +protected slots: + void resizeDataEvent(void); }; #endif Modified: trunk/qcell/baseheaders/simulationwindow.h =================================================================== --- trunk/qcell/baseheaders/simulationwindow.h 2007-01-07 13:25:06 UTC (rev 112) +++ trunk/qcell/baseheaders/simulationwindow.h 2007-01-07 19:07:33 UTC (rev 113) @@ -11,6 +11,7 @@ #include <QPixmap> #include <QGraphicsPixmapItem> #include <QProgressDialog> +#include <QColorDialog> #include "ui_simulationwindow.h" #include "../baseheaders/Renderer.h" @@ -31,6 +32,7 @@ QTableWidget *table2D; QTableWidget *table1D; QTableWidget *table1DMem; + QTableWidget *symbolTable; bool table2DUpdateRequest, table1DUpdateRequest, graph2DUpdateRequest; @@ -52,6 +54,7 @@ void update2DGraph(void); void update1DTable(void); void update1DTableMem(void); + void updateSymbolTable(void); public: simulationWindow(QWidget *parent = 0); @@ -67,6 +70,13 @@ void GridView2DRepaint(void); void GridView1DRepaint(void); void GridView1DMemClear(void); + + void symbolTableChange(int row, int column); + void symbolTableColorChange(int row, int column); + + void addSymbol(void); + void removeSymbol(void); + signals: void progressUpdate(int val); Modified: trunk/qcell/baseheaders/simulationwindow.ui =================================================================== --- trunk/qcell/baseheaders/simulationwindow.ui 2007-01-07 13:25:06 UTC (rev 112) +++ trunk/qcell/baseheaders/simulationwindow.ui 2007-01-07 19:07:33 UTC (rev 113) @@ -20,7 +20,7 @@ <enum>QTabWidget::Rounded</enum> </property> <property name="currentIndex" > - <number>3</number> + <number>1</number> </property> <widget class="QWidget" name="view3D" > <attribute name="title" > @@ -110,7 +110,7 @@ </widget> <widget class="QWidget" name="view1D" > <attribute name="title" > - <string>1D View</string> + <string>1D Text View</string> </attribute> <widget class="QRadioButton" name="Grid1DSybmols" > <property name="geometry" > @@ -168,6 +168,37 @@ </property> </widget> </widget> + <widget class="QWidget" name="symbolConfig" > + <attribute name="title" > + <string>Symbols Configuration</string> + </attribute> + <widget class="QPushButton" name="removeSymbol" > + <property name="geometry" > + <rect> + <x>110</x> + <y>10</y> + <width>90</width> + <height>23</height> + </rect> + </property> + <property name="text" > + <string>Remove Symbol</string> + </property> + </widget> + <widget class="QPushButton" name="addSymbol" > + <property name="geometry" > + <rect> + <x>10</x> + <y>10</y> + <width>90</width> + <height>23</height> + </rect> + </property> + <property name="text" > + <string>Add Symbol</string> + </property> + </widget> + </widget> </widget> </widget> <layoutdefault spacing="6" margin="11" /> Modified: trunk/qcell/basesources/Renderer.cpp =================================================================== --- trunk/qcell/basesources/Renderer.cpp 2007-01-07 13:25:06 UTC (rev 112) +++ trunk/qcell/basesources/Renderer.cpp 2007-01-07 19:07:33 UTC (rev 113) @@ -47,6 +47,68 @@ return list; } +void Renderer::generateGreed(void) +{ + + float mov; + if(greed>0) + glDeleteLists(greed, 1); + greed = glGenLists(1); + glNewList(greed, GL_COMPILE); + + glBegin(GL_LINES); + glColor3f(1.0f, 1.0f, 1.0f); + + float mx = (float)getStorage()->getSizeX() / 2.0f, my = (float)getStorage()->getSizeY() / 2.0f, mz = (float)getStorage()->getSizeZ() / 2.0f; + + mov = (float)getStorage()->getSizeY(); + for(int y=0;y<getStorage()->getSizeY() + 1;++y) + { + glVertex3f(-(float)getStorage()->getSizeX() - 1.0f, (float)(y * 2) - mov + 1.0f, -(float)(getStorage()->getSizeZ()) - mz -1.0f); + glVertex3f( (float)getStorage()->getSizeX() - 1.0f, (float)(y * 2) - mov + 1.0f, -(float)(getStorage()->getSizeZ()) - mz -1.0f); + } + + mov = (float)getStorage()->getSizeX(); + for(int x=0;x<getStorage()->getSizeX() + 1; ++x) + { + glVertex3f((float)(x * 2) - mov -1.0f, -(float)getStorage()->getSizeY() + 1.0f, -(float)(getStorage()->getSizeZ()) - mz -1.0f); + glVertex3f((float)(x * 2) - mov -1.0f, (float)getStorage()->getSizeY() + 1.0f, -(float)(getStorage()->getSizeZ()) - mz -1.0f); + } + + + mov = (float)getStorage()->getSizeZ(); + for(int z=0;z<getStorage()->getSizeZ() + 1;++z) + { + glVertex3f(-(float)getStorage()->getSizeX() -1.0f, (float)(getStorage()->getSizeY()) + my + 1.0f, (float)(z * 2) - mov -1.0f); + glVertex3f( (float)getStorage()->getSizeX() -1.0f, (float)(getStorage()->getSizeY()) + my + 1.0f, (float)(z * 2) - mov -1.0f); + } + + mov = (float)getStorage()->getSizeX(); + for(int x=0;x<getStorage()->getSizeX() + 1; ++x) + { + glVertex3f((float)(x * 2) - mov -1.0f, (float)(getStorage()->getSizeY()) + my + 1.0f, -(float)getStorage()->getSizeZ() -1.0f); + glVertex3f((float)(x * 2) - mov -1.0f, (float)(getStorage()->getSizeY()) + my + 1.0f, (float)getStorage()->getSizeZ() -1.0f); + } + + + mov = (float)getStorage()->getSizeY(); + for(int y=0;y<getStorage()->getSizeY() + 1;++y) + { + glVertex3f(-(float)getStorage()->getSizeX() - mx -1.0f, (float)(y * 2) - mov + 1.0f, -(float)(getStorage()->getSizeZ()) -1.0f); + glVertex3f(-(float)getStorage()->getSizeX() - mx -1.0f, (float)(y * 2) - mov + 1.0f, (float)(getStorage()->getSizeZ()) -1.0f); + } + + mov = (float)getStorage()->getSizeZ(); + for(int z=0;z<getStorage()->getSizeZ() + 1;++z) + { + glVertex3f(-(float)getStorage()->getSizeX() - mx -1.0f, -(float)(getStorage()->getSizeY()) + 1.0f, (float)(z * 2) - mov -1.0f); + glVertex3f(-(float)getStorage()->getSizeX() - mx -1.0f, (float)(getStorage()->getSizeY()) + 1.0f, (float)(z * 2) - mov -1.0f); + } + + glEnd(); + glEndList(); +} + QImage Renderer::render1D(void) { if(OGLpBuffer) @@ -127,6 +189,8 @@ void Renderer::paintGL() { + if(greed==0) + generateGreed(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); @@ -169,6 +233,10 @@ translation.resize(3); rotation.resize(3); + + greed = 0; + + connect(&storage, SIGNAL(dataResized()), SLOT(resizeDataEvent())); } Renderer::~Renderer() @@ -177,6 +245,8 @@ for(int i=0;i<primitives.size();++i) glDeleteLists(primitives[i], 1); + glDeleteLists(greed, 1); + // if(painter) // delete painter; // painter = NULL; @@ -310,6 +380,9 @@ { int counter = 0, index; float mx = -(float)storage.getSizeX(), my = -(float)storage.getSizeY(), mz = -(float)storage.getSizeZ(); + glDisable(GL_LIGHTING); + glCallList(greed); + glEnable(GL_LIGHTING); for(int z=0;z<storage.getSizeZ();++z) { for(int y=storage.getSizeY();y>0;--y) @@ -419,6 +492,11 @@ return 0; } +void Renderer::setSymbol(int index, QChar symbol) +{ + symbolsMap[index].textSybmol = symbol; +} + void Renderer::addSymbol(SYMBOL symbol) { symbolsMap<<symbol; @@ -429,6 +507,17 @@ return symbolsMap[index]; } +int Renderer::getSymbolCount(void) +{ + return symbolsMap.size(); +} + +void Renderer::removeSymbol(void) +{ + if(symbolsMap.size()>2) + symbolsMap.remove(symbolsMap.size()-1); +} + void Renderer::setTranslation(float x, float y, float z) { translation[0] = x; @@ -476,4 +565,12 @@ CalculationData * Renderer::getStorage(void) { return &storage; +} + +void Renderer::resizeDataEvent(void) +{ + + if(greed>0) + glDeleteLists(greed, 1); + greed = 0; } \ No newline at end of file Modified: trunk/qcell/basesources/simulationwindow.cpp =================================================================== --- trunk/qcell/basesources/simulationwindow.cpp 2007-01-07 13:25:06 UTC (rev 112) +++ trunk/qcell/basesources/simulationwindow.cpp 2007-01-07 19:07:33 UTC (rev 113) @@ -78,8 +78,8 @@ 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); + ui.symbolConfig->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); @@ -90,6 +90,9 @@ table1DMem->move(0, 150); table1DMem->resize(ui.view1D->width() - 7, ui.view1D->height() - 157); + + symbolTable->move(0, 35); + symbolTable->resize(ui.symbolConfig->width() - 7, ui.symbolConfig->height() -42); } void simulationWindow::paintEvent(QPaintEvent * event) @@ -106,7 +109,15 @@ } if(ui.view1D->isVisible() && table1DUpdateRequest) + { update1DTable(); + table1DUpdateRequest = 0; + } + + if(ui.symbolConfig->isVisible()) + { + updateSymbolTable(); + } } void simulationWindow::update2DTable(void) @@ -139,6 +150,7 @@ 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->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); item->setTextAlignment(Qt::AlignCenter); item->setTextColor(Qt::black); if(ui.Grig2DColors->isChecked()) @@ -232,6 +244,7 @@ { item = new QTableWidgetItem(tr("%1").arg(renderer->getStorage()->getValueAt_i(x))); } + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); item->setTextAlignment(Qt::AlignCenter); item->setTextColor(Qt::black); @@ -299,6 +312,75 @@ table1DMem->removeRow(0); } +void simulationWindow::updateSymbolTable(void) +{ + QTableWidgetItem *item; + SYMBOL temp; + if(symbolTable->rowCount() != renderer->getSymbolCount()) + { + symbolTable->setRowCount(renderer->getSymbolCount()); + for(int i=0;i<symbolTable->rowCount();++i) + { + temp = renderer->getSymbol(i); + item = new QTableWidgetItem; + item->setTextAlignment(Qt::AlignCenter); + item->setFlags(0); + item->setText(tr("%1").arg(i)); + symbolTable->setItem(i, 0, item); + + item = new QTableWidgetItem; + item->setTextAlignment(Qt::AlignCenter); + item->setText(tr("%1").arg(temp.textSybmol)); + symbolTable->setItem(i, 1, item); + + item = new QTableWidgetItem; + item->setTextAlignment(Qt::AlignCenter); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + item->setBackgroundColor(temp.color); + symbolTable->setItem(i, 2, item); + + item = new QTableWidgetItem; + item->setTextAlignment(Qt::AlignCenter); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + item->setText(tr("%1").arg(temp.primitiveID)); + symbolTable->setItem(i, 3, item); + + item = new QTableWidgetItem; + item->setTextAlignment(Qt::AlignCenter); + item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); + if(temp.hide) + item->setCheckState(Qt::Checked); + else + item->setCheckState(Qt::Unchecked); + symbolTable->setItem(i, 4, item); + } + } + else + { + for(int i=0;i<renderer->getSymbolCount();++i) + { + temp = renderer->getSymbol(i); + item = symbolTable->item(i, 0); + item->setText(tr("%1").arg(i)); + + item = symbolTable->item(i, 1); + item->setText(tr("%1").arg(temp.textSybmol)); + + item = symbolTable->item(i, 2); + item->setBackgroundColor(temp.color); + + item = symbolTable->item(i, 3); + item->setText(tr("%1").arg(temp.primitiveID)); + + item = symbolTable->item(i, 4); + if(temp.hide) + item->setCheckState(Qt::Checked); + else + item->setCheckState(Qt::Unchecked); + } + } +} + simulationWindow::simulationWindow(QWidget *parent) : QWidget(parent) { @@ -322,6 +404,14 @@ table1DMem = new QTableWidget(ui.view1D); + symbolTable = new QTableWidget(ui.symbolConfig); + symbolTable->setColumnCount(5); + symbolTable->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Value"))); + symbolTable->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Symbol"))); + symbolTable->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Color"))); + symbolTable->setHorizontalHeaderItem(3, new QTableWidgetItem(tr("Model"))); + symbolTable->setHorizontalHeaderItem(4, new QTableWidgetItem(tr("Hide Flag"))); + table2D = new QTableWidget(ui.view2D); connect(ui.Grid2DZplane, SIGNAL(valueChanged(int)), SLOT(zPlaneChange(int))); connect(renderer->getStorage(), SIGNAL(dataUpdated()), SLOT(dataUpdateRequest())); @@ -338,6 +428,12 @@ connect(ui.memClr, SIGNAL(clicked(bool)), SLOT(GridView1DMemClear())); + connect(symbolTable, SIGNAL(cellChanged(int, int)), SLOT(symbolTableChange(int, int))); + connect(symbolTable, SIGNAL(cellDoubleClicked(int, int)), SLOT(symbolTableColorChange(int, int))); + + connect(ui.addSymbol, SIGNAL(clicked(bool)), SLOT(addSymbol())); + connect(ui.removeSymbol, SIGNAL(clicked(bool)), SLOT(removeSymbol())); + table2DUpdateRequest = 0; table1DUpdateRequest = 0; } @@ -432,3 +528,69 @@ update1DTableMem(); } + +void simulationWindow::symbolTableChange(int row, int column) +{ + QChar temp; + QTableWidgetItem *item; + item = symbolTable->item(row, column); + if(column==1) + { + temp = (item->text())[0]; + renderer->setSymbol(row, temp); + item->setText(temp); + table2DUpdateRequest = table1DUpdateRequest = 1; + } + else + if(column==4) + { + + if(item->checkState()==Qt::Checked) + renderer->hideSymbol(row); + else + renderer->showSymbol(row); + + renderer->repaint(); + } +} + +void simulationWindow::symbolTableColorChange(int row, int column) +{ + QTableWidgetItem *item; + item = symbolTable->item(row, column); + if(column==2) + { + QColor color = QColorDialog::getColor(); + if(color.isValid()) + { + item->setBackgroundColor(color); + renderer->setSymbolColor(row, color); + renderer->repaint(); + + if(ui.Grig1DColors->isChecked()) + table1DUpdateRequest = 1; + + if(ui.Grig2DColors->isChecked()) + table2DUpdateRequest = 1; + + graph2DUpdateRequest = 1; + } + } +} + +void simulationWindow::addSymbol(void) +{ + SYMBOL symbol; + symbol.primitiveID = 0; + symbol.hide = 0; + symbol.textSybmol = '1'; + renderer->addSymbol(symbol); + renderer->setSymbolColor(renderer->getSymbolCount()-1, QColor(255, 255, 255)); + updateSymbolTable(); +} + +void simulationWindow::removeSymbol(void) +{ + renderer->removeSymbol(); + updateSymbolTable(); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |