Skip to content
Snippets Groups Projects
Select Git revision
  • ab50d4c166bf8c9c626b34b9ad492e523e7ae02a
  • master default protected
  • alphashapes
  • quadMeshingTools
  • cygwin_conv_path
  • macos_arm64
  • add-transfiniteautomatic-to-geo
  • patch_releases_4_10
  • HierarchicalHDiv
  • isuruf-master-patch-63355
  • hyperbolic
  • hexdom
  • hxt_update
  • jf
  • 1618-pythonocc-and-gmsh-api-integration
  • octreeSizeField
  • hexbl
  • alignIrregularVertices
  • getEdges
  • patch_releases_4_8
  • isuruf-master-patch-51992
  • gmsh_4_11_0
  • gmsh_4_10_5
  • gmsh_4_10_4
  • gmsh_4_10_3
  • gmsh_4_10_2
  • gmsh_4_10_1
  • gmsh_4_10_0
  • gmsh_4_9_5
  • gmsh_4_9_4
  • gmsh_4_9_3
  • gmsh_4_9_2
  • gmsh_4_9_1
  • gmsh_4_9_0
  • gmsh_4_8_4
  • gmsh_4_8_3
  • gmsh_4_8_2
  • gmsh_4_8_1
  • gmsh_4_8_0
  • gmsh_4_7_1
  • gmsh_4_7_0
41 results

ModelFragment.java

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    ModelFragment.java 7.16 KiB
    package org.geuz.onelab;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.util.Timer;
    import java.util.TimerTask;
    
    import android.app.Fragment;
    import android.graphics.Bitmap;
    import android.opengl.GLSurfaceView;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.GestureDetector;
    import android.view.GestureDetector.OnGestureListener;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageButton;
    import android.widget.LinearLayout;
    import android.widget.ProgressBar;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    
    public class ModelFragment extends Fragment{
    
    	private Gmsh _gmsh;
    	private mGLSurfaceView _glView;
    	private TextView _progress;
    	private LinearLayout _progressLayout;
    	private LinearLayout _controlBarLayout;
    	private GestureDetector _gestureListener;
    	private Timer _animation;
    	private Handler _hideDelay;
    	
    	final Runnable hideControlsRunnable = new Runnable() {public void run() {hideControlBar();}};
    	
    	public static ModelFragment newInstance(Gmsh g) {
    		ModelFragment fragment = new ModelFragment();
    		Bundle bundle = new Bundle();
    		bundle.putParcelable("Gmsh", g);
    		fragment.setArguments(bundle);
            return fragment;
        }
    	
    	public ModelFragment() {
    	}
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		_gmsh = getArguments().getParcelable("Gmsh");
    	}
    
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		View rootView = inflater.inflate(R.layout.fragment_model, container, false);
    		RelativeLayout glViewLayout = (RelativeLayout)rootView.findViewById(R.id.glViewLayout);
    		GLESRender renderer = new GLESRender(_gmsh);
    		_glView = new mGLSurfaceView(glViewLayout.getContext(), renderer);
    		_glView.setEGLContextClientVersion(1);
    		_glView.setRenderer(renderer);
    		_glView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    		_glView.requestRender();
    		_hideDelay = new Handler();
    		this.postDelay();
    		_gestureListener = new GestureDetector(getActivity(), new OnGestureListener() {
    			public boolean onSingleTapUp(MotionEvent e) {
    				if(View.VISIBLE == _controlBarLayout.getVisibility())
    					hideControlBar();
    				else
    					showControlBar();
    				return true;
    			}
    			
    			public void onShowPress(MotionEvent e) {
    				// TODO Auto-generated method stub
    				
    			}
    			
    			public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
    					float distanceY) {
    				// TODO Auto-generated method stub
    				return false;
    			}
    			
    			public void onLongPress(MotionEvent e) {
    				// TODO Auto-generated method stub
    				
    			}
    			
    			public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    					float velocityY) {
    				// TODO Auto-generated method stub
    				return false;
    			}
    			
    			public boolean onDown(MotionEvent e) {
    				// TODO Auto-generated method stub
    				return false;
    			}
    		});
    		_glView.setOnTouchListener(new View.OnTouchListener() {
    			
    			public boolean onTouch(View v, MotionEvent event) {
    				return _gestureListener.onTouchEvent(event);
    			}
    		});
    		glViewLayout.addView(_glView);
    		_progressLayout = new LinearLayout(container.getContext());
    		ProgressBar bar = new ProgressBar(container.getContext());
    		bar.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				_progress.setAlpha((_progress.getAlpha() > 0)? 0 : 1);
    			}
    		});
    		_progressLayout.addView(bar);
    		_progress = new TextView(container.getContext());
    		_progressLayout.setAlpha(0);
    		_progressLayout.setGravity(Gravity.CENTER);
    		_progressLayout.addView(_progress);
    		RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
    			    RelativeLayout.LayoutParams.WRAP_CONTENT, 
    			    RelativeLayout.LayoutParams.WRAP_CONTENT);
    		layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    		glViewLayout.addView(_progressLayout, layoutParams);
    		_controlBarLayout = (LinearLayout) getActivity().getLayoutInflater().inflate(R.layout.control_bar, null);
    		ImageButton playPauseButton = (ImageButton)_controlBarLayout.findViewById(R.id.controlPlay);
    		playPauseButton.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				postDelay();
    				if(((ImageButton)v).getContentDescription().equals("play")) {
    					((ImageButton)v).setContentDescription("pause");
    					((ImageButton)v).setImageResource(android.R.drawable.ic_media_pause);
    		    		_animation = new Timer();
    		    		_animation.schedule(new TimerTask() {
    		    			public void run()  {
    		    				_gmsh.animationNext();
    		    				requestRender();
    		    			} }, 0, 500);
    				}
    				else {
    					((ImageButton)v).setContentDescription("play");
    					((ImageButton)v).setImageResource(android.R.drawable.ic_media_play);
    					_animation.cancel();
    				}
    			}
    		});
    		ImageButton nextButton = (ImageButton)_controlBarLayout.findViewById(R.id.controlNext);
    		nextButton.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				postDelay();
    		    	_gmsh.animationNext();
    		    	requestRender();
    			}
    		});
    		ImageButton prevButton = (ImageButton)_controlBarLayout.findViewById(R.id.controlPrev);
    		prevButton.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				postDelay();
    		    	_gmsh.animationPrev();
    		    	requestRender();
    			}
    		});
    		layoutParams = new RelativeLayout.LayoutParams(
    			    RelativeLayout.LayoutParams.MATCH_PARENT, 
    			    RelativeLayout.LayoutParams.WRAP_CONTENT);
    		layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    		glViewLayout.addView(_controlBarLayout, layoutParams);
    		return rootView;
    	}
    	public void postDelay(int delay) {
    		_hideDelay.removeCallbacks(hideControlsRunnable);
    		_hideDelay.postDelayed(hideControlsRunnable, delay);
    	}
    	public void postDelay() {
    		this.postDelay(6000);
    	}
    	public void showControlBar() {
    		if(getActivity() == null) return;
    		this.postDelay();
    		getActivity().getActionBar().show();
    		Animation bottomUp = AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in);
    		_controlBarLayout.setVisibility(View.VISIBLE);
    		_controlBarLayout.startAnimation(bottomUp);
    	}
    	public void hideControlBar() {
    		if(getActivity() == null) return;
    		_hideDelay.removeCallbacks(hideControlsRunnable);
    		getActivity().getActionBar().hide();
    		Animation bottomDown = AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out);
    		_controlBarLayout.startAnimation(bottomDown);
    		_controlBarLayout.setVisibility(View.INVISIBLE);
    	}
    	public void showProgress(String progress) {
    		_progressLayout.setAlpha(1);
    		_progress.setText(progress);
    	}
    	public void hideProgress() {
    		_progressLayout.setAlpha(0);
    		_progress.setText("");
    	}
    	public void requestRender() {
    		_glView.requestRender();
    	}
    	public void takeScreenshot(File out) {
    		Bitmap screenshot = _glView.getScreenshot();
    		try {
    			FileOutputStream f = new FileOutputStream(out);
    			screenshot.compress(Bitmap.CompressFormat.PNG, 85, f);
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    		finally {
    			_glView.setDrawingCacheEnabled(false);
    		}
    	}
    }