src/gldraw.h

changeset 629
b75c6cce02e2
parent 628
6b13e4c2e97b
child 630
42ec68fcad9e
child 675
450827da2376
--- a/src/gldraw.h	Mon Jan 20 23:44:22 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-/*
- *  LDForge: LDraw parts authoring CAD
- *  Copyright (C) 2013, 2014 Santeri Piippo
- *
- *  This program is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU 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 General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef LDFORGE_GLDRAW_H
-#define LDFORGE_GLDRAW_H
-
-#include <QGLWidget>
-#include "main.h"
-#include "ldtypes.h"
-#include "document.h"
-
-class MessageManager;
-class QDialogButtonBox;
-class RadioGroup;
-class QDoubleSpinBox;
-class QSpinBox;
-class QLineEdit;
-class QTimer;
-
-enum EditMode
-{
-	ESelectMode,
-	EDrawMode,
-	ECircleMode,
-};
-
-// Meta for overlays
-struct LDGLOverlay
-{
-	Vertex			v0,
-					v1;
-	int				ox,
-					oy;
-	double			lw,
-					lh;
-	QString			fname;
-	QImage*			img;
-};
-
-struct LDFixedCameraInfo
-{
-	const char		glrotate[3];
-	const Axis		axisX,
-					axisY;
-	const bool		negX,
-					negY;
-};
-
-// =============================================================================
-// Document-specific data
-//
-struct LDGLData
-{
-	double			rotX,
-					rotY,
-					rotZ,
-					panX[7],
-					panY[7],
-					zoom[7];
-	double			depthValues[6];
-	LDGLOverlay		overlays[6];
-	bool			init;
-
-	LDGLData()
-	{
-		for (int i = 0; i < 6; ++i)
-		{
-			overlays[i].img = null;
-			depthValues[i] = 0.0f;
-		}
-
-		init = false;
-	}
-};
-
-// =============================================================================
-// The main renderer object, draws the brick on the screen, manages the camera
-// and selection picking. The instance of GLRenderer is accessible as
-// g_win->R()
-//
-class GLRenderer : public QGLWidget
-{
-	typedefs:
-		enum EFixedCamera
-		{
-			ETopCamera,
-			EFrontCamera,
-			ELeftCamera,
-			EBottomCamera,
-			EBackCamera,
-			ERightCamera,
-			EFreeCamera
-		};
-
-		enum ListType
-		{
-			NormalList,
-			PickList,
-			BFCFrontList,
-			BFCBackList
-		};
-
-		// CameraIcon::img is a heap-allocated QPixmap because otherwise it gets
-		// initialized before program gets to main() and constructs a QApplication
-		// and Qt doesn't like that.
-		struct CameraIcon
-		{
-			QPixmap*			img;
-			QRect				srcRect,
-								destRect,
-								selRect;
-			EFixedCamera	cam;
-		};
-
-	properties:
-		Q_OBJECT
-		PROPERTY (public,		bool,					DrawOnly,	BOOL_OPS,	STOCK_WRITE)
-		PROPERTY (public,		MessageManager*,	MessageLog, NO_OPS,		STOCK_WRITE)
-		PROPERTY (private,	bool,					Picking,		BOOL_OPS,	STOCK_WRITE)
-		PROPERTY (public,		LDDocument*,		File,			NO_OPS,		CUSTOM_WRITE)
-		PROPERTY (public,		EditMode,			EditMode,	NO_OPS,		CUSTOM_WRITE)
-
-	public:
-		GLRenderer (QWidget* parent = null);
-		~GLRenderer();
-
-		inline EFixedCamera camera() const
-		{
-			return m_camera;
-		}
-
-		void           clearOverlay();
-		void           compileObject (LDObject* obj);
-		void           compileAllObjects();
-		void           drawGLScene();
-		void           endDraw (bool accept);
-		Axis           getCameraAxis (bool y, EFixedCamera camid = (EFixedCamera) - 1);
-		const char*    getCameraName() const;
-		double         getDepthValue() const;
-		QColor         getMainColor();
-		LDGLOverlay&   getOverlay (int newcam);
-		uchar*         getScreencap (int& w, int& h);
-		void           hardRefresh();
-		void           initGLData();
-		void           initOverlaysFromObjects();
-		void           refresh();
-		void           resetAngles();
-		void           resetAllAngles();
-		void           setBackground();
-		void           setCamera (const EFixedCamera cam);
-		void           setDepthValue (double depth);
-		bool           setupOverlay (EFixedCamera cam, QString file, int x, int y, int w, int h);
-		void           updateOverlayObjects();
-		void           zoomNotch (bool inward);
-		void           zoomToFit();
-		void           zoomAllToFit();
-
-		static void    deleteLists (LDObject* obj);
-
-	protected:
-		void           contextMenuEvent (QContextMenuEvent* ev);
-		void           initializeGL();
-		void           keyPressEvent (QKeyEvent* ev);
-		void           keyReleaseEvent (QKeyEvent* ev);
-		void           leaveEvent (QEvent* ev);
-		void           mouseDoubleClickEvent (QMouseEvent* ev);
-		void           mousePressEvent (QMouseEvent* ev);
-		void           mouseMoveEvent (QMouseEvent* ev);
-		void           mouseReleaseEvent (QMouseEvent* ev);
-		void           paintEvent (QPaintEvent* ev);
-		void           resizeGL (int w, int h);
-		void           wheelEvent (QWheelEvent* ev);
-
-	private:
-		CameraIcon					m_cameraIcons[7];
-		QTimer*						m_toolTipTimer;
-		Qt::MouseButtons				m_lastButtons;
-		Qt::KeyboardModifiers		m_keymods;
-		Vertex						m_hoverpos;
-		double						m_virtWidth,
-									m_virtHeight;
-		bool						m_darkbg,
-									m_rangepick,
-									m_addpick,
-									m_drawToolTip,
-									m_screencap,
-									m_panning;
-		QPoint						m_pos,
-									m_globalpos,
-									m_rangeStart;
-		QPen						m_thickBorderPen,
-									m_thinBorderPen;
-		EFixedCamera				m_camera,
-									m_toolTipCamera;
-		GLuint						m_axeslist;
-		int							m_width,
-									m_height,
-									m_totalmove;
-		QList<Vertex>				m_drawedVerts;
-		bool						m_rectdraw;
-		Vertex						m_rectverts[4];
-		QColor						m_bgcolor;
-		QList<Vertex>				m_knownVerts;
-
-		void           addDrawnVertex (Vertex m_hoverpos);
-		LDOverlay*     findOverlayObject (EFixedCamera cam);
-		void           updateRectVerts();
-		void           getRelativeAxes (Axis& relX, Axis& relY) const;
-		Matrix         getCircleDrawMatrix (double scale);
-		void           drawBlip (QPainter& paint, QPoint pos) const;
-
-		// Compute geometry for camera icons
-		void           calcCameraIcons();
-
-		// How large is the circle we're drawing right now?
-		double         getCircleDrawDist (int pos) const;
-
-		// Clamps an angle to [0, 360]
-		void           clampAngle (double& angle) const;
-
-		// Compile one of the lists of an object
-		void           compileList (LDObject* obj, const ListType list);
-
-		// Sub-routine for object compiling
-		void           compileSubObject (LDObject* obj, const GLenum gltype);
-
-		// Compile a single vertex to a list
-		void           compileVertex (const Vertex& vrt);
-
-		// Convert a 2D point to a 3D point
-		Vertex         coordconv2_3 (const QPoint& pos2d, bool snap) const;
-
-		// Convert a 3D point to a 2D point
-		QPoint         coordconv3_2 (const Vertex& pos3d) const;
-
-		// Perform object selection
-		void           pick (int mouseX, int mouseY);
-
-		// Set the color to an object list
-		void           setObjectColor (LDObject* obj, const ListType list);
-
-		LDGLData& currentDocumentData() const
-		{
-			return *getFile()->getGLData();
-		}
-
-		// Get a rotation value
-		inline double& rot (Axis ax)
-		{
-			return
-				(ax == X) ? currentDocumentData().rotX :
-				(ax == Y) ? currentDocumentData().rotY :
-				            currentDocumentData().rotZ;
-		}
-
-		// Get a panning value
-		inline double& pan (Axis ax)
-		{
-			return (ax == X) ? currentDocumentData().panX[camera()] :
-				currentDocumentData().panY[camera()];
-		}
-
-		// Same except const (can be used in const methods)
-		inline const double& pan (Axis ax) const
-		{
-			return (ax == X) ? currentDocumentData().panX[camera()] :
-				currentDocumentData().panY[camera()];
-		}
-
-		// Get the zoom value
-		inline double& zoom()
-		{
-			return currentDocumentData().zoom[camera()];
-		}
-
-	private slots:
-		void           slot_toolTipTimer();
-};
-
-// Alias for short namespaces
-typedef GLRenderer GL;
-
-static const GLRenderer::ListType g_glListTypes[] =
-{
-	GL::NormalList,
-	GL::PickList,
-	GL::BFCFrontList,
-	GL::BFCBackList,
-};
-
-extern const GL::EFixedCamera g_Cameras[7];
-extern const char* g_CameraNames[7];
-
-#endif // LDFORGE_GLDRAW_H

mercurial