cytoscape
Version:
Graph theory (a.k.a. network) library for analysis and visualisation
87 lines (63 loc) • 1.85 kB
JavaScript
var CRp = {};
var impl;
function polygon( context, points ){
for( var i = 0; i < points.length; i++ ){
var pt = points[ i ];
context.lineTo( pt.x, pt.y );
}
}
function triangleBackcurve( context, points, controlPoint ){
var firstPt;
for( var i = 0; i < points.length; i++ ){
var pt = points[ i ];
if( i === 0 ){
firstPt = pt;
}
context.lineTo( pt.x, pt.y );
}
context.quadraticCurveTo( controlPoint.x, controlPoint.y, firstPt.x, firstPt.y );
}
function triangleTee( context, trianglePoints, teePoints ){
if( context.beginPath ){ context.beginPath(); }
var triPts = trianglePoints;
for( var i = 0; i < triPts.length; i++ ){
var pt = triPts[ i ];
context.lineTo( pt.x, pt.y );
}
var teePts = teePoints;
var firstTeePt = teePoints[0];
context.moveTo( firstTeePt.x, firstTeePt.y );
for( var i = 1; i < teePts.length; i++ ){
var pt = teePts[ i ];
context.lineTo( pt.x, pt.y );
}
if( context.closePath ){ context.closePath(); }
}
function circleTriangle(context, trianglePoints, rx, ry, r) {
if (context.beginPath) { context.beginPath(); }
context.arc(rx, ry, r, 0, Math.PI * 2, false);
var triPts = trianglePoints;
var firstTrPt = triPts[0];
context.moveTo(firstTrPt.x, firstTrPt.y);
for (var i = 0; i < triPts.length; i++) {
var pt = triPts[i];
context.lineTo(pt.x, pt.y);
}
if (context.closePath) {
context.closePath();
}
}
function circle( context, rx, ry, r ){
context.arc( rx, ry, r, 0, Math.PI * 2, false );
}
CRp.arrowShapeImpl = function( name ){
return ( impl || (impl = {
'polygon': polygon,
'triangle-backcurve': triangleBackcurve,
'triangle-tee': triangleTee,
'circle-triangle' : circleTriangle,
'triangle-cross': triangleTee,
'circle': circle
}) )[ name ];
};
export default CRp;