Project

General

Profile

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

examples / src / main / java / org / distorted / examples / effects3d / Effects3DEffect.java @ 98c04ab8

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.effects3d;
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 Effects3DEffect implements SeekBar.OnSeekBarChangeListener
46
  {
47
  private WeakReference<Effects3DActivity> 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 ? 0.18f : 0.018f)*(mInter[0]-50) + 1;
142
                              float ys = (mInter[1]>50 ? 0.18f : 0.018f)*(mInter[1]-50) + 1;
143
                              float zs = (mInter[2]>50 ? 0.18f : 0.018f)*(mInter[2]-50) + 1;
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 ) mInter[1]= 100;
209
    }
210

    
211
///////////////////////////////////////////////////////////////////////////////////////////////////
212

    
213
  private void setText()
214
    {
215
    String text = mName.name();
216

    
217
    if( mSta1 !=null )
218
      {
219
      float f1 = ((int)(mSta1.getX()*100))/100.0f;
220
      text += " "+f1;
221
      }
222

    
223
    if( mSta2 !=null )
224
      {
225
      float f1 = ((int)(mSta2.getX()*100))/100.0f;
226
      float f2 = ((int)(mSta2.getY()*100))/100.0f;
227
      text += " ("+f1+","+f2+")";
228
      }
229

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

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

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

    
257
    mText.setText(text);
258
    }
259

    
260
///////////////////////////////////////////////////////////////////////////////////////////////////
261

    
262
  private void fillCenterStatics()
263
    {
264
    Effects3DActivity act = mAct.get();
265

    
266
    float x = (mInterCenter[0]*0.012f - 0.1f)*act.getWidth();
267
    float y = (mInterCenter[1]*0.012f - 0.1f)*act.getHeight();
268
    float z = (mInterCenter[2]*0.012f - 0.1f)*act.getDepth();
269

    
270
    mCenterSta.set(x,y,z);
271
    }
272

    
273
///////////////////////////////////////////////////////////////////////////////////////////////////
274

    
275
  private void setDefaultCenterInter()
276
    {
277
    mInterCenter[0] = 50;
278
    mInterCenter[1] = 50;
279
    mInterCenter[2] = 50;
280
    }
281

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

    
284
  private void setCenterText()
285
    {
286
    int f0 = (int)mCenterSta.getX();
287
    int f1 = (int)mCenterSta.getY();
288
    int f2 = (int)mCenterSta.getZ();
289

    
290
    mTextCenter.setText("center ("+f0+","+f1+","+f2+")");
291
    }
292

    
293
///////////////////////////////////////////////////////////////////////////////////////////////////
294

    
295
  private void fillRegionStatics()
296
    {
297
    Effects3DActivity act = mAct.get();
298

    
299
    float factorX = act.getWidth() / 100.0f;
300
    float factorY = act.getHeight()/ 100.0f;
301

    
302
    int deduct = (mName.getType() == EffectTypes.VERTEX ? 50:0);
303

    
304
    float  x = (mInterRegion[0]-deduct)*factorX;
305
    float  y = (mInterRegion[1]-deduct)*factorY;
306
    float rx =  mInterRegion[2]        *factorX;
307
    float ry =  mInterRegion[3]        *factorY;
308

    
309
    mRegionSta.set(x,y,rx,ry);
310
    }
311

    
312
///////////////////////////////////////////////////////////////////////////////////////////////////
313

    
314
  private void setDefaultRegionInter()
315
    {
316
    mInterRegion[0] = 50;
317
    mInterRegion[1] = 50;
318
    mInterRegion[2] = 50;
319
    mInterRegion[3] = 50;
320
    }
321

    
322
///////////////////////////////////////////////////////////////////////////////////////////////////
323

    
324
  private void setRegionText()
325
    {
326
    int f0 = (int)mRegionSta.getX();
327
    int f1 = (int)mRegionSta.getY();
328
    int f2 = (int)mRegionSta.getZ();
329
    int f3 = (int)mRegionSta.getW();
330

    
331
    mTextRegion.setText("region ("+f0+","+f1+","+f2+","+f3+")");
332
    }
333

    
334
///////////////////////////////////////////////////////////////////////////////////////////////////
335

    
336
  Effects3DEffect(EffectNames name, Effects3DActivity act)
337
    {
338
    mAct = new WeakReference<>(act);
339
    mName = name;
340

    
341
    mDyn1 = null;
342
    mDyn2 = null;
343
    mDyn3 = null;
344
    mDyn4 = null;
345
    mDyn5 = null;
346
    mSta1 = null;
347
    mSta2 = null;
348
    mSta3 = null;
349
    mSta4 = null;
350
    mSta5 = null;
351

    
352
    mDimension = mName.getDimension();
353

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

    
391
    mInter = new int[mDimension];
392
    mSeekID= new int[mDimension];
393

    
394
    mInterRegion = new int[4];
395
    mSeekRegionID= new int[4];
396
    mRegionDyn   = new Dynamic4D();
397
    mRegionSta   = new Static4D(0,0,0,0);
398
    mRegionDyn.add(mRegionSta);
399

    
400
    mInterCenter = new int[3];
401
    mSeekCenterID= new int[3];
402
    mCenterDyn   = new Dynamic3D();
403
    mCenterSta   = new Static3D(0,0,0);
404
    mCenterDyn.add(mCenterSta);
405

    
406
    mButton = null;
407
    mEffect = null;
408
    mCenter = null;
409
    mRegion = null;
410
    }
411

    
412
///////////////////////////////////////////////////////////////////////////////////////////////////
413

    
414
  View createView()
415
    {
416
    SeekBar[] seek = new SeekBar[mDimension];
417

    
418
    Effects3DActivity act = mAct.get();
419

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

    
476
    setDefaultInter();
477

    
478
    for(int i=0; i<mDimension; i++)
479
      {
480
      seek[i].setOnSeekBarChangeListener(this);
481
      seek[i].setProgress( mInter[i] );
482
      }
483

    
484
    act.setSupportsCenter(mName.supportsCenter());
485
    act.setSupportsRegion(mName.supportsRegion());
486

    
487
    return mEffect;
488
    }
489

    
490
///////////////////////////////////////////////////////////////////////////////////////////////////
491

    
492
  View createRegion()
493
    {
494
    Effects3DActivity act = mAct.get();
495

    
496
    mRegion = act.getLayoutInflater().inflate(R.layout.effectregion, null);
497

    
498
    SeekBar[] seek = new SeekBar[4];
499

    
500
    seek[0] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarX );
501
    seek[1] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarY );
502
    seek[2] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRX);
503
    seek[3] = (SeekBar)mRegion.findViewById(R.id.effectRegionBarRY);
504

    
505
    mSeekRegionID[0] = seek[0].getId();
506
    mSeekRegionID[1] = seek[1].getId();
507
    mSeekRegionID[2] = seek[2].getId();
508
    mSeekRegionID[3] = seek[3].getId();
509

    
510
    mTextRegion = (TextView)mRegion.findViewById(R.id.effectRegionText);
511

    
512
    setDefaultRegionInter();
513

    
514
    for(int i=0; i<4; i++)
515
      {
516
      seek[i].setOnSeekBarChangeListener(this);
517
      seek[i].setProgress( mInterRegion[i] );
518
      }
519

    
520
    act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
521

    
522
    return mRegion;
523
    }
524

    
525
///////////////////////////////////////////////////////////////////////////////////////////////////
526

    
527
  View createCenter()
528
    {
529
    Effects3DActivity act = mAct.get();
530

    
531
    mCenter = act.getLayoutInflater().inflate(R.layout.effectcenter, null);
532

    
533
    SeekBar[] seek = new SeekBar[3];
534

    
535
    seek[0] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarX );
536
    seek[1] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarY );
537
    seek[2] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarZ );
538

    
539
    mSeekCenterID[0] = seek[0].getId();
540
    mSeekCenterID[1] = seek[1].getId();
541
    mSeekCenterID[2] = seek[2].getId();
542

    
543
    mTextCenter = (TextView)mCenter.findViewById(R.id.effectCenterText);
544

    
545
    setDefaultCenterInter();
546

    
547
    for(int i=0; i<3; i++)
548
      {
549
      seek[i].setOnSeekBarChangeListener(this);
550
      seek[i].setProgress( mInterCenter[i] );
551
      }
552

    
553
    act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
554

    
555
    return mCenter;
556
    }
557

    
558
///////////////////////////////////////////////////////////////////////////////////////////////////
559

    
560
  public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
561
    {
562
    if ( mDimension>=1 && bar.getId()==mSeekID[0] )
563
      {
564
      mInter[0] = progress;
565
      fillStatics();
566
      setText();
567
      }
568
    if ( mDimension>=2 && bar.getId()==mSeekID[1] )
569
      {
570
      mInter[1] = progress;
571
      fillStatics();
572
      setText();
573
      }
574
    if ( mDimension>=3 && bar.getId()==mSeekID[2] )
575
      {
576
      mInter[2] = progress;
577
      fillStatics();
578
      setText();
579
      }
580
    if ( mDimension>=4 && bar.getId()==mSeekID[3] )
581
      {
582
      mInter[3] = progress;
583
      fillStatics();
584
      setText();
585
      }
586
    if ( mDimension>=5 && bar.getId()==mSeekID[4] )
587
      {
588
      mInter[4] = progress;
589
      fillStatics();
590
      setText();
591
      }
592

    
593
    if( bar.getId() == mSeekRegionID[0] )
594
      {
595
      mInterRegion[0] = progress;
596
      fillRegionStatics();
597
      setRegionText();
598
      }
599
    if( bar.getId() == mSeekRegionID[1] )
600
      {
601
      mInterRegion[1] = progress;
602
      fillRegionStatics();
603
      setRegionText();
604
      }
605
    if( bar.getId() == mSeekRegionID[2] )
606
      {
607
      mInterRegion[2] = progress;
608
      fillRegionStatics();
609
      setRegionText();
610
      }
611
    if( bar.getId() == mSeekRegionID[3] )
612
      {
613
      mInterRegion[3] = progress;
614
      fillRegionStatics();
615
      setRegionText();
616
      }
617

    
618
    if( bar.getId() == mSeekCenterID[0] )
619
      {
620
      mInterCenter[0] = progress;
621
      fillCenterStatics();
622
      setCenterText();
623
      }
624
    if( bar.getId() == mSeekCenterID[1] )
625
      {
626
      mInterCenter[1] = progress;
627
      fillCenterStatics();
628
      setCenterText();
629
      }
630
    if( bar.getId() == mSeekCenterID[2] )
631
      {
632
      mInterCenter[2] = progress;
633
      fillCenterStatics();
634
      setCenterText();
635
      }
636

    
637
    if( fromUser )
638
      {
639
      Effects3DActivity act = mAct.get();
640
      Effects3DSurfaceView view = (Effects3DSurfaceView)act.findViewById(R.id.effects3dSurfaceView);
641
      view.getRenderer().showRegionAndCenter(mName.getType()==EffectTypes.VERTEX);
642

    
643
      act.setSupportsCenter(mName.supportsCenter());
644
      act.setSupportsRegion(mName.supportsRegion());
645
      act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
646
      act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
647
      }
648
    }
649

    
650
///////////////////////////////////////////////////////////////////////////////////////////////////
651

    
652
  boolean thisView(View v)
653
    {
654
    return v==mButton;
655
    }
656

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

    
659
  public long getId()
660
    {
661
    return mId;
662
    }
663

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

    
666
  public View getEffect()
667
    {
668
    return mEffect;
669
    }
670

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

    
673
  public View getRegion()
674
    {
675
    return mRegion;
676
    }
677

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

    
680
  public View getCenter()
681
    {
682
    return mCenter;
683
    }
684

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

    
687
  public void onStartTrackingTouch(SeekBar bar) { }
688

    
689
///////////////////////////////////////////////////////////////////////////////////////////////////
690

    
691
  public void onStopTrackingTouch(SeekBar bar)  { }
692
  }
(2-2/4)