Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv4152/src/net/sourceforge/bprocessor/gl/tool
Modified Files:
SpaceTool.java
Log Message:
new scripting capabilities
Index: SpaceTool.java
===================================================================
RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SpaceTool.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -d -r1.32 -r1.33
*** SpaceTool.java 11 Sep 2006 22:57:21 -0000 1.32
--- SpaceTool.java 12 Sep 2006 09:25:48 -0000 1.33
***************
*** 18,21 ****
--- 18,22 ----
import java.util.Arrays;
import java.util.Collection;
+ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
***************
*** 40,44 ****
--- 41,47 ----
import net.sourceforge.bprocessor.model.Geometry;
import net.sourceforge.bprocessor.model.constraints.OffsetConstraint;
+ import net.sourceforge.bprocessor.model.evaluator.Environment;
import net.sourceforge.bprocessor.model.evaluator.Function;
+ import net.sourceforge.bprocessor.model.evaluator.Invokable;
import net.sourceforge.bprocessor.model.modellor.LayerModellor;
import net.sourceforge.bprocessor.model.modellor.Modellor;
***************
*** 542,545 ****
--- 545,555 ----
/**
+ * Builtin function
+ */
+ public abstract class Builtin implements Invokable {
+
+ }
+
+ /**
* Evaluate the string
* @param value String
***************
*** 554,560 ****
try {
parser.expression(function);
! Object result = function.evaluate();
glv.setLengthValue(result.toString());
typing = false;
} catch (Exception error) {
Project.info(error);
--- 564,612 ----
try {
parser.expression(function);
!
! HashMap globals = Project.getInstance().getGlobals().environment();
! HashMap functions = new HashMap();
! functions.put("cos", new Builtin() {
! public Object evaluate(Environment env) {
! Double argument = (Double) env.get(0);
! return new Double(Math.cos(argument.doubleValue()));
! }
! });
! functions.put("vertex", new Builtin() {
! public Object evaluate(Environment env) {
! Double z = (Double) env.get(0);
! Double y = (Double) env.get(1);
! Double x = (Double) env.get(2);
! Vertex result = new Vertex(x.doubleValue(), y.doubleValue(), z.doubleValue());
! return result;
! }
! });
! functions.put("edge", new Builtin() {
! public Object evaluate(Environment env) {
! Vertex from = (Vertex) env.get(1);
! Vertex to = (Vertex) env.get(0);
! Edge result = new Edge(from, to);
! return result;
! }
! });
!
! Environment env = new Environment(functions, globals, null);
!
! Object result = function.evaluate(env);
!
!
! if (result instanceof Vertex) {
! result = Geometry.insertVertex((Vertex)result, true);
! Selection.primary().set(result);
! }
!
! if (result instanceof Edge) {
! result = Geometry.insertEdge((Edge)result, true);
! Selection.primary().set(result);
! }
!
glv.setLengthValue(result.toString());
typing = false;
+
} catch (Exception error) {
Project.info(error);
|