Как я могу добавить от 1 до x в парах (x, y) в данных геометрии пути, а затем заменить старые данные новыми? - PullRequest
1 голос
/ 17 апреля 2019

Спасибо за помощь!У меня есть несколько простых кодов C #, показанных ниже

public partial class MainWindow : Window
{
   string data_1 = "M-4.31151201443541,459.82996768458L4.78848798556448,444.929957684579...z";

   //......

   private void timer_Tick(object sender, EventArgs e)
   {
      data_2 = Regex.Replace(data_1, "((?=[^, ])\\d+\\.\\d+),", (match) => (double.Parse(match.Groups[1].Value) + 1).ToString()+",");

      Mountain.SetValue(Canvas.ClipProperty,Geometry.Parse(data_2));
   }
}

Я хотел бы изменить data_1 (исходные данные геометрии из пути в WPF ), добавив 1 ккаждый (x, y) соединяется в нем, затем помещает его в ClipProperty холста.

Теперь, что меня действительно смущает, так это то, куда я должен поместить Коды 1, 2 и 3 , как я должен их определить, и как мне расположить data_1 и data_2 (я должен заменить все data_2 на data_1 . Если я определю code_2 как string data_2 ......, программа будет иметьошибка результата. Если я поставлю var перед кодом 2 , кажется, что Mountain.ClipProperty не изменится. Я действительно запутался во всех этих вещах.

Что я должен сделать, чтобы изменить clipProperty of Mountain ?

Спасибо!

full data_1 показано здесь: full data_1

PS У меня есть таймер в этой программе, поэтому эти коды будут запускаться снова и снова. Если я поставлю это так, как есть, я думаю, что каждый раз, когда code_2 будет иметь тот же результат, потому что data_1 от code_1

1 Ответ

0 голосов
/ 18 апреля 2019

Ниже мой xmal для моего пути

<Grid x:Name="LayoutRoot">
    <Canvas ......>
        <Canvas ......>
            <Canvas x:Name="Color" Height="234.4" Width="288" Canvas.Top="-48.967" Canvas.Left="-97.6">
               <......>
            </Canvas>
            <Canvas ......>
            <Canvas ......>
                <Path x:Name="mountain" Data="..." ... KeyDown="path_KeyDown"/>
            </Canvas>
        </Canvas>
    </Canvas>
</Grid>

Моя цель - цвет холст и гора (целые данные из цвета показаны здесь .

Вот несколько картинок для вас. Это оригинальная картинка. Я хочу использовать гора , чтобы обрезать форму цвет как это . Чтобы переместить гору , я бы хотел использовать keyDown , а именно: если я нажму клавишу, гора переместится на 1 выше по сравнению с первоначальным местом, чтобы изменить клип из цвет .

Ниже приведены некоторые коды, объединяющие keyDown и ваш

    private void path_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
    {

        if (e.KeyStates == Keyboard.GetKeyStates(Key.Up))
        {
        var clipGeom = ((Geometry)this.Resources["mountain"]).Clone();
        var yTransform = new TranslateTransform();
        clipGeom.Transform = yTransform;
        Color.Clip = clipGeom;
        var yAnim = new DoubleAnimation { From = 0, To = 900, Duration= new Duration(TimeSpan.FromMilliseconds(9000)) };
        yTransform.BeginAnimation(TranslateTransform.YProperty, yAnim);
        }
    }

Но после запуска этой программы гора никогда не двигается, когда я нажимаю клавишу. Кроме того, я думаю, что {} после DoubleAnimation также следует немного изменить, чтобы он соответствовал моей операции keyDown . Как мне это сделать?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...