diff --git a/cypress/platform/knsv2.html b/cypress/platform/knsv2.html index b8174f323..896096ff5 100644 --- a/cypress/platform/knsv2.html +++ b/cypress/platform/knsv2.html @@ -91,8 +91,8 @@
--- config: - look: handdrawn - + look: neo + layout: elk --- flowchart LR n1["n1"] --- C diff --git a/packages/mermaid-layout-elk/src/render.ts b/packages/mermaid-layout-elk/src/render.ts index 0405947bc..99bcaf7aa 100644 --- a/packages/mermaid-layout-elk/src/render.ts +++ b/packages/mermaid-layout-elk/src/render.ts @@ -883,7 +883,6 @@ export const render = async ( // Iterate through all nodes and add the top level nodes to the graph const nodes = data4Layout.nodes; - const count = 3; nodes.forEach((n: { id: string | number }) => { const node = nodeDb[n.id]; @@ -920,29 +919,6 @@ export const render = async ( delete node.width; delete node.height; } - if (node.id === 'A' || node.id === 'E') { - node.layoutOptions = { - ...node.layoutOptions, - 'partitioning.partition': 1, - }; - node.x = 0; - } - if (node.id === 'B') { - node.layoutOptions = { - ...node.layoutOptions, - 'partitioning.partition': 2, - }; - node.x = 300; - } - if (node.id === 'C' || node.id === 'D' || node.id === 'F') { - node.layoutOptions = { - ...node.layoutOptions, - 'partitioning.partition': 3, - }; - node.x = 800; - } - // count = count - 1; - // console.log('APA13 node partition node id=', node.id, 'count = ', count); }); elkGraph.edges.forEach((edge: any) => { const source = edge.sources[0]; @@ -955,10 +931,7 @@ export const render = async ( setIncludeChildrenPolicy(target, ancestorId); } }); - const copy = JSON.parse(JSON.stringify({ ...elkGraph })); - console.log('APA13 layout before', JSON.stringify({ ...elkGraph })); const g = await elk.layout(elkGraph); - console.log('APA13 layout', JSON.parse(JSON.stringify(g))); // debugger; await drawNodes(0, 0, g.children, svg, subGraphsEl, 0); g.edges?.map( @@ -1045,7 +1018,10 @@ export const render = async ( startNode.innerHTML ); } - if (startNode.calcIntersect) { + if (startNode.intersect) { + // Remove the first point of the edge points + edge.points.shift(); + // console.log( // 'APA13 calculating start intersection start node', // startNode.id, @@ -1058,7 +1034,7 @@ export const render = async ( // '\nPos', // edge.points[0] // ); - const intersection = startNode.calcIntersect( + const intersection2 = startNode.calcIntersect( { x: startNode.offset.posX + startNode.width / 2, y: startNode.offset.posY + startNode.height / 2, @@ -1067,14 +1043,16 @@ export const render = async ( }, edge.points[0] ); - // const intersection = startNode.intersect(edge.points[0]); + const intersection = startNode.intersect(edge.points[0]); - if (distance(intersection, edge.points[0]) > epsilon) { - edge.points.unshift(intersection); + if (distance(intersection2, edge.points[0]) > epsilon) { + edge.points.unshift(intersection2); } } - if (endNode.calcIntersect) { - const intersection = endNode.calcIntersect( + if (endNode.intersect) { + // Remove the last point of the edge points + edge.points.pop(); + const intersection2 = endNode.calcIntersect( { x: endNode.offset.posX + endNode.width / 2, y: endNode.offset.posY + endNode.height / 2, @@ -1084,7 +1062,7 @@ export const render = async ( edge.points[edge.points.length - 1] ); console.log('APA13 intersection2', endNode); - const intersection2 = endNode.intersect(edge.points[edge.points.length - 1]); + const intersection = endNode.intersect(edge.points[edge.points.length - 1]); // if (edge.id === 'L_n4_C_10_0') { // console.log('APA14 lineData', edge.points, 'intersection:', intersection); // console.log( @@ -1092,16 +1070,14 @@ export const render = async ( // distance(intersection, edge.points[edge.points.length - 1]) // ); // } + console.log('APA13 intersection2.2', intersection, intersection2); - if (distance(intersection, edge.points[edge.points.length - 1]) > epsilon) { + if (distance(intersection2, edge.points[edge.points.length - 1]) > epsilon) { // console.log('APA13! distance ok\nintersection:', intersection); - edge.points.push(intersection); + edge.points.push(intersection2); // console.log('APA13! distance ok\npoints:', edge.points); } } - // Add coordinates of the start node and end node to the edge points as insert edge will remove those - edge.points.unshift({ x: endNode.x, y: endNode.y }); - edge.points.push({ x: endNode.x, y: endNode.y }); const paths = insertEdge( edgesEl, diff --git a/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js b/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js index c117fe6c2..f6bdac2f2 100644 --- a/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js +++ b/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js @@ -305,6 +305,7 @@ export const render = async (data4Layout, svg) => { log.debug('Edges:', data4Layout.edges); data4Layout.edges.forEach((edge) => { + edge.trim = true; // Handle self-loops if (edge.start === edge.end) { const nodeId = edge.start; diff --git a/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js b/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js index 145424e48..fce711821 100644 --- a/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js +++ b/packages/mermaid/src/rendering-util/layout-algorithms/fixed/index.js @@ -380,18 +380,20 @@ const doRender = async (_elem, data4Layout, siteConfig, positions) => { }; } } - + // ############################################################### + // Edge trimming - this could affect Collab!!! + // ############################################################### + // we can remove the edge trimming if we want + // if we don't set trim to true this will not happen and we dont need to add the start and end positions + // to the edge + edge.trim = true; edge.points = positions.edges[edge.id].points; + const paths = insertEdge(edgePaths, edge, {}, data4Layout.type, {}, {}, data4Layout.diagramId); paths.updatedPath = paths.originalPath; positionEdgeLabel(edge, paths); } - if (window) { - // TODO: Remove this now that we can do: - // import { calcIntersections, calcNodeIntersections } from '@mermaid-chart/mermaid'; - window.calcIntersections = calcIntersections; - window.calcNodeIntersections = calcNodeIntersections; - } + return { elem, diff: 0 }; }; /** diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edges.js b/packages/mermaid/src/rendering-util/rendering-elements/edges.js index 946150c8b..4865d553b 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/edges.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/edges.js @@ -370,8 +370,8 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod } edgeClassStyles.push(edge.cssCompiledStyles[key]); } - - if (head.intersect && tail.intersect) { + console.log('APA13 edge.trim', edge.trim); + if (head.intersect && tail.intersect && edge.trim) { points = points.slice(1, edge.points.length - 1); points.unshift(tail.intersect(points[0])); log.debug( @@ -460,8 +460,7 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod let svgPath; let linePath = edge.curve === 'rounded' - ? // ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5) - generateRoundedPath(lineData, 5) + ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5) : lineFunction(lineData); const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style]; let animatedEdge = false;