package org.archstudio.bna.demo; import org.archstudio.bna.BNACanvas; import org.archstudio.bna.IBNAModel; import org.archstudio.bna.IBNAView; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.IThingLogicManager; import org.archstudio.bna.facets.IHasMutableReferencePoint; import org.archstudio.bna.facets.IHasMutableSelected; import org.archstudio.bna.facets.IHasMutableSize; import org.archstudio.bna.logics.background.RotatingOffsetLogic; import org.archstudio.bna.logics.editing.ClickSelectionLogic; import org.archstudio.bna.logics.editing.DragMovableLogic; import org.archstudio.bna.logics.editing.EditTextLogic; import org.archstudio.bna.logics.editing.KeyNudgerLogic; import org.archstudio.bna.logics.editing.MarqueeSelectionLogic; import org.archstudio.bna.logics.editing.ReshapeRectangleLogic; import org.archstudio.bna.logics.editing.ReshapeSplineLogic; import org.archstudio.bna.logics.editing.StandardCursorLogic; import org.archstudio.bna.logics.events.WorldThingExternalEventsLogic; import org.archstudio.bna.logics.events.WorldThingInternalEventsLogic; import org.archstudio.bna.logics.information.ToolTipLogic; import org.archstudio.bna.logics.navigating.PanAndZoomLogic; import org.archstudio.bna.things.graphs.NumericAxis; import org.archstudio.bna.things.graphs.NumericSurfaceGraphThing; import org.archstudio.bna.things.graphs.NumericSurfaceGraphThing.Data; import org.archstudio.bna.things.utility.GridThing; import org.archstudio.bna.things.utility.ShadowThing; import org.archstudio.bna.utils.AbstractCoordinateMapper; import org.archstudio.bna.utils.BNARenderingSettings; import org.archstudio.bna.utils.DefaultBNAModel; import org.archstudio.bna.utils.DefaultBNAView; import org.archstudio.bna.utils.DefaultBNAWorld; import org.archstudio.bna.utils.LinearCoordinateMapper; import org.archstudio.bna.utils.UserEditableUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class SurfaceGraphDemo { static Rectangle originRectangle = AbstractCoordinateMapper.getDefaultBounds(); static Point origin = new Point(originRectangle.x + originRectangle.width / 2, originRectangle.y + originRectangle.height / 2); public static void main(String args[]) { Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new FillLayout()); IBNAModel model = new DefaultBNAModel(); IBNAWorld world = new DefaultBNAWorld("bna", model); IBNAView view = new DefaultBNAView(null, world, new LinearCoordinateMapper()); GridThing.createIn(world); ShadowThing.createIn(world); setupTopWorld(world); populateModel(world); IBNAModel iModel = new DefaultBNAModel(); IBNAWorld iWorld = new DefaultBNAWorld("subworld", iModel); setupWorld(iWorld); populateModel(iWorld); final BNACanvas bnaComposite = new BNACanvas(shell, SWT.H_SCROLL | SWT.V_SCROLL, view); BNARenderingSettings.setAntialiasGraphics(bnaComposite, true); BNARenderingSettings.setAntialiasText(bnaComposite, true); BNARenderingSettings.setDecorativeGraphics(bnaComposite, true); BNARenderingSettings.setDisplayShadows(bnaComposite, true); bnaComposite.setSize(500, 500); bnaComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); shell.setSize(400, 400); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); System.exit(0); } static void setupTopWorld(IBNAWorld world) { IThingLogicManager logicManager = world.getThingLogicManager(); logicManager.addThingLogic(PanAndZoomLogic.class); setupWorld(world); } static void setupWorld(IBNAWorld world) { IThingLogicManager logicManager = world.getThingLogicManager(); logicManager.addThingLogic(ClickSelectionLogic.class); logicManager.addThingLogic(DragMovableLogic.class); logicManager.addThingLogic(EditTextLogic.class); logicManager.addThingLogic(KeyNudgerLogic.class); logicManager.addThingLogic(MarqueeSelectionLogic.class); logicManager.addThingLogic(PanAndZoomLogic.class); logicManager.addThingLogic(ReshapeRectangleLogic.class); logicManager.addThingLogic(ReshapeSplineLogic.class); logicManager.addThingLogic(RotatingOffsetLogic.class); logicManager.addThingLogic(StandardCursorLogic.class); logicManager.addThingLogic(ToolTipLogic.class); logicManager.addThingLogic(WorldThingExternalEventsLogic.class); logicManager.addThingLogic(WorldThingInternalEventsLogic.class); } static void populateModel(IBNAWorld world) { final IBNAModel model = world.getBNAModel(); NumericSurfaceGraphThing surface = model.addThing(new NumericSurfaceGraphThing(null)); Data data = new Data(); data.resize(50, 50); for (int x = 0; x < data.getWidth(); x++) { for (int y = 0; y < data.getHeight(); y++) { data.setValue(x, y, 7 * Math.sin((double) x / 8 * y / 8)); int r = (int) (128 + Math.sin(x) * 127); int g = (int) (128 + Math.sin(y) * 127); int b = (int) (128 + Math.sin(x * y) * 127); data.setColor(x, y, new RGB(r, g, b)); } } surface.setData(data); surface.setBoundingBox(new Rectangle(0, 0, 800, 800)); NumericAxis zAxis = surface.getZMajorAxis(); zAxis.unit = 5; surface.setZMajorAxis(zAxis); UserEditableUtils.addEditableQualities(surface, IHasMutableSelected.USER_MAY_SELECT, IHasMutableReferencePoint.USER_MAY_MOVE, IHasMutableSize.USER_MAY_RESIZE); } }