Project

General

Profile

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

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

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.DistortedEffects;
28
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
  private Dynamic4D mDyn4;
63
  private Dynamic5D mDyn5;
64
  private Static1D  mSta1;
65
  private Static2D  mSta2;
66
  private Static3D  mSta3;
67
  private Static4D  mSta4;
68
  private Static5D  mSta5;
69
  private Dynamic4D mRegionDyn;
70
  private Static4D  mRegionSta;
71
  private Dynamic3D mCenterDyn;
72
  private Static3D  mCenterSta;
73

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

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

    
80
  void apply(DistortedEffects effects)
81
    {
82
    switch(mName)
83
      {
84
      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

    
90
      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

    
97
      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

    
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
      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
                              break;
125
      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
                              break;
134
      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
                              mSta3.set(xm,ym,zm);
140
                              break;
141
      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
                              mSta3.set(xs,ys,zs);
145
                              break;
146
      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
                              break;
151

    
152
      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
      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
      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

    
208
    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
    }
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
    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
    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
    float z = (mInterCenter[2]*0.012f - 0.1f)*act.getDepth();
278

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

    
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283

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

    
291
///////////////////////////////////////////////////////////////////////////////////////////////////
292

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

    
299
    mTextCenter.setText("center ("+f0+","+f1+","+f2+")");
300
    }
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
    mDyn4 = null;
354
    mDyn5 = null;
355
    mSta1 = null;
356
    mSta2 = null;
357
    mSta3 = null;
358
    mSta4 = null;
359
    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
      case 4 : if( mName == EffectNames.ROTATE || mName == EffectNames.QUATERNION )
378
                 {
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
               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
    mInterCenter = new int[3];
410
    mSeekCenterID= new int[3];
411
    mCenterDyn   = new Dynamic3D();
412
    mCenterSta   = new Static3D(0,0,0);
413
    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
    SeekBar[] seek = new SeekBar[3];
543

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

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

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

    
554
    setDefaultCenterInter();
555

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

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

    
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
    if( bar.getId() == mSeekCenterID[2] )
640
      {
641
      mInterCenter[2] = progress;
642
      fillCenterStatics();
643
      setCenterText();
644
      }
645

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

    
651
      Matrix3DActivity act = mAct.get();
652

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

    
658
///////////////////////////////////////////////////////////////////////////////////////////////////
659

    
660
  boolean thisView(View v)
661
    {
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
  }
(2-2/4)