commit b3c9061ab209d24044b2857d54d227935bbbaab8
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Apr 14 23:59:46 2021 +0200

    New Cubit Engine: add adjustable centers.

diff --git a/src/main/java/org/distorted/helpers/FactoryCubit.java b/src/main/java/org/distorted/helpers/FactoryCubit.java
index 1a47e827..7dd308bd 100644
--- a/src/main/java/org/distorted/helpers/FactoryCubit.java
+++ b/src/main/java/org/distorted/helpers/FactoryCubit.java
@@ -2354,57 +2354,21 @@ public class FactoryCubit
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private void prepareAndRoundCorners(MeshBase mesh, double[][] vertices, int[][] vertIndexes,
-                                      float[][] corners, int[] cornerIndexes )
+  private void prepareAndRoundCorners(MeshBase mesh, double[][] vertices,
+                                      float[][] corners, int[] cornerIndexes,
+                                      float[][] centers, int[] centerIndexes )
     {
-    int numNeig, lenFV;
     int lenV = vertices.length;
-    int[] verts = new int[2*(lenV-1)];
     Static3D[] staticVert = new Static3D[1];
     Static3D center = new Static3D(0,0,0);
-    double cx, cy, cz;
-    double[] singleV;
 
     for(int v=0; v<lenV; v++)
       {
-      // prepare verts[]
-      numNeig = 0;
-
-      for (int[] vertIndex : vertIndexes)
-        {
-        lenFV = vertIndex.length;
-
-        for (int fv = 0; fv < lenFV; fv++)
-          if (vertIndex[fv] == v)
-            {
-            int prev = fv > 0 ? fv - 1 : lenFV - 1;
-            int next = fv < lenFV - 1 ? fv + 1 : 0;
-
-            verts[numNeig++] = vertIndex[prev];
-            verts[numNeig++] = vertIndex[next];
-            }
-        }
-
-      cx=cy=cz=0.0f;
-
-      // from verts[] prepare center
-      for(int n=0; n<numNeig; n++)
-        {
-        singleV = vertices[verts[n]];
-
-        cx += singleV[0];
-        cy += singleV[1];
-        cz += singleV[2];
-        }
-      center.set( (float)(cx/numNeig - vertices[v][0]),
-                  (float)(cy/numNeig - vertices[v][1]),
-                  (float)(cz/numNeig - vertices[v][2]));
-
-android.util.Log.e("D", "vertex: "+v+" CENTER: "+center.get0()+" "+center.get1()+" "+center.get2());
-
-      // round Corners
       staticVert[0] = new Static3D( (float)vertices[v][0], (float)vertices[v][1], (float)vertices[v][2]);
 
+      int cent = centerIndexes[v];
+      center.set( centers[cent][0], centers[cent][1], centers[cent][2]);
+
       int corn = cornerIndexes[v];
       float strength = corners[corn][0];
       float radius   = corners[corn][1];
@@ -2536,6 +2500,7 @@ android.util.Log.e("D", "vertex: "+v+" CENTER: "+center.get0()+" "+center.get1()
   public MeshBase createRoundedSolid(final double[][] vertices, final int[][] vertIndexes,
                                      final float[][] bands    , final int[]   bandIndexes,
                                      final float[][] corners  , final int[]   cornerIndexes,
+                                     final float[][] centers  , final int[]   centerIndexes,
                                      final int numComponents )
     {
     int numFaces = vertIndexes.length;
@@ -2586,7 +2551,7 @@ android.util.Log.e("D", "vertex: "+v+" CENTER: "+center.get0()+" "+center.get1()
       mesh.apply(new MatrixEffectMove(move3D)           ,assoc,-1);
       }
 
-    prepareAndRoundCorners(mesh, vertices, vertIndexes, corners, cornerIndexes);
+    prepareAndRoundCorners(mesh, vertices, corners, cornerIndexes, centers, centerIndexes);
 
     correctComponents(mesh,numComponents);
 
diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index 08f94a25..a9e3e564 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -180,6 +180,8 @@ class TwistyCube extends TwistyObject
       int[] bandIndexes   = new int[] { 0,0,0,0,0,0};
       float[][] corners   = new float[][] { {0.036f,0.12f} };
       int[] cornerIndexes = new int[] { 0,0,0,0,0,0,0,0 };
+      float[][] centers   = new float[][] { {0.0f, 0.0f, 0.0f} };
+      int[] centerIndexes = new int[] { 0,0,0,0,0,0,0,0 };
 
       FactoryCubit factory = FactoryCubit.getInstance();
 
@@ -187,6 +189,7 @@ class TwistyCube extends TwistyObject
       mMeshes[index] = factory.createRoundedSolid(VERTICES, VERT_INDEXES,
                                                   bands, bandIndexes,
                                                   corners, cornerIndexes,
+                                                  centers, centerIndexes,
                                                   getNumCubitFaces() );
       }
 
diff --git a/src/main/java/org/distorted/objects/TwistyDiamond.java b/src/main/java/org/distorted/objects/TwistyDiamond.java
index 04fcdb9e..f72b00e5 100644
--- a/src/main/java/org/distorted/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objects/TwistyDiamond.java
@@ -433,6 +433,8 @@ public class TwistyDiamond extends TwistyObject
         int[] bandIndexes   = new int[] { 0,0,0,0,0,0,0,0 };
         float[][] corners   = new float[][] { {0.04f,0.20f} };
         int[] cornerIndexes = new int[] { 0,0,0,0,0,0 };
+        float[][] centers   = new float[][] { {0.0f, 0.0f, 0.0f} };
+        int[] centerIndexes = new int[] { 0,0,0,0,0,0 };
 
         FactoryCubit factory = FactoryCubit.getInstance();
 
@@ -440,6 +442,7 @@ public class TwistyDiamond extends TwistyObject
         mMeshes[0] = factory.createRoundedSolid(VERTICES_OCTA, VERT_INDEXES_OCTA,
                                                 bands, bandIndexes,
                                                 corners, cornerIndexes,
+                                                centers, centerIndexes,
                                                 getNumCubitFaces() );
         }
       mesh = mMeshes[0].copy(true);
@@ -452,6 +455,8 @@ public class TwistyDiamond extends TwistyObject
         int[] bandIndexes   = new int[] { 0,0,0,0 };
         float[][] corners   = new float[][] { {0.08f,0.15f} };
         int[] cornerIndexes = new int[] { 0,0,0,0 };
+        float[][] centers   = new float[][] { {0.0f, 0.0f, 0.0f} };
+        int[] centerIndexes = new int[] { 0,0,0,0 };
 
         FactoryCubit factory = FactoryCubit.getInstance();
 
@@ -459,6 +464,7 @@ public class TwistyDiamond extends TwistyObject
         mMeshes[1] = factory.createRoundedSolid(VERTICES_TETRA, VERT_INDEXES_TETRA,
                                                 bands, bandIndexes,
                                                 corners, cornerIndexes,
+                                                centers, centerIndexes,
                                                 getNumCubitFaces() );
         }
       mesh = mMeshes[1].copy(true);
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index 8e7b8134..467cecab 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -250,6 +250,8 @@ public abstract class TwistyDino extends TwistyObject
       int[] bandIndexes   = new int[] { 0,0,1,1 };
       float[][] corners   = new float[][] { {0.07f,0.40f}, {0.05f,0.30f} };
       int[] cornerIndexes = new int[] { 0,0,1,1 };
+      float[][] centers   = new float[][] { {0.0f, -0.75f, -0.75f} };
+      int[] centerIndexes = new int[] { 0,0,0,0 };
 
       FactoryCubit factory = FactoryCubit.getInstance();
 
@@ -257,6 +259,7 @@ public abstract class TwistyDino extends TwistyObject
       mMeshes[0] = factory.createRoundedSolid(VERTICES, VERT_INDEXES,
                                               bands, bandIndexes,
                                               corners, cornerIndexes,
+                                              centers, centerIndexes,
                                               getNumCubitFaces() );
       }
 
diff --git a/src/main/java/org/distorted/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objects/TwistyPyraminx.java
index 0cb27b81..da783f6b 100644
--- a/src/main/java/org/distorted/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objects/TwistyPyraminx.java
@@ -313,6 +313,8 @@ public class TwistyPyraminx extends TwistyObject
         int[] bandIndexes   = new int[] { 0,0,0,0,0,0,0,0 };
         float[][] corners   = new float[][] { {0.04f,0.20f} };
         int[] cornerIndexes = new int[] { 0,0,0,0,0,0 };
+        float[][] centers   = new float[][] { {0.0f, 0.0f, 0.0f} };
+        int[] centerIndexes = new int[] { 0,0,0,0,0,0 };
 
         FactoryCubit factory = FactoryCubit.getInstance();
 
@@ -320,6 +322,7 @@ public class TwistyPyraminx extends TwistyObject
         mMeshes[0] = factory.createRoundedSolid(VERTICES_OCTA, VERT_INDEXES_OCTA,
                                                 bands, bandIndexes,
                                                 corners, cornerIndexes,
+                                                centers, centerIndexes,
                                                 getNumCubitFaces() );
         }
       mesh = mMeshes[0].copy(true);
@@ -332,6 +335,8 @@ public class TwistyPyraminx extends TwistyObject
         int[] bandIndexes   = new int[] { 0,0,0,0 };
         float[][] corners   = new float[][] { {0.06f,0.15f} };
         int[] cornerIndexes = new int[] { 0,0,0,0 };
+        float[][] centers   = new float[][] { {0.0f, 0.0f, 0.0f} };
+        int[] centerIndexes = new int[] { 0,0,0,0 };
 
         FactoryCubit factory = FactoryCubit.getInstance();
 
@@ -339,6 +344,7 @@ public class TwistyPyraminx extends TwistyObject
         mMeshes[1] = factory.createRoundedSolid(VERTICES_TETRA, VERT_INDEXES_TETRA,
                                                 bands, bandIndexes,
                                                 corners, cornerIndexes,
+                                                centers, centerIndexes,
                                                 getNumCubitFaces() );
 
         factory.printStickerCoords();
diff --git a/src/main/java/org/distorted/objects/TwistySkewb.java b/src/main/java/org/distorted/objects/TwistySkewb.java
index e5e84020..a584af75 100644
--- a/src/main/java/org/distorted/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objects/TwistySkewb.java
@@ -495,13 +495,15 @@ public class TwistySkewb extends TwistyObject
         int[] bandIndexes   = new int[] { 0,0,1,1 };
         float[][] corners   = new float[][] { {0.07f,0.20f}, {0.02f,0.30f} };
         int[] cornerIndexes = new int[] { 0,0,1,1 };
+        float[][] centers   = new float[][] { {0.0f, -0.25f, -0.25f} };
+        int[] centerIndexes = new int[] { 0,0,0,0 };
 
         FactoryCubit factory = FactoryCubit.getInstance();
-
         factory.createNewFaceTransform(VERTICES_EDGE,VERT_INDEXES_EDGE);
         mMeshes[1] = factory.createRoundedSolid(VERTICES_EDGE, VERT_INDEXES_EDGE,
                                                 bands, bandIndexes,
                                                 corners, cornerIndexes,
+                                                centers, centerIndexes,
                                                 getNumCubitFaces() );
         }
       mesh = mMeshes[1].copy(true);
