2017-10-21 20 views
1

を用いSKPathフリップ。しかし、サイズを変更するとすべてが反転します。私はそれを裏返しにするか、最初に反転させないようにしたいと思います。ここで私が見つかった例に基づいてわずかに改変サイズ変更コードを使用していSkiaSharp

は私のサイズ変更コードである:ここで

private static void ResizePath(SKPath buildingPath, IEnumerable<Room> rooms) 
{ 
    var info = new SKImageInfo(512, 600, SKImageInfo.PlatformColorType, SKAlphaType.Premul); 
    var drawSpaceRect = SKRect.Create(info.Size); 
    //I need to find the size of the path 
    var buildingPathRect = buildingPath.TightBounds; 
    //I want to find the largest rectangle that can fit on my canvas maintaining the path's aspect ratio 
    var sketchRect = drawSpaceRect.AspectFit(buildingPathRect.Size); 
    //Now I need to transform the path to draw within the sketchRect 
    //First translate original path to its own origin 
    var firstTranslateM = SKMatrix.MakeTranslation(-buildingPathRect.Left, -buildingPathRect.Top); 
    //Next handle scaling. Since I maintained aspect ratio, I should be able to use either 
    //width or height to figure out scaling factor 
    var scalingFactor = sketchRect.Width/buildingPathRect.Width; 
    var scaleM = SKMatrix.MakeScale(scalingFactor, scalingFactor); 
    //Next I need to handle translation so path is centered on canvas 
    var secondTranslateM = SKMatrix.MakeTranslation(sketchRect.Left, sketchRect.Top); 
    //Finally I need to handle transforming the path to rotate 180 degrees 
    var rotationMatrix = SKMatrix.MakeRotationDegrees(180, sketchRect.MidX, sketchRect.MidY); 
    //Now combine the translation, scaling, and rotation into a single matrix by matrix multiplication/concatentation 
    var transformM = SKMatrix.MakeIdentity(); 
    SKMatrix.PostConcat(ref transformM, firstTranslateM); 
    SKMatrix.PostConcat(ref transformM, scaleM); 
    SKMatrix.PostConcat(ref transformM, secondTranslateM); 
    SKMatrix.PostConcat(ref transformM, rotationMatrix); 
    //Now apply the transform to the path 
    foreach (var r in rooms) 
    { 
     r.Path.Transform(transformM); 
    } 
} 

は、私は(行番号を無視)何をしたいの例です:に裏返す

enter image description here

enter image description here

任意の助けいただければ幸いです。

+0

2番目のリンクは無効です –

+0

修正済み。いくつかの書式を整理してくれてありがとう。 – jdm

答えて

1

この変換は、あなたが探しているものを行う必要があります。用語はフリップ水平または水平を反映します。

var Ma = new SKMatrix {Values = new float[] {-1, 0, 0, 1, 0, 0, 0, 0, 0}}; 
    pathToFlip.Transform(Ma); 
関連する問題