{
clones[i] = null;
}
else
{
mxGeometry g = model.getGeometry(clones[i]);
if (g != null)
{
mxCellState state = view.getState(cells[i]);
mxCellState pstate = view.getState(model
.getParent(cells[i]));
if (state != null && pstate != null)
{
double dx = pstate.getOrigin().getX();
double dy = pstate.getOrigin().getY();
if (model.isEdge(clones[i]))
{
// Checks if the source is cloned or sets the terminal point
Object src = model.getTerminal(cells[i],
true);
while (src != null && !tmp.contains(src))
{
src = model.getParent(src);
}
if (src == null)
{
mxPoint pt = state.getAbsolutePoint(0);
g.setTerminalPoint(
new mxPoint(pt.getX() / scale
- trans.getX(), pt
.getY()
/ scale
- trans.getY()), true);
}
// Checks if the target is cloned or sets the terminal point
Object trg = model.getTerminal(cells[i],
false);
while (trg != null && !tmp.contains(trg))
{
trg = model.getParent(trg);
}
if (trg == null)
{
mxPoint pt = state
.getAbsolutePoint(state
.getAbsolutePointCount() - 1);
g.setTerminalPoint(
new mxPoint(pt.getX() / scale
- trans.getX(), pt
.getY()
/ scale
- trans.getY()), false);
}
// Translates the control points
List<mxPoint> points = g.getPoints();
if (points != null)
{
Iterator<mxPoint> it = points
.iterator();
while (it.hasNext())
{
mxPoint pt = it.next();
pt.setX(pt.getX() + dx);
pt.setY(pt.getY() + dy);
}
}
}
else
{
g.setX(g.getX() + dx);
g.setY(g.getY() + dy);
}
}
}
}
}