if(NOT WIN32)
set(MGL_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/mathgl")
set(MGL_DOC_PATH "${CMAKE_INSTALL_PREFIX}/share/doc/mathgl")
+set(MGL_MAN_PATH "${CMAKE_INSTALL_PREFIX}/share/man")
set(MGL_FONT_PATH "${MGL_DATA_PATH}/fonts")
install(DIRECTORY fonts/ DESTINATION ${MGL_FONT_PATH}
PATTERN ".svn" EXCLUDE
int test_wnd(mglGraph *gr)\r
{\r
mgl_set_test_mode(true);\r
-\r
- gr->SubPlot(2,2,0);\r
- gr->Rotate(60,70); gr->Ternary(2);\r
- gr->Axis();\r
- gr->Box();\r
-// gr->SetRotatedText(false);\r
- gr->Label('t',"A",1); gr->Label('x',"B",1);\r
- gr->Label('y',"C",1); gr->Label('z',"D",1);\r
-\r
- gr->SubPlot(2,2,1);\r
- gr->Rotate(60,70); gr->Ternary(1);\r
- gr->Axis();\r
- gr->Box();\r
- gr->Label('x',"x comp.");\r
- gr->Label('y',"y comp.");\r
- gr->Label('t',"t comp.");\r
-\r
- gr->SubPlot(2,2,3);\r
- gr->Rotate(60,70); gr->Ternary(0);\r
- gr->Axis();\r
gr->Box();\r
-// gr->SetRotatedText(false);\r
- gr->Label('t',"A",1); gr->Label('x',"X",1);\r
- gr->Label('y',"Y",1); gr->Label('z',"Z",1);\r
return 0;\r
}\r
//-----------------------------------------------------------------------------\r
inline void setDraw(int (*func)(mglBase *gr, void *par), void *par=0)\r
{ draw_func = func; draw_par = par; }\r
inline void setDraw(mglDraw *dr)\r
- { setDraw(mgl_draw_class,(void*)dr); }\r
+ { draw = dr; }\r
inline void setDraw(int (*draw)(mglGraph *gr))\r
{ setDraw(mgl_draw_graph,(void*)draw); }\r
\r
void *draw_par; ///< Parameters for drawing function mglCanvasWnd::DrawFunc.\r
/// Drawing function for window procedure. It should return the number of frames.\r
int (*draw_func)(mglBase *gr, void *par);\r
+ mglDraw *draw; ///< Class for drawing -- need to call directly due to inheritance mechanism\r
QString mousePos; ///< Last mouse position\r
QPixmap pic; ///< Pixmap for drawing (changed by update)\r
double tet, phi; ///< Rotation angles\r
)
add_custom_target(mgl_python_module ALL DEPENDS _mathgl.so mathgl.py)
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/lang/setup.py install --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang )")
+ set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "mgl.i;numpy.i;setup.py;mgl_wrap.cpp;build;mathgl.pyc")
endif(MGL_HAVE_PYTHON)
swig_opts=[
# "-outdir %s/lang" % binary_dir,
'-c++',
+ '-threads',
"-I%s" % binary_dir,
"-I%s" % source_dir],
extra_objects=[mgl_lib,mgl_lib_wnd]
static char str[300]; // load help for command\r
char *docdir; get_doc_dir(docdir);\r
#ifdef WIN32\r
- sprintf(str,"%s\\mgl_en.html\\mgl_en_1.html#%s",docdir,first[val]);\r
+ sprintf(str,"%s\\mgl_en.html#%s",docdir,first[val]);\r
#else\r
- sprintf(str,"%s/mgl_en.html/mgl_en_1.html#%s",docdir,first[val]);\r
+ sprintf(str,"%s/mgl_en.html#%s",docdir,first[val]);\r
#endif\r
free(docdir); cmd_dlg.help->load(str);\r
}\r
static char str[300]; // load help for command\r
char *docdir; get_doc_dir(docdir);\r
#ifdef WIN32\r
- sprintf(str,"%s\\mgl_en.html\\mgl_en_1.html#%s",docdir,name);\r
+ sprintf(str,"%s\\mgl_en.html#%s",docdir,name);\r
#else\r
- sprintf(str,"%s/mgl_en.html/mgl_en_1.html#%s",docdir,name);\r
+ sprintf(str,"%s/mgl_en.html#%s",docdir,name);\r
#endif\r
free(docdir); cmd_dlg.help->load(str);\r
}\r
static char str[300];\r
pref.get("help_dir",docdir,"");\r
#ifdef WIN32\r
- sprintf(str,"%s\\mgl_en.html\\mgl_en_1.html",docdir);\r
+ sprintf(str,"%s\\mgl_en.html",docdir);\r
#else\r
- sprintf(str,"%s/mgl_en.html/mgl_en_1.html",docdir);\r
+ sprintf(str,"%s/mgl_en.html",docdir);\r
#endif\r
FILE *fp = fopen(str,"r");\r
if(fp) fclose(fp);\r
free(buf);\r
get_doc_dir(buf);\r
#ifdef WIN32\r
- sprintf(str,"%s\\mgl_en.html\\mgl_en_1.html#%s",buf,s);\r
+ sprintf(str,"%s\\mgl_en.html#%s",buf,s);\r
#else\r
- sprintf(str,"%s/mgl_en.html/mgl_en_1.html#%s",buf,s);\r
+ sprintf(str,"%s/mgl_en.html#%s",buf,s);\r
#endif\r
free(buf); e->hd->load(str);\r
if(e->rtab) e->rtab->value(e->ghelp);\r
char *docdir;\r
get_doc_dir(docdir);\r
#ifdef WIN32\r
- sprintf(str,"%s\\mgl_en.html\\mgl_en_1.html#%s",docdir,e->link_cmd->value());\r
+ sprintf(str,"%s\\mgl_en.html#%s",docdir,e->link_cmd->value());\r
#else\r
- sprintf(str,"%s/mgl_en.html/mgl_en_1.html#%s",docdir,e->link_cmd->value());\r
+ sprintf(str,"%s/mgl_en.html#%s",docdir,e->link_cmd->value());\r
#endif\r
free(docdir); e->hd->load(str);\r
if(e->rtab) e->rtab->value(e->ghelp);\r
void mgl_mpi_recv_(uintptr_t *gr, int *id) { mgl_mpi_recv(_GR_, *id); }\r
//-----------------------------------------------------------------------------\r
void mgl_wnd_set_delay_(uintptr_t *gr, mreal *dt) { _GR_->SetDelay(*dt); }\r
-void mgl_wnd_set_delay(HMGL gr, mreal dt) { _Gr_->SetDelay(dt); }\r
+void mgl_wnd_set_delay(HMGL gr, float dt) { _Gr_->SetDelay(dt); }\r
//-----------------------------------------------------------------------------\r
HMEX mgl_create_expr(const char *expr) { return new mglFormula(expr); }\r
void mgl_delete_expr(HMEX ex) { delete ex; }\r
FILES_MATCHING PATTERN ".svn" EXCLUDE
PATTERN "CMakeFiles" EXCLUDE
PATTERN "*.png"
+ PATTERN "*.html"
PATTERN "*/*.html"
PATTERN "./mathgl*.info*"
PATTERN "./mathgl*.pdf")
+ install(DIRECTORY ./ DESTINATION ${MGL_MAN_PATH}/man1
+ FILES_MATCHING PATTERN ".svn" EXCLUDE
+ PATTERN "CMakeFiles" EXCLUDE
+ PATTERN "*_en" EXCLUDE
+ PATTERN "png" EXCLUDE
+ PATTERN "small" EXCLUDE
+ PATTERN "*.1")
+ install(DIRECTORY ./ DESTINATION ${MGL_MAN_PATH}/man5
+ FILES_MATCHING PATTERN ".svn" EXCLUDE
+ PATTERN "CMakeFiles" EXCLUDE
+ PATTERN "*_en" EXCLUDE
+ PATTERN "png" EXCLUDE
+ PATTERN "small" EXCLUDE
+ PATTERN "*.5")
endif(MGL_HAVE_DOC)
============= NEW =============
-1. Add sample for window in python/octave (like pthread) -- Docs
2. Add help about cmake into the "Installation and using" -- after build system will be ready
+
4. Check RunThr() in python
============= FOR V.2.1 ========
21. MGL testing system ???
22. Export to X3D
23. Try libtcc (TinyCC) as alternative to MGL -- in mgllab???
+24. Use OI & Z for determening {x,y,z} from {xs,ys}. Try to find closest.
============= UDAV =============
//-----------------------------------------------------------------------------
QWidget *createHlpPanel(QWidget *p) { return new HelpPanel(p); }
void showHelpMGL(QWidget *hlp,QString s){ ((HelpPanel *)hlp)->showHelp(s); }
-void showExMGL(QWidget *hlp) { ((HelpPanel *)hlp)->showExamples(); }
+//void showExMGL(QWidget *hlp) { ((HelpPanel *)hlp)->showExamples(); }
//-----------------------------------------------------------------------------
HelpPanel::HelpPanel(QWidget *parent) : QWidget(parent)
{
connect(entry, SIGNAL(returnPressed()), this, SLOT(showHelp()));
b = new QPushButton(QPixmap(":/xpm/go-next.png"), tr("Forward"));
connect(b, SIGNAL(clicked()), help, SLOT(forward())); a->addWidget(b);
- b = new QPushButton(QPixmap(":/xpm/help-faq.png"), tr("&Examples"));
- connect(b, SIGNAL(clicked()), this, SLOT(showExamples())); a->addWidget(b);
+// b = new QPushButton(QPixmap(":/xpm/help-faq.png"), tr("&Examples"));
+// connect(b, SIGNAL(clicked()), this, SLOT(showExamples())); a->addWidget(b);
t = new QToolButton(this); t->setIcon(QPixmap(":/xpm/zoom-in.png"));
connect(t, SIGNAL(clicked()), this, SLOT(zoomIn())); a->addWidget(t);
t = new QToolButton(this); t->setIcon(QPixmap(":/xpm/zoom-out.png"));
setWindowTitle(tr("Help"));
}
//-----------------------------------------------------------------------------
-void HelpPanel::showExamples()
-{
- QStringList s; s<<(pathHelp+"/"+tr("mgl_en")+".html/");
- help->setSearchPaths(s);
- setWindowTitle("Examples"); raisePanel(this);
- help->setSource(tr("mgl_en")+"_2.html");
-}
+// void HelpPanel::showExamples()
+// {
+// QStringList s; s<<(pathHelp);
+// help->setSearchPaths(s);
+// setWindowTitle("Examples"); raisePanel(this);
+// help->setSource(tr("mgl_en")+"_2.html");
+// }
//-----------------------------------------------------------------------------
void HelpPanel::showHelp(const QString &txt)
{
QString cmd=txt;
raisePanel(this);
- QStringList s; s<<(pathHelp+"/"+tr("mgl_en")+".html/");
+ QStringList s; s<<(pathHelp);
help->setSearchPaths(s);
if(cmd.isEmpty()) cmd = entry->text().trimmed();
- if(cmd.isEmpty()) help->setSource(tr("mgl_en")+"_1.html");
- else help->setSource(tr("mgl_en")+"_1.html#"+cmd);
+ if(cmd.isEmpty()) help->setSource(tr("mgl_en")+".html");
+ else help->setSource(tr("mgl_en")+".html#"+cmd);
setWindowTitle("Help");
}
//-----------------------------------------------------------------------------
public:
HelpPanel(QWidget *parent = 0);
public slots:
- void showExamples();
+// void showExamples();
void showHelp(const QString &cmd=QString::null);
void zoomIn();
void zoomOut();
QString n=name->itemText(s), par, a;
int k;
if(n.isEmpty()) return;
- QStringList ss; ss<<(pathHelp+"/"+tr("mgl_en")+".html/");
+ QStringList ss; ss<<(pathHelp);
help->setSearchPaths(ss);
- help->setSource(tr("mgl_en")+"_1.html#"+n);
+ help->setSource(tr("mgl_en")+".html#"+n);
// clear old
kind->clear(); kinds.clear(); for(k=0;k<NUM_CH;k++) argn[k].clear();
// try to find the keyword
connect(a, SIGNAL(triggered()), this, SLOT(showHelp()));
a->setToolTip(tr("Show help on MGL commands (F1)."));
a->setShortcut(Qt::Key_F1); o->addAction(a);
- a = new QAction(QPixmap(":/xpm/help-faq.png"), tr("&Examples"), this);
- connect(a, SIGNAL(triggered()), this, SLOT(showExamples()));
+// a = new QAction(QPixmap(":/xpm/help-faq.png"), tr("&Examples"), this);
+// connect(a, SIGNAL(triggered()), this, SLOT(showExamples()));
a->setToolTip(tr("Show examples of MGL usage (Shift+F1)."));
a->setShortcut(Qt::SHIFT+Qt::Key_F1); o->addAction(a);
a = new QAction(QPixmap(":/xpm/help-faq.png"), tr("H&ints"), this);
void setAsterix();
void warnChanged();
void showHint() { udavShowHint(this); }
- void showExamples() { showExMGL(hlp); }
+// void showExamples() { showExMGL(hlp); }
void setCurrentFile(const QString &);
void setStatus(const QString &txt);
gr->Alpha(flag&1); gr->Light(flag&2);
if(tet_val) tet = tet_val->value();
if(phi_val) phi = phi_val->value();
- gr->Zoom(x1,y1,x2,y2); gr->View(tet,phi);
+ gr->Zoom(x1,y1,x2,y2); gr->View(phi,tet);
draw_func(gr, draw_par); // drawing itself
const char *buf = gr->Mess.c_str();
if(*buf) fl_message("%s",buf);
const Fl_Menu_Item *m = popup->popup(Fl::event_x(), Fl::event_y(), 0, 0, 0);
if(m) m->do_callback(wpar, vpar);
}
- if(gr->get(MGL_SHOW_POS) && !zoom && !rotate && code==FL_PUSH && Fl::event_button()==FL_LEFT_MOUSE)
+ else if(gr->get(MGL_SHOW_POS) && !zoom && !rotate && code==FL_PUSH && Fl::event_button()==FL_LEFT_MOUSE)
{
mglPoint p = gr->CalcXYZ(Fl::event_x()-x(), Fl::event_y()-y());
char s[128];
sprintf(s,"x=%g, y=%g, z=%g",p.x,p.y,p.z);
draw(); fl_color(FL_BLACK); fl_draw(s,40,70);
}
- if((!rotate && !zoom) || Fl::event_button()!=FL_LEFT_MOUSE)
+ else if((!rotate && !zoom) || Fl::event_button()!=FL_LEFT_MOUSE)
{
if(code==FL_FOCUS || code==FL_UNFOCUS) return 1;
if(code==FL_KEYUP)
}
return 0;
}
- if(code==FL_PUSH) { xe=x0=Fl::event_x(); ye=y0=Fl::event_y(); }
- if(code==FL_DRAG)
+ else if(code==FL_PUSH) { xe=x0=Fl::event_x(); ye=y0=Fl::event_y(); }
+ else if(code==FL_DRAG)
{
xe=Fl::event_x(); ye=Fl::event_y();
- mreal ff = 240/sqrt(mreal(w()*h()));
+ mreal ff = 240./sqrt(w()*h());
if(rotate)
{
- phi += int((x0-xe)*ff);
- tet += int((y0-ye)*ff);
+ phi += (x0-xe)*ff;
+ tet += (y0-ye)*ff;
if(phi>180) phi-=360; if(phi<-180) phi+=360;
if(tet>180) tet-=360; if(tet<-180) tet+=360;
+ if(tet_val) tet_val->value(tet);
+ if(phi_val) phi_val->value(phi);
x0 = xe; y0 = ye;
update();
}
redraw();
}
- if(code==FL_RELEASE)
+ else if(code==FL_RELEASE)
{
if(zoom)
{
{
autoResize = false; draw_par = 0; draw_func = 0;
gr = new mglCanvas; appName = "MathGL";
- popup = 0; grBuf = 0;
+ popup = 0; grBuf = 0; draw = 0;
phi = tet = per = 0;
x1 = y1 = 0; x2 = y2 = 1;
alpha = light = zoom = rotate = grid = false;
else while(thr->isRunning()) qApp->processEvents();
if(warnMGL) warnMGL->setText(thr->warn);*/
- if(draw_func)
+ if(draw_func || draw)
{
if(gr->get(MGL_CLF_ON_UPD)) gr->DefaultPlotParam();
gr->Alpha(alpha); gr->Light(light);
if(!isHidden()) QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
setlocale(LC_NUMERIC, "C"); // NOTE: I'm not sure what I should selocale manually???
- draw_func(gr, draw_par);
+ if(draw_func) draw_func(gr, draw_par);
+ else { mglGraph g(gr); draw->Draw(&g); }
setlocale(LC_NUMERIC, "");
if(!isHidden()) QApplication::restoreOverrideCursor();
emit refreshData();