缩放,旋转和移动垂直或水平翻转的SVG对象

时间:2014-05-30 18:46:10

标签: android matrix svg transformation flip

我最近问了一个关于如何垂直或水平翻转SVG对象的问题:

Scale and mirror SVG object

现在,以编程方式我希望能够移动,旋转和缩放对象,同时它仍然垂直或水平翻转。

我在Android应用中绘制所有常用对象,然后将其保存为SVG对象。我在Android上的所有计算工作都恰到好处。

当我导出到SVG时,我知道:每个对象属性(ScaleX,ScaleY,Rotation,CenterX,CenterY,MovedX,MovedY)和SVG文档的宽度,SVG文档的高度但我似乎无法获得它出口权利。我以为我解决了它,但随后出现了一些问题,我无法弄清楚是什么。而且我想我不可能是唯一一个想过这个问题的人,否则至少这个问题有用。

通过" touch"可以做什么的一个例子。在我的Android应用上输入:

  1. 从左,上到下,下方绘制一个矩形
  2. 在添加时:计算对象的中心(如果正确,则修复左侧等)保存为CenterX和CenterY
  3. 根据需要移动对象,将其保存为MoveX和MoveY(不会覆盖左/上/右/下)
  4. 旋转对象并将其转换为度数并将其另存为“旋转”
  5. 缩放对象,但不低于0.1刻度,并将其另存为ScaleX和ScaleY
  6. 将其导出为矩形(x =左,y =顶部,宽度=右 - 左,高=右下)
  7. 添加颜色,笔画等,然后"转换"属性。
  8. 当一个物体被缩放时,它会围绕它的中心缩放。旋转物体时,它会围绕物体的中心旋转。当它移动时,它会添加屏幕上当前触摸点与上一个触摸点之间的差异。

    现在如果设置了某些标志" VerticalFlip"或者" Horizo​​ntalFlip",Android在绘制它的同时绘制翻转的变体。导出时,它会检查对象是否具有这些标志之一。

    这是我如何计算的一个例子,但也许我完全错过了一些东西,或者我使事情变得复杂:

    http://pastebin.com/z7PDbusN

    每个算法下面还有一个链接,表明该算法至少在该实例中有效。

    现在当我保存它时,使用确切的系统。提供所有必要的值以正确导出它仍然无法正常工作。有些物体看起来恰到好处,其他物体完全变形。即使它们都被翻转,移动,旋转和缩放。导出的一些对象看起来与它们应该完全一样 - 而其他对象则不然。

    左边是应用程序中绘图的屏幕截图,右边是Inkscape中导出的SVG。 SVG大小=正在绘制它的屏幕大小。导出时不会缩放整个屏幕。此处的所有对象都已缩放,旋转和移动。只有这里的红色物体显然有些不对劲。

    enter image description here

0 个答案:

没有答案