package macro; import star.base.neo.*; import star.common.*; import star.vis.*; /** * Rotates a scene into the next orthogonal position. * * Author: Dr. Joern Beilke, Ing.-Buero Dr. Beilke * * email : joern@beilke-cfd.de * WWW : www.beilke-cfd.de */ public class snap_to_world extends StarMacro { @Override public void execute() { Simulation sim = getActiveSimulation(); Scene scene = sim.getSceneManager().getSelectedScene(); CurrentView currentView_0 = scene.getCurrentView(); DoubleVector foc = currentView_0.getFocalPoint(); DoubleVector pos = currentView_0.getPosition(); DoubleVector vu = currentView_0.getViewUp(); int pm = currentView_0.getProjectionMode(); double ps = currentView_0.getParallelScale(); double dx = Math.abs(foc.getComponent(0) - pos.getComponent(0)); double dy = Math.abs(foc.getComponent(1) - pos.getComponent(1)); double dz = Math.abs(foc.getComponent(2) - pos.getComponent(2)); double vux = Math.abs(vu.getComponent(0)); double vuy = Math.abs(vu.getComponent(1)); double vuz = Math.abs(vu.getComponent(2)); if (dx >= dy && dx >= dz) { pos.setComponent(1, foc.getComponent(1)); pos.setComponent(2, foc.getComponent(2)); } else if (dy >= dx && dy >= dz) { pos.setComponent(0, foc.getComponent(0)); pos.setComponent(2, foc.getComponent(2)); } else { pos.setComponent(0, foc.getComponent(0)); pos.setComponent(1, foc.getComponent(1)); } if (vux >= vuy && vux >= vuz) { vu.setComponent(0, Math.round(vu.getComponent(0))); vu.setComponent(1, 0); vu.setComponent(2, 0); } else if (vuy >= vux && vuy >= vuz) { vu.setComponent(0, 0); vu.setComponent(1, Math.round(vu.getComponent(1))); vu.setComponent(2, 0); } else { vu.setComponent(0, 0); vu.setComponent(1, 0); vu.setComponent(2, Math.round(vu.getComponent(2))); } currentView_0.setInput(foc, pos, vu, ps, pm); } }