Project

General

Profile

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

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

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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
import org.distorted.library.effect.EffectName;
28
import org.distorted.library.main.DistortedEffects;
29
import org.distorted.library.type.Dynamic1D;
30
import org.distorted.library.type.Dynamic2D;
31
import org.distorted.library.type.Dynamic3D;
32
import org.distorted.library.type.Dynamic4D;
33
import org.distorted.library.type.Dynamic5D;
34
import org.distorted.library.type.Static1D;
35
import org.distorted.library.type.Static2D;
36
import org.distorted.library.type.Static3D;
37
import org.distorted.library.type.Static4D;
38
import org.distorted.library.type.Static5D;
39

    
40
import java.lang.ref.WeakReference;
41

    
42
///////////////////////////////////////////////////////////////////////////////////////////////////
43

    
44
class Matrix3DEffect implements SeekBar.OnSeekBarChangeListener
45
  {
46
  private WeakReference<Matrix3DActivity> mAct;
47

    
48
  private EffectName mName;
49
  private int[] mInter;
50
  private int[] mInterRegion;
51
  private int[] mInterCenter;
52
  private int[] mSeekID;
53
  private int[] mSeekRegionID;
54
  private int[] mSeekCenterID;
55
  private int mDimension;
56
  private TextView mText,mTextRegion,mTextCenter;
57

    
58
  private Dynamic1D mDyn1;
59
  private Dynamic2D mDyn2;
60
  private Dynamic3D mDyn3;
61
  private Dynamic4D mDyn4;
62
  private Dynamic5D mDyn5;
63
  private Static1D  mSta1;
64
  private Static2D  mSta2;
65
  private Static3D  mSta3;
66
  private Static4D  mSta4;
67
  private Static5D  mSta5;
68
  private Dynamic4D mRegionDyn;
69
  private Static4D  mRegionSta;
70
  private Dynamic3D mCenterDyn;
71
  private Static3D  mCenterSta;
72

    
73
  private View mButton, mEffect, mCenter, mRegion;
74
  private long mId;
75

    
76
///////////////////////////////////////////////////////////////////////////////////////////////////
77
// requires knowledge about effect nature
78

    
79
  void apply(DistortedEffects effects)
80
    {
81
    switch(mName)
82
      {
83
      case ROTATE           : mId = effects.rotate    (mDyn4, mCenterDyn); break;
84
      case QUATERNION       : mId = effects.quaternion(mDyn4, mCenterDyn); break;
85
      case MOVE             : mId = effects.move      (mDyn3)            ; break;
86
      case SCALE            : mId = effects.scale     (mDyn3)            ; break;
87
      case SHEAR            : mId = effects.shear     (mDyn3, mCenterDyn); break;
88

    
89
      case DISTORT          : mId = effects.distort   (mDyn3, mCenterDyn, mRegionDyn); break;
90
      case DEFORM           : mId = effects.deform    (mDyn3, mCenterDyn, mRegionDyn); break;
91
      case SINK             : mId = effects.sink      (mDyn1, mCenterDyn, mRegionDyn); break;
92
      case PINCH            : mId = effects.pinch     (mDyn2, mCenterDyn, mRegionDyn); break;
93
      case SWIRL            : mId = effects.swirl     (mDyn1, mCenterDyn, mRegionDyn); break;
94
      case WAVE             : mId = effects.wave      (mDyn5, mCenterDyn, mRegionDyn); break;
95

    
96
      case ALPHA            : mId = effects.alpha     (mDyn1,        mRegionDyn, false); break;
97
      case SMOOTH_ALPHA     : mId = effects.alpha     (mDyn1,        mRegionDyn, true ); break;
98
      case CHROMA           : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, false); break;
99
      case SMOOTH_CHROMA    : mId = effects.chroma    (mDyn1, mDyn3, mRegionDyn, true ); break;
100
      case BRIGHTNESS       : mId = effects.brightness(mDyn1,        mRegionDyn, false); break;
101
      case SMOOTH_BRIGHTNESS: mId = effects.brightness(mDyn1,        mRegionDyn, true ); break;
102
      case SATURATION       : mId = effects.saturation(mDyn1,        mRegionDyn, false); break;
103
      case SMOOTH_SATURATION: mId = effects.saturation(mDyn1,        mRegionDyn, true ); break;
104
      case CONTRAST         : mId = effects.contrast  (mDyn1,        mRegionDyn, false); break;
105
      case SMOOTH_CONTRAST  : mId = effects.contrast  (mDyn1,        mRegionDyn, true ); break;
106

    
107
      default: mId = -1;
108
      }
109
    }
110

    
111
///////////////////////////////////////////////////////////////////////////////////////////////////
112
// requires knowledge about effect nature
113

    
114
  private void fillStatics()
115
    {
116
    switch(mName)
117
      {
118
      case ROTATE           : float an = (mInter[0]-50)*180/50;
119
                              float rx = (mInter[1]-50)/ 50.0f;
120
                              float ry = (mInter[2]-50)/ 50.0f;
121
                              float rz = (mInter[3]-50)/ 50.0f;
122
                              mSta4.set(an,rx,ry,rz);
123
                              break;
124
      case QUATERNION       : float qx = (mInter[0]-50)/ 50.0f;
125
                              float qy = (mInter[1]-50)/ 50.0f;
126
                              float qz = (mInter[2]-50)/ 50.0f;
127
                              float qa = (mInter[3]-50)*3.1415f/50;
128
                              float cosA = (float)Math.cos(qa/2);
129
                              float len = (float)Math.sqrt(qx*qx+qy*qy+qz*qz);
130
                              float sinAnorm = (float)Math.sin(qa/2)/len;
131
                              mSta4.set(sinAnorm*qx,sinAnorm*qy,sinAnorm*qz, cosA);
132
                              break;
133
      case MOVE             : float sw = mAct.get().getScreenWidth()/50.0f;
134
                              float sh = mAct.get().getScreenWidth()/50.0f;
135
                              float xm = (mInter[0]-50)*sw;
136
                              float ym = (mInter[1]-50)*sh;
137
                              float zm = (mInter[2]-50)*(sw+sh)/2;
138
                              mSta3.set(xm,ym,zm);
139
                              break;
140
      case SCALE            : float xs = (mInter[0]-50)/10.0f;
141
                              float ys = (mInter[1]-50)/10.0f;
142
                              float zs = (mInter[2]-50)/10.0f;
143
                              mSta3.set(xs,ys,zs);
144
                              break;
145
      case SHEAR            : float xsh = (mInter[0]-50)/25.0f;
146
                              float ysh = (mInter[1]-50)/25.0f;
147
                              float zsh = (mInter[2]-50)/25.0f;
148
                              mSta3.set(xsh,ysh,zsh);
149
                              break;
150

    
151
      case DISTORT          :
152
      case DEFORM           : float ld = mAct.get().getWidth()/50.0f;
153
                              float xd = (mInter[0]-50)*ld;
154
                              float yd = (mInter[1]-50)*ld;
155
                              float zd = (mInter[2]-50)*ld;
156
                              mSta3.set(xd,yd,zd);
157
                              break;
158
      case WAVE             : float l2 = mAct.get().getWidth()/50.0f;
159
                              float x2 = (mInter[0]-50)*l2;
160
                              float y2 = (mInter[1]-50)*l2;
161
                              float z2 = (mInter[2]-50)*180 / 50;
162
                              float w2 = (mInter[3]-50)*180 / 50;
163
                              float v2 = (mInter[4]-50)*180 / 50;
164
                              mSta5.set(x2,y2,z2,w2,v2);
165
                              break;
166
      case SWIRL            : mSta1.set( 3.6f*(mInter[0]-50) );
167
                              break;
168
      case SINK             : mSta1.set(mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f);
169
                              break;
170
      case PINCH            : float dp = mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f;
171
                              float ap = (mInter[1]-50)*180 / 50;
172
                              mSta2.set(dp,ap);
173
                              break;
174

    
175
      case ALPHA            :
176
      case SMOOTH_ALPHA     : mSta1.set(mInter[0]/100.0f);
177
                              break;
178
      case SATURATION       :
179
      case SMOOTH_SATURATION:
180
      case CONTRAST         :
181
      case SMOOTH_CONTRAST  :
182
      case BRIGHTNESS       :
183
      case SMOOTH_BRIGHTNESS: mSta1.set(mInter[0] > 50 ? 50.0f/(100.01f-mInter[0]) : mInter[0] / 50.0f);
184
                              break;
185
      case CHROMA           :
186
      case SMOOTH_CHROMA    : mSta1.set(mInter[0]/100.0f);
187
                              mSta3.set(mInter[1]/100.0f,
188
                                        mInter[2]/100.0f,
189
                                        mInter[3]/100.0f);
190
                              break;
191
      }
192
    }
193

    
194
///////////////////////////////////////////////////////////////////////////////////////////////////
195

    
196
  private void setDefaultInter()
197
    {
198
    switch(mDimension)
199
      {
200
      case 5: mInter[4] = 50;
201
      case 4: mInter[3] = 50;
202
      case 3: mInter[2] = 50;
203
      case 2: mInter[1] = 50;
204
      case 1: mInter[0] = 50;
205
      }
206

    
207
    if( mName==EffectNames.ROTATE || mName==EffectNames.QUATERNION )
208
      {
209
      mInter[1]= 100;
210
      }
211
    if( mName==EffectNames.SCALE )
212
      {
213
      mInter[0]= 60;
214
      mInter[1]= 60;
215
      mInter[2]= 60;
216
      }
217
    }
218

    
219
///////////////////////////////////////////////////////////////////////////////////////////////////
220

    
221
  private void setText()
222
    {
223
    String text = mName.name();
224

    
225
    if( mSta1 !=null )
226
      {
227
      float f1 = ((int)(mSta1.getX()*100))/100.0f;
228
      text += " "+f1;
229
      }
230

    
231
    if( mSta2 !=null )
232
      {
233
      float f1 = ((int)(mSta2.getX()*100))/100.0f;
234
      float f2 = ((int)(mSta2.getY()*100))/100.0f;
235
      text += " ("+f1+","+f2+")";
236
      }
237

    
238
    if( mSta3 !=null )
239
      {
240
      float f1 = ((int)(mSta3.getX()*100))/100.0f;
241
      float f2 = ((int)(mSta3.getY()*100))/100.0f;
242
      float f3 = ((int)(mSta3.getZ()*100))/100.0f;
243
      text += " ("+f1+","+f2+","+f3+")";
244
      }
245

    
246
    if( mSta4 !=null )
247
      {
248
      float f1 = ((int)(mSta4.getX()*100))/100.0f;
249
      float f2 = ((int)(mSta4.getY()*100))/100.0f;
250
      float f3 = ((int)(mSta4.getZ()*100))/100.0f;
251
      float f4 = ((int)(mSta4.getW()*100))/100.0f;
252
      text += " ("+f1+","+f2+","+f3+","+f4+")";
253
      }
254

    
255
    if( mSta5 !=null )
256
      {
257
      float f1 = ((int)(mSta5.getX()*100))/100.0f;
258
      float f2 = ((int)(mSta5.getY()*100))/100.0f;
259
      float f3 = ((int)(mSta5.getZ()*100))/100.0f;
260
      float f4 = ((int)(mSta5.getW()*100))/100.0f;
261
      float f5 = ((int)(mSta5.getV()*100))/100.0f;
262
      text += " ("+f1+","+f2+","+f3+","+f4+","+f5+")";
263
      }
264

    
265
    mText.setText(text);
266
    }
267

    
268
///////////////////////////////////////////////////////////////////////////////////////////////////
269

    
270
  private void fillCenterStatics()
271
    {
272
    Matrix3DActivity act = mAct.get();
273

    
274
    float x = (mInterCenter[0]*0.012f - 0.1f)*act.getWidth();
275
    float y = (mInterCenter[1]*0.012f - 0.1f)*act.getHeight();
276
    float z = (mInterCenter[2]*0.012f - 0.1f)*act.getDepth();
277

    
278
    mCenterSta.set(x,y,z);
279
    }
280

    
281
///////////////////////////////////////////////////////////////////////////////////////////////////
282

    
283
  private void setDefaultCenterInter()
284
    {
285
    mInterCenter[0] = 50;
286
    mInterCenter[1] = 50;
287
    mInterCenter[2] = 50;
288
    }
289

    
290
///////////////////////////////////////////////////////////////////////////////////////////////////
291

    
292
  private void setCenterText()
293
    {
294
    int f0 = (int)mCenterSta.getX();
295
    int f1 = (int)mCenterSta.getY();
296
    int f2 = (int)mCenterSta.getZ();
297

    
298
    mTextCenter.setText("center ("+f0+","+f1+","+f2+")");
299
    }
300

    
301
///////////////////////////////////////////////////////////////////////////////////////////////////
302

    
303
  private void fillRegionStatics()
304
    {
305
    Matrix3DActivity act = mAct.get();
306

    
307
    float factorX = act.getWidth() / 100.0f;
308
    float factorY = act.getHeight()/ 100.0f;
309

    
310
    int deduct = (mName.getType() == EffectTypes.VERTEX ? 50:0);
311

    
312
    float  x = (mInterRegion[0]-deduct)*factorX;
313
    float  y = (mInterRegion[1]-deduct)*factorY;
314
    float rx =  mInterRegion[2]        *factorX;
315
    float ry =  mInterRegion[3]        *factorY;
316

    
317
    mRegionSta.set(x,y,rx,ry);
318
    }
319

    
320
///////////////////////////////////////////////////////////////////////////////////////////////////
321

    
322
  private void setDefaultRegionInter()
323
    {
324
    mInterRegion[0] = 50;
325
    mInterRegion[1] = 50;
326
    mInterRegion[2] = 50;
327
    mInterRegion[3] = 50;
328
    }
329

    
330
///////////////////////////////////////////////////////////////////////////////////////////////////
331

    
332
  private void setRegionText()
333
    {
334
    int f0 = (int)mRegionSta.getX();
335
    int f1 = (int)mRegionSta.getY();
336
    int f2 = (int)mRegionSta.getZ();
337
    int f3 = (int)mRegionSta.getW();
338

    
339
    mTextRegion.setText("region ("+f0+","+f1+","+f2+","+f3+")");
340
    }
341

    
342
///////////////////////////////////////////////////////////////////////////////////////////////////
343

    
344
  Matrix3DEffect(EffectNames name, Matrix3DActivity act)
345
    {
346
    mAct = new WeakReference<>(act);
347
    mName = name;
348

    
349
    mDyn1 = null;
350
    mDyn2 = null;
351
    mDyn3 = null;
352
    mDyn4 = null;
353
    mDyn5 = null;
354
    mSta1 = null;
355
    mSta2 = null;
356
    mSta3 = null;
357
    mSta4 = null;
358
    mSta5 = null;
359

    
360
    mDimension = mName.getDimension();
361

    
362
    switch(mDimension)
363
      {
364
      case 1 : mDyn1 = new Dynamic1D();
365
               mSta1 = new Static1D(0);
366
               mDyn1.add(mSta1);
367
               break;
368
      case 2 : mDyn2 = new Dynamic2D();
369
               mSta2 = new Static2D(0,0);
370
               mDyn2.add(mSta2);
371
               break;
372
      case 3 : mDyn3 = new Dynamic3D();
373
               mSta3 = new Static3D(0,0,0);
374
               mDyn3.add(mSta3);
375
               break;
376
      case 4 : if( mName == EffectNames.ROTATE || mName == EffectNames.QUATERNION )
377
                 {
378
                 mDyn4 = new Dynamic4D();
379
                 mSta4 = new Static4D(0,0,0,0);
380
                 mDyn4.add(mSta4);
381
                 }
382
               else
383
                 {
384
                 mDyn3 = new Dynamic3D();
385
                 mSta3 = new Static3D(0,0,0);
386
                 mDyn3.add(mSta3);
387
                 mDyn1 = new Dynamic1D();
388
                 mSta1 = new Static1D(0);
389
                 mDyn1.add(mSta1);
390
                 }
391
               break;
392
      case 5 : mDyn5 = new Dynamic5D();
393
               mSta5 = new Static5D(0,0,0,0,0);
394
               mDyn5.add(mSta5);
395
               break;
396
      default: throw new RuntimeException("unsupported effect");
397
      }
398

    
399
    mInter = new int[mDimension];
400
    mSeekID= new int[mDimension];
401

    
402
    mInterRegion = new int[4];
403
    mSeekRegionID= new int[4];
404
    mRegionDyn   = new Dynamic4D();
405
    mRegionSta   = new Static4D(0,0,0,0);
406
    mRegionDyn.add(mRegionSta);
407

    
408
    mInterCenter = new int[3];
409
    mSeekCenterID= new int[3];
410
    mCenterDyn   = new Dynamic3D();
411
    mCenterSta   = new Static3D(0,0,0);
412
    mCenterDyn.add(mCenterSta);
413

    
414
    mButton = null;
415
    mEffect = null;
416
    mCenter = null;
417
    mRegion = null;
418
    }
419

    
420
///////////////////////////////////////////////////////////////////////////////////////////////////
421

    
422
  View createView()
423
    {
424
    SeekBar[] seek = new SeekBar[mDimension];
425

    
426
    Matrix3DActivity act = mAct.get();
427

    
428
    switch(mDimension)
429
      {
430
      case 1 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect1d, null);
431
               mText      = (TextView)mEffect.findViewById(R.id.effect1dText);
432
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect1dbar1);
433
               mSeekID[0] = seek[0].getId();
434
               mButton    = mEffect.findViewById(R.id.button1dRemove);
435
               break;
436
      case 2 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect2d, null);
437
               mText      = (TextView)mEffect.findViewById(R.id.effect2dText);
438
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect2dbar1);
439
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect2dbar2);
440
               mSeekID[0] = seek[0].getId();
441
               mSeekID[1] = seek[1].getId();
442
               mButton    = mEffect.findViewById(R.id.button2dRemove);
443
               break;
444
      case 3 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect3d, null);
445
               mText      = (TextView)mEffect.findViewById(R.id.effect3dText);
446
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar1);
447
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar2);
448
               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect3dbar3);
449
               mSeekID[0] = seek[0].getId();
450
               mSeekID[1] = seek[1].getId();
451
               mSeekID[2] = seek[2].getId();
452
               mButton    = mEffect.findViewById(R.id.button3dRemove);
453
               break;
454
      case 4 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect4d, null);
455
               mText      = (TextView)mEffect.findViewById(R.id.effect4dText);
456
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar1);
457
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar2);
458
               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar3);
459
               seek[3]    = (SeekBar)mEffect.findViewById(R.id.effect4dbar4);
460
               mSeekID[0] = seek[0].getId();
461
               mSeekID[1] = seek[1].getId();
462
               mSeekID[2] = seek[2].getId();
463
               mSeekID[3] = seek[3].getId();
464
               mButton    = mEffect.findViewById(R.id.button4dRemove);
465
               break;
466
      case 5 : mEffect    = act.getLayoutInflater().inflate(R.layout.effect5d, null);
467
               mText      = (TextView)mEffect.findViewById(R.id.effect5dText);
468
               seek[0]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar1);
469
               seek[1]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar2);
470
               seek[2]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar3);
471
               seek[3]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar4);
472
               seek[4]    = (SeekBar)mEffect.findViewById(R.id.effect5dbar5);
473
               mSeekID[0] = seek[0].getId();
474
               mSeekID[1] = seek[1].getId();
475
               mSeekID[2] = seek[2].getId();
476
               mSeekID[3] = seek[3].getId();
477
               mSeekID[4] = seek[4].getId();
478
               mButton    = mEffect.findViewById(R.id.button5dRemove);
479
               break;
480
      default: android.util.Log.e("Matrix3DEffect", "dimension "+mDimension+" not supported!");
481
               return null;
482
      }
483

    
484
    setDefaultInter();
485

    
486
    for(int i=0; i<mDimension; i++)
487
      {
488
      seek[i].setOnSeekBarChangeListener(this);
489
      seek[i].setProgress( mInter[i] );
490
      }
491

    
492
    Matrix3DActivity.setSupportsRegion(mName.supportsRegion());
493
    Matrix3DActivity.setSupportsCenter(mName.supportsCenter());
494

    
495
    return mEffect;
496
    }
497

    
498
///////////////////////////////////////////////////////////////////////////////////////////////////
499

    
500
  View createRegion()
501
    {
502
    Matrix3DActivity act = mAct.get();
503

    
504
    mRegion = act.getLayoutInflater().inflate(R.layout.effectregion, null);
505

    
506
    SeekBar[] seek = new SeekBar[4];
507

    
508
    seek[0] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarX );
509
    seek[1] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarY );
510
    seek[2] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRX);
511
    seek[3] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRY);
512

    
513
    mSeekRegionID[0] = seek[0].getId();
514
    mSeekRegionID[1] = seek[1].getId();
515
    mSeekRegionID[2] = seek[2].getId();
516
    mSeekRegionID[3] = seek[3].getId();
517

    
518
    mTextRegion = (TextView)mRegion.findViewById(R.id.effectRegionText);
519

    
520
    setDefaultRegionInter();
521

    
522
    for(int i=0; i<4; i++)
523
      {
524
      seek[i].setOnSeekBarChangeListener(this);
525
      seek[i].setProgress( mInterRegion[i] );
526
      }
527

    
528
    act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
529

    
530
    return mRegion;
531
    }
532

    
533
///////////////////////////////////////////////////////////////////////////////////////////////////
534

    
535
  View createCenter()
536
    {
537
    Matrix3DActivity act = mAct.get();
538

    
539
    mCenter = act.getLayoutInflater().inflate(R.layout.effectcenter, null);
540

    
541
    SeekBar[] seek = new SeekBar[3];
542

    
543
    seek[0] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarX );
544
    seek[1] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarY );
545
    seek[2] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarZ );
546

    
547
    mSeekCenterID[0] = seek[0].getId();
548
    mSeekCenterID[1] = seek[1].getId();
549
    mSeekCenterID[2] = seek[2].getId();
550

    
551
    mTextCenter = (TextView)mCenter.findViewById(R.id.effectCenterText);
552

    
553
    setDefaultCenterInter();
554

    
555
    for(int i=0; i<3; i++)
556
      {
557
      seek[i].setOnSeekBarChangeListener(this);
558
      seek[i].setProgress( mInterCenter[i] );
559
      }
560

    
561
    act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
562

    
563
    return mCenter;
564
    }
565

    
566
///////////////////////////////////////////////////////////////////////////////////////////////////
567

    
568
  public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
569
    {
570
    if ( mDimension>=1 && bar.getId()==mSeekID[0] )
571
      {
572
      mInter[0] = progress;
573
      fillStatics();
574
      setText();
575
      }
576
    if ( mDimension>=2 && bar.getId()==mSeekID[1] )
577
      {
578
      mInter[1] = progress;
579
      fillStatics();
580
      setText();
581
      }
582
    if ( mDimension>=3 && bar.getId()==mSeekID[2] )
583
      {
584
      mInter[2] = progress;
585
      fillStatics();
586
      setText();
587
      }
588
    if ( mDimension>=4 && bar.getId()==mSeekID[3] )
589
      {
590
      mInter[3] = progress;
591
      fillStatics();
592
      setText();
593
      }
594
    if ( mDimension>=5 && bar.getId()==mSeekID[4] )
595
      {
596
      mInter[4] = progress;
597
      fillStatics();
598
      setText();
599
      }
600

    
601
    if( bar.getId() == mSeekRegionID[0] )
602
      {
603
      mInterRegion[0] = progress;
604
      fillRegionStatics();
605
      setRegionText();
606
      }
607
    if( bar.getId() == mSeekRegionID[1] )
608
      {
609
      mInterRegion[1] = progress;
610
      fillRegionStatics();
611
      setRegionText();
612
      }
613
    if( bar.getId() == mSeekRegionID[2] )
614
      {
615
      mInterRegion[2] = progress;
616
      fillRegionStatics();
617
      setRegionText();
618
      }
619
    if( bar.getId() == mSeekRegionID[3] )
620
      {
621
      mInterRegion[3] = progress;
622
      fillRegionStatics();
623
      setRegionText();
624
      }
625

    
626
    if( bar.getId() == mSeekCenterID[0] )
627
      {
628
      mInterCenter[0] = progress;
629
      fillCenterStatics();
630
      setCenterText();
631
      }
632
    if( bar.getId() == mSeekCenterID[1] )
633
      {
634
      mInterCenter[1] = progress;
635
      fillCenterStatics();
636
      setCenterText();
637
      }
638
    if( bar.getId() == mSeekCenterID[2] )
639
      {
640
      mInterCenter[2] = progress;
641
      fillCenterStatics();
642
      setCenterText();
643
      }
644

    
645
    if( fromUser )
646
      {
647
      Matrix3DActivity.setSupportsRegion(mName.supportsRegion());
648
      Matrix3DActivity.setSupportsCenter(mName.supportsCenter());
649

    
650
      Matrix3DActivity act = mAct.get();
651

    
652
      act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
653
      act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
654
      }
655
    }
656

    
657
///////////////////////////////////////////////////////////////////////////////////////////////////
658

    
659
  boolean thisView(View v)
660
    {
661
    return v==mButton;
662
    }
663

    
664
///////////////////////////////////////////////////////////////////////////////////////////////////
665

    
666
  public long getId()
667
    {
668
    return mId;
669
    }
670

    
671
///////////////////////////////////////////////////////////////////////////////////////////////////
672

    
673
  public View getEffect()
674
    {
675
    return mEffect;
676
    }
677

    
678
///////////////////////////////////////////////////////////////////////////////////////////////////
679

    
680
  public View getRegion()
681
    {
682
    return mRegion;
683
    }
684

    
685
///////////////////////////////////////////////////////////////////////////////////////////////////
686

    
687
  public View getCenter()
688
    {
689
    return mCenter;
690
    }
691

    
692
///////////////////////////////////////////////////////////////////////////////////////////////////
693

    
694
  public void onStartTrackingTouch(SeekBar bar) { }
695

    
696
///////////////////////////////////////////////////////////////////////////////////////////////////
697

    
698
  public void onStopTrackingTouch(SeekBar bar)  { }
699
  }
(2-2/4)