From: <le...@us...> - 2007-01-15 01:42:50
|
Revision: 171 http://svn.sourceforge.net/qcell/?rev=171&view=rev Author: lessm Date: 2007-01-14 17:42:48 -0800 (Sun, 14 Jan 2007) Log Message: ----------- - Local Observer added Modified Paths: -------------- trunk/qcell/baseheaders/CalculationData.h trunk/qcell/baseheaders/Renderer.h trunk/qcell/baseheaders/basetools.h trunk/qcell/baseheaders/basetools.ui trunk/qcell/baseheaders/simulationwindow.h trunk/qcell/baseheaders/view3dtools.ui trunk/qcell/basesources/CalculationData.cpp trunk/qcell/basesources/Renderer.cpp trunk/qcell/basesources/basetools.cpp trunk/qcell/basesources/simulationwindow.cpp Modified: trunk/qcell/baseheaders/CalculationData.h =================================================================== --- trunk/qcell/baseheaders/CalculationData.h 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/baseheaders/CalculationData.h 2007-01-15 01:42:48 UTC (rev 171) @@ -28,6 +28,7 @@ public: CalculationData(); + CalculationData(CalculationData &cData); ~CalculationData(); int getValueAt_i(int x); @@ -74,7 +75,7 @@ /*const*/ char *getDataPointer(void); void fillData(char *dataPointer); - void setForeignDataPointer(char *dataPointer); + void setForeignDataPointer(char *dataPointer, bool silent=0); QString createXmlHeader(void); bool setFromXmlString(QString *xmlString); Modified: trunk/qcell/baseheaders/Renderer.h =================================================================== --- trunk/qcell/baseheaders/Renderer.h 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/baseheaders/Renderer.h 2007-01-15 01:42:48 UTC (rev 171) @@ -118,8 +118,15 @@ void setOrtoPerspective(bool noClear=1); void setRealPerspective(bool noClear=1); + void fillSelected(int value); + + QVector<int> getSelectedCoord(void); + protected slots: void resizeDataEvent(void); + +signals: + void objectSelected(int x, int y, int z); }; #endif Modified: trunk/qcell/baseheaders/basetools.h =================================================================== --- trunk/qcell/baseheaders/basetools.h 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/baseheaders/basetools.h 2007-01-15 01:42:48 UTC (rev 171) @@ -22,6 +22,8 @@ protected slots: void modeChangeSelect(void); void modeChangeEdit(void); + void modeChangeGlobalView(void); + void modeChangeLocalView(void); void commandCopy(void); void commandPaste(void); void commandFill(void); Modified: trunk/qcell/baseheaders/basetools.ui =================================================================== --- trunk/qcell/baseheaders/basetools.ui 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/baseheaders/basetools.ui 2007-01-15 01:42:48 UTC (rev 171) @@ -6,41 +6,51 @@ <x>0</x> <y>0</y> <width>102</width> - <height>300</height> + <height>375</height> </rect> </property> <property name="windowTitle" > <string>BaseTools</string> </property> - <widget class="QGroupBox" name="groupBox" > + <widget class="QGroupBox" name="EditToolsGroup" > <property name="geometry" > <rect> <x>1</x> - <y>0</y> + <y>140</y> <width>100</width> - <height>71</height> + <height>91</height> </rect> </property> <property name="title" > - <string>Edit Mode</string> + <string>Edit Tools</string> </property> - <widget class="QToolButton" name="ModeEditButton" > + <widget class="QToolButton" name="FillButton" > <property name="geometry" > <rect> <x>10</x> + <y>60</y> + <width>81</width> + <height>20</height> + </rect> + </property> + <property name="text" > + <string>Fill</string> + </property> + </widget> + <widget class="QToolButton" name="PasteButton" > + <property name="geometry" > + <rect> + <x>10</x> <y>40</y> <width>81</width> <height>20</height> </rect> </property> <property name="text" > - <string>Edit</string> + <string>Paste</string> </property> - <property name="checkable" > - <bool>true</bool> - </property> </widget> - <widget class="QToolButton" name="ModeSelectButton" > + <widget class="QToolButton" name="CopyButton" > <property name="geometry" > <rect> <x>10</x> @@ -50,42 +60,46 @@ </rect> </property> <property name="text" > - <string>Select</string> + <string>Copy</string> </property> - <property name="checkable" > - <bool>true</bool> - </property> - <property name="checked" > - <bool>true</bool> - </property> </widget> </widget> - <widget class="QGroupBox" name="groupBox_2" > + <widget class="QGroupBox" name="ValuesGroup" > <property name="geometry" > <rect> <x>1</x> - <y>70</y> + <y>240</y> <width>100</width> - <height>91</height> + <height>131</height> </rect> </property> <property name="title" > - <string>Edit Tools</string> + <string>Values</string> </property> - <widget class="QToolButton" name="FillButton" > + <widget class="QTableWidget" name="valueTable" > <property name="geometry" > <rect> - <x>10</x> - <y>60</y> - <width>81</width> - <height>20</height> + <x>5</x> + <y>20</y> + <width>90</width> + <height>101</height> </rect> </property> - <property name="text" > - <string>Fill</string> - </property> </widget> - <widget class="QToolButton" name="PasteButton" > + </widget> + <widget class="QGroupBox" name="ViewModeGroup" > + <property name="geometry" > + <rect> + <x>1</x> + <y>0</y> + <width>100</width> + <height>71</height> + </rect> + </property> + <property name="title" > + <string>View Mode</string> + </property> + <widget class="QToolButton" name="LocalViewButton" > <property name="geometry" > <rect> <x>10</x> @@ -95,10 +109,13 @@ </rect> </property> <property name="text" > - <string>Paste</string> + <string>Local</string> </property> + <property name="checkable" > + <bool>true</bool> + </property> </widget> - <widget class="QToolButton" name="CopyButton" > + <widget class="QToolButton" name="GlobalVievButton" > <property name="geometry" > <rect> <x>10</x> @@ -108,31 +125,62 @@ </rect> </property> <property name="text" > - <string>Copy</string> + <string>Global</string> </property> + <property name="checkable" > + <bool>true</bool> + </property> + <property name="checked" > + <bool>true</bool> + </property> </widget> </widget> - <widget class="QGroupBox" name="groupBox_3" > + <widget class="QGroupBox" name="EditModeGroup" > <property name="geometry" > <rect> <x>1</x> - <y>160</y> + <y>70</y> <width>100</width> - <height>131</height> + <height>71</height> </rect> </property> <property name="title" > - <string>Values</string> + <string>Edit Mode</string> </property> - <widget class="QTableWidget" name="valueTable" > + <widget class="QToolButton" name="ModeEditButton" > <property name="geometry" > <rect> - <x>5</x> + <x>10</x> + <y>40</y> + <width>81</width> + <height>20</height> + </rect> + </property> + <property name="text" > + <string>Edit</string> + </property> + <property name="checkable" > + <bool>true</bool> + </property> + </widget> + <widget class="QToolButton" name="ModeSelectButton" > + <property name="geometry" > + <rect> + <x>10</x> <y>20</y> - <width>90</width> - <height>101</height> + <width>81</width> + <height>20</height> </rect> </property> + <property name="text" > + <string>Select</string> + </property> + <property name="checkable" > + <bool>true</bool> + </property> + <property name="checked" > + <bool>true</bool> + </property> </widget> </widget> </widget> Modified: trunk/qcell/baseheaders/simulationwindow.h =================================================================== --- trunk/qcell/baseheaders/simulationwindow.h 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/baseheaders/simulationwindow.h 2007-01-15 01:42:48 UTC (rev 171) @@ -18,6 +18,7 @@ #include "view3dtools.h" #include "view2dtexttools.h" #include "view1dtexttools.h" +#include "math.h" #include <QToolBox> @@ -61,13 +62,21 @@ int selectedSymbol, workMode; + QVector<CalculationData> loclaViewMemory; + QVector<int> localObserverPosition; + int cycleTable, maxTime, usedSpace; + char *storeCurentTable; + CalculationData localView; + bool localViewFlag; + 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); - + void localViewReinterprete(void); + int calculateDistans(int x, int y, int z, bool box=1); protected: void update2DTable(bool forceUpdate=0); @@ -108,11 +117,15 @@ void workModeChange(int mode); void selectSymbol(int index); -signals: - void progressUpdate(int val); + void commandExecute(int cmd); + void view3DselectedObject(int x, int y, int z); +//signals: +// void progressUpdate(int val); + + }; #endif // SIMULATIONWINDOW_H Modified: trunk/qcell/baseheaders/view3dtools.ui =================================================================== --- trunk/qcell/baseheaders/view3dtools.ui 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/baseheaders/view3dtools.ui 2007-01-15 01:42:48 UTC (rev 171) @@ -6,7 +6,7 @@ <x>0</x> <y>0</y> <width>102</width> - <height>80</height> + <height>76</height> </rect> </property> <property name="windowTitle" > Modified: trunk/qcell/basesources/CalculationData.cpp =================================================================== --- trunk/qcell/basesources/CalculationData.cpp 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/basesources/CalculationData.cpp 2007-01-15 01:42:48 UTC (rev 171) @@ -54,6 +54,18 @@ haveForeignDataPointer = 0; } +CalculationData::CalculationData(CalculationData &cData) +{ + dataType = baseDataTypes::CHAR; + sizeX = sizeY = sizeZ = sizeT = 0; + dimension = -1; + dataSize = sizeof(char); + data = NULL; + haveForeignDataPointer = 0; + + *this = cData; +} + CalculationData::~CalculationData() { dataType = baseDataTypes::NONE; @@ -713,12 +725,13 @@ } } -void CalculationData::setForeignDataPointer(char *dataPointer) +void CalculationData::setForeignDataPointer(char *dataPointer, bool silent) { clearData(); data = dataPointer; haveForeignDataPointer = 1; - emit dataUpdated(); + if(!silent) + emit dataUpdated(); } QString CalculationData::createXmlHeader(void) Modified: trunk/qcell/basesources/Renderer.cpp =================================================================== --- trunk/qcell/basesources/Renderer.cpp 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/basesources/Renderer.cpp 2007-01-15 01:42:48 UTC (rev 171) @@ -278,6 +278,12 @@ if(mouseButtons==Qt::LeftButton) { selectOne(event->x(), event->y()); + if(selectetObjects.size()>0) + { + QVector<int> sCoord = getSelectedCoord(); + emit objectSelected(sCoord[0], sCoord[1], sCoord[2]); + } + } showSelectRect = 0; repaint(); @@ -888,3 +894,34 @@ glMatrixMode(GL_MODELVIEW); corectPerspective = 1; } + +void Renderer::fillSelected(int value) +{ + for(int i=0;i<selectetObjects.size();++i) + getStorage()->setValueAt(value, selectetObjects[i]); + repaint(); +} + +QVector<int> Renderer::getSelectedCoord(void) +{ + int x=0, y=0, z=0, index; + QVector<int> out; + if(selectetObjects.size()==0) + return out; + + out.resize(3); + index = selectetObjects[0]; + + out[0] = index % getStorage()->getSizeX(); + index /= getStorage()->getSizeX(); + if(index<getStorage()->getSizeY()) + { + out[1] = index; + return out; + } + out[1] = index % getStorage()->getSizeY(); + index /= getStorage()->getSizeY(); + + out[2] = index; + return out; +} Modified: trunk/qcell/basesources/basetools.cpp =================================================================== --- trunk/qcell/basesources/basetools.cpp 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/basesources/basetools.cpp 2007-01-15 01:42:48 UTC (rev 171) @@ -7,11 +7,15 @@ editMode = 0; connect(ui.CopyButton, SIGNAL(clicked(bool)), SLOT(commandCopy())); connect(ui.PasteButton, SIGNAL(clicked(bool)), SLOT(commandPaste())); - connect(ui.PasteButton, SIGNAL(clicked(bool)), SLOT(commandFill())); + connect(ui.FillButton, SIGNAL(clicked(bool)), SLOT(commandFill())); connect(ui.ModeSelectButton, SIGNAL(clicked(bool)), SLOT(modeChangeSelect())); connect(ui.ModeEditButton, SIGNAL(clicked(bool)), SLOT(modeChangeEdit())); + + connect(ui.GlobalVievButton, SIGNAL(clicked(bool)), SLOT(modeChangeGlobalView())); + connect(ui.LocalViewButton, SIGNAL(clicked(bool)), SLOT(modeChangeLocalView())); + connect(ui.valueTable, SIGNAL(cellClicked(int, int)), SLOT(updateSelectedSymbol(int, int))); } @@ -47,6 +51,44 @@ } } +void BaseTools::modeChangeGlobalView(void) +{ + ui.GlobalVievButton->setChecked(1); + ui.LocalViewButton->setChecked(0); + ui.EditModeGroup->show(); + ui.EditToolsGroup->show(); + ui.ValuesGroup->show(); + if(editMode!=2) + { + editMode=2; + emit toolsModeUpdate(2); + if(ui.ModeEditButton->isChecked()) + { + emit toolsModeUpdate(1); + editMode = 1; + } + else + { + emit toolsModeUpdate(0); + editMode = 0; + } + } +} + +void BaseTools::modeChangeLocalView(void) +{ + ui.GlobalVievButton->setChecked(0); + ui.LocalViewButton->setChecked(1); + ui.EditModeGroup->hide(); + ui.EditToolsGroup->hide(); + ui.ValuesGroup->hide(); + if(editMode!=3) + { + editMode=3; + emit toolsModeUpdate(3); + } +} + void BaseTools::commandCopy(void) { emit command(0); Modified: trunk/qcell/basesources/simulationwindow.cpp =================================================================== --- trunk/qcell/basesources/simulationwindow.cpp 2007-01-14 22:26:29 UTC (rev 170) +++ trunk/qcell/basesources/simulationwindow.cpp 2007-01-15 01:42:48 UTC (rev 171) @@ -104,6 +104,8 @@ view2DTextTools->move(width() - 101, basetools->height() + 1); view1DTextTools->move(width() - 101, basetools->height() + 1); + + } void simulationWindow::paintEvent(QPaintEvent * event) @@ -172,6 +174,71 @@ } } +void simulationWindow::localViewReinterprete(void) +{ + int dist, index; + switch(getStorage()->getDimension()) + { + case 1: + for(int x=0;x<getStorage()->getSizeX();++x) + { + dist = calculateDistans(x, 0, 0); + index = (cycleTable - dist); + while(index<0) + index += maxTime; + if(usedSpace<dist) + localView.setValueAt(0, x); + else + localView.setValueAt(loclaViewMemory[index].getValueAt_i(x), x); + } + + break; + case 2: + for(int y=0;y<getStorage()->getSizeY();++y) + { + for(int x=0;x<getStorage()->getSizeX();++x) + { + dist = calculateDistans(x, y, 0); + index = (cycleTable - dist); + while(index<0) + index += maxTime; + if(usedSpace<dist) + localView.setValueAt(0, x, y); + else + localView.setValueAt(loclaViewMemory[index].getValueAt_i(x, y), x, y); + } + } + break; + case 3: + for(int z=0;z<getStorage()->getSizeZ();++z) + { + for(int y=0;y<getStorage()->getSizeY();++y) + { + for(int x=0;x<getStorage()->getSizeX();++x) + { + dist = calculateDistans(x, y, z); + index = (cycleTable - dist); + while(index<0) + index += maxTime; + if(usedSpace<dist) + localView.setValueAt(0, x, y, z); + else + localView.setValueAt(loclaViewMemory[index].getValueAt_i(x, y, z), x, y, z); + } + } + } + break; + } +} + +int simulationWindow::calculateDistans(int x, int y, int z, bool box) +{ + if(box) + return max(max(max(x, localObserverPosition[0]), max(y, localObserverPosition[1])), max(z, localObserverPosition[2])); + else + return sqrt((float)((x - localObserverPosition[0]) * (x - localObserverPosition[0])) * (float)((y - localObserverPosition[1]) * (y - localObserverPosition[1])) * (float)((z - localObserverPosition[2]) * (z - localObserverPosition[2]))); +} + void simulationWindow::update2DTable(bool forceUpdate) { bool showProgres=0; @@ -533,7 +600,7 @@ table2D = new QTableWidget(ui.view2D); - connect(renderer->getStorage(), SIGNAL(dataUpdated()), SLOT(dataUpdateRequest())); + bool ret = connect(renderer->getStorage(), SIGNAL(dataUpdated()), SLOT(dataUpdateRequest())); connect(renderer->getStorage(), SIGNAL(dataResized()), SLOT(dataResizeRequest())); @@ -575,6 +642,16 @@ connect(view1DTextTools, SIGNAL(viewModeChenged(int)), SLOT(GrigView1DInterpretationMode(int))); connect(view1DTextTools, SIGNAL(memoryClear()), SLOT(GridView1DMemClear())); + + connect(basetools, SIGNAL(command(int)), SLOT(commandExecute(int))); + + localObserverPosition.resize(3); + maxTime = 0; + cycleTable = 0; + usedSpace = 0; + localViewFlag = 0; + + connect(renderer, SIGNAL(objectSelected(int, int, int)), SLOT(view3DselectedObject(int, int, int))); } simulationWindow::~simulationWindow() @@ -615,6 +692,25 @@ void simulationWindow::dataUpdateRequest(void) { + //********** this part is for local view ************************ + if(localViewFlag) + { + if(usedSpace<maxTime) + { + usedSpace++; + cycleTable = usedSpace % maxTime; + } + else + ++cycleTable %= maxTime; + + loclaViewMemory[cycleTable] = *getStorage(); + localViewReinterprete(); + storeCurentTable = getStorage()->getDataPointer(); + getStorage()->setForeignDataPointer(localView.getDataPointer(), 1); + } + + //*************************************************************** + switch(renderer->getStorage()->getDimension()) { case 1: @@ -645,6 +741,7 @@ graph2DUpdateRequest = 1; break; } + //****************************************** } void simulationWindow::dataResizeRequest(void) @@ -657,6 +754,10 @@ ui.tabWidget->setTabEnabled(2, 0); ui.tabWidget->setTabEnabled(3, 1); table1DUpdateRequest = 2; + maxTime = sqrt((float)(getStorage()->getSizeX() * getStorage()->getSizeX())); + //maxTime = getStorage()->getSizeX() + 1; + loclaViewMemory.resize(maxTime); + break; case 2: @@ -668,6 +769,9 @@ graph2DUpdateRequest = 1; view2DTextTools->setZPlaneMax(0); view2DTextTools->Pure2DMode(1); + maxTime = sqrt((float)(getStorage()->getSizeX() * getStorage()->getSizeX()) + (float)(getStorage()->getSizeY() * getStorage()->getSizeY())); + //maxTime = max(getStorage()->getSizeX(), getStorage()->getSizeY()) + 1; + loclaViewMemory.resize(maxTime); break; @@ -680,8 +784,26 @@ graph2DUpdateRequest = 1; view2DTextTools->setZPlaneMax(getStorage()->getSizeZ()-1); view2DTextTools->Pure2DMode(0); + maxTime = sqrt((float)(getStorage()->getSizeX() * getStorage()->getSizeX()) + (float)(getStorage()->getSizeY() * getStorage()->getSizeY()) + (float)(getStorage()->getSizeZ() * getStorage()->getSizeZ())); + //maxTime = max(getStorage()->getSizeZ(), max(getStorage()->getSizeX(), getStorage()->getSizeY())) + 1; + loclaViewMemory.resize(maxTime); break; } + //********** this part is for local view ************************ + usedSpace = 0; + localView = *getStorage(); + cycleTable = 0; + localObserverPosition[0] = 0; + localObserverPosition[1] = 0; + localObserverPosition[2] = 0; + if(localViewFlag) + { + loclaViewMemory[0] = *getStorage(); + localViewReinterprete(); + storeCurentTable = getStorage()->getDataPointer(); + getStorage()->setForeignDataPointer(localView.getDataPointer(), 1); + } + //**************************************************** repaint(); } @@ -832,6 +954,16 @@ } graph2DUpdateRequest = 1; } + + if(workMode==3) + { + localObserverPosition[0] = column; + localObserverPosition[1] = row; + localObserverPosition[2] = z_plane; + localViewReinterprete(); + update2DTable(); + graph2DUpdateRequest = 1; + } } void simulationWindow::GridView1DEdit(int row, int column) @@ -885,6 +1017,40 @@ void simulationWindow::workModeChange(int mode) { workMode = mode; + if(mode>1) + { + if(mode==3) + { + loclaViewMemory[cycleTable] = *getStorage(); + storeCurentTable = getStorage()->getDataPointer(); + localViewReinterprete(); + getStorage()->setForeignDataPointer(localView.getDataPointer(), 1); + localViewFlag = 1; + } + if(mode==2) + { + getStorage()->setForeignDataPointer(storeCurentTable, 1); + localViewFlag = 0; + } + + if(ui.view3D->isVisible()) + renderer->repaint(); + + if(ui.view2D->isVisible()) + update2DTable(); + else + table2DUpdateRequest = 1; + + if(ui.view2DGraph->isVisible()) + update2DGraph(); + else + graph2DUpdateRequest = 1; + + if(ui.view1D->isVisible()) + update1DTable(); + else + table1DUpdateRequest = 1; + } } void simulationWindow::selectSymbol(int index) @@ -892,3 +1058,50 @@ selectedSymbol = index; } +void simulationWindow::commandExecute(int cmd) +{ + QTableWidgetItem *item; + switch(cmd) + { + case 0: + break; + case 1: + break; + case 2: + if(workMode==0) + { + if(ui.view3D->isVisible()) + renderer->fillSelected(selectedSymbol); + if(ui.view2D->isVisible()) + { + for(int y=0;y<getStorage()->getSizeY();++y) + { + for(int x=0;x<getStorage()->getSizeX();++x) + { + item = table2D->item(y, x); + if(item->isSelected()) + { + getStorage()->setValueAt(selectedSymbol, x, y, z_plane); + } + } + } + update2DTable(); + } + } + break; + } +} + +void simulationWindow::view3DselectedObject(int x, int y, int z) +{ + if(workMode==3) + { + localObserverPosition[0] = x; + localObserverPosition[1] = y; + localObserverPosition[2] = z; + localViewReinterprete(); + table2DUpdateRequest = 1; + graph2DUpdateRequest = 1; + renderer->repaint(); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |