Project

General

Profile

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

examples / src / main / java / org / distorted / examples / meshfile / MeshFileActivity.java @ 30f337e5

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.meshfile;
21

    
22
import android.app.Activity;
23
import android.opengl.GLSurfaceView;
24
import android.os.Bundle;
25
import android.view.View;
26
import android.widget.AdapterView;
27
import android.widget.ArrayAdapter;
28
import android.widget.CompoundButton;
29
import android.widget.LinearLayout;
30
import android.widget.SeekBar;
31
import android.widget.Spinner;
32
import android.widget.TextView;
33
import android.widget.ToggleButton;
34

    
35
import org.distorted.examples.R;
36
import org.distorted.library.main.DistortedLibrary;
37
import org.distorted.library.mesh.MeshBase;
38

    
39
///////////////////////////////////////////////////////////////////////////////////////////////////
40

    
41
public class MeshFileActivity extends Activity implements AdapterView.OnItemSelectedListener,
42
                                                          SeekBar.OnSeekBarChangeListener
43
{
44
    final static int PROCEDURAL = -1;
45
    final static int POLYGON    = -2;
46
    final static int MULTIGON   = -3;
47
    final static int TRIANGLE   = -4;
48

    
49
    private LinearLayout mLayout;
50
    private int mResource;
51
    private final  String[] mNames = new String[]
52
                                           { "triangle"   ,
53
                                             "procedural" ,
54
                                             "polygon"    ,
55
                                             "multigon"   ,
56
                                             "deferredjob",
57
                                             "meshjoin"   ,
58
                                             "predeform"  ,
59
                                             "cube2"      ,
60
                                             "cube3"      ,
61
                                             "cube4"      ,
62
                                             "cube5"      ,
63
                                             "pyra3"      ,
64
                                             "pyra4"      ,
65
                                             "pyra5"      ,
66
                                             "dino"       ,
67
                                             "skewb"
68
                                           };
69

    
70
///////////////////////////////////////////////////////////////////////////////////////////////////
71

    
72
    @Override
73
    protected void onCreate(Bundle icicle) 
74
      {
75
      super.onCreate(icicle);
76
      DistortedLibrary.onCreate();
77
      setContentView(R.layout.meshfilelayout);
78

    
79
      Spinner meshSpinner  = findViewById(R.id.meshfileSpinner);
80
      meshSpinner.setOnItemSelectedListener(this);
81

    
82
      ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, mNames);
83
      adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
84
      meshSpinner.setAdapter(adapterBitmap);
85

    
86
      SeekBar barB = findViewById(R.id.meshfileScale);
87
      barB.setOnSeekBarChangeListener(this);
88
      barB.setProgress(50);
89

    
90
      mLayout = findViewById(R.id.meshfileComponentLayout);
91
      }
92

    
93
///////////////////////////////////////////////////////////////////////////////////////////////////
94
    
95
    @Override
96
    protected void onPause() 
97
      {
98
      super.onPause();
99
      GLSurfaceView view = findViewById(R.id.meshfileSurfaceView);
100
      view.onPause();
101
      DistortedLibrary.onPause();
102
      }
103

    
104
///////////////////////////////////////////////////////////////////////////////////////////////////
105
    
106
    @Override
107
    protected void onResume() 
108
      {
109
      super.onResume();
110
      GLSurfaceView view = findViewById(R.id.meshfileSurfaceView);
111
      view.onResume();
112

    
113
      if( mResource!=0 ) Open(null);
114
      }
115
    
116
///////////////////////////////////////////////////////////////////////////////////////////////////
117
    
118
    @Override
119
    protected void onDestroy() 
120
      {
121
      DistortedLibrary.onDestroy();
122
      super.onDestroy();
123
      }
124

    
125
///////////////////////////////////////////////////////////////////////////////////////////////////
126

    
127
    public void onNormals(View v)
128
      {
129
      MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
130
      MeshFileRenderer renderer = view.getRenderer();
131
      renderer.flipNormals();
132
      }
133

    
134
///////////////////////////////////////////////////////////////////////////////////////////////////
135

    
136
    public void Open(View v)
137
      {
138
      MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
139
      MeshFileRenderer renderer = view.getRenderer();
140

    
141
      renderer.open(mResource);
142

    
143
      int bytes    = renderer.getBytes();
144
      int vertices = renderer.getVertices();
145
      long time    = renderer.getTime();
146

    
147
      TextView byt = findViewById(R.id.meshfileSize);
148
      TextView ver = findViewById(R.id.meshfileVertices);
149
      TextView tim = findViewById(R.id.meshfileTime);
150

    
151
      byt.setText( String.format("%d", bytes   ) );
152
      ver.setText( String.format("%d", vertices) );
153
      tim.setText( String.format("%d", time    ) );
154

    
155
      mLayout.removeAllViews();
156

    
157
      int effComponentNum = renderer.getEffComponentNum();
158

    
159
      for(int i=0; i<effComponentNum; i++)
160
        {
161
        View compView = createComponentView(renderer,i);
162
        mLayout.addView(compView);
163
        }
164
      }
165

    
166
///////////////////////////////////////////////////////////////////////////////////////////////////
167

    
168
    private View createComponentView(MeshFileRenderer renderer, final int component)
169
      {
170
      View view = getLayoutInflater().inflate(R.layout.meshfilecomponent, null);
171

    
172
      TextView id = view.findViewById(R.id.meshfileComponentID);
173
      id.setText(String.valueOf(component));
174

    
175
      int endIndex = renderer.getEndEffIndex(component);
176
      TextView index = view.findViewById(R.id.meshfileComponentText);
177
      index.setText(String.valueOf(endIndex));
178

    
179
      final ToggleButton toggle = view.findViewById(R.id.meshfileComponentToggle);
180

    
181
      toggle.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener()
182
        {
183
        @Override
184
        public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked)
185
          {
186
          MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
187
          MeshFileRenderer renderer = view.getRenderer();
188
          MeshBase mesh = renderer.getMesh();
189
          mesh.setEffectAssociation(component,isChecked ? 1:0,component);
190
          }
191
        }) ;
192

    
193
      return view;
194
      }
195

    
196
///////////////////////////////////////////////////////////////////////////////////////////////////
197

    
198
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
199
      {
200
      if( parent.getId()==R.id.meshfileSpinner )
201
        {
202
        switch(pos)
203
          {
204
          case  0: mResource = TRIANGLE         ; break;
205
          case  1: mResource = PROCEDURAL       ; break;
206
          case  2: mResource = POLYGON          ; break;
207
          case  3: mResource = MULTIGON         ; break;
208
          case  4: mResource = R.raw.deferredjob; break;
209
          case  5: mResource = R.raw.meshjoin   ; break;
210
          case  6: mResource = R.raw.predeform  ; break;
211
          case  7: mResource = R.raw.cube2      ; break;
212
          case  8: mResource = R.raw.cube3      ; break;
213
          case  9: mResource = R.raw.cube4      ; break;
214
          case 10: mResource = R.raw.cube5      ; break;
215
          case 11: mResource = R.raw.pyra3      ; break;
216
          case 12: mResource = R.raw.pyra4      ; break;
217
          case 13: mResource = R.raw.pyra5      ; break;
218
          case 14: mResource = R.raw.dino       ; break;
219
          case 15: mResource = R.raw.skewb      ; break;
220
          }
221
        }
222
      }
223

    
224
///////////////////////////////////////////////////////////////////////////////////////////////////
225

    
226
    public void onNothingSelected(AdapterView<?> parent)
227
      {
228
      }
229

    
230
///////////////////////////////////////////////////////////////////////////////////////////////////
231

    
232
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
233
      {
234
      if( bar.getId() == R.id.meshfileScale )
235
        {
236
        MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
237
        view.getRenderer().setScale(progress);
238
        }
239
      }
240

    
241
///////////////////////////////////////////////////////////////////////////////////////////////////
242

    
243
    public void onStartTrackingTouch(SeekBar bar) { }
244

    
245
///////////////////////////////////////////////////////////////////////////////////////////////////
246

    
247
    public void onStopTrackingTouch(SeekBar bar)  { }
248

    
249
}
(1-1/4)