[英]How to rotate an ArcSegment around ellipse center
I have 2 shapes: one ellipse and one circle.I want to rotate circle around ellipse's center. 我有两种形状:一个椭圆和一个圆。我想绕椭圆的中心旋转圆。
<Path Stroke="Indigo" StrokeThickness="3" RenderTransformOrigin="0.5,0.5"
Data="M 50 50 A 50 50 0 0 0 42.5 26.2">
<Path.RenderTransform>
<RotateTransform Angle="270"/>
</Path.RenderTransform>
</Path>
<Ellipse Stroke="Black" Width="50" Height="50"/>
Here is what I want 这就是我想要的
First make sure that both shapes use the same coordinate system. 首先确保两个形状使用相同的坐标系。 You could draw both as a
Path
, one with an EllipseGeometry
, the other with a PathGeometry
, in a common Canvas parent. 您可以在公共的Canvas父级
PathGeometry
两者绘制为Path
,一个绘制为EllipseGeometry
,另一个绘制为PathGeometry
。 The upper left corner of the Canvas defines the coordinate origin. 画布的左上角定义坐标原点。
<Canvas Margin="100">
<Path Stroke="Black">
<Path.Data>
<EllipseGeometry RadiusX="50" RadiusY="50"/>
</Path.Data>
</Path>
<Path Stroke="LightBlue" StrokeThickness="5">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="0,-50">
<ArcSegment Point="42.5,-26.2" Size="50,50"
IsLargeArc="False" SweepDirection="Clockwise"/>
</PathFigure>
<PathGeometry.Transform>
<RotateTransform Angle="15"/>
</PathGeometry.Transform>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
Now adjust the ArcSegment's Point
and the RotateTransform's Angle
according to your needs. 现在,根据需要调整ArcSegment的
Point
和RotateTransform的Angle
。
Update: you could add an animation that constantly rotates the arc segment like this: 更新:您可以添加一个不断旋转弧段的动画,如下所示:
<Path Stroke="LightBlue" StrokeThickness="5">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="0,-50">
<ArcSegment Point="42.5,-26.2" Size="50,50"
IsLargeArc="False" SweepDirection="Clockwise"/>
</PathFigure>
<PathGeometry.Transform>
<RotateTransform x:Name="transform"/>
</PathGeometry.Transform>
</PathGeometry>
</Path.Data>
<Path.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="transform"
Storyboard.TargetProperty="Angle"
To="360" Duration="0:0:2" RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Path.Triggers>
</Path>
Or without explictly naming the RotateTransform: 或未明确命名RotateTransform:
<Path Stroke="LightBlue" StrokeThickness="5">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="0,-50">
<ArcSegment Point="42.5,-26.2" Size="50,50"
IsLargeArc="False" SweepDirection="Clockwise"/>
</PathFigure>
<PathGeometry.Transform>
<RotateTransform/>
</PathGeometry.Transform>
</PathGeometry>
</Path.Data>
<Path.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Data.Transform.Angle"
To="360" Duration="0:0:2" RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Path.Triggers>
</Path>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.