private void MirrorAllShapes(NodeBuilder liveShape) { var bounding = ComputeEnclosingBoundingBox(); if (liveShape.LastExecute) { bounding = CombineBoundingBoxWithShape(liveShape, bounding); } _mirrorDocument.Undo(); _mirrorDocument.Transact(); var floorRectangle = BuildFloor(bounding); var plane = ShapeUtils.ExtractPlaneFromFaceShape(floorRectangle.Shape); var mirrorTransform = ShapeUtils.ExtractPlaneMirrorTransform(plane); ClearMirrors(); if (liveShape.LastExecute) { MirrorBuilder(liveShape, mirrorTransform); } foreach (var shapeNode in _document.Root.Children.Values) { GetCacheItem(shapeNode.Index, mirrorTransform); } ViewRedraw(); }