commit 05cc80759884658f498a90dd50bd31bee1d6b86d
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Oct 6 22:24:02 2020 +0100

    Unification of the way we round the corners of various cubits.

diff --git a/src/main/java/org/distorted/objects/CubitFactory.java b/src/main/java/org/distorted/objects/CubitFactory.java
index 28004fa8..b2f5071d 100644
--- a/src/main/java/org/distorted/objects/CubitFactory.java
+++ b/src/main/java/org/distorted/objects/CubitFactory.java
@@ -40,6 +40,8 @@ public class CubitFactory
   private static final float SQ3 = (float)Math.sqrt(3);
   private static final float SQ6 = (float)Math.sqrt(6);
 
+  private static final Static1D RADIUS = new Static1D(1);
+
   private static CubitFactory mThis;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -58,11 +60,36 @@ public class CubitFactory
     return mThis;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void roundCorners(MeshBase mesh, Static3D center, Static3D[] vertices, float strength, float regionRadius)
+    {
+    Static4D reg= new Static4D(0,0,0,regionRadius);
+
+    float centX = center.get0();
+    float centY = center.get1();
+    float centZ = center.get2();
+
+    for (Static3D vertex : vertices)
+      {
+      float x = strength*(centX - vertex.get0());
+      float y = strength*(centY - vertex.get1());
+      float z = strength*(centZ - vertex.get2());
+
+      VertexEffect effect = new VertexEffectDeform(new Static3D(x,y,z), RADIUS, vertex, reg);
+      mesh.apply(effect);
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // CUBE
 
   MeshBase createCubeMesh(int index)
     {
+    final int MESHES=6;
+    MeshBase[] meshes = new MeshPolygon[MESHES];
+    int association = 1;
+
     float[] bands;
     float D = 0.027f;
     float E = 0.5f-D;
@@ -105,16 +132,6 @@ public class CubitFactory
                break;
       }
 
-    return createCubeMesh(vertices,bands,extraI,extraV);
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private MeshBase createCubeMesh(float[] vertices, float[] bands, int extraI, int extraV)
-    {
-    final int MESHES=6;
-    int association = 1;
-    MeshBase[] meshes = new MeshPolygon[MESHES];
     meshes[0] = new MeshPolygon(vertices,bands,extraI,extraV);
     meshes[0].setEffectAssociation(0,association,0);
 
@@ -134,46 +151,12 @@ public class CubitFactory
     Static1D angle180= new Static1D(180);
     Static1D angle270= new Static1D(270);
 
-    float d1 = 1.0f;
-    float d2 =-0.05f;
-    float d3 = 0.12f;
-
-    Static3D dCen0 = new Static3D( d1*(+0.5f), d1*(+0.5f), d1*(+0.5f) );
-    Static3D dCen1 = new Static3D( d1*(+0.5f), d1*(+0.5f), d1*(-0.5f) );
-    Static3D dCen2 = new Static3D( d1*(+0.5f), d1*(-0.5f), d1*(+0.5f) );
-    Static3D dCen3 = new Static3D( d1*(+0.5f), d1*(-0.5f), d1*(-0.5f) );
-    Static3D dCen4 = new Static3D( d1*(-0.5f), d1*(+0.5f), d1*(+0.5f) );
-    Static3D dCen5 = new Static3D( d1*(-0.5f), d1*(+0.5f), d1*(-0.5f) );
-    Static3D dCen6 = new Static3D( d1*(-0.5f), d1*(-0.5f), d1*(+0.5f) );
-    Static3D dCen7 = new Static3D( d1*(-0.5f), d1*(-0.5f), d1*(-0.5f) );
-
-    Static3D dVec0 = new Static3D( d2*(+0.5f), d2*(+0.5f), d2*(+0.5f) );
-    Static3D dVec1 = new Static3D( d2*(+0.5f), d2*(+0.5f), d2*(-0.5f) );
-    Static3D dVec2 = new Static3D( d2*(+0.5f), d2*(-0.5f), d2*(+0.5f) );
-    Static3D dVec3 = new Static3D( d2*(+0.5f), d2*(-0.5f), d2*(-0.5f) );
-    Static3D dVec4 = new Static3D( d2*(-0.5f), d2*(+0.5f), d2*(+0.5f) );
-    Static3D dVec5 = new Static3D( d2*(-0.5f), d2*(+0.5f), d2*(-0.5f) );
-    Static3D dVec6 = new Static3D( d2*(-0.5f), d2*(-0.5f), d2*(+0.5f) );
-    Static3D dVec7 = new Static3D( d2*(-0.5f), d2*(-0.5f), d2*(-0.5f) );
-
-    Static4D dReg  = new Static4D(0,0,0,d3);
-    Static1D dRad  = new Static1D(1);
-
-    VertexEffectMove effect0 = new VertexEffectMove(new Static3D(0,0,+0.5f));
-    VertexEffectRotate effect1 = new VertexEffectRotate( angle180, axisX, center );
-    VertexEffectRotate effect2 = new VertexEffectRotate( angle90 , axisX, center );
-    VertexEffectRotate effect3 = new VertexEffectRotate( angle270, axisX, center );
-    VertexEffectRotate effect4 = new VertexEffectRotate( angle270, axisY, center );
-    VertexEffectRotate effect5 = new VertexEffectRotate( angle90 , axisY, center );
-
-    VertexEffectDeform effect6 = new VertexEffectDeform(dVec0, dRad, dCen0, dReg);
-    VertexEffectDeform effect7 = new VertexEffectDeform(dVec1, dRad, dCen1, dReg);
-    VertexEffectDeform effect8 = new VertexEffectDeform(dVec2, dRad, dCen2, dReg);
-    VertexEffectDeform effect9 = new VertexEffectDeform(dVec3, dRad, dCen3, dReg);
-    VertexEffectDeform effect10= new VertexEffectDeform(dVec4, dRad, dCen4, dReg);
-    VertexEffectDeform effect11= new VertexEffectDeform(dVec5, dRad, dCen5, dReg);
-    VertexEffectDeform effect12= new VertexEffectDeform(dVec6, dRad, dCen6, dReg);
-    VertexEffectDeform effect13= new VertexEffectDeform(dVec7, dRad, dCen7, dReg);
+    VertexEffect effect0 = new VertexEffectMove(new Static3D(0,0,+0.5f));
+    VertexEffect effect1 = new VertexEffectRotate( angle180, axisX, center );
+    VertexEffect effect2 = new VertexEffectRotate( angle90 , axisX, center );
+    VertexEffect effect3 = new VertexEffectRotate( angle270, axisX, center );
+    VertexEffect effect4 = new VertexEffectRotate( angle270, axisY, center );
+    VertexEffect effect5 = new VertexEffectRotate( angle90 , axisY, center );
 
     effect0.setMeshAssociation(63,-1);  // all 6 sides
     effect1.setMeshAssociation(32,-1);  // back
@@ -188,14 +171,18 @@ public class CubitFactory
     mesh.apply(effect3);
     mesh.apply(effect4);
     mesh.apply(effect5);
-    mesh.apply(effect6);
-    mesh.apply(effect7);
-    mesh.apply(effect8);
-    mesh.apply(effect9);
-    mesh.apply(effect10);
-    mesh.apply(effect11);
-    mesh.apply(effect12);
-    mesh.apply(effect13);
+
+    Static3D[] verticesCubit = new Static3D[8];
+    verticesCubit[0] = new Static3D(+0.5f,+0.5f,+0.5f);
+    verticesCubit[1] = new Static3D(+0.5f,+0.5f,-0.5f);
+    verticesCubit[2] = new Static3D(+0.5f,-0.5f,+0.5f);
+    verticesCubit[3] = new Static3D(+0.5f,-0.5f,-0.5f);
+    verticesCubit[4] = new Static3D(-0.5f,+0.5f,+0.5f);
+    verticesCubit[5] = new Static3D(-0.5f,+0.5f,-0.5f);
+    verticesCubit[6] = new Static3D(-0.5f,-0.5f,+0.5f);
+    verticesCubit[7] = new Static3D(-0.5f,-0.5f,-0.5f);
+
+    roundCorners(mesh,center,verticesCubit,0.06f,0.12f);
 
     mesh.mergeEffComponents();
 
@@ -257,41 +244,16 @@ public class CubitFactory
     Static3D move1  = new Static3D(-E/4,-E/4,0);
     Static3D move2  = new Static3D(-0.5f,-0.5f,-0.5f);
 
-    float d0 =-0.04f;
-    float d1 = 0.04f;
-    float r0 = 0.15f;
-    float r1 = 0.10f;
-
-    Static3D vec0   = new Static3D(d0*(+SQ3/3),d0*(+SQ3/3),d0*(+SQ3/3));
-    Static3D vec1   = new Static3D(d1*(+SQ3/3),d1*(-SQ3/3),d1*(-SQ3/3));
-    Static3D vec2   = new Static3D(d1*(-SQ3/3),d1*(+SQ3/3),d1*(-SQ3/3));
-    Static3D vec3   = new Static3D(d1*(-SQ3/3),d1*(-SQ3/3),d1*(+SQ3/3));
-
-    Static1D radius = new Static1D(0.5f);
-
-    Static3D cent0  = new Static3D( 0.0f, 0.0f, 0.0f);
-    Static3D cent1  = new Static3D(-0.5f, 0.0f, 0.0f);
-    Static3D cent2  = new Static3D( 0.0f,-0.5f, 0.0f);
-    Static3D cent3  = new Static3D( 0.0f, 0.0f,-0.5f);
-
-    Static4D reg0   = new Static4D(0,0,0,r0);
-    Static4D reg1   = new Static4D(0,0,0,r1);
-
-    VertexEffectMove   effect0 = new VertexEffectMove(move1);
-    VertexEffectScale effect1 = new VertexEffectScale(new Static3D(1,1,-1));
-    VertexEffectRotate effect2 = new VertexEffectRotate(angle1,axisX,center1);
-    VertexEffectRotate effect3 = new VertexEffectRotate(angle2,axisY,center1);
-    VertexEffectMove   effect4 = new VertexEffectMove(move2);
-    VertexEffectRotate effect5 = new VertexEffectRotate(angle1,axisX,center2);
-    VertexEffectRotate effect6 = new VertexEffectRotate(angle3,axisY,center2);
-    VertexEffectRotate effect7 = new VertexEffectRotate(angle4,axis0,center2);
-    VertexEffectRotate effect8 = new VertexEffectRotate(angle5,axis1,center2);
-    VertexEffectRotate effect9 = new VertexEffectRotate(angle6,axis1,center2);
-
-    VertexEffectDeform effect10= new VertexEffectDeform(vec0,radius,cent0,reg0);
-    VertexEffectDeform effect11= new VertexEffectDeform(vec1,radius,cent1,reg1);
-    VertexEffectDeform effect12= new VertexEffectDeform(vec2,radius,cent2,reg1);
-    VertexEffectDeform effect13= new VertexEffectDeform(vec3,radius,cent3,reg1);
+    VertexEffect effect0 = new VertexEffectMove(move1);
+    VertexEffect effect1 = new VertexEffectScale(new Static3D(1,1,-1));
+    VertexEffect effect2 = new VertexEffectRotate(angle1,axisX,center1);
+    VertexEffect effect3 = new VertexEffectRotate(angle2,axisY,center1);
+    VertexEffect effect4 = new VertexEffectMove(move2);
+    VertexEffect effect5 = new VertexEffectRotate(angle1,axisX,center2);
+    VertexEffect effect6 = new VertexEffectRotate(angle3,axisY,center2);
+    VertexEffect effect7 = new VertexEffectRotate(angle4,axis0,center2);
+    VertexEffect effect8 = new VertexEffectRotate(angle5,axis1,center2);
+    VertexEffect effect9 = new VertexEffectRotate(angle6,axis1,center2);
 
     effect0.setMeshAssociation( 7,-1);  // meshes 0,1,2
     effect1.setMeshAssociation( 6,-1);  // meshes 1,2
@@ -304,11 +266,6 @@ public class CubitFactory
     effect8.setMeshAssociation(16,-1);  // mesh 4
     effect9.setMeshAssociation(32,-1);  // mesh 5
 
-    effect10.setMeshAssociation(63,-1); // all meshes
-    effect11.setMeshAssociation(63,-1); // all meshes
-    effect12.setMeshAssociation(63,-1); // all meshes
-    effect13.setMeshAssociation(63,-1); // all meshes
-
     mesh.apply(effect0);
     mesh.apply(effect1);
     mesh.apply(effect2);
@@ -320,10 +277,17 @@ public class CubitFactory
     mesh.apply(effect8);
     mesh.apply(effect9);
 
-    mesh.apply(effect10);
-    mesh.apply(effect11);
-    mesh.apply(effect12);
-    mesh.apply(effect13);
+    Static3D roundingCenter = new Static3D(-E/2,-E/2,-E/2);
+
+    Static3D[] verticesType1 = new Static3D[1];
+    verticesType1[0] = new Static3D(0.0f,0.0f,0.0f);
+    roundCorners(mesh,roundingCenter,verticesType1,0.08f,0.15f);
+
+    Static3D[] verticesType2 = new Static3D[3];
+    verticesType2[0] = new Static3D(-E, 0, 0);
+    verticesType2[1] = new Static3D( 0,-E, 0);
+    verticesType2[2] = new Static3D( 0, 0,-E);
+    roundCorners(mesh,roundingCenter,verticesType2,0.08f,0.20f);
 
     mesh.mergeEffComponents();
 
@@ -374,36 +338,17 @@ public class CubitFactory
     MeshBase mesh = new MeshJoined(meshes);
 
     Static3D center = new Static3D(0,0,0);
-    Static3D axis1   = new Static3D(1,0,0);
-    Static3D axis2   = new Static3D(0,0,1);
+    Static3D axisX  = new Static3D(1,0,0);
+    Static3D axisZ  = new Static3D(0,0,1);
     float angle = -(float)((180.0f/Math.PI)*Math.acos(SQ3/3));
 
-    float f = 0.05f;
-    float r = 0.10f;
-    float d = 0.5f;
-    float e = +D*0.6f;
-    Static3D vector0 = new Static3D(-f, 0, 0);
-    Static3D vector1 = new Static3D( 0,+f, 0);
-    Static3D vector2 = new Static3D(+f, 0, 0);
-    Static3D vector3 = new Static3D( 0,-f, 0);
-    Static1D radius  = new Static1D(1.0f);
-    Static4D region  = new Static4D(0,0,0,r);
-    Static3D center0 = new Static3D(+d, 0, e);
-    Static3D center1 = new Static3D( 0,-d, e);
-    Static3D center2 = new Static3D(-d, 0, e);
-    Static3D center3 = new Static3D( 0,+d, e);
-
-    VertexEffectRotate effect0 = new VertexEffectRotate( new Static1D(angle), axis1, center);
-    VertexEffectRotate effect1 = new VertexEffectRotate( new Static1D(  135), axis2, center);
-    VertexEffectRotate effect2 = new VertexEffectRotate( new Static1D(   45), axis2, center);
-    VertexEffectRotate effect3 = new VertexEffectRotate( new Static1D(  -45), axis2, center);
-    VertexEffectRotate effect4 = new VertexEffectRotate( new Static1D( -135), axis2, center);
-    VertexEffectMove   effect5 = new VertexEffectMove( new Static3D(0,0,-0.5f) );
-    VertexEffectDeform effect6 = new VertexEffectDeform(vector0,radius,center0,region);
-    VertexEffectDeform effect7 = new VertexEffectDeform(vector1,radius,center1,region);
-    VertexEffectDeform effect8 = new VertexEffectDeform(vector2,radius,center2,region);
-    VertexEffectDeform effect9 = new VertexEffectDeform(vector3,radius,center3,region);
-    VertexEffectScale  effect10= new VertexEffectScale(0.01f);
+    VertexEffect effect0 = new VertexEffectRotate( new Static1D(angle), axisX, center);
+    VertexEffect effect1 = new VertexEffectRotate( new Static1D(  135), axisZ, center);
+    VertexEffect effect2 = new VertexEffectRotate( new Static1D(   45), axisZ, center);
+    VertexEffect effect3 = new VertexEffectRotate( new Static1D(  -45), axisZ, center);
+    VertexEffect effect4 = new VertexEffectRotate( new Static1D( -135), axisZ, center);
+    VertexEffect effect5 = new VertexEffectMove( new Static3D(0,0,-0.5f) );
+    VertexEffect effect6 = new VertexEffectScale(0);
 
     effect0.setMeshAssociation(30,-1);  // meshes 1,2,3,4
     effect1.setMeshAssociation( 2,-1);  // mesh 1
@@ -411,11 +356,7 @@ public class CubitFactory
     effect3.setMeshAssociation( 8,-1);  // mesh 3
     effect4.setMeshAssociation(16,-1);  // mesh 4
     effect5.setMeshAssociation(30,-1);  // meshes 1,2,3,4
-    effect6.setMeshAssociation(31,-1);  // meshes 0,1,2,3,4
-    effect7.setMeshAssociation(31,-1);  // meshes 0,1,2,3,4
-    effect8.setMeshAssociation(31,-1);  // meshes 0,1,2,3,4
-    effect9.setMeshAssociation(31,-1);  // meshes 0,1,2,3,4
-    effect10.setMeshAssociation(32,-1); // mesh 5
+    effect6.setMeshAssociation(32,-1); // mesh 5
 
     mesh.apply(effect0);
     mesh.apply(effect1);
@@ -424,10 +365,15 @@ public class CubitFactory
     mesh.apply(effect4);
     mesh.apply(effect5);
     mesh.apply(effect6);
-    mesh.apply(effect7);
-    mesh.apply(effect8);
-    mesh.apply(effect9);
-    mesh.apply(effect10);
+
+    Static3D roundingCenter = new Static3D(0,0,-0.2f);
+
+    Static3D[] vertices = new Static3D[4];
+    vertices[0] = new Static3D(-E*SQ2,      0, 0);
+    vertices[1] = new Static3D(+E*SQ2,      0, 0);
+    vertices[2] = new Static3D(     0, -E*SQ2, 0);
+    vertices[3] = new Static3D(     0, +E*SQ2, 0);
+    roundCorners(mesh,roundingCenter,vertices,0.10f,0.10f);
 
     mesh.mergeEffComponents();
 
@@ -468,14 +414,6 @@ public class CubitFactory
 
     MeshBase mesh = new MeshJoined(meshes);
 
-    float d1 = SQ2/2;
-    float d2 =-0.06f;
-    float d3 = 0.20f;
-
-    Static3D a0 = new Static3D(     0, 1,     0 );
-    Static3D a1 = new Static3D( SQ2/2, 0, SQ2/2 );
-    Static3D a2 = new Static3D(-SQ2/2, 0, SQ2/2 );
-
     Static1D alpha = new Static1D((float)(-(180/Math.PI)*Math.asin(SQ3/3)));
     Static1D angle1= new Static1D( 90);
     Static1D angle2= new Static1D(180);
@@ -491,49 +429,17 @@ public class CubitFactory
 
     Static3D flipY = new Static3D( 1,-1, 1);
 
-    Static3D dCen0 = new Static3D( d1*a0.get0(), d1*a0.get1(), d1*a0.get2() );
-    Static3D dCen1 = new Static3D( d1*a1.get0(), d1*a1.get1(), d1*a1.get2() );
-    Static3D dCen2 = new Static3D( d1*a2.get0(), d1*a2.get1(), d1*a2.get2() );
-    Static3D dCen3 = new Static3D(-d1*a0.get0(),-d1*a0.get1(),-d1*a0.get2() );
-    Static3D dCen4 = new Static3D(-d1*a1.get0(),-d1*a2.get1(),-d1*a2.get2() );
-    Static3D dCen5 = new Static3D(-d1*a2.get0(),-d1*a1.get1(),-d1*a1.get2() );
-
-    Static3D dVec0 = new Static3D( d2*a0.get0(), d2*a0.get1(), d2*a0.get2() );
-    Static3D dVec1 = new Static3D( d2*a1.get0(), d2*a1.get1(), d2*a1.get2() );
-    Static3D dVec2 = new Static3D( d2*a2.get0(), d2*a2.get1(), d2*a2.get2() );
-    Static3D dVec3 = new Static3D(-d2*a0.get0(),-d2*a0.get1(),-d2*a0.get2() );
-    Static3D dVec4 = new Static3D(-d2*a1.get0(),-d2*a1.get1(),-d2*a1.get2() );
-    Static3D dVec5 = new Static3D(-d2*a2.get0(),-d2*a2.get1(),-d2*a2.get2() );
-
-    Static4D dReg  = new Static4D(0,0,0,d3);
-    Static1D dRad  = new Static1D(1);
-
-    VertexEffectMove   effect0 = new VertexEffectMove(move1);
-    VertexEffectRotate effect1 = new VertexEffectRotate(alpha , axisX, cent1);
-    VertexEffectRotate effect2 = new VertexEffectRotate(angle1, axisY, cent0);
-    VertexEffectRotate effect3 = new VertexEffectRotate(angle2, axisY, cent0);
-    VertexEffectRotate effect4 = new VertexEffectRotate(angle3, axisY, cent0);
-    VertexEffectScale  effect5 = new VertexEffectScale(flipY);
-
-    VertexEffectDeform  effect6 = new VertexEffectDeform(dVec0, dRad, dCen0, dReg);
-    VertexEffectDeform  effect7 = new VertexEffectDeform(dVec1, dRad, dCen1, dReg);
-    VertexEffectDeform  effect8 = new VertexEffectDeform(dVec2, dRad, dCen2, dReg);
-    VertexEffectDeform  effect9 = new VertexEffectDeform(dVec3, dRad, dCen3, dReg);
-    VertexEffectDeform  effect10= new VertexEffectDeform(dVec4, dRad, dCen4, dReg);
-    VertexEffectDeform  effect11= new VertexEffectDeform(dVec5, dRad, dCen5, dReg);
-
-    effect0.setMeshAssociation (255,-1); // apply to all meshes
-    effect1.setMeshAssociation (255,-1); // apply to all meshes
+    VertexEffect effect0 = new VertexEffectMove(move1);
+    VertexEffect effect1 = new VertexEffectRotate(alpha , axisX, cent1);
+    VertexEffect effect2 = new VertexEffectRotate(angle1, axisY, cent0);
+    VertexEffect effect3 = new VertexEffectRotate(angle2, axisY, cent0);
+    VertexEffect effect4 = new VertexEffectRotate(angle3, axisY, cent0);
+    VertexEffect effect5 = new VertexEffectScale(flipY);
+
     effect2.setMeshAssociation ( 34,-1); // apply to meshes 1 & 5
     effect3.setMeshAssociation ( 68,-1); // apply to meshes 2 & 6
     effect4.setMeshAssociation (136,-1); // apply to meshes 3 & 7
     effect5.setMeshAssociation (240,-1); // apply to meshes 4,5,6,7
-    effect6.setMeshAssociation (255,-1); // apply to all meshes
-    effect7.setMeshAssociation (255,-1); // apply to all meshes
-    effect8.setMeshAssociation (255,-1); // apply to all meshes
-    effect9.setMeshAssociation (255,-1); // apply to all meshes
-    effect10.setMeshAssociation(255,-1); // apply to all meshes
-    effect11.setMeshAssociation(255,-1); // apply to all meshes
 
     mesh.apply(effect0);
     mesh.apply(effect1);
@@ -541,12 +447,16 @@ public class CubitFactory
     mesh.apply(effect3);
     mesh.apply(effect4);
     mesh.apply(effect5);
-    mesh.apply(effect6);
-    mesh.apply(effect7);
-    mesh.apply(effect8);
-    mesh.apply(effect9);
-    mesh.apply(effect10);
-    mesh.apply(effect11);
+
+    Static3D[] verticesRound = new Static3D[6];
+    verticesRound[0] = new Static3D(    0, SQ2/2,    0 );
+    verticesRound[1] = new Static3D( 0.5f,     0, 0.5f );
+    verticesRound[2] = new Static3D(-0.5f,     0, 0.5f );
+    verticesRound[3] = new Static3D(    0,-SQ2/2,    0 );
+    verticesRound[4] = new Static3D(-0.5f,     0,-0.5f );
+    verticesRound[5] = new Static3D( 0.5f,     0,-0.5f );
+
+    roundCorners(mesh,cent0,verticesRound,0.06f,0.20f);
 
     mesh.mergeEffComponents();
 
@@ -557,6 +467,7 @@ public class CubitFactory
 
   MeshBase createTetraMesh()
     {
+    MeshBase[] meshes = new MeshBase[8];
     int association = 1;
 
     float C = 0.06f;
@@ -573,7 +484,6 @@ public class CubitFactory
                                   0.5f    , D*1.30f,
                                   0.0f    , D*1.35f };
 
-    MeshBase[] meshes = new MeshBase[8];
     meshes[0] = new MeshPolygon(vertices, bands, 2,2);
     meshes[0].setEffectAssociation(0,association,0);
 
@@ -607,44 +517,13 @@ public class CubitFactory
     Static3D cent0 = new Static3D(0,0,0);
     Static3D cent1 = new Static3D(0,SQ2/4,0);
 
-    float d1 =-1.00f;
-    float d2 = 0.10f;
-    float d3 = 0.15f;
-
-    float vx = 0.5f   ;
-    float vy = (SQ2/4);
-
-    Static3D a0 = new Static3D(+vx,-vy, 0 );
-    Static3D a1 = new Static3D(-vx,-vy, 0 );
-    Static3D a2 = new Static3D(  0, vy,-vx);
-    Static3D a3 = new Static3D(  0, vy,+vx);
-
-    Static4D dReg  = new Static4D(0,0,0,d3);
-    Static1D dRad  = new Static1D(1);
-
-    Static3D dCen0 = new Static3D( d1*a0.get0(), d1*a0.get1(), d1*a0.get2() );
-    Static3D dCen1 = new Static3D( d1*a1.get0(), d1*a1.get1(), d1*a1.get2() );
-    Static3D dCen2 = new Static3D( d1*a2.get0(), d1*a2.get1(), d1*a2.get2() );
-    Static3D dCen3 = new Static3D( d1*a3.get0(), d1*a3.get1(), d1*a3.get2() );
-
-    Static3D dVec0 = new Static3D( d2*a0.get0(), d2*a0.get1(), d2*a0.get2() );
-    Static3D dVec1 = new Static3D( d2*a1.get0(), d2*a1.get1(), d2*a1.get2() );
-    Static3D dVec2 = new Static3D( d2*a2.get0(), d2*a2.get1(), d2*a2.get2() );
-    Static3D dVec3 = new Static3D( d2*a3.get0(), d2*a3.get1(), d2*a3.get2() );
-
-    VertexEffectRotate effect0 = new VertexEffectRotate(angle2, axisZ, cent0);
-    VertexEffectMove   effect1 = new VertexEffectMove(move1);
-    VertexEffectRotate effect2 = new VertexEffectRotate(alpha , axisX, cent1);
-    VertexEffectScale  effect3 = new VertexEffectScale(flipZ);
-    VertexEffectRotate effect4 = new VertexEffectRotate(angle1, axisY, cent0);
-    VertexEffectRotate effect5 = new VertexEffectRotate(angle2, axisZ, cent0);
-
-    VertexEffectDeform  effect6 = new VertexEffectDeform(dVec0, dRad, dCen0, dReg);
-    VertexEffectDeform  effect7 = new VertexEffectDeform(dVec1, dRad, dCen1, dReg);
-    VertexEffectDeform  effect8 = new VertexEffectDeform(dVec2, dRad, dCen2, dReg);
-    VertexEffectDeform  effect9 = new VertexEffectDeform(dVec3, dRad, dCen3, dReg);
-
-    VertexEffectScale  effect10 = new VertexEffectScale(0.1f);
+    VertexEffect effect0 = new VertexEffectRotate(angle2, axisZ, cent0);
+    VertexEffect effect1 = new VertexEffectMove(move1);
+    VertexEffect effect2 = new VertexEffectRotate(alpha , axisX, cent1);
+    VertexEffect effect3 = new VertexEffectScale(flipZ);
+    VertexEffect effect4 = new VertexEffectRotate(angle1, axisY, cent0);
+    VertexEffect effect5 = new VertexEffectRotate(angle2, axisZ, cent0);
+    VertexEffect effect6 = new VertexEffectScale(0);
 
     effect0.setMeshAssociation(15,-1); // meshes 0,1,2,3
     effect1.setMeshAssociation(15,-1); // meshes 0,1,2,3
@@ -652,11 +531,7 @@ public class CubitFactory
     effect3.setMeshAssociation(10,-1); // meshes 1 & 3
     effect4.setMeshAssociation(12,-1); // meshes 2 & 3
     effect5.setMeshAssociation(12,-1); // meshes 2 & 3
-    effect6.setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect7.setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect8.setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect9.setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect10.setMeshAssociation(240,-1); // meshes 4,5,6,7
+    effect6.setMeshAssociation(240,-1);// meshes 4,5,6,7
 
     mesh.apply(effect0);
     mesh.apply(effect1);
@@ -665,10 +540,13 @@ public class CubitFactory
     mesh.apply(effect4);
     mesh.apply(effect5);
     mesh.apply(effect6);
-    mesh.apply(effect7);
-    mesh.apply(effect8);
-    mesh.apply(effect9);
-    mesh.apply(effect10);
+
+    Static3D[] verticesRound = new Static3D[4];
+    verticesRound[0] = new Static3D(-0.5f,+SQ2/4,   0 );
+    verticesRound[1] = new Static3D(+0.5f,+SQ2/4,   0 );
+    verticesRound[2] = new Static3D(    0,-SQ2/4,+0.5f);
+    verticesRound[3] = new Static3D(    0,-SQ2/4,-0.5f);
+    roundCorners(mesh,cent0,verticesRound,0.08f,0.15f);
 
     mesh.mergeEffComponents();
 
@@ -717,34 +595,6 @@ public class CubitFactory
 
     MeshBase mesh = new MeshJoined(meshes);
 
-    Static3D a0 = new Static3D(     0,-3*F,    0 );
-    Static3D a1 = new Static3D(     0,   0, -3*F );
-    Static3D a2 = new Static3D(  -3*F,   0,    0 );
-    Static3D a3 = new Static3D(  +3*F,   0,    0 );
-
-    Static3D v0 = new Static3D(     0,-3*F/2, 3*F/2 );
-    Static3D v1 = new Static3D(     0, 3*F/2,-3*F/2 );
-    Static3D v2 = new Static3D(  -3*F, 3*F/2, 3*F/2 );
-    Static3D v3 = new Static3D(  +3*F, 3*F/2, 3*F/2 );
-
-    float d1 = 1.0f;
-    float d2 =-0.10f;
-    float d3 =-0.10f;
-    float d4 = 0.40f;
-
-    Static3D dCen0 = new Static3D( d1*a0.get0(), d1*a0.get1(), d1*a0.get2() );
-    Static3D dCen1 = new Static3D( d1*a1.get0(), d1*a1.get1(), d1*a1.get2() );
-    Static3D dCen2 = new Static3D( d1*a2.get0(), d1*a2.get1(), d1*a2.get2() );
-    Static3D dCen3 = new Static3D( d1*a3.get0(), d1*a3.get1(), d1*a3.get2() );
-
-    Static3D dVec0 = new Static3D( d3*v0.get0(), d3*v0.get1(), d3*v0.get2() );
-    Static3D dVec1 = new Static3D( d3*v1.get0(), d3*v1.get1(), d3*v1.get2() );
-    Static3D dVec2 = new Static3D( d2*v2.get0(), d2*v2.get1(), d2*v2.get2() );
-    Static3D dVec3 = new Static3D( d2*v3.get0(), d2*v3.get1(), d2*v3.get2() );
-
-    Static4D dReg  = new Static4D(0,0,0,d4);
-    Static1D dRad  = new Static1D(1);
-
     Static1D angle1 = new Static1D(+ANGLE);
     Static1D angle2 = new Static1D(-ANGLE);
 
@@ -755,21 +605,16 @@ public class CubitFactory
     Static3D center0= new Static3D(0,0,0);
     Static3D center1= new Static3D(0,-3*F,0);
 
-    VertexEffectScale   effect0 = new VertexEffectScale ( new Static3D(3,3,3) );
-    VertexEffectMove    effect1 = new VertexEffectMove  ( new Static3D(0,-F,0) );
-    VertexEffectRotate  effect2 = new VertexEffectRotate( new Static1D(90), axisX, center0 );
-    VertexEffectScale   effect3 = new VertexEffectScale ( new Static3D(1,-1,1) );
-    VertexEffectMove    effect4 = new VertexEffectMove  ( new Static3D(3*E/2,E*(SQ3/2)-3*F,0) );
-    VertexEffectRotate  effect5 = new VertexEffectRotate( new Static1D(+90), axisY, center1 );
-    VertexEffectScale   effect6 = new VertexEffectScale ( new Static3D(-1,1,1) );
-    VertexEffectRotate  effect7 = new VertexEffectRotate( new Static1D( 45), axisX, center1 );
-    VertexEffectRotate  effect8 = new VertexEffectRotate( angle1           , axisZ, center1 );
-    VertexEffectRotate  effect9 = new VertexEffectRotate( angle2           , axisZ, center1 );
-
-    VertexEffectDeform  effect10= new VertexEffectDeform(dVec0, dRad, dCen0, dReg);
-    VertexEffectDeform  effect11= new VertexEffectDeform(dVec1, dRad, dCen1, dReg);
-    VertexEffectDeform  effect12= new VertexEffectDeform(dVec2, dRad, dCen2, dReg);
-    VertexEffectDeform  effect13= new VertexEffectDeform(dVec3, dRad, dCen3, dReg);
+    VertexEffect effect0 = new VertexEffectScale ( new Static3D(3,3,3) );
+    VertexEffect effect1 = new VertexEffectMove  ( new Static3D(0,-F,0) );
+    VertexEffect effect2 = new VertexEffectRotate( new Static1D(90), axisX, center0 );
+    VertexEffect effect3 = new VertexEffectScale ( new Static3D(1,-1,1) );
+    VertexEffect effect4 = new VertexEffectMove  ( new Static3D(3*E/2,E*(SQ3/2)-3*F,0) );
+    VertexEffect effect5 = new VertexEffectRotate( new Static1D(+90), axisY, center1 );
+    VertexEffect effect6 = new VertexEffectScale ( new Static3D(-1,1,1) );
+    VertexEffect effect7 = new VertexEffectRotate( new Static1D( 45), axisX, center1 );
+    VertexEffect effect8 = new VertexEffectRotate( angle1           , axisZ, center1 );
+    VertexEffect effect9 = new VertexEffectRotate( angle2           , axisZ, center1 );
 
     effect0.setMeshAssociation(15,-1);  // apply to meshes 0,1,2,3
     effect1.setMeshAssociation( 3,-1);  // apply to meshes 0,1
@@ -781,10 +626,6 @@ public class CubitFactory
     effect7.setMeshAssociation(12,-1);  // apply to meshes 2,3
     effect8.setMeshAssociation( 4,-1);  // apply to mesh 2
     effect9.setMeshAssociation( 8,-1);  // apply to mesh 3
-    effect10.setMeshAssociation(15,-1); // apply to meshes 0,1,2,3
-    effect11.setMeshAssociation(15,-1); // apply to meshes 0,1,2,3
-    effect12.setMeshAssociation(15,-1); // apply to meshes 0,1,2,3
-    effect13.setMeshAssociation(15,-1); // apply to meshes 0,1,2,3
 
     mesh.apply(effect0);
     mesh.apply(effect1);
@@ -796,10 +637,15 @@ public class CubitFactory
     mesh.apply(effect7);
     mesh.apply(effect8);
     mesh.apply(effect9);
-    mesh.apply(effect10);
-    mesh.apply(effect11);
-    mesh.apply(effect12);
-    mesh.apply(effect13);
+
+    Static3D roundingCenter = new Static3D(0.0f, -1.5f*F, -1.5f*F);
+
+    Static3D[] verticesRound = new Static3D[4];
+    verticesRound[0] = new Static3D(     0,-3*F,    0 );
+    verticesRound[1] = new Static3D(     0,   0, -3*F );
+    verticesRound[2] = new Static3D(  -3*F,   0,    0 );
+    verticesRound[3] = new Static3D(  +3*F,   0,    0 );
+    roundCorners(mesh,roundingCenter,verticesRound,0.10f,0.40f);
 
     mesh.mergeEffComponents();
 
@@ -861,41 +707,16 @@ public class CubitFactory
     Static3D move1  = new Static3D(-E/4,-E/4,0);
     Static3D move2  = new Static3D(-0.25f,(-1.0f/6)-0.25f,-0.25f);
 
-    float d0 =-0.04f;
-    float d1 = 0.04f;
-    float r0 = 0.15f;
-    float r1 = 0.10f;
-
-    Static3D vec0   = new Static3D(d0*(+SQ3/3),d0*(+SQ3/3),d0*(+SQ3/3));
-    Static3D vec1   = new Static3D(d1*(+SQ3/3),d1*(-SQ3/3),d1*(-SQ3/3));
-    Static3D vec2   = new Static3D(d1*(-SQ3/3),d1*(+SQ3/3),d1*(-SQ3/3));
-    Static3D vec3   = new Static3D(d1*(-SQ3/3),d1*(-SQ3/3),d1*(+SQ3/3));
-
-    Static1D radius = new Static1D(0.5f);
-
-    Static3D cent0  = new Static3D( 0.0f, 0.0f, 0.0f);
-    Static3D cent1  = new Static3D(-0.5f, 0.0f, 0.0f);
-    Static3D cent2  = new Static3D( 0.0f,-0.5f, 0.0f);
-    Static3D cent3  = new Static3D( 0.0f, 0.0f,-0.5f);
-
-    Static4D reg0   = new Static4D(0,0,0,r0);
-    Static4D reg1   = new Static4D(0,0,0,r1);
-
-    VertexEffectMove   effect0 = new VertexEffectMove(move1);
-    VertexEffectScale  effect1 = new VertexEffectScale(new Static3D(1,1,-1));
-    VertexEffectRotate effect2 = new VertexEffectRotate(angle1,axisX,center1);
-    VertexEffectRotate effect3 = new VertexEffectRotate(angle2,axisY,center1);
-    VertexEffectMove   effect4 = new VertexEffectMove(move2);
-    VertexEffectRotate effect5 = new VertexEffectRotate(angle1,axisX,center2);
-    VertexEffectRotate effect6 = new VertexEffectRotate(angle3,axisY,center2);
-    VertexEffectRotate effect7 = new VertexEffectRotate(angle4,axis0,center2);
-    VertexEffectRotate effect8 = new VertexEffectRotate(angle5,axis1,center2);
-    VertexEffectRotate effect9 = new VertexEffectRotate(angle6,axis1,center2);
-
-    VertexEffectDeform effect10= new VertexEffectDeform(vec0,radius,cent0,reg0);
-    VertexEffectDeform effect11= new VertexEffectDeform(vec1,radius,cent1,reg1);
-    VertexEffectDeform effect12= new VertexEffectDeform(vec2,radius,cent2,reg1);
-    VertexEffectDeform effect13= new VertexEffectDeform(vec3,radius,cent3,reg1);
+    VertexEffect effect0 = new VertexEffectMove(move1);
+    VertexEffect effect1 = new VertexEffectScale(new Static3D(1,1,-1));
+    VertexEffect effect2 = new VertexEffectRotate(angle1,axisX,center1);
+    VertexEffect effect3 = new VertexEffectRotate(angle2,axisY,center1);
+    VertexEffect effect4 = new VertexEffectMove(move2);
+    VertexEffect effect5 = new VertexEffectRotate(angle1,axisX,center2);
+    VertexEffect effect6 = new VertexEffectRotate(angle3,axisY,center2);
+    VertexEffect effect7 = new VertexEffectRotate(angle4,axis0,center2);
+    VertexEffect effect8 = new VertexEffectRotate(angle5,axis1,center2);
+    VertexEffect effect9 = new VertexEffectRotate(angle6,axis1,center2);
 
     effect0.setMeshAssociation( 7,-1);  // meshes 0,1,2
     effect1.setMeshAssociation( 6,-1);  // meshes 1,2
@@ -908,11 +729,6 @@ public class CubitFactory
     effect8.setMeshAssociation(16,-1);  // mesh 4
     effect9.setMeshAssociation(32,-1);  // mesh 5
 
-    effect10.setMeshAssociation(63,-1); // all meshes
-    effect11.setMeshAssociation(63,-1); // all meshes
-    effect12.setMeshAssociation(63,-1); // all meshes
-    effect13.setMeshAssociation(63,-1); // all meshes
-
     mesh.apply(effect0);
     mesh.apply(effect1);
     mesh.apply(effect2);
@@ -924,10 +740,17 @@ public class CubitFactory
     mesh.apply(effect8);
     mesh.apply(effect9);
 
-    mesh.apply(effect10);
-    mesh.apply(effect11);
-    mesh.apply(effect12);
-    mesh.apply(effect13);
+    Static3D roundingCenter = new Static3D(-E/2,-E/2,-E/2);
+
+    Static3D[] verticesType1 = new Static3D[1];
+    verticesType1[0] = new Static3D(0.0f,0.0f,0.0f);
+    roundCorners(mesh,roundingCenter,verticesType1,0.08f,0.15f);
+
+    Static3D[] verticesType2 = new Static3D[3];
+    verticesType2[0] = new Static3D(-E, 0, 0);
+    verticesType2[1] = new Static3D( 0,-E, 0);
+    verticesType2[2] = new Static3D( 0, 0,-E);
+    roundCorners(mesh,roundingCenter,verticesType2,0.10f,0.20f);
 
     mesh.mergeEffComponents();
 
@@ -984,8 +807,8 @@ public class CubitFactory
 
     MeshBase mesh = new MeshJoined(meshes);
 
-    Static3D move0  = new Static3D(-1.0f/8, -1.0f/8, 0);
-    Static3D move1  = new Static3D(-(SQ2/24)-1.0f/4, -(SQ2/24)-1.0f/4, 0);
+    Static3D move0  = new Static3D(-E/4, -E/4, 0);
+    Static3D move1  = new Static3D(-(SQ2/24)-E/2, -(SQ2/24)-E/2, 0);
     Static3D move2  = new Static3D(-E/2, F/3, 0);
     Static3D move3  = new Static3D(+E/2, F/3, 0);
     Static3D move4  = new Static3D(+E/3,+E/3, 0);
@@ -998,40 +821,19 @@ public class CubitFactory
     Static3D axisZ  = new Static3D(0,0,1);
     Static3D axis1  = new Static3D(1,-1,0);
     Static3D center = new Static3D(0,0,0);
-    Static3D center1= new Static3D(-0.25f,-0.25f,0);
-
-    float d0 =-0.03f;
-    float d1 =-0.04f;
-    float r0 = 0.15f;
-    float r1 = 0.10f;
-
-    Static3D vec0   = new Static3D(d0*(+SQ3/3),d0*(+SQ3/3),d0*(+SQ3/3));
-    Static3D vec1   = new Static3D(d1*(-SQ3/3),d1*(+SQ3/3),d1*(+SQ3/3));
-    Static3D vec2   = new Static3D(d1*(+SQ3/3),d1*(-SQ3/3),d1*(+SQ3/3));
-
-    Static1D radius = new Static1D(0.5f);
-
-    Static3D cent0  = new Static3D( 0.0f, 0.0f, 0.0f);
-    Static3D cent1  = new Static3D(-0.5f, 0.0f, 0.0f);
-    Static3D cent2  = new Static3D( 0.0f,-0.5f, 0.0f);
-
-    Static4D reg0   = new Static4D(0,0,0,r0);
-    Static4D reg1   = new Static4D(0,0,0,r1);
-
-    VertexEffectMove   effect0 = new VertexEffectMove(move0);
-    VertexEffectRotate effect1 = new VertexEffectRotate(angle1, axisZ, center);
-    VertexEffectMove   effect2 = new VertexEffectMove(move1);
-    VertexEffectRotate effect3 = new VertexEffectRotate(angle2, axis1, center1);
-    VertexEffectMove   effect4 = new VertexEffectMove(move2);
-    VertexEffectMove   effect5 = new VertexEffectMove(move3);
-    VertexEffectRotate effect6 = new VertexEffectRotate(angle3, axisZ, center);
-    VertexEffectRotate effect7 = new VertexEffectRotate(angle4, axisX, center);
-    VertexEffectRotate effect8 = new VertexEffectRotate(angle1, axisY, center);
-    VertexEffectScale  effect9 = new VertexEffectScale(0);
-    VertexEffectDeform effect10= new VertexEffectDeform(vec0,radius,cent0,reg0);
-    VertexEffectDeform effect11= new VertexEffectDeform(vec1,radius,cent1,reg1);
-    VertexEffectDeform effect12= new VertexEffectDeform(vec2,radius,cent2,reg1);
-    VertexEffectMove   effect13= new VertexEffectMove(move4);
+    Static3D center1= new Static3D(-E/2,-E/2,0);
+
+    VertexEffect effect0 = new VertexEffectMove(move0);
+    VertexEffect effect1 = new VertexEffectRotate(angle1, axisZ, center);
+    VertexEffect effect2 = new VertexEffectMove(move1);
+    VertexEffect effect3 = new VertexEffectRotate(angle2, axis1, center1);
+    VertexEffect effect4 = new VertexEffectMove(move2);
+    VertexEffect effect5 = new VertexEffectMove(move3);
+    VertexEffect effect6 = new VertexEffectRotate(angle3, axisZ, center);
+    VertexEffect effect7 = new VertexEffectRotate(angle4, axisX, center);
+    VertexEffect effect8 = new VertexEffectRotate(angle1, axisY, center);
+    VertexEffect effect9 = new VertexEffectMove(move4);
+    VertexEffect effect10= new VertexEffectScale(0);
 
     effect0.setMeshAssociation( 1,-1);  // mesh 0
     effect1.setMeshAssociation( 2,-1);  // mesh 1
@@ -1042,11 +844,8 @@ public class CubitFactory
     effect6.setMeshAssociation( 8,-1);  // mesh 3
     effect7.setMeshAssociation( 4,-1);  // mesh 2
     effect8.setMeshAssociation( 8,-1);  // mesh 3
-    effect9.setMeshAssociation(48,-1);  // meshes 4,5
-    effect10.setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect11.setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect12.setMeshAssociation(15,-1); // meshes 0,1,2,3
-    effect13.setMeshAssociation(15,-1); // meshes 0,1,2,3
+    effect9.setMeshAssociation(15,-1);  // meshes 0,1,2,3
+    effect10.setMeshAssociation(48,-1); // meshes 4,5
 
     mesh.apply(effect0);
     mesh.apply(effect1);
@@ -1059,55 +858,25 @@ public class CubitFactory
     mesh.apply(effect8);
     mesh.apply(effect9);
     mesh.apply(effect10);
-    mesh.apply(effect11);
-    mesh.apply(effect12);
-    mesh.apply(effect13);
 
-    mesh.mergeEffComponents();
+    Static3D roundingCenter = new Static3D(-E/2 + E/3,-E/2 + E/3,-E/2);
 
-    return mesh;
-    }
+    Static3D[] verticesType1 = new Static3D[1];
+    verticesType1[0] = new Static3D(E/3,E/3,0.0f);
+    roundCorners(mesh,roundingCenter,verticesType1,0.06f,0.15f);
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Redi cube
+    Static3D[] verticesType2 = new Static3D[2];
+    verticesType2[0] = new Static3D(-E+E/3, E/3  , 0);
+    verticesType2[1] = new Static3D( E/3  ,-E+E/3, 0);
+    roundCorners(mesh,roundingCenter,verticesType2,0.10f,0.20f);
 
-  private void roundCorners(MeshBase mesh)
-    {
-    float cX = 0.0f;
-    float cY = -0.75f;
-    float cZ = -0.75f;
-
-    float d1=-0.05f;
-    float d2=-0.05f;
-    float r0= 0.20f;
-    float r1= 0.20f;
-
-    Static3D vert0 = new Static3D( 0.5f, 0.0f, 0.0f);
-    Static3D vert1 = new Static3D(-0.5f, 0.0f, 0.0f);
-    Static3D vert2 = new Static3D( 0.0f, 0.0f,-1.5f);
-    Static3D vert3 = new Static3D( 0.0f,-1.5f, 0.0f);
-
-    Static3D vec0 = new Static3D( d1*(+0.5f-cX), d1*(+0.0f-cY), d1*(+0.0f-cZ));
-    Static3D vec1 = new Static3D( d1*(-0.5f-cX), d1*(+0.0f-cY), d1*(+0.0f-cZ));
-    Static3D vec2 = new Static3D( d2*(+0.0f-cX), d2*(+0.0f-cY), d2*(-1.5f-cZ));
-    Static3D vec3 = new Static3D( d2*(+0.0f-cX), d2*(-1.5f-cY), d2*(+0.0f-cZ));
-
-    Static1D radius = new Static1D(0.5f);
-    Static4D reg0   = new Static4D(0,0,0,r0);
-    Static4D reg1   = new Static4D(0,0,0,r1);
-
-    VertexEffect effect0= new VertexEffectDeform(vec0,radius,vert0,reg0);
-    VertexEffect effect1= new VertexEffectDeform(vec1,radius,vert1,reg0);
-    VertexEffect effect2= new VertexEffectDeform(vec2,radius,vert2,reg1);
-    VertexEffect effect3= new VertexEffectDeform(vec3,radius,vert3,reg1);
+    mesh.mergeEffComponents();
 
-    mesh.apply(effect0);
-    mesh.apply(effect1);
-    mesh.apply(effect2);
-    mesh.apply(effect3);
+    return mesh;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
+// Redi cube
 
   MeshBase createRediEdgeMesh()
     {
@@ -1215,7 +984,14 @@ public class CubitFactory
     mesh.apply(effect10);
     mesh.apply(effect11);
 
-    roundCorners(mesh);
+    Static3D center = new Static3D(0.0f,-0.75f,-0.75f);
+    Static3D[] vertices = new Static3D[4];
+    vertices[0] = new Static3D( 0.5f, 0.0f, 0.0f);
+    vertices[1] = new Static3D(-0.5f, 0.0f, 0.0f);
+    vertices[2] = new Static3D(0.0f, 0.0f,-1.5f);
+    vertices[3] = new Static3D(0.0f,-1.5f, 0.0f);
+
+    roundCorners(mesh,center,vertices,0.06f,0.20f);
 
     mesh.mergeEffComponents();
 
@@ -1227,6 +1003,7 @@ public class CubitFactory
   MeshBase createRediCornerMesh()
     {
     final int MESHES=6;
+    MeshBase[] meshes = new MeshBase[MESHES];
 
     float C = 0.027f;
     float D = 0.027f;
@@ -1240,7 +1017,6 @@ public class CubitFactory
                                   0.50f   , D*1.5f,
                                   0.0f    , D*1.75f };
 
-    MeshBase[] meshes = new MeshBase[MESHES];
     meshes[0] = new MeshPolygon(vertices1,bands1,2,2);
     meshes[0].setEffectAssociation(0,1,0);
     meshes[1] = meshes[0].copy(true);
@@ -1273,31 +1049,6 @@ public class CubitFactory
     Static1D angle270= new Static1D(270);
     Static1D angle45 = new Static1D(-45);
 
-    float d1 = 1.0f;
-    float d2 =-0.05f;
-    float d3 = 0.12f;
-
-    Static3D dCen0 = new Static3D( d1*(+0.5f), d1*(+0.5f), d1*(+0.5f) );
-    Static3D dCen1 = new Static3D( d1*(+0.5f), d1*(+0.5f), d1*(-0.5f) );
-    Static3D dCen2 = new Static3D( d1*(+0.5f), d1*(-0.5f), d1*(+0.5f) );
-    Static3D dCen3 = new Static3D( d1*(+0.5f), d1*(-0.5f), d1*(-0.5f) );
-    Static3D dCen4 = new Static3D( d1*(-0.5f), d1*(+0.5f), d1*(+0.5f) );
-    Static3D dCen5 = new Static3D( d1*(-0.5f), d1*(+0.5f), d1*(-0.5f) );
-    Static3D dCen6 = new Static3D( d1*(-0.5f), d1*(-0.5f), d1*(+0.5f) );
-    Static3D dCen7 = new Static3D( d1*(-0.5f), d1*(-0.5f), d1*(-0.5f) );
-
-    Static3D dVec0 = new Static3D( d2*(+0.5f), d2*(+0.5f), d2*(+0.5f) );
-    Static3D dVec1 = new Static3D( d2*(+0.5f), d2*(+0.5f), d2*(-0.5f) );
-    Static3D dVec2 = new Static3D( d2*(+0.5f), d2*(-0.5f), d2*(+0.5f) );
-    Static3D dVec3 = new Static3D( d2*(+0.5f), d2*(-0.5f), d2*(-0.5f) );
-    Static3D dVec4 = new Static3D( d2*(-0.5f), d2*(+0.5f), d2*(+0.5f) );
-    Static3D dVec5 = new Static3D( d2*(-0.5f), d2*(+0.5f), d2*(-0.5f) );
-    Static3D dVec6 = new Static3D( d2*(-0.5f), d2*(-0.5f), d2*(+0.5f) );
-    Static3D dVec7 = new Static3D( d2*(-0.5f), d2*(-0.5f), d2*(-0.5f) );
-
-    Static4D dReg  = new Static4D(0,0,0,d3);
-    Static1D dRad  = new Static1D(1);
-
     VertexEffect effect0 = new VertexEffectMove(new Static3D(0,0,+0.5f));
     VertexEffect effect1 = new VertexEffectRotate( angle270, axisX, center );
     VertexEffect effect2 = new VertexEffectRotate( angle90 , axisY, center );
@@ -1305,15 +1056,6 @@ public class CubitFactory
     VertexEffect effect4 = new VertexEffectRotate( angle90 , axisY, center );
     VertexEffect effect5 = new VertexEffectRotate( angle270, axisZ, center );
 
-    VertexEffect effect6 = new VertexEffectDeform(dVec0, dRad, dCen0, dReg);
-    VertexEffect effect7 = new VertexEffectDeform(dVec1, dRad, dCen1, dReg);
-    VertexEffect effect8 = new VertexEffectDeform(dVec2, dRad, dCen2, dReg);
-    VertexEffect effect9 = new VertexEffectDeform(dVec3, dRad, dCen3, dReg);
-    VertexEffect effect10= new VertexEffectDeform(dVec4, dRad, dCen4, dReg);
-    VertexEffect effect11= new VertexEffectDeform(dVec5, dRad, dCen5, dReg);
-    VertexEffect effect12= new VertexEffectDeform(dVec6, dRad, dCen6, dReg);
-    VertexEffect effect13= new VertexEffectDeform(dVec7, dRad, dCen7, dReg);
-
     effect0.setMeshAssociation( 7,-1);  // 0,1,2
     effect1.setMeshAssociation( 2,-1);  // 1
     effect2.setMeshAssociation( 4,-1);  // 2
@@ -1328,14 +1070,17 @@ public class CubitFactory
     mesh.apply(effect4);
     mesh.apply(effect5);
 
-    mesh.apply(effect6);
-    mesh.apply(effect7);
-    mesh.apply(effect8);
-    mesh.apply(effect9);
-    mesh.apply(effect10);
-    mesh.apply(effect11);
-    mesh.apply(effect12);
-    mesh.apply(effect13);
+    Static3D[] vertices = new Static3D[8];
+    vertices[0] = new Static3D(+0.5f,+0.5f,+0.5f);
+    vertices[1] = new Static3D(+0.5f,+0.5f,-0.5f);
+    vertices[2] = new Static3D(+0.5f,-0.5f,+0.5f);
+    vertices[3] = new Static3D(+0.5f,-0.5f,-0.5f);
+    vertices[4] = new Static3D(-0.5f,+0.5f,+0.5f);
+    vertices[5] = new Static3D(-0.5f,+0.5f,-0.5f);
+    vertices[6] = new Static3D(-0.5f,-0.5f,+0.5f);
+    vertices[7] = new Static3D(-0.5f,-0.5f,-0.5f);
+
+    roundCorners(mesh,center,vertices,0.06f,0.12f);
 
     mesh.mergeEffComponents();
 
