我有一個簡單的svg 3路徑:紅色,藍色和黃色。 我想要:縮放所有形狀(例如0.3),只旋轉紅色+藍色(例如90度)。 旋轉點應該是紅色路徑的中間。 完成這些操作後,我希望黃色形狀與紅色路徑的距離爲0.3,縮放原始距離。Svg簡單轉換
我的嘗試是:
- 計算紅色通道的中間;
- 翻譯的原點(0,0),通過與(-redCenterPoint.x, - redCenterPoint.y)譯
- 規模紅色路0.3
- 回遷紅色路徑由翻譯(redCenterPoint.x,redCenterPoint .Y)
- 重複相同的藍色和黃色的計算blueCenter,yellowCenter
我的問題是:我如何才能保持原始圖像的結構,而是由0.3縮小和旋轉90? - 藍色路徑與紅色路徑接觸,黃色路徑的原始距離按0.3縮放。
我看到,如果我考慮所有3形狀的redCenterPoint,那麼該組看起來與原始相同,但縮放,看起來是正確的。 我想知道如何使用第一種方法。
SVG文件:使用Riversoft組件,用於renderin SVG
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="opacity:1;fill:#ff0000"
d="m 146.98669,417.50473 561.36408,0 0,206.40686 -561.36408,0 z"
id="red"
inkscape:label="#table" />
<path
style="opacity:1;fill:#0000ff"
d="m 641.11218,339.32031 65.67491,0 0,82.87548 -65.67491,0 z"
id="blue" />
<path
style="opacity:1;fill:#ffff00"
d="m 764.69525,515.63883 55.28473,-55.28473 46.43917,46.43918 -55.28473,55.28472 z"
id="yellow"
inkscape:connector-curvature="0"
inkscape:label="#yellow" />
代碼德爾福:
redBounds: TSVGRect;
redCenterPoint: TPointF;
redMatrix: TSVGMatrix
redBounds := (svgDoc.SVG.AllItems['red'] as TSVGGraphicElement).BoundsRect;
redCenterPoint.x := bDiamond.Left + (bDiamond.Width)/2;
redCenterPoint.y := bDiamond.Top + (bDiamond.Height)/2;
redMatrix := CreateTranslateRSMatrix(-redCenterPoint.x, -redCenterPoint.y);
redMatrix := RSMatrixMultiply(redMatrix,
CreateRotationRSMatrix(TPoint(0,0), DegToRad(90)));
redMatrix := RSMatrixMultiply(redMatrix,
CreateScaleRSMatrix(0.3, 0.3));
redMatrix := RSMatrixMultiply(redMatrix,
CreateTranslateRSMatrix(redCenterPoint.x, redCenterPoint.y));
(svgDoc.SVG.AllItems['red'] as TSVGGraphicElement)
.Matrix := mainMatrix;
這是我的問題:我想要在這些轉換之後保留原始圖像:藍色路徑與紅色路徑保持聯繫,黃色的原始距離按0.3縮放。如何在aply轉換後控制藍色路徑的位置。我想成爲與乞討相同的圖像,但縮放了0.3。 – Geanni
我不明白你真正想做什麼。旋轉?規模? 「保留原始圖像」?你能展示一幅想要的結果嗎? – MBo
雖然我覺得有點難以理解你想要達到的目標,但是聽起來好像你想要將藍色和紅色分組,並旋轉它自己,同時縮放將所有三條路徑放在一起的整個組,但是我不能相當肯定。特別是關於我不確定的黃色路徑。作爲MBo - 你可以創建一個繪圖。 –