Project

General

Profile

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

examples / src / main / java / org / distorted / examples / effects3d / Effects3DActivity.java @ 2890c5df

1 08f92d82 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 76a81b6a Leszek Koltunski
package org.distorted.examples.effects3d;
21 08f92d82 Leszek Koltunski
22
import android.app.Activity;
23 9167cfd4 Leszek Koltunski
import android.graphics.Bitmap;
24
import android.graphics.BitmapFactory;
25
import android.graphics.Canvas;
26
import android.graphics.Paint;
27 08f92d82 Leszek Koltunski
import android.opengl.GLSurfaceView;
28
import android.os.Bundle;
29 d40cfeb2 Leszek Koltunski
import android.view.Gravity;
30 08f92d82 Leszek Koltunski
import android.view.View;
31 50ac40a6 Leszek Koltunski
import android.widget.AdapterView;
32
import android.widget.ArrayAdapter;
33 d40cfeb2 Leszek Koltunski
import android.widget.Button;
34 0ab55f0c Leszek Koltunski
import android.widget.CheckBox;
35 08f92d82 Leszek Koltunski
import android.widget.LinearLayout;
36 d40cfeb2 Leszek Koltunski
import android.widget.NumberPicker;
37 50ac40a6 Leszek Koltunski
import android.widget.Spinner;
38 d40cfeb2 Leszek Koltunski
import android.widget.TableRow;
39 08f92d82 Leszek Koltunski
40
import org.distorted.examples.R;
41 01782e85 Leszek Koltunski
import org.distorted.library.main.Distorted;
42
import org.distorted.library.main.MeshCubes;
43
import org.distorted.library.main.MeshFlat;
44
import org.distorted.library.main.MeshObject;
45
import org.distorted.library.main.DistortedTexture;
46
import org.distorted.library.main.DistortedEffects;
47 56cbe1cf Leszek Koltunski
48 9167cfd4 Leszek Koltunski
import java.io.IOException;
49
import java.io.InputStream;
50 56cbe1cf Leszek Koltunski
import java.util.ArrayList;
51 08f92d82 Leszek Koltunski
52
///////////////////////////////////////////////////////////////////////////////////////////////////
53
54 76a81b6a Leszek Koltunski
public class Effects3DActivity extends Activity
55 bfcf419a Leszek Koltunski
                               implements View.OnClickListener,
56
                                          AdapterView.OnItemSelectedListener
57 d40cfeb2 Leszek Koltunski
  {
58 50ac40a6 Leszek Koltunski
  private static final int COLOR_OFF = 0xffffe81f;
59
  private static final int COLOR_ON  = 0xff0000ff;
60 bfcf419a Leszek Koltunski
  private static final int COLOR_INAC= 0xff00ff00;
61 50ac40a6 Leszek Koltunski
62 56cbe1cf Leszek Koltunski
  private int mNumCols = 10;
63
  private int mNumRows = 10;
64 b3b2c6cf leszek
  private int mNumSlic =  1;
65 2e755580 Leszek Koltunski
  private boolean mGridInitialized;
66 b3b2c6cf leszek
  private NumberPicker mColsPicker, mRowsPicker, mSlicPicker;
67 50ac40a6 Leszek Koltunski
  private boolean[] mShape;
68 f6d884d5 Leszek Koltunski
  private DistortedTexture mTexture;
69 d04a4886 Leszek Koltunski
  private DistortedEffects mEffects;
70 b01acdaf Leszek Koltunski
  private MeshObject mMesh;
71 bcc8e016 Leszek Koltunski
  private int mObjectType;
72 cdc515b9 Leszek Koltunski
  private int mBitmapID;
73
  private Bitmap mBitmap;
74 bfcf419a Leszek Koltunski
  private LinearLayout mLay;
75 d40cfeb2 Leszek Koltunski
76 d04a4886 Leszek Koltunski
  private ArrayList<Effects3DEffect> mList;
77 56cbe1cf Leszek Koltunski
  private int mEffectAdd;
78 334c13fa Leszek Koltunski
  private float mCenterX, mCenterY, mCenterZ;
79 6f779cd4 Leszek Koltunski
  private float mRegionX, mRegionY, mRegionR;
80 50ac40a6 Leszek Koltunski
81 8fd9f5fa Leszek Koltunski
  private EffectNames[] mEffectNames;
82 24991bc2 Leszek Koltunski
83 47833473 Leszek Koltunski
  private static boolean mSupportsRegion;
84 4d5b37fe Leszek Koltunski
  private static boolean mSupportsCenter;
85 24991bc2 Leszek Koltunski
86 0ab55f0c Leszek Koltunski
  private static boolean mShowCenter = true;
87
  private static boolean mShowRegion = true;
88
  private static boolean mShowNormal = true;
89
90 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
91 56cbe1cf Leszek Koltunski
92 d40cfeb2 Leszek Koltunski
  @Override
93
  protected void onCreate(Bundle savedState)
94
    {
95
    super.onCreate(savedState);
96
97 d04a4886 Leszek Koltunski
    mList = new ArrayList<>();
98 56cbe1cf Leszek Koltunski
99 8fd9f5fa Leszek Koltunski
    createEffectNames();
100
101 50ac40a6 Leszek Koltunski
    setContentView(R.layout.objectpickerlayout);
102 d40cfeb2 Leszek Koltunski
103 bfcf419a Leszek Koltunski
    mLay = (LinearLayout)findViewById(R.id.objectpicker_buttongrid);
104
105 50ac40a6 Leszek Koltunski
    mColsPicker = (NumberPicker)findViewById(R.id.objectpicker_cols);
106
    mRowsPicker = (NumberPicker)findViewById(R.id.objectpicker_rows);
107 b3b2c6cf leszek
    mSlicPicker = (NumberPicker)findViewById(R.id.objectpicker_slices);
108 d40cfeb2 Leszek Koltunski
109 9758b1ec Leszek Koltunski
    mColsPicker.setMaxValue(40);
110 d40cfeb2 Leszek Koltunski
    mColsPicker.setMinValue( 0);
111 9758b1ec Leszek Koltunski
    mRowsPicker.setMaxValue(40);
112 d40cfeb2 Leszek Koltunski
    mRowsPicker.setMinValue( 0);
113 b3b2c6cf leszek
    mSlicPicker.setMaxValue(40);
114
    mSlicPicker.setMinValue( 0);
115 d40cfeb2 Leszek Koltunski
116
    mColsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
117 bfcf419a Leszek Koltunski
         {
118
         @Override
119
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
120
           {
121
           setGrid();
122
           }
123
         });
124 d40cfeb2 Leszek Koltunski
125
    mRowsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
126 bfcf419a Leszek Koltunski
         {
127
         @Override
128
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
129
           {
130
           setGrid();
131
           }
132
         });
133 d40cfeb2 Leszek Koltunski
134 b3b2c6cf leszek
    mSlicPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
135
         {
136
         @Override
137
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
138
           {
139
           mNumSlic = mSlicPicker.getValue();
140
           }
141
         });
142
143 50ac40a6 Leszek Koltunski
    mObjectType = 0;
144 2e755580 Leszek Koltunski
    mGridInitialized = false;
145 d40cfeb2 Leszek Koltunski
146 50ac40a6 Leszek Koltunski
    Spinner typeSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerType);
147
    typeSpinner.setOnItemSelectedListener(this);
148 d40cfeb2 Leszek Koltunski
149 bfcf419a Leszek Koltunski
    String[] objectType = new String[] {"Mesh: Cubes", "Mesh: Flat"};
150 d40cfeb2 Leszek Koltunski
151 bcc8e016 Leszek Koltunski
    ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
152
    adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
153
    typeSpinner.setAdapter(adapterType);
154
155
    Spinner bitmapSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerBitmap);
156
    bitmapSpinner.setOnItemSelectedListener(this);
157
158 bfcf419a Leszek Koltunski
    String[] objectBitmap = new String[] { "Texture: Grid", "Texture: Girl", "Texture: Dog", "Texture: Cat",
159
                                           "Texture: Squares", "Texture: Bean", "Texture: Lisa" };
160 bcc8e016 Leszek Koltunski
161
    ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
162
    adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
163
    bitmapSpinner.setAdapter(adapterBitmap);
164 d40cfeb2 Leszek Koltunski
    }
165
166 8fd9f5fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
167
168
  private void createEffectNames()
169
    {
170 76a81b6a Leszek Koltunski
    EffectTypes type1 = EffectTypes.FRAGMENT;
171
    EffectTypes type2 = EffectTypes.VERTEX;
172
173 8fd9f5fa Leszek Koltunski
    EffectNames[] names = EffectNames.values();
174
175 76a81b6a Leszek Koltunski
    int numEffects=0;
176 8fd9f5fa Leszek Koltunski
177
    for(int i=0; i<names.length; i++)
178 76a81b6a Leszek Koltunski
      if( names[i].getType() == type1 || names[i].getType() == type2 ) numEffects++;
179 8fd9f5fa Leszek Koltunski
180 76a81b6a Leszek Koltunski
    mEffectNames = new EffectNames[numEffects];
181 8fd9f5fa Leszek Koltunski
182 76a81b6a Leszek Koltunski
    numEffects=0;
183 8fd9f5fa Leszek Koltunski
184
    for(int i=0; i<names.length; i++)
185 76a81b6a Leszek Koltunski
      if( names[i].getType() == type1 || names[i].getType() == type2 )
186 8fd9f5fa Leszek Koltunski
        {
187 76a81b6a Leszek Koltunski
        mEffectNames[numEffects++] = names[i];
188 8fd9f5fa Leszek Koltunski
        }
189
    }
190
191 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
192
193 50ac40a6 Leszek Koltunski
  private void setGrid()
194 d40cfeb2 Leszek Koltunski
    {
195 2e755580 Leszek Koltunski
    mGridInitialized = true;
196
197 bfcf419a Leszek Koltunski
    mNumCols = mColsPicker.getValue();
198
    mNumRows = mRowsPicker.getValue();
199 d40cfeb2 Leszek Koltunski
200 bfcf419a Leszek Koltunski
    int width = mLay.getWidth();
201
    int height= mLay.getHeight();
202 57ba16f3 Leszek Koltunski
    int w = mNumCols>0 ? (int)( 0.9f*width / mNumCols) : 0;
203
    int h = mNumRows>0 ? (int)( 0.9f*height/ mNumRows) : 0;
204 d40cfeb2 Leszek Koltunski
    int size= w<h ? w:h;
205 57ba16f3 Leszek Koltunski
    int pad = size<20 ? 1 : size/20;
206 d40cfeb2 Leszek Koltunski
207 bfcf419a Leszek Koltunski
    mLay.removeAllViews();
208 d40cfeb2 Leszek Koltunski
209
    mShape = new boolean[mNumRows*mNumCols];
210
211 56cbe1cf Leszek Koltunski
    TableRow.LayoutParams p = new TableRow.LayoutParams();
212 d40cfeb2 Leszek Koltunski
213
    p.rightMargin  = pad;
214
    p.leftMargin   = pad;
215
    p.topMargin    = pad;
216
    p.bottomMargin = pad;
217
    p.height       = size;
218
    p.width        = size;
219
220
    for (int rows=0; rows<mNumRows; rows++)
221 08f92d82 Leszek Koltunski
      {
222 d40cfeb2 Leszek Koltunski
      TableRow tr = new TableRow(this);
223
      tr.setGravity(Gravity.CENTER);
224
225
      for(int cols=0; cols<mNumCols; cols++)
226
        {
227
        Button b = new Button(this);
228
        b.setOnClickListener(this);
229
        b.setId(rows*mNumCols+cols);
230
        b.setLayoutParams(p);
231 bfcf419a Leszek Koltunski
        b.setBackgroundColor(mObjectType==1 ? COLOR_INAC : COLOR_ON);
232 d40cfeb2 Leszek Koltunski
        tr.addView(b, p);
233 bcc8e016 Leszek Koltunski
        mShape[rows*mNumCols+cols] = true;
234 d40cfeb2 Leszek Koltunski
        }
235
236 bfcf419a Leszek Koltunski
      mLay.addView(tr);
237 d40cfeb2 Leszek Koltunski
      }
238
    }
239
240 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
241
242 f6d884d5 Leszek Koltunski
  public DistortedTexture getTexture()
243 50ac40a6 Leszek Koltunski
    {
244 f6d884d5 Leszek Koltunski
    return mTexture;
245
    }
246
247
///////////////////////////////////////////////////////////////////////////////////////////////////
248
249 d04a4886 Leszek Koltunski
  public DistortedEffects getEffects()
250 f6d884d5 Leszek Koltunski
    {
251 d04a4886 Leszek Koltunski
    return mEffects;
252 50ac40a6 Leszek Koltunski
    }
253
254 e8b6aa95 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
255
256 7fca6741 Leszek Koltunski
  public MeshObject getMesh()
257 e8b6aa95 Leszek Koltunski
    {
258 b01acdaf Leszek Koltunski
    return mMesh;
259 e8b6aa95 Leszek Koltunski
    }
260
261 24991bc2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
262
263 f338550a leszek
  public void setSupportsRegion(boolean supports)
264 24991bc2 Leszek Koltunski
    {
265 98c04ab8 leszek
    mSupportsRegion = supports;
266 24991bc2 Leszek Koltunski
    }
267
268 76a81b6a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
269
270 f338550a leszek
  public void setSupportsCenter(boolean supports)
271 76a81b6a Leszek Koltunski
    {
272 98c04ab8 leszek
    mSupportsCenter = supports;
273 76a81b6a Leszek Koltunski
    }
274
275 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
276
277 9167cfd4 Leszek Koltunski
  public Bitmap getBitmap()
278 d40cfeb2 Leszek Koltunski
    {
279 cdc515b9 Leszek Koltunski
    if( mBitmap==null )
280 9167cfd4 Leszek Koltunski
      {
281 cdc515b9 Leszek Koltunski
      if( mBitmapID!=-1)
282 9167cfd4 Leszek Koltunski
        {
283 cdc515b9 Leszek Koltunski
        InputStream is = getResources().openRawResource(mBitmapID);
284
285 9167cfd4 Leszek Koltunski
        try
286
          {
287 cdc515b9 Leszek Koltunski
          mBitmap = BitmapFactory.decodeStream(is);
288
          }
289
        finally
290
          {
291
          try
292
            {
293
            is.close();
294
            }
295
          catch(IOException e) { }
296 9167cfd4 Leszek Koltunski
          }
297
        }
298 cdc515b9 Leszek Koltunski
      else
299
        {
300 0ab55f0c Leszek Koltunski
        final int W = 64*mNumCols;
301
        final int H = 64*mNumRows;
302 9167cfd4 Leszek Koltunski
303 cdc515b9 Leszek Koltunski
        Paint paint = new Paint();
304
        mBitmap = Bitmap.createBitmap(W,H, Bitmap.Config.ARGB_8888);
305
        Canvas canvas = new Canvas(mBitmap);
306 9167cfd4 Leszek Koltunski
307 cdc515b9 Leszek Koltunski
        paint.setAntiAlias(true);
308
        paint.setTextAlign(Paint.Align.CENTER);
309
        paint.setColor(0xff008800);
310
        paint.setStyle(Paint.Style.FILL);
311
        canvas.drawRect(0, 0, W, H, paint);
312
        paint.setColor(0xffffffff);
313 9167cfd4 Leszek Koltunski
314 0ab55f0c Leszek Koltunski
        for(int i=0; i<=mNumCols ; i++ ) canvas.drawRect(W*i/mNumCols-1, 0, W*i/mNumCols + 1, H, paint);
315
        for(int i=0; i<=mNumRows ; i++ ) canvas.drawRect( 0, H*i/mNumRows-1, W,  H*i/mNumRows+1, paint);
316 9167cfd4 Leszek Koltunski
        }
317
      }
318
319 cdc515b9 Leszek Koltunski
    return mBitmap;
320 d40cfeb2 Leszek Koltunski
    }
321
322
///////////////////////////////////////////////////////////////////////////////////////////////////
323
324 56cbe1cf Leszek Koltunski
  public void onClick(View view)
325 d40cfeb2 Leszek Koltunski
    {
326 bfcf419a Leszek Koltunski
    if( mObjectType!=1 )
327
      {
328
      Button tmp = (Button)view;
329
      int id = tmp.getId();
330
      mShape[id] = !mShape[id];
331
      tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
332
      }
333
    }
334
335
///////////////////////////////////////////////////////////////////////////////////////////////////
336
337
  private void uncheckAll()
338
    {
339
    TableRow tr;
340
    Button butt;
341
342
    for (int row=0; row<mNumRows; row++)
343
      {
344
      tr = (TableRow)mLay.getChildAt(row);
345
346
      for(int col=0; col<mNumCols; col++)
347
        {
348
        butt = (Button)tr.getVirtualChildAt(col);
349
        butt.setBackgroundColor(mObjectType==1 ? COLOR_INAC : COLOR_ON);
350
        mShape[row*mNumCols+col] = true;
351
        }
352
      }
353 bcc8e016 Leszek Koltunski
    }
354
355 6f779cd4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
356
357
  public void setRegion(float x, float y, float r)
358
    {
359
    mRegionX = x;
360 24991bc2 Leszek Koltunski
    mRegionY =-y;
361 6f779cd4 Leszek Koltunski
    mRegionR = r;
362
363 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
364 6f779cd4 Leszek Koltunski
    view.getRenderer().setRegion(mRegionX, mRegionY, mRegionR);
365
    }
366
367 950511ed Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
368
369 334c13fa Leszek Koltunski
  public void setCenter(float x, float y, float z)
370 950511ed Leszek Koltunski
    {
371
    mCenterX = x;
372
    mCenterY = y;
373 334c13fa Leszek Koltunski
    mCenterZ = z;
374 950511ed Leszek Koltunski
375 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
376 334c13fa Leszek Koltunski
    view.getRenderer().setCenter( mCenterX, mCenterY, mCenterZ );
377 950511ed Leszek Koltunski
    }
378
379
///////////////////////////////////////////////////////////////////////////////////////////////////
380
381
  public float getCenterX()
382
    {
383
    return mCenterX;
384
    }
385
386
///////////////////////////////////////////////////////////////////////////////////////////////////
387
388
  public float getCenterY()
389
    {
390
    return mCenterY;
391
    }
392
393 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
394
395
  public float getCenterZ()
396
    {
397
    return mCenterZ;
398
    }
399
400 6f779cd4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
401
402
  public float getRegionX()
403
    {
404
    return mRegionX;
405
    }
406
407
///////////////////////////////////////////////////////////////////////////////////////////////////
408
409
  public float getRegionY()
410
    {
411
    return mRegionY;
412
    }
413
414
///////////////////////////////////////////////////////////////////////////////////////////////////
415
416
  public float getRegionR()
417
    {
418
    return mRegionR;
419
    }
420
421 bcc8e016 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
422 50ac40a6 Leszek Koltunski
423 bfcf419a Leszek Koltunski
  public void Create(View v)
424 bcc8e016 Leszek Koltunski
    {
425 76f9798b Leszek Koltunski
    DistortedEffects.setMaxVertex(20);    // those have to be called before
426
    DistortedEffects.setMaxFragment(3);   // any DistortedEffect get created!
427 a98db446 Leszek Koltunski
428 50ac40a6 Leszek Koltunski
    if( mObjectType==1 )
429
      {
430 bfcf419a Leszek Koltunski
      mMesh = new MeshFlat(mNumCols,mNumRows);
431 50ac40a6 Leszek Koltunski
      }
432
    else
433
      {
434 bfcf419a Leszek Koltunski
      String str = "";
435 50ac40a6 Leszek Koltunski
436 bfcf419a Leszek Koltunski
      for(int i=0; i<mNumRows*mNumCols; i++)
437
        str += mShape[i] ? "1" : "0";
438 50ac40a6 Leszek Koltunski
439 b3b2c6cf leszek
      mMesh = new MeshCubes(mNumCols, str, mNumSlic);
440 50ac40a6 Leszek Koltunski
      }
441 bcc8e016 Leszek Koltunski
442 0ab55f0c Leszek Koltunski
    mMesh.setShowNormals(mShowNormal);
443
444 bfcf419a Leszek Koltunski
    mEffects= new DistortedEffects();
445
    mTexture= new DistortedTexture(mNumCols,mNumRows);
446 bcc8e016 Leszek Koltunski
447 bfcf419a Leszek Koltunski
    final View view = getLayoutInflater().inflate(R.layout.effects3dlayout, null);
448 bcc8e016 Leszek Koltunski
449 bfcf419a Leszek Koltunski
    setContentView(view);
450 bcc8e016 Leszek Koltunski
451 bfcf419a Leszek Koltunski
    String[] effects = new String[mEffectNames.length];
452 50ac40a6 Leszek Koltunski
453 bfcf419a Leszek Koltunski
    for(int i=0; i<mEffectNames.length; i++) effects[i] = mEffectNames[i].name();
454
455
    Spinner effectSpinner = (Spinner)findViewById(R.id.effects3dspinner );
456
    effectSpinner.setOnItemSelectedListener(this);
457
458
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, effects);
459
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
460
    effectSpinner.setAdapter(adapterEffect);
461
462 98c04ab8 leszek
    resetData();
463
464 bfcf419a Leszek Koltunski
    mEffectAdd = 0;
465 d40cfeb2 Leszek Koltunski
    }
466
467 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
468
469
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
470
    {
471
    switch(parent.getId())
472
      {
473 bfcf419a Leszek Koltunski
      case R.id.objectpicker_spinnerType  : if( mObjectType!=pos )
474
                                              {
475
                                              mObjectType = pos;
476
                                              uncheckAll();
477
                                              }
478 56cbe1cf Leszek Koltunski
                                            break;
479 bcc8e016 Leszek Koltunski
      case R.id.objectpicker_spinnerBitmap: switch(pos)
480
                                              {
481 cdc515b9 Leszek Koltunski
                                              case 0: mBitmapID = -1        ; break;
482
                                              case 1: mBitmapID = R.raw.face; break;
483
                                              case 2: mBitmapID = R.raw.dog ; break;
484
                                              case 3: mBitmapID = R.raw.cat ; break;
485
                                              case 4: mBitmapID = R.raw.grid; break;
486
                                              case 5: mBitmapID = R.raw.bean; break;
487
                                              case 6: mBitmapID = R.raw.monalisa; break;
488 bcc8e016 Leszek Koltunski
                                              }
489
                                            break;
490 76a81b6a Leszek Koltunski
      case R.id.effects3dspinner          : mEffectAdd = pos;
491 56cbe1cf Leszek Koltunski
                                            break;
492 50ac40a6 Leszek Koltunski
      }
493
    }
494
495
///////////////////////////////////////////////////////////////////////////////////////////////////
496
497
  public void onNothingSelected(AdapterView<?> parent)
498
    {
499
    }
500
501 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
502
503 56cbe1cf Leszek Koltunski
  public int getWidth()
504 d40cfeb2 Leszek Koltunski
    {
505 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getWidth();
506 d40cfeb2 Leszek Koltunski
    }
507 08f92d82 Leszek Koltunski
508
///////////////////////////////////////////////////////////////////////////////////////////////////
509
510 56cbe1cf Leszek Koltunski
  public int getHeight()
511 d40cfeb2 Leszek Koltunski
    {
512 f6d884d5 Leszek Koltunski
    return mTexture==null ? 0: mTexture.getHeight();
513 d40cfeb2 Leszek Koltunski
    }
514 08f92d82 Leszek Koltunski
515 334c13fa Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
516
517
  public int getDepth()
518
    {
519 b01acdaf Leszek Koltunski
    return mTexture==null ? 0: mTexture.getDepth(mMesh);
520 334c13fa Leszek Koltunski
    }
521
522
///////////////////////////////////////////////////////////////////////////////////////////////////
523
524
  public int getScreenWidth()
525
    {
526
    return 0;
527
    }
528
529 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
530
531 6f779cd4 Leszek Koltunski
  private void resetData()
532 d40cfeb2 Leszek Koltunski
    {
533 950511ed Leszek Koltunski
    mCenterX = 0.5f*getWidth();
534
    mCenterY = 0.5f*getHeight();
535 6f779cd4 Leszek Koltunski
    mRegionX = 0;
536
    mRegionY = 0;
537
    mRegionR = getWidth()/2;
538 47833473 Leszek Koltunski
539 f338550a leszek
    mSupportsRegion =false;
540 4d5b37fe Leszek Koltunski
    mSupportsCenter =false;
541 98c04ab8 leszek
542
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
543 0ab55f0c Leszek Koltunski
    view.getRenderer().showRegionAndCenter(false,false);
544 6f779cd4 Leszek Koltunski
    }
545
546
///////////////////////////////////////////////////////////////////////////////////////////////////
547
// 'second screen' methods
548
549 56cbe1cf Leszek Koltunski
  public void newEffect(View v)
550 794e6c4f Leszek Koltunski
    {
551 76a81b6a Leszek Koltunski
    Effects3DEffect eff = new Effects3DEffect(mEffectNames[mEffectAdd], this);
552 d04a4886 Leszek Koltunski
    mList.add(eff);
553 d2337a3a Leszek Koltunski
554 76a81b6a Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
555 56cbe1cf Leszek Koltunski
    View view = eff.createView();
556
    layout.addView(view);
557 950511ed Leszek Koltunski
558 4d5b37fe Leszek Koltunski
    if( mSupportsCenter )
559 76a81b6a Leszek Koltunski
      {
560
      View center = eff.createCenter();
561
      layout.addView(center);
562
      }
563
564
    if( mSupportsRegion )
565 950511ed Leszek Koltunski
      {
566
      View region = eff.createRegion();
567
      layout.addView(region);
568
      }
569
570 d04a4886 Leszek Koltunski
    eff.apply(mEffects);
571 98c04ab8 leszek
572 0ab55f0c Leszek Koltunski
    boolean show = (mEffectNames[mEffectAdd].getType()==EffectTypes.VERTEX);
573 98c04ab8 leszek
    Effects3DSurfaceView sv = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
574 0ab55f0c Leszek Koltunski
    sv.getRenderer().showRegionAndCenter( (show && mShowRegion) , (show && mShowCenter) );
575 d2337a3a Leszek Koltunski
    }
576
577
///////////////////////////////////////////////////////////////////////////////////////////////////
578
579 56cbe1cf Leszek Koltunski
  public void removeAll(View v)
580 d2337a3a Leszek Koltunski
    {
581 d04a4886 Leszek Koltunski
    mList.clear();
582 76a81b6a Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
583 56cbe1cf Leszek Koltunski
    layout.removeAllViews();
584 d04a4886 Leszek Koltunski
    mEffects.abortEffects(EffectTypes.VERTEX);
585
    mEffects.abortEffects(EffectTypes.FRAGMENT);
586 950511ed Leszek Koltunski
587 6f779cd4 Leszek Koltunski
    resetData();
588 950511ed Leszek Koltunski
589 76a81b6a Leszek Koltunski
    Effects3DSurfaceView view = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
590
    Effects3DRenderer renderer= view.getRenderer();
591 950511ed Leszek Koltunski
592 334c13fa Leszek Koltunski
    renderer.setCenter( mCenterX, mCenterY, mCenterZ );
593 6f779cd4 Leszek Koltunski
    renderer.setRegion( mRegionX, mRegionY, mRegionR );
594 950511ed Leszek Koltunski
    renderer.mQuat1.set(0,0,0,1);
595
    renderer.mQuat2.set(0,0,0,1);
596 d2337a3a Leszek Koltunski
    }
597
598 de82c8b7 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
599
600
  public void remove(View v)
601
    {
602 d04a4886 Leszek Koltunski
    for(Effects3DEffect effect: mList)
603 fa9053f5 Leszek Koltunski
      {
604
      if( effect.thisView(v) )
605
        {
606 fed00329 Leszek Koltunski
        LinearLayout layout = (LinearLayout)findViewById(R.id.effects3dlayout);
607
        View view;
608
609
        view = effect.getEffect();
610
        if( view!=null ) layout.removeView(view);
611
        view = effect.getCenter();
612
        if( view!=null ) layout.removeView(view);
613
        view = effect.getRegion();
614
        if( view!=null ) layout.removeView(view);
615
616 d04a4886 Leszek Koltunski
        mEffects.abortEffect(effect.getId());
617
        mList.remove(effect);
618 adc117e0 Leszek Koltunski
619
        resetData();
620 fed00329 Leszek Koltunski
621
        break;
622 fa9053f5 Leszek Koltunski
        }
623
      }
624 de82c8b7 Leszek Koltunski
    }
625
626 0ab55f0c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
627
628
    boolean getShowCenter()
629
      {
630
      return mShowCenter;
631
      }
632
633
///////////////////////////////////////////////////////////////////////////////////////////////////
634
635
    boolean getShowRegion()
636
      {
637
      return mShowRegion;
638
      }
639
640
///////////////////////////////////////////////////////////////////////////////////////////////////
641
642
    public void showCenter(View view)
643
      {
644
      CheckBox box = (CheckBox)view;
645
      mShowCenter = box.isChecked();
646
647
      Effects3DSurfaceView sv = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
648
      sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
649
      }
650
651
///////////////////////////////////////////////////////////////////////////////////////////////////
652
653
    public void showRegion(View view)
654
      {
655
      CheckBox box = (CheckBox)view;
656
      mShowRegion = box.isChecked();
657
658
      Effects3DSurfaceView sv = (Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView);
659
      sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
660
      }
661
662
///////////////////////////////////////////////////////////////////////////////////////////////////
663
664
    public void showNormal(View view)
665
      {
666
      CheckBox box = (CheckBox)view;
667
      mShowNormal = box.isChecked();
668
669
      if ( mMesh!=null )
670
        {
671
        mMesh.setShowNormals(mShowNormal);
672
        }
673
      }
674
675 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
676 d40cfeb2 Leszek Koltunski
// Overrides
677
678
  @Override
679
  protected void onPause()
680
    {
681 76a81b6a Leszek Koltunski
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
682 d40cfeb2 Leszek Koltunski
    if( mView!=null ) mView.onPause();
683 b0ebdf5e Leszek Koltunski
684
    Distorted.onPause();
685 d40cfeb2 Leszek Koltunski
    super.onPause();
686
    }
687 08f92d82 Leszek Koltunski
688
///////////////////////////////////////////////////////////////////////////////////////////////////
689
    
690 d40cfeb2 Leszek Koltunski
  @Override
691
  protected void onResume()
692
    {
693
    super.onResume();
694 76a81b6a Leszek Koltunski
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.effects3dSurfaceView);
695 d40cfeb2 Leszek Koltunski
    if( mView!=null ) mView.onResume();
696
    }
697 08f92d82 Leszek Koltunski
698
///////////////////////////////////////////////////////////////////////////////////////////////////
699
    
700 d40cfeb2 Leszek Koltunski
  @Override
701
  public void onWindowFocusChanged(boolean hasFocus)
702
    {
703
    super.onWindowFocusChanged(hasFocus);
704
705 bfcf419a Leszek Koltunski
    mColsPicker.setValue(mNumCols);
706
    mRowsPicker.setValue(mNumRows);
707 b3b2c6cf leszek
    mSlicPicker.setValue(mNumSlic);
708 bfcf419a Leszek Koltunski
709 2e755580 Leszek Koltunski
    if( !mGridInitialized ) setGrid();
710 d40cfeb2 Leszek Koltunski
    }
711 08f92d82 Leszek Koltunski
712
///////////////////////////////////////////////////////////////////////////////////////////////////
713
    
714 d40cfeb2 Leszek Koltunski
  @Override
715
  protected void onDestroy()
716
    {
717
    Distorted.onDestroy();
718
    super.onDestroy();
719
    }
720 08f92d82 Leszek Koltunski
721 d40cfeb2 Leszek Koltunski
  }