#6097 Added scaffolding for the new function in all shapes

This commit is contained in:
Knut Sveidqvist 2024-11-30 09:49:54 +01:00
parent 1e3ea13323
commit 33d8b1a78d
55 changed files with 385 additions and 39 deletions

View File

@ -6,6 +6,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export function anchor<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export function anchor<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles } = styles2String(node); const { labelStyles } = styles2String(node);
@ -37,6 +38,11 @@ export function anchor<T extends SVGGraphicsElement>(parent: D3Selection<T>, nod
updateNodeBounds(node, circleElem); updateNodeBounds(node, circleElem);
node.calcIntersect = function (bounds: Bounds, point: Point) {
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('Circle intersect', node, radius, point); log.info('Circle intersect', node, radius, point);
return intersect.circle(node, radius, point); return intersect.circle(node, radius, point);

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
function generateArcPoints( function generateArcPoints(
x1: number, x1: number,
@ -118,6 +119,11 @@ export async function bowTieRect<T extends SVGGraphicsElement>(parent: D3Selecti
updateNodeBounds(node, bowTieRectShape); updateNodeBounds(node, bowTieRectShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -3,16 +3,10 @@ import intersect from '../intersect/index.js';
import type { Node } from '../../types.js'; import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { insertPolygonShape } from './insertPolygonShape.js'; import { insertPolygonShape } from './insertPolygonShape.js';
import { createPathFromPoints } from './util.js'; import { createPathFromPoints } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
// const createPathFromPoints = (points: { x: number; y: number }[]): string => {
// const pointStrings = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`);
// pointStrings.push('Z');
// return pointStrings.join(' ');
// };
export async function card<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function card<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -62,6 +56,12 @@ export async function card<T extends SVGGraphicsElement>(parent: D3Selection<T>,
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -4,6 +4,7 @@ import rough from 'roughjs';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { createPathFromPoints, getNodeClasses } from './util.js'; import { createPathFromPoints, getNodeClasses } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export function choice<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export function choice<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { nodeStyles } = styles2String(node); const { nodeStyles } = styles2String(node);
@ -47,6 +48,12 @@ export function choice<T extends SVGGraphicsElement>(parent: D3Selection<T>, nod
node.width = 28; node.width = 28;
node.height = 28; node.height = 28;
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -9,6 +9,7 @@ import intersect from '../intersect/index.js';
import { textHelper } from '../../../diagrams/class/shapeUtil.js'; import { textHelper } from '../../../diagrams/class/shapeUtil.js';
import { evaluate } from '../../../diagrams/common/common.js'; import { evaluate } from '../../../diagrams/common/common.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function classBox<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function classBox<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const config = getConfig(); const config = getConfig();
@ -199,6 +200,11 @@ export async function classBox<T extends SVGGraphicsElement>(parent: D3Selection
} }
updateNodeBounds(node, rect); updateNodeBounds(node, rect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);
}; };

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import intersect from '../intersect/index.js'; import intersect from '../intersect/index.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
function createLine(r: number) { function createLine(r: number) {
const xAxis45 = Math.cos(Math.PI / 4); // cosine of 45 degrees const xAxis45 = Math.cos(Math.PI / 4); // cosine of 45 degrees
@ -57,6 +58,12 @@ export function crossedCircle<T extends SVGGraphicsElement>(parent: D3Selection<
updateNodeBounds(node, crossedCircle); updateNodeBounds(node, crossedCircle);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('crossedCircle intersect', node, { radius, point }); log.info('crossedCircle intersect', node, { radius, point });
const pos = intersect.circle(node, radius, point); const pos = intersect.circle(node, radius, point);

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
function generateCirclePoints( function generateCirclePoints(
centerX: number, centerX: number,
@ -105,6 +106,12 @@ export async function curlyBraceLeft<T extends SVGGraphicsElement>(
updateNodeBounds(node, curlyBraceLeftShape); updateNodeBounds(node, curlyBraceLeftShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, rectPoints, point); const pos = intersect.polygon(node, rectPoints, point);

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
function generateCirclePoints( function generateCirclePoints(
centerX: number, centerX: number,
@ -105,6 +106,12 @@ export async function curlyBraceRight<T extends SVGGraphicsElement>(
updateNodeBounds(node, curlyBraceRightShape); updateNodeBounds(node, curlyBraceRightShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, rectPoints, point); const pos = intersect.polygon(node, rectPoints, point);

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
function generateCirclePoints( function generateCirclePoints(
centerX: number, centerX: number,
@ -124,6 +125,12 @@ export async function curlyBraces<T extends SVGGraphicsElement>(
updateNodeBounds(node, curlyBracesShape); updateNodeBounds(node, curlyBracesShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, rectPoints, point); const pos = intersect.polygon(node, rectPoints, point);

View File

@ -10,6 +10,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function curvedTrapezoid<T extends SVGGraphicsElement>( export async function curvedTrapezoid<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -66,6 +67,12 @@ export async function curvedTrapezoid<T extends SVGGraphicsElement>(
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export const createCylinderPathD = ( export const createCylinderPathD = (
x: number, x: number,
@ -96,6 +97,12 @@ export async function cylinder<T extends SVGGraphicsElement>(parent: D3Selection
`translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})` `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`
); );
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.rect(node, point); const pos = intersect.rect(node, point);
const x = pos.x - (node.x ?? 0); const x = pos.x - (node.x ?? 0);

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function dividedRectangle<T extends SVGGraphicsElement>( export async function dividedRectangle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -62,6 +63,12 @@ export async function dividedRectangle<T extends SVGGraphicsElement>(
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.rect(node, point); const pos = intersect.rect(node, point);
return pos; return pos;

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export const createCylinderPathD = ( export const createCylinderPathD = (
x: number, x: number,
@ -91,6 +92,12 @@ export async function cylinder<T extends SVGGraphicsElement>(parent: D3Selection
updateNodeBounds(node, cylinder); updateNodeBounds(node, cylinder);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.rect(node, point); const pos = intersect.rect(node, point);
const x = pos.x - (node.x ?? 0); const x = pos.x - (node.x ?? 0);

View File

@ -6,6 +6,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export async function doublecircle<T extends SVGGraphicsElement>( export async function doublecircle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -62,6 +63,12 @@ export async function doublecircle<T extends SVGGraphicsElement>(
updateNodeBounds(node, circleGroup); updateNodeBounds(node, circleGroup);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('DoubleCircle intersect', node, outerRadius, point); log.info('DoubleCircle intersect', node, outerRadius, point);
return intersect.circle(node, outerRadius, point); return intersect.circle(node, outerRadius, point);

View File

@ -5,6 +5,7 @@ import intersect from '../intersect/index.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { getNodeClasses, updateNodeBounds } from './util.js'; import { getNodeClasses, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export function filledCircle<T extends SVGGraphicsElement>( export function filledCircle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -46,6 +47,12 @@ export function filledCircle<T extends SVGGraphicsElement>(
updateNodeBounds(node, filledCircle); updateNodeBounds(node, filledCircle);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('filledCircle intersect', node, { radius, point }); log.info('filledCircle intersect', node, { radius, point });
const pos = intersect.circle(node, radius, point); const pos = intersect.circle(node, radius, point);

View File

@ -6,6 +6,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { createPathFromPoints } from './util.js'; import { createPathFromPoints } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function flippedTriangle<T extends SVGGraphicsElement>( export async function flippedTriangle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -59,6 +60,12 @@ export async function flippedTriangle<T extends SVGGraphicsElement>(
`translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})` `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`
); );
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('Triangle intersect', node, points, point); log.info('Triangle intersect', node, points, point);
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);

View File

@ -4,6 +4,7 @@ import intersect from '../intersect/index.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { getNodeClasses, updateNodeBounds } from './util.js'; import { getNodeClasses, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export function forkJoin<T extends SVGGraphicsElement>( export function forkJoin<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -59,6 +60,12 @@ export function forkJoin<T extends SVGGraphicsElement>(
node.width += padding / 2 || 0; node.width += padding / 2 || 0;
node.height += padding / 2 || 0; node.height += padding / 2 || 0;
} }
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);
}; };

View File

@ -11,6 +11,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function halfRoundedRectangle<T extends SVGGraphicsElement>( export async function halfRoundedRectangle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -63,6 +64,12 @@ export async function halfRoundedRectangle<T extends SVGGraphicsElement>(
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('Pill intersect', node, { radius, point }); log.info('Pill intersect', node, { radius, point });
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { insertPolygonShape } from './insertPolygonShape.js'; import { insertPolygonShape } from './insertPolygonShape.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export const createHexagonPathD = ( export const createHexagonPathD = (
x: number, x: number,
@ -72,6 +73,12 @@ export async function hexagon<T extends SVGGraphicsElement>(parent: D3Selection<
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -5,6 +5,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function hourglass<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function hourglass<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -52,6 +53,12 @@ export async function hourglass<T extends SVGGraphicsElement>(parent: D3Selectio
// label.attr('transform', `translate(${-bbox.width / 2}, ${(h/2)})`); // To transform text below hourglass shape // label.attr('transform', `translate(${-bbox.width / 2}, ${(h/2)})`); // To transform text below hourglass shape
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('Pill intersect', node, { points }); log.info('Pill intersect', node, { points });
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);

View File

@ -6,6 +6,7 @@ import intersect from '../intersect/index.js';
import { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { labelHelper, updateNodeBounds } from './util.js'; import { labelHelper, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function icon<T extends SVGGraphicsElement>( export async function icon<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -97,6 +98,12 @@ export async function icon<T extends SVGGraphicsElement>(
updateNodeBounds(node, outerShape); updateNodeBounds(node, outerShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('iconSquare intersect', node, point); log.info('iconSquare intersect', node, point);
if (!node.label) { if (!node.label) {

View File

@ -6,6 +6,7 @@ import intersect from '../intersect/index.js';
import { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { labelHelper, updateNodeBounds } from './util.js'; import { labelHelper, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function iconCircle<T extends SVGGraphicsElement>( export async function iconCircle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -94,6 +95,12 @@ export async function iconCircle<T extends SVGGraphicsElement>(
updateNodeBounds(node, outerShape); updateNodeBounds(node, outerShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('iconSquare intersect', node, point); log.info('iconSquare intersect', node, point);
const pos = intersect.rect(node, point); const pos = intersect.rect(node, point);

View File

@ -7,6 +7,7 @@ import { compileStyles, styles2String, userNodeOverrides } from './handDrawnShap
import { createRoundedRectPathD } from './roundedRectPath.js'; import { createRoundedRectPathD } from './roundedRectPath.js';
import { labelHelper, updateNodeBounds } from './util.js'; import { labelHelper, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function iconRounded<T extends SVGGraphicsElement>( export async function iconRounded<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -104,6 +105,12 @@ export async function iconRounded<T extends SVGGraphicsElement>(
updateNodeBounds(node, outerShape); updateNodeBounds(node, outerShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('iconSquare intersect', node, point); log.info('iconSquare intersect', node, point);
if (!node.label) { if (!node.label) {

View File

@ -7,6 +7,7 @@ import { createRoundedRectPathD } from './roundedRectPath.js';
import { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { labelHelper, updateNodeBounds } from './util.js'; import { labelHelper, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function iconSquare<T extends SVGGraphicsElement>( export async function iconSquare<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -104,6 +105,12 @@ export async function iconSquare<T extends SVGGraphicsElement>(
updateNodeBounds(node, outerShape); updateNodeBounds(node, outerShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('iconSquare intersect', node, point); log.info('iconSquare intersect', node, point);
if (!node.label) { if (!node.label) {

View File

@ -5,6 +5,7 @@ import intersect from '../intersect/index.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { labelHelper, updateNodeBounds } from './util.js'; import { labelHelper, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function imageSquare<T extends SVGGraphicsElement>( export async function imageSquare<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -108,6 +109,12 @@ export async function imageSquare<T extends SVGGraphicsElement>(
updateNodeBounds(node, outerShape); updateNodeBounds(node, outerShape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('iconSquare intersect', node, point); log.info('iconSquare intersect', node, point);
if (!node.label) { if (!node.label) {

View File

@ -5,21 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { insertPolygonShape } from './insertPolygonShape.js'; import { insertPolygonShape } from './insertPolygonShape.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
// export const createInvertedTrapezoidPathD = (
// x: number,
// y: number,
// width: number,
// height: number
// ): string => {
// return [
// `M${x + height / 6},${y}`,
// `L${x + width - height / 6},${y}`,
// `L${x + width + (2 * height) / 6},${y - height}`,
// `L${x - (2 * height) / 6},${y - height}`,
// 'Z',
// ].join(' ');
// };
export async function inv_trapezoid<T extends SVGGraphicsElement>( export async function inv_trapezoid<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -70,6 +56,12 @@ export async function inv_trapezoid<T extends SVGGraphicsElement>(
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -5,6 +5,7 @@ import { createRoundedRectPathD } from './roundedRectPath.js';
import { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js'; import { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
const colorFromPriority = (priority: NonNullable<KanbanNode['priority']>) => { const colorFromPriority = (priority: NonNullable<KanbanNode['priority']>) => {
switch (priority) { switch (priority) {
@ -155,6 +156,12 @@ export async function kanbanItem<T extends SVGGraphicsElement>(
updateNodeBounds(kanbanNode, rect); updateNodeBounds(kanbanNode, rect);
kanbanNode.height = totalHeight; kanbanNode.height = totalHeight;
kanbanNode.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
kanbanNode.intersect = function (point) { kanbanNode.intersect = function (point) {
return intersect.rect(kanbanNode, point); return intersect.rect(kanbanNode, point);
}; };

View File

@ -3,6 +3,7 @@ import { drawRect } from './drawRect.js';
import { labelHelper, updateNodeBounds } from './util.js'; import { labelHelper, updateNodeBounds } from './util.js';
import intersect from '../intersect/index.js'; import intersect from '../intersect/index.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function roundedRect<T extends SVGGraphicsElement>( export async function roundedRect<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -48,8 +49,12 @@ export async function labelRect<T extends SVGGraphicsElement>(parent: D3Selectio
// } // }
updateNodeBounds(node, rect); updateNodeBounds(node, rect);
// node.width = 1;
// node.height = 1; node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { insertPolygonShape } from './insertPolygonShape.js'; import { insertPolygonShape } from './insertPolygonShape.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function lean_left<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function lean_left<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -50,6 +51,12 @@ export async function lean_left<T extends SVGGraphicsElement>(parent: D3Selectio
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { insertPolygonShape } from './insertPolygonShape.js'; import { insertPolygonShape } from './insertPolygonShape.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function lean_right<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function lean_right<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -49,6 +50,12 @@ export async function lean_right<T extends SVGGraphicsElement>(parent: D3Selecti
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -6,6 +6,7 @@ import rough from 'roughjs';
import intersect from '../intersect/index.js'; import intersect from '../intersect/index.js';
import { createPathFromPoints } from './util.js'; import { createPathFromPoints } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export function lightningBolt<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export function lightningBolt<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -55,6 +56,12 @@ export function lightningBolt<T extends SVGGraphicsElement>(parent: D3Selection<
updateNodeBounds(node, lightningBolt); updateNodeBounds(node, lightningBolt);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('lightningBolt intersect', node, point); log.info('lightningBolt intersect', node, point);
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export const createCylinderPathD = ( export const createCylinderPathD = (
x: number, x: number,
@ -110,6 +111,12 @@ export async function linedCylinder<T extends SVGGraphicsElement>(
`translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})` `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`
); );
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.rect(node, point); const pos = intersect.rect(node, point);
const x = pos.x - (node.x ?? 0); const x = pos.x - (node.x ?? 0);

View File

@ -9,6 +9,7 @@ import type { Node } from '../../types.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function linedWaveEdgedRect<T extends SVGGraphicsElement>( export async function linedWaveEdgedRect<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -74,6 +75,13 @@ export async function linedWaveEdgedRect<T extends SVGGraphicsElement>(
); );
updateNodeBounds(node, waveEdgeRect); updateNodeBounds(node, waveEdgeRect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -4,6 +4,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import intersect from '../intersect/index.js'; import intersect from '../intersect/index.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function multiRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function multiRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -74,6 +75,12 @@ export async function multiRect<T extends SVGGraphicsElement>(parent: D3Selectio
updateNodeBounds(node, multiRect); updateNodeBounds(node, multiRect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, outerPathPoints, point); const pos = intersect.polygon(node, outerPathPoints, point);
return pos; return pos;

View File

@ -10,6 +10,7 @@ import type { Node } from '../../types.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function multiWaveEdgedRectangle<T extends SVGGraphicsElement>( export async function multiWaveEdgedRectangle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -99,6 +100,12 @@ export async function multiWaveEdgedRectangle<T extends SVGGraphicsElement>(
updateNodeBounds(node, shape); updateNodeBounds(node, shape);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, outerPathPoints, point); const pos = intersect.polygon(node, outerPathPoints, point);
return pos; return pos;

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { getNodeClasses, labelHelper, updateNodeBounds } from './util.js'; import { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { getConfig } from '../../../config.js'; import { getConfig } from '../../../config.js';
import type { Bounds, Point } from '../../../types.js';
export async function note<T extends SVGGraphicsElement>( export async function note<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -52,6 +53,12 @@ export async function note<T extends SVGGraphicsElement>(
updateNodeBounds(node, rect); updateNodeBounds(node, rect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);
}; };

View File

@ -92,6 +92,12 @@ export async function question<T extends SVGGraphicsElement>(parent: D3Selection
return { x: res.x - 0.5, y: res.y - 0.5 }; // Adjusted result return { x: res.x - 0.5, y: res.y - 0.5 }; // Adjusted result
}; };
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
// @ts-ignore TODO fix this (KNSV) // @ts-ignore TODO fix this (KNSV)
return this.calcIntersect(node as Bounds, point); return this.calcIntersect(node as Bounds, point);

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function rect_left_inv_arrow<T extends SVGGraphicsElement>( export async function rect_left_inv_arrow<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -60,6 +61,12 @@ export async function rect_left_inv_arrow<T extends SVGGraphicsElement>(
); );
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -10,6 +10,7 @@ import { getConfig } from '../../../diagram-api/diagramAPI.js';
import { createRoundedRectPathD } from './roundedRectPath.js'; import { createRoundedRectPathD } from './roundedRectPath.js';
import { log } from '../../../logger.js'; import { log } from '../../../logger.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function rectWithTitle<T extends SVGGraphicsElement>( export async function rectWithTitle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -150,6 +151,12 @@ export async function rectWithTitle<T extends SVGGraphicsElement>(
} }
updateNodeBounds(node, rect); updateNodeBounds(node, rect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);
}; };

View File

@ -5,6 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export async function shadedProcess<T extends SVGGraphicsElement>( export async function shadedProcess<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -63,6 +64,12 @@ export async function shadedProcess<T extends SVGGraphicsElement>(
updateNodeBounds(node, rect); updateNodeBounds(node, rect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);
}; };

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function slopedRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function slopedRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -54,6 +55,12 @@ export async function slopedRect<T extends SVGGraphicsElement>(parent: D3Selecti
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -6,6 +6,7 @@ import rough from 'roughjs';
import { createRoundedRectPathD } from './roundedRectPath.js'; import { createRoundedRectPathD } from './roundedRectPath.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export const createStadiumPathD = ( export const createStadiumPathD = (
x: number, x: number,
@ -88,6 +89,12 @@ export async function stadium<T extends SVGGraphicsElement>(parent: D3Selection<
updateNodeBounds(node, rect); updateNodeBounds(node, rect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);
}; };

View File

@ -4,6 +4,7 @@ import intersect from '../intersect/index.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import { updateNodeBounds } from './util.js'; import { updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export function stateEnd<T extends SVGGraphicsElement>( export function stateEnd<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -54,6 +55,12 @@ export function stateEnd<T extends SVGGraphicsElement>(
updateNodeBounds(node, circle); updateNodeBounds(node, circle);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.circle(node, 7, point); return intersect.circle(node, 7, point);
}; };

View File

@ -4,6 +4,7 @@ import intersect from '../intersect/index.js';
import { solidStateFill } from './handDrawnShapeStyles.js'; import { solidStateFill } from './handDrawnShapeStyles.js';
import { updateNodeBounds } from './util.js'; import { updateNodeBounds } from './util.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export function stateStart<T extends SVGGraphicsElement>( export function stateStart<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -33,6 +34,12 @@ export function stateStart<T extends SVGGraphicsElement>(
updateNodeBounds(node, circle); updateNodeBounds(node, circle);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.circle(node, 7, point); return intersect.circle(node, 7, point);
}; };

View File

@ -6,6 +6,7 @@ import rough from 'roughjs';
import { insertPolygonShape } from './insertPolygonShape.js'; import { insertPolygonShape } from './insertPolygonShape.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export const createSubroutinePathD = ( export const createSubroutinePathD = (
x: number, x: number,
@ -79,6 +80,12 @@ export async function subroutine<T extends SVGGraphicsElement>(parent: D3Selecti
updateNodeBounds(node, el); updateNodeBounds(node, el);
} }
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -4,6 +4,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import intersect from '../intersect/index.js'; import intersect from '../intersect/index.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function taggedRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function taggedRect<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -60,6 +61,12 @@ export async function taggedRect<T extends SVGGraphicsElement>(parent: D3Selecti
updateNodeBounds(node, taggedRect); updateNodeBounds(node, taggedRect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, rectPoints, point); const pos = intersect.polygon(node, rectPoints, point);

View File

@ -10,6 +10,7 @@ import type { Node } from '../../types.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function taggedWaveEdgedRectangle<T extends SVGGraphicsElement>( export async function taggedWaveEdgedRectangle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -96,6 +97,13 @@ export async function taggedWaveEdgedRectangle<T extends SVGGraphicsElement>(
); );
updateNodeBounds(node, waveEdgeRect); updateNodeBounds(node, waveEdgeRect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -3,6 +3,7 @@ import intersect from '../intersect/index.js';
import type { Node } from '../../types.js'; import type { Node } from '../../types.js';
import { styles2String } from './handDrawnShapeStyles.js'; import { styles2String } from './handDrawnShapeStyles.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function text<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function text<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -29,6 +30,12 @@ export async function text<T extends SVGGraphicsElement>(parent: D3Selection<T>,
updateNodeBounds(node, rect); updateNodeBounds(node, rect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.rect(node, point); return intersect.rect(node, point);
}; };

View File

@ -5,6 +5,7 @@ import rough from 'roughjs';
import intersect from '../intersect/index.js'; import intersect from '../intersect/index.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import { handleUndefinedAttr } from '../../../utils.js'; import { handleUndefinedAttr } from '../../../utils.js';
import type { Bounds, Point } from '../../../types.js';
export const createCylinderPathD = ( export const createCylinderPathD = (
x: number, x: number,
@ -113,6 +114,12 @@ export async function tiltedCylinder<T extends SVGGraphicsElement>(
updateNodeBounds(node, cylinder); updateNodeBounds(node, cylinder);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.rect(node, point); const pos = intersect.rect(node, point);
const y = pos.y - (node.y ?? 0); const y = pos.y - (node.y ?? 0);

View File

@ -5,21 +5,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { insertPolygonShape } from './insertPolygonShape.js'; import { insertPolygonShape } from './insertPolygonShape.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
// export const createTrapezoidPathD = (
// x: number,
// y: number,
// width: number,
// height: number
// ): string => {
// return [
// `M${x - (2 * height) / 6},${y}`,
// `L${x + width + (2 * height) / 6},${y}`,
// `L${x + width - height / 6},${y - height}`,
// `L${x + height / 6},${y - height}`,
// 'Z',
// ].join(' ');
// };
export async function trapezoid<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function trapezoid<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -65,6 +51,12 @@ export async function trapezoid<T extends SVGGraphicsElement>(parent: D3Selectio
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);
}; };

View File

@ -4,6 +4,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function trapezoidalPentagon<T extends SVGGraphicsElement>( export async function trapezoidalPentagon<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -52,6 +53,12 @@ export async function trapezoidalPentagon<T extends SVGGraphicsElement>(
updateNodeBounds(node, polygon); updateNodeBounds(node, polygon);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -8,6 +8,7 @@ import { createPathFromPoints } from './util.js';
import { evaluate } from '../../../diagrams/common/common.js'; import { evaluate } from '../../../diagrams/common/common.js';
import { getConfig } from '../../../diagram-api/diagramAPI.js'; import { getConfig } from '../../../diagram-api/diagramAPI.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function triangle<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function triangle<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -59,6 +60,12 @@ export async function triangle<T extends SVGGraphicsElement>(parent: D3Selection
`translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})` `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`
); );
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
log.info('Triangle intersect', node, points, point); log.info('Triangle intersect', node, points, point);
return intersect.polygon(node, points, point); return intersect.polygon(node, points, point);

View File

@ -10,6 +10,7 @@ import type { Node } from '../../types.js';
import rough from 'roughjs'; import rough from 'roughjs';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function waveEdgedRectangle<T extends SVGGraphicsElement>( export async function waveEdgedRectangle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -74,6 +75,13 @@ export async function waveEdgedRectangle<T extends SVGGraphicsElement>(
); );
updateNodeBounds(node, waveEdgeRect); updateNodeBounds(node, waveEdgeRect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -10,6 +10,7 @@ import type { Node } from '../../types.js';
import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js'; import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function waveRectangle<T extends SVGGraphicsElement>( export async function waveRectangle<T extends SVGGraphicsElement>(
parent: D3Selection<T>, parent: D3Selection<T>,
@ -75,6 +76,13 @@ export async function waveRectangle<T extends SVGGraphicsElement>(
} }
updateNodeBounds(node, waveRect); updateNodeBounds(node, waveRect);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, points, point); const pos = intersect.polygon(node, points, point);
return pos; return pos;

View File

@ -4,6 +4,7 @@ import { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';
import rough from 'roughjs'; import rough from 'roughjs';
import intersect from '../intersect/index.js'; import intersect from '../intersect/index.js';
import type { D3Selection } from '../../../types.js'; import type { D3Selection } from '../../../types.js';
import type { Bounds, Point } from '../../../types.js';
export async function windowPane<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) { export async function windowPane<T extends SVGGraphicsElement>(parent: D3Selection<T>, node: Node) {
const { labelStyles, nodeStyles } = styles2String(node); const { labelStyles, nodeStyles } = styles2String(node);
@ -58,6 +59,12 @@ export async function windowPane<T extends SVGGraphicsElement>(parent: D3Selecti
updateNodeBounds(node, windowPane); updateNodeBounds(node, windowPane);
node.calcIntersect = function (bounds: Bounds, point: Point) {
// TODO: Implement intersect for this shape
const radius = bounds.width / 2;
return intersect.circle(bounds, radius, point);
};
node.intersect = function (point) { node.intersect = function (point) {
const pos = intersect.polygon(node, outerPathPoints, point); const pos = intersect.polygon(node, outerPathPoints, point);
return pos; return pos;