Virtual Leaf
" ""
"Leaf growth computer model
"
"(c) 2005-2007, Roeland Merks
"
"VIB Department Plant Systems Biology
"
"Ghent, Belgium
"
"(c) 2008-2009, Roeland Merks
"
"CWI/NCSB, Amsterdam, Netherlands
"
"Pilot release for WUR/Biometris, 21-10-2009
",
QMessageBox::Information, 1, 0, 0, this, 0, FALSE );
about->setButtonText( 1, "Dismiss" );
about->show();
}
void Main::aboutQt()
{
QMessageBox::aboutQt( this, "Virtual Leaf" );
}
void Main::toggleShowCellCenters()
{
Plot();
}
void Main::toggleShowWalls()
{
Plot();
}
void Main::toggleShowApoplasts()
{
Plot();
}
void Main::toggleShowNodes()
{
Plot();
}
void Main::toggleNodeNumbers(void) {
Plot();
}
void Main::toggleCellNumbers(void) {
Plot();
}
void Main::toggleCellAxes(void) {
Plot();
}
void Main::toggleCellStrain(void) {
Plot();
}
void Main::toggleShowFluxes(void) {
Plot();
}
void Main::toggleShowBorderCells(){
Plot();
}
void Main::toggleHideCells(void) {
Plot();
editor->FullRedraw();
}
void Main::toggleMovieFrames(){}
void Main::toggleLeafBoundary(){}
void Main::toggleDynCells() {}
void Main::startSimulation(void) {
timer->start( 0 );
statusBar()->message("Simulation started");
running = true;
}
void Main::stopSimulation(void) {
timer->stop();
cerr << "Stopping simulation" << endl;
statusBar()->message("Simulation paused");
running = false;
}
void Main::togglePaused()
{
bool s = run->isItemChecked(paused_id);
if (s) {
cerr << "Calling start simulation" << endl;
startSimulation();
} else {
cerr << "Calling stop simulation" << endl;
stopSimulation();
}
}
void Main::setFluxArrowSize(int size) {
flux_arrow_size = size/100.;
}
void Main::enlarge()
{
canvas.setSceneRect( QRectF( 0,0, canvas.width()*4./3., canvas.height()*4./3.) );
}
void Main::shrink()
{
canvas.setSceneRect( QRectF( 0,0, canvas.width()*3/4, canvas.height()*3/4) );
}
void Main::scale(double factor) {
QMatrix m = editor->matrix();
m.scale(factor, factor);
editor->setMatrix( m );
}
void Main::zoomIn()
{
QMatrix m = editor->matrix();
m.scale( 1.1, 1.1 );
editor->setMatrix( m );
}
void Main::zoomOut()
{
QMatrix m = editor->matrix();
m.scale( 0.9, 0.9 );
editor->setMatrix( m );
}
void Main::print()
{
if ( !printer ) printer = new QPrinter;
if ( printer->setup(this) ) {
// extern Mesh mesh;
Vector bbll,bbur;
mesh.BoundingBox(bbll,bbur);
#ifdef QDEBUG
qDebug() << "bbll = " << bbll << endl;
qDebug() << "bbur = " << bbur << endl;
#endif
double cw = (bbur.x - bbll.x);
double ch = (bbur.y - bbll.y);
QPainter pp(printer);
QRect vp=pp.viewport();
#ifdef QDEBUG
qDebug() << "Paper width = " << vp.width() << " x " << vp.height() << endl;
#endif
// Note that Cell is also translated...
pp.translate(-bbur.x,-bbur.y);
if (cw>ch) {
pp.scale(vp.width()/(2*cw*Cell::Magnification()), vp.width()/(2*cw*Cell::Magnification()));
} else {
pp.scale(vp.height()/(2*ch*Cell::Magnification()), vp.height()/(2*ch*Cell::Magnification()));
}
canvas.render(&pp, QRectF(), QRectF(0.,0.,canvas.width(),canvas.height()));
}
}
void Main::TimeStepWrap(void) {
static int t=0;
TimeStep();
t++;
// check number of timesteps
if (t==par.nit) {
emit SimulationDone();
}
}
void Main::RestartSim(void) {
stopSimulation();
if ( QMessageBox::question(
this,
tr("Restart simulation?"),
tr("Restart simulation.\n"
"Are you sure?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton ) == QMessageBox::Yes ) {
cerr << "Restarting simulation" << endl;
// extern Mesh mesh;
mesh.Clear();
Init();
Plot();
editor->FullRedraw();
}
//startSimulation();
}
void Main::FitCanvasToWindow(void) {
double scale_factor_x = (double)editor->width()/(double)canvas.width();
double scale_factor_y = (double)editor->height()/(double)canvas.height();
double scale_factor = scale_factor_x > scale_factor_y ? scale_factor_x : scale_factor_y;
QMatrix m = editor->matrix();
#ifdef QDEBUG
qDebug() << "editor->width() = " << editor->width() << endl;
qDebug() << "editor->height() = " << editor->height() << endl;
qDebug() << "scale_factor = " << scale_factor << endl;
qDebug() << "scale_factor_x = " << scale_factor_x << endl;
qDebug() << "scale_factor_y = " << scale_factor_y << endl;
#endif
m.scale( scale_factor, scale_factor );
editor->setMatrix( m );
editor->show();
}
void Main::PauseIfRunning(void) {
if (running) {
timer->stop();
}
}
void Main::ContIfRunning(void) {
if (running) {
timer->start( 0 );
}
}
void Main::FitLeafToCanvas(void) {
Vector ll,ur;
mesh.BoundingBox(ll, ur);
ll*=Cell::Magnification(); ur*=Cell::Magnification();
// give the leaf some space
Vector border = ((ur-ll)/5.);
QRectF bb( ll.x - border.x, ll.y - border.y, ur.x-ll.x + 2*border.x, ur.y-ll.y + 2*border.y );
// cerr << ur << ", " << ll << endl;
editor->fitInView(bb, Qt::KeepAspectRatio);
}
void Main::CleanMesh(void) {
vector