drawio-offline
Version:
diagrams.net desktop
1,636 lines (1,407 loc) • 97.4 kB
JavaScript
/**
* $Id: mxSysML.js,v 1.0 2014/07/23 07:05:39 mate Exp $
* Copyright (c) 2006-2014, JGraph Ltd
*/
//**********************************************************************************************************************************************************
//Composite
//**********************************************************************************************************************************************************
function mxShapeSysMLComposite()
{
mxCylinder.call(this);
};
mxUtils.extend(mxShapeSysMLComposite, mxShape);
mxShapeSysMLComposite.prototype.isHtmlAllowed = function()
{
return false;
};
mxShapeSysMLComposite.prototype.paintForeground = function(c, x, y, w, h)
{
if (this.style != null)
{
var shape = mxCellRenderer.defaultShapes[this.style['symbol0']];
c.save();
var tmp = new shape();
tmp.style = this.style;
shape.prototype.paintVertexShape.call(tmp, c, x, y, w, h);
c.restore();
c.setDashed(false);
// Draws the symbols defined in the style. The symbols are
// numbered from 1...n. Possible postfixes are align,
// verticalAlign, spacing, arcSpacing, width, height
var counter = 1;
do
{
shape = mxCellRenderer.defaultShapes[this.style['symbol' + counter]];
if (shape != null)
{
var align = this.style['symbol' + counter + 'Align'];
var valign = this.style['symbol' + counter + 'VerticalAlign'];
var width = this.style['symbol' + counter + 'Width'];
var height = this.style['symbol' + counter + 'Height'];
var spacing = this.style['symbol' + counter + 'Spacing'] || 0;
var vspacing = this.style['symbol' + counter + 'VSpacing'] || 0;
var arcspacing = this.style['symbol' + counter + 'ArcSpacing'];
var direction = this.style['symbol' + counter + 'Direction'];
if (arcspacing != null)
{
spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing;
vspacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing;
}
var x2 = x;
var y2 = y;
if (align == mxConstants.ALIGN_CENTER)
{
x2 += (w - width) / 2;
}
else if (align == mxConstants.ALIGN_RIGHT)
{
x2 += w - width - spacing;
}
else
{
x2 += spacing;
}
if (valign == mxConstants.ALIGN_MIDDLE)
{
y2 += (h - height) / 2;
}
else if (valign == mxConstants.ALIGN_BOTTOM)
{
y2 += h - height - vspacing;
}
else
{
y2 += vspacing;
}
c.save();
var tmp = new shape();
tmp.style = mxUtils.clone(this.style);
tmp.direction = direction;
tmp.updateTransform(c, x2, y2, width, height);
shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height);
c.restore();
}
counter++;
}
while (shape != null);
}
};
mxCellRenderer.registerShape('mxgraph.sysml.composite', mxShapeSysMLComposite);
//**********************************************************************************************************************************************************
//Package
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLPackage(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLPackage, mxShape);
mxShapeSysMLPackage.prototype.cst = {
PACKAGE : 'mxgraph.sysml.package',
LABEL_X : 'labelX'
};
mxShapeSysMLPackage.prototype.customProperties = [
{name: 'labelX', dispName: 'Header Width', type: 'float', min:0, defVal:90}
];
mxShapeSysMLPackage.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.25), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.25), false));
return (constr);
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLPackage.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.translate(x, y);
this.background(c, x, y, w, h);
c.setShadow(false);
this.foreground(c, x, y, w, h);
};
mxShapeSysMLPackage.prototype.background = function(c, x, y, w, h)
{
c.rect(0, 0, w, h);
c.fillAndStroke();
};
mxShapeSysMLPackage.prototype.foreground = function(c, x, y, w, h)
{
var xSize = parseInt(mxUtils.getValue(this.style, mxShapeSysMLPackage.prototype.cst.LABEL_X, '90'));
var ySize = 20;
xSize = Math.min(xSize, w);
if (xSize > ySize)
{
c.begin();
c.moveTo(0, ySize);
c.lineTo(xSize - ySize * 0.5, ySize);
c.lineTo(xSize, ySize * 0.5);
c.lineTo(xSize, 0);
c.stroke();
}
};
mxCellRenderer.registerShape(mxShapeSysMLPackage.prototype.cst.PACKAGE, mxShapeSysMLPackage);
Graph.handleFactory[mxShapeSysMLPackage.prototype.cst.PACKAGE] = function(state)
{
var handles = [Graph.createHandle(state, ['labelX'], function(bounds)
{
var labelX = Math.max(0, Math.min(bounds.width, parseFloat(mxUtils.getValue(this.state.style, 'labelX', 90))));
return new mxPoint(bounds.x + labelX, bounds.y + 10);
}, function(bounds, pt)
{
this.state.style['labelX'] = Math.round(100 * Math.max(0, Math.min(bounds.width, pt.x - bounds.x))) / 100;
})];
return handles;
}
//**********************************************************************************************************************************************************
//Package2
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLPackage2(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLPackage2, mxShape);
mxShapeSysMLPackage2.prototype.cst = {
PACKAGE2 : 'mxgraph.sysml.package2',
LABEL_X : 'labelX'
};
mxShapeSysMLPackage2.prototype.customProperties = [
{name: 'labelX', dispName: 'Header Width', type: 'float', min:0, defVal:90}
];
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLPackage2.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.translate(x, y);
this.background(c, x, y, w, h);
c.setShadow(false);
this.foreground(c, x, y, w, h);
};
mxShapeSysMLPackage2.prototype.background = function(c, x, y, w, h)
{
c.rect(0, 0, w, h);
c.stroke();
};
mxShapeSysMLPackage2.prototype.foreground = function(c, x, y, w, h)
{
var xSize = parseInt(mxUtils.getValue(this.style, mxShapeSysMLPackage2.prototype.cst.LABEL_X, '90'));
var ySize = 20;
xSize = Math.min(xSize, w);
if (xSize > ySize)
{
c.begin();
c.moveTo(0, ySize);
c.lineTo(xSize - ySize * 0.5, ySize);
c.lineTo(xSize, ySize * 0.5);
c.lineTo(xSize, 0);
c.lineTo(0, 0);
c.close();
c.fillAndStroke();
}
};
mxCellRenderer.registerShape(mxShapeSysMLPackage2.prototype.cst.PACKAGE2, mxShapeSysMLPackage2);
Graph.handleFactory[mxShapeSysMLPackage2.prototype.cst.PACKAGE2] = function(state)
{
var handles = [Graph.createHandle(state, ['labelX'], function(bounds)
{
var labelX = Math.max(0, Math.min(bounds.width, parseFloat(mxUtils.getValue(this.state.style, 'labelX', 90))));
return new mxPoint(bounds.x + labelX, bounds.y + 10);
}, function(bounds, pt)
{
this.state.style['labelX'] = Math.round(100 * Math.max(0, Math.min(bounds.width, pt.x - bounds.x))) / 100;
})];
return handles;
}
//**********************************************************************************************************************************************************
//None
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLNone(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLNone, mxShape);
mxShapeSysMLNone.prototype.cst = {
NONE : 'mxgraph.sysml.none'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLNone.prototype.paintVertexShape = function(c, x, y, w, h)
{
};
mxCellRenderer.registerShape(mxShapeSysMLNone.prototype.cst.NONE, mxShapeSysMLNone);
//**********************************************************************************************************************************************************
//Rectangle
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLRect(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLRect, mxShape);
mxShapeSysMLRect.prototype.cst = {
RECT : 'mxgraph.sysml.rect'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLRect.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x, y, w, h);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLRect.prototype.cst.RECT, mxShapeSysMLRect);
//**********************************************************************************************************************************************************
//Port
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLPortOne(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLPortOne, mxShape);
mxShapeSysMLPortOne.prototype.cst = {
PORT1 : 'mxgraph.sysml.port1'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLPortOne.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x + w * 0.05, y, w - w * 0.1, h);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLPortOne.prototype.cst.PORT1, mxShapeSysMLPortOne);
mxShapeSysMLPortOne.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 0.25), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 0.25), false));
return (constr);
};
//**********************************************************************************************************************************************************
//Port2
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLPortTwo(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLPortTwo, mxShape);
mxShapeSysMLPortTwo.prototype.cst = {
PORT2 : 'mxgraph.sysml.port2'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLPortTwo.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x + w * 0.05, y, w * 0.8, h);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLPortTwo.prototype.cst.PORT2, mxShapeSysMLPortTwo);
mxShapeSysMLPortTwo.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 0.25), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.95, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.05, 0.25), false));
return (constr);
};
//**********************************************************************************************************************************************************
//Port3
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLPortThree(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLPortThree, mxShape);
mxShapeSysMLPortThree.prototype.cst = {
PORT3 : 'mxgraph.sysml.port3'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLPortThree.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x + w * 0.07, y, w * 0.86, h);
c.fillAndStroke();
c.rect(x, y + h * 0.125, w * 0.14, h * 0.25);
c.fillAndStroke();
c.rect(x, y + h * 0.625, w * 0.14, h * 0.25);
c.fillAndStroke();
c.rect(x + w * 0.86, y + h * 0.375, w * 0.14, h * 0.25);
c.fillAndStroke();
this.drawIn(c, x + w * 0.01, y + h * 0.2, w * 0.11, h * 0.10);
this.drawOut(c, x + w * 0.02, y + h * 0.7, w * 0.11, h * 0.10);
this.drawInOut(c, x + w * 0.88, y + h * 0.45, w * 0.1, h * 0.10);
};
mxShapeSysMLPortThree.prototype.drawIn = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x, y + h * 0.5);
c.lineTo(x + w, y + h * 0.5);
c.moveTo(x + w * 0.75, y);
c.lineTo(x + w, y + h * 0.5);
c.lineTo(x + w * 0.75, y + h);
c.stroke();
}
mxShapeSysMLPortThree.prototype.drawOut = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x, y + h * 0.5);
c.lineTo(x + w, y + h * 0.5);
c.moveTo(x + w * 0.25, y);
c.lineTo(x, y + h * 0.5);
c.lineTo(x + w * 0.25, y + h);
c.stroke();
}
mxShapeSysMLPortThree.prototype.drawInOut = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x + w * 0.75, y);
c.lineTo(x + w, y + h * 0.5);
c.lineTo(x + w * 0.75, y + h);
c.moveTo(x + w * 0.25, y);
c.lineTo(x, y + h * 0.5);
c.lineTo(x + w * 0.25, y + h);
c.stroke();
}
mxCellRenderer.registerShape(mxShapeSysMLPortThree.prototype.cst.PORT3, mxShapeSysMLPortThree);
//**********************************************************************************************************************************************************
//Port
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLPortFour(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLPortFour, mxShape);
mxShapeSysMLPortFour.prototype.cst = {
PORT4 : 'mxgraph.sysml.port4'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLPortFour.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x + w * 0.05, y, w - w * 0.05, h);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLPortFour.prototype.cst.PORT4, mxShapeSysMLPortFour);
mxShapeSysMLPortFour.prototype.constraints = [
new mxConnectionConstraint(new mxPoint(0.5, 0), true),
new mxConnectionConstraint(new mxPoint(0, 0.5), true),
new mxConnectionConstraint(new mxPoint(0.5, 1), true),
new mxConnectionConstraint(new mxPoint(1, 0.5), true)
];
//**********************************************************************************************************************************************************
//Item Flow
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLItemFlow(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLItemFlow, mxShape);
mxShapeSysMLItemFlow.prototype.cst = {
ITEM_FLOW : 'mxgraph.sysml.itemFlow',
FLOW_DIR : 'flowDir',
FLOW_TYPE : 'flowType'
};
mxShapeSysMLItemFlow.prototype.customProperties = [
{name: 'flowDir', dispName: 'Flow Direction', type: 'enum',
enumList:[
{val:'n', dispName:'North'},
{val:'s', dispName:'South'},
{val:'e', dispName:'East'},
{val:'w', dispName:'West'}
]},
{name: 'flowType', dispName: 'Flow Type', type: 'enum',
enumList:[
{val:'in', dispName:'In'},
{val:'out', dispName:'Out'}
]}];
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLItemFlow.prototype.paintVertexShape = function(c, x, y, w, h)
{
var flowDir = mxUtils.getValue(this.style, mxShapeSysMLItemFlow.prototype.cst.FLOW_DIR, 'none').toLowerCase();
var flowType = mxUtils.getValue(this.style, mxShapeSysMLItemFlow.prototype.cst.FLOW_TYPE, 'none');
if (flowDir === 'n')
{
c.rect(x, y + 10, w, h - 10);
c.fillAndStroke();
c.setShadow(false);
c.rect(x + w * 0.5 - 10, y, 20, 20);
c.fillAndStroke();
if (flowType === 'in')
{
this.drawDown(c, x + w * 0.5 - 5, y + 2, 10, 16);
}
else if (flowType === 'out')
{
this.drawUp(c, x + w * 0.5 - 5, y + 2, 10, 16);
}
}
else if (flowDir === 's')
{
c.rect(x, y, w, h - 10);
c.fillAndStroke();
c.setShadow(false);
c.rect(x + w * 0.5 - 10, y + h - 20, 20, 20);
c.fillAndStroke();
if (flowType === 'in')
{
this.drawUp(c, x + w * 0.5 - 5, y + h - 18, 10, 16);
}
else if (flowType === 'out')
{
this.drawDown(c, x + w * 0.5 - 5, y + h - 18, 10, 16);
}
}
else if (flowDir === 'w')
{
c.rect(x + 10, y, w - 10, h);
c.fillAndStroke();
c.setShadow(false);
c.rect(x, y + h * 0.5 - 10, 20, 20);
c.fillAndStroke();
if (flowType === 'in')
{
this.drawRight(c, x + 2, y + h * 0.5 - 5, 16, 10);
}
else if (flowType === 'out')
{
this.drawLeft(c, x + 2, y + h * 0.5 - 5, 16, 10);
}
}
else if (flowDir === 'e')
{
c.rect(x, y, w - 10, h);
c.fillAndStroke();
c.setShadow(false);
c.rect(x + w - 20, y + h * 0.5 - 10, 20, 20);
c.fillAndStroke();
if (flowType === 'in')
{
this.drawLeft(c, x + w - 18, y + h * 0.5 - 5, 16, 10);
}
else if (flowType === 'out')
{
this.drawRight(c, x + w - 18, y + h * 0.5 - 5, 16, 10);
}
}
};
mxShapeSysMLItemFlow.prototype.drawRight = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x, y + h * 0.5);
c.lineTo(x + w, y + h * 0.5);
c.moveTo(x + w * 0.75, y);
c.lineTo(x + w, y + h * 0.5);
c.lineTo(x + w * 0.75, y + h);
c.stroke();
}
mxShapeSysMLItemFlow.prototype.drawDown = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x + w * 0.5, y);
c.lineTo(x + w * 0.5, y + h);
c.moveTo(x, y + h * 0.75);
c.lineTo(x + w * 0.5, y + h);
c.lineTo(x + w, y + h * 0.75);
c.stroke();
}
mxShapeSysMLItemFlow.prototype.drawLeft = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x, y + h * 0.5);
c.lineTo(x + w, y + h * 0.5);
c.moveTo(x + w * 0.25, y);
c.lineTo(x, y + h * 0.5);
c.lineTo(x + w * 0.25, y + h);
c.stroke();
}
mxShapeSysMLItemFlow.prototype.drawUp = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x + w * 0.5, y + h);
c.lineTo(x + w * 0.5, y);
c.moveTo(x, y + h * 0.25);
c.lineTo(x + w * 0.5, y);
c.lineTo(x + w, y + h * 0.25);
c.stroke();
}
mxCellRenderer.registerShape(mxShapeSysMLItemFlow.prototype.cst.ITEM_FLOW, mxShapeSysMLItemFlow);
mxShapeSysMLItemFlow.prototype.constraints = [
new mxConnectionConstraint(new mxPoint(0.5, 0), true),
new mxConnectionConstraint(new mxPoint(1, 0.5), true),
new mxConnectionConstraint(new mxPoint(0.5, 1), true),
new mxConnectionConstraint(new mxPoint(0, 0.5), true)
];
//**********************************************************************************************************************************************************
//Item Flow Left
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLItemFlowLeft(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLItemFlowLeft, mxShape);
mxShapeSysMLItemFlowLeft.prototype.cst = {
ITEM_FLOW_LEFT : 'mxgraph.sysml.itemFlowLeft'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLItemFlowLeft.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x + 10, y, w - 10, h);
c.fillAndStroke();
c.rect(x, y + h * 0.25 - 10, 20, 20);
c.fillAndStroke();
c.rect(x, y + h * 0.5 - 10, 20, 20);
c.fillAndStroke();
c.rect(x, y + h * 0.75 - 10, 20, 20);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLItemFlowLeft.prototype.cst.ITEM_FLOW_LEFT, mxShapeSysMLItemFlowLeft);
mxShapeSysMLItemFlowLeft.prototype.constraints = [
new mxConnectionConstraint(new mxPoint(0.5, 0), true),
new mxConnectionConstraint(new mxPoint(1, 0.5), true),
new mxConnectionConstraint(new mxPoint(0.5, 1), true),
new mxConnectionConstraint(new mxPoint(0, 0.25), true),
new mxConnectionConstraint(new mxPoint(0, 0.5), true),
new mxConnectionConstraint(new mxPoint(0, 0.75), true)
];
//**********************************************************************************************************************************************************
//Item Flow Right
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLItemFlowRight(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLItemFlowRight, mxShape);
mxShapeSysMLItemFlowRight.prototype.cst = {
ITEM_FLOW_RIGHT : 'mxgraph.sysml.itemFlowRight'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLItemFlowRight.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x, y, w - 10, h);
c.fillAndStroke();
c.rect(x + w - 20, y + h * 0.25 - 10, 20, 20);
c.fillAndStroke();
c.rect(x + w - 20, y + h * 0.5 - 10, 20, 20);
c.fillAndStroke();
c.rect(x + w - 20, y + h * 0.75 - 10, 20, 20);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLItemFlowRight.prototype.cst.ITEM_FLOW_RIGHT, mxShapeSysMLItemFlowRight);
mxShapeSysMLItemFlowRight.prototype.constraints = [
new mxConnectionConstraint(new mxPoint(0.5, 0), true),
new mxConnectionConstraint(new mxPoint(0, 0.5), true),
new mxConnectionConstraint(new mxPoint(0.5, 1), true),
new mxConnectionConstraint(new mxPoint(1, 0.25), true),
new mxConnectionConstraint(new mxPoint(1, 0.5), true),
new mxConnectionConstraint(new mxPoint(1, 0.75), true)
];
//**********************************************************************************************************************************************************
//Nested Port
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLNestedPort(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLNestedPort, mxShape);
mxShapeSysMLNestedPort.prototype.cst = {
NESTED_PORT : 'mxgraph.sysml.nestedPort'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLNestedPort.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x + w * 0.08, y, w * 0.92, h);
c.fillAndStroke();
c.rect(x + w * 0.03, y + h * 0.1, w * 0.1, h * 0.8);
c.fillAndStroke();
c.rect(x, y + h * 0.15, w * 0.06, h * 0.16);
c.fillAndStroke();
c.rect(x, y + h * 0.42, w * 0.06, h * 0.16);
c.fillAndStroke();
c.rect(x, y + h * 0.69, w * 0.06, h * 0.16);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLNestedPort.prototype.cst.NESTED_PORT, mxShapeSysMLNestedPort);
//**********************************************************************************************************************************************************
//Package Containment
//**********************************************************************************************************************************************************
mxMarker.addMarker('sysMLPackCont', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
{
var nx = unitX * (size + sw + 1);
var ny = unitY * (size + sw + 1);
var a = size / 2;
return function()
{
c.begin();
c.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2);
c.lineTo(pe.x - nx / 2 + ny / 2, pe.y - ny / 2 - nx / 2);
c.stroke();
c.ellipse(pe.x - 0.5 * nx - a, pe.y - 0.5 * ny - a, 2 * a, 2 * a);
c.stroke();
};
});
//**********************************************************************************************************************************************************
//Required Interface
//**********************************************************************************************************************************************************
mxMarker.addMarker('sysMLReqInt', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
{
var nx = unitX * (size + sw + 1);
var ny = unitY * (size + sw + 1);
var a = size / 2;
return function()
{
var fillColor = mxUtils.getValue(shape.style, mxConstants.STYLE_FILLCOLOR, 'none');
c.setFillColor(fillColor);
c.ellipse(pe.x - 0.5 * nx - a, pe.y - 0.5 * ny - a, 2 * a, 2 * a);
c.fillAndStroke();
};
});
//**********************************************************************************************************************************************************
//Provided Interface
//**********************************************************************************************************************************************************
mxMarker.addMarker('sysMLProvInt', function(c, shape, type, pe, unitX, unitY, size, source, sw, filled)
{
var nx = unitX * (size + sw + 1);
var ny = unitY * (size + sw + 1);
var a = size / 2;
return function()
{
var fillColor = mxUtils.getValue(shape.style, mxConstants.STYLE_FILLCOLOR, 'none');
c.setFillColor(fillColor);
c.begin();
c.moveTo(pe.x - ny / 2, pe.y + nx / 2);
c.arcTo(a, a, 0, 0, 1, pe.x + ny / 2, pe.y - nx / 2);
c.fillAndStroke();
};
});
//**********************************************************************************************************************************************************
//Parametric Diagram
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLParametricDiagram(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLParametricDiagram, mxShape);
mxShapeSysMLParametricDiagram.prototype.cst = {
PARAM_DGM : 'mxgraph.sysml.paramDgm'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLParametricDiagram.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.roundrect(x, y, w, h, 10, 10);
c.fillAndStroke();
c.setShadow(false);
if (h > 60)
{
c.rect(x, y + h * 0.25 - 10, 20, 20);
c.stroke();
c.rect(x, y + h * 0.75 - 10, 20, 20);
c.stroke();
}
};
mxCellRenderer.registerShape(mxShapeSysMLParametricDiagram.prototype.cst.PARAM_DGM, mxShapeSysMLParametricDiagram);
//**********************************************************************************************************************************************************
//Constraint Property
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLConstraintProperty(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLConstraintProperty, mxShape);
mxShapeSysMLConstraintProperty.prototype.cst = {
CONS_PROP : 'mxgraph.sysml.consProp'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLConstraintProperty.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.rect(x, y, w, h);
c.fillAndStroke();
c.setShadow(false);
if (h > 60)
{
c.rect(x, y + 50, 20, 20);
c.stroke();
c.rect(x, y + 80, 20, 20);
c.stroke();
}
};
mxCellRenderer.registerShape(mxShapeSysMLConstraintProperty.prototype.cst.CONS_PROP, mxShapeSysMLConstraintProperty);
//**********************************************************************************************************************************************************
//Call Behavior Action
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLCallBehaviorAction(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLCallBehaviorAction, mxShape);
mxShapeSysMLCallBehaviorAction.prototype.cst = {
CALL_BEH_ACT : 'mxgraph.sysml.callBehAct'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLCallBehaviorAction.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.roundrect(x, y, w, h, 10, 10);
c.fillAndStroke();
if ((h > 30) && (w > 40))
{
c.setShadow(false);
this.drawSymb(c, x + w - 30, y + h - 30, 20, 20);
}
};
mxShapeSysMLCallBehaviorAction.prototype.drawSymb = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x + w * 0.5, y);
c.lineTo(x + w * 0.5, y + h);
c.moveTo(x, y + h);
c.lineTo(x, y + h * 0.5);
c.lineTo(x + w, y + h * 0.5);
c.lineTo(x + w, y + h);
c.stroke();
};
mxCellRenderer.registerShape(mxShapeSysMLCallBehaviorAction.prototype.cst.CALL_BEH_ACT, mxShapeSysMLCallBehaviorAction);
mxShapeSysMLCallBehaviorAction.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false, null, 2.9, 2.9));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0), false, null, -2.9, 2.9));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.25), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 1), false, null, -2.9, -2.9));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 1), false, null, 2.9, -2.9));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.25), false));
return (constr);
};
//**********************************************************************************************************************************************************
//Accept Event Action
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLAcceptEventAction(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLAcceptEventAction, mxShape);
mxShapeSysMLAcceptEventAction.prototype.cst = {
ACC_EVENT : 'mxgraph.sysml.accEvent'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLAcceptEventAction.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x, y);
c.lineTo(x + w, y);
c.lineTo(x + w, y + h);
c.lineTo(x, y + h);
c.lineTo(x + h * 0.3, y + h * 0.5);
c.close();
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLAcceptEventAction.prototype.cst.ACC_EVENT, mxShapeSysMLAcceptEventAction);
mxShapeSysMLAcceptEventAction.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.25), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.75), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false, null, h * 0.3, 0));
return (constr);
};
//**********************************************************************************************************************************************************
//Time Event
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLTimeEvent(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLTimeEvent, mxShape);
mxShapeSysMLTimeEvent.prototype.cst = {
TIME_EVENT : 'mxgraph.sysml.timeEvent'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLTimeEvent.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x, y);
c.lineTo(x + w, y);
c.lineTo(x, y + h);
c.lineTo(x + w, y + h);
c.close();
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLTimeEvent.prototype.cst.TIME_EVENT, mxShapeSysMLTimeEvent);
mxShapeSysMLTimeEvent.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0.5), false));
return (constr);
};
//**********************************************************************************************************************************************************
//Send Signal Action
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLSendSignalAction(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLSendSignalAction, mxShape);
mxShapeSysMLSendSignalAction.prototype.cst = {
SEND_SIG_ACT : 'mxgraph.sysml.sendSigAct'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLSendSignalAction.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.begin();
c.moveTo(x, y);
c.lineTo(x + w - h * 0.3, y);
c.lineTo(x + w, y + h * 0.5);
c.lineTo(x + w - h * 0.3, y + h);
c.lineTo(x, y + h);
c.close();
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLSendSignalAction.prototype.cst.SEND_SIG_ACT, mxShapeSysMLSendSignalAction);
mxShapeSysMLSendSignalAction.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0), false, null, -h * 0.3, 0));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 1), false, null, -h * 0.3, 0));
constr.push(new mxConnectionConstraint(new mxPoint(0.25, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.75, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.25), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.75), false));
return (constr);
};
//**********************************************************************************************************************************************************
//Activity Final
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLActivityFinal(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLActivityFinal, mxShape);
mxShapeSysMLActivityFinal.prototype.cst = {
ACT_FINAL : 'mxgraph.sysml.actFinal'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLActivityFinal.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.ellipse(x, y, w, h);
c.fillAndStroke();
var strokeColor = mxUtils.getValue(this.style, mxConstants.STYLE_STROKECOLOR, '#000000');
c.setFillColor(strokeColor);
c.ellipse(x + 5, y + 5, w - 10, h - 10);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLActivityFinal.prototype.cst.ACT_FINAL, mxShapeSysMLActivityFinal);
mxShapeSysMLActivityFinal.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0.145, 0.145), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.855, 0.145), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.855, 0.855), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.145, 0.855), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
return (constr);
};
//**********************************************************************************************************************************************************
//Activity Parameter Node
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLActivityParameterNode(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLActivityParameterNode, mxShape);
mxShapeSysMLActivityParameterNode.prototype.cst = {
ACT_PARAM_NODE : 'mxgraph.sysml.actParamNode'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLActivityParameterNode.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.translate(x, y);
c.begin();
var minX = Math.max(w * 0.35, 70);
var maxX = Math.min(w * 0.65, w - 10);
c.begin();
c.moveTo(minX, h);
c.lineTo(10, h);
c.lineTo(10, 0);
c.lineTo(minX, 0);
c.moveTo(maxX, h);
c.lineTo(w - 10, h);
c.lineTo(w - 10, 0);
c.lineTo(maxX, 0);
c.stroke();
var xSize = 50;
var ySize = 20;
xSize = Math.min(xSize, w);
if (xSize > ySize)
{
c.begin();
c.moveTo(10, ySize);
c.lineTo(xSize - ySize * 0.5, ySize);
c.lineTo(xSize, ySize * 0.5);
c.lineTo(xSize, 0);
c.lineTo(10, 0);
c.close();
c.fillAndStroke();
}
c.rect(0, h * 0.35 - 10, 20, 20);
c.fillAndStroke();
c.rect(0, h * 0.65 - 10, 20, 20);
c.fillAndStroke();
c.rect(w - 20, h * 0.5 - 10, 20, 20);
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeSysMLActivityParameterNode.prototype.cst.ACT_PARAM_NODE, mxShapeSysMLActivityParameterNode);
mxShapeSysMLActivityParameterNode.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.35), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.65), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.5), false));
return (constr);
};
//**********************************************************************************************************************************************************
//Control Operator
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLControlOperator(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLControlOperator, mxShape);
mxShapeSysMLControlOperator.prototype.cst = {
CONT_OPER : 'mxgraph.sysml.contOper'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLControlOperator.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.translate(x, y);
this.background(c, x, y, w, h);
c.setShadow(false);
this.foreground(c, x, y, w, h);
};
mxShapeSysMLControlOperator.prototype.background = function(c, x, y, w, h)
{
c.rect(0, 0, w, h);
c.fillAndStroke();
};
mxShapeSysMLControlOperator.prototype.foreground = function(c, x, y, w, h)
{
var xSize = 130;
var ySize = 20;
xSize = Math.min(xSize, w);
if (xSize > ySize)
{
c.begin();
c.moveTo(0, ySize);
c.lineTo(xSize - ySize * 0.5, ySize);
c.lineTo(xSize, ySize * 0.5);
c.lineTo(xSize, 0);
c.stroke();
}
};
mxCellRenderer.registerShape(mxShapeSysMLControlOperator.prototype.cst.CONT_OPER, mxShapeSysMLControlOperator);
//**********************************************************************************************************************************************************
//Flow Final
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeSysMLFlowFinal(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeSysMLFlowFinal, mxShape);
mxShapeSysMLFlowFinal.prototype.cst = {
FLOW_FINAL : 'mxgraph.sysml.flowFinal'
};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeSysMLFlowFinal.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.translate(x, y);
c.ellipse(0, 0, w, h);
c.fillAndStroke();
c.setShadow(false);
c.begin();
c.moveTo(w * 0.145, h * 0.145);
c.lineTo(w * 0.855, h * 0.855);
c.moveTo(w * 0.855, h * 0.145);
c.lineTo(w * 0.145, h * 0.855);
c.stroke();
};
mxCellRenderer.registerShape(mxShapeSysMLFlowFinal.prototype.cst.FLOW_FINAL, mxShapeSysMLFlowFinal);
mxShapeSysMLFlowFinal.prototype.getConstraints = function(style, w, h)
{
var constr = [];
constr.push(new mxConnectionConstraint(new mxPoint(0.145, 0.145), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 0), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.855, 0.145), false));
constr.push(new mxConnectionConstraint(new mxPoint(1, 0.5), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.855, 0.855), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.5, 1), false));
constr.push(new mxConnectionConstraint(new mxPoint(0.145, 0.855), false));
constr.push(new mxConnectionConstraint(new mxPoint(0, 0.5), false));
return (constr);