import type { NodeConfig, TextConfig } from '../../src/index'; import { LogicFlow } from '../../src/index'; type NodeConfigTextObj = NodeConfig & { text: TextConfig }; describe('graphmodel', () => { const dom = document.createElement('div'); dom.id = 'main-graph'; document.body.appendChild(dom); const lf = new LogicFlow({ container: dom, width: 1000, height: 1000, keyboard: { enabled: true, }, allowRotation: true, metaKeyMultipleSelected: true, grid: true, snapline: true, }); // 将node节点位置进行grid修正,同时处理node内文字的偏移量,返回一个位置修正过的复制节点NodeModel test('getModelAfterSnapToGrid', () => { const rawData = { nodes: [ { id: 'node1', type: 'rect', x: 111, y: 123, text: { x: 32, y: 19, value: '文本1', }, }, ], }; lf.render(rawData); const originNode = lf.getDataById('node1') as NodeConfigTextObj; // grid=true 默认 gridSize=20 const newNode = lf.graphModel.getModelAfterSnapToGrid(originNode) as NodeConfigTextObj; expect(originNode.x - originNode.text.x).toEqual(newNode.x - newNode.text.x); expect(originNode.y - originNode.text.y).toEqual(newNode.y - newNode.text.y); expect(originNode.text.value).toEqual(newNode.text.value); lf.graphModel.gridSize = 40; const newNode1 = lf.graphModel.getModelAfterSnapToGrid(originNode) as NodeConfigTextObj; expect(originNode.x - originNode.text.x).toEqual(newNode1.x - newNode1.text.x); expect(originNode.y - originNode.text.y).toEqual(newNode1.y - newNode1.text.y); expect(originNode.text.value).toEqual(newNode1.text.value); lf.graphModel.gridSize = 1; const newNode2 = lf.graphModel.getModelAfterSnapToGrid(originNode) as NodeConfigTextObj; expect(originNode.x - originNode.text.x).toEqual(newNode2.x - newNode2.text.x); expect(originNode.y - originNode.text.y).toEqual(newNode2.y - newNode2.text.y); expect(originNode.text.value).toEqual(newNode2.text.value); lf.graphModel.gridSize = 17; const newNode3 = lf.graphModel.getModelAfterSnapToGrid(originNode) as NodeConfigTextObj; expect(originNode.x - originNode.text.x).toEqual(newNode3.x - newNode3.text.x); expect(originNode.y - originNode.text.y).toEqual(newNode3.y - newNode3.text.y); expect(originNode.text.value).toEqual(newNode3.text.value); }); });