1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.vectomatic.client.rep.command;
19
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import org.vectomatic.client.rep.RepApplication;
24 import org.vectomatic.client.rep.controller.MouseControllerSelector;
25 import org.vectomatic.client.rep.controller.SelectShapeController;
26 import org.vectomatic.common.model.Shape;
27 import org.vectomatic.common.model.geometry.TransformMatrix;
28
29
30
31
32 public class TransformShapeCommand extends CommandBase {
33 public static final int SCALE = 1;
34 public static final int ROTATE = 2;
35 public static final int TRANSLATE = 3;
36 private TransformMatrix _t, _mSelection;
37 private List<Shape> _shapes;
38 private int _kind;
39 private MouseControllerSelector _selector;
40 private SelectShapeController _selectShapeController;
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public TransformShapeCommand(RepApplication app, TransformMatrix t, TransformMatrix mSelection, int kind, MouseControllerSelector selector, SelectShapeController selectShapeController) {
57 super(app);
58 _shapes = new ArrayList<Shape>(_app.getSelection().getSelectedShapes());
59 _t = new TransformMatrix(t);
60 _mSelection = new TransformMatrix(mSelection);
61 _kind = kind;
62 _selector = selector;
63 _selectShapeController = selectShapeController;
64 }
65
66 public String getDescription() {
67 switch(_kind) {
68 case SCALE:
69 return _app.getConstants().scaleShapeCommand();
70 case ROTATE:
71 return _app.getConstants().rotateShapeCommand();
72 default:
73 return _app.getConstants().translateShapeCommand();
74 }
75 }
76
77 public void unexecute() {
78
79 if (_selector != null) {
80 _selector.selectController(_selectShapeController.getButton());
81 }
82
83
84 TransformMatrix mTmp = new TransformMatrix();
85 TransformMatrix tInv = new TransformMatrix();
86 TransformMatrix mInv = new TransformMatrix();
87 _t.invert(tInv);
88 _mSelection.invert(mInv);
89 tInv.preMultiply(mInv);
90 for (int i = 0, size = _shapes.size(); i < size; i++) {
91 Shape shape = _shapes.get(i);
92 shape.setTransform(shape.getTransform().preMultiply(tInv, mTmp));
93 }
94
95
96 _app.getSelection().select(_shapes);
97
98 for (int i = 0, size = _shapes.size(); i < size; i++) {
99 Shape shape = _shapes.get(i);
100 shape.setTransform(shape.getTransform().preMultiply(_mSelection));
101 }
102
103 _app.getSelection().getRootShape().setTransform(_mSelection);
104 }
105
106 public void execute() {
107
108 if (_selector != null) {
109 _selector.selectController(_selectShapeController.getButton());
110 }
111
112
113 TransformMatrix mTmp = new TransformMatrix();
114 TransformMatrix mInv = new TransformMatrix();
115 TransformMatrix t = new TransformMatrix();
116 _mSelection.invert(mInv);
117 for (int i = 0, size = _shapes.size(); i < size; i++) {
118 Shape shape = _shapes.get(i);
119 shape.setTransform(shape.getTransform().preMultiply(mInv, mTmp));
120 }
121
122
123 _app.getSelection().select(_shapes);
124
125 _mSelection.preMultiply(_t, t);
126 for (int i = 0, size = _shapes.size(); i < size; i++) {
127 Shape shape = _shapes.get(i);
128 shape.setTransform(shape.getTransform().preMultiply(t, mTmp));
129 }
130 _app.getSelection().getRootShape().setTransform(t);
131 }
132 }