Project

General

Profile

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

examples / src / main / java / org / distorted / examples / vertex3d / Vertex3DActivity.java @ 56cbe1cf

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
package org.distorted.examples.vertex3d;
21
22
import android.app.Activity;
23
import android.opengl.GLSurfaceView;
24
import android.os.Bundle;
25 d40cfeb2 Leszek Koltunski
import android.view.Gravity;
26 08f92d82 Leszek Koltunski
import android.view.View;
27 50ac40a6 Leszek Koltunski
import android.widget.AdapterView;
28
import android.widget.ArrayAdapter;
29 d40cfeb2 Leszek Koltunski
import android.widget.Button;
30 08f92d82 Leszek Koltunski
import android.widget.LinearLayout;
31 d40cfeb2 Leszek Koltunski
import android.widget.NumberPicker;
32 50ac40a6 Leszek Koltunski
import android.widget.Spinner;
33 d40cfeb2 Leszek Koltunski
import android.widget.TableRow;
34 08f92d82 Leszek Koltunski
35
import org.distorted.examples.R;
36
import org.distorted.library.Distorted;
37 50ac40a6 Leszek Koltunski
import org.distorted.library.DistortedBitmap;
38
import org.distorted.library.DistortedCubes;
39
import org.distorted.library.DistortedObject;
40 08f92d82 Leszek Koltunski
import org.distorted.library.EffectNames;
41 56cbe1cf Leszek Koltunski
import org.distorted.library.EffectTypes;
42
import org.distorted.library.type.Dynamic1D;
43
import org.distorted.library.type.Dynamic2D;
44
import org.distorted.library.type.Dynamic3D;
45
import org.distorted.library.type.Dynamic4D;
46
47
import java.util.ArrayList;
48 08f92d82 Leszek Koltunski
49
///////////////////////////////////////////////////////////////////////////////////////////////////
50
51 50ac40a6 Leszek Koltunski
public class Vertex3DActivity extends Activity
52 56cbe1cf Leszek Koltunski
                              implements View.OnClickListener,
53 50ac40a6 Leszek Koltunski
                                         AdapterView.OnItemSelectedListener
54 d40cfeb2 Leszek Koltunski
  {
55 50ac40a6 Leszek Koltunski
  private static final int COLOR_OFF = 0xffffe81f;
56
  private static final int COLOR_ON  = 0xff0000ff;
57
58 d40cfeb2 Leszek Koltunski
  private boolean firstScreen;
59
60
  // fields needed for the first 'pick-a-shape' screen
61
  //
62 56cbe1cf Leszek Koltunski
  private int mNumCols = 10;
63
  private int mNumRows = 10;
64 d40cfeb2 Leszek Koltunski
  private NumberPicker mColsPicker, mRowsPicker;
65 50ac40a6 Leszek Koltunski
  private boolean[] mShape;
66 bcc8e016 Leszek Koltunski
  private DistortedObject mObject;
67
  private int mObjectType;
68
  private int mBitmap;
69 d40cfeb2 Leszek Koltunski
70 56cbe1cf Leszek Koltunski
  private ArrayList<Vertex3DEffect> mEffects;
71
  private int mEffectAdd;
72 50ac40a6 Leszek Koltunski
73 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
74 56cbe1cf Leszek Koltunski
75 d40cfeb2 Leszek Koltunski
  @Override
76
  protected void onCreate(Bundle savedState)
77
    {
78
    super.onCreate(savedState);
79
80 56cbe1cf Leszek Koltunski
    mEffects = new ArrayList<>();
81
82 50ac40a6 Leszek Koltunski
    setContentView(R.layout.objectpickerlayout);
83 d40cfeb2 Leszek Koltunski
84 50ac40a6 Leszek Koltunski
    mColsPicker = (NumberPicker)findViewById(R.id.objectpicker_cols);
85
    mRowsPicker = (NumberPicker)findViewById(R.id.objectpicker_rows);
86 d40cfeb2 Leszek Koltunski
87 56cbe1cf Leszek Koltunski
    mColsPicker.setMaxValue(15);
88 d40cfeb2 Leszek Koltunski
    mColsPicker.setMinValue( 0);
89 56cbe1cf Leszek Koltunski
    mRowsPicker.setMaxValue(15);
90 d40cfeb2 Leszek Koltunski
    mRowsPicker.setMinValue( 0);
91
92
    mColsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
93 08f92d82 Leszek Koltunski
      {
94 d40cfeb2 Leszek Koltunski
      @Override
95
      public void onValueChange(NumberPicker picker, int oldVal, int newVal)
96
        {
97 bcc8e016 Leszek Koltunski
        mNumCols = mColsPicker.getValue();
98 d40cfeb2 Leszek Koltunski
        }
99
      });
100
101
    mRowsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
102
      {
103
      @Override
104
      public void onValueChange(NumberPicker picker, int oldVal, int newVal)
105
        {
106 bcc8e016 Leszek Koltunski
        mNumRows = mRowsPicker.getValue();
107 d40cfeb2 Leszek Koltunski
        }
108
      });
109
110
    firstScreen = true;
111
112 50ac40a6 Leszek Koltunski
    mObjectType = 0;
113 d40cfeb2 Leszek Koltunski
114 50ac40a6 Leszek Koltunski
    Spinner typeSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerType);
115
    typeSpinner.setOnItemSelectedListener(this);
116 d40cfeb2 Leszek Koltunski
117 50ac40a6 Leszek Koltunski
    String[] objectType = new String[] {"DistortedCubes", "DistortedBitmap"};
118 d40cfeb2 Leszek Koltunski
119 bcc8e016 Leszek Koltunski
    ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
120
    adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
121
    typeSpinner.setAdapter(adapterType);
122
123
    Spinner bitmapSpinner  = (Spinner)findViewById(R.id.objectpicker_spinnerBitmap);
124
    bitmapSpinner.setOnItemSelectedListener(this);
125
126
    String[] objectBitmap = new String[] {"Girl", "Dog", "Cat", "Grid"};
127
128
    ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
129
    adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
130
    bitmapSpinner.setAdapter(adapterBitmap);
131 d40cfeb2 Leszek Koltunski
    }
132
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134
135 50ac40a6 Leszek Koltunski
  private void setGrid()
136 d40cfeb2 Leszek Koltunski
    {
137 56cbe1cf Leszek Koltunski
    LinearLayout lay = (LinearLayout)findViewById(R.id.objectpicker_buttongrid);
138 d40cfeb2 Leszek Koltunski
139 56cbe1cf Leszek Koltunski
    int width = lay.getWidth();
140
    int height= lay.getHeight();
141 d40cfeb2 Leszek Koltunski
    int w = mNumCols>0 ? (width / mNumCols) -10 : 0;
142
    int h = mNumRows>0 ? (height/ mNumRows) -10 : 0;
143
    int size= w<h ? w:h;
144
    int pad = size/20;
145
146 56cbe1cf Leszek Koltunski
    lay.removeAllViews();
147 d40cfeb2 Leszek Koltunski
148
    mShape = new boolean[mNumRows*mNumCols];
149
150 56cbe1cf Leszek Koltunski
    TableRow.LayoutParams p = new TableRow.LayoutParams();
151 d40cfeb2 Leszek Koltunski
152
    p.rightMargin  = pad;
153
    p.leftMargin   = pad;
154
    p.topMargin    = pad;
155
    p.bottomMargin = pad;
156
    p.height       = size;
157
    p.width        = size;
158
159
    for (int rows=0; rows<mNumRows; rows++)
160 08f92d82 Leszek Koltunski
      {
161 d40cfeb2 Leszek Koltunski
      TableRow tr = new TableRow(this);
162
      tr.setGravity(Gravity.CENTER);
163
164
      for(int cols=0; cols<mNumCols; cols++)
165
        {
166
        Button b = new Button(this);
167
        b.setOnClickListener(this);
168
        b.setId(rows*mNumCols+cols);
169
        b.setLayoutParams(p);
170 bcc8e016 Leszek Koltunski
        b.setBackgroundColor(COLOR_ON);
171 d40cfeb2 Leszek Koltunski
        tr.addView(b, p);
172 bcc8e016 Leszek Koltunski
        mShape[rows*mNumCols+cols] = true;
173 d40cfeb2 Leszek Koltunski
        }
174
175 56cbe1cf Leszek Koltunski
      lay.addView(tr);
176 d40cfeb2 Leszek Koltunski
      }
177
    }
178
179 50ac40a6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
180
181
  public DistortedObject getObject()
182
    {
183
    return mObject;
184
    }
185
186 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
187
188 56cbe1cf Leszek Koltunski
  public int getBitmap()
189 d40cfeb2 Leszek Koltunski
    {
190 56cbe1cf Leszek Koltunski
    return mBitmap;
191 d40cfeb2 Leszek Koltunski
    }
192
193
///////////////////////////////////////////////////////////////////////////////////////////////////
194
195 56cbe1cf Leszek Koltunski
  public void onClick(View view)
196 d40cfeb2 Leszek Koltunski
    {
197 56cbe1cf Leszek Koltunski
    Button tmp = (Button)view;
198
    int id = tmp.getId();
199
    mShape[id] = !mShape[id];
200
    tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
201 bcc8e016 Leszek Koltunski
    }
202
203
///////////////////////////////////////////////////////////////////////////////////////////////////
204 50ac40a6 Leszek Koltunski
205 bcc8e016 Leszek Koltunski
  public void Continue(View v)
206
    {
207 56cbe1cf Leszek Koltunski
    firstScreen = false;
208
209 50ac40a6 Leszek Koltunski
    if( mObjectType==1 )
210
      {
211
      mObject = new DistortedBitmap(100,100,mNumCols);
212 56cbe1cf Leszek Koltunski
      setVertexView();
213 50ac40a6 Leszek Koltunski
      }
214
    else
215
      {
216 bcc8e016 Leszek Koltunski
      View view = getLayoutInflater().inflate(R.layout.objectpicker2layout, null);
217 50ac40a6 Leszek Koltunski
218 bcc8e016 Leszek Koltunski
      setContentView(view);
219 50ac40a6 Leszek Koltunski
220 bcc8e016 Leszek Koltunski
      view.post(new Runnable() {
221
            @Override
222
            public void run() {
223
              setGrid();
224
            }
225
        });
226 50ac40a6 Leszek Koltunski
      }
227 bcc8e016 Leszek Koltunski
    }
228
229
///////////////////////////////////////////////////////////////////////////////////////////////////
230
231
  public void Create(View v)
232
    {
233
    firstScreen = false;
234
235
    String str = "";
236
237
    for(int i=0; i<mNumRows*mNumCols; i++)
238
      str += mShape[i] ? "1" : "0";
239
240
    mObject = new DistortedCubes(mNumCols, str, 10);
241 50ac40a6 Leszek Koltunski
242 56cbe1cf Leszek Koltunski
    setVertexView();
243 d40cfeb2 Leszek Koltunski
    }
244
245 50ac40a6 Leszek Koltunski
246
///////////////////////////////////////////////////////////////////////////////////////////////////
247
248
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
249
    {
250
    switch(parent.getId())
251
      {
252 56cbe1cf Leszek Koltunski
      case R.id.objectpicker_spinnerType  : mObjectType = pos;
253
                                            break;
254 bcc8e016 Leszek Koltunski
      case R.id.objectpicker_spinnerBitmap: switch(pos)
255
                                              {
256
                                              case 0: mBitmap = R.raw.face; break;
257
                                              case 1: mBitmap = R.raw.dog;  break;
258
                                              case 2: mBitmap = R.raw.cat;  break;
259
                                              case 3: mBitmap = R.raw.grid; break;
260
                                              }
261
                                            break;
262 56cbe1cf Leszek Koltunski
      case R.id.vertex3dspinner           : mEffectAdd = pos;
263
                                            break;
264 50ac40a6 Leszek Koltunski
      }
265
    }
266
267
///////////////////////////////////////////////////////////////////////////////////////////////////
268
269
  public void onNothingSelected(AdapterView<?> parent)
270
    {
271
    }
272
273 d40cfeb2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
274
275 56cbe1cf Leszek Koltunski
  public int getWidth()
276 d40cfeb2 Leszek Koltunski
    {
277 56cbe1cf Leszek Koltunski
    return mObject==null ? 0: mObject.getWidth();
278 d40cfeb2 Leszek Koltunski
    }
279 08f92d82 Leszek Koltunski
280
///////////////////////////////////////////////////////////////////////////////////////////////////
281
282 56cbe1cf Leszek Koltunski
  public int getHeight()
283 d40cfeb2 Leszek Koltunski
    {
284 56cbe1cf Leszek Koltunski
    return mObject==null ? 0: mObject.getHeight();
285 d40cfeb2 Leszek Koltunski
    }
286 08f92d82 Leszek Koltunski
287
///////////////////////////////////////////////////////////////////////////////////////////////////
288 56cbe1cf Leszek Koltunski
// 'second screen' methods
289 08f92d82 Leszek Koltunski
290 56cbe1cf Leszek Koltunski
  private void setVertexView()
291 d40cfeb2 Leszek Koltunski
    {
292 56cbe1cf Leszek Koltunski
    final View view = getLayoutInflater().inflate(R.layout.vertex3dlayout, null);
293 e2d8ea1d Leszek Koltunski
294 56cbe1cf Leszek Koltunski
    setContentView(view);
295 794e6c4f Leszek Koltunski
296 56cbe1cf Leszek Koltunski
    String[] effects = new String[] { "DISTORT",
297
                                      "DEFORM",
298
                                      "SINK",
299
                                      "SWIRL" };
300 794e6c4f Leszek Koltunski
301 56cbe1cf Leszek Koltunski
    Spinner effectSpinner = (Spinner)findViewById(R.id.vertex3dspinner );
302
    effectSpinner.setOnItemSelectedListener(this);
303 794e6c4f Leszek Koltunski
304 56cbe1cf Leszek Koltunski
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, effects);
305
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
306
    effectSpinner.setAdapter(adapterEffect);
307 d2337a3a Leszek Koltunski
308 56cbe1cf Leszek Koltunski
    mEffectAdd = 0;
309 794e6c4f Leszek Koltunski
    }
310
311
///////////////////////////////////////////////////////////////////////////////////////////////////
312
313 56cbe1cf Leszek Koltunski
  public void newEffect(View v)
314 794e6c4f Leszek Koltunski
    {
315 56cbe1cf Leszek Koltunski
    EffectNames name;
316 794e6c4f Leszek Koltunski
317 56cbe1cf Leszek Koltunski
    switch(mEffectAdd)
318
      {
319
      case 0 : name = EffectNames.DISTORT; break;
320
      case 1 : name = EffectNames.DEFORM ; break;
321
      case 2 : name = EffectNames.SINK   ; break;
322
      case 3 : name = EffectNames.SWIRL  ; break;
323
      default: return;
324
      }
325 794e6c4f Leszek Koltunski
326 56cbe1cf Leszek Koltunski
    Vertex3DEffect eff = new Vertex3DEffect(name, this);
327
    mEffects.add(eff);
328 d2337a3a Leszek Koltunski
329 56cbe1cf Leszek Koltunski
    LinearLayout layout = (LinearLayout)findViewById(R.id.vertex3dlayout);
330
    View view = eff.createView();
331
    layout.addView(view);
332
    View center = eff.createCenter();
333
    layout.addView(center);
334
    View region = eff.createRegion();
335
    layout.addView(region);
336
337
    Dynamic1D dyn1 = eff.getDyn1();
338
    Dynamic2D cent = eff.getCenter();
339
    Dynamic3D dyn3 = eff.getDyn3();
340
    Dynamic4D regi = eff.getRegion();
341
342
    switch(mEffectAdd)
343
      {
344
      case 0: mObject.distort(dyn3, cent, regi); break;
345
      case 1: mObject.deform (dyn3, cent      ); break;
346
      case 2: mObject.sink   (dyn1, cent, regi); break;
347
      case 3: mObject.swirl  (dyn1, cent, regi); break;
348
      }
349 d2337a3a Leszek Koltunski
    }
350
351
///////////////////////////////////////////////////////////////////////////////////////////////////
352
353 56cbe1cf Leszek Koltunski
  public void removeAll(View v)
354 d2337a3a Leszek Koltunski
    {
355 56cbe1cf Leszek Koltunski
    mEffects.clear();
356
    LinearLayout layout = (LinearLayout)findViewById(R.id.vertex3dlayout);
357
    layout.removeAllViews();
358
    mObject.abortEffects(EffectTypes.VERTEX);
359 d2337a3a Leszek Koltunski
    }
360
361 08f92d82 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
362 d40cfeb2 Leszek Koltunski
// Overrides
363
364
  @Override
365
  protected void onPause()
366
    {
367
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.vertex3dSurfaceView);
368
    if( mView!=null ) mView.onPause();
369
    super.onPause();
370
    }
371 08f92d82 Leszek Koltunski
372
///////////////////////////////////////////////////////////////////////////////////////////////////
373
    
374 d40cfeb2 Leszek Koltunski
  @Override
375
  protected void onResume()
376
    {
377
    super.onResume();
378
    GLSurfaceView mView = (GLSurfaceView)findViewById(R.id.vertex3dSurfaceView);
379
    if( mView!=null ) mView.onResume();
380
    }
381 08f92d82 Leszek Koltunski
382
///////////////////////////////////////////////////////////////////////////////////////////////////
383
    
384 d40cfeb2 Leszek Koltunski
  @Override
385
  public void onWindowFocusChanged(boolean hasFocus)
386
    {
387
    super.onWindowFocusChanged(hasFocus);
388
389
    if( firstScreen )
390
      {
391
      mColsPicker.setValue(mNumCols);
392
      mRowsPicker.setValue(mNumRows);
393
      }
394
    }
395 08f92d82 Leszek Koltunski
396
///////////////////////////////////////////////////////////////////////////////////////////////////
397
    
398 d40cfeb2 Leszek Koltunski
  @Override
399
  protected void onDestroy()
400
    {
401
    Distorted.onDestroy();
402
    super.onDestroy();
403
    }
404 08f92d82 Leszek Koltunski
405 d40cfeb2 Leszek Koltunski
  }