如何旋转 TPathData(矢量路径)?

时间:2021-02-08 06:03:50

标签: delphi vector firemonkey

我有 TPathData 箭头并直接在 Canvas 上绘制。如何旋转 TPathData?我知道旋转 Tpath,但我直接在画布上绘制(线条和箭头)。我尝试旋转 Tpath 和 get Data 字符串 - 但它和以前一样。

2 个答案:

答案 0 :(得分:4)

您必须先创建一个 rotation matrix,然后再创建一个 apply it

M := TMatrix.CreateRotation(DegToRad(90));  
PathData.ApplyMatrix(M);

答案 1 :(得分:4)

与其旋转TPathData,为什么不在绘制路径之前设置TCanvas矩阵呢?这可能更高效,因为 GPU 负责旋转,而且数值也更稳定,因为如果您旋转多次,您的路径数据点不会失去任何精度。

<CollectionView 
                        x:Name="ColTotIcon" 
                        Grid.Row="1"
                        Grid.ColumnSpan="5"
                        Margin="10"
                        HorizontalOptions="Center"
                        SelectionMode="Single"
                        IsGrouped="True">
                        <CollectionView.ItemsLayout>
                            <GridItemsLayout Orientation="Vertical" Span="8" VerticalItemSpacing="5" HorizontalItemSpacing="9"/>
                        </CollectionView.ItemsLayout>
                        <CollectionView.GroupHeaderTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="10"/>
                                        <RowDefinition Height="20"/>
                                        <RowDefinition Height="20"/>
                                    </Grid.RowDefinitions>
                                    <Button Grid.Row="0" BackgroundColor="Transparent"/>
                                    <Label 
                                        Grid.Row="1"
                                        Text="{Binding Name}"
                                        TextColor="Black"
                                        FontSize="15">
                                    </Label>
                                    <Button Grid.Row="2" BackgroundColor="Transparent"/>
                                </Grid>
                            </DataTemplate>
                        </CollectionView.GroupHeaderTemplate>
                        <CollectionView.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="25"/>
                                    </Grid.RowDefinitions>
                                    <Image Grid.Row="0" Source="{Binding isSource}"/>
                                    <Button Grid.Row="0" BackgroundColor="Transparent" Clicked="SelectIconActivity_Clicked" />
                                </Grid>
                            </DataTemplate>
                        </CollectionView.ItemTemplate>
                    </CollectionView>