Project

General

Profile

Download (24.8 KB) Statistics
| Branch: | Revision:

examples / src / main / java / org / distorted / examples / matrix3d / Matrix3DEffect.java @ 71759555

1 4d5b37fe Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.examples.matrix3d;
21
22
import android.view.View;
23
import android.widget.SeekBar;
24
import android.widget.TextView;
25
26
import org.distorted.examples.R;
27 d04a4886 Leszek Koltunski
import org.distorted.library.DistortedEffects;
28 4d5b37fe Leszek Koltunski
import org.distorted.library.EffectNames;
29
import org.distorted.library.EffectTypes;
30
import org.distorted.library.type.Dynamic1D;
31
import org.distorted.library.type.Dynamic2D;
32
import org.distorted.library.type.Dynamic3D;
33
import org.distorted.library.type.Dynamic4D;
34
import org.distorted.library.type.Dynamic5D;
35
import org.distorted.library.type.Static1D;
36
import org.distorted.library.type.Static2D;
37
import org.distorted.library.type.Static3D;
38
import org.distorted.library.type.Static4D;
39
import org.distorted.library.type.Static5D;
40
41
import java.lang.ref.WeakReference;
42
43
///////////////////////////////////////////////////////////////////////////////////////////////////
44
45
class Matrix3DEffect implements SeekBar.OnSeekBarChangeListener
46
  {
47
  private WeakReference<Matrix3DActivity> mAct;
48
49
  private EffectNames mName;
50
  private int[] mInter;
51
  private int[] mInterRegion;
52
  private int[] mInterCenter;
53
  private int[] mSeekID;
54
  private int[] mSeekRegionID;
55
  private int[] mSeekCenterID;
56
  private int mDimension;
57
  private TextView mText,mTextRegion,mTextCenter;
58
59
  private Dynamic1D mDyn1;
60
  private Dynamic2D mDyn2;
61
  private Dynamic3D mDyn3;
62 334c13fa Leszek Koltunski
  private Dynamic4D mDyn4;
63 4d5b37fe Leszek Koltunski
  private Dynamic5D mDyn5;
64
  private Static1D  mSta1;
65
  private Static2D  mSta2;
66
  private Static3D  mSta3;
67 334c13fa Leszek Koltunski
  private Static4D  mSta4;
68 4d5b37fe Leszek Koltunski
  private Static5D  mSta5;
69
  private Dynamic4D mRegionDyn;
70
  private Static4D  mRegionSta;
71 334c13fa Leszek Koltunski
  private Dynamic3D mCenterDyn;
72
  private Static3D  mCenterSta;
73 4d5b37fe Leszek Koltunski
74
  private View mButton, mEffect, mCenter, mRegion;
75
  private long mId;
76
77
///////////////////////////////////////////////////////////////////////////////////////////////////
78
// requires knowledge about effect nature
79
80 d04a4886 Leszek Koltunski
  void apply(DistortedEffects effects)
81 4d5b37fe Leszek Koltunski
    {
82
    switch(mName)
83
      {
84 d04a4886 Leszek Koltunski
      case ROTATE           : mId = effects.rotate    (mDyn4, mCenterDyn); break;
85
      case QUATERNION       : mId = effects.quaternion(mDyn4, mCenterDyn); break;
86
      case MOVE             : mId = effects.move      (mDyn3)            ; break;
87
      case SCALE            : mId = effects.scale     (mDyn3)            ; break;
88
      case SHEAR            : mId = effects.shear     (mDyn3, mCenterDyn); break;
89 4d5b37fe Leszek Koltunski
90 d04a4886 Leszek Koltunski
      case DISTORT          : mId = effects.distort   (mDyn3, mCenterDyn, mRegionDyn); break;
91
      case DEFORM           : mId = effects.deform    (mDyn3, mCenterDyn, mRegionDyn); break;
92
      case SINK             : mId = effects.sink      (mDyn1, mCenterDyn, mRegionDyn); break;
93
      case PINCH            : mId = effects.pinch     (mDyn2, mCenterDyn, mRegionDyn); break;
94
      case SWIRL            : mId = effects.swirl     (mDyn1, mCenterDyn, mRegionDyn); break;
95
      case WAVE             : mId = effects.wave      (mDyn5, mCenterDyn, mRegionDyn); break;
96 4d5b37fe Leszek Koltunski
97 d04a4886 Leszek Koltunski
      case ALPHA            : mId = effects.alpha     (mDyn1,        mRegionDyn, false); break;
98
      case SMOOTH_ALPHA     : mId = effects.alpha     (mDyn1,        mRegionDyn, true ); break;
99
      case CHROMA           : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, false); break;
100
      case SMOOTH_CHROMA    : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, true ); break;
101
      case BRIGHTNESS       : mId = effects.brightness(mDyn1,        mRegionDyn, false); break;
102
      case SMOOTH_BRIGHTNESS: mId = effects.brightness(mDyn1,        mRegionDyn, true ); break;
103
      case SATURATION       : mId = effects.saturation(mDyn1,        mRegionDyn, false); break;
104
      case SMOOTH_SATURATION: mId = effects.saturation(mDyn1,        mRegionDyn, true ); break;
105
      case CONTRAST         : mId = effects.contrast  (mDyn1,        mRegionDyn, false); break;
106
      case SMOOTH_CONTRAST  : mId = effects.contrast  (mDyn1,        mRegionDyn, true ); break;
107 4d5b37fe Leszek Koltunski
108
      default: mId = -1;
109
      }
110
    }
111
112
///////////////////////////////////////////////////////////////////////////////////////////////////
113
// requires knowledge about effect nature
114
115
  private void fillStatics()
116
    {
117
    switch(mName)
118
      {
119 334c13fa Leszek Koltunski
      case ROTATE           : float an = (mInter[0]-50)*180/50;
120
                              float rx = (mInter[1]-50)/ 50.0f;
121
                              float ry = (mInter[2]-50)/ 50.0f;
122
                              float rz = (mInter[3]-50)/ 50.0f;
123
                              mSta4.set(an,rx,ry,rz);
124 4d5b37fe Leszek Koltunski
                              break;
125 7c8012ee Leszek Koltunski
      case QUATERNION       : float qx = (mInter[0]-50)/ 50.0f;
126
                              float qy = (mInter[1]-50)/ 50.0f;
127
                              float qz = (mInter[2]-50)/ 50.0f;
128
                              float qa = (mInter[3]-50)*3.1415f/50;
129
                              float cosA = (float)Math.cos(qa/2);
130
                              float len = (float)Math.sqrt(qx*qx+qy*qy+qz*qz);
131
                              float sinAnorm = (float)Math.sin(qa/2)/len;
132
                              mSta4.set(sinAnorm*qx,sinAnorm*qy,sinAnorm*qz, cosA);
133 4d5b37fe Leszek Koltunski
                              break;
134 334c13fa Leszek Koltunski
      case MOVE             : float sw = mAct.get().getScreenWidth()/50.0f;
135
                              float sh = mAct.get().getScreenWidth()/50.0f;
136
                              float xm = (mInter[0]-50)*sw;
137
                              float ym = (mInter[1]-50)*sh;
138
                              float zm = (mInter[2]-50)*(sw+sh)/2;
139 4d5b37fe Leszek Koltunski
                              mSta3.set(xm,ym,zm);
140
                              break;
141 71759555 leszek
      case SCALE            : float xs = (mInter[0]-50)/10.0f;
142
                              float ys = (mInter[1]-50)/10.0f;
143
                              float zs = (mInter[2]-50)/10.0f;
144 4d5b37fe Leszek Koltunski
                              mSta3.set(xs,ys,zs);
145
                              break;
146 334c13fa Leszek Koltunski
      case SHEAR            : float xsh = (mInter[0]-50)/25.0f;
147
                              float ysh = (mInter[1]-50)/25.0f;
148
                              float zsh = (mInter[2]-50)/25.0f;
149
                              mSta3.set(xsh,ysh,zsh);
150 4d5b37fe Leszek Koltunski
                              break;
151 7c8012ee Leszek Koltunski
152 4d5b37fe Leszek Koltunski
      case DISTORT          :
153
      case DEFORM           : float ld = mAct.get().getWidth()/50.0f;
154
                              float xd = (mInter[0]-50)*ld;
155
                              float yd = (mInter[1]-50)*ld;
156
                              float zd = (mInter[2]-50)*ld;
157
                              mSta3.set(xd,yd,zd);
158
                              break;
159
      case WAVE             : float l2 = mAct.get().getWidth()/50.0f;
160
                              float x2 = (mInter[0]-50)*l2;
161
                              float y2 = (mInter[1]-50)*l2;
162
                              float z2 = (mInter[2]-50)*180 / 50;
163
                              float w2 = (mInter[3]-50)*180 / 50;
164
                              float v2 = (mInter[4]-50)*180 / 50;
165
                              mSta5.set(x2,y2,z2,w2,v2);
166
                              break;
167
      case SWIRL            : mSta1.set( 3.6f*(mInter[0]-50) );
168
                              break;
169 7c8012ee Leszek Koltunski
      case SINK             : mSta1.set(mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f);
170
                              break;
171
      case PINCH            : float dp = mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f;
172
                              float ap = (mInter[1]-50)*180 / 50;
173
                              mSta2.set(dp,ap);
174
                              break;
175
176 4d5b37fe Leszek Koltunski
      case ALPHA            :
177
      case SMOOTH_ALPHA     : mSta1.set(mInter[0]/100.0f);
178
                              break;
179
      case SATURATION       :
180
      case SMOOTH_SATURATION:
181
      case CONTRAST         :
182
      case SMOOTH_CONTRAST  :
183
      case BRIGHTNESS       :
184
      case SMOOTH_BRIGHTNESS: mSta1.set(mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f);
185
                              break;
186
      case CHROMA           :
187
      case SMOOTH_CHROMA    : mSta1.set(mInter[0]/100.0f);
188
                              mSta3.set(mInter[1]/100.0f,
189
                                        mInter[2]/100.0f,
190
                                        mInter[3]/100.0f);
191
                              break;
192
      }
193
    }
194
195
///////////////////////////////////////////////////////////////////////////////////////////////////
196
197
  private void setDefaultInter()
198
    {
199
    switch(mDimension)
200
      {
201
      case 5: mInter[4] = 50;
202
      case 4: mInter[3] = 50;
203
      case 3: mInter[2] = 50;
204
      case 2: mInter[1] = 50;
205
      case 1: mInter[0] = 50;
206
      }
207 334c13fa Leszek Koltunski
208 71759555 leszek
    if( mName==EffectNames.ROTATE || mName==EffectNames.QUATERNION )
209
      {
210
      mInter[1]= 100;
211
      }
212
    if( mName==EffectNames.SCALE )
213
      {
214
      mInter[0]= 60;
215
      mInter[1]= 60;
216
      mInter[2]= 60;
217
      }
218 4d5b37fe Leszek Koltunski
    }
219
220
///////////////////////////////////////////////////////////////////////////////////////////////////
221
222
  private void setText()
223
    {
224
    String text = mName.name();
225
226
    if( mSta1 !=null )
227
      {
228
      float f1 = ((int)(mSta1.getX()*100))/100.0f;
229
      text += " "+f1;
230
      }
231
232
    if( mSta2 !=null )
233
      {
234
      float f1 = ((int)(mSta2.getX()*100))/100.0f;
235
      float f2 = ((int)(mSta2.getY()*100))/100.0f;
236
      text += " ("+f1+","+f2+")";
237
      }
238
239
    if( mSta3 !=null )
240
      {
241
      float f1 = ((int)(mSta3.getX()*100))/100.0f;
242
      float f2 = ((int)(mSta3.getY()*100))/100.0f;
243
      float f3 = ((int)(mSta3.getZ()*100))/100.0f;
244
      text += " ("+f1+","+f2+","+f3+")";
245
      }
246
247 334c13fa Leszek Koltunski
    if( mSta4 !=null )
248
      {
249
      float f1 = ((int)(mSta4.getX()*100))/100.0f;
250
      float f2 = ((int)(mSta4.getY()*100))/100.0f;
251
      float f3 = ((int)(mSta4.getZ()*100))/100.0f;
252
      float f4 = ((int)(mSta4.getW()*100))/100.0f;
253
      text += " ("+f1+","+f2+","+f3+","+f4+")";
254
      }
255
256 4d5b37fe Leszek Koltunski
    if( mSta5 !=null )
257
      {
258
      float f1 = ((int)(mSta5.getX()*100))/100.0f;
259
      float f2 = ((int)(mSta5.getY()*100))/100.0f;
260
      float f3 = ((int)(mSta5.getZ()*100))/100.0f;
261
      float f4 = ((int)(mSta5.getW()*100))/100.0f;
262
      float f5 = ((int)(mSta5.getV()*100))/100.0f;
263
      text += " ("+f1+","+f2+","+f3+","+f4+","+f5+")";
264
      }
265
266
    mText.setText(text);
267
    }
268
269
///////////////////////////////////////////////////////////////////////////////////////////////////
270
271
  private void fillCenterStatics()
272
    {
273
    Matrix3DActivity act = mAct.get();
274
275
    float x = (mInterCenter[0]*0.012f - 0.1f)*act.getWidth();
276
    float y = (mInterCenter[1]*0.012f - 0.1f)*act.getHeight();
277 334c13fa Leszek Koltunski
    float z = (mInterCenter[2]*0.012f - 0.1f)*act.getDepth();
278
279
    mCenterSta.set(x,y,z);
280 4d5b37fe Leszek Koltunski
    }
281
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283
284
  private void setDefaultCenterInter()
285
    {
286
    mInterCenter[0] = 50;
287
    mInterCenter[1] = 50;
288 334c13fa Leszek Koltunski
    mInterCenter[2] = 50;
289 4d5b37fe Leszek Koltunski
    }
290
291
///////////////////////////////////////////////////////////////////////////////////////////////////
292
293
  private void setCenterText()
294
    {
295
    int f0 = (int)mCenterSta.getX();
296
    int f1 = (int)mCenterSta.getY();
297 334c13fa Leszek Koltunski
    int f2 = (int)mCenterSta.getZ();
298 4d5b37fe Leszek Koltunski
299 334c13fa Leszek Koltunski
    mTextCenter.setText("center ("+f0+","+f1+","+f2+")");
300 4d5b37fe Leszek Koltunski
    }
301
302
///////////////////////////////////////////////////////////////////////////////////////////////////
303
304
  private void fillRegionStatics()
305
    {
306
    Matrix3DActivity act = mAct.get();
307
308
    float factorX = act.getWidth() / 100.0f;
309
    float factorY = act.getHeight()/ 100.0f;
310
311
    int deduct = (mName.getType() == EffectTypes.VERTEX ? 50:0);
312
313
    float  x = (mInterRegion[0]-deduct)*factorX;
314
    float  y = (mInterRegion[1]-deduct)*factorY;
315
    float rx =  mInterRegion[2]        *factorX;
316
    float ry =  mInterRegion[3]        *factorY;
317
318
    mRegionSta.set(x,y,rx,ry);
319
    }
320
321
///////////////////////////////////////////////////////////////////////////////////////////////////
322
323
  private void setDefaultRegionInter()
324
    {
325
    mInterRegion[0] = 50;
326
    mInterRegion[1] = 50;
327
    mInterRegion[2] = 50;
328
    mInterRegion[3] = 50;
329
    }
330
331
///////////////////////////////////////////////////////////////////////////////////////////////////
332
333
  private void setRegionText()
334
    {
335
    int f0 = (int)mRegionSta.getX();
336
    int f1 = (int)mRegionSta.getY();
337
    int f2 = (int)mRegionSta.getZ();
338
    int f3 = (int)mRegionSta.getW();
339
340
    mTextRegion.setText("region ("+f0+","+f1+","+f2+","+f3+")");
341
    }
342
343
///////////////////////////////////////////////////////////////////////////////////////////////////
344
345
  Matrix3DEffect(EffectNames name, Matrix3DActivity act)
346
    {
347
    mAct = new WeakReference<>(act);
348
    mName = name;
349
350
    mDyn1 = null;
351
    mDyn2 = null;
352
    mDyn3 = null;
353 334c13fa Leszek Koltunski
    mDyn4 = null;
354 4d5b37fe Leszek Koltunski
    mDyn5 = null;
355
    mSta1 = null;
356
    mSta2 = null;
357
    mSta3 = null;
358 334c13fa Leszek Koltunski
    mSta4 = null;
359 4d5b37fe Leszek Koltunski
    mSta5 = null;
360
361
    mDimension = mName.getDimension();
362
363
    switch(mDimension)
364
      {
365
      case 1 : mDyn1 = new Dynamic1D();
366
               mSta1 = new Static1D(0);
367
               mDyn1.add(mSta1);
368
               break;
369
      case 2 : mDyn2 = new Dynamic2D();
370
               mSta2 = new Static2D(0,0);
371
               mDyn2.add(mSta2);
372
               break;
373
      case 3 : mDyn3 = new Dynamic3D();
374
               mSta3 = new Static3D(0,0,0);
375
               mDyn3.add(mSta3);
376
               break;
377 7c8012ee Leszek Koltunski
      case 4 : if( mName == EffectNames.ROTATE || mName == EffectNames.QUATERNION )
378 334c13fa Leszek Koltunski
                 {
379
                 mDyn4 = new Dynamic4D();
380
                 mSta4 = new Static4D(0,0,0,0);
381
                 mDyn4.add(mSta4);
382
                 }
383
               else
384
                 {
385
                 mDyn3 = new Dynamic3D();
386
                 mSta3 = new Static3D(0,0,0);
387
                 mDyn3.add(mSta3);
388
                 mDyn1 = new Dynamic1D();
389
                 mSta1 = new Static1D(0);
390
                 mDyn1.add(mSta1);
391
                 }
392 4d5b37fe Leszek Koltunski
               break;
393
      case 5 : mDyn5 = new Dynamic5D();
394
               mSta5 = new Static5D(0,0,0,0,0);
395
               mDyn5.add(mSta5);
396
               break;
397
      default: throw new RuntimeException("unsupported effect");
398
      }
399
400
    mInter = new int[mDimension];
401
    mSeekID= new int[mDimension];
402
403
    mInterRegion = new int[4];
404
    mSeekRegionID= new int[4];
405
    mRegionDyn   = new Dynamic4D();
406
    mRegionSta   = new Static4D(0,0,0,0);
407
    mRegionDyn.add(mRegionSta);
408
409 334c13fa Leszek Koltunski
    mInterCenter = new int[3];
410
    mSeekCenterID= new int[3];
411
    mCenterDyn   = new Dynamic3D();
412
    mCenterSta   = new Static3D(0,0,0);
413 4d5b37fe Leszek Koltunski
    mCenterDyn.add(mCenterSta);
414
415
    mButton = null;
416
    mEffect = null;
417
    mCenter = null;
418
    mRegion = null;
419
    }
420
421
///////////////////////////////////////////////////////////////////////////////////////////////////
422
423
  View createView()
424
    {
425
    SeekBar[] seek = new SeekBar[mDimension];
426
427
    Matrix3DActivity act = mAct.get();
428
429
    switch(mDimension)
430
      {
431
      case 1 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect1d, null);
432
               mText      = (TextView)mEffect.findViewById(R.id.effect1dText);
433
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect1dbar1);
434
               mSeekID[0] = seek[0].getId();
435
               mButton    = mEffect.findViewById(R.id.button1dRemove);
436
               break;
437
      case 2 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect2d, null);
438
               mText      = (TextView)mEffect.findViewById(R.id.effect2dText);
439
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect2dbar1);
440
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect2dbar2);
441
               mSeekID[0] = seek[0].getId();
442
               mSeekID[1] = seek[1].getId();
443
               mButton    = mEffect.findViewById(R.id.button2dRemove);
444
               break;
445
      case 3 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect3d, null);
446
               mText      = (TextView)mEffect.findViewById(R.id.effect3dText);
447
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar1);
448
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar2);
449
               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar3);
450
               mSeekID[0] = seek[0].getId();
451
               mSeekID[1] = seek[1].getId();
452
               mSeekID[2] = seek[2].getId();
453
               mButton    = mEffect.findViewById(R.id.button3dRemove);
454
               break;
455
      case 4 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect4d, null);
456
               mText      = (TextView)mEffect.findViewById(R.id.effect4dText);
457
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar1);
458
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar2);
459
               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar3);
460
               seek[3]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar4);
461
               mSeekID[0] = seek[0].getId();
462
               mSeekID[1] = seek[1].getId();
463
               mSeekID[2] = seek[2].getId();
464
               mSeekID[3] = seek[3].getId();
465
               mButton    = mEffect.findViewById(R.id.button4dRemove);
466
               break;
467
      case 5 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect5d, null);
468
               mText      = (TextView)mEffect.findViewById(R.id.effect5dText);
469
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar1);
470
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar2);
471
               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar3);
472
               seek[3]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar4);
473
               seek[4]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar5);
474
               mSeekID[0] = seek[0].getId();
475
               mSeekID[1] = seek[1].getId();
476
               mSeekID[2] = seek[2].getId();
477
               mSeekID[3] = seek[3].getId();
478
               mSeekID[4] = seek[4].getId();
479
               mButton    = mEffect.findViewById(R.id.button5dRemove);
480
               break;
481
      default: android.util.Log.e("Matrix3DEffect", "dimension "+mDimension+" not supported!");
482
               return null;
483
      }
484
485
    setDefaultInter();
486
487
    for(int i=0; i<mDimension; i++)
488
      {
489
      seek[i].setOnSeekBarChangeListener(this);
490
      seek[i].setProgress( mInter[i] );
491
      }
492
493
    Matrix3DActivity.setSupportsRegion(mName.supportsRegion());
494
    Matrix3DActivity.setSupportsCenter(mName.supportsCenter());
495
496
    return mEffect;
497
    }
498
499
///////////////////////////////////////////////////////////////////////////////////////////////////
500
501
  View createRegion()
502
    {
503
    Matrix3DActivity act = mAct.get();
504
505
    mRegion = act.getLayoutInflater().inflate(R.layout.effectregion, null);
506
507
    SeekBar[] seek = new SeekBar[4];
508
509
    seek[0] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarX );
510
    seek[1] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarY );
511
    seek[2] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRX);
512
    seek[3] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRY);
513
514
    mSeekRegionID[0] = seek[0].getId();
515
    mSeekRegionID[1] = seek[1].getId();
516
    mSeekRegionID[2] = seek[2].getId();
517
    mSeekRegionID[3] = seek[3].getId();
518
519
    mTextRegion = (TextView)mRegion.findViewById(R.id.effectRegionText);
520
521
    setDefaultRegionInter();
522
523
    for(int i=0; i<4; i++)
524
      {
525
      seek[i].setOnSeekBarChangeListener(this);
526
      seek[i].setProgress( mInterRegion[i] );
527
      }
528
529
    act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
530
531
    return mRegion;
532
    }
533
534
///////////////////////////////////////////////////////////////////////////////////////////////////
535
536
  View createCenter()
537
    {
538
    Matrix3DActivity act = mAct.get();
539
540
    mCenter = act.getLayoutInflater().inflate(R.layout.effectcenter, null);
541
542 334c13fa Leszek Koltunski
    SeekBar[] seek = new SeekBar[3];
543 4d5b37fe Leszek Koltunski
544
    seek[0] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarX );
545
    seek[1] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarY );
546 334c13fa Leszek Koltunski
    seek[2] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarZ );
547 4d5b37fe Leszek Koltunski
548
    mSeekCenterID[0] = seek[0].getId();
549
    mSeekCenterID[1] = seek[1].getId();
550 334c13fa Leszek Koltunski
    mSeekCenterID[2] = seek[2].getId();
551 4d5b37fe Leszek Koltunski
552
    mTextCenter = (TextView)mCenter.findViewById(R.id.effectCenterText);
553
554
    setDefaultCenterInter();
555
556 334c13fa Leszek Koltunski
    for(int i=0; i<3; i++)
557 4d5b37fe Leszek Koltunski
      {
558
      seek[i].setOnSeekBarChangeListener(this);
559
      seek[i].setProgress( mInterCenter[i] );
560
      }
561
562 334c13fa Leszek Koltunski
    act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
563 4d5b37fe Leszek Koltunski
564
    return mCenter;
565
    }
566
567
///////////////////////////////////////////////////////////////////////////////////////////////////
568
569
  public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
570
    {
571
    if ( mDimension>=1 && bar.getId()==mSeekID[0] )
572
      {
573
      mInter[0] = progress;
574
      fillStatics();
575
      setText();
576
      }
577
    if ( mDimension>=2 && bar.getId()==mSeekID[1] )
578
      {
579
      mInter[1] = progress;
580
      fillStatics();
581
      setText();
582
      }
583
    if ( mDimension>=3 && bar.getId()==mSeekID[2] )
584
      {
585
      mInter[2] = progress;
586
      fillStatics();
587
      setText();
588
      }
589
    if ( mDimension>=4 && bar.getId()==mSeekID[3] )
590
      {
591
      mInter[3] = progress;
592
      fillStatics();
593
      setText();
594
      }
595
    if ( mDimension>=5 && bar.getId()==mSeekID[4] )
596
      {
597
      mInter[4] = progress;
598
      fillStatics();
599
      setText();
600
      }
601
602
    if( bar.getId() == mSeekRegionID[0] )
603
      {
604
      mInterRegion[0] = progress;
605
      fillRegionStatics();
606
      setRegionText();
607
      }
608
    if( bar.getId() == mSeekRegionID[1] )
609
      {
610
      mInterRegion[1] = progress;
611
      fillRegionStatics();
612
      setRegionText();
613
      }
614
    if( bar.getId() == mSeekRegionID[2] )
615
      {
616
      mInterRegion[2] = progress;
617
      fillRegionStatics();
618
      setRegionText();
619
      }
620
    if( bar.getId() == mSeekRegionID[3] )
621
      {
622
      mInterRegion[3] = progress;
623
      fillRegionStatics();
624
      setRegionText();
625
      }
626
627
    if( bar.getId() == mSeekCenterID[0] )
628
      {
629
      mInterCenter[0] = progress;
630
      fillCenterStatics();
631
      setCenterText();
632
      }
633
    if( bar.getId() == mSeekCenterID[1] )
634
      {
635
      mInterCenter[1] = progress;
636
      fillCenterStatics();
637
      setCenterText();
638
      }
639 334c13fa Leszek Koltunski
    if( bar.getId() == mSeekCenterID[2] )
640
      {
641
      mInterCenter[2] = progress;
642
      fillCenterStatics();
643
      setCenterText();
644
      }
645 4d5b37fe Leszek Koltunski
646
    if( fromUser )
647
      {
648
      Matrix3DActivity.setSupportsRegion(mName.supportsRegion());
649
      Matrix3DActivity.setSupportsCenter(mName.supportsCenter());
650
651
      Matrix3DActivity act = mAct.get();
652
653 334c13fa Leszek Koltunski
      act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
654 4d5b37fe Leszek Koltunski
      act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
655
      }
656
    }
657
658
///////////////////////////////////////////////////////////////////////////////////////////////////
659
660 6f3024ae Leszek Koltunski
  boolean thisView(View v)
661 4d5b37fe Leszek Koltunski
    {
662
    return v==mButton;
663
    }
664
665
///////////////////////////////////////////////////////////////////////////////////////////////////
666
667
  public long getId()
668
    {
669
    return mId;
670
    }
671
672
///////////////////////////////////////////////////////////////////////////////////////////////////
673
674
  public View getEffect()
675
    {
676
    return mEffect;
677
    }
678
679
///////////////////////////////////////////////////////////////////////////////////////////////////
680
681
  public View getRegion()
682
    {
683
    return mRegion;
684
    }
685
686
///////////////////////////////////////////////////////////////////////////////////////////////////
687
688
  public View getCenter()
689
    {
690
    return mCenter;
691
    }
692
693
///////////////////////////////////////////////////////////////////////////////////////////////////
694
695
  public void onStartTrackingTouch(SeekBar bar) { }
696
697
///////////////////////////////////////////////////////////////////////////////////////////////////
698
699
  public void onStopTrackingTouch(SeekBar bar)  { }
700
  }