commit 24991bc22942b6ed8ee20d44477e724b190f45c2
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Sat Jul 16 00:22:51 2016 +0100

    Vertex3D: app finished!

diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
index 9a4b0c0..97aecee 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
@@ -79,6 +79,13 @@ public class Vertex3DActivity extends Activity
   private float mCenterX, mCenterY;
   private float mRegionX, mRegionY, mRegionR;
 
+  private final EffectNames[] mEffectNames = { EffectNames.DISTORT,
+                                               EffectNames.DEFORM ,
+                                               EffectNames.SINK   ,
+                                               EffectNames.SWIRL  };
+
+  private static boolean mSupportsRegion = true;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @Override
@@ -192,6 +199,20 @@ public class Vertex3DActivity extends Activity
     return mObject;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static void setSupportsRegion(boolean supports)
+    {
+    mSupportsRegion = supports;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static boolean supportsRegion()
+    {
+    return mSupportsRegion;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public Bitmap getBitmap()
@@ -256,7 +277,7 @@ public class Vertex3DActivity extends Activity
   public void setRegion(float x, float y, float r)
     {
     mRegionX = x;
-    mRegionY = y;
+    mRegionY =-y;
     mRegionR = r;
 
     Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
@@ -417,10 +438,9 @@ public class Vertex3DActivity extends Activity
 
     setContentView(view);
 
-    String[] effects = new String[] { "DISTORT",
-                                      "DEFORM",
-                                      "SINK",
-                                      "SWIRL" };
+    String[] effects = new String[mEffectNames.length];
+
+    for(int i=0; i<mEffectNames.length; i++) effects[i] = mEffectNames[i].name();
 
     Spinner effectSpinner = (Spinner)findViewById(R.id.vertex3dspinner );
     effectSpinner.setOnItemSelectedListener(this);
@@ -436,25 +456,14 @@ public class Vertex3DActivity extends Activity
 
   public void newEffect(View v)
     {
-    EffectNames name;
-
-    switch(mEffectAdd)
-      {
-      case 0 : name = EffectNames.DISTORT; break;
-      case 1 : name = EffectNames.DEFORM ; break;
-      case 2 : name = EffectNames.SINK   ; break;
-      case 3 : name = EffectNames.SWIRL  ; break;
-      default: return;
-      }
-
-    Vertex3DEffect eff = new Vertex3DEffect(name, this);
+    Vertex3DEffect eff = new Vertex3DEffect(mEffectNames[mEffectAdd], this);
     mEffects.add(eff);
 
     LinearLayout layout = (LinearLayout)findViewById(R.id.vertex3dlayout);
     View view = eff.createView();
     layout.addView(view);
 
-    if( mEffectAdd!=1 ) // deform does not support regions
+    if( eff.supportsRegion() )
       {
       View region = eff.createRegion();
       layout.addView(region);
@@ -463,18 +472,7 @@ public class Vertex3DActivity extends Activity
     View center = eff.createCenter();
     layout.addView(center);
 
-    Dynamic1D dyn1 = eff.getDyn1();
-    Dynamic2D cent = eff.getCenter();
-    Dynamic3D dyn3 = eff.getDyn3();
-    Dynamic4D regi = eff.getRegion();
-
-    switch(mEffectAdd)
-      {
-      case 0: mObject.distort(dyn3, cent, regi); break;
-      case 1: mObject.deform (dyn3, cent      ); break;
-      case 2: mObject.sink   (dyn1, cent, regi); break;
-      case 3: mObject.swirl  (dyn1, cent, regi); break;
-      }
+    eff.apply(mObject);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
index 1729c9c..20b886d 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
@@ -24,6 +24,7 @@ import android.widget.SeekBar;
 import android.widget.TextView;
 
 import org.distorted.examples.R;
+import org.distorted.library.DistortedObject;
 import org.distorted.library.EffectNames;
 import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.type.Dynamic2D;
@@ -61,6 +62,13 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
   private Dynamic2D mCenterDyn;
   private Static2D  mCenterSta;
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public boolean supportsRegion()
+    {
+    return mName == EffectNames.DEFORM ? false : true;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private void fillCenterStatics()
@@ -70,8 +78,6 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
     float x = (mInterCenter[0]*0.012f - 0.1f)*act.getWidth();
     float y = (mInterCenter[1]*0.012f - 0.1f)*act.getHeight();
     mCenterSta.set(x,y);
-
-    act.setCenter(x,y);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -107,8 +113,6 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
     float ry =  mInterRegion[3]    *factorY;
 
     mRegionSta.set(x,y,rx,ry);
-
-    act.setRegion(x,y,rx);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -233,34 +237,6 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
     mCenterDyn.add(mCenterSta);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public Dynamic1D getDyn1()
-    {
-    return mDyn1;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public Dynamic3D getDyn3()
-    {
-    return mDyn3;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public Dynamic4D getRegion()
-    {
-    return mRegionDyn;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public Dynamic2D getCenter()
-    {
-    return mCenterDyn;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public View createView()
@@ -316,6 +292,8 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
       seek[i].setProgress( mInter[i] );
       }
 
+    Vertex3DActivity.setSupportsRegion(supportsRegion());
+
     return effect;
     }
 
@@ -339,7 +317,7 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
     mSeekRegionID[2] = seek[2].getId();
     mSeekRegionID[3] = seek[3].getId();
 
-    mTextRegion    = (TextView)region.findViewById(R.id.effectRegionText);
+    mTextRegion = (TextView)region.findViewById(R.id.effectRegionText);
 
     setDefaultRegionInter();
 
@@ -349,6 +327,8 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
       seek[i].setProgress( mInterRegion[i] );
       }
 
+    act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
+
     return region;
     }
 
@@ -378,9 +358,24 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
       seek[i].setProgress( mInterCenter[i] );
       }
 
+    act.setCenter(mCenterSta.getX(),mCenterSta.getY());
+
     return center;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void apply(DistortedObject object)
+    {
+    switch(mName)
+      {
+      case DISTORT: object.distort(mDyn3, mCenterDyn, mRegionDyn); break;
+      case DEFORM : object.deform (mDyn3, mCenterDyn            ); break;
+      case SINK   : object.sink   (mDyn1, mCenterDyn, mRegionDyn); break;
+      case SWIRL  : object.swirl  (mDyn1, mCenterDyn, mRegionDyn); break;
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void onProgressChanged(SeekBar bar, int progress, boolean fromUser)
@@ -447,6 +442,16 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
       fillCenterStatics();
       setCenterText();
       }
+
+    if( fromUser )
+      {
+      Vertex3DActivity.setSupportsRegion(supportsRegion());
+
+      Vertex3DActivity act = mAct.get();
+
+      act.setCenter(mCenterSta.getX(),mCenterSta.getY());
+      act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ());
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
index b41e2e3..8b87ac1 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
@@ -52,8 +52,8 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     private int mObjWidth, mObjHeight;
     private DynamicQuat mQuatInt1, mQuatInt2;
 
-    private Dynamic3D mMoveInter;
-    private Static3D mMovePoint;
+    private Dynamic3D mCenterInter, mRegionInter;
+    private Static3D mCenterPoint, mRegionPoint;
     private Dynamic3D mRegionScaleInter;
     private Static3D mRegionScalePoint;
 
@@ -85,9 +85,13 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mQuatInt1.add(mQuat1);
       mQuatInt2.add(mQuat2);
 
-      mMoveInter= new Dynamic3D();
-      mMovePoint= new Static3D(0,0,0);
-      mMoveInter.add(mMovePoint);
+      mCenterInter= new Dynamic3D();
+      mCenterPoint= new Static3D(0,0,0);
+      mCenterInter.add(mCenterPoint);
+
+      mRegionInter= new Dynamic3D();
+      mRegionPoint= new Static3D(0,0,0);
+      mRegionInter.add(mRegionPoint);
 
       mRegionScaleInter = new Dynamic3D();
       mRegionScalePoint = new Static3D(0,0,0);
@@ -98,7 +102,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
     public void setCenter(float x, float y)
       {
-      mMovePoint.set(mFactorObj*x,mFactorObj*y,0);
+      mCenterPoint.set(mFactorObj*x,mFactorObj*y,0);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -106,6 +110,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     public void setRegion(float x, float y, float r)
       {
       mFactorReg = 2*mFactorObj*r/mRegion.getWidth();
+      mRegionPoint.set(mFactorObj*x,mFactorObj*y,0);
       mRegionScalePoint.set(mFactorReg,mFactorReg,mFactorReg);
       }
 
@@ -121,7 +126,8 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mBackground.draw(time);
       mObject.draw(time);
       mCenter.draw(time);
-      mRegion.draw(time);
+
+      if( Vertex3DActivity.supportsRegion() ) mRegion.draw(time);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -151,7 +157,8 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
         }
 
       Vertex3DActivity act = (Vertex3DActivity)mView.getContext();
-      mMovePoint.set(mFactorObj*act.getCenterX(),mFactorObj*act.getCenterY(),0);
+      mCenterPoint.set(mFactorObj*act.getCenterX(),mFactorObj*act.getCenterY(),0);
+      mRegionPoint.set(mFactorObj*act.getRegionX(),mFactorObj*act.getRegionY(),0);
 
       mFactorReg = 2*mFactorObj*act.getRegionR()/regionSize;
       mRegionScalePoint.set(mFactorReg,mFactorReg,mFactorReg);
@@ -170,7 +177,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       mCenter.move( new Static3D( (width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
                                   (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 10) );
-      mCenter.move(mMoveInter);
+      mCenter.move(mCenterInter);
       mCenter.scale(factorCen);
 
       mRegion.quaternion(mQuatInt1, rotateCen);
@@ -178,7 +185,8 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       mRegion.move( new Static3D( (width -mFactorObj*mObjWidth )/2 ,
                                   (height-mFactorObj*mObjHeight)/2 , 12) );
-      mRegion.move(mMoveInter);
+      mRegion.move(mCenterInter);
+      mRegion.move(mRegionInter);
       mRegion.scale(mRegionScaleInter);
       mRegion.move( new Static3D( -regionSize/2 , -regionSize/2 , 0) );
 
