WedX - журнал о программировании и компьютерных науках

Получение точек по XAML Shapes.Path

Я пытаюсь получить точки вдоль объекта Shapes.Path из файла Silverlight MainWindow.xaml. Я использую Expression Blend для создания пути.

Следующий код работает нормально, если я не попытаюсь переместить путь в сочетании выражений, которое перемещает только поля. По-видимому, это не вычисляется, и я получаю точки, откуда изначально был создан путь.

        var pathGeometry = path.Data.GetFlattenedPathGeometry();
        var currentPoint = new System.Windows.Point();
        var tangentPoint = new System.Windows.Point();
        var rList = new List<Point>();
        var pointsCount = 10;
        for (int i = 0; i < pointsCount; i++)
        {                
            double fraction = (double)i / (double)(pointsCount - 1);

            pathGeometry.GetPointAtFractionLength(fraction, out currentPoint, out tangentPoint);

            rList.Add(currentPoint);
        }
        return rList;

Любые предложения о том, как получить изменение маржи, чтобы также рассчитать?


  • Нельзя ли просто добавить или вычесть маржу? 03.07.2012

Ответы:


1

А... Кажется, я вижу проблему. PathGeometry не наследуется от UIElement, т.е. не имеют никакого смысла Margins. Геометрия размещается в элементе управления, который делает это, и именно этот элемент управления фактически рисует геометрию на экране. Если вы хотите перевести точку на геометрии в экранные координаты, вам нужно будет найти местоположение основного элемента управления и вычислить смещение.

Я предполагаю, что ваша PathGeometry размещена внутри Path контроль. (Запутанно, не так ли?) Получить местоположение в экранных координатах относительно просто. Вы можете вызвать метод PointToScreen для пути и подайте ему рассчитанную точку (возможно, добавив любые отступы, которые вы можете применить). Получить точку относительно окна сложнее. Вы можете вызвать PointToScreen (для точки 0,0) в окне, а затем вычесть точку пути из окна. Или вы можете поместить Path внутрь Canvas (где Canvas находится непосредственно внутри окна) и просто получить Canvas.Top и Canvas.Left.

Вы не говорите, какова ваша конечная цель, поэтому сложно порекомендовать конкретное решение для вас.

03.07.2012
  • Спасибо, вы дали мне несколько полезных идей, чтобы попробовать. 03.07.2012
  • Итак, PointToScreen, по-видимому, не работает при простом импорте XAML в класс, потому что он предназначен для включения положения окна. Мне нужно получить точки относительно положения сетки, внутри которой находится путь. Я думаю, может быть, мне нужно будет найти края моего пути, а затем попытаться вычислить перевод на основе разницы между этим и полями от краев сетки. 05.07.2012
  • @ zmarks22 zmarks22 - Вы до сих пор не объяснили свою конечную цель в этом проекте, но я улавливаю намеки на то, что вы, возможно, пытаетесь впихнуть WPF в выполнение задач, для которых он не предназначен. Для .NET доступны некоторые графические сборки. Вы рассматривали их? Вот один, который я нашел через codeplex: graphlib.codeplex.com 05.07.2012
  • Это определенно взлом. Я пытаюсь использовать Expression Blend для создания линий, а затем использую xaml для создания точек, которые отправляются с использованием JSON для рендеринга библиотекой javascript для рендеринга точек на экране. 05.07.2012
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]