|
From: <le...@us...> - 2007-01-15 16:41:35
|
Revision: 175
http://svn.sourceforge.net/qcell/?rev=175&view=rev
Author: lessm
Date: 2007-01-15 08:41:12 -0800 (Mon, 15 Jan 2007)
Log Message:
-----------
- all modes and views work properly(i think)
Modified Paths:
--------------
trunk/qcell/baseheaders/Renderer.h
trunk/qcell/basesources/Renderer.cpp
trunk/qcell/basesources/simulationwindow.cpp
Added Paths:
-----------
trunk/qcell/bin/observer.png
Modified: trunk/qcell/baseheaders/Renderer.h
===================================================================
--- trunk/qcell/baseheaders/Renderer.h 2007-01-15 09:11:48 UTC (rev 174)
+++ trunk/qcell/baseheaders/Renderer.h 2007-01-15 16:41:12 UTC (rev 175)
@@ -38,12 +38,15 @@
QPainter painter;
bool discretValues;
bool corectPerspective;
- QVector<GLuint> primitives;
+ QVector<GLuint> primitives;
+ GLuint observer;
+ GLuint observerTexture;
QVector<double> rotation, translation;
GLuint generateBox(void);
void generateGreed(void);
+ void generateObserver(void);
int cursor_x, cursor_y;
@@ -63,7 +66,10 @@
bool showSelectRect;
int workMode;
int editValue;
+ bool showLocalObserver;
+ QVector<int> localObserverCoords;
+
protected:
void initializeGL();
void paintGL();
@@ -80,7 +86,7 @@
Renderer(QWidget *parent);
~Renderer();
- void selectOne(int x, int y);
+ bool selectOne(int x, int y);
void multiSelect(int x, int y, int width, int height);
void drawRect(int x1, int y1, int x2, int y2);
/*
@@ -128,6 +134,9 @@
void modeEdit(void);
void setEditValue(int value);
+ void showObserver(bool flag);
+ void setObserverPosition(int x, int y, int z);
+
protected slots:
void resizeDataEvent(void);
Modified: trunk/qcell/basesources/Renderer.cpp
===================================================================
--- trunk/qcell/basesources/Renderer.cpp 2007-01-15 09:11:48 UTC (rev 174)
+++ trunk/qcell/basesources/Renderer.cpp 2007-01-15 16:41:12 UTC (rev 175)
@@ -155,6 +155,37 @@
glEndList();
}
+void Renderer::generateObserver(void)
+{
+ glEnable(GL_TEXTURE_2D);
+ observerTexture = bindTexture(QPixmap(QString("./observer.png")), GL_TEXTURE_2D);
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
+ if(observer>0)
+ glDeleteLists(observer, 1);
+ observer = glGenLists(1);
+ glNewList(observer, GL_COMPILE);
+
+ glBegin(GL_QUADS);
+ glTexCoord2f(0.0f, 0.0f);
+ glVertex3f(-1.0f, -1.0f, 0.0f);
+ glTexCoord2f(1.0f, 0.0f);
+ glVertex3f( 1.0f, -1.0f, 0.0f);
+ glTexCoord2f(1.0f, 1.0f);
+ glVertex3f( 1.0f, 1.0f, 0.0f);
+ glTexCoord2f(0.0f, 1.0f);
+ glVertex3f( -1.0f, 1.0f, 0.0f);
+ glEnd();
+
+ glEndList();
+ glDisable(GL_TEXTURE_2D);
+}
+
QImage Renderer::render1D(void)
{
if(OGLpBuffer)
@@ -231,6 +262,7 @@
glLightfv(GL_LIGHT0, GL_POSITION, position);
primitives<<generateBox();
+ generateObserver();
}
void Renderer::paintGL()
@@ -246,8 +278,10 @@
glRotatef(rotation[2], 0.0f, 0.0f, 1.0f);
render();
+
if(showSelectRect)
drawRect(selectRect[0], selectRect[1], selectRect[2], selectRect[3]);
+
}
void Renderer::resizeGL(int width, int height)
@@ -270,15 +304,15 @@
void Renderer::mouseReleaseEvent(QMouseEvent * event)
{
- if(showSelectRect)
+ if(showSelectRect && workMode==0)
{
multiSelect(abs((selectRect[0] + selectRect[2])/2), abs((selectRect[1] + selectRect[3])/2), abs(selectRect[0] - selectRect[2]), abs(selectRect[1] - selectRect[3]));
}
else
if(mouseButtons==Qt::LeftButton)
{
- selectOne(event->x(), event->y());
- if(selectetObjects.size()>0)
+
+ if(selectOne(event->x(), event->y()))
{
if(workMode==1)
getStorage()->setValueAt(editValue, selectetObjects[0]);
@@ -397,6 +431,8 @@
showSelectRect = 0;
workMode = 0;
editValue = 0;
+ localObserverCoords.resize(3);
+ showLocalObserver = 0;
}
Renderer::~Renderer()
@@ -405,8 +441,12 @@
for(int i=0;i<primitives.size();++i)
glDeleteLists(primitives[i], 1);
- glDeleteLists(greed, 1);
+ if(greed>0)
+ glDeleteLists(greed, 1);
+ if(observer>0)
+ glDeleteLists(observer, 1);
+
// if(painter)
// delete painter;
// painter = NULL;
@@ -420,7 +460,7 @@
imageBuffer = NULL;
}
-void Renderer::selectOne(int x, int y)
+bool Renderer::selectOne(int x, int y)
{
unsigned int minVal = 0xffffffff;
int minValIndex = -1;
@@ -439,6 +479,7 @@
selectetObjects<<minValIndex;
updateGL();
}
+ return numberOfSelectetObject>0;
}
void Renderer::multiSelect(int x, int y, int width, int height)
@@ -623,6 +664,7 @@
glEnable(GL_LIGHTING);
}
SYMBOL symbol;
+
for(int z=0;z<storage.getSizeZ();++z)
{
for(int y=storage.getSizeY();y>0;--y)
@@ -696,6 +738,25 @@
}
}
}
+ if(showLocalObserver && !selectionMode)
+ {
+
+ glPushMatrix();
+ glTranslatef(mx + (float)localObserverCoords[0] * 2.0f , my + (storage.getSizeY() - (float)localObserverCoords[1]) * 2.0f, mz + (float)localObserverCoords[2] * 2.0f);
+ glRotatef(rotation[2], 0.0f, 0.0f, -1.0f);
+ glRotatef(rotation[1], 0.0f, -1.0f, 0.0f);
+ glRotatef(rotation[0], -1.0f, 0.0f, 0.0f);
+
+ glBlendFunc(GL_ONE, GL_ONE);
+ glEnable(GL_BLEND);
+ glDisable(GL_LIGHTING);
+ glEnable(GL_TEXTURE_2D);
+ glCallList(observer);
+ glDisable(GL_TEXTURE_2D);
+ glEnable(GL_LIGHTING);
+ glDisable(GL_BLEND);
+ glPopMatrix();
+ }
}
QImage Renderer::renderToQImage(int zplane)
@@ -944,3 +1005,15 @@
{
editValue = value;
}
+
+void Renderer::showObserver(bool flag)
+{
+ showLocalObserver = flag;
+}
+
+void Renderer::setObserverPosition(int x, int y, int z)
+{
+ localObserverCoords[0] = x;
+ localObserverCoords[1] = y;
+ localObserverCoords[2] = z;
+}
Modified: trunk/qcell/basesources/simulationwindow.cpp
===================================================================
--- trunk/qcell/basesources/simulationwindow.cpp 2007-01-15 09:11:48 UTC (rev 174)
+++ trunk/qcell/basesources/simulationwindow.cpp 2007-01-15 16:41:12 UTC (rev 175)
@@ -653,6 +653,7 @@
localViewFlag = 0;
connect(renderer, SIGNAL(objectSelected(int, int, int)), SLOT(view3DselectedObject(int, int, int)));
+ storeCurentTable = NULL;
}
simulationWindow::~simulationWindow()
@@ -663,6 +664,8 @@
if(pixmap)
delete pixmap;
+
+ storeCurentTable = NULL;
}
Renderer * simulationWindow::getRenderer()
@@ -689,6 +692,13 @@
if(ui.view2DGraph->isVisible())
update2DGraph();
}
+ if(workMode==3)
+ {
+ if(localObserverPosition[2]==i)
+ table2D->item(localObserverPosition[1], localObserverPosition[0])->setSelected(1);
+ else
+ table2D->item(localObserverPosition[1], localObserverPosition[0])->setSelected(0);
+ }
}
void simulationWindow::dataUpdateRequest(void)
@@ -715,7 +725,7 @@
switch(renderer->getStorage()->getDimension())
{
case 1:
- if(ui.view3D->isVisible())
+ if(ui.view1D->isVisible())
{
update1DTable();
update1DTableMem();
@@ -797,6 +807,7 @@
localObserverPosition[0] = 0;
localObserverPosition[1] = 0;
localObserverPosition[2] = 0;
+ renderer->setObserverPosition(0,0,0);
if(localViewFlag)
{
loclaViewMemory[0] = *getStorage();
@@ -961,6 +972,9 @@
localObserverPosition[0] = column;
localObserverPosition[1] = row;
localObserverPosition[2] = z_plane;
+
+ renderer->setObserverPosition(localObserverPosition[0], localObserverPosition[1], localObserverPosition[2]);
+
localViewReinterprete();
update2DTable();
graph2DUpdateRequest = 1;
@@ -1013,11 +1027,24 @@
}
}
}
+ if(workMode==3)
+ {
+ localObserverPosition[0] = column;
+ localObserverPosition[1] = row;
+ localObserverPosition[2] = 0;
+ renderer->setObserverPosition(localObserverPosition[0], localObserverPosition[1], localObserverPosition[2]);
+ localViewReinterprete();
+ update1DTable();
+ graph2DUpdateRequest = 1;
+ }
}
void simulationWindow::workModeChange(int mode)
{
workMode = mode;
+
+ renderer->showObserver(mode==3);
+
if(mode==1)
renderer->modeEdit();
if(mode==0)
@@ -1032,6 +1059,9 @@
getStorage()->setForeignDataPointer(localView.getDataPointer(), 1);
localViewFlag = 1;
renderer->modeEdit();
+ if(ui.view2D->isVisible())
+ zPlaneChange(z_plane);
+ table1D->item(localObserverPosition[1], localObserverPosition[0])->setSelected(1);
}
if(mode==2)
{
@@ -1106,6 +1136,7 @@
localObserverPosition[0] = x;
localObserverPosition[1] = y;
localObserverPosition[2] = z;
+ renderer->setObserverPosition(localObserverPosition[0], localObserverPosition[1], localObserverPosition[2]);
localViewReinterprete();
table2DUpdateRequest = 1;
graph2DUpdateRequest = 1;
Added: trunk/qcell/bin/observer.png
===================================================================
(Binary files differ)
Property changes on: trunk/qcell/bin/observer.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|