コード例 #1
0
        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();
        }