| «IMPORT emf» |
| «IMPORT metaabm» |
| «IMPORT metaabm::act» |
| «IMPORT metaabm::function» |
| |
| «EXTENSION metaabm::tmpl::types» |
| «EXTENSION metaabm::tmpl::names» |
| «EXTENSION metaabm::tmpl::infer» |
| «EXTENSION metaabm::tmpl::util» |
| «EXTENSION metaabm::tmpl::projections» |
| «EXTENSION metaabm::ascape::tmpl::namesascape» |
| «EXTENSION metaabm::ascape::tmpl::inferascape» |
| |
| «AROUND metaabm::tmpl::Java::Imports FOR SStyle-» |
| import org.eclipse.draw2d.ColorConstants; |
| import org.eclipse.draw2d.Graphics; |
| import org.eclipse.swt.graphics.Color; |
| import org.eclipse.swt.widgets.Display; |
| |
| import org.ascape.model.Agent; |
| import org.ascape.model.CellOccupant; |
| import org.ascape.model.HostCell; |
| |
| import org.ascape.util.vis.DrawFeature; |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::Imports FOR SAgent-» |
| import java.util.List; |
| |
| import org.ascape.model.Agent; |
| import org.ascape.model.CellOccupant; |
| import org.ascape.model.HostCell; |
| import org.ascape.model.Scape; |
| import org.ascape.model.event.ScapeEvent; |
| import org.ascape.model.rule.Rule; |
| import org.ascape.model.space.CollectionSpace; |
| import org.ascape.model.space.Coordinate2DDiscrete; |
| import org.ascape.model.space.Graph; |
| import org.ascape.model.space.Location; |
| import org.ascape.util.Conditional; |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ClassFile FOR IID-» |
| «IF generate() && SStyle.isInstance(this)-» |
| «FILE javaFileLoc().replaceFirst(".java", "Graphics.java")-» |
| «EXPAND metaabm::tmpl::Java::ClassText» |
| «ENDFILE-» |
| «ENDIF-» |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ExtendType FOR ASink-» |
| «IF function.color()-»Color |
| «ELSEIF function.shape()-»Shape |
| «ELSEIF function.id().startsWith("graphic")-»Shape |
| «ELSEIF function.id() == "randomState"-»«inputs.get(0).value.typeName()» |
| «ELSE-»«typeName()»«ENDIF-» |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ClassName FOR IID-»«typeName()»Graphics«ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::ClassInheiritance FOR SStyle-» extends DrawFeature«ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::Body FOR SStyle-» |
| «targetDef.proceed()» |
| «EXPAND metaabm::tmpl::Java::GenerateComment» |
| enum Shapes {rectangle, oval, marker}; |
| «EXPAND metaabm::tmpl::Java::GenerateComment» |
| Shapes shape = Shapes.rectangle; |
| «EXPAND metaabm::tmpl::Java::GenerateComment» |
| public void draw(Graphics g, Object object, int width, int height) { |
| |
| «IF agent.isHost()-» |
| «agent.typeName()» «rootActivity.id()» = («agent.typeName()») object; |
| «FOREACH ((AGroup) rootActivity).roots AS act»«agent.typeName()» «act.id()» = «rootActivity.id()»;«ENDFOREACH» |
| «EXPAND metaabm::tmpl::Java::ActionBody-» |
| «ELSE-» |
| HostCell «rootActivity.id()»Cell = (HostCell) object; |
| if («rootActivity.id()»Cell.getOccupant() instanceof «agent.typeName()») { |
| «agent.typeName()» «rootActivity.id()» = («agent.typeName()») «rootActivity.id()»Cell.getOccupant(); |
| «FOREACH ((AGroup) rootActivity).roots AS act»«agent.typeName()» «act.id()» = «rootActivity.id()»;«ENDFOREACH» |
| «EXPAND metaabm::tmpl::Java::ActionBody-» |
| } |
| «ENDIF-» |
| } |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AEvaluate-» |
| «IF function.id().startsWith("color")-» |
| «targetDef.proceed()» |
| g.setForegroundColor(«id()»); |
| g.setBackgroundColor(«id()»); |
| «ELSEIF function.id() == "shapeOval"-» |
| shape = shape.oval; |
| «ELSEIF function.id() == "shapeRectangle"-» |
| shape = shape.rectangle; |
| «ELSEIF function.id().startsWith("shapeMarker")-» |
| shape = shape.marker; |
| «ELSEIF function.id().startsWith("graphicFill")-» |
| if (shape == Shapes.oval) { |
| g.fillOval(0, 0, width, height); |
| } else if (shape == Shapes.marker) { |
| int d = (int) (width * .25 - 1); |
| int d2 = (int) (width * .5 - 1); |
| g.fillOval(d, d, d2, d2); |
| } else if (shape == Shapes.rectangle) { |
| g.fillRectangle(0, 0, width, height); |
| } |
| «ELSEIF function.id().startsWith("graphicOutline")-» |
| if (shape == Shapes.oval) { |
| g.drawOval(0, 0, width, height); |
| } else if (shape == Shapes.marker) { |
| int d = (int) (width * .25 - 1); |
| int d2 = (int) (width * .5 - 1); |
| g.drawOval(d, d, d2, d2); |
| } else if (shape == Shapes.rectangle) { |
| g.drawRectangle(0, 0, width, height); |
| } |
| «ELSE-» |
| «IF selected == rootSelected || allTargets.typeSelect(ASet).collect(e | e.parameter).size > 0-» |
| «targetDef.proceed()» |
| «ENDIF-» |
| «ENDIF-» |
| «ENDAROUND» |
| |
| «AROUND metaabm::tmpl::Java::FunctionInnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR ASink-» |
| «IF function.id() == "randomUnit"-» |
| getRandom().nextDouble() |
| «ELSEIF function.id() == "randomIs"-» |
| getRandom().nextBoolean() |
| «ELSEIF function.id() == "uniformDistribution"-» |
| randomInRange(«inputs.expression(path, inner).toString(", ")»); |
| «ELSEIF function.id() == "timeNow"-» |
| «path.last().accessPath(this, inner)»getScape().getPeriod() |
| «ELSEIF function.id() == "available"-» |
| isAvailable() |
| «ELSEIF function.id() == "withinBoundaries"-» |
| «expressionSink(path, function, inner)» |
| «ELSEIF function.id() == "colorRGB"-» |
| new Color(Display.getCurrent(), (int) («inputs.expression(path, inner).toString(" * 255), (int) (")» * 255)) |
| «ELSEIF function.id().startsWith("color")-» |
| ColorConstants.«function.id().replaceFirst("color","").toFirstLower()» |
| «ELSE-» |
| «targetDef.proceed()» |
| «ENDIF-» |
| «ENDAROUND» |