public AxisAlignedBox3D GetBounds3D() { var cW = (float)CoverWidth; var cH = (float)CoverHeight; var sW = (float)SpineWidth; var bookPoints = new List <Point3D> { FrontCover3D.TransformMatrix3D.Transform(Point3D.Zero), FrontCover3D.TransformMatrix3D.Transform(new Point3D(cW, cH, 0f)), Spine3D.TransformMatrix3D.Transform(Point3D.Zero), Spine3D.TransformMatrix3D.Transform(new Point3D(sW, cH, 0f)), BackCover3D.TransformMatrix3D.Transform(Point3D.Zero), BackCover3D.TransformMatrix3D.Transform(new Point3D(cW, cH, 0f)), TopBackCoverPages3D.TransformMatrix3D.Transform(Point3D.Zero), TopBackCoverPages3D.TransformMatrix3D.Transform(new Point3D(cW, sW * 0.5f, 0f)), TopSpinePages3D.TransformMatrix3D.Transform(Point3D.Zero), TopSpinePages3D.TransformMatrix3D.Transform(new Point3D(sW, sW * 0.5f, 0f)), TopFrontCoverPages3D.TransformMatrix3D.Transform(Point3D.Zero), TopFrontCoverPages3D.TransformMatrix3D.Transform(new Point3D(cW, sW * 0.5f, 0f)), InnerPageRight3D.TransformMatrix3D.Transform(Point3D.Zero), InnerPageRight3D.TransformMatrix3D.Transform(new Point3D(cW, cH, 0f)) }; var bounds3D = new AxisAlignedBox3D(bookPoints); var rotY = Matrix3D.CreateFromAxisAngle(yAxis, MathUtility.ToRadians((float)Config.Shelf3D.ShelfRotationY)); var rotX = Matrix3D.CreateFromAxisAngle(xAxis, MathUtility.ToRadians((float)Config.Shelf3D.ShelfRotationX)); var boundsTransform = rotY * rotX; return(bounds3D.CreateTransformedBoundingVolume(boundsTransform)); }