/usr/include/mgl2/qmathgl.h is in libmgl-dev 2.3.3+svn1216-1build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 | /***************************************************************************
* qmathgl.h is part of Math Graphic Library
* Copyright (C) 2007-2014 Alexey Balakin <mathgl.abalakin@gmail.ru> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Library General Public License as *
* published by the Free Software Foundation; either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef _MGL_QMATHGL_H_
#define _MGL_QMATHGL_H_
//-----------------------------------------------------------------------------
#include <string>
#include <QWidget>
#include <QPixmap>
#include <mgl2/wnd.h>
//-----------------------------------------------------------------------------
class QTextEdit;
class QMenu;
class QMainWindow;
class QScrollArea;
class QSpinBox;
class QTimer;
class mglCanvas;
class mglTask;
//-----------------------------------------------------------------------------
/// Class is Qt widget which display MathGL graphics
class MGL_EXPORT QMathGL : public QWidget
{
Q_OBJECT
public:
QString appName; ///< Application name for message boxes
bool autoResize; ///< Allow auto resizing (default is false)
bool enableMouse; ///< Enable mouse handlers
bool enableWheel; ///< Enable mouse wheel handlers
QString primitives; ///< Manual primitives, defined by user
mglCanvas *gr; ///< Built-in mglCanvas instance (mglCanvasQT is used by default)
QMathGL(QWidget *parent = 0, Qt::WindowFlags f = 0);
virtual ~QMathGL();
double getRatio();
void setPopup(QMenu *p) { popup = p; } ///< Set popup menu pointer
void setSize(int w, int h); ///< Set window/picture sizes
void setGraph(HMGL GR); ///< Set grapher object
inline void setGraph(mglGraph *GR)
{ setGraph(GR->Self()); }
inline HMGL getGraph() { return (HMGL)gr; }
/// Set drawing functions and its parameter
void setDraw(int (*func)(mglBase *gr, void *par), void *par);
void setDraw(mglDraw *dr);
inline void setDraw(int (*func)(mglGraph *gr))
{ setDraw(func?mgl_draw_graph:0,(void*)func); }
inline void zoomRegion(mreal xx1,mreal xx2,mreal yy1, mreal yy2)
{ x1=xx1; y1=yy1; x2=xx2; y2=yy2; }
int getPer() const {return int(per);} ///< Get perspective value
int getPhi() const {return int(phi);} ///< Get Phi-angle value
int getTet() const {return int(tet);} ///< Get Theta-angle value
bool getAlpha() const {return alpha;} ///< Get transparency state
bool getLight() const {return light;} ///< Get lightning state
bool getZoom() const {return zoom;} ///< Get mouse zooming state
bool getRotate() const {return rotate;}///< Get mouse rotation state
bool getViewYZ() const {return viewYZ;}///< Get mouse rotation axis
bool isActive(int xs,int ys); ///< Check if active point is pressed
public slots:
void refresh(); ///< Redraw image with new zoom and view parameters
void refreshHQ(); ///< Redraw image with HQ (can be slower than refresh())
void update(); ///< Update picture
void copy(); ///< copy graphics to clipboard
void copyClickCoor(); ///< copy click coordinates to clipboard
void print(); ///< Print plot
void stop(); ///< Stop execution
void setPer(int p); ///< Set perspective value
void setPhi(int p); ///< Set Phi-angle value
void setTet(int t); ///< Set Theta-angle value
void setAlpha(bool a); ///< Switch on/off transparency
void setLight(bool l); ///< Switch on/off lightning
void setGrid(bool r); ///< Switch on/off grid drawing
void imgSize(int w, int h); ///< Set image size
void setViewYZ(bool v); ///< Switch on/off rotation around Y and Z axis
void setDotsPreview(bool d=true); ///< Set to use dots for image preview/rotation
void setCustZoom(bool a); ///< Switch on/off using custom zoom
void setCustDraw(bool a); ///< Switch on/off using custom draw
void setZoom(bool z); ///< Switch on/off mouse zooming
void setRotate(bool r); ///< Switch on/off mouse rotation
void zoomIn(); ///< Zoom in graphics
void zoomOut(); ///< Zoom out graphics
void restore(); ///< Restore zoom and rotation to default values
void setZoomScl(double s=0.5); ///< Set factor for zooming (must be s>0)
void setShiftScl(double s=0.25); ///< Set factor for shifting (must be s!=0)
// void reload(); ///< Reload data and execute script
void shiftLeft(); ///< Shift graphics to left direction
void shiftRight(); ///< Shift graphics to right direction
void shiftUp(); ///< Shift graphics to up direction
void shiftDown(); ///< Shift graphics to down direction
void exportPNG(QString fname=""); ///< export to PNG file
void exportPNGs(QString fname=""); ///< export to PNG file (no transparency)
void exportGIF(QString fname=""); ///< export to GIF file
void exportJPG(QString fname=""); ///< export to JPEG file
void exportBPS(QString fname=""); ///< export to bitmap EPS file
void exportEPS(QString fname=""); ///< export to vector EPS file
void exportSVG(QString fname=""); ///< export to SVG file
void exportTEX(QString fname=""); ///< export to SVG file
void exportTGA(QString fname=""); ///< export to TGA file
void exportXYZ(QString fname=""); ///< export to XYZ file
void exportOBJ(QString fname=""); ///< export to OBJ file
void exportSTL(QString fname=""); ///< export to STL file
void exportOFF(QString fname=""); ///< export to OFF file
// void exportX3D(QString fname=""); ///< export to XYZ file
void exportPRC(QString fname=""); ///< export to PRC file
void exportMGLD(QString fname=""); ///< export to MGLD file
void setMGLFont(QString path); ///< restore/load font for graphics
void addMark(); ///< add marker into primitives
void addLine(); ///< add line into primitives
void addRect(); ///< add rectangle into primitives
void addCurve(); ///< add curve into primitives
void addRhomb(); ///< add rhombus into primitives
void addEllipse(); ///< add ellipse into primitives
void addArc(); ///< add arc into primitives
void addPolygon(int n=-1); ///< add polygon into primitives
void addText(QString txt=""); ///< add text into primitives
void setStyle(int id, QString stl);///< set style for primitive with id
void adjust(); ///< Adjust plot size to fill entire window
void nextSlide(); ///< Show next slide
void prevSlide(); ///< Show previous slide
void animation(bool st=true); ///< Start animation
void about(); ///< Show about information
void aboutQt(); ///< Show information about Qt version
signals:
void gridChanged(int); ///< Grid drawing changed (by mouse or by toolbar)
void phiChanged(int); ///< Phi angle changed (by mouse or by toolbar)
void tetChanged(int); ///< Tet angle changed (by mouse or by toolbar)
void perChanged(int); ///< Perspective changed (by mouse or by toolbar)
void alphaChanged(bool); ///< Transparency changed (by toolbar)
void lightChanged(bool); ///< Lighting changed (by toolbar)
void zoomChanged(bool); ///< Zooming changed (by toolbar)
void rotateChanged(bool); ///< Rotation changed (by toolbar)
void usePrimChanged(bool); ///< Use primitive changed (i.e. have or not drawing function)
void viewYZChanged(bool); ///< Rotation axis changed (by toolbar)
void mouseClick(mreal,mreal,mreal); ///< Position of mouse click
void frameChanged(int); ///< Need another frame to show
void showWarn(QString); ///< Show warnings
void posChanged(QString message); ///< user click to show mouse position
void objChanged(int objId); ///< User click to select object/line
void refreshData();
void doubleClick(int id); ///< Double mouse click by object with id
void askStyle(int id); ///< Update style
/// user can define its own zooming function
void customZoom(double x1, double y1, double x2, double y2, double tet, double phi, double per);
/// user can define its own drawing/setting function which will be called before main drawing
void customDraw(double x1, double y1, double x2, double y2, bool draw);
protected:
void paintEvent(QPaintEvent *);
void resizeEvent(QResizeEvent *);
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void wheelEvent(QWheelEvent *);
void mouseDoubleClickEvent(QMouseEvent *);
void *draw_par; ///< Parameters for drawing function mglCanvasWnd::DrawFunc.
/// Drawing function for window procedure. It should return the number of frames.
int (*draw_func)(mglBase *gr, void *par);
mglDraw *draw; ///< Class for drawing -- need to call directly due to inheritance mechanism
QString mousePos; ///< Last mouse position
QPixmap pic; ///< Pixmap for drawing (changed by update)
QImage img; ///< Last used HQ image
double tet, phi; ///< Rotation angles
double per; ///< Value of perspective ( must be in [0,1) )
bool alpha; ///< Transparency state
bool light; ///< Lightning state
bool custZoom; ///< Use custom zoom instead of built in
bool custDraw; ///< Use custom draw before main drawing
bool zoom; ///< Mouse zoom state
bool grid; ///< Grid drawing state
bool rotate; ///< Mouse rotation state
bool viewYZ; ///< Set mouse rotation around Y and Z axis (instead of X and Z)
bool dotsRefr; ///< Set dots for image preview/rotation
mreal x1,x2,y1,y2; ///< Zoom in region
mreal ax1,ax2,ay1,ay2; ///< Axis range zoom
bool showMessage; ///< Flag for showing messages (enabled by each execute())
QMenu *popup; ///< Pointer to pop-up menu
QTimer *timer; ///< Timer for animation
QTimer *timerRefr; ///< Timer for redrawing
private slots:
void afterPlot(); ///< minor tuning after plot was done
private:
int x0, y0, xe, ye; ///< Temporary variables for mouse
double sclZ; ///< Scale factor for zooming
double sclS; ///< Scale factor for shifting
uchar *grBuf;
void drawPrim();
int prevQuality;
// QThread *thread;
// mglTask *task;
};
//-----------------------------------------------------------------------------
/// Class for drawing the MGL script
class MGL_EXPORT mglDrawScript : public mglDraw
{
public:
HMPR par; ///< Parser to be used
QString text; ///< Script to be drawn
long line; ///< Line which will be highlited
mglDrawScript(HMPR p):mglDraw() { par=p; line=-1; }
virtual ~mglDrawScript() {}
int Draw(mglGraph *gr)
{ gr->Highlight(line+1); mgl_parse_textw(gr->Self(),par,text.toStdWString().c_str()); return 0; }
};
//-----------------------------------------------------------------------------
/// Convert bitmap from mglCanvasWnd to QPixmap
void mglConvertFromGraph(QPixmap &pic, mglCanvas *gr, uchar **buf, QImage *out=NULL);
/// Make menu, toolbars and return popup menu for MainWindow
MGL_EXPORT QMenu *mglMakeMenu(QMainWindow* Wnd, QMathGL* QMGL, QSpinBox*& tet, QSpinBox*& phi);
//-----------------------------------------------------------------------------
#endif
|