[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool AbstractTool.java, 1.120, 1.121 Space
Status: Pre-Alpha
Brought to you by:
henryml
|
From: Michael L. <he...@us...> - 2007-05-16 07:38:00
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv16899/src/net/sourceforge/bprocessor/gl/tool Modified Files: AbstractTool.java SpaceTool.java AbstractPencil.java Log Message: Refactoring of evaluate function Index: SpaceTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/SpaceTool.java,v retrieving revision 1.78 retrieving revision 1.79 diff -C2 -d -r1.78 -r1.79 *** SpaceTool.java 15 May 2007 16:27:29 -0000 1.78 --- SpaceTool.java 16 May 2007 07:37:56 -0000 1.79 *************** *** 12,20 **** import java.awt.event.ActionListener; import java.awt.event.MouseEvent; - import java.io.Reader; - import java.io.StringReader; import java.util.ArrayList; import java.util.Collection; - import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; --- 12,17 ---- *************** *** 30,34 **** import net.sourceforge.bprocessor.gl.GLView; - import net.sourceforge.bprocessor.model.AxisRotate; import net.sourceforge.bprocessor.gui.PopupMenu; import net.sourceforge.bprocessor.gui.actions.SpaceMenuAction; --- 27,30 ---- *************** *** 38,61 **** import net.sourceforge.bprocessor.model.Entity; import net.sourceforge.bprocessor.model.Geometric; - import net.sourceforge.bprocessor.model.IDTransform; import net.sourceforge.bprocessor.model.Mesh; import net.sourceforge.bprocessor.model.Project; - import net.sourceforge.bprocessor.model.Scale; import net.sourceforge.bprocessor.model.Selection; import net.sourceforge.bprocessor.model.Space; import net.sourceforge.bprocessor.model.Surface; - import net.sourceforge.bprocessor.model.Transform; - import net.sourceforge.bprocessor.model.TransformStack; - import net.sourceforge.bprocessor.model.Translate; import net.sourceforge.bprocessor.model.Vertex; import net.sourceforge.bprocessor.model.Geometry; - 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.Cylinder; import net.sourceforge.bprocessor.model.modellor.LayerModellor; import net.sourceforge.bprocessor.model.modellor.Modellor; - import net.sourceforge.bprocessor.parser.ScriptLexer; - import net.sourceforge.bprocessor.parser.ScriptParser; /** --- 34,47 ---- *************** *** 66,74 **** private static Logger log = Logger.getLogger(SpaceTool.class); ! /** TransformStack */ ! private TransformStack transform; ! ! /** ID */ ! private Transform id; /** --- 52,56 ---- private static Logger log = Logger.getLogger(SpaceTool.class); ! /** *************** *** 412,677 **** - /** - * Builtin function - */ - public abstract class Builtin implements Invokable { - - } /** ! * Evaluate the string ! * @param value String ! * @return Result */ public Object evaluate(String value) { ! ! transform = new TransformStack(); ! id = new IDTransform(); ! HashMap<String, Object> globals = Project.getInstance().getGlobals().environment(); ! ! ! globals.put("echo", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! stack.push(env.get(0)); ! } ! }); ! globals.put("cos", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Double argument = (Double) env.get(0); ! stack.push(new Double(Math.cos(argument.doubleValue()))); ! } ! }); ! globals.put("sin", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Double argument = (Double) env.get(0); ! stack.push(new Double(Math.sin(argument.doubleValue()))); ! } ! }); ! globals.put("sqrt", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Double argument = (Double) env.get(0); ! stack.push(new Double(Math.sqrt(argument.doubleValue()))); ! } ! }); ! globals.put("length", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! List argument = (List) env.get(0); ! stack.push(new Double(argument.size())); ! } ! }); ! globals.put("push", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! transform.push(id); ! } ! }); ! globals.put("pop", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! while (transform.pop() != id) { ! // NOTHING ! } ! } ! }); ! ! ! globals.put("vertex", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Double x = (Double) env.get(0); ! Double y = (Double) env.get(1); ! Double z = (Double) env.get(2); ! Vertex result = new Vertex(x.doubleValue() / 1000, ! y.doubleValue() / 1000, ! z.doubleValue() / 1000); ! result = transform.transform(result); ! stack.push(result); ! } ! }); ! globals.put("edge", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Vertex from = (Vertex) env.get(0); ! Vertex to = (Vertex) env.get(1); ! Edge result = new Edge(from, to); ! stack.push(result); ! } ! }); ! globals.put("surface", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! List<Edge> edges = new LinkedList<Edge>(); ! for (int i = 0; i < env.length(); i++) { ! Edge current = (Edge) env.get(i); ! edges.add(current); ! } ! Surface result = new Surface(edges); ! stack.push(result); ! } ! }); ! globals.put("front", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Surface surface = (Surface) env.get(0); ! Space space = (Space) env.get(1); ! surface.setFrontDomain(space); ! } ! }); ! globals.put("back", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Surface surface = (Surface) env.get(0); ! Space space = (Space) env.get(1); ! surface.setBackDomain(space); ! } ! }); ! globals.put("space", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! String name = (String) env.get(0); ! Space result = new Space(name, Space.CONSTRUCTION, Space.SPACE_LEVEL, true); ! stack.push(result); ! } ! }); ! globals.put("contour", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Vertex previous = (Vertex) env.get(env.length() - 1); ! for (int i = 0; i < env.length(); i++) { ! Vertex current = (Vertex) env.get(i); ! stack.push(new Edge(previous, current)); ! previous = current; ! } ! } ! }); ! globals.put("translate", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Double x = (Double) env.get(0); ! Double y = (Double) env.get(1); ! Double z = (Double) env.get(2); ! transform.push( ! new Translate(x.doubleValue(), y.doubleValue(), z.doubleValue()) ! ); ! } ! }); ! globals.put("scale", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Double x = (Double) env.get(0); ! Double y = (Double) env.get(1); ! Double z = (Double) env.get(2); ! transform.push( ! new Scale(x.doubleValue(), y.doubleValue(), z.doubleValue()) ! ); ! } ! }); ! globals.put("rotate", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Double a = (Double) env.get(0); ! Double x = (Double) env.get(1); ! Double y = (Double) env.get(2); ! Double z = (Double) env.get(3); ! transform.push( ! new AxisRotate(a.doubleValue(), x.doubleValue(), y.doubleValue(), z.doubleValue()) ! ); ! } ! }); ! globals.put("extrude", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Surface surface = (Surface) env.get(0); ! Double distance = (Double) env.get(1); ! HashSet sides = new HashSet(); ! Surface top = surface.extrusion(distance.doubleValue() / 1000, sides); ! stack.push(surface); ! Iterator iter = sides.iterator(); ! while (iter.hasNext()) { ! Surface current = (Surface) iter.next(); ! stack.push(current); ! } ! stack.push(top); ! } ! }); ! ! globals.put("extrudeall", new Builtin() { ! public void evaluate(Environment env, Stack<Object> stack) { ! Surface surface = (Surface) env.get(0); ! Double distance = (Double) env.get(1); ! HashSet sides = new HashSet(); ! HashSet tops = new HashSet(); ! surface.extrusionall(distance.doubleValue() / 1000, sides, tops); ! stack.push(surface); ! { ! Iterator iter = sides.iterator(); ! while (iter.hasNext()) { ! Surface current = (Surface) iter.next(); ! stack.push(current); ! } ! } ! { ! Iterator iter = tops.iterator(); ! while (iter.hasNext()) { ! Surface current = (Surface) iter.next(); ! stack.push(current); ! } ! } ! } ! }); ! ! ! ! String script = Project.getInstance().getScript(); ! try { ! Reader input = new StringReader(script); ! ScriptLexer lexer = new ScriptLexer(input); ! ScriptParser parser = new ScriptParser(lexer); ! parser.script(globals); ! try { ! Environment global = new Environment(globals, null); ! Environment env = new Environment(global, new HashMap(), new LinkedList()); ! input = new StringReader(value); ! lexer = new ScriptLexer(input); ! parser = new ScriptParser(lexer); ! Function function = new Function(); ! parser.statement(function); ! Stack stack = new Stack(); ! function.evaluate(env, stack); ! Project.getInstance().getGlobals().define(globals); ! Project.getInstance().changed(Project.getInstance().getGlobals()); ! ! Space space = Project.getInstance().getActiveSpace(); ! Collection<Vertex> vertices = new LinkedList<Vertex>(); ! Collection<Edge> edges = new LinkedList<Edge>(); ! Collection<Surface> surfaces = new LinkedList<Surface>(); ! Collection<Space> spaces = new LinkedList<Space>(); ! ! ! while (!stack.empty()) { ! Object result = stack.pop(); ! if (result instanceof Vertex) { ! vertices.add((Vertex)result); ! } else if (result instanceof Edge) { ! edges.add((Edge)result); ! } else if (result instanceof Surface) { ! surfaces.add((Surface)result); ! } else if (result instanceof Space) { ! Space s = (Space) result; ! spaces.add(s); ! space.add(s); ! Selection.primary().add(s); ! } else { ! glv.setLengthValue(result.toString()); ! } } - edges.addAll(Surface.edges(surfaces)); - vertices.addAll(Edge.vertices(edges)); - Mesh mesh = new Mesh(surfaces, edges, vertices); - // mesh.identify(); - Mesh result = space.insert(mesh); - Selection.primary().addAll(result.vertices()); - Selection.primary().addAll(result.edges()); - Selection.primary().addAll(result.surfaces()); - Project.getInstance().checkpoint(); - typing = false; - } catch (Exception error) { - System.out.println(error); - error.printStackTrace(); } ! } catch (Exception error) { ! System.out.println(error); } ! return null; } /** * Delete --- 394,444 ---- /** ! * {@inheritDoc} */ public Object evaluate(String value) { ! Stack stack = evaluateString(value); ! if (stack != null) { ! Space space = Project.getInstance().getActiveSpace(); ! Collection<Vertex> vertices = new LinkedList<Vertex>(); ! Collection<Edge> edges = new LinkedList<Edge>(); ! Collection<Surface> surfaces = new LinkedList<Surface>(); ! Collection<Space> spaces = new LinkedList<Space>(); ! ! while (!stack.empty()) { ! Object result = stack.pop(); ! if (result instanceof Vertex) { ! vertices.add((Vertex)result); ! } else if (result instanceof Edge) { ! edges.add((Edge)result); ! } else if (result instanceof Surface) { ! surfaces.add((Surface)result); ! } else if (result instanceof Space) { ! Space s = (Space) result; ! spaces.add(s); ! space.add(s); ! Selection.primary().add(s); ! } else { ! glv.setLengthValue(result.toString()); } } ! ! edges.addAll(Surface.edges(surfaces)); ! vertices.addAll(Edge.vertices(edges)); ! Mesh mesh = new Mesh(surfaces, edges, vertices); ! // mesh.identify(); ! Mesh result = space.insert(mesh); ! Selection.primary().addAll(result.vertices()); ! Selection.primary().addAll(result.edges()); ! Selection.primary().addAll(result.surfaces()); ! Project.getInstance().checkpoint(); } ! typing = false; return null; } + + /** * Delete Index: AbstractPencil.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractPencil.java,v retrieving revision 1.77 retrieving revision 1.78 diff -C2 -d -r1.77 -r1.78 *** AbstractPencil.java 8 May 2007 06:08:15 -0000 1.77 --- AbstractPencil.java 16 May 2007 07:37:56 -0000 1.78 *************** *** 708,711 **** --- 708,713 ---- */ public Object evaluate(String value) { + System.out.println("pencil evaluate \"" + value + "\""); + double d = Double.parseDouble(value); apply(d / 1000); Index: AbstractTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractTool.java,v retrieving revision 1.120 retrieving revision 1.121 diff -C2 -d -r1.120 -r1.121 *** AbstractTool.java 8 May 2007 12:32:06 -0000 1.120 --- AbstractTool.java 16 May 2007 07:37:56 -0000 1.121 *************** *** 7,19 **** --- 7,31 ---- package net.sourceforge.bprocessor.gl.tool; + import net.sourceforge.bprocessor.model.AxisRotate; import net.sourceforge.bprocessor.model.Camera; import net.sourceforge.bprocessor.model.Edge; import net.sourceforge.bprocessor.model.Geometry; import net.sourceforge.bprocessor.model.Geometric; + import net.sourceforge.bprocessor.model.IDTransform; import net.sourceforge.bprocessor.model.Plane; import net.sourceforge.bprocessor.model.Project; + import net.sourceforge.bprocessor.model.Scale; import net.sourceforge.bprocessor.model.Selection; + import net.sourceforge.bprocessor.model.Space; import net.sourceforge.bprocessor.model.Surface; + import net.sourceforge.bprocessor.model.Transform; + import net.sourceforge.bprocessor.model.TransformStack; + import net.sourceforge.bprocessor.model.Translate; import net.sourceforge.bprocessor.model.Vertex; + 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.parser.ScriptLexer; + import net.sourceforge.bprocessor.parser.ScriptParser; import net.sourceforge.bprocessor.gl.model.GlCamera; import net.sourceforge.bprocessor.gl.model.Widget; *************** *** 30,38 **** --- 42,56 ---- import java.awt.event.MouseWheelEvent; + import java.io.Reader; + import java.io.StringReader; import java.net.URL; + import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; + import java.util.LinkedList; + import java.util.List; import java.util.Set; import java.util.Collection; + import java.util.Stack; import org.apache.log4j.Logger; *************** *** 58,61 **** --- 76,85 ---- private static Logger log = Logger.getLogger(AbstractTool.class); + /** TransformStack */ + private TransformStack transform; + + /** ID */ + private Transform id; + /** The minimum drag time */ private static final int MIN_DRAG_TIME_MS = 200; *************** *** 622,624 **** --- 646,877 ---- typing = false; } + + /** + * Builtin function + */ + public abstract class Builtin implements Invokable { + + } + + + /** + * Evaluate the string + * @param value String + * @return stack of results + */ + public Stack evaluateString(String value) { + + transform = new TransformStack(); + id = new IDTransform(); + HashMap<String, Object> globals = Project.getInstance().getGlobals().environment(); + + + globals.put("echo", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + stack.push(env.get(0)); + } + }); + globals.put("cos", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Double argument = (Double) env.get(0); + stack.push(new Double(Math.cos(argument.doubleValue()))); + } + }); + globals.put("sin", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Double argument = (Double) env.get(0); + stack.push(new Double(Math.sin(argument.doubleValue()))); + } + }); + globals.put("sqrt", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Double argument = (Double) env.get(0); + stack.push(new Double(Math.sqrt(argument.doubleValue()))); + } + }); + globals.put("length", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + List argument = (List) env.get(0); + stack.push(new Double(argument.size())); + } + }); + globals.put("push", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + transform.push(id); + } + }); + globals.put("pop", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + while (transform.pop() != id) { + // NOTHING + } + } + }); + + + globals.put("vertex", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Double x = (Double) env.get(0); + Double y = (Double) env.get(1); + Double z = (Double) env.get(2); + Vertex result = new Vertex(x.doubleValue() / 1000, + y.doubleValue() / 1000, + z.doubleValue() / 1000); + result = transform.transform(result); + stack.push(result); + } + }); + globals.put("edge", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Vertex from = (Vertex) env.get(0); + Vertex to = (Vertex) env.get(1); + Edge result = new Edge(from, to); + stack.push(result); + } + }); + globals.put("surface", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + List<Edge> edges = new LinkedList<Edge>(); + for (int i = 0; i < env.length(); i++) { + Edge current = (Edge) env.get(i); + edges.add(current); + } + Surface result = new Surface(edges); + stack.push(result); + } + }); + globals.put("front", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Surface surface = (Surface) env.get(0); + Space space = (Space) env.get(1); + surface.setFrontDomain(space); + } + }); + globals.put("back", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Surface surface = (Surface) env.get(0); + Space space = (Space) env.get(1); + surface.setBackDomain(space); + } + }); + globals.put("space", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + String name = (String) env.get(0); + Space result = new Space(name, Space.CONSTRUCTION, Space.SPACE_LEVEL, true); + stack.push(result); + } + }); + globals.put("contour", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Vertex previous = (Vertex) env.get(env.length() - 1); + for (int i = 0; i < env.length(); i++) { + Vertex current = (Vertex) env.get(i); + stack.push(new Edge(previous, current)); + previous = current; + } + } + }); + globals.put("translate", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Double x = (Double) env.get(0); + Double y = (Double) env.get(1); + Double z = (Double) env.get(2); + transform.push( + new Translate(x.doubleValue(), y.doubleValue(), z.doubleValue()) + ); + } + }); + globals.put("scale", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Double x = (Double) env.get(0); + Double y = (Double) env.get(1); + Double z = (Double) env.get(2); + transform.push( + new Scale(x.doubleValue(), y.doubleValue(), z.doubleValue()) + ); + } + }); + globals.put("rotate", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Double a = (Double) env.get(0); + Double x = (Double) env.get(1); + Double y = (Double) env.get(2); + Double z = (Double) env.get(3); + transform.push( + new AxisRotate(a.doubleValue(), x.doubleValue(), y.doubleValue(), z.doubleValue()) + ); + } + }); + globals.put("extrude", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Surface surface = (Surface) env.get(0); + Double distance = (Double) env.get(1); + HashSet sides = new HashSet(); + Surface top = surface.extrusion(distance.doubleValue() / 1000, sides); + stack.push(surface); + Iterator iter = sides.iterator(); + while (iter.hasNext()) { + Surface current = (Surface) iter.next(); + stack.push(current); + } + stack.push(top); + } + }); + + globals.put("extrudeall", new Builtin() { + public void evaluate(Environment env, Stack<Object> stack) { + Surface surface = (Surface) env.get(0); + Double distance = (Double) env.get(1); + HashSet sides = new HashSet(); + HashSet tops = new HashSet(); + surface.extrusionall(distance.doubleValue() / 1000, sides, tops); + stack.push(surface); + { + Iterator iter = sides.iterator(); + while (iter.hasNext()) { + Surface current = (Surface) iter.next(); + stack.push(current); + } + } + { + Iterator iter = tops.iterator(); + while (iter.hasNext()) { + Surface current = (Surface) iter.next(); + stack.push(current); + } + } + } + }); + + String script = Project.getInstance().getScript(); + try { + Reader input = new StringReader(script); + ScriptLexer lexer = new ScriptLexer(input); + ScriptParser parser = new ScriptParser(lexer); + parser.script(globals); + try { + Environment global = new Environment(globals, null); + Environment env = new Environment(global, new HashMap(), new LinkedList()); + input = new StringReader(value); + lexer = new ScriptLexer(input); + parser = new ScriptParser(lexer); + Function function = new Function(); + parser.statement(function); + Stack stack = new Stack(); + function.evaluate(env, stack); + + Project.getInstance().getGlobals().define(globals); + Project.getInstance().changed(Project.getInstance().getGlobals()); + + return stack; + } catch (Exception error) { + System.out.println(error); + error.printStackTrace(); + } + } catch (Exception error) { + System.out.println(error); + } + + return null; + } } |