commit 950511ed6a4ba408846acc83f0e6cff30fd58bf3
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Fri Jul 8 23:38:56 2016 +0100

    re-add center to Vertex3D

diff --git a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
index 669789f..d446f47 100644
--- a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
+++ b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
@@ -374,6 +374,12 @@ public class Fragment3DActivity extends Activity
     LinearLayout layout = (LinearLayout)findViewById(R.id.fragment3dlayout);
     layout.removeAllViews();
     mObject.abortEffects(EffectTypes.FRAGMENT);
+
+    Fragment3DSurfaceView view = (Fragment3DSurfaceView)findViewById(R.id.fragment3dSurfaceView);
+    Fragment3DRenderer renderer= view.getRenderer();
+
+    renderer.mQuat1.set(0,0,0,1);
+    renderer.mQuat2.set(0,0,0,1);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
index e82a2b0..f073784 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
@@ -69,6 +69,7 @@ public class Vertex3DActivity extends Activity
 
   private ArrayList<Vertex3DEffect> mEffects;
   private int mEffectAdd;
+  private float mCenterX, mCenterY;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -200,6 +201,32 @@ public class Vertex3DActivity extends Activity
     tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void setCenter(float x, float y)
+    {
+    mCenterX = x;
+    mCenterY = y;
+
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+
+    view.getRenderer().setCenter( mCenterX, mCenterY );
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getCenterX()
+    {
+    return mCenterX;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getCenterY()
+    {
+    return mCenterY;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void Continue(View v)
@@ -289,6 +316,9 @@ public class Vertex3DActivity extends Activity
 
   private void setVertexView()
     {
+    mCenterX = 0.5f*getWidth();
+    mCenterY = 0.5f*getHeight();
+
     final View view = getLayoutInflater().inflate(R.layout.vertex3dlayout, null);
 
     setContentView(view);
@@ -329,10 +359,15 @@ public class Vertex3DActivity extends Activity
     LinearLayout layout = (LinearLayout)findViewById(R.id.vertex3dlayout);
     View view = eff.createView();
     layout.addView(view);
+
+    if( mEffectAdd!=1 ) // deform does not support regions
+      {
+      View region = eff.createRegion();
+      layout.addView(region);
+      }
+
     View center = eff.createCenter();
     layout.addView(center);
-    View region = eff.createRegion();
-    layout.addView(region);
 
     Dynamic1D dyn1 = eff.getDyn1();
     Dynamic2D cent = eff.getCenter();
@@ -356,6 +391,16 @@ public class Vertex3DActivity extends Activity
     LinearLayout layout = (LinearLayout)findViewById(R.id.vertex3dlayout);
     layout.removeAllViews();
     mObject.abortEffects(EffectTypes.VERTEX);
+
+    mCenterX = 0.5f*getWidth();
+    mCenterY = 0.5f*getHeight();
+
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+    Vertex3DRenderer renderer= view.getRenderer();
+
+    renderer.setCenter( mCenterX, mCenterY );
+    renderer.mQuat1.set(0,0,0,1);
+    renderer.mQuat2.set(0,0,0,1);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
index 581f00e..984129c 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
@@ -67,9 +67,11 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
     {
     Vertex3DActivity act = mAct.get();
 
-    float x = (mInterCenter[0]*0.014f - 0.2f)*act.getWidth();
-    float y = (mInterCenter[1]*0.014f - 0.2f)*act.getHeight();
+    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);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -449,6 +451,8 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
       fillCenterStatics();
       setCenterText();
       }
+
+    mAct.get().setCenter(mCenterSta.getX(),mCenterSta.getY());
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
index 562ac10..9989bb0 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
@@ -29,6 +29,7 @@ import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.DistortedObject;
 import org.distorted.library.EffectTypes;
+import org.distorted.library.type.Dynamic3D;
 import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -46,11 +47,18 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     private GLSurfaceView mView;
     private DistortedObject mObject;
     private DistortedBitmap mBackground;
+    private DistortedBitmap mCenter;
     private int mObjWidth, mObjHeight;
     private DynamicQuat mQuatInt1, mQuatInt2;
+
+    private Dynamic3D mMoveInter;
+    private Static3D mMovePoint;
+    private float mFactorObj;
+
     Static4D mQuat1, mQuat2;
     int mScreenMin;
 
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public Vertex3DRenderer(GLSurfaceView v)
@@ -59,6 +67,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       mObject     = ((Vertex3DActivity)v.getContext()).getObject();
       mBackground = new DistortedBitmap(100, 100, 1);
+      mCenter     = new DistortedBitmap(100, 100, 1);
 
       mObjWidth = mObject.getWidth();
       mObjHeight= mObject.getHeight();
@@ -71,6 +80,17 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       mQuatInt1.add(mQuat1);
       mQuatInt2.add(mQuat2);
+
+      mMovePoint= new Static3D(0,0,0);
+      mMoveInter= new Dynamic3D();
+      mMoveInter.add(mMovePoint);
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void setCenter(float x, float y)
+      {
+      mMovePoint.set(mFactorObj*x,mFactorObj*y,0);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -84,6 +104,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       mBackground.draw(time);
       mObject.draw(time);
+      mCenter.draw(time);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -94,29 +115,47 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       mObject.abortEffects(EffectTypes.MATRIX);
       mBackground.abortEffects(EffectTypes.MATRIX);
-      float factorObj;
+      mCenter.abortEffects(EffectTypes.MATRIX);
+
+      float factorCen;
+      int centerSize = mCenter.getWidth();
 
       if( width*mObjHeight > height*mObjWidth ) // screen is more 'horizontal' than the Object
         {
-        factorObj = (0.80f*height)/mObjHeight;
+        mFactorObj = (0.80f*height)/mObjHeight;
+        factorCen  = (0.08f*height)/centerSize;
         }
       else
         {
-        factorObj = (0.80f*width)/mObjWidth;
+        mFactorObj = (0.80f*width)/mObjWidth;
+        factorCen  = (0.08f*width)/centerSize;
         }
 
+      Vertex3DActivity act = (Vertex3DActivity)mView.getContext();
+      mMovePoint.set(mFactorObj*act.getCenterX(),mFactorObj*act.getCenterY(),0);
+
       Static3D rotateObj = new Static3D(mObjWidth/2,mObjHeight/2, 0);
 
-      mObject.move( new Static3D( (width-factorObj*mObjWidth)/2 , (height-factorObj*mObjHeight)/2 , 0) );
-      mObject.scale(factorObj);
+      mObject.move( new Static3D( (width-mFactorObj*mObjWidth)/2 , (height-mFactorObj*mObjHeight)/2 , 0) );
+      mObject.scale(mFactorObj);
       mObject.quaternion(mQuatInt1, rotateObj);
       mObject.quaternion(mQuatInt2, rotateObj);
 
+      Static3D rotateCen = new Static3D(width/2,height/2, 0);
+
+      mCenter.quaternion(mQuatInt1, rotateCen);
+      mCenter.quaternion(mQuatInt2, rotateCen);
+
+      mCenter.move( new Static3D( (width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
+                                  (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 10) );
+      mCenter.move(mMoveInter);
+      mCenter.scale(factorCen);
+
       int backgroundSize = mBackground.getWidth();
       float factorBackX = ((float)width)/backgroundSize;
       float factorBackY = ((float)height)/backgroundSize;
 
-      mBackground.move(new Static3D( -width/2, -height/2,-factorObj*(mObjWidth+mObjHeight)/2) );
+      mBackground.move(new Static3D( -width/2, -height/2,-mFactorObj*(mObjWidth+mObjHeight)/2) );
       mBackground.scale(new Static3D(2*factorBackX, 2*factorBackY, 1.0f) );
 
       Distorted.onSurfaceChanged(width, height);
@@ -130,13 +169,15 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       InputStream is1 = act.getResources().openRawResource(act.getBitmap());
       InputStream is2 = act.getResources().openRawResource(R.raw.water);
+      InputStream is3 = act.getResources().openRawResource(R.raw.center);
 
-      Bitmap bitmap1,bitmap2;
+      Bitmap bitmap1,bitmap2,bitmap3;
         
       try 
         {
         bitmap1 = BitmapFactory.decodeStream(is1);
         bitmap2 = BitmapFactory.decodeStream(is2);
+        bitmap3 = BitmapFactory.decodeStream(is3);
         }
       finally 
         {
@@ -144,13 +185,15 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
           {
           is1.close();
           is2.close();
+          is3.close();
           } 
         catch(IOException e) { }
         }  
       
       mObject.setBitmap(bitmap1);
-      mBackground.setBitmap(bitmap2)
-      ;
+      mBackground.setBitmap(bitmap2);
+      mCenter.setBitmap(bitmap3);
+
       try
         {
         Distorted.onSurfaceCreated(mView.getContext());
diff --git a/src/main/res/layout/effectcenter.xml b/src/main/res/layout/effectcenter.xml
index 7524943..fe92f3c 100644
--- a/src/main/res/layout/effectcenter.xml
+++ b/src/main/res/layout/effectcenter.xml
@@ -39,4 +39,10 @@
 
     </LinearLayout>
 
+    <View
+        android:layout_height="3dip"
+        android:background="#777777"
+        android:layout_width="match_parent"
+        />
+
 </LinearLayout>
diff --git a/src/main/res/layout/effectregion.xml b/src/main/res/layout/effectregion.xml
index 5bf9d71..48681c3 100644
--- a/src/main/res/layout/effectregion.xml
+++ b/src/main/res/layout/effectregion.xml
@@ -64,11 +64,4 @@
 
     </LinearLayout>
 
-
-    <View
-        android:layout_height="3dip"
-        android:background="#777777"
-        android:layout_width="match_parent"
-        />
-
 </LinearLayout>
diff --git a/src/main/res/raw/center.png b/src/main/res/raw/center.png
index e61805b..e650b8f 100644
Binary files a/src/main/res/raw/center.png and b/src/main/res/raw/center.png differ
