TextureInterface.hh 11.4 KB
Newer Older
Jan Möbius's avatar
 
Jan Möbius committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
Jan Möbius's avatar
   
Jan Möbius committed
15
//
Jan Möbius's avatar
 
Jan Möbius committed
16
17
18
19
//  OpenFlipper 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 Lesser General Public License for more details.
Jan Möbius's avatar
   
Jan Möbius committed
20
//
Jan Möbius's avatar
 
Jan Möbius committed
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//  You should have received a copy of the GNU Lesser General Public License
//  along with OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision$
//   $Author$
//   $Date$
//
//=============================================================================




//
// C++ Interface: TexturePlugin
//
Jan Möbius's avatar
   
Jan Möbius committed
38
// Description:
Jan Möbius's avatar
 
Jan Möbius committed
39
40
41
42
43
//
//
// Author: Jan Moebius <jan_moebius@web.de>, (C) 2007
//

Jan Möbius's avatar
   
Jan Möbius committed
44
45
#ifndef TEXTUREINTERFACE_HH
#define TEXTUREINTERFACE_HH
Jan Möbius's avatar
 
Jan Möbius committed
46
47
48
49

 #include <QtGui>
 #include <QMenuBar>
 #include <OpenFlipper/common/Types.hh>
Jan Möbius's avatar
   
Jan Möbius committed
50

Jan Möbius's avatar
 
Jan Möbius committed
51
 /**
Mike Kremer's avatar
Mike Kremer committed
52
53
  * \brief Provide texture support for a plugin.
  *
Jan Möbius's avatar
 
Jan Möbius committed
54
55
  * This Interface should be used by plugins which will provide a texture. The texture coordinates have
  * to be written into a mesh property. You do not need to write texture information into the texture
Jan Möbius's avatar
   
Jan Möbius committed
56
  * coordinates of the mesh. As other plugins may provide textures to, the visualization of the
Jan Möbius's avatar
 
Jan Möbius committed
57
58
59
60
  * textures is handled by the main application (or a texture control plugin).
 */
class TextureInterface {
   signals :
Jan Möbius's avatar
   
Jan Möbius committed
61

Jan Möbius's avatar
 
Jan Möbius committed
62
      /** \brief Emit this Signal if a texture has been added (Property Name,filename,Dimension)
Dirk Wilden's avatar
Dirk Wilden committed
63
64
65
66
       *
       *  Emit this signal if a texture for a specific object has been added
       *
       *  @param  _name Name of the property which contains the tex coords (double or vec2d)
67
       *  @param _filename Filename of the texture (either local in OpenFlippers texture dir or global ( "./Textures/<name>")
Dirk Wilden's avatar
Dirk Wilden committed
68
69
70
71
72
73
74
75
       *  @param _dimension 1D texture ( currenty only supports 1 )
       *  @param _id id of an object
       */
      virtual void addTexture( QString /*_name*/ , QString /*_filename*/ , uint /*_dimension*/ , int /*_id*/ ) {};

      /** \brief Emit this Signal if a texture has been added (Property Name,filename,Dimension)
       *
       *  Emit this signal if a global texture has been added
Jan Möbius's avatar
   
Jan Möbius committed
76
       *
Jan Möbius's avatar
 
Jan Möbius committed
77
       *  @param  _name Name of the property which contains the tex coords (double or vec2d)
78
       *  @param _filename Filename of the texture (either local in OpenFlippers texture dir or global ( "./Textures/<name>")
Jan Möbius's avatar
 
Jan Möbius committed
79
80
       *  @param _dimension 1D texture ( currenty only supports 1 )
       */
Dirk Wilden's avatar
Dirk Wilden committed
81
      virtual void addTexture( QString /*_name*/ , QString /*_filename*/ , uint /*_dimension*/ ) {};
Jan Möbius's avatar
   
Jan Möbius committed
82

83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
      /** \brief Emit this Signal if you want to add a texture for a multitexturing mode
       *
       *  Emit this signal if a texture should be added to a multitexturing mode.
       *  The first parameter defines a texturegroup which collects all textures
       *  that should be painted in the multitexturing mode.
       *  The second parameter defines the single textures name.
       *
       *  @param _textureGroup Multitexturing group using this texture
       *  @param _name         Name of the property which contains the tex coords (double or vec2d)
       *  @param _filename     Filename of the texture (either local in OpenFlippers texture dir or global ( "./Textures/<name>")
       *  @param _id           Id of the object which should use that texture
       *  @param _textureId    The new id of the texture( This id is object related!!)
       */
      virtual void addMultiTexture( QString /*_textureGroup*/ , QString /*_name*/ , QString /*_filename*/ , int /*_id*/ , int& /*_textureId*/ ) {};

Jan Möbius's avatar
 
Jan Möbius committed
98
99
      /** \brief Tell Plugins to update the given texture for the given identifier
       */
Dirk Wilden's avatar
Dirk Wilden committed
100
      virtual void updateTexture( QString /*_textureName*/  , int /*_identifier*/) {};
Jan Möbius's avatar
   
Jan Möbius committed
101

Jan Möbius's avatar
 
Jan Möbius committed
102
103
104
      /** \brief Tell Plugins to update all textures
       */
      virtual void updateAllTextures( ) {};
Jan Möbius's avatar
   
Jan Möbius committed
105
106
107
108

      /** \brief emit this signal if you updated a texture
       *
       *  Give the name of the texture and the id of the object or -1 if all objects were update
Jan Möbius's avatar
 
Jan Möbius committed
109
110
      */
      virtual void updatedTextures( QString , int ) {};
Jan Möbius's avatar
   
Jan Möbius committed
111

Dirk Wilden's avatar
Dirk Wilden committed
112
113
114
115
116
117
118
      /** \brief emit this signal if you want to switch the texture of a specific object
       */
      virtual void switchTexture( QString /*_textureName*/ , int /*_id*/  ) {};

      /** \brief emit this signal if you want to switch the global texture
       */
      virtual void switchTexture( QString /*_textureName*/ ) {};
Jan Möbius's avatar
   
Jan Möbius committed
119

Jan Möbius's avatar
 
Jan Möbius committed
120
      /** \brief emit this signal if you want to set a special mode for this texture (Clamping,...)
Jan Möbius's avatar
   
Jan Möbius committed
121
       *
Jan Möbius's avatar
 
Jan Möbius committed
122
       *  emit this signal if you want to set a special mode for this texture
Jan Möbius's avatar
   
Jan Möbius committed
123
       *
Jan Möbius's avatar
 
Jan Möbius committed
124
125
126
127
128
129
130
131
132
133
134
       *  Supported Mode Flags :\n
       *  Clamping : clamp=true/false \n
       *  Min Value for clamping  : clamp_min=value \n
       *  Max Value for clamping : clamp_max=value \n
       *  Use only absolute values : abs=true/false \n
       *  repeat texture : repeat=true/false \n
       *  Maximum value for repeat : max_val=value \n
       *  center texture : center=true/false \n
       *  \n
       * The system works like this :\n
       * First the abolute value of the property is taken if requested. Then this value is clamped against the given values. if the texture
Jan Möbius's avatar
   
Jan Möbius committed
135
       * should be repeated, the values are translated such that the minimum is at zero and than scaled such that the maximum is at
Jan Möbius's avatar
 
Jan Möbius committed
136
137
138
139
140
       * max_val. If its not repeated, the decision is to center the values around 0.5 or not. If not centered, the values are mapped directly
       * to 0..1 .If centered, the negative values are mapped to 0..0.5 and the positive values to 0.5..1.
       *  @param _textureName Name of your Texture
       *  @param _mode colon seperated String describing your settings (e.g. clamp,abs )
      */
Dirk Wilden's avatar
Dirk Wilden committed
141
      virtual void setTextureMode(QString /*_textureName*/ ,QString /*_mode*/) {};
Jan Möbius's avatar
   
Jan Möbius committed
142

Dirk Wilden's avatar
Dirk Wilden committed
143
144
145
146
147
148
149
150
151
152
      /** \brief emit this signal if you want to set a special mode for this texture (Clamping,...)
       *
       * for info about the _mode parameter see setTextureMode(QString,QString)
       *
       *  @param _textureName Name of your Texture
       *  @param _mode colon seperated String describing your settings (e.g. clamp,abs )
       *  @param _id id of an object
       */
      virtual void setTextureMode(QString /*_textureName*/ ,QString /*_mode*/, int /*_id*/ ) {};

Jan Möbius's avatar
 
Jan Möbius committed
153
154
   private slots :
      /** \brief update the texture with the given Name ( if this plugin provides this texture ) for all meshes
155
156
157
158
       *
       * This function is called if the texture of the object is about to be shown and the object has changed
       * since the last rendering of the texture.
       *
Jan Möbius's avatar
 
Jan Möbius committed
159
160
161
       * @param _textureName Name of the Texture to be updated
       * @param _identifier The id of the object to update
      */
Dirk Wilden's avatar
Dirk Wilden committed
162
      virtual void slotUpdateTexture( QString /*_textureName*/ , int /*_identifier*/) {};
Jan Möbius's avatar
   
Jan Möbius committed
163

Jan Möbius's avatar
 
Jan Möbius committed
164
165
166
      /** \brief update all textures provided by this plugin
       */
      virtual void slotUpdateAllTextures( ) {};
Jan Möbius's avatar
   
Jan Möbius committed
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
      /** \brief A texture has been updated
       *
       *  A plugin has updated a Texture
       *  @param _textureName The name of the updated texture
       *  @param _identifier -1 if all objects updated, otherwise the identifier of the object
       */
      virtual void slotTextureUpdated( QString /*_textureName*/ , int /*_identifier*/ ) {};

      /** \brief This slot is called when a plugin requests to switch an objects texture
       *
       * @param _textureName Name of the Texture
       * @param _id id of an object
       */
      virtual void slotSwitchTexture( QString /*_textureName*/, int /*_id*/ ) {};

      /** \brief This slot is called when a plugin requests to switch to a different texture mode
       *
       * @param _textureName Name of the Texture
      */
      virtual void slotSwitchTexture( QString /*_textureName*/ ) {};

   public :

      /// Destructor
      virtual ~TextureInterface() {};

   //===========================================================================
    /** @name Functions handled by textureControlPlugin
     *
     * Normally you dont have to do anything when these functions are called.
     * Texturecontrol handles visualization and updates of textures.
    * @{ */
   //===========================================================================

  private slots :

Jan Möbius's avatar
   
Jan Möbius committed
204
205
      /** \brief A texture has been added by a plugin.
       *
Dirk Wilden's avatar
Dirk Wilden committed
206
207
208
209
210
211
212
213
214
215
216
217
218
       * This slot is called when a texture for a specific object has been added by a plugin.
       *
       * @param _textureName Name of the Added texture (has to be equal to the property name)
       * @param _filename Filename of the Texture Image to be used
       * @param _dimension Dimension of the Texture (currently only 1D and 2D Textures are supported
       * @param _id id of an object
       */
      virtual void slotTextureAdded( QString /*_textureName*/ , QString /*_filename*/ , uint /*_dimension*/, int /*_id*/ ) {};

      /** \brief A texture has been added by a plugin.
       *
       * This slot is called when a global texture has been added by a plugin.
       *
Jan Möbius's avatar
 
Jan Möbius committed
219
220
221
222
       * @param _textureName Name of the Added texture (has to be equal to the property name)
       * @param _filename Filename of the Texture Image to be used
       * @param dimension Dimension of the Texture (currently only 1D and 2D Textures are supported
       */
Dirk Wilden's avatar
Dirk Wilden committed
223
      virtual void slotTextureAdded( QString /*_textureName*/ , QString /*_filename*/ , uint /*dimension*/ ) {};
Jan Möbius's avatar
   
Jan Möbius committed
224

225
226
227
228
229
230
231
232
233
234
235
236
      /** \brief A multiTexture has been added by a plugin.
       *
       * This slot is called when a Multi Texture has been added by a plugin.
       *
       * @param _name Name of the Added texture (has to be equal to the property name)
       * @param _filename Filename of the Texture Image to be used
       * @param _id Id of the object which should use the texture
       * @param _textureId    The new id of the texture( This id is object related!!)
       */
      virtual void slotMultiTextureAdded( QString /*_textureGroup*/ , QString /*_name*/ ,
                                          QString /*_filename*/ , int /*_id*/ , int& /*_textureId*/ ) {};

Dirk Wilden's avatar
Dirk Wilden committed
237
238
239
240
241
242
243
244
245
      /** \brief Texturemode for texture should be changed
       *
       *  A plugin has updated the Texture settings for a texture
       *  @param _textureName The name of the updated texture
       *  @param _mode New mode flags for the given texture
       *  @param _id id of an object
       */
      virtual void slotSetTextureMode(QString /*_textureName*/ ,QString /*_mode*/, int /*_id*/ ) {};

Jan Möbius's avatar
 
Jan Möbius committed
246
      /** \brief Texturemode for texture should be changed
Jan Möbius's avatar
   
Jan Möbius committed
247
       *
Jan Möbius's avatar
 
Jan Möbius committed
248
249
250
251
       *  A plugin has updated the Texture settings for a texture
       *  @param _textureName The name of the updated texture
       *  @param _mode New mode flags for the given texture
       */
Dirk Wilden's avatar
Dirk Wilden committed
252
      virtual void slotSetTextureMode(QString /*_textureName*/ ,QString /*_mode*/) {};
Jan Möbius's avatar
   
Jan Möbius committed
253

254
   /** @} */
Jan Möbius's avatar
 
Jan Möbius committed
255
256
257
};

Q_DECLARE_INTERFACE(TextureInterface,"OpenFlipper.TextureInterface/1.0")
Jan Möbius's avatar
   
Jan Möbius committed
258

Jan Möbius's avatar
 
Jan Möbius committed
259
#endif // TEXTUREINTERFACE_HH