mirror of
https://github.com/UberGames/GtkRadiant.git
synced 2024-12-18 08:21:09 +00:00
995f6a1011
* Quote http://zerowing.idsoftware.com/pipermail/gtkradiant/2008-July/011094.html : Attached to this message is a patch for a "somewhat working" brush primitives surface dialog. It is an ugly hack, as it converts between fake texdef notations and brush primitives whenever values are needed. Had to fix an accuracy bug: the surface dialog rounded all rotation values to integer angles, which SEVERELY broke things for me (changed the Gtk spin object to use 4 digits, which is enough for me). Also, I changed the fake texdef / brush primitives conversions to use long double internally, as float's roundoff errors were quite visible to me when testing. Hope the remaining roundoff errors from converting back and forth won't kill me, but it worked for a simple map example. Also, I had to separate out "Snap to grid" and "Don't clamp" into two separare options. They now mean: - Snap to grid: snaps drag/etc. actions to the grid - Don't clamp: disable brush point snapping during many operations, like merely shifting brushes, editing texturing parameters, map loading, etc. The reason is that I do need the grid, but I don't want to get my objects messed up by the snapping in my map. As I am using free rotations, this DOES change quite much. The config.py change is needed for compilation on Debian stable; Debian's scons does not use the CFLAGS variable, but just CCFLAGS and CXXFLAGS. In newer scons versions, CFLAGS is _shared_ flags for C and C++, so if you want to require these, you don't need to include the CFLAGS in CXXFLAGS too. git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@301 8a3a26a2-13c4-0310-b231-cf6edde360e5
160 lines
6.4 KiB
C++
160 lines
6.4 KiB
C++
/*
|
|
Copyright (C) 1999-2007 id Software, Inc. and contributors.
|
|
For a list of contributors, see the accompanying CONTRIBUTORS file.
|
|
|
|
This file is part of GtkRadiant.
|
|
|
|
GtkRadiant 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 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
GtkRadiant 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 GtkRadiant; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
//
|
|
|
|
#ifndef __ISURFACEPLUGIN_H_
|
|
#define __ISURFACEPLUGIN_H_
|
|
|
|
typedef struct _GtkWidget GtkWidget;
|
|
typedef struct _GtkWindow GtkWindow;
|
|
|
|
#define SURFACEDIALOG_MAJOR "surfdialog"
|
|
|
|
// there's a void* in each qtexture_t, must be casted to a IPluginTexdef*
|
|
// there's a void* in each face_t, must be casted to a IPluginTexdef*
|
|
// NOTE: IPluginTexdef stores a pointer to the qtexture_t or face_t it's stored in
|
|
// members of IPluginTexdef often access the qtexture_t or face_t they are connected to
|
|
|
|
// Write texdef needs a function pointer, because Radiant either writes into a FILE or a CMemFile
|
|
typedef void (* PFN_QERAPP_MAPPRINTF) ( char *text, ... );
|
|
|
|
class IPluginTexdef
|
|
{
|
|
public:
|
|
virtual ~IPluginTexdef() { }
|
|
// Increment the number of references to this object
|
|
virtual void IncRef () = 0;
|
|
// Decrement the reference count
|
|
virtual void DecRef () = 0;
|
|
};
|
|
|
|
|
|
|
|
// Nurail: For SI module
|
|
class texdef_to_face_t
|
|
{
|
|
public:
|
|
texdef_to_face_t* next;
|
|
brush_t *brush; // Brush faces belong to (for Undo)
|
|
face_t *face; // Face of Texdef
|
|
texdef_t texdef; // Working texdef
|
|
texdef_t orig_texdef; // Original, for baselining changes
|
|
brushprimit_texdef_t orig_bp_texdef; // Original, for undo
|
|
};
|
|
|
|
|
|
typedef void (* PFN_QERPLUG_DOSURFACE) ();
|
|
typedef void (* PFN_QERPLUG_TOGGLESURFACE) ();
|
|
typedef void (* PFN_QERPLUG_UPDATESURFACEDIALOG) ();
|
|
typedef void (* PFN_QERPLUG_SURFACEDLGFITALL) ();
|
|
typedef GtkWidget* (* PFN_GET_SI_MODULE_WIDGET) ();
|
|
|
|
struct _QERPlugSurfaceTable
|
|
{
|
|
int m_nSize;
|
|
PFN_QERPLUG_TOGGLESURFACE m_pfnToggleSurface;
|
|
PFN_QERPLUG_DOSURFACE m_pfnDoSurface;
|
|
PFN_QERPLUG_UPDATESURFACEDIALOG m_pfnUpdateSurfaceDialog;
|
|
PFN_QERPLUG_SURFACEDLGFITALL m_pfnSurfaceDlgFitAll;
|
|
PFN_GET_SI_MODULE_WIDGET m_pfnGet_SI_Module_Widget;
|
|
};
|
|
|
|
// this one is used by the plugin to access some Radiant stuff
|
|
|
|
#define APPSURFACEDIALOG_MAJOR "appsurfdialog"
|
|
|
|
// {42BAE4C0-9787-11d3-8EF3-0000E8E8657B}
|
|
static const GUID QERAppSurfaceTable_GUID =
|
|
{ 0x42bae4c0, 0x9787, 0x11d3, { 0x8e, 0xf3, 0x0, 0x0, 0xe8, 0xe8, 0x65, 0x7b } };
|
|
|
|
typedef bool (* PFN_PATCHESSELECTED) ();
|
|
// retrieve g_qeglobals.texturewin_t
|
|
//++timo FIXME: this should move in a dedicated table for all g_qeglobals stuff
|
|
typedef texturewin_t* (* PFN_QEGLOBALSTEXTUREWIN) ();
|
|
// look for the first selected patch mesh
|
|
//++timo FIXME: this is a convenient func since there's no way to scan patches ( yet )
|
|
typedef patchMesh_t* (* PFN_GETSELECTEDPATCH) ();
|
|
//++timo FIXME: this one in particular is a hack
|
|
typedef void (* PFN_GETTWOSELECTEDPATCH) (patchMesh_t **p1, patchMesh_t **p2);
|
|
|
|
|
|
// leo FIXME: hacks uglier than the ones above
|
|
typedef void (* PFN_TEXMATTOFAKETEXCOORDS) (vec_t texMat[2][3], float shift[2], float *rot, float scale[2]);
|
|
typedef void (* PFN_CONVERTTEXMATWITHQTEXTURE) (brushprimit_texdef_t *texMat1, qtexture_t *qtex1, brushprimit_texdef_t *texMat2, qtexture_t *qtex2);
|
|
typedef void (* PFN_FAKETEXCOORDSTOTEXMAT) (float shift[2], float rot, float scale[2], vec_t texMat[2][3]);
|
|
typedef void (* PFN_PATCH_RESETTEXTURING) (float fx, float fy);
|
|
typedef void (* PFN_PATCH_FITTEXTURING) ();
|
|
typedef void (* PFN_PATCH_NATURALIZESELECTED) (bool bCap);
|
|
typedef const char* (* PFN_PATCH_GETTEXTURENAME) ();
|
|
typedef qboolean (* PFN_QE_SINGLEBRUSH) (bool bQuiet);
|
|
typedef qboolean (* PFN_ISBRUSHPRIMITMODE) ();
|
|
typedef void (* PFN_SELECT_FITTEXTURE)(int nHeight, int nWidth);
|
|
typedef void (*PFN_COMPUTEAXISBASE)(vec3_t normal,vec3_t texS,vec3_t texT );
|
|
typedef void (*PFN_BPMATMUL)(vec_t A[2][3], vec_t B[2][3], vec_t C[2][3]);
|
|
typedef void (*PFN_EMITBRUSHPRIMITTEXCOORDS)(face_t * f, winding_t * w);
|
|
typedef texdef_t* (*PFN_QEGLOBALSSAVEDINFO_SIINC) ();
|
|
typedef float (* PFN_QEGLOBALSGETGRIDSIZE) ();
|
|
typedef void (* PFN_FACELIST_FITTEXTURE) (texdef_to_face_t* texdef_face_list, int nHeight, int nWidth);
|
|
typedef GtkWindow* (* PFN_GETMAINWINDOW)();
|
|
typedef void (* PFN_SETWINPOS_FROM_PREFS) (GtkWidget *win);
|
|
typedef int (* PFN_GETSELECTEDFACECOUNT_BRUSH) ();
|
|
typedef void (* PFN_GETSELFACESTEXDEF) (texdef_to_face_t *);
|
|
typedef void (* PFN_SETTEXDEF_FACELIST) (texdef_to_face_t* texdef_face_list, bool b_SetUndoPoint, bool bFit_to_Scale);
|
|
typedef void (* PFN_SETACTIVEINRADIANT) ();
|
|
|
|
|
|
struct _QERAppSurfaceTable
|
|
{
|
|
int m_nSize;
|
|
PFN_PATCHESSELECTED m_pfnOnlyPatchesSelected;
|
|
PFN_PATCHESSELECTED m_pfnAnyPatchesSelected;
|
|
PFN_GETSELECTEDPATCH m_pfnGetSelectedPatch;
|
|
PFN_GETTWOSELECTEDPATCH m_pfnGetTwoSelectedPatch;
|
|
PFN_TEXMATTOFAKETEXCOORDS m_pfnTexMatToFakeTexCoords;
|
|
PFN_CONVERTTEXMATWITHQTEXTURE m_pfnConvertTexMatWithQTexture;
|
|
PFN_FAKETEXCOORDSTOTEXMAT m_pfnFakeTexCoordsToTexMat;
|
|
PFN_PATCH_RESETTEXTURING m_pfnPatch_ResetTexturing;
|
|
PFN_PATCH_FITTEXTURING m_pfnPatch_FitTexturing;
|
|
PFN_PATCH_NATURALIZESELECTED m_pfnPatch_NaturalizeSelected;
|
|
PFN_PATCH_GETTEXTURENAME m_pfnPatch_GetTextureName;
|
|
PFN_QE_SINGLEBRUSH m_pfnQE_SingleBrush;
|
|
PFN_ISBRUSHPRIMITMODE m_pfnIsBrushPrimitMode;
|
|
PFN_COMPUTEAXISBASE m_pfnComputeAxisBase;
|
|
PFN_BPMATMUL m_pfnBPMatMul;
|
|
PFN_EMITBRUSHPRIMITTEXCOORDS m_pfnEmitBrushPrimitTextureCoordinates;
|
|
PFN_QEGLOBALSTEXTUREWIN m_pfnQeglobalsTexturewin;
|
|
PFN_SELECT_FITTEXTURE m_pfnSelect_FitTexture;
|
|
PFN_QEGLOBALSSAVEDINFO_SIINC m_pfnQERApp_QeglobalsSavedinfo_SIInc;
|
|
PFN_QEGLOBALSGETGRIDSIZE m_pfnQeglobalsGetGridSize;
|
|
PFN_FACELIST_FITTEXTURE m_pfnFaceList_FitTexture;
|
|
PFN_GETMAINWINDOW m_pfnGetMainWindow;
|
|
PFN_SETWINPOS_FROM_PREFS m_pfnSetWinPos_From_Prefs;
|
|
PFN_GETSELECTEDFACECOUNT_BRUSH m_pfnGetSelectedFaceCountfromBrushes;
|
|
PFN_GETSELFACESTEXDEF m_pfnGetSelFacesTexdef;
|
|
PFN_SETTEXDEF_FACELIST m_pfnSetTexdef_FaceList;
|
|
};
|
|
|
|
#endif
|