|
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.
|