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/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 new file mode 100644 index 00000000..a0f07081 --- /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.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; + +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 (CaDoodleParameter m : getParams()) { + if (m.getKey().contentEquals(key)) + return m.getValue(); + } + throw new NumberFormatException(); + } + public void delete(String key) { + CaDoodleParameter set = null; + for (CaDoodleParameter m : getParams()) { + if (m.getKey().contentEquals(key)) { + set = m; + break; + } + } + if(set!=null) + params.remove(set); + } + public void set(String key, Object value) { + CaDoodleParameter set = null; + for (CaDoodleParameter m : getParams()) { + if (m.getKey().contentEquals(key)) { + set = m; + break; + } + } + if (set == null) { + set =new CaDoodleParameter(key,value.toString()); + getParams().add(set); + } + set.setValue(value.toString()); + values=null; + } + public ArrayList keys(){ + ArrayList keys=new ArrayList(); + for(CaDoodleParameter 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 { + Number double1 = getValues().get(key); + return double1.doubleValue(); + } + + private HashMap getValues() throws Exception { + if (values == null) { + String code = "HashMap numbers = new HashMap()\n"; + String vars = ""; + String equs = ""; + + for (CaDoodleParameter m : getParams()) { + // System.out.println(line); + String value = m.getValue(); + String variableName =m.getKey(); + String reconstructed = variableName + "=" + value; + try { + Double.parseDouble(value); + vars += reconstructed + "\n"; + vars += "numbers.put(\"" + variableName + "\"," + variableName + ");\n"; + } catch (NumberFormatException ex) { + equs += reconstructed + "\n"; + equs += "numbers.put(\"" + variableName + "\"," + variableName + ");\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; + } + +} diff --git a/test/java/src/junit/bowler/CaDoodleWorkflowTest.java b/test/java/src/junit/bowler/CaDoodleWorkflowTest.java index cf6cf8f4..48be09ec 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:cf.getParameters().keys()){ + com.neuronrobotics.sdk.common.Log.debug("Key "+k+" value = "+cf.getParameters().getValue(k)); + } double distaance =10; MoveCenter move = new MoveCenter() .setLocation(new TransformNR(distaance,0,0)) @@ -302,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); + } }