123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- import {
- toPoint
- } from '../../util/Event';
- import {
- getMidPoint,
- pointsAligned
- } from '../../util/Geometry';
- import {
- append as svgAppend,
- attr as svgAttr,
- classes as svgClasses,
- create as svgCreate
- } from 'tiny-svg';
- import {
- rotate,
- translate
- } from '../../util/SvgTransformUtil';
- export var BENDPOINT_CLS = 'djs-bendpoint';
- export var SEGMENT_DRAGGER_CLS = 'djs-segment-dragger';
- export function toCanvasCoordinates(canvas, event) {
- var position = toPoint(event),
- clientRect = canvas._container.getBoundingClientRect(),
- offset;
- // canvas relative position
- offset = {
- x: clientRect.left,
- y: clientRect.top
- };
- // update actual event payload with canvas relative measures
- var viewbox = canvas.viewbox();
- return {
- x: viewbox.x + (position.x - offset.x) / viewbox.scale,
- y: viewbox.y + (position.y - offset.y) / viewbox.scale
- };
- }
- export function addBendpoint(parentGfx, cls) {
- var groupGfx = svgCreate('g');
- svgClasses(groupGfx).add(BENDPOINT_CLS);
- svgAppend(parentGfx, groupGfx);
- var visual = svgCreate('circle');
- svgAttr(visual, {
- cx: 0,
- cy: 0,
- r: 4
- });
- svgClasses(visual).add('djs-visual');
- svgAppend(groupGfx, visual);
- var hit = svgCreate('circle');
- svgAttr(hit, {
- cx: 0,
- cy: 0,
- r: 10
- });
- svgClasses(hit).add('djs-hit');
- svgAppend(groupGfx, hit);
- if (cls) {
- svgClasses(groupGfx).add(cls);
- }
- return groupGfx;
- }
- function createParallelDragger(parentGfx, position, alignment) {
- var draggerGfx = svgCreate('g');
- svgAppend(parentGfx, draggerGfx);
- var width = 14,
- height = 3,
- padding = 6,
- hitWidth = width + padding,
- hitHeight = height + padding;
- var visual = svgCreate('rect');
- svgAttr(visual, {
- x: -width / 2,
- y: -height / 2,
- width: width,
- height: height
- });
- svgClasses(visual).add('djs-visual');
- svgAppend(draggerGfx, visual);
- var hit = svgCreate('rect');
- svgAttr(hit, {
- x: -hitWidth / 2,
- y: -hitHeight / 2,
- width: hitWidth,
- height: hitHeight
- });
- svgClasses(hit).add('djs-hit');
- svgAppend(draggerGfx, hit);
- rotate(draggerGfx, alignment === 'h' ? 90 : 0, 0, 0);
- return draggerGfx;
- }
- export function addSegmentDragger(parentGfx, segmentStart, segmentEnd) {
- var groupGfx = svgCreate('g'),
- mid = getMidPoint(segmentStart, segmentEnd),
- alignment = pointsAligned(segmentStart, segmentEnd);
- svgAppend(parentGfx, groupGfx);
- createParallelDragger(groupGfx, mid, alignment);
- svgClasses(groupGfx).add(SEGMENT_DRAGGER_CLS);
- svgClasses(groupGfx).add(alignment === 'h' ? 'vertical' : 'horizontal');
- translate(groupGfx, mid.x, mid.y);
- return groupGfx;
- }
|