001/** 002 Draws the specified geometry element in the 3D scene. The existing scene can 003 be erased by passing an "erase" flag. The versions showing 004 the array input actually take a variable length argument list (vararg), so you can 005 enter draw(geom1, geom2, geom3, geom4), etc. 006 007 @method void draw(GeomElement geom, boolean erase) 008 @method void draw(GeomElement geometry) 009 @method void draw(GeomElement... geomVararg) 010 @method void draw(boolean erase, GeomElement... geomVararg) 011 @method void draw(GeomPoint origin, Vector vector) 012 @method void draw(GeomPoint origin, ParameterVector vector) 013 @method void draw(ControlPoint cp) 014 @method void draw(ControlPointNet cpNet) 015 @method void draw(List list) 016*/ 017package geomss.app.GeomSSCommands; 018 019import bsh.*; 020import geomss.GeomSSScene; 021import geomss.geom.*; 022import geomss.geom.nurbs.ControlPoint; 023import geomss.geom.nurbs.ControlPointNet; 024import jahuwaldt.js.param.ParameterVector; 025import java.util.List; 026 027public class draw { 028 029 public static String usage() { 030 return "usage: draw(geom);, or draw(geom, erase);, or draw(geomVararg);, or draw(erase, geomVararg);"; 031 } 032 033 /** 034 Implement draw( GeomElement geom, boolean erase ) command. 035 */ 036 public static void invoke( Interpreter env, CallStack callstack, 037 GeomElement geom, boolean erase ) throws EvalError { 038 039 // Get a reference to the current 3D scene. 040 GeomSSScene gScene = (GeomSSScene)env.get("gScene"); 041 042 gScene.draw(geom, erase); 043 } 044 045 /** 046 Implement draw( boolean erase, GeomElement... geom ) command. 047 */ 048 public static void invoke( Interpreter env, CallStack callstack, 049 boolean erase, GeomElement... geomVararg ) throws EvalError { 050 051 // Get a reference to the current 3D scene. 052 GeomSSScene gScene = (GeomSSScene)env.get("gScene"); 053 054 // Loop over the geometry to be drawn. 055 for (GeomElement geom : geomVararg) { 056 gScene.draw(geom, erase); 057 } 058 } 059 060 /** 061 Implement draw( GeomElement... geom ) command. 062 */ 063 public static void invoke( Interpreter env, CallStack callstack, 064 GeomElement... geomVararg ) throws EvalError { 065 invoke(env, callstack, false, geomVararg); 066 } 067 068 /** 069 Implement draw( GeomPoint origin, Vector vector ) command. 070 */ 071 public static void invoke( Interpreter env, CallStack callstack, 072 GeomPoint origin, GeomVector vector ) throws EvalError { 073 074 // Get a reference to the current 3D scene. 075 GeomSSScene gScene = (GeomSSScene)env.get("gScene"); 076 077 Point o = vector.getOrigin(); 078 vector.setOrigin(origin.immutable()); 079 gScene.draw(vector); 080 vector.setOrigin(o); 081 } 082 083 /** 084 Implement draw( GeomPoint origin, ParameterVector vector ) command. 085 */ 086 public static void invoke( Interpreter env, CallStack callstack, 087 GeomPoint origin, ParameterVector vector ) throws EvalError { 088 089 // Get a reference to the current 3D scene. 090 GeomSSScene gScene = (GeomSSScene)env.get("gScene"); 091 092 PointString str = PointString.newInstance(); 093 str.add(origin); 094 str.add(origin.plus(Point.valueOf(vector))); 095 gScene.draw(origin); 096 gScene.draw(str); 097 } 098 099 /** 100 Implement draw( ControlPoint cp ) command. 101 */ 102 public static void invoke( Interpreter env, CallStack callstack, 103 ControlPoint cp ) throws EvalError { 104 invoke(env, callstack, cp.getPoint()); 105 } 106 107 /** 108 Implement draw(ControlPointNet cpNet) command. 109 */ 110 public static void invoke( Interpreter env, CallStack callstack, 111 ControlPointNet cpNet ) throws EvalError { 112 for (List column : cpNet) { 113 for (Object cp : column) 114 invoke(env,callstack, ((ControlPoint)cp).getPoint()); 115 } 116 } 117 118 /** 119 Implement draw(List list) command. 120 */ 121 public static void invoke( Interpreter env, CallStack callstack, 122 List list ) throws EvalError { 123 124 if (list instanceof GeomElement) { 125 // Get a reference to the current 3D scene. 126 GeomSSScene gScene = (GeomSSScene)env.get("gScene"); 127 gScene.draw((GeomElement)list); 128 129 } else { 130 for (Object o : list) { 131 if (o == null) continue; 132 if (o instanceof GeomElement) 133 invoke(env,callstack, (GeomElement)o); 134 else if (o instanceof ControlPoint) 135 invoke(env,callstack, (ControlPoint)o); 136 else if (o instanceof ControlPointNet) 137 invoke(env,callstack, (ControlPointNet)o); 138 else if (o instanceof List) 139 invoke(env,callstack, (List)o); 140 } 141 } 142 } 143 144} 145