protected override void OnMouseUpAction(Mouse3DPosition mouseData) { Inputs[InputNames.SelectionContainerPipe].Send(NotificationNames.BuildSelections, mouseData); var trimmedEntities = Inputs[InputNames.SelectionContainerPipe].GetData(NotificationNames.GetEntities).Get <List <SceneSelectedEntity> >(); if (trimmedEntities.Count == 0) { return; } InitSession(); Reset(); var newNodes = GetTrimResult(Document, trimmedEntities, mouseData.Point); if (newNodes.Count == 0) { return; } var shapesGraph = new ShapeGraph(); //DocumentShapesGraph(); shapesGraph.SetDocument(Document); shapesGraph.Update(); // remove all referenced constraints var constraints = Document.Root.Children.Where(n => NodeUtils.NodeIsConstraint(n.Value.Index, Document)).ToList(); foreach (var constraint in constraints) { var children = new NodeBuilder(constraint.Value).Node.Children; if (children.Any(child => child.Value.Get <ReferenceInterpreter>().Node.Equals(trimmedEntities[0].Node))) { NodeBuilderUtils.DeleteNode(constraint.Value, Document); } } var nodes = new List <ReferenceInterpreter>(); // remove all referenced points foreach (var child in trimmedEntities[0].Node.Children) { var node = child.Value.Get <ReferenceInterpreter>(); if (node == null) { continue; } nodes.Add(node); } foreach (var nb in newNodes) { var nodeBuilder = new NodeBuilder(nb.Node); nodeBuilder.ExecuteFunction(); AddNodeToTree(nodeBuilder.Node); } if (newNodes.First().FunctionName == FunctionNames.Trim) { NodeUtils.Hide(trimmedEntities[0].Node); } else { NodeBuilderUtils.DeleteNode(trimmedEntities[0].Node, Document); } CommitFinal("Trimmed wire"); RebuildTreeView(); UpdateView(); }