use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.
the class DEdgeDetails method getBend.
/**
* Returns current Edge Bend value.
*
* @param edge
* @return edge Bend
*/
synchronized Bend getBend(final CyEdge edge, boolean forceCreate) {
// Check bypass
final DEdgeView dev = dGraphView.getDEdgeView(edge);
if (dev.isValueLocked(EDGE_BEND))
return dev.getVisualProperty(EDGE_BEND);
Bend bend = m_edgeBends.get(edge);
if (bend == null && forceCreate) {
bend = new BendImpl();
m_edgeBends.put(edge, bend);
}
if (bend == null)
return m_edgeBendDefault == null ? EdgeBendVisualProperty.DEFAULT_EDGE_BEND : m_edgeBendDefault;
if (bend == EdgeBendVisualProperty.DEFAULT_EDGE_BEND && m_edgeBendDefault != null)
return m_edgeBendDefault;
return bend;
}
use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.
the class InnerCanvas method handleArrowKeys.
/**
* Arrow key handler.
* They are used to pan and mode nodes/edge bend handles.
* @param k key event
*/
private void handleArrowKeys(KeyEvent k) {
final int code = k.getKeyCode();
double move = 1.0;
// Adjust increment if Shift key is pressed
if (k.isShiftDown())
move = 15.0;
// Pan if CTR is pressed.
if (isControlOrMetaDown(k)) {
// Pan
if (code == KeyEvent.VK_UP) {
pan(0, move);
} else if (code == KeyEvent.VK_DOWN) {
pan(0, -move);
} else if (code == KeyEvent.VK_LEFT) {
pan(-move, 0);
} else if (code == KeyEvent.VK_RIGHT) {
pan(move, 0);
}
return;
}
if (m_view.m_nodeSelection) {
// move nodes
final long[] selectedNodes = m_view.getSelectedNodeIndices();
for (int i = 0; i < selectedNodes.length; i++) {
DNodeView nv = ((DNodeView) m_view.getDNodeView(selectedNodes[i]));
double xPos = nv.getXPosition();
double yPos = nv.getYPosition();
if (code == KeyEvent.VK_UP) {
yPos -= move;
} else if (code == KeyEvent.VK_DOWN) {
yPos += move;
} else if (code == KeyEvent.VK_LEFT) {
xPos -= move;
} else if (code == KeyEvent.VK_RIGHT) {
xPos += move;
}
nv.setOffset(xPos, yPos);
}
// move edge anchors
LongEnumerator anchorsToMove = m_view.m_selectedAnchors.searchRange(Integer.MIN_VALUE, Integer.MAX_VALUE, false);
while (anchorsToMove.numRemaining() > 0) {
final long edgeAndAnchor = anchorsToMove.nextLong();
final long edge = edgeAndAnchor >>> 6;
final int anchorInx = (int) (edgeAndAnchor & 0x000000000000003f);
final DEdgeView ev = (DEdgeView) m_view.getDEdgeView(edge);
if (!ev.isValueLocked(BasicVisualLexicon.EDGE_BEND)) {
Bend defaultBend = ev.getDefaultValue(BasicVisualLexicon.EDGE_BEND);
if (ev.getVisualProperty(BasicVisualLexicon.EDGE_BEND) == defaultBend) {
ev.setLockedValue(BasicVisualLexicon.EDGE_BEND, new BendImpl((BendImpl) defaultBend));
} else {
ev.setLockedValue(BasicVisualLexicon.EDGE_BEND, new BendImpl((BendImpl) ev.getBend()));
}
}
final Bend bend = ev.getVisualProperty(BasicVisualLexicon.EDGE_BEND);
final Handle handle = bend.getAllHandles().get(anchorInx);
final Point2D newPoint = handle.calculateHandleLocation(m_view.getViewModel(), ev);
m_floatBuff1[0] = (float) newPoint.getX();
m_floatBuff1[1] = (float) newPoint.getY();
if (code == KeyEvent.VK_UP) {
ev.moveHandleInternal(anchorInx, m_floatBuff1[0], m_floatBuff1[1] - move);
} else if (code == KeyEvent.VK_DOWN) {
ev.moveHandleInternal(anchorInx, m_floatBuff1[0], m_floatBuff1[1] + move);
} else if (code == KeyEvent.VK_LEFT) {
ev.moveHandleInternal(anchorInx, m_floatBuff1[0] - move, m_floatBuff1[1]);
} else if (code == KeyEvent.VK_RIGHT) {
ev.moveHandleInternal(anchorInx, m_floatBuff1[0] + move, m_floatBuff1[1]);
}
}
repaint();
}
}
use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.
the class DEdgeView method moveHandleInternal.
protected final void moveHandleInternal(final int inx, double x, double y) {
final Bend bend = graphView.m_edgeDetails.getBend(model);
final HandleImpl handle = (HandleImpl) bend.getAllHandles().get(inx);
handle.defineHandle(graphView.getViewModel(), this, x, y);
if (graphView.m_spacialA.delete((model.getSUID() << 6) | inx))
graphView.m_spacialA.insert((model.getSUID() << 6) | inx, (float) (x - (graphView.getAnchorSize() / 2.0d)), (float) (y - (graphView.getAnchorSize() / 2.0d)), (float) (x + (graphView.getAnchorSize() / 2.0d)), (float) (y + (graphView.getAnchorSize() / 2.0d)), 0.0);
}
use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.
the class DEdgeView method getAnchor.
/**
* Actual method to be used in the Graph Renderer.
*/
@Override
public void getAnchor(int anchorIndex, float[] anchorArr, int offset) {
final Bend bend;
if (isValueLocked(DVisualLexicon.EDGE_BEND))
bend = this.getVisualProperty(DVisualLexicon.EDGE_BEND);
else
bend = graphView.m_edgeDetails.getBend(model);
final Handle handle;
if (graphView.m_edgeDetails.getLineCurved(model) == EdgeView.CURVED_LINES)
handle = bend.getAllHandles().get(anchorIndex);
else
handle = bend.getAllHandles().get(anchorIndex / 2);
final Point2D newPoint = handle.calculateHandleLocation(graphView.getViewModel(), this);
anchorArr[offset] = (float) newPoint.getX();
anchorArr[offset + 1] = (float) newPoint.getY();
}
use of org.cytoscape.view.presentation.property.values.Bend in project cytoscape-impl by cytoscape.
the class DEdgeView method addHandleInternal.
/**
* Insert a new handle to bend object.
*
* @param insertInx
* @param handleLocation
*/
private void addHandleInternal(final int insertInx, final Point2D handleLocation) {
synchronized (graphView.m_lock) {
final Bend bend = graphView.m_edgeDetails.getBend(model);
final Handle handle = handleFacgtory.createHandle(graphView, this, handleLocation.getX(), handleLocation.getY());
bend.insertHandleAt(insertInx, handle);
if (selected) {
for (int j = bend.getAllHandles().size() - 1; j > insertInx; j--) {
graphView.m_spacialA.exists((model.getSUID() << 6) | (j - 1), graphView.m_extentsBuff, 0);
graphView.m_spacialA.delete((model.getSUID() << 6) | (j - 1));
graphView.m_spacialA.insert((model.getSUID() << 6) | j, graphView.m_extentsBuff[0], graphView.m_extentsBuff[1], graphView.m_extentsBuff[2], graphView.m_extentsBuff[3], 0.0);
if (graphView.m_selectedAnchors.delete((model.getSUID() << 6) | (j - 1)))
graphView.m_selectedAnchors.insert((model.getSUID() << 6) | j);
}
graphView.m_spacialA.insert((model.getSUID() << 6) | insertInx, (float) (handleLocation.getX() - (graphView.getAnchorSize() / 2.0d)), (float) (handleLocation.getY() - (graphView.getAnchorSize() / 2.0d)), (float) (handleLocation.getX() + (graphView.getAnchorSize() / 2.0d)), (float) (handleLocation.getY() + (graphView.getAnchorSize() / 2.0d)), 0.0);
}
graphView.setContentChanged();
}
}
Aggregations