Умножение числа точек кривой 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
Мне нужна кривая как можно более точная и не граненая,но точки предназначены для анимации. Точки не будут проблемой (простая частота кадров) и будут равномерно распределены, но добавленные дополнительные точки не будут (возможно, как вы сказали, просто точки на сплайне).
Обходной путь, похоже, работает без большой вычислительной мощности.
Спасибо
Для тебя время.