/// <summary> /// Rotates given model by given isomorphic transform. /// Bounding box for an object of the model is transformed in such a way that it is still the minimal rectangle with sides parallel to coordinate axes contaning original box rotated. /// </summary> /// <param name="model">The model to process</param> /// <param name="transform">The transform to apply</param> /// <param name="targetWidth">Target model width</param> /// <param name="targetHeight">Target model height</param> /// <returns></returns> public static TextGeometryModel RotateModel(this TextGeometryModel model, IsometricTransform transform, int targetWidth, int targetHeight) { var targetModel = new TextGeometryModel(new BoundingBox(0, 0, targetWidth, targetHeight), model.GridUnit); ModelGeometryTransformer.TransformModelGeometry(model, targetModel, box => RotateBoundingBox(box, transform)); return(targetModel); }
public static TextGeometryModel ScaleModel(this TextGeometryModel model, double scaleFactor) { var targetModel = new TextGeometryModel(ScaleBoundingBox(model.PageBox, scaleFactor), GridUnit.ByResolution(Round(model.GridUnit.Divisor * scaleFactor))); ModelGeometryTransformer.TransformModelGeometry(model, targetModel, box => ScaleBoundingBox(box, scaleFactor)); return(targetModel); }
/// <summary> /// Transforms given model by rotating it by specified set of parameters. If the set of parameters is not given (null) then it will be calculated /// in such a way that a resulting model contains text lines aligned strictly horizontally. /// </summary> /// <param name="model">The model to transform</param> /// <param name="deskewParameters">Set of transformation parameters (or null, if transformation should be determined automatically)</param> /// <returns>The transformed model</returns> public static TextGeometryModel DeskewModel(this TextGeometryModel model, DeskewParameters deskewParameters = null) { var desckewParams = deskewParameters ?? DetectDeskewParameters(model); var transform = desckewParams.Transform; // Console.Out.WriteLine(desckewParams); var targetModel = new TextGeometryModel(new BoundingBox(0, 0, desckewParams.TargetWidth, desckewParams.TargetHeight), model.GridUnit); ModelGeometryTransformer.TransformModelGeometry(model, targetModel, box => DeskewBoundingBox(box, transform)); return(targetModel); }