private ShapeBoundBox ComputeEnclosingBoundingBox()
        {
            var bounding = new ShapeBoundBox();

            foreach (var shapeNode in _document.Root.Children.Values)
            {
                var builder = new NodeBuilder(shapeNode);
                bounding = CombineBoundingBoxWithShape(builder, bounding);
            }
            return(bounding);
        }
        private NodeBuilder BuildFloor(ShapeBoundBox bounding)
        {
            var floorRectangle  = new NodeBuilder(_mirrorDocument, FunctionNames.Rectangle);
            var startFloorPoint = new Point3D(bounding.Coordinate.X - _range,
                                              bounding.Coordinate.Y - _range,
                                              bounding.Coordinate.Z);
            var dir           = new gpDir(0, 0, 1);
            var endFloorPoint = new Point3D(
                bounding.Coordinate.X + bounding.Dimensions.X + _range,
                bounding.Coordinate.Y + bounding.Dimensions.Y + _range,
                bounding.Coordinate.Z);

            floorRectangle[0].Axis3D             = new Axis(new gpAx1(startFloorPoint.GpPnt, dir));
            floorRectangle[1].TransformedPoint3D = endFloorPoint;

            floorRectangle.Color        = Color.White;
            floorRectangle.Transparency = 0.8;
            floorRectangle.ExecuteFunction();
            _mirrorDocument.Commit("tranparent floor");
            return(floorRectangle);
        }
        private static ShapeBoundBox CombineBoundingBoxWithShape(NodeBuilder builder, ShapeBoundBox bounding)
        {
            var shapeBoundBox = builder.BoundingBox;

            if (shapeBoundBox != null)
            {
                bounding = bounding.Combine(shapeBoundBox);
            }
            return(bounding);
        }