commit a65604a7b52e37e22f630a7f25006d4ec89d5b6c
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Mar 15 15:59:39 2021 +0100

    Beginnings of support for bandaged versions of the 3x3 cube.

diff --git a/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java b/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java
index c0b2a14..e0febb5 100644
--- a/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java
+++ b/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java
@@ -835,6 +835,51 @@ class FactoryCubit
     meshes[5] = meshes[4].copy(true);
     meshes[5].setEffectAssociation(0,32,0);
 
+    return new MeshJoined(meshes);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private float[] createVertices(int A, int B)
+    {
+    float E = 0.5f / Math.max(A,B);
+    return new float[] { -A*E,-B*E, +A*E,-B*E, +A*E,+B*E, -A*E,+B*E };
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  MeshBase createCuboid(int[] dimensions)
+    {
+    int X = dimensions[0];
+    int Y = dimensions[1];
+    int Z = dimensions[2];
+
+    float[] verticesXY = createVertices(X,Y);
+    float[] verticesXZ = createVertices(X,Z);
+    float[] verticesYZ = createVertices(Z,Y);
+
+    float defHeight = 0.048f;
+
+    float[] bandsX = computeBands( defHeight/X,65,0.25f,0.5f,5);
+    float[] bandsY = computeBands( defHeight/Y,65,0.25f,0.5f,5);
+    float[] bandsZ = computeBands( defHeight/Z,65,0.25f,0.5f,5);
+
+    MeshBase[] meshes = new MeshPolygon[6];
+
+    meshes[0] = new MeshPolygon(verticesYZ,bandsX,1,2);
+    meshes[0].setEffectAssociation(0,1,0);
+    meshes[1] = meshes[0].copy(true);
+    meshes[1].setEffectAssociation(0,2,0);
+    meshes[2] = new MeshPolygon(verticesXZ,bandsY,1,2);
+    meshes[2].setEffectAssociation(0,4,0);
+    meshes[3] = meshes[2].copy(true);
+    meshes[3].setEffectAssociation(0,8,0);
+    meshes[4] = new MeshPolygon(verticesXY,bandsZ,1,2);
+    meshes[4].setEffectAssociation(0,16,0);
+    meshes[5] = meshes[4].copy(true);
+    meshes[5].setEffectAssociation(0,32,0);
+
+
     return new MeshJoined(meshes);
     }
 
@@ -1494,6 +1539,55 @@ class FactoryCubit
     return effect;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  VertexEffect[] createCuboidEffects(int[] dimensions)
+    {
+    float X = dimensions[0];
+    float Y = dimensions[1];
+    float Z = dimensions[2];
+
+    float MAX_XY = Math.max(X,Y);
+    float MAX_XZ = Math.max(X,Z);
+    float MAX_YZ = Math.max(Z,Y);
+
+    Static1D angle = new Static1D(90);
+    Static3D move  = new Static3D( 0.0f, 0.0f, 0.5f);
+    Static3D axisX = new Static3D( 1.0f, 0.0f, 0.0f);
+    Static3D axisY = new Static3D( 0.0f, 1.0f, 0.0f);
+    Static3D center= new Static3D( 0.0f, 0.0f, 0.0f);
+
+    Static3D scale3 = new Static3D(MAX_XY,MAX_XY,+Z);
+    Static3D scale4 = new Static3D(MAX_XY,MAX_XY,-Z);
+    Static3D scale5 = new Static3D(MAX_XZ,+Y,MAX_XZ);
+    Static3D scale6 = new Static3D(MAX_XZ,-Y,MAX_XZ);
+    Static3D scale7 = new Static3D(+X,MAX_YZ,MAX_YZ);
+    Static3D scale8 = new Static3D(-X,MAX_YZ,MAX_YZ);
+
+    VertexEffect[] effect = new VertexEffect[9];
+
+    effect[0] = new VertexEffectMove(move);
+    effect[1] = new VertexEffectRotate(angle, axisX, center);
+    effect[2] = new VertexEffectRotate(angle, axisY, center);
+    effect[3] = new VertexEffectScale(scale3);
+    effect[4] = new VertexEffectScale(scale4);
+    effect[5] = new VertexEffectScale(scale5);
+    effect[6] = new VertexEffectScale(scale6);
+    effect[7] = new VertexEffectScale(scale7);
+    effect[8] = new VertexEffectScale(scale8);
+
+    effect[1].setMeshAssociation(12,-1);  // meshes 2,3
+    effect[2].setMeshAssociation( 3,-1);  // meshes 0,1
+    effect[3].setMeshAssociation(16,-1);  // mesh 4
+    effect[4].setMeshAssociation(32,-1);  // mesh 5
+    effect[5].setMeshAssociation( 8,-1);  // mesh 3
+    effect[6].setMeshAssociation( 4,-1);  // mesh 2
+    effect[7].setMeshAssociation( 1,-1);  // mesh 0
+    effect[8].setMeshAssociation( 2,-1);  // mesh 1
+
+    return effect;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // OBJECTS
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1910,6 +2004,19 @@ class FactoryCubit
 
     //mesh.mergeEffComponents();
 
+    return mesh;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  MeshBase createCuboidMesh(int[] dimensions)
+    {
+    MeshBase mesh = createCuboid(dimensions);
+    VertexEffect[] effects = createCuboidEffects(dimensions);
+    for( VertexEffect effect : effects ) mesh.apply(effect);
+
+  //  mesh.mergeEffComponents();
+
     return mesh;
     }
   }
diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
index 1b33ec4..1732385 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
@@ -27,9 +27,11 @@ import android.graphics.Paint;
 import android.opengl.GLSurfaceView;
 
 import org.distorted.examples.R;
+import org.distorted.library.effect.Effect;
 import org.distorted.library.effect.EffectType;
 import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.VertexEffect;
 import org.distorted.library.effect.VertexEffectDeform;
 import org.distorted.library.effect.VertexEffectDisappear;
 import org.distorted.library.effect.VertexEffectRotate;
@@ -130,10 +132,8 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Excep
       {
       if( mTexture==null ) mTexture = new DistortedTexture();
 
-      VertexEffectDisappear.enable();
-      VertexEffectRotate.enable();
-      VertexEffectDeform.enable();
-
+      Effect.enableEffects(EffectType.VERTEX);
+      DistortedLibrary.setMax(EffectType.VERTEX, 10);
       DistortedLibrary.needTransformFeedback();
       DistortedLibrary.onSurfaceCreated(mView.getContext(), this);
       }
@@ -328,8 +328,10 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Excep
 
     private void createMesh()
       {
+      int[] dimensions = new int[] {1,2,3};
+
       FactoryCubit factory = FactoryCubit.getInstance();
-      mMesh = factory.createMegaminxEdgeMesh(0.2f,0.5f);
+      mMesh = factory.createCuboidMesh(dimensions);
 
       //mMesh = createStaticMesh();
 
