commit e5f796bccf2a5601778d8a29b1346a0904ae39ff
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Jan 8 03:36:05 2023 +0100

    Major change in JSOn file format:
    
    replace the old (corners,centers) system with a list of VertexEffects which are applied to each cubit variant.

diff --git a/src/main/java/org/distorted/library/effect/VertexEffect.java b/src/main/java/org/distorted/library/effect/VertexEffect.java
index 8497d4a..c9792d5 100644
--- a/src/main/java/org/distorted/library/effect/VertexEffect.java
+++ b/src/main/java/org/distorted/library/effect/VertexEffect.java
@@ -21,7 +21,10 @@
 package org.distorted.library.effect;
 
 import org.distorted.library.effectqueue.EffectQueue;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
+import org.distorted.library.type.Static5D;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -253,4 +256,78 @@ public abstract class VertexEffect extends Effect
       queue.setAssociation(id);
       }
     }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+/**
+ * Return a constructed VertexEffect based on its name, the 5 variables, center & region.
+ */
+  public static VertexEffect constructEffect(String name,float[] vars, float[] center, float[] region)
+    {
+    Static3D staCenter = new Static3D(center[0],center[1],center[2]);
+    Static4D staRegion = new Static4D(region[0],region[1],region[2],region[3]);
+
+    if( name.equals(EffectName.DISTORT.name()) )
+      {
+      Static3D staVars = new Static3D(vars[2],vars[3],vars[4]);
+      return new VertexEffectDistort(staVars,staCenter,staRegion);
+      }
+    if( name.equals(EffectName.DEFORM.name()) )
+      {
+      Static3D staVars   = new Static3D(vars[1],vars[2],vars[3]);
+      Static1D staRadius = new Static1D(vars[4]);
+      return new VertexEffectDeform(staVars,staRadius,staCenter,staRegion);
+      }
+    if( name.equals(EffectName.SINK.name()) )
+      {
+      Static1D staSink = new Static1D(vars[4]);
+      return new VertexEffectSink(staSink,staCenter,staRegion);
+      }
+    if( name.equals(EffectName.PINCH.name()) )
+      {
+      Static3D staVars = new Static3D(vars[2],vars[3],vars[4]);
+      return new VertexEffectPinch(staVars,staCenter,staRegion);
+      }
+    if( name.equals(EffectName.SWIRL.name()) )
+      {
+      Static1D staSwirl = new Static1D(vars[4]);
+      return new VertexEffectSwirl(staSwirl,staCenter,staRegion);
+      }
+    if( name.equals(EffectName.WAVE.name()) )
+      {
+      Static5D staWave = new Static5D(vars[0],vars[1],vars[2],vars[3],vars[4]);
+      return new VertexEffectWave(staWave,staCenter,staRegion);
+      }
+    if( name.equals(EffectName.DISAPPEAR.name()) )
+      {
+      return new VertexEffectDisappear();
+      }
+    if( name.equals(EffectName.VERTEX_MOVE.name()) )
+      {
+      Static3D staVector = new Static3D(vars[2],vars[3],vars[4]);
+      return new VertexEffectMove(staVector);
+      }
+    if( name.equals(EffectName.VERTEX_QUATERNION.name()) )
+      {
+      Static4D staQuat = new Static4D(vars[1],vars[2],vars[3],vars[4]);
+      return new VertexEffectQuaternion(staQuat,staCenter);
+      }
+    if( name.equals(EffectName.VERTEX_ROTATE.name()) )
+      {
+      Static1D staAngle = new Static1D(vars[1]);
+      Static3D staAxis  = new Static3D(vars[2],vars[3],vars[4]);
+      return new VertexEffectRotate(staAngle,staAxis,staCenter);
+      }
+    if( name.equals(EffectName.VERTEX_SCALE.name()) )
+      {
+      Static3D staScale = new Static3D(vars[2],vars[3],vars[4]);
+      return new VertexEffectScale(staScale);
+      }
+    if( name.equals(EffectName.VERTEX_SHEAR.name()) )
+      {
+      Static3D staShear = new Static3D(vars[2],vars[3],vars[4]);
+      return new VertexEffectShear(staShear,staCenter);
+      }
+
+    return null;
+    }
   }
\ No newline at end of file
