antvis/G6

dagre流程图,可以控制某个节点作为一个描述的节点,不在流程的任何一个层级里面吗 #4946

976181987 posted onGitHub

问题描述

希望流程布局对齐时能把红框的2个节点排除在外 1694229440025

重现链接

重现步骤

import G6 from '@antv/g6'; import insertCss from 'insert-css';

insertCss(.g6-tooltip { border-radius: 6px; font-size: 12px; color: #fff; background-color: #000; padding: 2px 8px; text-align: center; });

const data = { nodes: [ { id: '1', dataType: 'alps', name: 'alps_file1', layer: 0, },

{
  id: '3',
  dataType: 'alps',
  name: 'alps_file3',
  layer: 2,
},
{
  id: '4',
  dataType: 'sql',
  name: 'sql_file4',
  layer: 3,
},
{
  id: '5',
  dataType: 'sql',
  name: 'sql_file5',

}, {
  id: '2',
  dataType: 'alps',
  name: 'alps_file2',
  layer: 2,
},
{
  id: '6',
  dataType: 'feature_etl',
  name: 'feature_etl_6',

},
{
  id: '7',
  dataType: 'feature_etl',
  name: 'feature_etl_7',

},
{
  id: '8',
  dataType: 'feature_extractor',
  name: 'feature_extractor8',

},
{
  id: '9',
  dataType: 'feature_extractor',
  name: 'feature_extractor9',
  layer: 1,
},
{
  id: '10',
  dataType: 'feature_extractor',
  name: 'feature_extractor10',
  layer: 1,

},
{

  id: '11',
  dataType: 'feature_extractor',
  name: 'feature_extractor11',
  // layer: 5,
  layer: 2,

},

], edges: [ { source: '1', target: '2', }, { source: '1', target: '9', type: 'cubic-horizontal' }, { source: '1', target: '10', type: 'cubic-horizontal' }, { source: '1', target: '11', // type: 'cubic-horizontal'

},
{
  source: '11',
  target: '4',
  // type: 'cubic-horizontal'

},
{
  source: '1',
  target: '3',
},
{
  source: '2',
  target: '4',
},
{
  source: '3',
  target: '4',
},
{
  source: '4',
  target: '5',
},
{
  source: '5',
  target: '6',
},
{
  source: '6',
  target: '7',
},
{
  source: '6',
  target: '8',
},
{
  source: '11',
  target: '7',
},
{
  source: '2',
  target: '7',
},

], };

G6.registerNode( 'sql', { drawShape(cfg, group) { const rect = group.addShape('rect', { attrs: { x: -75, y: -25, width: 150, height: 50, radius: 10, stroke: '#5B8FF9', fill: '#C6E5FF', lineWidth: 3, }, name: 'rect-shape', }); if (cfg.name) { group.addShape('text', { attrs: { text: cfg.name, x: 0, y: 0, fill: '#00287E', fontSize: 14, textAlign: 'center', textBaseline: 'middle', fontWeight: 'bold', }, name: 'text-shape', }); } return rect; }, }, 'single-node', );

const container = document.getElementById('container'); const width = container.scrollWidth; const height = container.scrollHeight || 500; const graph = new G6.Graph({ container: 'container', width, height, layout: { pipes: [ { type: 'dagre', // nodesFilter: (node) => node.id !== '9'&&node.id !== '10', rankdir: 'BT', nodesepFunc: (d) => { if (d.id === '3') { return 500; } return 50; }, // align: 'DL', // ranksep: 70, controlPoints: true, }, // { // type: 'force', // nodesFilter: (node) => node.id == '9'||node.id == '10', // rankdir: 'BT', // ranksep: 70,

  // }
]

}, defaultNode: { type: 'sql', }, defaultEdge: { type: 'polyline', style: { radius: 20, offset: 45, endArrow: true, lineWidth: 2, stroke: '#C2C8D5', }, }, nodeStateStyles: { selected: { stroke: '#d9d9d9', fill: '#5394ef', }, }, modes: { default: [ 'drag-canvas', 'zoom-canvas',

],

}, fitView: true, }); graph.data(data); graph.render();

if (typeof window !== 'undefined') window.onresize = () => { if (!graph || graph.get('destroyed')) return; if (!container || !container.scrollWidth || !container.scrollHeight) return; graph.changeSize(container.scrollWidth, container.scrollHeight); };

预期行为

1694229639900

平台

  • 操作系统: [macOS, Windows, Linux, React Native ...]
  • 网页浏览器: [Google Chrome, Safari, Firefox]
  • G6 版本: [4.5.1 ... ]

屏幕截图或视频(可选)

No response

补充说明(可选)

No response


可以使用子图布局,不配置到 layout 上而是自己 new layout 后进行计算,把其余部分先用 dagre 布局,然后指定另外两个节点的 x y。 https://g6.antv.antgroup.com/examples/net/layoutMechanism/#subgraphLayout

posted by Yanyan-Wang over 1 year ago

Fund this Issue

$0.00
Funded

Pull requests