]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - contrib/bobtoolz/DPatch.h
Merge branch 'fix-fast' into 'master'
[xonotic/netradiant.git] / contrib / bobtoolz / DPatch.h
1 /*
2    BobToolz plugin for GtkRadiant
3    Copyright (C) 2001 Gordon Biggans
4
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.
9
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.
14
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
18  */
19
20 // DPatch.h: interface for the DPatch class.
21 //
22 //////////////////////////////////////////////////////////////////////
23
24 #if !defined( AFX_DPATCH_H__26C6B083_CE5B_420B_836B_1DDA733C04CE__INCLUDED_ )
25 #define AFX_DPATCH_H__26C6B083_CE5B_420B_836B_1DDA733C04CE__INCLUDED_
26
27 #include <list>
28 #include <stdlib.h>
29
30 typedef struct {
31     bool mergable;
32     int pos1;
33     int pos2;
34 } patch_merge_t;
35
36 typedef struct {
37     float xyz[3];
38     float st[2];
39     float normal[3];
40     float lightmap[2];
41 } drawVert_t;
42
43 namespace scene {
44     class Node;
45
46     class Instance;
47 }
48
49 const int MAX_PATCH_WIDTH = 32;
50 const int MAX_PATCH_HEIGHT = 32;
51 const int MIN_PATCH_WIDTH = 3;
52 const int MIN_PATCH_HEIGHT = 3;
53
54 class DPatch {
55 public:
56     std::list<DPatch> SplitRows();
57
58     std::list<DPatch> SplitCols();
59
60     std::list<DPatch> Split();
61
62     void Transpose();
63
64 //DPatch* TransposePatch(DPatch* p1);
65 //void DebugPrint();
66     void Invert();
67
68     DPatch *MergePatches(patch_merge_t merge_info, DPatch *p1, DPatch *p2);
69
70     patch_merge_t IsMergable(DPatch *other);
71
72     bool ResetTextures(const char *oldTextureName, const char *newTextureName);
73
74     scene::Node *QER_entity;
75     scene::Node *QER_brush;
76
77     void LoadFromPatch(scene::Instance &patch);
78
79     void BuildInRadiant(scene::Node *entity = NULL);
80
81     void SetTexture(const char *textureName);
82
83     char texture[256];
84     int width, height;
85     drawVert_t points[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT];
86
87     DPatch();
88
89     virtual ~DPatch();
90
91 };
92
93 #endif // !defined(AFX_DPATCH_H__26C6B083_CE5B_420B_836B_1DDA733C04CE__INCLUDED_)