Project

General

Profile

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

examples / src / main / java / org / distorted / examples / meshfile / MeshFileActivity.java @ 39b925d5

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.Button;
29
import android.widget.LinearLayout;
30
import android.widget.SeekBar;
31
import android.widget.Spinner;
32
import android.widget.TextView;
33

    
34
import org.distorted.examples.R;
35
import org.distorted.library.main.DistortedLibrary;
36
import org.distorted.library.mesh.MeshFile;
37

    
38
///////////////////////////////////////////////////////////////////////////////////////////////////
39

    
40
public class MeshFileActivity extends Activity implements AdapterView.OnItemSelectedListener,
41
                                                          SeekBar.OnSeekBarChangeListener,
42
                                                          View.OnClickListener
43
{
44
    private static final int OFFSET = 100000;
45

    
46
    private LinearLayout mLayout;
47
    private int mResource;
48
    private String[] mNames = new String[] { "deferredjob",
49
                                             "meshjoin"   ,
50
                                             "predeform"  ,
51
                                             "cube2"      ,
52
                                             "cube3"      ,
53
                                             "cube4"      ,
54
                                             "cube5"      ,
55
                                             "pyra3"      ,
56
                                             "pyra4"      ,
57
                                             "pyra5"
58
                                           };
59

    
60
///////////////////////////////////////////////////////////////////////////////////////////////////
61

    
62
    @Override
63
    protected void onCreate(Bundle icicle) 
64
      {
65
      super.onCreate(icicle);
66
      setContentView(R.layout.meshfilelayout);
67

    
68
      Spinner meshSpinner  = findViewById(R.id.meshfileSpinner);
69
      meshSpinner.setOnItemSelectedListener(this);
70

    
71
      ArrayAdapter<String> adapterBitmap = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, mNames);
72
      adapterBitmap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
73
      meshSpinner.setAdapter(adapterBitmap);
74

    
75
      SeekBar barB = findViewById(R.id.meshfileScale);
76
      barB.setOnSeekBarChangeListener(this);
77
      barB.setProgress(50);
78

    
79
      mLayout = findViewById(R.id.meshfileComponentLayout);
80
      }
81

    
82
///////////////////////////////////////////////////////////////////////////////////////////////////
83
    
84
    @Override
85
    protected void onPause() 
86
      {
87
      super.onPause();
88
      GLSurfaceView view = findViewById(R.id.meshfileSurfaceView);
89
      view.onPause();
90
      DistortedLibrary.onPause();
91
      }
92

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

    
102
      if( mResource!=0 ) Open(null);
103
      }
104
    
105
///////////////////////////////////////////////////////////////////////////////////////////////////
106
    
107
    @Override
108
    protected void onDestroy() 
109
      {
110
      DistortedLibrary.onDestroy();
111
      super.onDestroy();
112
      }
113

    
114
///////////////////////////////////////////////////////////////////////////////////////////////////
115

    
116
    public void Open(View v)
117
      {
118
      MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
119
      MeshFileRenderer renderer = view.getRenderer();
120

    
121
      renderer.open(mResource);
122

    
123
      int bytes    = renderer.getBytes();
124
      int vertices = renderer.getVertices();
125
      long time    = renderer.getTime();
126

    
127
      TextView byt = findViewById(R.id.meshfileSize);
128
      TextView ver = findViewById(R.id.meshfileVertices);
129
      TextView tim = findViewById(R.id.meshfileTime);
130

    
131
      byt.setText( String.format("%d", bytes   ) );
132
      ver.setText( String.format("%d", vertices) );
133
      tim.setText( String.format("%d", time    ) );
134

    
135
      mLayout.removeAllViews();
136

    
137
      int effComponentNum = renderer.getEffComponentNum();
138

    
139
      for(int i=0; i<effComponentNum; i++)
140
        {
141
        View compView = createComponentView(renderer,i);
142
        mLayout.addView(compView);
143
        }
144
      }
145

    
146
///////////////////////////////////////////////////////////////////////////////////////////////////
147

    
148
    private View createComponentView(MeshFileRenderer renderer, int component)
149
      {
150
      View view = getLayoutInflater().inflate(R.layout.meshfilecomponent, null);
151

    
152
      TextView id = view.findViewById(R.id.meshfileComponentID);
153
      id.setText(String.valueOf(component));
154

    
155
      int endIndex = renderer.getEndEffIndex(component);
156
      TextView index = view.findViewById(R.id.meshfileComponentText);
157
      index.setText(String.valueOf(endIndex));
158

    
159
      Button disappear = view.findViewById(R.id.meshfileComponentDisappear);
160
      disappear.setId(component);
161
      disappear.setOnClickListener(this);
162

    
163
      Button appear = view.findViewById(R.id.meshfileComponentAppear);
164
      appear.setId(component+OFFSET);
165
      appear.setOnClickListener(this);
166

    
167
      return view;
168
      }
169

    
170
///////////////////////////////////////////////////////////////////////////////////////////////////
171

    
172
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
173
      {
174
      if( parent.getId()==R.id.meshfileSpinner )
175
        {
176
        switch(pos)
177
          {
178
          case  0: mResource = R.raw.deferredjob; break;
179
          case  1: mResource = R.raw.meshjoin   ; break;
180
          case  2: mResource = R.raw.predeform  ; break;
181
          case  3: mResource = R.raw.cube2      ; break;
182
          case  4: mResource = R.raw.cube3      ; break;
183
          case  5: mResource = R.raw.cube4      ; break;
184
          case  6: mResource = R.raw.cube5      ; break;
185
          case  7: mResource = R.raw.pyra3      ; break;
186
          case  8: mResource = R.raw.pyra4      ; break;
187
          case  9: mResource = R.raw.pyra5      ; break;
188
          }
189
        }
190
      }
191

    
192
///////////////////////////////////////////////////////////////////////////////////////////////////
193

    
194
    public void onNothingSelected(AdapterView<?> parent)
195
      {
196
      }
197

    
198
///////////////////////////////////////////////////////////////////////////////////////////////////
199

    
200
    @Override
201
    public void onClick(View v)
202
      {
203
      int id = v.getId();
204

    
205
      MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
206
      MeshFileRenderer renderer = view.getRenderer();
207

    
208
      MeshFile mesh = renderer.getMesh();
209

    
210
      if( id>=OFFSET )
211
        {
212
        id -= OFFSET;
213
        mesh.setEffectAssociation(id,0,id);
214
        }
215
      else
216
        {
217
        mesh.setEffectAssociation(id,1,id);
218
        }
219
      }
220

    
221
///////////////////////////////////////////////////////////////////////////////////////////////////
222

    
223
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
224
      {
225
      if( bar.getId() == R.id.meshfileScale )
226
        {
227
        MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
228
        view.getRenderer().setScale(progress);
229
        }
230
      }
231

    
232
///////////////////////////////////////////////////////////////////////////////////////////////////
233

    
234
    public void onStartTrackingTouch(SeekBar bar) { }
235

    
236
///////////////////////////////////////////////////////////////////////////////////////////////////
237

    
238
    public void onStopTrackingTouch(SeekBar bar)  { }
239

    
240
}
(1-1/3)