首页 > 其他分享 >11.Transform抽象类

11.Transform抽象类

时间:2024-01-31 19:55:06浏览次数:19  
标签:11 转换 元素 Transform 旋转 RotateTransform 抽象类 public

在WPF框架中有一个抽象类叫Transform,它定义了实现二维平面中的转换的功能。它包括旋转 (RotateTransform)、缩放 (ScaleTransform)、倾斜 (SkewTransform) 和平移 (TranslateTransform)4个子类。它定义如何将点从一个坐标空间映射或转换到另一个坐标空间。 此映射由转换 Matrix 来描述,它是一个三行三列 Double 值的集合。

这个类可以实现控件的各种转换,比如放置、缩放、倾斜和平移。

public abstract class Transform : GeneralTransform, IResource
{
    public static Transform Identity { get; }
    public abstract Matrix Value { get; }
    public override GeneralTransform Inverse { get; }
 
    public static Transform Parse(string source);
    public Transform Clone();
    public Transform CloneCurrentValue();
    public override Rect TransformBounds(Rect rect);
    public override bool TryTransform(Point inPoint, out Point result);
 
}

Identity表示获取一个Transform 标识转换,

Value表示当前的Matrix矩阵变换,

Inverse表示获取当前转换的反函数,它的类型是GeneralTransform。

对于任何Transform对象,一旦使用它去变换某个元素后,它的Inverse属性就会有值。它是GeneralTransform类型,也就是一个变换器,用于将元素变换到原始状态,相当于是Transform的反向操作。需要注意的是,Inverse是用于返回到原始状态的,而不上一次转换的状态。

2D转换

由于直接操作矩阵去设置旋转、缩放、倾斜和移动功能比较复杂,WPF提供了4个子类来设置相应的功能。例如,借助 ScaleTransform 类,通过设置其 ScaleX 和 ScaleY 属性即可缩放对象,而无需操作转换矩阵。 同样,借助 RotateTransform 类,只需设置其 Angle 属性,即可旋转对象。

子类 说明 效果 备注
RotateTransform 按指定的 Angle 旋转元素。 表示旋转一个对象的角度
ScaleTransform 按指定的 ScaleX 和 ScaleY 量缩放元素。 表示放大或缩小一个对象
SkewTransform 按指定的 AngleX 和 AngleY 量倾斜元素。 表示倾斜一个对象
TranslateTransform 按指定的 X 和 Y 量移动(转换)元素。 表示移动一个对象
TransformGroup 将多个 TransformGroup 对象组合成单个 Transform,然后你可以应用它来转换属性。    
MatrixTransform 建其他 Transform 类不提供的自定义转换。 使用 MatrixTransform 时,可直接操作矩阵。  

 

转换和坐标系

转换对象时,不只是转换对象,还会转换该对象所在的坐标空间。 默认情况下,转换基于目标对象坐标系的原点 (0,0) 居中。 唯一例外是 TranslateTransform;由于其转换效果无论基于何处居中都相同,因此 TranslateTransform 没有可设置的中心属性。

以下示例使用 RotateTransform 围绕默认中心点 (0, 0) 将 Rectangle 元素(一种 FrameworkElement)旋转 45 度。 下图显示了旋转效果。

围绕点 (0,0) 旋转 45 度的矩形元素

<Canvas Width="200" Height="200">
  <Rectangle 
    Canvas.Left="100" Canvas.Top="100"
    Width="50" Height="50" 
    Fill="RoyalBlue" Opacity="1.0">
    <Rectangle.RenderTransform>
      <RotateTransform Angle="45" />
    </Rectangle.RenderTransform>
  </Rectangle>
</Canvas>

默认情况下,元素会围绕其左上角 (0, 0) 旋转。 RotateTransform、ScaleTransform 和 SkewTransform 类提供 CenterX 和 CenterY 属性,以便可以指定应用转换的点。

下面的示例也使用 RotateTransform 将 Rectangle 元素旋转 45 度;但是,这次对 CenterX 和 CenterY 属性进行了设置,使得 RotateTransform 以 (25, 25) 为中心。 下图显示了旋转效果。

围绕点 (25, 25) 旋转 45 度矩形元素

<Canvas Width="200" Height="200">
  <Rectangle 
    Canvas.Left="100" Canvas.Top="100"
    Width="50" Height="50" 
    Fill="RoyalBlue" Opacity="1.0">
    <Rectangle.RenderTransform>
      <RotateTransform Angle="45" CenterX="25" CenterY="25" />
    </Rectangle.RenderTransform>
  </Rectangle>
</Canvas>

 

FrameworkElement定义了两个有关转换的属性,分别是LayoutTransform和RenderTransform,前者在布局步骤前应用的转换,后者在布局步骤完成后应用,官方推荐使用RenderTransform,原因是可获得性能优势。另外,因为它们继承自 Animatable 类,所以 Transform 类可以被制作成动画。 若要对 Transform 进行动画处理,请将兼容类型的动画应用到要进行动画处理的属性

标签:11,转换,元素,Transform,旋转,RotateTransform,抽象类,public
From: https://www.cnblogs.com/MingQiu/p/17999981

相关文章

  • 关于Windows11的优化内容 - 进阶者系列 - 学习者系列文章
          这几天无事,想起上次刚重装的Windows11操作系统,对于系统优化的内容想记录一下,以前没写过相关的博文,这次就做个记录吧。对于Windows11,已经出来几年了,相关的设置啥的也有,就是优化方面的软件和设置也有相关的,这次就把笔者这边所有相关的优化工具软件和脚本啥的一并发布......
  • Windows 10 11 安全加固 仅供参考,请查阅资料清楚后使用
    WindowsRegistryEditorVersion5.00;设置密码策略[HKEY_LOCAL_MACHINE\SECURITY\Policies\PasswordPolicy]"MinimumPasswordLength"=dword:00000008"MaximumPasswordAge"=dword:00000030"PasswordComplexity"=dword:00000001"PasswordHi......
  • 1111 Online Map
    题目Inputourcurrentpositionandadestination,anonlinemapcanrecommendseveralpaths.Nowyourjobistorecommendtwopathstoyouruser:oneistheshortest,andtheotheristhefastest.Itisguaranteedthatapathexistsforanyrequest.Input......
  • 11.jmeter用户定义变量、请求头管理器、json提取器、CSV导入数据
     ......
  • Ubuntu22.04 & Win11 双系统hibernate热切换实现
    Ubuntu22.04&Win11双系统hibernate热切换实现目录Ubuntu22.04&Win11双系统hibernate热切换实现修改交换分区或交换文件修改交换分区获取对应硬盘的UUID修改交换文件如何使Ubuntu进入hibernate?参考文章使用命令free-m来查看当前还剩余的内存neo@NeoNeuxs:~$free-m......
  • Corretto-11源码-Java命令入口
    背景由于工作中需要开发编译器,开始阅读JavaC和JDK源码了解相关过程,并做出相关整理参考本文参考ChatGPT相关解释(很多内容都是杜撰,不可信),进行自我理解后整理发出项目https://github.com/corretto/corretto-11入口(src/java.base/share/native/libjli/java.c)入口文件为java.c......
  • 111
    if(oper==='query'){if(vm.billData.detailData['合同收付款条件表'].dataRows){constdetailData=vm.billData.detailData['合同收付款条件表'].dataRows;//vm.billData.detailData['合同收付款条件表'].dataRows=//detailData.slice().sort......
  • 洛谷题单指南-暴力枚举-P1157 组合的输出
    原题链接:https://www.luogu.com.cn/problem/P1157题意解读:在1~n的数中挑选r个,有多少种组合,与P1036类似,有两种做法:二进制法、DFS,下面给出DFS版的代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=25;intn,r;intt[N];voiddfs(intk){......
  • 李宏毅《机器学习》总结 - Transformer
    前言当时老师要求我做transformer和self-attention的ppt,结果当时在训练ACM没大有时间,就弄了个质量不高的,不出意外的被喷了。。。现在回头看看当时做的整体没有大问题,但是由于知识没有连贯起来导致有些地方没有提到,也没有形成一个比较完整的架构。Transformer能做的任务......
  • Go语言的100个错误使用场景(11-20)|项目组织和数据类型
    目录前言2.Codeandprojectorganization2.11没有使用函数式选项模式(#11)2.12项目缺乏组织(#12)2.13创建公共设施包(#13)2.14忽略包名的冲突(#14)2.15代码文档缺失(#15)2.16不使用code-linter(#16)3.Datatypes3.1八进制产生的混乱局面(#17)3.2忽略整型溢出(#18)3.3不理解浮点数(#19)3......