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); } }