How to keep nodes not moving when resizing a group

Hi all,
In a group, I have many nodes, when I resize the group use the top and left handles, the nodes inside the group also moves when resizing. But when I use the right and bottom handles, the nodes do not move.

For my case, I don’t want the child nodes move at all when the parent group is resized. How can I do that?

I tried go.ResizingTool.isGridSnapEnabled = true, not working, maybe because I don’t use grid.


Thanks.

Are you using a Placeholder?

If so, besides setting resizable: true on the Group, have you set resizeObjectName to refer to something in the Group? What is your group template?

Hi Walter,
I don’t use placeholder for the group node.
Thanks.

our group template is as below:

goObjBuilder(go.Group, go.Panel.Spot, { // NOTE: these properties and Binding belong to the Group, not to the Auto Panel
// highlight when dragging into the Group
//mouseDragEnter: function(e, grp, prev) { /highlightGroup(grp, true);/ },
//mouseDragLeave: function(e, grp, next) { /highlightGroup(grp, false);/ },
computesBoundsAfterDrag: true,
copyable: false,
resizable: true,
// Put group nodes/links in the front
//layerName: “Foreground”,
isSubGraphExpanded: false,
resizeObjectName: “GroupBody”,
<span =“Apple-tab-span” style=“white-space:pre”> …
}

We don’t use placeholder for the group. We are doing pretty much like the GoJS’s example: “Sizes Groups”

Thanks.

Try this override of ResizingTool.resize:

[code] myDiagram.toolManager.resizingTool.resize = function(newr) {
var diagram = this.diagram;
if (diagram === null) return;
var obj = this.adornedObject;
var part = obj.part;

      // calculate new location
      var angle = obj.getDocumentAngle();
      var sc = obj.getDocumentScale();

      var radAngle = Math.PI * angle / 180;
      var angleCos = Math.cos(radAngle);
      var angleSin = Math.sin(radAngle);

      var angleRight = (angle > 270 || angle < 90) ? 1 : 0;
      var angleBottom = (angle > 0 && angle < 180) ? 1 : 0;
      var angleLeft = (angle > 90 && angle < 270) ? 1 : 0;
      var angleTop = (angle > 180 && angle < 360) ? 1 : 0;

      var deltaWidth = newr.width - obj.naturalBounds.width;
      var deltaHeight = newr.height - obj.naturalBounds.height;

      var pos = part.position.copy();
      pos.x += sc * ((newr.x + deltaWidth * angleLeft) * angleCos - (newr.y + deltaHeight * angleBottom) * angleSin);
      pos.y += sc * ((newr.x + deltaWidth * angleTop) * angleSin + (newr.y + deltaHeight * angleLeft) * angleCos);

      obj.desiredSize = newr.size;
      go.Node.prototype.move.call(part, pos);
    };[/code]

Thanks, Walter. It works.