Project

General

Profile

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

examples / src / main / java / org / distorted / examples / predeform / PredeformActivity.java @ 77e66c58

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