Skip to content

Commit 5e2dc02

Browse files
committed
improved direct line-connection between rect-thumb and rect with thumbs
1 parent 19e705a commit 5e2dc02

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

libs/visual-programming-system/src/components/connection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export class Connection<T extends BaseNodeInfo> {
6464
endY: 0,
6565
};
6666

67-
onCalculateControlPoints = onCubicCalculateControlPoints;
67+
protected onCalculateControlPoints = onCubicCalculateControlPoints;
6868
pathElement: IElementNode<T> | undefined = undefined;
6969
pathTransparentElement: IElementNode<T> | undefined = undefined;
7070
svgParent: IElementNode<T> | undefined = undefined;

libs/visual-programming-system/src/components/line-connection.ts

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
INodeComponent,
1111
IRectNodeComponent,
1212
IThumbNodeComponent,
13+
ControlAndEndPointNodeType,
1314
} from '../interfaces/element';
1415
import { Theme } from '../interfaces/theme';
1516
import { setSelectNode } from '../reactivity';
@@ -21,6 +22,7 @@ import { ThumbConnectionController } from './thumb-connection-controller';
2122
import { onQuadraticCalculateControlPoints } from './utils/calculate-quadratic-control-points';
2223
import { pointOnRect } from './utils/intersect-line';
2324
import { intersectionCircleLine } from './utils/vector-math';
25+
import { onGetConnectionToThumbOffset } from './utils/calculate-cubic-control-points';
2426

2527
export class LineConnection<T extends BaseNodeInfo> extends Connection<T> {
2628
startPointElement: IThumbNodeComponent<T> | undefined;
@@ -472,17 +474,42 @@ export const getLinePoints = <T extends BaseNodeInfo>(
472474
let height = 0;
473475
if (
474476
!nodeComponent?.endNode?.isThumb &&
475-
nodeComponent.endNodeThumb?.thumbType === ThumbType.EndConnectorCenter
477+
(nodeComponent.endNodeThumb?.thumbType ===
478+
ThumbType.EndConnectorCenter ||
479+
nodeComponent.endNodeThumb?.thumbType === ThumbType.EndConnectorLeft)
476480
) {
477481
// Temp solution for connecting to left side of thumb when end node has a thumb of
478482
// type EndConnectorCenter
479-
xleft =
480-
nodeComponent.endNode.x - bbox.x + startOffsetX - spacingAABB - 16;
481-
yleft =
482-
nodeComponent.endNode.y -
483-
bbox.y -
484-
10 +
485-
(nodeComponent.endNode.height ?? 0) / 2;
483+
484+
// const { offsetX: startOffsetX, offsetY: startOffsetY } =
485+
// onGetConnectionToThumbOffset(
486+
// ControlAndEndPointNodeType.start,
487+
// nodeComponent?.startNodeThumb?.thumbType ?? ThumbType.None
488+
// );
489+
490+
const end = nodeComponent.onCalculateControlPoints(
491+
nodeComponent.endNode,
492+
ControlAndEndPointNodeType.end,
493+
nodeComponent.endNodeThumb?.thumbType ??
494+
(nodeComponent.isAnnotationConnection
495+
? ThumbType.Center
496+
: ThumbType.None),
497+
nodeComponent.endNodeThumb,
498+
nodeComponent.endNodeThumb?.thumbIndex,
499+
nodeComponent.startNode,
500+
nodeComponent.endNodeThumb?.thumbControlPointDistance,
501+
nodeComponent.startNodeThumb
502+
);
503+
504+
const { offsetX: endOffsetX, offsetY: endOffsetY } =
505+
onGetConnectionToThumbOffset(
506+
ControlAndEndPointNodeType.end,
507+
nodeComponent?.endNodeThumb?.thumbType ?? ThumbType.None
508+
);
509+
xleft = end.x - bbox.x + endOffsetX + startOffsetX - spacingAABB; //nodeComponent.endNode.x - bbox.x + endOffsetX - spacingAABB; // - 16;
510+
yleft = end.y - bbox.y - endOffsetY + startOffsetY - spacingAABB; //nodeComponent.endNode.y - bbox.y - endOffsetY;
511+
// 10 +
512+
// (nodeComponent.endNode.height ?? 0) / 2;
486513
width = 24;
487514
height = 24;
488515
} else {

0 commit comments

Comments
 (0)