g6图一个节点创建两个锚点
时间: 2024-06-09 17:07:04 浏览: 187
实现一个 Vue 吸顶锚点组件方法
在 G6 中,一个节点只能创建一个锚点,但是可以通过在节点周围添加多个辅助节点来实现类似于一个节点拥有多个锚点的效果。具体实现方法如下:
1. 创建一个主节点
2. 创建多个辅助节点,位置固定在主节点周围,可以通过计算角度和距离来确定其位置
3. 将辅助节点与主节点通过连线连接起来,并设置辅助节点为不可见
4. 将主节点和辅助节点的 id 存储在一个数组中,通过数组来控制节点和锚点的位置和连接关系
示例代码如下:
```javascript
const node = graph.addNode({
id: 'node',
label: 'Node',
x: 100,
y: 100,
size: 80,
anchorPoints: [
[0.5, 0], // 主节点锚点
[0, 0.5], // 辅助节点1锚点
[1, 0.5], // 辅助节点2锚点
],
});
const anchorIds = ['node', 'assist1', 'assist2'];
const assist1 = graph.addNode({
id: 'assist1',
visible: false,
x: 100 + 80 * Math.cos(Math.PI / 4),
y: 100 - 80 * Math.sin(Math.PI / 4),
});
const assist2 = graph.addNode({
id: 'assist2',
visible: false,
x: 100 + 80 * Math.cos((3 * Math.PI) / 4),
y: 100 - 80 * Math.sin((3 * Math.PI) / 4),
});
graph.addEdges([
{
source: 'node',
target: 'assist1',
id: 'edge1',
},
{
source: 'node',
target: 'assist2',
id: 'edge2',
},
]);
graph.on('anchorpoint:change', (e) => {
const { item, anchorIndex } = e;
const anchorId = anchorIds[anchorIndex];
if (anchorId === 'node') {
return;
}
const assistNode = graph.findById(anchorId);
const assistModel = assistNode.getModel();
const nodeModel = item.getModel();
const assistAnchor = assistModel.anchorPoints[0];
const nodeAnchor = nodeModel.anchorPoints[anchorIndex];
const dx = nodeModel.x - assistModel.x;
const dy = nodeModel.y - assistModel.y;
const angle = Math.atan2(dy, dx);
const distance = Math.sqrt(dx * dx + dy * dy);
const assistX = nodeModel.x - distance * assistAnchor[0] * Math.cos(angle);
const assistY = nodeModel.y - distance * assistAnchor[0] * Math.sin(angle);
assistNode.updatePosition(assistX, assistY);
assistNode.updateAnchor(0, assistAnchor);
item.updateAnchor(anchorIndex, nodeAnchor);
});
```
在上述代码中,我们创建了一个主节点和两个辅助节点,并将辅助节点设置为不可见。然后,我们通过连线将主节点和辅助节点连接起来,并设置主节点和辅助节点的锚点。在锚点位置改变时,我们通过计算辅助节点的位置来维护节点和锚点的连接关系。
阅读全文