2 GenSurf plugin for GtkRadiant
3 Copyright (C) 2001 David Hyde, Loki software and qeradiant.com
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include "iscenegraph.h"
29 #define USE_QERTABLE_DEFINE
30 #include "qerplugin.h"
31 extern _QERFuncTable_1 g_FuncTable;
34 #include "iselection.h"
36 #define USE_ENTITYTABLE_DEFINE
38 extern _QEREntityTable __ENTITYTABLENAME;
40 #define USE_PATCHTABLE_DEFINE
42 extern _QERPatchTable __PATCHTABLENAME;
44 #define USE_BRUSHTABLE_DEFINE
46 extern _QERBrushTable __BRUSHTABLENAME;
59 //#if defined(__linux__) || defined(__APPLE__)
64 inline T min( T x, T y ) { return ( x < y ) ? x : y; }
66 inline T max( T x, T y ) { return ( x > y ) ? x : y; }
69 typedef struct { long x, y; } Point;
70 typedef struct { long left, top, right, bottom; } Rect;
78 inline bool PtInRect( Rect *rc, Point pt ){
79 if ( pt.x < rc->left ) {
82 if ( pt.x > rc->right ) {
85 if ( pt.y < rc->bottom ) {
88 if ( pt.y > rc->top ) {
96 #define CONTENTS_SOLID 0x00000001
97 #define CONTENTS_DETAIL 0x08000000 // brushes to be added after vis leafs
98 #define CONTENTS_LADDER 0x20000000
99 #define SURF_HINT 0x100 // make a primary bsp splitter
100 #define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes
101 #define HINT_OFFSET 96
103 #define PI 3.14159265358979224
104 #define RadiansToDegrees( a ) ( floor( a * 57.2957795 - 0.5 ) + 1. )
105 #define DegreesToRadians( a ) ( a / 57.2957795 )
107 #define BOGUS_RANGE 65536
109 #define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
110 #define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];}
111 #define VectorClear(x) {x[0] = x[1] = x[2] = 0;}
112 #define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
113 #define VectorScale(a,b,c) {c[0]=b*a[0];c[1]=b*a[1];c[2]=b*a[2];}
114 #define VectorSubtract(a,b,c) {c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];}
116 #define XYZVectorSubtract( a,b,c ) {c[0] = (float)a[0] - (float)b[0]; c[1] = (float)a[1] - (float)b[1]; c[2] = (float)a[2] - (float)b[2]; }
117 #define side( u1,v1,u2,v2,u3,v3 ) ( v3 - v1 ) * ( u2 - u1 ) - ( u3 - u1 ) * ( v2 - v1 )
127 #define MAX_FACES_PER_BRUSH 6
128 #define SLIVER_ANGLE DegreesToRadians( 20 )
129 #define MAX_NODES ( MAX_ROWS + 1 ) * ( MAX_ROWS + 1 )
130 #define MAX_TRIS (MAX_ROWS)*( MAX_ROWS )
157 vec3 p[4]; // variable sized
164 FACE face[MAX_FACES_PER_BRUSH];
167 typedef struct tagXYZ
172 double pp[3]; // these used only for general 3D projection (not isometric)
178 // Q2 PAK file structures
181 char id[4]; // Should be 'PACK'
182 int dstart; // Offest in the file to the directory
183 int dsize; // Size in bytes of the directory, same as num_items*64
188 char name[56]; // The name of the item, normal C string
189 int start; // Offset in .pak file to start of item
190 int size; // Size of item in bytes
193 // SiN .SIN structures
194 #define SINPAKHEADER ( ( 'K' << 24 ) + ( 'A' << 16 ) + ( 'P' << 8 ) + 'S' )
195 #define MAX_PAK_FILENAME_LENGTH 120
199 char name[MAX_PAK_FILENAME_LENGTH];
200 int filepos, filelen;
205 int ident; // == IDPAKHEADER
210 // Half-Life WAD file structures
213 char identification[4]; // should be WAD2 or 2DAW
222 int size; // uncompressed
226 char name[16]; // must be null terminated
234 short compression_method;
239 int uncompressed_size;
263 int n[3]; // indices of neighboring triangles
270 //--------------- bitmap.c -----------------------------
272 double CalculateSnapValue( double value );
273 void GenerateBitmapMapping();
274 //--------------- face.c -------------------------------
275 void PlaneFromPoints( float *, float *, float *, PLANE * );
276 //void CrossProduct (vec3 v1, vec3 v2, vec3 cross);
277 //vec VectorNormalize (vec3 in, vec3 out);
278 //--------------- gendlg.c -----------------------------
279 GtkWidget* create_main_dialog();
280 void About( GtkWidget *parent );
281 //--------------- genmap.c -----------------------------
282 double AtLeast( double,double );
283 bool CanEdit( int, int );
284 void CloseFuncGroup();
285 bool FixedPoint( int,int );
288 double LessThan( double,double );
289 void MakeBrush( BRUSH * );
290 double MoreThan( double,double );
291 double Nearest( double,double );
292 double NoMoreThan( double,double );
293 void OpenFuncGroup();
295 int PlayerStartZ( double,double );
296 void SubdividePlasma( int,int,int,int );
298 void XYZtoV( XYZ *, vec3 * );
299 scene::Node* MakePatch( void );
301 //---------------- gensurf.c ---------------------------
303 void ReadIniFile( const char * );
304 void WriteIniFile( const char * );
305 void OpenSetup( GtkWidget*,int );
306 void SaveSetup( GtkWidget* );
307 //---------------- heretic.c ---------------------------
308 int GetDefSurfaceProps( char * );
309 //---------------- view.c ------------------------------
310 void CreateViewWindow();
311 void DrawGrid( Rect );
312 void DrawPreview( Rect );
314 void GetScaleFactor( Rect );
315 void project( XYZ * );
316 void Scale( Rect,XYZ,Point * );
318 void UpdatePreview( bool );
320 //---------------- plugin.c -----------------------------
321 void UseFaceBounds();
323 extern _QERFuncTable_1 g_FuncTable;
324 extern _QERQglTable g_GLTable;
325 extern _QERUIGtkTable g_UIGtkTable;
326 extern _QEREntityTable g_EntityTable;
327 //#define MAX_ROWS 64
337 #define WAVE_COS_SIN 0
338 #define WAVE_HCYLINDER 1
339 #define WAVE_VCYLINDER 2
340 #define WAVE_BITMAP 3
341 #define WAVE_ROUGH_ONLY 4
342 #define WAVE_FORMULA 5
343 #define WAVE_FIRST WAVE_COS_SIN
344 #define WAVE_LAST WAVE_FORMULA
345 #define DLG_WAVE_LAST DLG_WAVE_01 + WAVE_LAST - WAVE_FIRST
347 #define MSG_VERTEX_SELECTED WM_USER + 1
349 typedef struct tagMYBITMAP
352 char defpath[NAME_MAX];
356 unsigned char* colors;
359 typedef struct tagELEMENT {
364 extern char gszAppDir[NAME_MAX];
365 extern char gszCaption[64];
366 extern char gszHelpFile[NAME_MAX];
367 extern char gszIni[NAME_MAX];
368 extern char gszMapFile[NAME_MAX];
369 extern char gszVersion[64];
370 extern double Amplitude;
371 extern double Roughness;
372 extern double TexOffset[2];
373 extern double TexScale[2];
374 extern double WaveLength;
375 extern double Hll, Hur, Vll, Vur;
376 extern double Z00, Z01, Z10, Z11;
377 extern double yaw, pitch, roll;
378 extern ELEMENT Vertex[( MAX_ROWS + 1 ) * ( MAX_ROWS + 1 )];
381 extern int AutoOverwrite;
383 extern int FileAppend;
384 extern int FixBorders;
385 extern int HideBackFaces;
387 extern int NumVerticesSelected;
390 extern int RandomSeed;
392 extern int UseDetail;
393 extern int UseLadder;
394 extern int VertexMode;
395 extern int vid_x, vid_y;
397 extern int gNumNodes;
399 extern int view_x, view_y;
400 extern int view_cx, view_cy;
401 extern int UsePatches;
402 extern int SlantAngle;
403 extern int GimpHints;
404 extern int Antialiasing; // ^Fishman - Antializing for the preview window.
405 extern int AddTerrainKey; // ^Fishman - Add terrain key to func_group.
406 extern int SnapToGrid; // Hydra : snap to grid
407 extern int SP; // ^Fishman - Snap to grid.
410 /*extern HCURSOR ghCursorCurrent;
411 extern HCURSOR ghCursorDefault;
412 extern HCURSOR ghCursorVertex;
413 extern HINSTANCE ghInst;*/
414 extern GtkWidget *g_pRadiantWnd;
415 extern ui::Window g_pWnd;
416 /*extern HWND ghwndAngles;
417 extern HWND ghwndFix;
418 */extern GtkWidget *g_pWndPreview;
419 extern GtkWidget *g_pPreviewWidget;
420 extern MYBITMAP gbmp;
423 extern XYZ xyz[MAX_ROWS + 1][MAX_ROWS + 1];
426 extern bounding_box PlayerBox[NUMGAMES];
427 //extern char gszOutputDir[NUMGAMES][NAME_MAX];
428 extern char Texture[NUMGAMES][3][64];
429 //extern char gszTextureDir[NUMGAMES][NAME_MAX];
430 extern char GameName[NUMGAMES][16];
431 //extern char pakfile[NUMGAMES][NAME_MAX];
432 //extern char lastpakfile[NUMGAMES][NAME_MAX];
433 //extern int UsePak[NUMGAMES];
434 //extern char GameDir[NUMGAMES][NAME_MAX];
435 //extern char ExcelFunc[1024];
437 #endif // _GENSURF_H_