private void PerformRotate(NodeBuilder nodeBuilder, double value)
        {
            if (!NodeUtils.NodeIsOnSketch(nodeBuilder))
            {
                var existingFaces = NodeUtils.GetDocumentFaces(Document);
                var list          = NodeBuilderUtils.GetAllContained3DNodesIndexes(nodeBuilder.Node).Distinct().ToList();
                var sketchNodes   = new List <Node>();
                foreach (var nodeIndex in list)
                {
                    var node = Document.Root[nodeIndex.Key];
                    var affectedSketchNode = NodeUtils.RotateNode(new NodeBuilder(node), Document,
                                                                  _axis, value);
                    if (affectedSketchNode != null)
                    {
                        sketchNodes.Add(affectedSketchNode);
                    }
                }

                foreach (var sketchNode in sketchNodes)
                {
                    sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document);
                    if (sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape != null)
                    {
                        if (nodeBuilder.Visibility == ObjectVisibility.Hidden)
                        {
                            nodeBuilder.Visibility = ObjectVisibility.ToBeDisplayed;
                        }
                    }
                }

                var newFaces = NodeUtils.GetDocumentFaces(Document);
                foreach (int face in newFaces.Except(existingFaces))
                {
                    Document.Root.Remove(face);
                }
            }
            else
            {
                NodeUtils.RotateSketchNode(nodeBuilder, _axis, value);
            }
        }