//----------------------------------------------------------------------------- int main(int argc, char **argv) { char ch, iname[256]=""; mgl_suppress_warn(true); while(1) { ch = getopt(argc, argv, "1:2:3:4:5:6:7:8:9:hL:s:"); if(ch>='1' && ch<='9') p.AddParam(ch-'0', optarg); else if(ch=='s') { setlocale(LC_CTYPE, ""); FILE *fp = fopen(optarg,"r"); if(fp) { wchar_t ch; while((ch=fgetwc(fp))!=WEOF) opt.push_back(ch); fclose(fp); } } else if(ch=='L') setlocale(LC_CTYPE, optarg); else if(ch=='h' || (ch==-1 && optind>=argc)) { printf("mglview show plot from MGL script or MGLD file.\nCurrent version is 2.%g\n",MGL_VER2); printf("Usage:\tmglview [parameter(s)] scriptfile\n"); printf( "\t-1 str set str as argument $1 for script\n" "\t... ...\n" "\t-9 str set str as argument $9 for script\n" "\t-s opt set MGL script for setting up the plot\n" "\t-L loc set locale to loc\n" "\t- get script from standard input\n" "\t-h print this message\n" ); ch = 'h'; break; } else if(ch==-1 && optind<argc) { strncpy(iname, argv[optind][0]=='-'?"":argv[optind],256); break; } } if(ch=='h') return 0; bool mgld=(*iname && iname[strlen(iname)-1]=='d'); if(!mgld) { str = opt + L"\n"; setlocale(LC_CTYPE, ""); FILE *fp = *iname?fopen(iname,"r"):stdin; if(fp) { wchar_t ch; while((ch=fgetwc(fp))!=WEOF) str.push_back(ch); fclose(fp); } else { printf("No file for MGL script\n"); return 0; } } mgl_ask_func = mgl_ask_gets; mgl_ask_func = mgl_ask_qt; mglQT gr(mgld?NULL:show, *iname?iname:"mglview"); if(mgld) { gr.Setup(false); gr.NewFrame(); setlocale(LC_NUMERIC, "C"); if(!opt.empty()) { p.Execute(&gr,opt.c_str()); printf("Setup script: %s\n",gr.Message()); gr.ImportMGLD(iname,true); } else gr.ImportMGLD(iname); setlocale(LC_NUMERIC, ""); gr.EndFrame(); gr.Update(); } if(!mglGlobalMess.empty()) printf("%s",mglGlobalMess.c_str()); return gr.Run(); }
//----------------------------------------------------------------------------- void DatPanel::oper() { QLineEdit *f1; QPushButton *b; QDialog *d = new QDialog(this); d->setWindowTitle(tr("UDAV - change data")); QVBoxLayout *v = new QVBoxLayout(d); QComboBox *c = new QComboBox(d); v->addWidget(c); c->addItem(tr("Fill data by formula")); c->addItem(tr("Transpose data with new dimensions")); c->addItem(tr("Smooth data along direction(s)")); c->addItem(tr("Summarize data along direction(s)")); c->addItem(tr("Integrate data along direction(s)")); c->addItem(tr("Differentiate data along direction(s)")); c->addItem(tr("Laplace transform along direction(s)")); c->addItem(tr("Swap data along direction(s)")); c->addItem(tr("Mirror data along direction(s)")); c->addItem(tr("Sin-Fourier transform along direction(s)")); c->addItem(tr("Cos-Fourier transform along direction(s)")); c->addItem(tr("Hankel transform along direction(s)")); c->addItem(tr("Sew data along direction(s)")); c->addItem(tr("Find envelope along direction(s)")); c->setCurrentIndex(0); f1 = new QLineEdit("z",d); v->addWidget(f1); QHBoxLayout *h = new QHBoxLayout(); v->addLayout(h); h->addStretch(1); b = new QPushButton(tr("Cancel"), d); h->addWidget(b); connect(b, SIGNAL(clicked()), d, SLOT(reject())); b = new QPushButton(tr("OK"), d); h->addWidget(b); connect(b, SIGNAL(clicked()), d, SLOT(accept())); b->setDefault(true); // now execute dialog and get values bool res = d->exec(); QString val = f1->text(), mgl; int k = c->currentIndex(); QString self = QString::fromWCharArray(var->s.c_str()); if(res) { if(k<0) { QMessageBox::warning(d, tr("UDAV - make new data"), tr("No action is selected. Do nothing.")); return; } switch(k) { case 0: mgl = "modify "+self+" '"+val+"'"; break; case 1: mgl = "transpose "+self+" '"+val+"'"; break; case 2: mgl = "smooth "+self+" '"+val+"'"; break; case 3: mgl = "cumsum "+self+" '"+val+"'"; break; case 4: mgl = "integrate "+self+" '"+val+"'"; break; case 5: mgl = "diff "+self+" '"+val+"'"; break; case 6: mgl = "diff2 "+self+" '"+val+"'"; break; case 7: mgl = "swap "+self+" '"+val+"'"; break; case 8: mgl = "mirror "+self+" '"+val+"'"; break; case 9: mgl = "sinfft "+self+" '"+val+"'"; break; case 10: mgl = "cosfft "+self+" '"+val+"'"; break; case 11: mgl = "hankel "+self+" '"+val+"'"; break; case 12: mgl = "sew "+self+" '"+val+"'"; break; case 13: mgl = "envelop "+self+" '"+val+"'"; break; } } if(!mgl.isEmpty()) { mglGraph gr; parser.Execute(&gr,mgl.toLocal8Bit().constData()); opers += mgl+"\n"; updateDataItems(); } }
//----------------------------------------------------------------------------- int show(mglGraph *gr) { p.Execute(gr,str.c_str()); printf("%s\n",gr->Message()); return 0; }
//----------------------------------------------------------------------------- void DatPanel::newdat() { QLabel *l; QLineEdit *f1, *f2; QPushButton *b; QDialog *d = new QDialog(this); d->setWindowTitle(tr("UDAV - make new data")); QVBoxLayout *v = new QVBoxLayout(d); QComboBox *c = new QComboBox(d); v->addWidget(c); c->addItem(tr("Sum along direction(s)")); c->addItem(tr("Min along direction(s)")); c->addItem(tr("Max along direction(s)")); c->addItem(tr("Momentum along 'x' for function")); c->addItem(tr("Momentum along 'y' for function")); c->addItem(tr("Momentum along 'z' for function")); c->setCurrentIndex(0); f1 = new QLineEdit("z",d); v->addWidget(f1); QCheckBox *cb = new QCheckBox(tr("Put into this data array"), d); v->addWidget(cb); l = new QLabel(tr("or enter name for new variable"), d); v->addWidget(l); f2 = new QLineEdit(d); v->addWidget(f2); QHBoxLayout *h = new QHBoxLayout(); v->addLayout(h); h->addStretch(1); b = new QPushButton(tr("Cancel"), d); h->addWidget(b); connect(b, SIGNAL(clicked()), d, SLOT(reject())); b = new QPushButton(tr("OK"), d); h->addWidget(b); connect(b, SIGNAL(clicked()), d, SLOT(accept())); b->setDefault(true); // now execute dialog and get values bool res = d->exec(); QString val = f1->text(), mgl; int k = c->currentIndex(); QString self = QString::fromWCharArray(var->s.c_str()); if(res) { if(k<0) { QMessageBox::warning(d, tr("UDAV - make new data"), tr("No action is selected. Do nothing.")); return; } if(val.isEmpty()) { QMessageBox::warning(d, tr("UDAV - make new data"), tr("No direction/formula is entered. Do nothing.")); return; } if(cb->isChecked()) k += 6; QString name = f2->text(); switch(k) { case 0: mgl = "sum "+name+" "+self+" '"+val+"'"; break; case 1: mgl = "min "+name+" "+self+" '"+val+"'"; break; case 2: mgl = "max "+name+" "+self+" '"+val+"'"; break; case 3: mgl = "momentum "+name+" "+self+" 'x' '"+val+"'"; break; case 4: mgl = "momentum "+name+" "+self+" 'y' '"+val+"'"; break; case 5: mgl = "momentum "+name+" "+self+" 'z' '"+val+"'"; break; case 6: mgl = "copy "+self+" {sum "+self+" '"+val+"'}"; break; case 7: mgl = "copy "+self+" {min "+self+" '"+val+"'}"; break; case 8: mgl = "copy "+self+" {max "+self+" '"+val+"'}"; break; case 9: mgl = "copy "+self+" {momentum "+self+" 'x' '"+val+"'}"; break; case 10: mgl = "copy "+self+" {momentum "+self+" 'y' '"+val+"'}"; break; case 11: mgl = "copy "+self+" {momentum "+self+" 'z' '"+val+"'}"; break; } } if(!mgl.isEmpty()) { mglGraph gr; parser.Execute(&gr,mgl.toLocal8Bit().constData()); if(k>=6) opers += mgl+"\n"; updateDataItems(); } }