Menu

#9 updates to Align_selection.bsh

open
nobody
5
2013-02-13
2006-09-11
Anonymous
No

New features added in the alignment tool: horizontaland
vertical: this is the new macro "Align_selection.bsh"

// This BeanShell script aligns selected elements,
either along the
// topmost, bottommost, leftmost or rightmost side.
//
import jpicedt.graphic.model.*;
import java.awt.geom.*;

if (canvas()==null) {
JOptionPane.showMessageDialog(null,"First open a
board!","Align selection BSH",JOptionPane.ERROR_MESSAGE);
return;
}

selectionHandler = editorkit().getSelectionHandler();

if (selectionHandler.isEmpty()) {
JOptionPane.showMessageDialog(null,"First select
objects to be aligned!","Align selection
BSH",JOptionPane.ERROR_MESSAGE);
return;
}

// ask user which side to choose for the alignment :
String[] choice = {"Top", "Bottom", "Left", "Right",
"CentreHor", "CentreVer"};
Object userChoice =
JOptionPane.showInputDialog(null,"Choose alignment
side","Side",
JOptionPane.INFORMATION_MESSAGE,null,choice,choice[0]);
if (userChoice==null) return; // CANCEL !

// Top = 0 ; Bottom = 1; Left = 2; Right = 3
if (userChoice.equals("Top")) side = 0;
else if (userChoice.equals("Bottom")) side = 1;
else if (userChoice.equals("Left")) side = 2;
else if (userChoice.equals("Right")) side = 3;
else if (userChoice.equals("CentreHor")) side = 4;
else side = 5;

// for each selected element, fetch the topmost point
index (resp. rightmost,...)
switch (side){
case 0 : alignPt =
selectionHandler.getPoint(PicGroup.UM,null).y; break;
case 1 : alignPt =
selectionHandler.getPoint(PicGroup.LM,null).y; break;
case 2 : alignPt =
selectionHandler.getPoint(PicGroup.ML,null).x; break;
case 3 : alignPt =
selectionHandler.getPoint(PicGroup.MR,null).x; break;
case 4 : alignPt = 0.5 *
(selectionHandler.getPoint(PicGroup.UM,null).y +
selectionHandler.getPoint(PicGroup.LM,null).y); break;
default : alignPt = 0.5 *
(selectionHandler.getPoint(PicGroup.UM,null).x +
selectionHandler.getPoint(PicGroup.LM,null).x); break;
}
//JOptionPane.showMessageDialog(null,new
Integer(side).toString(),"Info",JOptionPane.ERROR_MESSAGE);

bb = new Rectangle2D.Double();
for (iterator = canvas().selection(); iterator.hasNext();){
element = iterator.next();
switch(side){
case 0 :
element.translate(0,alignPt-element.getBoundingBox(bb).getMaxY());
break;
case 1 :
element.translate(0,alignPt-element.getBoundingBox(bb).getMinY());
break;
case 2 :
element.translate(alignPt-element.getBoundingBox(bb).getMinX(),0);
break;
case 3 :
element.translate(alignPt-element.getBoundingBox(bb).getMaxX(),0);
break;
case 4 :
element.translate(0,alignPt-0.5*(element.getBoundingBox(bb).getMaxY()
+ element.getBoundingBox(bb).getMinY()));
break;
default :
element.translate(alignPt-0.5*(element.getBoundingBox(bb).getMaxX()
+ element.getBoundingBox(bb).getMinX()),0);
break;

\}

}

Discussion


Log in to post a comment.