Knight school Ответов: 0

Умножение числа точек кривой Graphicspath


Привет,
Когда я добавляю кривую с массивом точек, точки умножаются.
Dim Temp_Pts_Orig23 As New List(Of PointF)

For Each Move In Code_stripped
Dim Temp_Point23 As Point3D = New Point3D(0, 0, 0)
Temp_Point23 = New Point3D(Move.X_point, Move.Y_point, Move.Z_point)
Temp_Point23 = Temp_Point23.RotateX(X_Rotate).RotateY(Y_Rotate).RotateZ(Z_Rotate)

Next
Colour_Path.AddCurve(Temp_Pts_Orig23.ToArray()) 'Array of 32 points

Но когда подсчет массивов делается после того, как их будет 93.
большое спасибо

Что я уже пробовал:

Это происходит только на кривой, а не на аддлайнах. Я попробовал flattern, чтобы получить 32 точки (приблизительно), но это испортит все остальные массивы, которые работают в тандеме.

Также пробовать :-
Colour_Path.AddCurve(Temp_Pts_Orig23.ToArray(), 0.0F, Temp_Pts_Orig23.Count - 1, 1.0F)


Есть ли способ остановить это и дать мне то, что мне нужно?

Ralf Meier

Что такое "Temp_Pts_Orig23" как вид типа и каково его содержание ?

Knight school

Извините, что я должен был добавить больше деталей.

Dim Temp_Pts_Orig23 As New List(Of PointF)

Ralf Meier

Извиняюсь... это мне не очень помогает ... Покажите полный код вашего метода (используйте "улучшить вопрос", чтобы добавить его) и скажите, когда этот метод вызывается ...

Ralf Meier

ОК... Я буду немного более конкретен :
Я видел, что вы добавили фрагмент кода к своему вопросу.

Вы создали новый тип Point3D, который имеет X, Y и Z-значения. 'Temp_Pts_Orig23' имеет тип PointF, который имеет только X и Y-значение.
Так как же эти 3D-координаты переводятся в 2D-координату ?
Приведите пример содержимого вашего списка (PointF) - все, что содержит этот список, будет непосредственно (без каких-либо умножений) преобразовано в массив с помощью метода ToArray.

Пожалуйста, помните: то, что вы делаете, для меня совершенно абстрактно - я не могу видеть то, что видите вы, и я не могу читать в ваших мыслях ... так что вы должны немного помочь, если вам нужна помощь ...

Knight school

Привет,
Point3D преобразует точки X,Y,Z в 2D-точки, чтобы они могли отображаться на экране. Что работает очень хорошо ,и количество очков в порядке (32 очка в & 32 очка вне). Проблема действительно заключается в том, чтобы добавить массив в graphicspath (добавить только кривую). Я добавляю 32 точки, и когда я делаю подсчет точек данных graphicspath, это 93. Поэтому, когда я хочу использовать тандемный массив с другой информацией, которая не является точками (цвет и т. д.), подсчеты выходят из синхронизации.

Я надеюсь, что это поможет понять проблему, с которой я столкнулся.

Ralf Meier

Сначала : если вы нажмете кнопку "ответить" на мой комментарий, я получу уведомление - если вы только напишете новый комментарий, Я не получу никакого ... :(

на ваш вопрос :
Если ваш список хорошо рассчитан и массив содержит правильное количество точек, то GraphicsPath также должен содержать эти точки ... но если вы вызовете этот метод дважды или более, все эти точки будут снова и снова добавляться в GraphicsPath. Может ли такое случиться ?
Если вы этого не хотите, вам следует создать новый GraphicsPath, прежде чем добавлять в него данные Кривой.
Вот почему я спросил вас о коде (этого) метода и о том, когда он вызывается (вы не ответили на него).

Knight school

Извините за то, что не был более ясен в объяснении.

Массив работает не более одного раза, насколько я могу видеть.

Метод (для каждого) называется массивом расшифрованного текста в отдельные данные, которые этот метод циклически перебирает и дает мне список точек (которые являются точками на 3D-кривой). Затем цикл преобразуется в 2D-точки для рисования на экране(которые также можно вращать в 3D (перемещение мыши с помощью левого клика).

Причина наличия отдельных графических путей в том, что они могут быть прослежены до исходной позиции кода.

Я надеюсь, что это поможет (я не привык использовать форум, так как обычно нахожу ответ в сети, но после нескольких дней поиска никто, похоже, не столкнулся с этой проблемой)

Ralf Meier

Мне очень жаль, что я не могу прямо указать вам на решение ... :(
Я понимаю, что вы хотите иметь-независимое, если вы хотите проследить путь GraphicsPath-оно должно содержать только те элементы, которые необходимы.
Вы уже посмотрели отладчик и точку останова в своем коде ? Почему вы так уверены, что этот код действительно вызывается только один раз ? Обычно .Net-элементы управления запускают свой OnPaint-метод несколько раз и с каждым изменением свойств, которые вызывают недействительность.
Каково содержание вашего GrphicsPath ? Повторяется ли содержимое вашего массива 2 или 3 раза ...?

Knight school

Я добавил подсчет очков, чтобы увидеть, если он добавляет точку более одного раза, но он всегда возвращается один раз.

Я пытался
Colour_Path.AddCurve(Temp_Pts_Orig23.ToArray (), 0.0 F, Temp_Pts_Orig23.Отсчет-1, 1.0 F)

Который устанавливает сегменты в число массивов, но всегда больше точек.

Knight school

Я добавил обходной путь, имея 2 graphicspath (1 для draw-point count not important & 1 Для point count & point positions, которые я использовал в addlines, точка которых остается неизменной.

вдвое больше работы, но это не замедляет процесс.

Еще бы знать, зачем лишние очки на будущее?

Ralf Meier

Извините... теперь я проверил это сам. Я не мог себе представить, что это ошибка фреймворка ...
Что происходит, так это то, что для каждой точки из вашего массива точек 3 точки были вставлены в GraphicsPath методом AddCurve. Я думаю, что это происходит от сплайн-функции этого метода (но это не соответствует точечным значениям ...).
Я также не нашел способа остановить эту "функцию".
Поэтому мое единственное предложение может быть следующим: работайте с Аддинами (как вы написали в своем вопросе), чтобы убедиться, что количество точек в графическом пути совпадает с точками, которые действительно существуют.
Еще раз извините за мои предыдущие комментарии ... что вело в неверном направлении ...

Но... еще раз на ваш вопрос: почему вы не хотели использовать Аддлайны ? Вам нужно было что-то вроде округления Кривой-данных ?

Knight school

Мне нужна кривая как можно более точная и не граненая,но точки предназначены для анимации. Точки не будут проблемой (простая частота кадров) и будут равномерно распределены, но добавленные дополнительные точки не будут (возможно, как вы сказали, просто точки на сплайне).

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

Спасибо
Для тебя время.

0 Ответов