From 1509290db600f238dad773f940193680a9be9fe6 Mon Sep 17 00:00:00 2001 From: Kevin Harrington Date: Wed, 21 Jan 2026 17:20:57 -0500 Subject: [PATCH 1/3] adding basic parameter system --- .../scripting/cadoodle/CaDoodleFile.java | 13 ++- .../cadoodle/CaDoodleParameters.java | 109 ++++++++++++++++++ 2 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java diff --git a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleFile.java b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleFile.java index 9a8797f4..62f24952 100644 --- a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleFile.java +++ b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleFile.java @@ -78,9 +78,11 @@ public class CaDoodleFile { @Expose(serialize = true, deserialize = true) private TransformNR rulerLocation = new TransformNR(); @Expose(serialize = true, deserialize = true) - - // Non Serialised private variables private TransformNR workplane = new TransformNR(); + @Expose(serialize = true, deserialize = true) + private CaDoodleParameters parameters; + + private File self; // @Expose (serialize = false, deserialize = false) // private List currentState = new ArrayList(); @@ -1516,4 +1518,11 @@ public ThumbnailImage getImageEngine() { private void setImageEngine(ThumbnailImage imageEngine) { this.imageEngine = imageEngine; } + + public CaDoodleParameters getParameters() { + if(parameters==null) + parameters=new CaDoodleParameters(); + parameters.setDb(csgDBinstance); + return parameters; + } } diff --git a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java new file mode 100644 index 00000000..495904c8 --- /dev/null +++ b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java @@ -0,0 +1,109 @@ +package com.neuronrobotics.bowlerstudio.scripting.cadoodle; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import com.google.gson.annotations.Expose; +import com.neuronrobotics.bowlerstudio.scripting.ScriptingEngine; + +import eu.mihosoft.vrl.v3d.parametrics.CSGDatabaseInstance; + +public class CaDoodleParameters { + @Expose(serialize = true, deserialize = true) + private ArrayList> params; + + private HashMap values = null; + + private CSGDatabaseInstance db; + + public String getString(String key) { + for (Map.Entry m : getParams()) { + if (m.getKey().contentEquals(key)) + return m.getValue(); + } + throw new NumberFormatException(); + } + public void delete(String key) { + Map.Entry set = null; + for (Map.Entry m : getParams()) { + if (m.getKey().contentEquals(key)) { + set = m; + break; + } + } + if(set!=null) + params.remove(set); + } + public void set(String key, Object value) { + Map.Entry set = null; + for (Map.Entry m : getParams()) { + if (m.getKey().contentEquals(key)) { + set = m; + break; + } + } + if (set == null) { + set =Map.entry(key,value.toString()); + getParams().add(set); + } + set.setValue(value.toString()); + values=null; + } + public ArrayList keys(){ + ArrayList keys=new ArrayList(); + for(Entry e:getParams()) { + keys.add(e.getKey()); + } + return keys; + } + private ArrayList> getParams() { + if (params == null) { + params = new ArrayList>(); + } + return params; + } + + public double getValue(String key) throws Exception { + return getValues().get(key).doubleValue(); + } + + private HashMap getValues() throws Exception { + if (values == null) { + String code = "HashMap numbers = new HashMap<>()\n"; + String vars = ""; + String equs = ""; + + for (Map.Entry m : getParams()) { + // System.out.println(line); + String value = m.getValue(); + String key =m.getKey(); + String reconstructed = key + "=" + value; + try { + Double.parseDouble(value); + vars += reconstructed + "\n"; + vars += "numbers.put(\"" + key + "\"," + key + ");\n"; + } catch (NumberFormatException ex) { + equs += reconstructed + "\n"; + equs += "numbers.put(\"" + key + "\"," + key + ");\n"; + } + } + code += vars; + code += equs; + code += "return numbers"; + // println code + values = (HashMap) ScriptingEngine.inlineScriptStringRun(getDb(), code, null, "Groovy"); + } + return values; + } + + public CSGDatabaseInstance getDb() { + return db; + } + + public void setDb(CSGDatabaseInstance db) { + this.db = db; + } + +} From f11bc6576592566d5d62acaf98fb3deaeb62567c Mon Sep 17 00:00:00 2001 From: Kevin Harrington Date: Wed, 21 Jan 2026 18:01:06 -0500 Subject: [PATCH 2/3] Adding math to the parameters --- .../cadoodle/CaDoodleParameters.java | 38 +++++++++---------- .../junit/bowler/CaDoodleWorkflowTest.java | 9 +++++ 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java index 495904c8..04501afd 100644 --- a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java +++ b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java @@ -1,9 +1,8 @@ package com.neuronrobotics.bowlerstudio.scripting.cadoodle; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; import com.google.gson.annotations.Expose; import com.neuronrobotics.bowlerstudio.scripting.ScriptingEngine; @@ -12,22 +11,22 @@ public class CaDoodleParameters { @Expose(serialize = true, deserialize = true) - private ArrayList> params; + private ArrayList> params; private HashMap values = null; private CSGDatabaseInstance db; public String getString(String key) { - for (Map.Entry m : getParams()) { + for (AbstractMap.SimpleEntry m : getParams()) { if (m.getKey().contentEquals(key)) return m.getValue(); } throw new NumberFormatException(); } public void delete(String key) { - Map.Entry set = null; - for (Map.Entry m : getParams()) { + AbstractMap.SimpleEntry set = null; + for (AbstractMap.SimpleEntry m : getParams()) { if (m.getKey().contentEquals(key)) { set = m; break; @@ -37,15 +36,15 @@ public void delete(String key) { params.remove(set); } public void set(String key, Object value) { - Map.Entry set = null; - for (Map.Entry m : getParams()) { + AbstractMap.SimpleEntry set = null; + for (AbstractMap.SimpleEntry m : getParams()) { if (m.getKey().contentEquals(key)) { set = m; break; } } if (set == null) { - set =Map.entry(key,value.toString()); + set =new AbstractMap.SimpleEntry<>(key,value.toString()); getParams().add(set); } set.setValue(value.toString()); @@ -53,40 +52,41 @@ public void set(String key, Object value) { } public ArrayList keys(){ ArrayList keys=new ArrayList(); - for(Entry e:getParams()) { + for(AbstractMap.SimpleEntry e:getParams()) { keys.add(e.getKey()); } return keys; } - private ArrayList> getParams() { + private ArrayList> getParams() { if (params == null) { - params = new ArrayList>(); + params = new ArrayList>(); } return params; } public double getValue(String key) throws Exception { - return getValues().get(key).doubleValue(); + Number double1 = getValues().get(key); + return double1.doubleValue(); } private HashMap getValues() throws Exception { if (values == null) { - String code = "HashMap numbers = new HashMap<>()\n"; + String code = "HashMap numbers = new HashMap()\n"; String vars = ""; String equs = ""; - for (Map.Entry m : getParams()) { + for (AbstractMap.SimpleEntry m : getParams()) { // System.out.println(line); String value = m.getValue(); - String key =m.getKey(); - String reconstructed = key + "=" + value; + String variableName =m.getKey(); + String reconstructed = variableName + "=" + value; try { Double.parseDouble(value); vars += reconstructed + "\n"; - vars += "numbers.put(\"" + key + "\"," + key + ");\n"; + vars += "numbers.put(\"" + variableName + "\"," + variableName + ");\n"; } catch (NumberFormatException ex) { equs += reconstructed + "\n"; - equs += "numbers.put(\"" + key + "\"," + key + ");\n"; + equs += "numbers.put(\"" + variableName + "\"," + variableName + ");\n"; } } code += vars; diff --git a/test/java/src/junit/bowler/CaDoodleWorkflowTest.java b/test/java/src/junit/bowler/CaDoodleWorkflowTest.java index cf6cf8f4..8ee36ba1 100644 --- a/test/java/src/junit/bowler/CaDoodleWorkflowTest.java +++ b/test/java/src/junit/bowler/CaDoodleWorkflowTest.java @@ -28,6 +28,7 @@ import com.neuronrobotics.bowlerstudio.scripting.cadoodle.AddFromScript; import com.neuronrobotics.bowlerstudio.scripting.cadoodle.CaDoodleFile; import com.neuronrobotics.bowlerstudio.scripting.cadoodle.CaDoodleOperation; +import com.neuronrobotics.bowlerstudio.scripting.cadoodle.CaDoodleParameters; import com.neuronrobotics.bowlerstudio.scripting.cadoodle.Group; import com.neuronrobotics.bowlerstudio.scripting.cadoodle.ModelNotes; import com.neuronrobotics.bowlerstudio.scripting.cadoodle.MoveCenter; @@ -84,6 +85,14 @@ public void test() throws Exception { fail("Names must be unique!"); com.neuronrobotics.sdk.common.Log.error("Name one : "+nameOne ); com.neuronrobotics.sdk.common.Log.error("Name two : "+nameTwo ); + CaDoodleParameters params = cf.getParameters(); + params.set("var1", 10.0); + params.set("var2", 1.5); + params.set("var3", "var1 + var2 + 0.25"); + params.set("var4", "(var3 / var2) + 0.25"); + for(String k:params.keys()){ + com.neuronrobotics.sdk.common.Log.debug("Key "+k+" value = "+params.getValue(k)); + } double distaance =10; MoveCenter move = new MoveCenter() .setLocation(new TransformNR(distaance,0,0)) From f4ba4804911072b93ddcce79361a0f999b146682 Mon Sep 17 00:00:00 2001 From: Kevin Harrington Date: Wed, 21 Jan 2026 18:48:13 -0500 Subject: [PATCH 3/3] Adding parameter checks to the unit test --- .../scripting/cadoodle/CaDoodleParameter.java | 29 +++++++++++++++++++ .../cadoodle/CaDoodleParameters.java | 22 +++++++------- .../junit/bowler/CaDoodleWorkflowTest.java | 15 ++++++++-- 3 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameter.java diff --git a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameter.java b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameter.java new file mode 100644 index 00000000..e6f1b24c --- /dev/null +++ b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameter.java @@ -0,0 +1,29 @@ +package com.neuronrobotics.bowlerstudio.scripting.cadoodle; + +import com.google.gson.annotations.Expose; + +public class CaDoodleParameter { + @Expose(serialize = true, deserialize = true) + private String key; + @Expose(serialize = true, deserialize = true) + private String value; + + public CaDoodleParameter(String key, String string) { + this.key = key; + // TODO Auto-generated constructor stub + this.setValue(string); + } + + public String getKey() { + return key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java index 04501afd..a0f07081 100644 --- a/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java +++ b/src/main/java/com/neuronrobotics/bowlerstudio/scripting/cadoodle/CaDoodleParameters.java @@ -11,22 +11,22 @@ public class CaDoodleParameters { @Expose(serialize = true, deserialize = true) - private ArrayList> params; + private ArrayList params; private HashMap values = null; private CSGDatabaseInstance db; public String getString(String key) { - for (AbstractMap.SimpleEntry m : getParams()) { + for (CaDoodleParameter m : getParams()) { if (m.getKey().contentEquals(key)) return m.getValue(); } throw new NumberFormatException(); } public void delete(String key) { - AbstractMap.SimpleEntry set = null; - for (AbstractMap.SimpleEntry m : getParams()) { + CaDoodleParameter set = null; + for (CaDoodleParameter m : getParams()) { if (m.getKey().contentEquals(key)) { set = m; break; @@ -36,15 +36,15 @@ public void delete(String key) { params.remove(set); } public void set(String key, Object value) { - AbstractMap.SimpleEntry set = null; - for (AbstractMap.SimpleEntry m : getParams()) { + CaDoodleParameter set = null; + for (CaDoodleParameter m : getParams()) { if (m.getKey().contentEquals(key)) { set = m; break; } } if (set == null) { - set =new AbstractMap.SimpleEntry<>(key,value.toString()); + set =new CaDoodleParameter(key,value.toString()); getParams().add(set); } set.setValue(value.toString()); @@ -52,14 +52,14 @@ public void set(String key, Object value) { } public ArrayList keys(){ ArrayList keys=new ArrayList(); - for(AbstractMap.SimpleEntry e:getParams()) { + for(CaDoodleParameter e:getParams()) { keys.add(e.getKey()); } return keys; } - private ArrayList> getParams() { + private ArrayList getParams() { if (params == null) { - params = new ArrayList>(); + params = new ArrayList(); } return params; } @@ -75,7 +75,7 @@ private HashMap getValues() throws Exception { String vars = ""; String equs = ""; - for (AbstractMap.SimpleEntry m : getParams()) { + for (CaDoodleParameter m : getParams()) { // System.out.println(line); String value = m.getValue(); String variableName =m.getKey(); diff --git a/test/java/src/junit/bowler/CaDoodleWorkflowTest.java b/test/java/src/junit/bowler/CaDoodleWorkflowTest.java index 8ee36ba1..48be09ec 100644 --- a/test/java/src/junit/bowler/CaDoodleWorkflowTest.java +++ b/test/java/src/junit/bowler/CaDoodleWorkflowTest.java @@ -90,8 +90,8 @@ public void test() throws Exception { params.set("var2", 1.5); params.set("var3", "var1 + var2 + 0.25"); params.set("var4", "(var3 / var2) + 0.25"); - for(String k:params.keys()){ - com.neuronrobotics.sdk.common.Log.debug("Key "+k+" value = "+params.getValue(k)); + for(String k:cf.getParameters().keys()){ + com.neuronrobotics.sdk.common.Log.debug("Key "+k+" value = "+cf.getParameters().getValue(k)); } double distaance =10; MoveCenter move = new MoveCenter() @@ -311,8 +311,19 @@ public void test() throws Exception { } System.out.println("Saving"); loaded.save(); + CaDoodleParameters parameters = loaded.getParameters(); + for(String k:parameters.keys()){ + com.neuronrobotics.sdk.common.Log.debug("Key "+k+" value = "+parameters.getValue(k)+" "+parameters.getString(k)); + } + parameters.set("var2", 0.85); + for(String k:parameters.keys()){ + com.neuronrobotics.sdk.common.Log.debug("Key "+k+" value = "+parameters.getValue(k)+" "+parameters.getString(k)); + } + assertEquals(parameters.getValue("var4"), 13.3088235294, 0.0001); loaded.close(); System.out.println("Save finished"); + Thread.sleep(200); + } }