Project

General

Profile

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

examples / src / main / java / org / distorted / examples / predeform / PredeformActivity.java @ c1f047b9

1 59835a0a 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.predeform;
21
22
import android.app.Activity;
23
import android.content.Intent;
24
import android.os.Bundle;
25
import android.view.View;
26
import android.widget.AdapterView;
27
import android.widget.ArrayAdapter;
28 4b7c432e Leszek Koltunski
import android.widget.Button;
29
import android.widget.LinearLayout;
30 59835a0a Leszek Koltunski
import android.widget.NumberPicker;
31
import android.widget.Spinner;
32
33
import org.distorted.examples.R;
34 9df01f21 Leszek Koltunski
import org.distorted.library.effect.Effect;
35
import org.distorted.library.effect.EffectName;
36
import org.distorted.library.effect.EffectType;
37
import org.distorted.library.type.Static4D;
38
39
import java.util.ArrayList;
40 59835a0a Leszek Koltunski
41
///////////////////////////////////////////////////////////////////////////////////////////////////
42
43 9df01f21 Leszek Koltunski
public class PredeformActivity extends Activity implements View.OnClickListener, AdapterView.OnItemSelectedListener
44 59835a0a Leszek Koltunski
  {
45 4b7c432e Leszek Koltunski
  private int mNumCols = 1;
46
  private int mNumRows = 1;
47
  private int mNumSlic = 1;
48 0dc8ffef Leszek Koltunski
  private NumberPicker mColsPicker, mRowsPicker, mSlicPicker;
49 4b7c432e Leszek Koltunski
  private int mObjectType;
50
  private int mBitmapID;
51 9df01f21 Leszek Koltunski
  private EffectName[] mEffectNames;
52
  private int mEffectAdd;
53
  private LinearLayout mLayout;
54
  private int mChildren;
55
  private ArrayList<PredeformEffect> mList;
56 59835a0a Leszek Koltunski
57
///////////////////////////////////////////////////////////////////////////////////////////////////
58
59
  @Override
60
  protected void onCreate(Bundle savedState)
61
    {
62
    super.onCreate(savedState);
63
64 9df01f21 Leszek Koltunski
    setContentView(R.layout.predeformpickerlayout);
65 59835a0a Leszek Koltunski
66 9df01f21 Leszek Koltunski
    mLayout = findViewById(R.id.predeformLayout);
67
    mChildren = 0;
68
    mList = new ArrayList<>();
69 59835a0a Leszek Koltunski
70 9df01f21 Leszek Koltunski
    mColsPicker = findViewById(R.id.predeformCols);
71
    mRowsPicker = findViewById(R.id.predeformRows);
72
    mSlicPicker = findViewById(R.id.predeformSlices);
73 59835a0a Leszek Koltunski
74
    mColsPicker.setMaxValue(40);
75
    mColsPicker.setMinValue( 1);
76
    mRowsPicker.setMaxValue(40);
77
    mRowsPicker.setMinValue( 1);
78
    mSlicPicker.setMaxValue(40);
79
    mSlicPicker.setMinValue( 0);
80
81
    mColsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
82
         {
83
         @Override
84
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
85
           {
86 9df01f21 Leszek Koltunski
           mNumCols = newVal;
87 59835a0a Leszek Koltunski
           }
88
         });
89
90
    mRowsPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
91
         {
92
         @Override
93
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
94
           {
95 9df01f21 Leszek Koltunski
           mNumRows = newVal;
96 59835a0a Leszek Koltunski
           }
97
         });
98
99
    mSlicPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener()
100
         {
101
         @Override
102
         public void onValueChange(NumberPicker picker, int oldVal, int newVal)
103
           {
104 9df01f21 Leszek Koltunski
           mNumSlic = newVal;
105 59835a0a Leszek Koltunski
           }
106
         });
107
108
    mObjectType = 0;
109
110 9df01f21 Leszek Koltunski
    Spinner typeSpinner  = findViewById(R.id.predeformSpinnerType);
111 59835a0a Leszek Koltunski
    typeSpinner.setOnItemSelectedListener(this);
112
113
    String[] objectType = new String[PredeformMeshList.LENGTH];
114
115 4b7c432e Leszek Koltunski
    for(int mesh=0; mesh<PredeformMeshList.LENGTH; mesh++)
116 59835a0a Leszek Koltunski
      {
117 4b7c432e Leszek Koltunski
      objectType[mesh] = "Mesh: "+PredeformMeshList.getName(mesh);
118 59835a0a Leszek Koltunski
      }
119
120
    ArrayAdapter<String> adapterType = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectType);
121
    adapterType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
122
    typeSpinner.setAdapter(adapterType);
123
124 9df01f21 Leszek Koltunski
    Spinner bitmapSpinner  = findViewById(R.id.predeformSpinnerBitmap);
125 59835a0a Leszek Koltunski
    bitmapSpinner.setOnItemSelectedListener(this);
126
127
    String[] objectBitmap = new String[] { "Texture: Grid", "Texture: Girl", "Texture: Dog", "Texture: Cat",
128
                                           "Texture: Squares", "Texture: Bean", "Texture: Lisa", "Texture: World" };
129
130
    ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, objectBitmap);
131
    adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
132
    bitmapSpinner.setAdapter(adapterBitmap);
133
134 9df01f21 Leszek Koltunski
    Spinner effectSpinner  = findViewById(R.id.predeformSpinnerEffect);
135
    effectSpinner.setOnItemSelectedListener(this);
136 59835a0a Leszek Koltunski
137 9df01f21 Leszek Koltunski
    ArrayAdapter<String> adapterEffect = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, createEffectNames());
138
    adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
139
    effectSpinner.setAdapter(adapterEffect);
140 59835a0a Leszek Koltunski
141 9df01f21 Leszek Koltunski
    Button add = findViewById(R.id.predeformAddEffect);
142
    add.setOnClickListener(this);
143
    Button rem = findViewById(R.id.predeformRemoveEffect);
144
    rem.setOnClickListener(this);
145
    Button cre = findViewById(R.id.predeformCreate);
146
    cre.setOnClickListener(this);
147
    }
148 59835a0a Leszek Koltunski
149 9df01f21 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
150 59835a0a Leszek Koltunski
151 9df01f21 Leszek Koltunski
    private String[] createEffectNames()
152
      {
153
      EffectType type;
154
      EffectName[] names = EffectName.values();
155 0dc8ffef Leszek Koltunski
156 9df01f21 Leszek Koltunski
      int numEffects=0;
157 0dc8ffef Leszek Koltunski
158 9df01f21 Leszek Koltunski
      for (EffectName effectName : names)
159
        {
160
        type = effectName.getType();
161
        if (type == EffectType.VERTEX) numEffects++;
162
        }
163 0dc8ffef Leszek Koltunski
164 9df01f21 Leszek Koltunski
      mEffectNames = new EffectName[numEffects];
165
      String[] effectStrings = new String[numEffects];
166 0dc8ffef Leszek Koltunski
167 9df01f21 Leszek Koltunski
      numEffects=0;
168 0dc8ffef Leszek Koltunski
169 9df01f21 Leszek Koltunski
      for (EffectName name : names)
170 59835a0a Leszek Koltunski
        {
171 9df01f21 Leszek Koltunski
        type = name.getType();
172
173
        if (type == EffectType.VERTEX)
174
          {
175
          mEffectNames[numEffects] = name;
176
          effectStrings[numEffects] = name.name();
177
178
          numEffects++;
179
          }
180 59835a0a Leszek Koltunski
        }
181
182 9df01f21 Leszek Koltunski
      return effectStrings;
183 59835a0a Leszek Koltunski
      }
184
185
///////////////////////////////////////////////////////////////////////////////////////////////////
186
187 9df01f21 Leszek Koltunski
  public void newEffect()
188 59835a0a Leszek Koltunski
    {
189 9df01f21 Leszek Koltunski
    PredeformEffect eff = new PredeformEffect(mEffectNames[mEffectAdd], this );
190
    mList.add(eff);
191
192
    mChildren++;
193
194
    View view = eff.createView(mChildren);
195
    mLayout.addView(view);
196
197
    int dimension = eff.getDimension();
198
    Button butt;
199
200
    switch(dimension)
201
      {
202
      case 1: butt = view.findViewById(R.id.button1dRemove);
203
              butt.setOnClickListener(this);
204
              break;
205
      case 2: butt = view.findViewById(R.id.button2dRemove);
206
              butt.setOnClickListener(this);
207
              break;
208
      case 3: butt = view.findViewById(R.id.button3dRemove);
209
              butt.setOnClickListener(this);
210
              break;
211
      case 4: butt = view.findViewById(R.id.button4dRemove);
212
              butt.setOnClickListener(this);
213
              break;
214
      case 5: butt = view.findViewById(R.id.button5dRemove);
215
              butt.setOnClickListener(this);
216
              break;
217
      }
218
219
    if( mEffectNames[mEffectAdd].getCenterDimension() > 0 )
220
      {
221
      View center = eff.createCenter(mChildren);
222
      mLayout.addView(center);
223
      }
224
225
    if( mEffectNames[mEffectAdd].getRegionDimension() > 0 )
226 59835a0a Leszek Koltunski
      {
227 9df01f21 Leszek Koltunski
      View region = eff.createRegion(mChildren);
228
      mLayout.addView(region);
229 59835a0a Leszek Koltunski
      }
230 9df01f21 Leszek Koltunski
231
    Effect effect = eff.createEffect();
232
233
    PredeformEffectList.addNew(effect);
234 59835a0a Leszek Koltunski
    }
235
236
///////////////////////////////////////////////////////////////////////////////////////////////////
237
238 9df01f21 Leszek Koltunski
  public void removeAll()
239 59835a0a Leszek Koltunski
    {
240 9df01f21 Leszek Koltunski
    mChildren = 0;
241
    mList.clear();
242
    mLayout.removeAllViews();
243
    PredeformEffectList.removeAll();
244
    }
245 4b7c432e Leszek Koltunski
246 9df01f21 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
247 59835a0a Leszek Koltunski
248 9df01f21 Leszek Koltunski
  public void remove(View v)
249
    {
250
    for(PredeformEffect effect: mList)
251
      {
252
      if( effect.thisView(v) )
253 4b7c432e Leszek Koltunski
        {
254 9df01f21 Leszek Koltunski
        View view;
255
256
        view = effect.getEffect();
257
        if( view!=null ) mLayout.removeView(view);
258
        view = effect.getCenter();
259
        if( view!=null ) mLayout.removeView(view);
260
        view = effect.getRegion();
261
        if( view!=null ) mLayout.removeView(view);
262
263
        PredeformEffectList.remove(effect.getId());
264
265
        int index = mList.indexOf(effect);
266
        int capac = mList.size();
267
268
        for(int i=index+1; i<capac; i++)
269
          {
270
          mList.get(i).setBackground(i-1);
271
          }
272
273
        mList.remove(effect);
274
        mChildren--;
275
276
        break;
277 4b7c432e Leszek Koltunski
        }
278 59835a0a Leszek Koltunski
      }
279
    }
280
281
///////////////////////////////////////////////////////////////////////////////////////////////////
282
283 9df01f21 Leszek Koltunski
  public void create()
284 59835a0a Leszek Koltunski
    {
285
    Intent mainInt = new Intent( getApplicationContext(), PredeformActivity2.class);
286
    Bundle b = new Bundle();
287
288
    b.putInt("type"  , mObjectType);
289
    b.putInt("cols"  , PredeformMeshList.getCols(mObjectType, mNumCols, mNumRows, mNumSlic) );
290
    b.putInt("rows"  , PredeformMeshList.getRows(mObjectType, mNumCols, mNumRows, mNumSlic) );
291
    b.putInt("slices", PredeformMeshList.getSlic(mObjectType, mNumCols, mNumRows, mNumSlic) );
292
    b.putInt("bitmap", mBitmapID);
293
294
    mainInt.putExtras(b);
295
    startActivity(mainInt);
296
    }
297
298
///////////////////////////////////////////////////////////////////////////////////////////////////
299 9df01f21 Leszek Koltunski
// TODO
300 59835a0a Leszek Koltunski
301 9df01f21 Leszek Koltunski
  int getScreenWidth()
302 59835a0a Leszek Koltunski
    {
303 9df01f21 Leszek Koltunski
    return 1080;
304 59835a0a Leszek Koltunski
    }
305
306
///////////////////////////////////////////////////////////////////////////////////////////////////
307 9df01f21 Leszek Koltunski
// only important for matrix effects, ignore here
308 59835a0a Leszek Koltunski
309 9df01f21 Leszek Koltunski
  float getScaleFactor()
310 59835a0a Leszek Koltunski
    {
311 9df01f21 Leszek Koltunski
    return 1.0f;
312 59835a0a Leszek Koltunski
    }
313
314
///////////////////////////////////////////////////////////////////////////////////////////////////
315 c1f047b9 Leszek Koltunski
// only if we want to draw the center, ignore here
316 9df01f21 Leszek Koltunski
317
  void setCenter(float x, float y, float z)
318
    {
319
320
    }
321
322
///////////////////////////////////////////////////////////////////////////////////////////////////
323 c1f047b9 Leszek Koltunski
// only if we want to draw the region, ignore here
324 9df01f21 Leszek Koltunski
325
  void setRegion(Static4D region)
326
    {
327
328
    }
329
330
///////////////////////////////////////////////////////////////////////////////////////////////////
331
332
  int getWidth()
333
    {
334
    return mNumCols;
335
    }
336
337
///////////////////////////////////////////////////////////////////////////////////////////////////
338
339
  int getHeight()
340
    {
341
    return mNumRows;
342
    }
343
344
///////////////////////////////////////////////////////////////////////////////////////////////////
345
346
  int getDepth()
347
    {
348
    return mNumSlic;
349
    }
350
351
///////////////////////////////////////////////////////////////////////////////////////////////////
352
353
  @Override
354
  public void onClick(View v)
355
    {
356
    switch (v.getId())
357
      {
358
      case R.id.predeformAddEffect   : newEffect(); break;
359
      case R.id.predeformRemoveEffect: removeAll(); break;
360
      case R.id.predeformCreate      : create();    break;
361
      case R.id.button1dRemove       :
362
      case R.id.button2dRemove       :
363
      case R.id.button3dRemove       :
364
      case R.id.button4dRemove       :
365
      case R.id.button5dRemove       : remove(v)  ; break;
366
      }
367
    }
368
369 59835a0a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
370
371
  @Override
372
  public void onWindowFocusChanged(boolean hasFocus)
373
    {
374
    super.onWindowFocusChanged(hasFocus);
375
376
    mColsPicker.setValue(mNumCols);
377
    mRowsPicker.setValue(mNumRows);
378
    mSlicPicker.setValue(mNumSlic);
379 9df01f21 Leszek Koltunski
    }
380
381
///////////////////////////////////////////////////////////////////////////////////////////////////
382 59835a0a Leszek Koltunski
383 9df01f21 Leszek Koltunski
  @Override
384
  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
385
    {
386
    switch(parent.getId())
387
      {
388
      case R.id.predeformSpinnerType  : if( mObjectType!=pos )
389
                                          {
390
                                          mObjectType = pos;
391
392
                                          int dim = PredeformMeshList.getDimension(mObjectType);
393
394
                                          mRowsPicker.setEnabled(dim>=1);
395
                                          mColsPicker.setEnabled(dim>=2);
396
                                          mSlicPicker.setEnabled(dim>=3);
397
                                          }
398
                                        break;
399
      case R.id.predeformSpinnerBitmap: switch(pos)
400
                                          {
401
                                          case 0: mBitmapID = -1            ; break;
402
                                          case 1: mBitmapID = R.raw.face    ; break;
403
                                          case 2: mBitmapID = R.raw.dog     ; break;
404
                                          case 3: mBitmapID = R.raw.cat     ; break;
405
                                          case 4: mBitmapID = R.raw.grid    ; break;
406
                                          case 5: mBitmapID = R.raw.bean    ; break;
407
                                          case 6: mBitmapID = R.raw.monalisa; break;
408
                                          case 7: mBitmapID = R.raw.world   ; break;
409
                                          }
410
                                        break;
411
      case R.id.predeformSpinnerEffect: mEffectAdd = pos;
412
                                        break;
413
      }
414
    }
415
416
///////////////////////////////////////////////////////////////////////////////////////////////////
417
418
  @Override
419
  public void onNothingSelected(AdapterView<?> parent)
420
    {
421 59835a0a Leszek Koltunski
    }
422
  }