GoJS 不同的 ResizingTool for Groups and Nodes

GoJS different ResizingTool for Groups and Nodes

是否可以对不同的节点模板使用不同的ResizingTool? 在我的例子中,我有一个包含一些注释的组,我想使用自定义 ResizingTool 调整组的大小,组内的节点应使用默认值 ResizingTool.

据我所知,resizingTool 属性 只能在图表本身设置,所以所有东西都是同一个工具!?

我现在使用的一个修补程序是根据节点类型条件在我的自定义工具中调用原始 go.ResizingTool 函数。

这是一种正确的方法 -- 让每个覆盖查看 http://gojs.net/latest/api/symbols/ResizingTool.html#adornedObject 并决定要做什么。

一种类似的方法是安装两个不同的 ResizingTools 的实例,包括标准的和自定义的,安装为 ToolManager.mouseDownTools 。您可以在 ToolManager.resizingTool 列表中的 ToolManager.resizingTool 之前安装自定义的、更具体的工具,and 你需要重写 ResizingTool.canStart 这样它 return 只有当它是 OK and 调整大小手柄在您的组之一上。

类似于:

GroupResizingTool.prototype.canStart = function() {
  if (!this.isEnabled) return false;
  var diagram = this.diagram;
  if (diagram === null || diagram.isReadOnly) return false;
  if (!diagram.allowResize) return false;
  if (!diagram.lastInput.left) return false;

  var h = this.findToolHandleAt(diagram.firstInput.documentPoint, this.name);
  return (h !== null && h.part.adornedPart instanceof go.Group);
}

或者您的最终谓词可能会检查装饰部分是否属于特定类别。或任何其他需要的歧视。

当您的自定义 canStart 失败时,下一个工具将是标准的 ResizingTool,它将正常运行,但仅在那些节点上运行您的自定义工具没有。